]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Fix handling of \x and \u escape sequences in Tcl.
authorDaiki Ueno <ueno@gnu.org>
Tue, 25 Jun 2013 03:24:47 +0000 (12:24 +0900)
committerDaiki Ueno <ueno@gnu.org>
Tue, 25 Jun 2013 03:32:39 +0000 (12:32 +0900)
gettext-tools/src/ChangeLog
gettext-tools/src/x-tcl.c
gettext-tools/tests/ChangeLog
gettext-tools/tests/Makefile.am
gettext-tools/tests/xgettext-tcl-4 [new file with mode: 0644]

index ce6b6c873ad9a960cc539d360cf18bccf02793b9..4b0b4e49cb6a3c6746ce93bc97179157ebcf1fd4 100644 (file)
@@ -1,3 +1,10 @@
+2013-06-25  Daiki Ueno  <ueno@gnu.org>
+
+       Fix handling of \x and \u escape sequences in Tcl.
+       * x-tcl.c (do_getc_escaped): Fix handling of \x and \u.
+       Reported by Guido Berhoerster in
+       <https://lists.gnu.org/archive/html/bug-gettext/2013-06/msg00022.html>.
+
 2013-06-17  Daiki Ueno  <ueno@gnu.org>
 
        * x-python.c (init_flag_table_python): Enable python-brace-format
index 82bf19d81026b6d4f5b260a8f28b1a0356ef8671..2b57e3f1c7b9a1d288dce0c4a8dc7635ffe85d2b 100644 (file)
@@ -496,7 +496,10 @@ do_getc_escaped ()
           {
             c = phase1_getc ();
             if (c == EOF || !c_isxdigit ((unsigned char) c))
-              break;
+              {
+                phase1_ungetc (c);
+                break;
+              }
 
             if (c >= '0' && c <= '9')
               n = (n << 4) + (c - '0');
@@ -505,7 +508,6 @@ do_getc_escaped ()
             else if (c >= 'a' && c <= 'f')
               n = (n << 4) + (c - 'a' + 10);
           }
-        phase1_ungetc (c);
         return (i > 0 ? (unsigned char) n : 'x');
       }
     case 'u':
@@ -517,7 +519,10 @@ do_getc_escaped ()
           {
             c = phase1_getc ();
             if (c == EOF || !c_isxdigit ((unsigned char) c))
-              break;
+              {
+                phase1_ungetc (c);
+                break;
+              }
 
             if (c >= '0' && c <= '9')
               n = (n << 4) + (c - '0');
@@ -526,7 +531,6 @@ do_getc_escaped ()
             else if (c >= 'a' && c <= 'f')
               n = (n << 4) + (c - 'a' + 10);
           }
-        phase1_ungetc (c);
         return (i > 0 ? n : 'u');
       }
     case '0': case '1': case '2': case '3': case '4':
index 2ed5f275c2d7781d500fd3fd98fe0d3b50dd7a53..f036e07b6e56126c883f250c0f8dbf9ef569ef6d 100644 (file)
@@ -1,3 +1,9 @@
+2013-06-25  Daiki Ueno  <ueno@gnu.org>
+
+       Fix handling of \x and \u escape sequences in Tcl.
+       * Makefile.am (TESTS): Add xgettext-tcl-4.
+       * xgettext-tcl-4: New test for escape sequences.
+
 2013-06-17  Daiki Ueno  <ueno@gnu.org>
 
        * format-python-brace-1: No need to pass
index 86263b5de1ce06f6ddfa54e7b037824d00bbe836..37e7bbc6ffdb1b34ddd2e7d126f98de596074876 100644 (file)
@@ -98,7 +98,7 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \
        xgettext-sh-6 \
        xgettext-smalltalk-1 xgettext-smalltalk-2 \
        xgettext-stringtable-1 \
-       xgettext-tcl-1 xgettext-tcl-2 xgettext-tcl-3 \
+       xgettext-tcl-1 xgettext-tcl-2 xgettext-tcl-3 xgettext-tcl-4 \
        xgettext-ycp-1 xgettext-ycp-2 xgettext-ycp-3 xgettext-ycp-4 \
        xgettext-lua-1 xgettext-lua-2 \
        xgettext-javascript-1 xgettext-javascript-2 xgettext-javascript-3 \
diff --git a/gettext-tools/tests/xgettext-tcl-4 b/gettext-tools/tests/xgettext-tcl-4
new file mode 100644 (file)
index 0000000..7893ccb
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+# Test of Tcl support: escape sequences.
+
+tmpfiles=""
+trap 'rm -fr $tmpfiles' 1 2 3 15
+
+tmpfiles="$tmpfiles xg-t-4.tcl"
+cat <<\EOF > xg-t-4.tcl
+puts [_ "Hello\u200e\u201cWorld\u201d"]
+puts [_ "x\u20y\x20z"]
+puts [_ "\xFF20"]
+EOF
+
+tmpfiles="$tmpfiles xg-t-4.err xg-t-4.tmp xg-t-4.pot"
+: ${XGETTEXT=xgettext}
+${XGETTEXT} --add-comments --no-location -k_ -o xg-t-4.tmp xg-t-4.tcl 2>xg-t-4.err
+test $? = 0 || { cat xg-t-4.err; rm -fr $tmpfiles; exit 1; }
+# Don't simplify this to "grep ... < xg-t-4.tmp", otherwise OpenBSD 4.0 grep
+# only outputs "Binary file (standard input) matches".
+cat xg-t-4.tmp | grep -v 'POT-Creation-Date' | LC_ALL=C tr -d '\r' > xg-t-4.pot
+
+tmpfiles="$tmpfiles xg-t-4.ok"
+cat <<\EOF > xg-t-4.ok
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Hello‎“World”"
+msgstr ""
+
+msgid "x y z"
+msgstr ""
+
+msgid " "
+msgstr ""
+EOF
+
+: ${DIFF=diff}
+${DIFF} xg-t-4.ok xg-t-4.pot
+result=$?
+
+rm -fr $tmpfiles
+
+exit $result