mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-17 23:08:40 +02:00
Compare commits
7 Commits
ba4d44664f
...
bc7c57e53b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc7c57e53b | ||
|
|
88aacb3905 | ||
|
|
a894076bfc | ||
|
|
82e068fcca | ||
|
|
a119d97539 | ||
|
|
01afb63a3d | ||
|
|
54fccabdfe |
@@ -343,6 +343,11 @@ The line following \fB# translations\fR is a JSON object (on a single
|
||||
line) containing all of the entries of the translation table. Back-ends that
|
||||
are not interested in the translation table can simply read and discard
|
||||
the next line.
|
||||
.RS
|
||||
If \fBRemind\fR sends data for multiple months, then only the first month
|
||||
will include the translation table.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B # rem2ps begin
|
||||
This line signifies the start of calendar data. Back-ends can search
|
||||
@@ -447,6 +452,10 @@ This line signifies that the next line will be the translation table.
|
||||
The line following \fB# translations\fR is a JSON object (on a single
|
||||
line) containing all of the entries of the translation table. Back-ends that
|
||||
are not interested in the translation table can simply read and discard
|
||||
.RS
|
||||
If \fBRemind\fR sends data for multiple months, then only the first month
|
||||
will include the translation table.
|
||||
.RE
|
||||
.TP
|
||||
.B # rem2ps2 begin
|
||||
This line signifies the start of calendar data. Back-ends can search
|
||||
@@ -678,7 +687,8 @@ The year of the following month. (The same as \fByear\fR unless the
|
||||
current month is December.)
|
||||
.TP
|
||||
.B translations \fR{\fIobject\fR}
|
||||
A complete dump of the Remind translation table.
|
||||
A complete dump of the Remind translation table. In output for multiple
|
||||
months, the translation table is included only with the first month.
|
||||
.TP
|
||||
.B entries \fR[\fIarray\fR]
|
||||
The \fBentries\fR key consists of an array of calendar entries; each
|
||||
|
||||
@@ -5727,8 +5727,10 @@ then \fBRemind\fR \fIalso\fR makes a corresponding translation
|
||||
table entry automatically. This is done for all of the translation-related
|
||||
system variables \fIexcept for\fR \fB$Hplu\fR and \fB$Mplu\fR.
|
||||
.PP
|
||||
The converse does not apply; creating a translation table entry for
|
||||
"December" does not automatically set \fB$December\fR.
|
||||
The converse applies too; creating a translation table for
|
||||
"December" automatically sets \fB$December\fR. And if you invoke
|
||||
\fBTRANSLATE CLEAR\fR, then all translation-related system variables
|
||||
are set to their default values as well.
|
||||
.PP
|
||||
The translation table always contains a special entry \fBLANGID\fR whose
|
||||
default value is \fBen\fR. Translators are encouraged to add a \fBLANGID\fR
|
||||
|
||||
@@ -690,7 +690,7 @@ sub draw_day_cell
|
||||
} else {
|
||||
$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAC6SURBVDiNpdNNbsIwFATgL0HKolchHKBX6yFaBOEyoPYUabvOIVKJRaCL2JX5TRNGGvnJ8ozGz89cYoElPvET+BX2yivn/1Bggw5HHMKa1h2qcPZC/JEIhvh+brIZIY6sorhMYo9hh3KGFzzfa84NZNjDt9OG/ZcH1BlaPE1IAG0+URhxzNGESKPFaHJs9Q0Ziww7HnvGeXSrJhis0jiFfjwnj3I0WRv+TKtr4hQl3lDrZ6QN9Wt654hfWfGDmBpUwDkAAAAASUVORK5CYII=';
|
||||
}
|
||||
$title = t('New Moon');
|
||||
$title = escape_html(t('New Moon'));
|
||||
$alt = 'new';
|
||||
} elsif ($phase == 1) {
|
||||
if ($Options{pngs}) {
|
||||
@@ -698,7 +698,7 @@ sub draw_day_cell
|
||||
} else {
|
||||
$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADfSURBVDiNndM9TsNAFATgzy5yjZSAE85JBygETgENUPF3iBCitHAFQkcIhZ/Ryn9gRlrZmp2Z3ef3TBOHOMULPrDBMrhpi/4HI5xjix2+4nmJRbx/Yh7ahvkpRPVV4QDXwT3UQy46zGkAZDgK/iytefvHgCrkJsqZUH6cLnNbABSxd5Jhhf1IbkMXv8Qux7hH1Ic1xvk/jBWy6gavumvtwx7ectwZXkKh7MA95XgObeOtpI2U4zl0kGbpxgiPvwQUcXLrKFchc82f6Ur0PK49azOnmOI4TBu84zm4SV38DeIVYkrYJyNbAAAAAElFTkSuQmCC';
|
||||
}
|
||||
$title = t('First Quarter');
|
||||
$title = escape_html(t('First Quarter'));
|
||||
$alt = '1st';
|
||||
} elsif ($phase == 2) {
|
||||
if ($Options{pngs}) {
|
||||
@@ -707,7 +707,7 @@ sub draw_day_cell
|
||||
$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADlSURBVDiNrdNBUsJAEAXQlyw4hq4hwWPqTixET6ELkZ16CcAq7oFLqXExjaYgQVNlV/Viev7/6XT/4TjGuME7PiLXUatb8N8xwB12SFjiIXIZtU/MAntEfgvQE4YtHxhiHpjXQ5H7uLhEcaLLAleBvd0Xx9Ha/BdyU+Q5OBV5OKmj7a4YBWdSyNPe4aKHAHkzqcQZNj3JgnNexqE8heyIAulffuFF3kTfIVbBVeu/xoXGGsn2TLJJ/mqkafNiINszySYZdbS90GHlvcgsWktY4TFy7ecxTdvIzahxHQLbyFXUqkPwF2ASRNYgB/PXAAAAAElFTkSuQmCC';
|
||||
}
|
||||
$alt = 'full';
|
||||
$title = t('Full Moon');
|
||||
$title = escape_html(t('Full Moon'));
|
||||
} else {
|
||||
if ($Options{pngs}) {
|
||||
$img = smoosh($Options{imgbase}, 'lastquarter.png');
|
||||
@@ -715,7 +715,7 @@ sub draw_day_cell
|
||||
$img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADmSURBVDiNndMxTsNAEIXhzy5yCyQ6FAgcE7oQheQWUAAl5BIkREoZrgB0GFNkHBl7bURGsryaee/3jHeXdpxjghU+8InXyI0S+n0MMEeBEi+4jfV3vAvMQtsyL0J0j2GtViaeRRMyj8IlsgY8BSijE2Kur/hy09wHKMJrEolhwtwHKDHOsI4OLnoAXfl1jiNsOkR9keE4P8D4q4scbzg5xIxtjie709f1E7siC+9+Gx/8fxvPKtEsklcJSBdgWhcN8ByFR5z+AWgd5QpyE+OUWOJO+zJNU+Z6jHAdgHe7K73CuD5zFT9nCmRDIssCaAAAAABJRU5ErkJggg==';
|
||||
}
|
||||
$alt = 'last';
|
||||
$title = t('Last Quarter');
|
||||
$title = escape_html(t('Last Quarter'));
|
||||
}
|
||||
if ($Options{nostyle}) {
|
||||
print("<div style=\"float: left\"><img border=\"0\" width=\"16\" height=\"16\" alt=\"$alt\" title=\"$title\" src=\"$img\">$msg</div>");
|
||||
|
||||
@@ -996,19 +996,25 @@ static void DoSimpleCalendarOneMonth(void)
|
||||
if (PsCal) {
|
||||
FromDSE(DSEToday, &y, &m, &d);
|
||||
if (PsCal == PSCAL_LEVEL1) {
|
||||
SendTranslationTable(PsCal);
|
||||
if (!DidAMonth) {
|
||||
SendTranslationTable(PsCal);
|
||||
}
|
||||
printf("%s\n", PSBEGIN);
|
||||
} else if (PsCal == PSCAL_LEVEL2) {
|
||||
SendTranslationTable(PsCal);
|
||||
if (!DidAMonth) {
|
||||
SendTranslationTable(PsCal);
|
||||
}
|
||||
printf("%s\n", PSBEGIN2);
|
||||
} else {
|
||||
if (DidAMonth) {
|
||||
printf(",\n");
|
||||
}
|
||||
printf("{\n");
|
||||
printf("\"translations\":");
|
||||
SendTranslationTable(PsCal);
|
||||
printf(",");
|
||||
if (!DidAMonth) {
|
||||
printf("\"translations\":");
|
||||
SendTranslationTable(PsCal);
|
||||
printf(",");
|
||||
}
|
||||
}
|
||||
if (PsCal < PSCAL_LEVEL3) {
|
||||
printf("%s %d %d %d %d\n",
|
||||
|
||||
@@ -997,7 +997,7 @@ static void InitializeVar(char const *str)
|
||||
}
|
||||
|
||||
if (*varname == '$') {
|
||||
r=SetSysVar(varname+1, &val);
|
||||
r=SetSysVar(varname+1, &val, 1);
|
||||
DestroyValue(val);
|
||||
if (r) fprintf(ErrFp, GetErr(M_I_OPTION), GetErr(r));
|
||||
return;
|
||||
|
||||
@@ -113,7 +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 InsertTranslation(char const *orig, char const *translated, int propagate_to_sysvar);
|
||||
void DumpTranslationTable(FILE *fp, int json);
|
||||
int DoErrMsg (ParsePtr p);
|
||||
int ClearGlobalOmits (void);
|
||||
@@ -182,7 +182,7 @@ int GetValidHebDate (int yin, int min, int din, int adarbehave, int *mout, int *
|
||||
int GetNextHebrewDate (int dsestart, int hm, int hd, int yahr, int adarbehave, int *ans);
|
||||
int ComputeJahr (int y, int m, int d, int *ans);
|
||||
int GetSysVar (char const *name, Value *val);
|
||||
int SetSysVar (char const *name, Value *val);
|
||||
int SetSysVar (char const *name, Value *val, int propagate_translation);
|
||||
void DumpSysVarByName (char const *name);
|
||||
int CalcMinsFromUTC (int dse, int tim, int *mins, int *isdst);
|
||||
void FillParagraph (char const *s, DynamicBuffer *output);
|
||||
@@ -267,7 +267,10 @@ void InitDedupeTable(void);
|
||||
|
||||
void InitVars(void);
|
||||
void InitUserFunctions(void);
|
||||
void ClearSysvarTranslations(void);
|
||||
void PropagateTranslationToSysvar(char const *orig, char const *translated);
|
||||
void InitTranslationTable(void);
|
||||
void RemoveSysvarTranslation(char const *orig);
|
||||
char const *GetTranslatedString(char const *orig);
|
||||
int GetTranslatedStringTryingVariants(char const *orig, DynamicBuffer *out);
|
||||
char const *GetErr(int r);
|
||||
|
||||
21
src/trans.c
21
src/trans.c
@@ -100,6 +100,7 @@ ClearTranslationTable(void)
|
||||
XlateItem *item;
|
||||
XlateItem *next;
|
||||
|
||||
ClearSysvarTranslations();
|
||||
item = hash_table_next(&TranslationTable, NULL);
|
||||
while(item) {
|
||||
next = hash_table_next(&TranslationTable, item);
|
||||
@@ -205,7 +206,7 @@ InitTranslationTable(void)
|
||||
fprintf(stderr, "Unable to initialize translation hash table: Out of memory. Exiting.\n");
|
||||
exit(1);
|
||||
}
|
||||
InsertTranslation("LANGID", "en");
|
||||
InsertTranslation("LANGID", "en", 1);
|
||||
}
|
||||
|
||||
static XlateItem *
|
||||
@@ -219,7 +220,7 @@ FindTranslation(char const *orig)
|
||||
}
|
||||
|
||||
int
|
||||
InsertTranslation(char const *orig, char const *translated)
|
||||
InsertTranslation(char const *orig, char const *translated, int propagate_to_sysvar)
|
||||
{
|
||||
XlateItem *item = FindTranslation(orig);
|
||||
if (item) {
|
||||
@@ -229,11 +230,22 @@ InsertTranslation(char const *orig, char const *translated)
|
||||
}
|
||||
RemoveTranslation(item);
|
||||
}
|
||||
|
||||
/* TRANSLATE "foo" "foo" means to remove the translation */
|
||||
if (strcmp(orig, "LANGID") && (!strcmp(orig, translated))) {
|
||||
if (propagate_to_sysvar) {
|
||||
RemoveSysvarTranslation(orig);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
item = AllocateXlateItem(orig, translated);
|
||||
if (!item) {
|
||||
return E_NO_MEM;
|
||||
}
|
||||
hash_table_insert(&TranslationTable, item);
|
||||
if (propagate_to_sysvar) {
|
||||
PropagateTranslationToSysvar(orig, translated);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -359,9 +371,10 @@ DoTranslate(ParsePtr p)
|
||||
XlateItem *item = FindTranslation(DBufValue(&orig));
|
||||
if (item) {
|
||||
RemoveTranslation(item);
|
||||
RemoveSysvarTranslation(DBufValue(&orig));
|
||||
}
|
||||
if (!strcmp(DBufValue(&orig), "LANGID")) {
|
||||
InsertTranslation("LANGID", "en");
|
||||
InsertTranslation("LANGID", "en", 1);
|
||||
}
|
||||
r = OK;
|
||||
}
|
||||
@@ -374,7 +387,7 @@ DoTranslate(ParsePtr p)
|
||||
DBufFree(&translated);
|
||||
return r;
|
||||
}
|
||||
r = InsertTranslation(DBufValue(&orig), DBufValue(&translated));
|
||||
r = InsertTranslation(DBufValue(&orig), DBufValue(&translated), 1);
|
||||
DBufFree(&orig);
|
||||
DBufFree(&translated);
|
||||
return r;
|
||||
|
||||
153
src/var.c
153
src/var.c
@@ -36,6 +36,7 @@ static int IntMin = INT_MIN;
|
||||
static int IntMax = INT_MAX;
|
||||
|
||||
static hash_table VHashTbl;
|
||||
static int SetSysVarHelper(SysVar *v, Value *value, int propagate_translation);
|
||||
|
||||
static unsigned int VarHashFunc(void *x)
|
||||
{
|
||||
@@ -624,7 +625,7 @@ int DoSet (Parser *p)
|
||||
return E_EXPECTING_EOL;
|
||||
}
|
||||
DBufFree(&buf2);
|
||||
if (*DBufValue(&buf) == '$') r = SetSysVar(DBufValue(&buf)+1, &v);
|
||||
if (*DBufValue(&buf) == '$') r = SetSysVar(DBufValue(&buf)+1, &v, 1);
|
||||
else r = SetVar(DBufValue(&buf), &v);
|
||||
if (buf.len > VAR_NAME_LEN) {
|
||||
Wprint("Warning: Variable name `%.*s...' truncated to `%.*s'",
|
||||
@@ -957,60 +958,102 @@ static SysVar SysVarArr[] = {
|
||||
{"Wednesday", 1, STR_TYPE, &DynamicDayName[2], 0, 0 }
|
||||
};
|
||||
|
||||
typedef struct translatable_var {
|
||||
char **var;
|
||||
char const *word;
|
||||
char const *sysvar_name;
|
||||
} TranslatableVar;
|
||||
|
||||
static TranslatableVar translatables[] = {
|
||||
{ &DynamicAgo, "ago", "Ago" },
|
||||
{ &DynamicAm, "am", "Am" },
|
||||
{ &DynamicAnd, "and", "And" },
|
||||
{ &DynamicAt, "at", "At" },
|
||||
{ &DynamicFromnow, "from now", "Fromnow" },
|
||||
{ &DynamicHour, "hour", "Hour" },
|
||||
{ &DynamicIs, "is", "Is" },
|
||||
{ &DynamicMinute, "minute", "Minute" },
|
||||
{ &DynamicNow, "now", "Now" },
|
||||
{ &DynamicOn, "on", "On" },
|
||||
{ &DynamicPm, "pm", "Pm" },
|
||||
{ &DynamicToday, "today", "Today" },
|
||||
{ &DynamicTomorrow, "tomorrow", "Tomorrow" },
|
||||
{ &DynamicWas, "was", "Was" },
|
||||
{ &DynamicMonthName[0], "January", "January" },
|
||||
{ &DynamicMonthName[1], "February", "February" },
|
||||
{ &DynamicMonthName[2], "March", "March" },
|
||||
{ &DynamicMonthName[3], "April", "April" },
|
||||
{ &DynamicMonthName[4], "May", "May" },
|
||||
{ &DynamicMonthName[5], "June", "June" },
|
||||
{ &DynamicMonthName[6], "July", "July" },
|
||||
{ &DynamicMonthName[7], "August", "August" },
|
||||
{ &DynamicMonthName[8], "September", "September" },
|
||||
{ &DynamicMonthName[9], "October", "October" },
|
||||
{ &DynamicMonthName[10], "November", "November" },
|
||||
{ &DynamicMonthName[11], "December", "December" },
|
||||
{ &DynamicDayName[0], "Monday", "Monday" },
|
||||
{ &DynamicDayName[1], "Tuesday", "Tuesday" },
|
||||
{ &DynamicDayName[2], "Wednesday", "Wednesday" },
|
||||
{ &DynamicDayName[3], "Thursday", "Thursday" },
|
||||
{ &DynamicDayName[4], "Friday", "Friday" },
|
||||
{ &DynamicDayName[5], "Saturday", "Saturday" },
|
||||
{ &DynamicDayName[6], "Sunday", "Sunday" },
|
||||
};
|
||||
|
||||
#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);
|
||||
|
||||
size_t i;
|
||||
for (i=0; i<sizeof(translatables) / sizeof(translatables[0]); i++) {
|
||||
if (var == translatables[i].var) {
|
||||
InsertTranslation(translatables[i].word, *(translatables[i].var), 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
/***************************************************************/
|
||||
/* */
|
||||
/* SetSysVar */
|
||||
/* */
|
||||
/* Set a system variable to the indicated value. */
|
||||
/* */
|
||||
/***************************************************************/
|
||||
int SetSysVar(char const *name, Value *value)
|
||||
|
||||
void RemoveSysvarTranslation(char const *orig) {
|
||||
PropagateTranslationToSysvar(orig, orig);
|
||||
}
|
||||
|
||||
void PropagateTranslationToSysvar(char const *orig, char const *translated)
|
||||
{
|
||||
size_t i;
|
||||
Value val;
|
||||
for (i=0; i<sizeof(translatables) / sizeof(translatables[0]); i++) {
|
||||
if (!strcmp(translatables[i].word, orig)) {
|
||||
val.type = STR_TYPE;
|
||||
val.v.str = StrDup(translated);
|
||||
if (val.v.str) {
|
||||
(void) SetSysVar(translatables[i].sysvar_name, &val, 0);
|
||||
DestroyValue(val);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ClearSysvarTranslations(void)
|
||||
{
|
||||
Value val;
|
||||
size_t i;
|
||||
for (i=0; i<sizeof(translatables) / sizeof(translatables[0]); i++) {
|
||||
val.type = STR_TYPE;
|
||||
val.v.str = StrDup(translatables[i].word);
|
||||
if (val.v.str) {
|
||||
(void) SetSysVar(translatables[i].sysvar_name, &val, 0);
|
||||
}
|
||||
DestroyValue(val);
|
||||
}
|
||||
}
|
||||
|
||||
static int SetSysVarHelper(SysVar *v, Value *value, int propagate_translation)
|
||||
{
|
||||
int r;
|
||||
SysVar *v = FindSysVar(name);
|
||||
if (!v) return E_NOSUCH_VAR;
|
||||
if (!v->modifiable) {
|
||||
Eprint("%s: `$%s'", GetErr(E_CANT_MODIFY), name);
|
||||
Eprint("%s: `$%s'", GetErr(E_CANT_MODIFY), v->name);
|
||||
return E_CANT_MODIFY;
|
||||
}
|
||||
|
||||
@@ -1035,7 +1078,9 @@ 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);
|
||||
if (propagate_translation) {
|
||||
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;
|
||||
@@ -1044,6 +1089,20 @@ int SetSysVar(char const *name, Value *value)
|
||||
return OK;
|
||||
}
|
||||
|
||||
/***************************************************************/
|
||||
/* */
|
||||
/* SetSysVar */
|
||||
/* */
|
||||
/* Set a system variable to the indicated value. */
|
||||
/* */
|
||||
/***************************************************************/
|
||||
int SetSysVar(char const *name, Value *value, int propagate_translation)
|
||||
{
|
||||
SysVar *v = FindSysVar(name);
|
||||
if (!v) return E_NOSUCH_VAR;
|
||||
return SetSysVarHelper(v, value, propagate_translation);
|
||||
}
|
||||
|
||||
/***************************************************************/
|
||||
/* */
|
||||
/* GetSysVar */
|
||||
|
||||
122
tests/test.cmp
122
tests/test.cmp
@@ -16106,10 +16106,130 @@ _("MOO") => "MOO"
|
||||
_("meow") => "chirp"
|
||||
_("Meow") => "Chirp"
|
||||
_("MEOW") => "Chirp"
|
||||
# Translation table
|
||||
TRANSLATE "LANGID" "en"
|
||||
TRANSLATE "June" "translated-June"
|
||||
TRANSLATE "was" "translated-Was"
|
||||
TRANSLATE "December" "translated-December"
|
||||
TRANSLATE "October" "translated-October"
|
||||
TRANSLATE "April" "translated-April"
|
||||
TRANSLATE "at" "translated-At"
|
||||
TRANSLATE "and" "translated-And"
|
||||
TRANSLATE "Wednesday" "translated-Wednesday"
|
||||
TRANSLATE "ago" "translated-Ago"
|
||||
TRANSLATE "hour" "translated-Hour"
|
||||
TRANSLATE "July" "translated-July"
|
||||
TRANSLATE "minute" "translated-Minute"
|
||||
TRANSLATE "September" "translated-September"
|
||||
TRANSLATE "Saturday" "translated-Saturday"
|
||||
TRANSLATE "Thursday" "translated-Thursday"
|
||||
TRANSLATE "January" "translated-January"
|
||||
TRANSLATE "Tuesday" "translated-Tuesday"
|
||||
TRANSLATE "November" "translated-November"
|
||||
TRANSLATE "tomorrow" "translated-Tomorrow"
|
||||
TRANSLATE "today" "translated-Today"
|
||||
TRANSLATE "is" "translated-Is"
|
||||
TRANSLATE "from now" "translated-Fromnow"
|
||||
TRANSLATE "Friday" "translated-Friday"
|
||||
TRANSLATE "am" "translated-Am"
|
||||
TRANSLATE "Sunday" "translated-Sunday"
|
||||
TRANSLATE "Monday" "translated-Monday"
|
||||
TRANSLATE "March" "translated-March"
|
||||
TRANSLATE "pm" "translated-Pm"
|
||||
TRANSLATE "August" "translated-August"
|
||||
TRANSLATE "May" "translated-May"
|
||||
TRANSLATE "February" "translated-February"
|
||||
TRANSLATE "on" "translated-On"
|
||||
TRANSLATE "now" "translated-Now"
|
||||
$Ago is otherway-Ago
|
||||
$Am is otherway-Am
|
||||
$And is otherway-And
|
||||
$At is otherway-At
|
||||
$Fromnow is otherway-Fromnow
|
||||
$Hour is otherway-Hour
|
||||
$Is is otherway-Is
|
||||
$Minute is otherway-Minute
|
||||
$Now is otherway-Now
|
||||
$On is otherway-On
|
||||
$Pm is otherway-Pm
|
||||
$Today is otherway-Today
|
||||
$Tomorrow is otherway-Tomorrow
|
||||
$Was is otherway-Was
|
||||
$January is otherway-January
|
||||
$February is otherway-February
|
||||
$March is otherway-March
|
||||
$April is otherway-April
|
||||
$May is otherway-May
|
||||
$June is otherway-June
|
||||
$July is otherway-July
|
||||
$August is otherway-August
|
||||
$September is otherway-September
|
||||
$October is otherway-October
|
||||
$November is otherway-November
|
||||
$December is otherway-December
|
||||
$Monday is otherway-Monday
|
||||
$Tuesday is otherway-Tuesday
|
||||
$Wednesday is otherway-Wednesday
|
||||
$Thursday is otherway-Thursday
|
||||
$Friday is otherway-Friday
|
||||
$Saturday is otherway-Saturday
|
||||
$Sunday is otherway-Sunday
|
||||
# Translation table
|
||||
TRANSLATE "LANGID" "en"
|
||||
$Ago is ago
|
||||
$Am is am
|
||||
$And is and
|
||||
$At is at
|
||||
$Fromnow is from now
|
||||
$Hour is hour
|
||||
$Is is is
|
||||
$Minute is minute
|
||||
$Now is now
|
||||
$On is on
|
||||
$Pm is pm
|
||||
$Today is today
|
||||
$Tomorrow is tomorrow
|
||||
$Was is was
|
||||
$January is January
|
||||
$February is February
|
||||
$March is March
|
||||
$April is April
|
||||
$May is May
|
||||
$June is June
|
||||
$July is July
|
||||
$August is August
|
||||
$September is September
|
||||
$October is October
|
||||
$November is November
|
||||
$December is December
|
||||
$Monday is Monday
|
||||
$Tuesday is Tuesday
|
||||
$Wednesday is Wednesday
|
||||
$Thursday is Thursday
|
||||
$Friday is Friday
|
||||
$Saturday is Saturday
|
||||
$Sunday is Sunday
|
||||
set $Is "foo"
|
||||
set $Was "bar"
|
||||
TRANSLATE DUMP
|
||||
# Translation table
|
||||
TRANSLATE "LANGID" "en"
|
||||
TRANSLATE "was" "bar"
|
||||
TRANSLATE "is" "foo"
|
||||
TRANSLATE "is" "is"
|
||||
TRANSLATE "was"
|
||||
TRANSLATE DUMP
|
||||
# Translation table
|
||||
TRANSLATE "LANGID" "en"
|
||||
MSG $Is is [$Is]%
|
||||
$Is is is
|
||||
MSG $Was is [$Was]%
|
||||
$Was is was
|
||||
DEBUG -e
|
||||
Var hash: total = 100141; maxlen = 5; avglen = 1.142
|
||||
Func hash: total = 100016; maxlen = 5; avglen = 1.140
|
||||
Dedup hash: total = 10000; maxlen = 7; avglen = 1.828
|
||||
Trans hash: total = 4; maxlen = 1; avglen = 0.235
|
||||
Trans hash: total = 1; maxlen = 1; avglen = 0.059
|
||||
Expression nodes allocated: 300096
|
||||
Expression nodes high-water: 300073
|
||||
Expression nodes leaked: 0
|
||||
|
||||
157
tests/test.rem
157
tests/test.rem
@@ -1274,6 +1274,163 @@ set a _("meow")
|
||||
set a _("Meow")
|
||||
set a _("MEOW")
|
||||
|
||||
# Check bidirectional connection between system variables and translation
|
||||
# tables
|
||||
DEBUG -x
|
||||
TRANSLATE CLEAR
|
||||
|
||||
SET $Ago "translated-Ago"
|
||||
SET $Am "translated-Am"
|
||||
SET $And "translated-And"
|
||||
SET $At "translated-At"
|
||||
SET $Fromnow "translated-Fromnow"
|
||||
SET $Hour "translated-Hour"
|
||||
SET $Is "translated-Is"
|
||||
SET $Minute "translated-Minute"
|
||||
SET $Now "translated-Now"
|
||||
SET $On "translated-On"
|
||||
SET $Pm "translated-Pm"
|
||||
SET $Today "translated-Today"
|
||||
SET $Tomorrow "translated-Tomorrow"
|
||||
SET $Was "translated-Was"
|
||||
SET $January "translated-January"
|
||||
SET $February "translated-February"
|
||||
SET $March "translated-March"
|
||||
SET $April "translated-April"
|
||||
SET $May "translated-May"
|
||||
SET $June "translated-June"
|
||||
SET $July "translated-July"
|
||||
SET $August "translated-August"
|
||||
SET $September "translated-September"
|
||||
SET $October "translated-October"
|
||||
SET $November "translated-November"
|
||||
SET $December "translated-December"
|
||||
SET $Monday "translated-Monday"
|
||||
SET $Tuesday "translated-Tuesday"
|
||||
SET $Wednesday "translated-Wednesday"
|
||||
SET $Thursday "translated-Thursday"
|
||||
SET $Friday "translated-Friday"
|
||||
SET $Saturday "translated-Saturday"
|
||||
SET $Sunday "translated-Sunday"
|
||||
|
||||
TRANSLATE DUMP
|
||||
|
||||
TRANSLATE CLEAR
|
||||
TRANSLATE "ago" "otherway-Ago"
|
||||
TRANSLATE "am" "otherway-Am"
|
||||
TRANSLATE "and" "otherway-And"
|
||||
TRANSLATE "at" "otherway-At"
|
||||
TRANSLATE "from now" "otherway-Fromnow"
|
||||
TRANSLATE "hour" "otherway-Hour"
|
||||
TRANSLATE "is" "otherway-Is"
|
||||
TRANSLATE "minute" "otherway-Minute"
|
||||
TRANSLATE "now" "otherway-Now"
|
||||
TRANSLATE "on" "otherway-On"
|
||||
TRANSLATE "pm" "otherway-Pm"
|
||||
TRANSLATE "today" "otherway-Today"
|
||||
TRANSLATE "tomorrow" "otherway-Tomorrow"
|
||||
TRANSLATE "was" "otherway-Was"
|
||||
TRANSLATE "January" "otherway-January"
|
||||
TRANSLATE "February" "otherway-February"
|
||||
TRANSLATE "March" "otherway-March"
|
||||
TRANSLATE "April" "otherway-April"
|
||||
TRANSLATE "May" "otherway-May"
|
||||
TRANSLATE "June" "otherway-June"
|
||||
TRANSLATE "July" "otherway-July"
|
||||
TRANSLATE "August" "otherway-August"
|
||||
TRANSLATE "September" "otherway-September"
|
||||
TRANSLATE "October" "otherway-October"
|
||||
TRANSLATE "November" "otherway-November"
|
||||
TRANSLATE "December" "otherway-December"
|
||||
TRANSLATE "Monday" "otherway-Monday"
|
||||
TRANSLATE "Tuesday" "otherway-Tuesday"
|
||||
TRANSLATE "Wednesday" "otherway-Wednesday"
|
||||
TRANSLATE "Thursday" "otherway-Thursday"
|
||||
TRANSLATE "Friday" "otherway-Friday"
|
||||
TRANSLATE "Saturday" "otherway-Saturday"
|
||||
TRANSLATE "Sunday" "otherway-Sunday"
|
||||
|
||||
MSG $Ago is [$Ago]%
|
||||
MSG $Am is [$Am]%
|
||||
MSG $And is [$And]%
|
||||
MSG $At is [$At]%
|
||||
MSG $Fromnow is [$Fromnow]%
|
||||
MSG $Hour is [$Hour]%
|
||||
MSG $Is is [$Is]%
|
||||
MSG $Minute is [$Minute]%
|
||||
MSG $Now is [$Now]%
|
||||
MSG $On is [$On]%
|
||||
MSG $Pm is [$Pm]%
|
||||
MSG $Today is [$Today]%
|
||||
MSG $Tomorrow is [$Tomorrow]%
|
||||
MSG $Was is [$Was]%
|
||||
MSG $January is [$January]%
|
||||
MSG $February is [$February]%
|
||||
MSG $March is [$March]%
|
||||
MSG $April is [$April]%
|
||||
MSG $May is [$May]%
|
||||
MSG $June is [$June]%
|
||||
MSG $July is [$July]%
|
||||
MSG $August is [$August]%
|
||||
MSG $September is [$September]%
|
||||
MSG $October is [$October]%
|
||||
MSG $November is [$November]%
|
||||
MSG $December is [$December]%
|
||||
MSG $Monday is [$Monday]%
|
||||
MSG $Tuesday is [$Tuesday]%
|
||||
MSG $Wednesday is [$Wednesday]%
|
||||
MSG $Thursday is [$Thursday]%
|
||||
MSG $Friday is [$Friday]%
|
||||
MSG $Saturday is [$Saturday]%
|
||||
MSG $Sunday is [$Sunday]%
|
||||
|
||||
TRANSLATE CLEAR
|
||||
TRANSLATE DUMP
|
||||
MSG $Ago is [$Ago]%
|
||||
MSG $Am is [$Am]%
|
||||
MSG $And is [$And]%
|
||||
MSG $At is [$At]%
|
||||
MSG $Fromnow is [$Fromnow]%
|
||||
MSG $Hour is [$Hour]%
|
||||
MSG $Is is [$Is]%
|
||||
MSG $Minute is [$Minute]%
|
||||
MSG $Now is [$Now]%
|
||||
MSG $On is [$On]%
|
||||
MSG $Pm is [$Pm]%
|
||||
MSG $Today is [$Today]%
|
||||
MSG $Tomorrow is [$Tomorrow]%
|
||||
MSG $Was is [$Was]%
|
||||
MSG $January is [$January]%
|
||||
MSG $February is [$February]%
|
||||
MSG $March is [$March]%
|
||||
MSG $April is [$April]%
|
||||
MSG $May is [$May]%
|
||||
MSG $June is [$June]%
|
||||
MSG $July is [$July]%
|
||||
MSG $August is [$August]%
|
||||
MSG $September is [$September]%
|
||||
MSG $October is [$October]%
|
||||
MSG $November is [$November]%
|
||||
MSG $December is [$December]%
|
||||
MSG $Monday is [$Monday]%
|
||||
MSG $Tuesday is [$Tuesday]%
|
||||
MSG $Wednesday is [$Wednesday]%
|
||||
MSG $Thursday is [$Thursday]%
|
||||
MSG $Friday is [$Friday]%
|
||||
MSG $Saturday is [$Saturday]%
|
||||
MSG $Sunday is [$Sunday]%
|
||||
|
||||
DEBUG +e
|
||||
set $Is "foo"
|
||||
set $Was "bar"
|
||||
TRANSLATE DUMP
|
||||
TRANSLATE "is" "is"
|
||||
TRANSLATE "was"
|
||||
TRANSLATE DUMP
|
||||
MSG $Is is [$Is]%
|
||||
MSG $Was is [$Was]%
|
||||
DEBUG -e
|
||||
|
||||
# Output expression-node stats
|
||||
DEBUG +s
|
||||
|
||||
|
||||
@@ -310009,3 +310009,4 @@ REM MSG Dedup-9996
|
||||
REM MSG Dedup-9997
|
||||
REM MSG Dedup-9998
|
||||
REM MSG Dedup-9999
|
||||
set $DedupeReminders 0
|
||||
|
||||
Reference in New Issue
Block a user