diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2020-02-07 08:40:35 +0100 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2020-02-08 11:24:53 +0100 |
commit | 18a7cfc7cf5b9da09d7f5c3c0c5b14de93a07dce (patch) | |
tree | 6f2a269572a62dc0d2abb3d4ca74a3bbea0c6dcf /data | |
parent | 088356cb2f57216cd2026fa4145ece14f3c0ab16 (diff) | |
download | bison-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.m4 | 7 | ||||
-rw-r--r-- | data/skeletons/lalr1.java | 16 |
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"; |