From: Daiki Ueno Date: Thu, 29 Jan 2015 03:35:37 +0000 (+0900) Subject: msgexec: Add --newline option X-Git-Tag: v0.19.5~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a4d132f7;p=thirdparty%2Fgettext.git msgexec: Add --newline option 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. --- diff --git a/gettext-tools/doc/ChangeLog b/gettext-tools/doc/ChangeLog index 5f618a0a8..1a6ccba07 100644 --- a/gettext-tools/doc/ChangeLog +++ b/gettext-tools/doc/ChangeLog @@ -1,3 +1,7 @@ +2015-01-29 Daiki Ueno + + * msgexec.texi: Document --newline option. + 2015-01-28 Daiki Ueno * msgfilter.texi: Document --newline option. diff --git a/gettext-tools/doc/msgexec.texi b/gettext-tools/doc/msgexec.texi index a190072c2..547499dc3 100644 --- a/gettext-tools/doc/msgexec.texi +++ b/gettext-tools/doc/msgexec.texi @@ -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} diff --git a/gettext-tools/src/ChangeLog b/gettext-tools/src/ChangeLog index 7266c641b..6327a1de0 100644 --- a/gettext-tools/src/ChangeLog +++ b/gettext-tools/src/ChangeLog @@ -1,3 +1,13 @@ +2015-01-29 Daiki Ueno + + 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 msgfilter: Add --newline option diff --git a/gettext-tools/src/msgexec.c b/gettext-tools/src/msgexec.c index 523951893..727361f1d 100644 --- a/gettext-tools/src/msgexec.c +++ b/gettext-tools/src/msgexec.c @@ -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); diff --git a/gettext-tools/tests/ChangeLog b/gettext-tools/tests/ChangeLog index c60f35a37..eec158698 100644 --- a/gettext-tools/tests/ChangeLog +++ b/gettext-tools/tests/ChangeLog @@ -1,3 +1,8 @@ +2015-01-29 Daiki Ueno + + * msgexec-6: New file. + * Makefile.am (TESTS): Add new test. + 2015-01-28 Daiki Ueno * msgfilter-8: New file. diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am index c098a6f48..ee346552d 100644 --- a/gettext-tools/tests/Makefile.am +++ b/gettext-tools/tests/Makefile.am @@ -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 index 000000000..acea8bc8f --- /dev/null +++ b/gettext-tools/tests/msgexec-6 @@ -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 < 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