]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
msgexec: Add --newline option
authorDaiki Ueno <ueno@gnu.org>
Thu, 29 Jan 2015 03:35:37 +0000 (12:35 +0900)
committerDaiki Ueno <ueno@gnu.org>
Thu, 29 Jan 2015 03:38:14 +0000 (12:38 +0900)
See the commit 96dde0b for the rationale.
* gettext-tools/src/msgexec.c (newline): New variable.
(long_options): Add --newline option.
(main): Handle --newline option.
(usage): Document --newline option.
(process_string): Handle --newline option.

* gettext-tools/tests/msgexec-6: New file.
* gettext-tools/tests/Makefile.am (TESTS): Add new test.

* gettext-tools/doc/msgexec.texi: Document --newline option.

gettext-tools/doc/ChangeLog
gettext-tools/doc/msgexec.texi
gettext-tools/src/ChangeLog
gettext-tools/src/msgexec.c
gettext-tools/tests/ChangeLog
gettext-tools/tests/Makefile.am
gettext-tools/tests/msgexec-6 [new file with mode: 0755]

index 5f618a0a85f403077329ecf6b1dad7e8d8edeb15..1a6ccba079f220bd38335e66c7a160fabae40953 100644 (file)
@@ -1,3 +1,7 @@
+2015-01-29  Daiki Ueno  <ueno@gnu.org>
+
+       * msgexec.texi: Document --newline option.
+
 2015-01-28  Daiki Ueno  <ueno@gnu.org>
 
        * msgfilter.texi: Document --newline option.
index a190072c280c5aa6bfdb0d50052140630e34de54..547499dc3a065d8812c36fc9a71f4622ba62880f 100644 (file)
@@ -17,6 +17,13 @@ A special builtin command called @samp{0} outputs the translation, followed
 by a null byte.  The output of @samp{msgexec 0} is suitable as input for
 @samp{xargs -0}.
 
+@table @samp
+@itemx --newline
+@opindex --newline@r{, @code{msgfilter} option}
+Add newline at the end of each input line.
+
+@end table
+
 @vindex MSGEXEC_MSGCTXT@r{, environment variable}
 @vindex MSGEXEC_MSGID@r{, environment variable}
 @vindex MSGEXEC_MSGID_PLURAL@r{, environment variable}
index 7266c641b7a0729a53dcea63fba1fb9b57858448..6327a1de0401251cf791f71a066cc09fb87d622f 100644 (file)
@@ -1,3 +1,13 @@
+2015-01-29  Daiki Ueno  <ueno@gnu.org>
+
+       msgexec: Add --newline option
+       See the commit 96dde0b for the rationale.
+       * msgexec.c (newline): New variable.
+       (long_options): Add --newline option.
+       (main): Handle --newline option.
+       (usage): Document --newline option.
+       (process_string): Handle --newline option.
+
 2015-01-28  Daiki Ueno  <ueno@gnu.org>
 
        msgfilter: Add --newline option
index 523951893d3f17d94503896cc99d87c9eea96dca..727361f1d7c1f692ef1e7bd9e5270a81edf3d879 100644 (file)
@@ -71,6 +71,8 @@ static const char *sub_path;
 static char **sub_argv;
 static int sub_argc;
 
+static bool newline;
+
 /* Maximum exit code encountered.  */
 static int exitcode;
 
@@ -80,6 +82,7 @@ static const struct option long_options[] =
   { "directory", required_argument, NULL, 'D' },
   { "help", no_argument, NULL, 'h' },
   { "input", required_argument, NULL, 'i' },
+  { "newline", no_argument, NULL, CHAR_MAX + 2 },
   { "properties-input", no_argument, NULL, 'P' },
   { "stringtable-input", no_argument, NULL, CHAR_MAX + 1 },
   { "version", no_argument, NULL, 'V' },
@@ -167,6 +170,10 @@ main (int argc, char **argv)
         input_syntax = &input_format_stringtable;
         break;
 
+      case CHAR_MAX + 2: /* --newline */
+        newline = true;
+        break;
+
       default:
         usage (EXIT_FAILURE);
         break;
