summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorAkim Demaille <akim.demaille@gmail.com>2020-02-07 08:40:35 +0100
committerAkim Demaille <akim.demaille@gmail.com>2020-02-08 11:24:53 +0100
commit18a7cfc7cf5b9da09d7f5c3c0c5b14de93a07dce (patch)
tree6f2a269572a62dc0d2abb3d4ca74a3bbea0c6dcf /data
parent088356cb2f57216cd2026fa4145ece14f3c0ab16 (diff)
downloadbison-18a7cfc7cf5b9da09d7f5c3c0c5b14de93a07dce.tar.gz
java: make the syntax error format string translatable
The error format should be translated, but contrary to the case of C/C++, we cannot just depend on macros to adapt on the presence/absence of '_'. Let's consider that the message format is to be translated iff there are some internationalized tokens. * src/output.c (prepare_symbol_names): Define b4_has_translations. * data/skeletons/java.m4 (b4_trans): New. * data/skeletons/lalr1.java: Use it to emit translatable or not the format string.
Diffstat (limited to 'data')
-rw-r--r--data/skeletons/java.m47
-rw-r--r--data/skeletons/lalr1.java16
2 files changed, 15 insertions, 8 deletions
diff --git a/data/skeletons/java.m4 b/data/skeletons/java.m4
index 5c015640..920f34bc 100644
--- a/data/skeletons/java.m4
+++ b/data/skeletons/java.m4
@@ -226,6 +226,13 @@ m4_define([b4_symbol_translate],
[[_($1)]])
+# b4_trans(STRING)
+# ----------------
+# Translate a symbol. Avoid collision with b4_translate.
+m4_define([b4_trans],
+[m4_if(b4_has_translations, 0, [$1], [_($1)])])
+
+
# b4_symbol_value(VAL, [SYMBOL-NUM], [TYPE-TAG])
# ----------------------------------------------
diff --git a/data/skeletons/lalr1.java b/data/skeletons/lalr1.java
index f74ac646..a85f38b0 100644
--- a/data/skeletons/lalr1.java
+++ b/data/skeletons/lalr1.java
@@ -945,18 +945,18 @@ b4_dollar_popdef[]dnl
String[] yystr = new String[yycount];
for (int yyi = 0; yyi < yycount; ++yyi)
yystr[yyi] = yysymbolName (yyarg[yyi]);
- MessageFormat yyformat;
+ String yyformat;
switch (yycount)
{
default:
- case 0: yyformat = new MessageFormat ("syntax error"); break;
- case 1: yyformat = new MessageFormat ("syntax error, unexpected {0}"); break;
- case 2: yyformat = new MessageFormat ("syntax error, unexpected {0}, expecting {1}"); break;
- case 3: yyformat = new MessageFormat ("syntax error, unexpected {0}, expecting {1} or {2}"); break;
- case 4: yyformat = new MessageFormat ("syntax error, unexpected {0}, expecting {1} or {2} or {3}"); break;
- case 5: yyformat = new MessageFormat ("syntax error, unexpected {0}, expecting {1} or {2} or {3} or {4}"); break;
+ case 0: yyformat = ]b4_trans(["syntax error"])[; break;
+ case 1: yyformat = ]b4_trans(["syntax error, unexpected {0}"])[; break;
+ case 2: yyformat = ]b4_trans(["syntax error, unexpected {0}, expecting {1}"])[; break;
+ case 3: yyformat = ]b4_trans(["syntax error, unexpected {0}, expecting {1} or {2}"])[; break;
+ case 4: yyformat = ]b4_trans(["syntax error, unexpected {0}, expecting {1} or {2} or {3}"])[; break;
+ case 5: yyformat = ]b4_trans(["syntax error, unexpected {0}, expecting {1} or {2} or {3} or {4}"])[; break;
}
- return yyformat.format (yystr);
+ return new MessageFormat (yyformat).format (yystr);
}
]])[
return "syntax error";