]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
xgettext: In language Vala, fix a format string handling bug.
authorBruno Haible <bruno@clisp.org>
Wed, 7 Jun 2023 15:22:03 +0000 (17:22 +0200)
committerBruno Haible <bruno@clisp.org>
Wed, 7 Jun 2023 16:58:32 +0000 (18:58 +0200)
* gettext-tools/src/xgettext.c (xgettext_record_flag): Store format_c related
flags also in flag_table_vala.
* gettext-tools/tests/xgettext-vala-5: New file.
* gettext-tools/tests/Makefile.am (TESTS): Add it.

gettext-tools/src/xgettext.c
gettext-tools/tests/Makefile.am
gettext-tools/tests/xgettext-vala-5 [new file with mode: 0755]

index d891bb00e82be1ff07baeb54d2852da9aa738c91..968aaf4576bcff49653285b1606e3f16eccec482 100644 (file)
@@ -1481,6 +1481,16 @@ xgettext_record_flag (const char *optionstring)
             if (strlen (format_language[type]) == n
                 && memcmp (format_language[type], p, n) == 0)
               {
+                /* This dispatch does the reverse mapping of all the SCANNERS_*
+                   macros defined in the x-*.h files.  For example,
+                   SCANNERS_JAVA contains an entry
+                     { ...,
+                       &flag_table_java,
+                       &formatstring_java, &formatstring_java_printf
+                     }
+                   Therefore here, we have to associate
+                     format_java          with   flag_table_java at index 0,
+                     format_java_printf   with   flag_table_java at index 1.  */
                 switch (type)
                   {
                   case format_c:
@@ -1499,6 +1509,9 @@ xgettext_record_flag (const char *optionstring)
                     flag_context_list_table_insert (&flag_table_objc, 0,
                                                     name_start, name_end,
                                                     argnum, value, pass);
+                    flag_context_list_table_insert (&flag_table_vala, 0,
+                                                    name_start, name_end,
+                                                    argnum, value, pass);
                     break;
                   case format_objc:
                     flag_context_list_table_insert (&flag_table_objc, 1,
index 4670cad9df0dd20d56e47488407defc3f63ce6e7..108e66186a628dfedeacd98b80da43a61b1dc4ed 100644 (file)
@@ -161,6 +161,7 @@ TESTS = gettext-1 gettext-2 \
        xgettext-tcl-stackovfl-1 xgettext-tcl-stackovfl-2 \
        xgettext-tcl-stackovfl-3 xgettext-tcl-stackovfl-4 \
        xgettext-vala-1 xgettext-vala-2 xgettext-vala-3 xgettext-vala-4 \
+       xgettext-vala-5 \
        xgettext-vala-stackovfl-1 xgettext-vala-stackovfl-2 \
        xgettext-ycp-1 xgettext-ycp-2 xgettext-ycp-3 xgettext-ycp-4 \
        xgettext-ycp-stackovfl-1 xgettext-ycp-stackovfl-2 \
diff --git a/gettext-tools/tests/xgettext-vala-5 b/gettext-tools/tests/xgettext-vala-5
new file mode 100755 (executable)
index 0000000..44d4be3
--- /dev/null
@@ -0,0 +1,30 @@
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test Vala support: pass-c-format.
+
+: ${XGETTEXT=xgettext}
+
+cat <<\EOF > xg-vala-5.vala
+printf (_("blablaQ %d and %s"), a, b);
+printf (_("blablaQ {0} and {1}"), a, b);
+EOF
+
+${XGETTEXT} --omit-header --no-location -o xg-vala-5.tmp xg-vala-5.vala || Exit 1
+func_filter_POT_Creation_Date xg-vala-5.tmp xg-vala-5.po
+
+cat <<\EOF > xg-vala-5.ok
+#, c-format
+msgid "blablaQ %d and %s"
+msgstr ""
+
+#, c-format
+msgid "blablaQ {0} and {1}"
+msgstr ""
+EOF
+
+: ${DIFF=diff}
+${DIFF} xg-vala-5.ok xg-vala-5.po
+result=$?
+
+exit $result