mirror of
https://github.com/openharmony/third_party_gettext.git
synced 2026-07-21 00:25:49 -04:00
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.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 \
|
||||
|
||||
Executable
+143
@@ -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
|
||||
Reference in New Issue
Block a user