bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 13/13] parsers: issue tname with i18n markup


From: Akim Demaille
Subject: [PATCH 13/13] parsers: issue tname with i18n markup
Date: Sat, 18 Jan 2020 16:40:12 +0100

Some users would like to avoid having to "parse" the *.y file to find
the strings to translate.  Let's issue the translatable tokens with N_
to allow "parsing" the generated parsers instead.

See
https://lists.gnu.org/archive/html/bison-patches/2019-01/msg00015.html

* src/output.c (prepare_symbol_names): Issue symbol_names with N_()
markup.
---
 src/output.c  | 8 +++++++-
 tests/calc.at | 1 +
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/output.c b/src/output.c
index 6f1e9f45..0b1c546c 100644
--- a/src/output.c
+++ b/src/output.c
@@ -206,7 +206,9 @@ prepare_symbol_names (char const *muscle_name)
         : quotearg_alloc (symbols[i]->tag, -1, qo);
       /* Width of the next token, including the two quotes, the
          comma and the space.  */
-      int width = strlen (cp) + 2;
+      int width
+        = strlen (cp) + 2
+        + (!quote && symbols[i]->translatable ? strlen ("N_()") : 0);
 
       if (j + width > 75)
         {
@@ -216,7 +218,11 @@ prepare_symbol_names (char const *muscle_name)
 
       if (i)
         obstack_1grow (&format_obstack, ' ');
+      if (!quote && symbols[i]->translatable)
+        obstack_sgrow (&format_obstack, "N_(");
       obstack_escape (&format_obstack, cp);
+      if (!quote && symbols[i]->translatable)
+        obstack_1grow (&format_obstack, ')');
       free (cp);
       obstack_1grow (&format_obstack, ',');
       j += width;
diff --git a/tests/calc.at b/tests/calc.at
index 7ed7f891..81b783c4 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -422,6 +422,7 @@ void location_print (FILE *o, Span s);
   ]AT_YYLEX_DECLARE_EXTERN[
 
   ]AT_TOKEN_TRANSLATE_IF([[
+#define N_
     static
     const char *
     _ (const char *cp)
-- 
2.24.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]