diff --git a/src/protos.h b/src/protos.h index 4558dbbb..709c4deb 100644 --- a/src/protos.h +++ b/src/protos.h @@ -113,6 +113,7 @@ int DoBanner (ParsePtr p); int DoRun (ParsePtr p); int DoExpr (ParsePtr p); int DoTranslate (ParsePtr p); +int InsertTranslation(char const *orig, char const *translated); int DoErrMsg (ParsePtr p); int ClearGlobalOmits (void); int DoClear (ParsePtr p); diff --git a/src/trans.c b/src/trans.c index 2ba6043e..0006a385 100644 --- a/src/trans.c +++ b/src/trans.c @@ -182,7 +182,7 @@ FindTranslation(char const *orig) return item; } -static int +int InsertTranslation(char const *orig, char const *translated) { XlateItem *item = FindTranslation(orig); diff --git a/src/var.c b/src/var.c index 27b0e6da..01e20d91 100644 --- a/src/var.c +++ b/src/var.c @@ -952,6 +952,44 @@ static SysVar SysVarArr[] = { #define NUMSYSVARS ( sizeof(SysVarArr) / sizeof(SysVar) ) static void DumpSysVar (char const *name, const SysVar *v); + +static void HandleTranslatableVariable(char **var) +{ + if (var == (char **) &DynamicAgo) InsertTranslation("ago", *var); + else if (var == (char **) &DynamicAm) InsertTranslation("am", *var); + else if (var == (char **) &DynamicAnd) InsertTranslation("and", *var); + else if (var == (char **) &DynamicAt) InsertTranslation("at", *var); + else if (var == (char **) &DynamicFromnow) InsertTranslation("from now", *var); + else if (var == (char **) &DynamicHour) InsertTranslation("hour", *var); + else if (var == (char **) &DynamicIs) InsertTranslation("is", *var); + else if (var == (char **) &DynamicMinute) InsertTranslation("minute", *var); + else if (var == (char **) &DynamicNow) InsertTranslation("now", *var); + else if (var == (char **) &DynamicOn) InsertTranslation("on", *var); + else if (var == (char **) &DynamicPm) InsertTranslation("pm", *var); + else if (var == (char **) &DynamicToday) InsertTranslation("today", *var); + else if (var == (char **) &DynamicTomorrow) InsertTranslation("tomorrow", *var); + else if (var == (char **) &DynamicWas) InsertTranslation("was", *var); + else if (var == (char **) &DynamicMonthName[0]) InsertTranslation("January", *var); + else if (var == (char **) &DynamicMonthName[1]) InsertTranslation("February", *var); + else if (var == (char **) &DynamicMonthName[2]) InsertTranslation("March", *var); + else if (var == (char **) &DynamicMonthName[3]) InsertTranslation("April", *var); + else if (var == (char **) &DynamicMonthName[4]) InsertTranslation("May", *var); + else if (var == (char **) &DynamicMonthName[5]) InsertTranslation("June", *var); + else if (var == (char **) &DynamicMonthName[6]) InsertTranslation("July", *var); + else if (var == (char **) &DynamicMonthName[7]) InsertTranslation("August", *var); + else if (var == (char **) &DynamicMonthName[8]) InsertTranslation("September", *var); + else if (var == (char **) &DynamicMonthName[9]) InsertTranslation("October", *var); + else if (var == (char **) &DynamicMonthName[10]) InsertTranslation("November", *var); + else if (var == (char **) &DynamicMonthName[11]) InsertTranslation("December", *var); + else if (var == (char **) &DynamicDayName[0]) InsertTranslation("Monday", *var); + else if (var == (char **) &DynamicDayName[1]) InsertTranslation("Tuesday", *var); + else if (var == (char **) &DynamicDayName[2]) InsertTranslation("Wednesday", *var); + else if (var == (char **) &DynamicDayName[3]) InsertTranslation("Thursday", *var); + else if (var == (char **) &DynamicDayName[4]) InsertTranslation("Friday", *var); + else if (var == (char **) &DynamicDayName[5]) InsertTranslation("Saturday", *var); + else if (var == (char **) &DynamicDayName[6]) InsertTranslation("Sunday", *var); + +} /***************************************************************/ /* */ /* SetSysVar */ @@ -990,6 +1028,7 @@ int SetSysVar(char const *name, Value *value) v->been_malloced = 1; *((char **) v->value) = value->v.str; value->type = ERR_TYPE; /* So that it's not accidentally freed */ + HandleTranslatableVariable((char **) v->value); } else { if (v->max != ANY && value->v.val > v->max) return E_2HIGH; if (v->min != ANY && value->v.val < v->min) return E_2LOW; diff --git a/tests/test.cmp b/tests/test.cmp index 1efeae50..8468c5ef 100644 --- a/tests/test.cmp +++ b/tests/test.cmp @@ -5999,9 +5999,75 @@ _("Bar") => "Bar" set a _("Quux") _("Quux") => "OOOGHY" +SET $ago "Txago" +SET $am "Txam" +SET $and "Txand" +SET $at "Txat" +SET $fromnow "Txfromnow" +SET $hour "Txhour" +SET $is "Txis" +SET $minute "Txminute" +SET $now "Txnow" +SET $on "Txon" +SET $pm "Txpm" +SET $today "Txtoday" +SET $tomorrow "Txtomorrow" +SET $was "Txwas" +SET $January "TxJanuary" +SET $February "TxFebruary" +SET $March "TxMarch" +SET $April "TxApril" +SET $May "TxMay" +SET $June "TxJune" +SET $July "TxJuly" +SET $August "TxAugust" +SET $September "TxSeptember" +SET $October "TxOctober" +SET $November "TxNovember" +SET $December "TxDecember" +SET $Monday "TxMonday" +SET $Tuesday "TxTuesday" +SET $Wednesday "TxWednesday" +SET $Thursday "TxThursday" +SET $Friday "TxFriday" +SET $Saturday "TxSaturday" +SET $Sunday "TxSunday" TRANSLATE DUMP -"Wookie" "Bar" +"April" "TxApril" "Quux" "OOOGHY" +"hour" "Txhour" +"am" "Txam" +"now" "Txnow" +"tomorrow" "Txtomorrow" +"January" "TxJanuary" +"on" "Txon" +"May" "TxMay" +"October" "TxOctober" +"Thursday" "TxThursday" +"and" "Txand" +"was" "Txwas" +"July" "TxJuly" +"at" "Txat" +"February" "TxFebruary" +"Sunday" "TxSunday" +"Wednesday" "TxWednesday" +"minute" "Txminute" +"December" "TxDecember" +"ago" "Txago" +"pm" "Txpm" +"March" "TxMarch" +"Friday" "TxFriday" +"Wookie" "Bar" +"Monday" "TxMonday" +"September" "TxSeptember" +"June" "TxJune" +"Tuesday" "TxTuesday" +"is" "Txis" +"August" "TxAugust" +"November" "TxNovember" +"from now" "Txfromnow" +"Saturday" "TxSaturday" +"today" "Txtoday" # Output expression-node stats DEBUG +s @@ -6010,7 +6076,7 @@ EXIT Var hash: total = 141; maxlen = 4; avglen = 1.785 Func hash: total = 17; maxlen = 3; avglen = 1.000 Dedup hash: total = 0; maxlen = 0; avglen = 0.000 -Trans hash: total = 2; maxlen = 1; avglen = 0.118 +Trans hash: total = 35; maxlen = 4; avglen = 0.946 Expression nodes allocated: 128 Expression nodes high-water: 74 Expression nodes leaked: 0 diff --git a/tests/test.rem b/tests/test.rem index 55930902..8bf796ff 100644 --- a/tests/test.rem +++ b/tests/test.rem @@ -1209,6 +1209,39 @@ set a _("Wookie") set a _("Bar") set a _("Quux") +SET $ago "Txago" +SET $am "Txam" +SET $and "Txand" +SET $at "Txat" +SET $fromnow "Txfromnow" +SET $hour "Txhour" +SET $is "Txis" +SET $minute "Txminute" +SET $now "Txnow" +SET $on "Txon" +SET $pm "Txpm" +SET $today "Txtoday" +SET $tomorrow "Txtomorrow" +SET $was "Txwas" +SET $January "TxJanuary" +SET $February "TxFebruary" +SET $March "TxMarch" +SET $April "TxApril" +SET $May "TxMay" +SET $June "TxJune" +SET $July "TxJuly" +SET $August "TxAugust" +SET $September "TxSeptember" +SET $October "TxOctober" +SET $November "TxNovember" +SET $December "TxDecember" +SET $Monday "TxMonday" +SET $Tuesday "TxTuesday" +SET $Wednesday "TxWednesday" +SET $Thursday "TxThursday" +SET $Friday "TxFriday" +SET $Saturday "TxSaturday" +SET $Sunday "TxSunday" TRANSLATE DUMP # Output expression-node stats