@@ -274,6 +281,11 @@ null byte.  The output of \"msgexec 0\" is suitable as input for \"xargs -0\".\n
 "));
       printf ("\n");
       printf (_("\
+Command input:\n"));
+      printf (_("\
+  --newline                   add newline at the end of input\n"));
+      printf ("\n");
+      printf (_("\
 Mandatory arguments to long options are mandatory for short options too.\n"));
       printf ("\n");
       printf (_("\
@@ -352,6 +364,7 @@ process_string (const message_ty *mp, const char *str, size_t len)
       int fd[1];
       void (*orig_sigpipe_handler)(int);
       int exitstatus;
+      char *newstr;
 
       /* Set environment variables for the subprocess.
          Note: These environment variables, especially MSGEXEC_MSGCTXT and
@@ -399,11 +412,23 @@ process_string (const message_ty *mp, const char *str, size_t len)
          successfully without having read all of the input that we feed it.  */
       orig_sigpipe_handler = signal (SIGPIPE, SIG_IGN);
 
-      if (full_write (fd[0], str, len) < len)
+      if (newline)
+        {
+          newstr = XNMALLOC (len + 1, char);
+          memcpy (newstr, str, len);
+          newstr[len++] = '\n';
+        }
+      else
+        newstr = (char *) str;
+
+      if (full_write (fd[0], newstr, len) < len)
         if (errno != EPIPE)
           error (EXIT_FAILURE, errno,
                  _("write to %s subprocess failed"), sub_name);
 
+      if (newstr != str)
+        free (newstr);
+
       close (fd[0]);
 
       signal (SIGPIPE, orig_sigpipe_handler);
index c60f35a3721c2e75acefff03914b04ef1f2dcfb7..eec158698b59f6a4352344c887863438764eac63 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-29  Daiki Ueno  <ueno@gnu.org>
+
+       * msgexec-6: New file.
+       * Makefile.am (TESTS): Add new test.
+
 2015-01-28  Daiki Ueno  <ueno@gnu.org>
 
        * msgfilter-8: New file.
index c098a6f486353581a1399f01ec955a8d1893714d..ee346552dceae848320f4ee8f44eab74e545e2b6 100644 (file)
@@ -40,7 +40,7 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \
        msgcomm-26 msgcomm-27 msgcomm-28 \
        msgconv-1 msgconv-2 msgconv-3 msgconv-4 msgconv-5 msgconv-6 msgconv-7 \
        msgen-1 msgen-2 msgen-3 msgen-4 \
-       msgexec-1 msgexec-2 msgexec-3 msgexec-4 msgexec-5 \
+       msgexec-1 msgexec-2 msgexec-3 msgexec-4 msgexec-5 msgexec-6 \
        msgfilter-1 msgfilter-2 msgfilter-3 msgfilter-4 msgfilter-5 \
        msgfilter-6 msgfilter-7 msgfilter-8 \
        msgfilter-sr-latin-1 msgfilter-quote-1 \
diff --git a/gettext-tools/tests/msgexec-6 b/gettext-tools/tests/msgexec-6
new file mode 100755 (executable)
index 0000000..acea8bc
--- /dev/null
@@ -0,0 +1,143 @@
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test --newline option.
+
+cat <<\EOF > mex-test6.po
+# HEADER.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Bonnie Tyler\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: married-men:4
+#, fuzzy
+msgid "The world is full of married men"
+msgstr "So viele verheiratete Männer"
+
+#: married-men:5
+msgid "with wives who never understand"
+msgstr "und ihre Frauen verstehen sie nicht"
+
+#: married-men:6
+msgid "They're looking for someone to share"
+msgstr ""
+
+# schwer zu übersetzen...
+#: married-men:7
+msgid "the excitement of a love affair"
+msgstr ""
+
+#: married-men:8
+msgid "Just as soon as they find you"
+msgstr ""
+
+#: married-men:9
+msgid "They warn you and darn you"
+msgstr ""
+
+#~ msgid "You fly on the wings of romance"
+#~ msgstr "Die Flügel der frischen Liebe\n"
+#~ "heben dich zum Himmel"
+
+#, fuzzy
+#~ msgid "In the eyes of the world"
+#~ msgstr "Für die anderen"
+
+# Etwas freie Übersetzung.
+#~ msgid "You're just another crazy girl"
+#~ msgstr "bist du bloß ein verrücktes dummes Ding"
+
+#~ msgid "Who loves a married man"
+#~ msgstr "das einen verheirateten Mann liebt"
+EOF
+
+cat <<\EOF > mex-test6.sh
+#! /bin/sh
+echo "========================= $MSGEXEC_LOCATION =========================" | LC_ALL=C tr -d '\r'
+cat <<MEOF
+$MSGEXEC_MSGID
+---
+MEOF
+cat
+echo | LC_ALL=C tr -d '\r'
+exit 0
+EOF
+chmod a+x mex-test6.sh
+
+: ${MSGEXEC=msgexec}
+LC_ALL=C \
+${MSGEXEC} --newline -i mex-test6.po ./mex-test6.sh > mex-test6.out 2> mex-test6.err
+result=$?
+cat mex-test6.err | grep -v 'warning: Locale charset' | grep -v '^ '
+test $result = 0 || { exit 1; }
+
+cat <<\EOF > mex-test6.ok
+========================= mex-test6.po:4 =========================
+
+---
+Project-Id-Version: Bonnie Tyler
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+
+
+========================= mex-test6.po:12 =========================
+The world is full of married men
+---
+So viele verheiratete Männer
+
+========================= mex-test6.po:16 =========================
+with wives who never understand
+---
+und ihre Frauen verstehen sie nicht
+
+========================= mex-test6.po:20 =========================
+They're looking for someone to share
+---
+
+
+========================= mex-test6.po:25 =========================
+the excitement of a love affair
+---
+
+
+========================= mex-test6.po:29 =========================
+Just as soon as they find you
+---
+
+
+========================= mex-test6.po:33 =========================
+They warn you and darn you
+---
+
+
+========================= mex-test6.po:36 =========================
+You fly on the wings of romance
+---
+Die Flügel der frischen Liebe
+heben dich zum Himmel
+
+========================= mex-test6.po:41 =========================
+In the eyes of the world
+---
+Für die anderen
+
+========================= mex-test6.po:45 =========================
+You're just another crazy girl
+---
+bist du bloß ein verrücktes dummes Ding
+
+========================= mex-test6.po:48 =========================
+Who loves a married man
+---
+das einen verheirateten Mann liebt
+
+EOF
+
+: ${DIFF=diff}
+${DIFF} mex-test6.ok mex-test6.out
+result=$?
+
+exit $result