diff options
author | Daiki Ueno <ueno@gnu.org> | 2014-03-24 18:43:01 +0900 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2014-03-25 17:05:41 +0900 |
commit | 90c76fda268779b80c2fa969b8efddbb4aa5da1e (patch) | |
tree | 35736c9950945b19fad8244a89907d20d29c2b5b | |
parent | 0c94b1c6d7a118b64e50644242cd498b60bfa518 (diff) | |
download | external_gettext-90c76fda268779b80c2fa969b8efddbb4aa5da1e.zip external_gettext-90c76fda268779b80c2fa969b8efddbb4aa5da1e.tar.gz external_gettext-90c76fda268779b80c2fa969b8efddbb4aa5da1e.tar.bz2 |
Extend --add-location option to suppress line number output
The --add-location option of msgattrib, msgcat, msgcomm, msgconv,
msgen, msgfilter, msggrep, msgmerge, msguniq, and xgettext
commands now takes an optional argument 'never', 'full', or
'file', to control the format of "#: ..." comments.
The default catalog reader changed to always remember file
positions so the line number part can be suppressed in output
phase rather than input phase.
40 files changed, 1187 insertions, 161 deletions
diff --git a/gettext-tools/doc/ChangeLog b/gettext-tools/doc/ChangeLog index beadd9c..fe21c4e 100644 --- a/gettext-tools/doc/ChangeLog +++ b/gettext-tools/doc/ChangeLog @@ -1,3 +1,17 @@ +2014-03-25 Daiki Ueno <ueno@gnu.org> + + * msgattrib.texi: Document the optional argument of + --add-location. + * msgcat.texi: Likewise. + * msgcomm.texi: Likewise. + * msgconv.texi: Likewise. + * msgen.texi: Likewise. + * msgfilter.texi: Likewise. + * msggrep.texi: Likewise. + * msgmerge.texi: Likewise. + * msguniq.texi: Likewise. + * xgettext.texi: Likewise. + 2014-03-15 Daiki Ueno <ueno@gnu.org> * FAQ.html: Point to bug-gettext@gnu.org rather than diff --git a/gettext-tools/doc/msgattrib.texi b/gettext-tools/doc/msgattrib.texi index 0f2749b..998b8b0 100644 --- a/gettext-tools/doc/msgattrib.texi +++ b/gettext-tools/doc/msgattrib.texi @@ -214,11 +214,17 @@ Write the .po file using indented style. Do not write @samp{#: @var{filename}:@var{line}} lines. @item -n -@itemx --add-location +@itemx --add-location=@var{type} @opindex -n@r{, @code{msgattrib} option} @opindex --add-location@r{, @code{msgattrib} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msgattrib} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msgcat.texi b/gettext-tools/doc/msgcat.texi index 5b6b095..7c15050 100644 --- a/gettext-tools/doc/msgcat.texi +++ b/gettext-tools/doc/msgcat.texi @@ -147,11 +147,17 @@ Write the .po file using indented style. Do not write @samp{#: @var{filename}:@var{line}} lines. @item -n -@itemx --add-location +@itemx --add-location=@var{type} @opindex -n@r{, @code{msgcat} option} @opindex --add-location@r{, @code{msgcat} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msgcat} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msgcomm.texi b/gettext-tools/doc/msgcomm.texi index 29ef820..ae7c927 100644 --- a/gettext-tools/doc/msgcomm.texi +++ b/gettext-tools/doc/msgcomm.texi @@ -128,11 +128,17 @@ Write the .po file using indented style. Do not write @samp{#: @var{filename}:@var{line}} lines. @item -n -@itemx --add-location +@itemx --add-location=@var{type} @opindex -n@r{, @code{msgcomm} option} @opindex --add-location@r{, @code{msgcomm} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msgcomm} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msgconv.texi b/gettext-tools/doc/msgconv.texi index 6e58fd2..805a76f 100644 --- a/gettext-tools/doc/msgconv.texi +++ b/gettext-tools/doc/msgconv.texi @@ -100,10 +100,17 @@ Write the .po file using indented style. @opindex --no-location@r{, @code{msgconv} option} Do not write @samp{#: @var{filename}:@var{line}} lines. -@item --add-location +@item -n +@itemx --add-location=@var{type} @opindex --add-location@r{, @code{msgconv} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msgconv} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msgen.texi b/gettext-tools/doc/msgen.texi index 82f210d..3f61fa4 100644 --- a/gettext-tools/doc/msgen.texi +++ b/gettext-tools/doc/msgen.texi @@ -100,10 +100,17 @@ Write the .po file using indented style. @opindex --no-location@r{, @code{msgen} option} Do not write @samp{#: @var{filename}:@var{line}} lines. -@item --add-location +@item -n +@itemx --add-location=@var{type} @opindex --add-location@r{, @code{msgen} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msgen} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msgfilter.texi b/gettext-tools/doc/msgfilter.texi index 05c3fb8..73ea7c8 100644 --- a/gettext-tools/doc/msgfilter.texi +++ b/gettext-tools/doc/msgfilter.texi @@ -172,10 +172,17 @@ filtering like any other message. @opindex --no-location@r{, @code{msgfilter} option} Do not write @samp{#: @var{filename}:@var{line}} lines. -@item --add-location +@item -n +@itemx --add-location=@var{type} @opindex --add-location@r{, @code{msgfilter} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msgfilter} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msggrep.texi b/gettext-tools/doc/msggrep.texi index 31bc815..229b924 100644 --- a/gettext-tools/doc/msggrep.texi +++ b/gettext-tools/doc/msggrep.texi @@ -200,10 +200,17 @@ Write the .po file using indented style. @opindex --no-location@r{, @code{msggrep} option} Do not write @samp{#: @var{filename}:@var{line}} lines. -@item --add-location +@item -n +@itemx --add-location=@var{type} @opindex --add-location@r{, @code{msggrep} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msggrep} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msgmerge.texi b/gettext-tools/doc/msgmerge.texi index 3ecf024..ad76f0e 100644 --- a/gettext-tools/doc/msgmerge.texi +++ b/gettext-tools/doc/msgmerge.texi @@ -188,10 +188,17 @@ Write the .po file using indented style. @opindex --no-location@r{, @code{msgmerge} option} Do not write @samp{#: @var{filename}:@var{line}} lines. -@item --add-location +@item -n +@itemx --add-location=@var{type} @opindex --add-location@r{, @code{msgmerge} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msgmerge} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/msguniq.texi b/gettext-tools/doc/msguniq.texi index 120a8fe..4bb6ffd 100644 --- a/gettext-tools/doc/msguniq.texi +++ b/gettext-tools/doc/msguniq.texi @@ -125,11 +125,17 @@ Write the .po file using indented style. Do not write @samp{#: @var{filename}:@var{line}} lines. @item -n -@itemx --add-location +@itemx --add-location=@var{type} @opindex -n@r{, @code{msguniq} option} @opindex --add-location@r{, @code{msguniq} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{msguniq} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/doc/xgettext.texi b/gettext-tools/doc/xgettext.texi index 1089e9c..c8adc27 100644 --- a/gettext-tools/doc/xgettext.texi +++ b/gettext-tools/doc/xgettext.texi @@ -395,11 +395,17 @@ this option makes it harder for technically skilled translators to understand each message's context. @item -n -@itemx --add-location +@itemx --add-location=@var{type} @opindex -n@r{, @code{xgettext} option} @opindex --add-location@r{, @code{xgettext} option} Generate @samp{#: @var{filename}:@var{line}} lines (default). +The optional @var{type} can be either @samp{full}, @samp{file}, or +@samp{never}. If it is not given or @samp{full}, it generates the +lines with both file name and line number. If it is @samp{file}, the +line number part is omitted. If it is @samp{never}, it completely +suppresses the lines (same as @code{--no-location}). + @item --strict @opindex --strict@r{, @code{xgettext} option} Write out a strict Uniforum conforming PO file. Note that this diff --git a/gettext-tools/src/ChangeLog b/gettext-tools/src/ChangeLog index 06a59bd..8db3725 100644 --- a/gettext-tools/src/ChangeLog +++ b/gettext-tools/src/ChangeLog @@ -1,3 +1,45 @@ +2014-03-25 Daiki Ueno <ueno@gnu.org> + + Extend --add-location option to suppress line number output + The --add-location option of msgattrib, msgcat, msgcomm, msgconv, + msgen, msgfilter, msggrep, msgmerge, msguniq, and xgettext + commands now got new semantics. It takes an optional argument + 'never', 'full', or 'file', to control the format of "#: ..." + comments. + The default catalog reader changed to always remember file + positions so the line number part can be suppressed in output + phase rather than input phase. + Feature requested in: + <https://lists.gnu.org/archive/html/bug-gettext/2013-08/msg00039.html>. + * read-catalog.h (line_comment): Abolish. + (DEFAULT_CATALOG_READER_TY): Remove handle_filepos_comments field. + * read-catalog.c (line_comment): Abolish. + (default_destructor, default_copy_comment_state) + (default_reset_comment_state, default_comment_filepos): Always + remember filepos. + (default_parse_brief, read_catalog_stream): Adjust to the change. + * write-po.h (enum filepos_comment_type): New enum. + (message_print_style_filepos): New function declaration. + (handle_filepos_comment_option): New function declaration. + * write-po.c (message_print_style_filepos): New function + (handle_filepos_comment_option): New function. + (message_print_comment_filepos): Uniquify mp->filepos elements + ignoring line number if filepos_comment_type is + filepos_comment_file. + * msgfmt.c: Adjust to the change. + * msgattrib.c (long_options, main): Allow --add-location option to + take an optional format specifier. + * msgcat.c (long_options, main): Likewise. + * msgcomm.c (long_options, main): Likewise. + * msguniq.c (long_options, main): Likewise. + * xgettext.c (long_options, main): Likewise. + * msgconv.c (long_options, main): Likewise; add a new option -n as + an alias of --add-location. + * msgen.c (long_options, main): Likewise. + * msgfilter.c (long_options, main): Likewise. + * msggrep.c (long_options, main): Likewise. + * msgmerge.c (long_options, main): Likewise. + 2014-03-12 Daiki Ueno <ueno@gnu.org> xgettext: Fix infloop on loading Glade files with non-DL expat diff --git a/gettext-tools/src/msgattrib.c b/gettext-tools/src/msgattrib.c index 7732315..01b6f97 100644 --- a/gettext-tools/src/msgattrib.c +++ b/gettext-tools/src/msgattrib.c @@ -80,7 +80,7 @@ static int to_change; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "clear-fuzzy", no_argument, NULL, CHAR_MAX + 8 }, { "clear-obsolete", no_argument, NULL, CHAR_MAX + 10 }, { "clear-previous", no_argument, NULL, CHAR_MAX + 18 }, @@ -94,7 +94,7 @@ static const struct option long_options[] = { "indent", no_argument, NULL, 'i' }, { "no-escape", no_argument, NULL, 'e' }, { "no-fuzzy", no_argument, NULL, CHAR_MAX + 3 }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 22 }, { "no-obsolete", no_argument, NULL, CHAR_MAX + 5 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 13 }, { "obsolete", no_argument, NULL, CHAR_MAX + 12 }, @@ -207,7 +207,8 @@ main (int argc, char **argv) break; case 'n': - line_comment = 1; + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); break; case 'o': @@ -331,6 +332,10 @@ main (int argc, char **argv) to_change |= ADD_PREV; break; + case CHAR_MAX + 22: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); /* NOTREACHED */ @@ -367,10 +372,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ } /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); diff --git a/gettext-tools/src/msgcat.c b/gettext-tools/src/msgcat.c index 7c36730..0cc432c 100644 --- a/gettext-tools/src/msgcat.c +++ b/gettext-tools/src/msgcat.c @@ -62,7 +62,7 @@ static const char *to_code; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "color", optional_argument, NULL, CHAR_MAX + 5 }, { "directory", required_argument, NULL, 'D' }, { "escape", no_argument, NULL, 'E' }, @@ -72,7 +72,7 @@ static const struct option long_options[] = { "indent", no_argument, NULL, 'i' }, { "lang", required_argument, NULL, CHAR_MAX + 7 }, { "no-escape", no_argument, NULL, 'e' }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 8 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 2 }, { "output-file", required_argument, NULL, 'o' }, { "properties-input", no_argument, NULL, 'P' }, @@ -202,7 +202,8 @@ main (int argc, char **argv) break; case 'n': - line_comment = 1; + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); break; case 'o': @@ -276,6 +277,10 @@ main (int argc, char **argv) catalogname = optarg; break; + case CHAR_MAX + 8: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); /* NOTREACHED */ @@ -307,10 +312,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ } /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); diff --git a/gettext-tools/src/msgcomm.c b/gettext-tools/src/msgcomm.c index e965dba..daddf2b 100644 --- a/gettext-tools/src/msgcomm.c +++ b/gettext-tools/src/msgcomm.c @@ -63,7 +63,7 @@ static const char *to_code; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "color", optional_argument, NULL, CHAR_MAX + 5 }, { "directory", required_argument, NULL, 'D' }, { "escape", no_argument, NULL, 'E' }, @@ -72,7 +72,7 @@ static const struct option long_options[] = { "help", no_argument, NULL, 'h' }, { "indent", no_argument, NULL, 'i' }, { "no-escape", no_argument, NULL, 'e' }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 7 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 2 }, { "omit-header", no_argument, NULL, CHAR_MAX + 1 }, { "output", required_argument, NULL, 'o' }, /* for backward compatibility */ @@ -197,7 +197,8 @@ main (int argc, char *argv[]) break; case 'n': - line_comment = 1; + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); break; case 'o': @@ -267,6 +268,10 @@ main (int argc, char *argv[]) handle_style_option (optarg); break; + case CHAR_MAX + 7: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); /* NOTREACHED */ @@ -292,10 +297,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ usage (EXIT_SUCCESS); /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); diff --git a/gettext-tools/src/msgconv.c b/gettext-tools/src/msgconv.c index af1361a..5c9f7ea 100644 --- a/gettext-tools/src/msgconv.c +++ b/gettext-tools/src/msgconv.c @@ -60,7 +60,7 @@ static const char *to_code; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "color", optional_argument, NULL, CHAR_MAX + 4 }, { "directory", required_argument, NULL, 'D' }, { "escape", no_argument, NULL, 'E' }, @@ -68,7 +68,7 @@ static const struct option long_options[] = { "help", no_argument, NULL, 'h' }, { "indent", no_argument, NULL, 'i' }, { "no-escape", no_argument, NULL, 'e' }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 6 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 1 }, { "output-file", required_argument, NULL, 'o' }, { "properties-input", no_argument, NULL, 'P' }, @@ -131,7 +131,7 @@ main (int argc, char **argv) output_file = NULL; input_file = NULL; - while ((opt = getopt_long (argc, argv, "D:eEFhio:pPst:Vw:", long_options, + while ((opt = getopt_long (argc, argv, "D:eEFhin:o:pPst:Vw:", long_options, NULL)) != EOF) switch (opt) @@ -163,6 +163,11 @@ main (int argc, char **argv) message_print_style_indent (); break; + case 'n': + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); + break; + case 'o': output_file = optarg; break; @@ -222,6 +227,10 @@ main (int argc, char **argv) handle_style_option (optarg); break; + case CHAR_MAX + 6: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); break; @@ -258,10 +267,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ } /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); @@ -360,7 +365,7 @@ Output details:\n")); printf (_("\ --no-location suppress '#: filename:line' lines\n")); printf (_("\ - --add-location preserve '#: filename:line' lines (default)\n")); + -n, --add-location preserve '#: filename:line' lines (default)\n")); printf (_("\ --strict strict Uniforum output style\n")); printf (_("\ diff --git a/gettext-tools/src/msgen.c b/gettext-tools/src/msgen.c index 2ec3d5e..e33c61a 100644 --- a/gettext-tools/src/msgen.c +++ b/gettext-tools/src/msgen.c @@ -57,7 +57,7 @@ static int force_po; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "color", optional_argument, NULL, CHAR_MAX + 5 }, { "directory", required_argument, NULL, 'D' }, { "escape", no_argument, NULL, 'E' }, @@ -66,7 +66,7 @@ static const struct option long_options[] = { "indent", no_argument, NULL, 'i' }, { "lang", required_argument, NULL, CHAR_MAX + 4 }, { "no-escape", no_argument, NULL, 'e' }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 7 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 1 }, { "output-file", required_argument, NULL, 'o' }, { "properties-input", no_argument, NULL, 'P' }, @@ -128,8 +128,9 @@ main (int argc, char **argv) do_version = false; output_file = NULL; - while ((opt = getopt_long (argc, argv, "D:eEFhio:pPsVw:", long_options, NULL)) - != EOF) + while ((opt = getopt_long (argc, argv, + "D:eEFhin:o:pPsVw:", + long_options, NULL)) != EOF) switch (opt) { case '\0': /* Long option. */ @@ -159,6 +160,11 @@ main (int argc, char **argv) message_print_style_indent (); break; + case 'n': + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); + break; + case 'o': output_file = optarg; break; @@ -218,6 +224,10 @@ main (int argc, char **argv) handle_style_option (optarg); break; + case CHAR_MAX + 7: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); break; @@ -255,10 +265,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ } /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); @@ -355,7 +361,7 @@ Output details:\n")); printf (_("\ --no-location suppress '#: filename:line' lines\n")); printf (_("\ - --add-location preserve '#: filename:line' lines (default)\n")); + -n, --add-location preserve '#: filename:line' lines (default)\n")); printf (_("\ --strict strict Uniforum output style\n")); printf (_("\ diff --git a/gettext-tools/src/msgfilter.c b/gettext-tools/src/msgfilter.c index c414140..b92eef0 100644 --- a/gettext-tools/src/msgfilter.c +++ b/gettext-tools/src/msgfilter.c @@ -87,7 +87,7 @@ static void (*filter) (const char *str, size_t len, char **resultp, size_t *leng /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "color", optional_argument, NULL, CHAR_MAX + 6 }, { "directory", required_argument, NULL, 'D' }, { "escape", no_argument, NULL, 'E' }, @@ -97,7 +97,7 @@ static const struct option long_options[] = { "input", required_argument, NULL, 'i' }, { "keep-header", no_argument, &keep_header, 1 }, { "no-escape", no_argument, NULL, CHAR_MAX + 2 }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 8 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 3 }, { "output-file", required_argument, NULL, 'o' }, { "properties-input", no_argument, NULL, 'P' }, @@ -164,7 +164,7 @@ main (int argc, char **argv) /* The '+' in the options string causes option parsing to terminate when the first non-option, i.e. the subprogram name, is encountered. */ - while ((opt = getopt_long (argc, argv, "+D:EFhi:o:pPsVw:", long_options, + while ((opt = getopt_long (argc, argv, "+D:EFhi:n:o:pPsVw:", long_options, NULL)) != EOF) switch (opt) @@ -197,6 +197,11 @@ main (int argc, char **argv) input_file = optarg; break; + case 'n': + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); + break; + case 'o': output_file = optarg; break; @@ -260,6 +265,10 @@ main (int argc, char **argv) handle_style_option (optarg); break; + case CHAR_MAX + 8: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); break; @@ -290,10 +299,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ sub_name = argv[optind]; /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); @@ -456,7 +461,7 @@ Output details:\n")); printf (_("\ --no-location suppress '#: filename:line' lines\n")); printf (_("\ - --add-location preserve '#: filename:line' lines (default)\n")); + -n, --add-location preserve '#: filename:line' lines (default)\n")); printf (_("\ --strict strict Uniforum output style\n")); printf (_("\ diff --git a/gettext-tools/src/msgfmt.c b/gettext-tools/src/msgfmt.c index 4da999a..e51319d 100644 --- a/gettext-tools/src/msgfmt.c +++ b/gettext-tools/src/msgfmt.c @@ -846,8 +846,7 @@ is_nonobsolete (const message_ty *mp) default_catalog_reader_ty. Its particularities are: - The header entry check is performed on-the-fly. - Comments are not stored, they are discarded right away. - (This is achieved by setting handle_comments = false and - handle_filepos_comments = false.) + (This is achieved by setting handle_comments = false.) - The multi-domain handling is adapted to our domain_list. */ @@ -1107,7 +1106,6 @@ read_catalog_file_msgfmt (char *filename, catalog_input_format_ty input_syntax) pop = default_catalog_reader_alloc (&msgfmt_methods); pop->handle_comments = false; - pop->handle_filepos_comments = false; pop->allow_domain_directives = true; pop->allow_duplicates = false; pop->allow_duplicates_if_same_msgstr = false; diff --git a/gettext-tools/src/msggrep.c b/gettext-tools/src/msggrep.c index 3b12e93..73ccb94 100644 --- a/gettext-tools/src/msggrep.c +++ b/gettext-tools/src/msggrep.c @@ -91,7 +91,7 @@ static struct grep_task grep_task[5]; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "color", optional_argument, NULL, CHAR_MAX + 9 }, { "comment", no_argument, NULL, 'C' }, { "directory", required_argument, NULL, 'D' }, @@ -111,7 +111,7 @@ static const struct option long_options[] = { "msgid", no_argument, NULL, 'K' }, { "msgstr", no_argument, NULL, 'T' }, { "no-escape", no_argument, NULL, CHAR_MAX + 3 }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 11 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 6 }, { "output-file", required_argument, NULL, 'o' }, { "properties-input", no_argument, NULL, 'P' }, @@ -196,7 +196,7 @@ main (int argc, char **argv) gt->case_insensitive = false; } - while ((opt = getopt_long (argc, argv, "CD:e:Ef:FhiJKM:N:o:pPTvVw:X", + while ((opt = getopt_long (argc, argv, "CD:e:Ef:FhiJKM:n:N:o:pPTvVw:X", long_options, NULL)) != EOF) switch (opt) @@ -310,6 +310,11 @@ error while reading \"%s\""), optarg); string_list_append (domain_names, optarg); break; + case 'n': + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); + break; + case 'N': string_list_append (location_files, optarg); break; @@ -397,6 +402,10 @@ error while reading \"%s\""), optarg); handle_style_option (optarg); break; + case CHAR_MAX + 11: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); break; @@ -433,10 +442,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ } /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); @@ -603,7 +608,7 @@ Output details:\n")); printf (_("\ --no-location suppress '#: filename:line' lines\n")); printf (_("\ - --add-location preserve '#: filename:line' lines (default)\n")); + -n, --add-location preserve '#: filename:line' lines (default)\n")); printf (_("\ --strict strict Uniforum output style\n")); printf (_("\ diff --git a/gettext-tools/src/msgmerge.c b/gettext-tools/src/msgmerge.c index 3f96d3e..7c7add9 100644 --- a/gettext-tools/src/msgmerge.c +++ b/gettext-tools/src/msgmerge.c @@ -107,7 +107,7 @@ static const char *backup_suffix_string; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "backup", required_argument, NULL, CHAR_MAX + 1 }, { "color", optional_argument, NULL, CHAR_MAX + 9 }, { "compendium", required_argument, NULL, 'C', }, @@ -120,7 +120,7 @@ static const struct option long_options[] = { "multi-domain", no_argument, NULL, 'm' }, { "no-escape", no_argument, NULL, 'e' }, { "no-fuzzy-matching", no_argument, NULL, 'N' }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 11 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 4 }, { "output-file", required_argument, NULL, 'o' }, { "previous", no_argument, NULL, CHAR_MAX + 7 }, @@ -204,7 +204,7 @@ main (int argc, char **argv) do_version = false; output_file = NULL; - while ((opt = getopt_long (argc, argv, "C:D:eEFhimNo:pPqsUvVw:", + while ((opt = getopt_long (argc, argv, "C:D:eEFhimn:No:pPqsUvVw:", long_options, NULL)) != EOF) switch (opt) @@ -244,6 +244,11 @@ main (int argc, char **argv) multi_domain_mode = true; break; + case 'n': + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); + break; + case 'N': use_fuzzy_matching = false; break; @@ -331,6 +336,10 @@ main (int argc, char **argv) handle_style_option (optarg); break; + case CHAR_MAX + 11: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); break; @@ -392,10 +401,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ } } - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); @@ -581,7 +586,7 @@ Output details:\n")); printf (_("\ --no-location suppress '#: filename:line' lines\n")); printf (_("\ - --add-location preserve '#: filename:line' lines (default)\n")); + -n, --add-location preserve '#: filename:line' lines (default)\n")); printf (_("\ --strict strict Uniforum output style\n")); printf (_("\ diff --git a/gettext-tools/src/msguniq.c b/gettext-tools/src/msguniq.c index 9f1add6..24f4c31 100644 --- a/gettext-tools/src/msguniq.c +++ b/gettext-tools/src/msguniq.c @@ -60,7 +60,7 @@ static const char *to_code; /* Long options. */ static const struct option long_options[] = { - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "color", optional_argument, NULL, CHAR_MAX + 5 }, { "directory", required_argument, NULL, 'D' }, { "escape", no_argument, NULL, 'E' }, @@ -68,7 +68,7 @@ static const struct option long_options[] = { "help", no_argument, NULL, 'h' }, { "indent", no_argument, NULL, 'i' }, { "no-escape", no_argument, NULL, 'e' }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 7 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 2 }, { "output-file", required_argument, NULL, 'o' }, { "properties-input", no_argument, NULL, 'P' }, @@ -175,7 +175,8 @@ main (int argc, char **argv) break; case 'n': - line_comment = 1; + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); break; case 'o': @@ -246,6 +247,10 @@ main (int argc, char **argv) handle_style_option (optarg); break; + case CHAR_MAX + 7: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); /* NOTREACHED */ @@ -282,10 +287,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ } /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); diff --git a/gettext-tools/src/read-catalog.c b/gettext-tools/src/read-catalog.c index 51e96e8..4642249 100644 --- a/gettext-tools/src/read-catalog.c +++ b/gettext-tools/src/read-catalog.c @@ -112,6 +112,7 @@ void default_destructor (abstract_catalog_reader_ty *that) { default_catalog_reader_ty *this = (default_catalog_reader_ty *) that; + size_t j; /* Do not free this->mdlp and this->mlp. */ if (this->handle_comments) @@ -121,24 +122,19 @@ default_destructor (abstract_catalog_reader_ty *that) if (this->comment_dot != NULL) string_list_free (this->comment_dot); } - if (this->handle_filepos_comments) - { - size_t j; - for (j = 0; j < this->filepos_count; ++j) - free (this->filepos[j].file_name); - if (this->filepos != NULL) - free (this->filepos); - } + for (j = 0; j < this->filepos_count; ++j) + free (this->filepos[j].file_name); + if (this->filepos != NULL) + free (this->filepos); } void default_parse_brief (abstract_catalog_reader_ty *that) { - /* We need to parse comments, because even if this->handle_comments and - this->handle_filepos_comments are false, we need to know which messages - are fuzzy. */ + /* We need to parse comments, because even if this->handle_comments + is false, we need to know which messages are fuzzy. */ po_lex_pass_comments (true); } @@ -164,15 +160,12 @@ default_copy_comment_state (default_catalog_reader_ty *this, message_ty *mp) for (j = 0; j < this->comment_dot->nitems; ++j) message_comment_dot_append (mp, this->comment_dot->item[j]); } - if (this->handle_filepos_comments) + for (j = 0; j < this->filepos_count; ++j) { - for (j = 0; j < this->filepos_count; ++j) - { - lex_pos_ty *pp; + lex_pos_ty *pp; - pp = &this->filepos[j]; - message_comment_filepos (mp, pp->file_name, pp->line_number); - } + pp = &this->filepos[j]; + message_comment_filepos (mp, pp->file_name, pp->line_number); } mp->is_fuzzy = this->is_fuzzy; for (i = 0; i < NFORMATS; i++) @@ -200,15 +193,12 @@ default_reset_comment_state (default_catalog_reader_ty *this) this->comment_dot = NULL; } } - if (this->handle_filepos_comments) - { - for (j = 0; j < this->filepos_count; ++j) - free (this->filepos[j].file_name); - if (this->filepos != NULL) - free (this->filepos); - this->filepos_count = 0; - this->filepos = NULL; - } + for (j = 0; j < this->filepos_count; ++j) + free (this->filepos[j].file_name); + if (this->filepos != NULL) + free (this->filepos); + this->filepos_count = 0; + this->filepos = NULL; this->is_fuzzy = false; for (i = 0; i < NFORMATS; i++) this->is_format[i] = undecided; @@ -291,18 +281,14 @@ default_comment_filepos (abstract_catalog_reader_ty *that, const char *name, size_t line) { default_catalog_reader_ty *this = (default_catalog_reader_ty *) that; - - if (this->handle_filepos_comments) - { - size_t nbytes; - lex_pos_ty *pp; - - nbytes = (this->filepos_count + 1) * sizeof (this->filepos[0]); - this->filepos = xrealloc (this->filepos, nbytes); - pp = &this->filepos[this->filepos_count++]; - pp->file_name = xstrdup (name); - pp->line_number = line; - } + size_t nbytes; + lex_pos_ty *pp; + + nbytes = (this->filepos_count + 1) * sizeof (this->filepos[0]); + this->filepos = xrealloc (this->filepos, nbytes); + pp = &this->filepos[this->filepos_count++]; + pp->file_name = xstrdup (name); + pp->line_number = line; } @@ -458,10 +444,6 @@ default_catalog_reader_alloc (default_catalog_reader_class_ty *method_table) /* Exported functions. */ -/* If nonzero, remember comments for file name and line number for each - msgid, if present in the reference input. Defaults to true. */ -int line_comment = 1; - /* If false, duplicate msgids in the same domain and file generate an error. If true, such msgids are allowed; the caller should treat them appropriately. Defaults to false. */ @@ -478,7 +460,6 @@ read_catalog_stream (FILE *fp, const char *real_filename, pop = default_catalog_reader_alloc (&default_methods); pop->handle_comments = true; - pop->handle_filepos_comments = (line_comment != 0); pop->allow_domain_directives = true; pop->allow_duplicates = allow_duplicates; pop->allow_duplicates_if_same_msgstr = false; diff --git a/gettext-tools/src/read-catalog.h b/gettext-tools/src/read-catalog.h index 8b77014..f567d78 100644 --- a/gettext-tools/src/read-catalog.h +++ b/gettext-tools/src/read-catalog.h @@ -77,10 +77,6 @@ struct default_catalog_reader_class_ty /* If true, pay attention to comments and filepos comments. */ \ bool handle_comments; \ \ - /* If true, remember comments for file name and line number for each \ - msgid, if present in the reference input. */ \ - bool handle_filepos_comments; \ - \ /* If false, domain directives lead to an error messsage. */ \ bool allow_domain_directives; \ \ @@ -167,10 +163,6 @@ extern default_catalog_reader_ty * default_catalog_reader_alloc (default_catalog_reader_class_ty *method_table); -/* If nonzero, remember comments for file name and line number for each - msgid, if present in the reference input. Defaults to true. */ -extern DLL_VARIABLE int line_comment; - /* If false, duplicate msgids in the same domain and file generate an error. If true, such msgids are allowed; the caller should treat them appropriately. Defaults to false. */ diff --git a/gettext-tools/src/write-po.c b/gettext-tools/src/write-po.c index 8cfd7c4..1534a3b 100644 --- a/gettext-tools/src/write-po.c +++ b/gettext-tools/src/write-po.c @@ -306,21 +306,57 @@ message_print_comment_dot (const message_ty *mp, ostream_t stream) /* Output mp->filepos as a set of comment lines. */ +static enum filepos_comment_type filepos_comment_type = filepos_comment_full; + void message_print_comment_filepos (const message_ty *mp, ostream_t stream, bool uniforum, size_t page_width) { - if (mp->filepos_count != 0) + if (filepos_comment_type != filepos_comment_none + && mp->filepos_count != 0) { + size_t filepos_count; + lex_pos_ty *filepos; + begin_css_class (stream, class_reference_comment); + if (filepos_comment_type == filepos_comment_file) + { + size_t i; + + filepos_count = 0; + filepos = XNMALLOC (mp->filepos_count, lex_pos_ty); + + for (i = 0; i < mp->filepos_count; ++i) + { + lex_pos_ty *pp = &mp->filepos[i]; + size_t j; + + for (j = 0; j < filepos_count; j++) + if (strcmp (filepos[j].file_name, pp->file_name) == 0) + break; + + if (j == filepos_count) + { + filepos[filepos_count].file_name = pp->file_name; + filepos[filepos_count].line_number = (size_t)-1; + filepos_count++; + } + } + } + else + { + filepos = mp->filepos; + filepos_count = mp->filepos_count; + } + if (uniforum) { size_t j; - for (j = 0; j < mp->filepos_count; ++j) + for (j = 0; j < filepos_count; ++j) { - lex_pos_ty *pp = &mp->filepos[j]; + lex_pos_ty *pp = &filepos[j]; const char *cp = pp->file_name; char *str; @@ -345,19 +381,21 @@ message_print_comment_filepos (const message_ty *mp, ostream_t stream, ostream_write_str (stream, "#:"); column = 2; - for (j = 0; j < mp->filepos_count; ++j) + for (j = 0; j < filepos_count; ++j) { lex_pos_ty *pp; char buffer[21]; const char *cp; size_t len; - pp = &mp->filepos[j]; + pp = &filepos[j]; cp = pp->file_name; while (cp[0] == '.' && cp[1] == '/') cp += 2; - /* Some xgettext input formats, like RST, lack line numbers. */ - if (pp->line_number == (size_t)(-1)) + if (filepos_comment_type == filepos_comment_file + /* Some xgettext input formats, like RST, lack line + numbers. */ + || pp->line_number == (size_t)(-1)) buffer[0] = '\0'; else sprintf (buffer, ":%ld", (long) pp->line_number); @@ -377,6 +415,9 @@ message_print_comment_filepos (const message_ty *mp, ostream_t stream, ostream_write_str (stream, "\n"); } + if (filepos != mp->filepos) + free (filepos); + end_css_class (stream, class_reference_comment); } } @@ -505,6 +546,37 @@ message_print_style_escape (bool flag) escape = flag; } +void +message_print_style_filepos (enum filepos_comment_type type) +{ + filepos_comment_type = type; +} + + +/* --add-location argument handling. Return an error indicator. */ +bool +handle_filepos_comment_option (const char *option) +{ + if (option != NULL) + { + if (strcmp (option, "never") == 0 || strcmp (option, "no") == 0) + message_print_style_filepos (filepos_comment_none); + else if (strcmp (option, "full") == 0 || strcmp (option, "yes") == 0) + message_print_style_filepos (filepos_comment_full); + else if (strcmp (option, "file") == 0) + message_print_style_filepos (filepos_comment_file); + else + { + fprintf (stderr, "invalid --add-location argument: %s\n", option); + return true; + } + } + else + /* --add-location is equivalent to --add-location=full. */ + message_print_style_filepos (filepos_comment_full); + return false; +} + /* =============== msgdomain_list_print_po() and subroutines. =============== */ diff --git a/gettext-tools/src/write-po.h b/gettext-tools/src/write-po.h index 01875a5..9a243bf 100644 --- a/gettext-tools/src/write-po.h +++ b/gettext-tools/src/write-po.h @@ -30,6 +30,13 @@ extern "C" { #endif +enum filepos_comment_type + { + filepos_comment_none, + filepos_comment_full, + filepos_comment_file + }; + /* These functions are used to output a #, flags line. */ extern const char * make_format_description_string (enum is_format is_format, @@ -61,6 +68,12 @@ extern void message_print_style_uniforum (void); extern void message_print_style_escape (bool flag); +extern void + message_print_style_filepos (enum filepos_comment_type type); + +/* --add-location argument handling. Return an error indicator. */ +extern bool handle_filepos_comment_option (const char *option); + /* Describes a PO file in .po syntax. */ extern DLL_VARIABLE const struct catalog_output_format output_format_po; diff --git a/gettext-tools/src/x-po.c b/gettext-tools/src/x-po.c index aecf595..89824e2 100644 --- a/gettext-tools/src/x-po.c +++ b/gettext-tools/src/x-po.c @@ -155,7 +155,6 @@ extract (FILE *fp, pop = default_catalog_reader_alloc (&extract_methods); pop->handle_comments = true; - pop->handle_filepos_comments = (line_comment != 0); pop->allow_domain_directives = false; pop->allow_duplicates = false; pop->allow_duplicates_if_same_msgstr = true; diff --git a/gettext-tools/src/xgettext.c b/gettext-tools/src/xgettext.c index 8e89a33..8f14b93 100644 --- a/gettext-tools/src/xgettext.c +++ b/gettext-tools/src/xgettext.c @@ -199,7 +199,7 @@ iconv_t xgettext_current_source_iconv; static const struct option long_options[] = { { "add-comments", optional_argument, NULL, 'c' }, - { "add-location", no_argument, &line_comment, 1 }, + { "add-location", optional_argument, NULL, 'n' }, { "boost", no_argument, NULL, CHAR_MAX + 11 }, { "c++", no_argument, NULL, 'C' }, { "color", optional_argument, NULL, CHAR_MAX + 14 }, @@ -225,7 +225,7 @@ static const struct option long_options[] = { "msgstr-prefix", optional_argument, NULL, 'm' }, { "msgstr-suffix", optional_argument, NULL, 'M' }, { "no-escape", no_argument, NULL, 'e' }, - { "no-location", no_argument, &line_comment, 0 }, + { "no-location", no_argument, NULL, CHAR_MAX + 16 }, { "no-wrap", no_argument, NULL, CHAR_MAX + 4 }, { "omit-header", no_argument, &xgettext_omit_header, 1 }, { "output", required_argument, NULL, 'o' }, @@ -473,7 +473,8 @@ main (int argc, char *argv[]) break; case 'n': - line_comment = 1; + if (handle_filepos_comment_option (optarg)) + usage (EXIT_FAILURE); break; case 'o': @@ -587,6 +588,10 @@ main (int argc, char *argv[]) handle_style_option (optarg); break; + case CHAR_MAX + 16: /* --no-location */ + message_print_style_filepos (filepos_comment_none); + break; + default: usage (EXIT_FAILURE); /* NOTREACHED */ @@ -612,10 +617,6 @@ There is NO WARRANTY, to the extent permitted by law.\n\ usage (EXIT_SUCCESS); /* Verify selected options. */ - if (!line_comment && sort_by_filepos) - error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), - "--no-location", "--sort-by-file"); - if (sort_by_msgid && sort_by_filepos) error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), "--sort-output", "--sort-by-file"); @@ -2474,8 +2475,7 @@ meta information, not the empty string.\n"))); warn_format_string (is_format, mp->msgid, pos, "msgid"); /* Remember where we saw this msgid. */ - if (line_comment) - message_comment_filepos (mp, pos->file_name, pos->line_number); + message_comment_filepos (mp, pos->file_name, pos->line_number); /* Tell the lexer to reset its comment buffer, so that the next message gets the correct comments. */ diff --git a/gettext-tools/tests/ChangeLog b/gettext-tools/tests/ChangeLog index 85fe091..1ecaf8f 100644 --- a/gettext-tools/tests/ChangeLog +++ b/gettext-tools/tests/ChangeLog @@ -1,3 +1,18 @@ +2014-03-25 Daiki Ueno <ueno@gnu.org> + + Add tests for --add-location=file option. + * msgattrib-18: New file. + * msgcat-19: New file. + * msgcomm-28: New file. + * msgconv-7: New file. + * msgen-4: New file. + * msgfilter-5: New file. + * msggrep-11: New file. + * msgmerge-25: New file. + * msguniq-7: New file. + * xgettext-10: New file. + * Makefile.am (TESTS): Add new tests + 2014-03-11 Daiki Ueno <ueno@gnu.org> * Makefile.am (EXTRA_DIST): Add init.cfg, which is no longer diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am index e90bec4..39f5612 100644 --- a/gettext-tools/tests/Makefile.am +++ b/gettext-tools/tests/Makefile.am @@ -25,11 +25,11 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \ msgattrib-1 msgattrib-2 msgattrib-3 msgattrib-4 msgattrib-5 \ msgattrib-6 msgattrib-7 msgattrib-8 msgattrib-9 msgattrib-10 \ msgattrib-11 msgattrib-12 msgattrib-13 msgattrib-14 msgattrib-15 \ - msgattrib-16 msgattrib-17 \ + msgattrib-16 msgattrib-17 msgattrib-18 \ msgattrib-properties-1 \ msgcat-1 msgcat-2 msgcat-3 msgcat-4 msgcat-5 msgcat-6 msgcat-7 \ msgcat-8 msgcat-9 msgcat-10 msgcat-11 msgcat-12 msgcat-13 msgcat-14 \ - msgcat-15 msgcat-16 msgcat-17 msgcat-18 \ + msgcat-15 msgcat-16 msgcat-17 msgcat-18 msgcat-19 \ msgcat-properties-1 msgcat-properties-2 \ msgcat-stringtable-1 \ msgcmp-1 msgcmp-2 msgcmp-3 msgcmp-4 \ @@ -37,11 +37,11 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \ msgcomm-8 msgcomm-9 msgcomm-10 msgcomm-11 msgcomm-12 msgcomm-13 \ msgcomm-14 msgcomm-15 msgcomm-16 msgcomm-17 msgcomm-18 msgcomm-19 \ msgcomm-20 msgcomm-21 msgcomm-22 msgcomm-23 msgcomm-24 msgcomm-25 \ - msgcomm-26 msgcomm-27 \ - msgconv-1 msgconv-2 msgconv-3 msgconv-4 msgconv-5 msgconv-6 \ - msgen-1 msgen-2 msgen-3 \ + 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 \ - msgfilter-1 msgfilter-2 msgfilter-3 msgfilter-4 \ + msgfilter-1 msgfilter-2 msgfilter-3 msgfilter-4 msgfilter-5 \ msgfilter-sr-latin-1 \ msgfmt-1 msgfmt-2 msgfmt-3 msgfmt-4 msgfmt-5 msgfmt-6 msgfmt-7 \ msgfmt-8 msgfmt-9 msgfmt-10 msgfmt-11 msgfmt-12 msgfmt-13 msgfmt-14 \ @@ -49,13 +49,13 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \ msgfmt-properties-1 \ msgfmt-qt-1 msgfmt-qt-2 \ msggrep-1 msggrep-2 msggrep-3 msggrep-4 msggrep-5 msggrep-6 msggrep-7 \ - msggrep-8 msggrep-9 msggrep-10 \ + msggrep-8 msggrep-9 msggrep-10 msggrep-11 \ msginit-1 msginit-2 \ msgmerge-1 msgmerge-2 msgmerge-3 msgmerge-4 msgmerge-5 msgmerge-6 \ msgmerge-7 msgmerge-8 msgmerge-9 msgmerge-10 msgmerge-11 msgmerge-12 \ msgmerge-13 msgmerge-14 msgmerge-15 msgmerge-16 msgmerge-17 \ msgmerge-18 msgmerge-19 msgmerge-20 msgmerge-21 msgmerge-22 \ - msgmerge-23 msgmerge-24 \ + msgmerge-23 msgmerge-24 msgmerge-25 \ msgmerge-compendium-1 msgmerge-compendium-2 msgmerge-compendium-3 \ msgmerge-compendium-4 msgmerge-compendium-5 msgmerge-compendium-6 \ msgmerge-properties-1 msgmerge-properties-2 \ @@ -66,10 +66,10 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \ msgunfmt-java-1 \ msgunfmt-properties-1 \ msgunfmt-tcl-1 \ - msguniq-1 msguniq-2 msguniq-3 msguniq-4 msguniq-5 msguniq-6 \ + msguniq-1 msguniq-2 msguniq-3 msguniq-4 msguniq-5 msguniq-6 msguniq-7 \ recode-sr-latin-1 recode-sr-latin-2 \ xgettext-1 xgettext-2 xgettext-3 xgettext-4 xgettext-5 xgettext-6 \ - xgettext-7 xgettext-8 xgettext-9 \ + xgettext-7 xgettext-8 xgettext-9 xgettext-10 \ xgettext-awk-1 xgettext-awk-2 \ xgettext-c-1 xgettext-c-2 xgettext-c-3 xgettext-c-4 xgettext-c-5 \ xgettext-c-6 xgettext-c-7 xgettext-c-8 xgettext-c-9 xgettext-c-10 \ diff --git a/gettext-tools/tests/msgattrib-18 b/gettext-tools/tests/msgattrib-18 new file mode 100755 index 0000000..68be0f2 --- /dev/null +++ b/gettext-tools/tests/msgattrib-18 @@ -0,0 +1,98 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<\EOF > ma-test18.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 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 + +: ${MSGATTRIB=msgattrib} +${MSGATTRIB} --translated --add-location=file -o ma-test18.tmp ma-test18.po \ + || exit 1 +LC_ALL=C tr -d '\r' < ma-test18.tmp > ma-test18.out || exit 1 + +cat <<\EOF > ma-test18.ok +# 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 +#, fuzzy +msgid "The world is full of married men" +msgstr "So viele verheiratete Männer" + +#: married-men +msgid "with wives who never understand" +msgstr "und ihre Frauen verstehen sie nicht" + +#~ msgid "You fly on the wings of romance" +#~ msgstr "Die Flügel der frischen Liebe 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 + +: ${DIFF=diff} +${DIFF} ma-test18.ok ma-test18.out +result=$? + +exit $result diff --git a/gettext-tools/tests/msgcat-19 b/gettext-tools/tests/msgcat-19 new file mode 100755 index 0000000..4dd2a40 --- /dev/null +++ b/gettext-tools/tests/msgcat-19 @@ -0,0 +1,66 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<EOF > mcat-test19.in1 +msgid "" +msgstr "" +"Project-Id-Version: GNU one 1.2.3\n" +"POT-Creation-Date: 2000-12-11 20:49+0100\n" +"PO-Revision-Date: 2000-03-18 15:25+01:00\n" +"Last-Translator: Karl Eichwalder <ke@suse.de>\n" +"Language-Team: German <de@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: first.c:123 +msgid "1" +msgstr "eins" +EOF + +cat <<EOF > mcat-test19.in2 +msgid "" +msgstr "" +"Project-Id-Version: GNU one 1.2.3\n" +"POT-Creation-Date: 2000-12-11 20:49+0100\n" +"PO-Revision-Date: 2000-03-18 15:25+01:00\n" +"Last-Translator: Karl Eichwalder <ke@suse.de>\n" +"Language-Team: German <de@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: hunt.c:759 +msgid "1" +msgstr "eins" +EOF + +: ${MSGCAT=msgcat} +${MSGCAT} --add-location=file \ + -o mcat-test19.tmp mcat-test19.in1 mcat-test19.in2 || exit 1 +LC_ALL=C tr -d '\r' < mcat-test19.tmp > mcat-test19.out || exit 1 + +cat << EOF > mcat-test19.ok +msgid "" +msgstr "" +"Project-Id-Version: GNU one 1.2.3\n" +"POT-Creation-Date: 2000-12-11 20:49+0100\n" +"PO-Revision-Date: 2000-03-18 15:25+01:00\n" +"Last-Translator: Karl Eichwalder <ke@suse.de>\n" +"Language-Team: German <de@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: first.c hunt.c +msgid "1" +msgstr "eins" +EOF + +: ${DIFF=diff} +${DIFF} mcat-test19.ok mcat-test19.out +result=$? + +exit $result diff --git a/gettext-tools/tests/msgcomm-28 b/gettext-tools/tests/msgcomm-28 new file mode 100755 index 0000000..665ab0a --- /dev/null +++ b/gettext-tools/tests/msgcomm-28 @@ -0,0 +1,37 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<EOF > mcomm-test28.in1 +#: first.c:123 +msgid "1" +msgstr "1x" +EOF + +cat <<EOF > mcomm-test28.in2 +#: hunt.c:759 +msgid "2" +msgstr "2x" +EOF + +: ${MSGCOMM=msgcomm} +${MSGCOMM} --add-location=file --more-than=0 \ + -o mcomm-test28.tmp mcomm-test28.in1 mcomm-test28.in2 || exit 1 +LC_ALL=C tr -d '\r' < mcomm-test28.tmp > mcomm-test28.out || exit 1 + +cat << EOF > mcomm-test28.ok +#: first.c +msgid "1" +msgstr "1x" + +#: hunt.c +msgid "2" +msgstr "2x" +EOF + +: ${DIFF=diff} +${DIFF} mcomm-test28.ok mcomm-test28.out +result=$? + +exit $result diff --git a/gettext-tools/tests/msgconv-7 b/gettext-tools/tests/msgconv-7 new file mode 100755 index 0000000..2d1fa65 --- /dev/null +++ b/gettext-tools/tests/msgconv-7 @@ -0,0 +1,43 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<\EOF > mco-test7.po +# Chinese translation for GNU gettext messages. +# +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=big5\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/msgcmp.c:155 src/msgmerge.c:273 +msgid "exactly 2 input files required" +msgstr "¦¹¥\¯à»Ýn«ê¦n«ü©w¨âÓ¿é¤JÀÉ" +EOF + +: ${MSGCONV=msgconv} +${MSGCONV} --add-location=file --to-code=UTF-8 \ + -o mco-test7.out mco-test7.po || exit 1 + +cat <<\EOF > mco-test7.ok +# Chinese translation for GNU gettext messages. +# +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/msgcmp.c src/msgmerge.c +msgid "exactly 2 input files required" +msgstr "æ¤åŠŸèƒ½éœ€è¦æ°å¥½æŒ‡å®šå…©å€‹è¼¸å…¥æª”" +EOF + +: ${DIFF=diff} +# Redirect stdout, so as not to fill the user's screen with non-ASCII bytes. +${DIFF} mco-test7.ok mco-test7.out >/dev/null +result=$? + +exit $result diff --git a/gettext-tools/tests/msgen-4 b/gettext-tools/tests/msgen-4 new file mode 100755 index 0000000..6dddf5d --- /dev/null +++ b/gettext-tools/tests/msgen-4 @@ -0,0 +1,68 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<EOF > men-test1.po +# HEADER. +# +msgid "" +msgstr "" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" + +#: foo:1 +msgid "height must be positive" +msgstr "" + +#: foo:2 +msgid "color cannot be transparent" +msgstr "colour cannot be transparent" + +#: bar:3 +msgid "width must be positive" +msgstr "" + +#: baz:4 +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "" +msgstr[1] "" +EOF + +: ${MSGEN=msgen} +${MSGEN} --add-location=file -o men-test1.tmp men-test1.po || exit 1 +LC_ALL=C tr -d '\r' < men-test1.tmp > men-test1.out || exit 1 + +cat <<EOF > men-test1.ok +# HEADER. +# +msgid "" +msgstr "" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" + +#: foo +msgid "height must be positive" +msgstr "height must be positive" + +#: foo +msgid "color cannot be transparent" +msgstr "colour cannot be transparent" + +#: bar +msgid "width must be positive" +msgstr "width must be positive" + +#: baz +msgid "%d error" +msgid_plural "%d errors" +msgstr[0] "%d error" +msgstr[1] "%d errors" +EOF + +: ${DIFF=diff} +${DIFF} men-test1.ok men-test1.out +result=$? + +exit $result diff --git a/gettext-tools/tests/msgfilter-5 b/gettext-tools/tests/msgfilter-5 new file mode 100755 index 0000000..0a8da6f --- /dev/null +++ b/gettext-tools/tests/msgfilter-5 @@ -0,0 +1,169 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +# Some fold programs (like SunOS4 and FreeBSD) don't have an option to wrap at +# spaces. +echo abc | fold -b -s -w 20 >/dev/null 2>&1 || { + echo "Skipping test: fold program not POSIX compliant" + exit 77 +} + +# Some fold programs (like NetBSD 5.0) remove trailing spaces when wrapping. +echo ab cd | fold -b -s -w 3 | grep ' ' >/dev/null || { + echo "Skipping test: fold program trims trailing spaces" + exit 77 +} + +# Some fold programs (like HP-UX) insert a newline at the end, if the last +# line was not terminated with a newline and the -s option was given. +foldoutputcount=`echo $ac_n "abc$ac_c" | fold -b -s -w 20 | wc -c` +foldoutputcount=`echo "$foldoutputcount" | sed -e 's/[ ]//g'` +test "$foldoutputcount" = 3 || { + echo "Skipping test: fold program inserts extra newline" + exit 77 +} + +cat <<\EOF > mfi-test5.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 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 + +: ${MSGFILTER=msgfilter} +LC_ALL=C ${MSGFILTER} --add-location=file -i mfi-test5.po -o mfi-test5.out \ + fold -b -s -w 20 >mfi-test5.err 2>&1 +result=$? +cat mfi-test5.err | grep -v 'warning: Locale charset' | grep -v '^ ' +test $result = 0 || { exit 1; } + +cat <<\EOF > mfi-test5.ok +# HEADER. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Bonnie Tyler\n" +"Content-Type: \n" +"text/plain; \n" +"charset=ISO-8859-1\n" +"Content-Transfer-Enc\n" +"oding: 8bit\n" + +#: married-men +#, fuzzy +msgid "The world is full of married men" +msgstr "" +"So viele \n" +"verheiratete Männer" + +#: married-men +msgid "with wives who never understand" +msgstr "" +"und ihre Frauen \n" +"verstehen sie nicht" + +#: married-men +msgid "They're looking for someone to share" +msgstr "" + +# schwer zu übersetzen... +#: married-men +msgid "the excitement of a love affair" +msgstr "" + +#: married-men +msgid "Just as soon as they find you" +msgstr "" + +#: married-men +msgid "They warn you and darn you" +msgstr "" + +#~ msgid "You fly on the wings of romance" +#~ msgstr "" +#~ "Die Flügel der \n" +#~ "frischen Liebe \n" +#~ "heben dich zum \n" +#~ "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 \n" +#~ "verrücktes dummes \n" +#~ "Ding" + +#~ msgid "Who loves a married man" +#~ msgstr "" +#~ "das einen \n" +#~ "verheirateten Mann \n" +#~ "liebt" +EOF + +: ${DIFF=diff} +${DIFF} mfi-test5.ok mfi-test5.out +result=$? + +exit $result diff --git a/gettext-tools/tests/msggrep-11 b/gettext-tools/tests/msggrep-11 new file mode 100755 index 0000000..bf77675 --- /dev/null +++ b/gettext-tools/tests/msggrep-11 @@ -0,0 +1,189 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<\EOF > mg-test11.po +# German translations for GNU gettext package. +# Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc. +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.11-pre1\n" +"POT-Creation-Date: 2001-12-08 20:33+0100\n" +"PO-Revision-Date: 2001-11-04 12:25+0100\n" +"Last-Translator: Karl Eichwalder <ke@suse.de>\n" +"Language-Team: German <de@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: argmatch.c:141 +#, c-format +msgid "invalid argument `%s' for `%s'" +msgstr "ungültiges Argument »%s« für »%s«" + +#: argmatch.c:142 +#, c-format +msgid "ambiguous argument `%s' for `%s'" +msgstr "mehrdeutiges Argument »%s« für »%s«" + +#: argmatch.c:162 +msgid "Valid arguments are:" +msgstr "Gültige Argumente sind:" + +#: copy-file.c:60 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "Öffnen der Datei »%s« zum Lesen fehlgeschlagen" + +#: copy-file.c:67 +#, c-format +msgid "cannot open backup file \"%s\" for writing" +msgstr "Öffnen der Sicherungsdatei »%s« zum Schreiben fehlgeschlagen" + +#: copy-file.c:80 +#, c-format +msgid "error reading \"%s\"" +msgstr "Fehler beim Lesen von »%s«" + +#: copy-file.c:86 copy-file.c:90 +#, c-format +msgid "error writing \"%s\"" +msgstr "Fehler beim Schreiben von »%s«" + +#: copy-file.c:92 +#, c-format +msgid "error after reading \"%s\"" +msgstr "Fehler nach dem Lesen von »%s«" + +#: error.c:115 +msgid "Unknown system error" +msgstr "Unbekannter Systemfehler" + +#: execute.c:170 execute.c:205 pipe-bidi.c:156 pipe-bidi.c:191 pipe-in.c:169 +#: pipe-in.c:205 pipe-out.c:169 pipe-out.c:205 wait-process.c:136 +#, c-format +msgid "%s subprocess failed" +msgstr "Subprozess %s fehlgeschlagen" + +#: getopt.c:691 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: Option »%s« ist mehrdeutig\n" + +#: getopt.c:716 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: Option »--%s« erwartet kein Argument\n" + +#: getopt.c:721 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: Option »%c%s« erwartet kein Argument\n" + +#: getopt.c:739 getopt.c:912 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: Option »%s« erwartet ein Argument\n" + +#: getopt.c:768 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: unbekannte Option »--%s«\n" + +#: getopt.c:772 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: unbekannte Option »%c%s«\n" + +#: getopt.c:798 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: unzulässige Option -- %c\n" + +#: getopt.c:801 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ungültige Option -- %c\n" + +#: getopt.c:831 getopt.c:961 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: Option erwartet ein Argument -- %c\n" + +#: getopt.c:878 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: Option »-W %s« ist mehrdeutig\n" + +#: getopt.c:896 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: Option »-W %s« erwartet kein Argument\n" + +#: javacomp.c:465 +msgid "Java compiler not found, try installing gcj or set $JAVAC" +msgstr "" +"Java-Compiler nicht gefunden; bitte »gcj« installieren oder $JAVAC setzen" + +#: javaexec.c:404 +msgid "Java virtual machine not found, try installing gij or set $JAVA" +msgstr "" +"Virtuelle Java-Maschine nicht gefunden; bitte »gcj« installieren oder\n" +"$JAVA setzen" + +#: obstack.c:474 xerror.c:75 xmalloc.c:56 +msgid "memory exhausted" +msgstr "virtueller Speicher erschöpft" + +#: pipe-bidi.c:119 pipe-bidi.c:121 pipe-in.c:136 pipe-out.c:136 +msgid "cannot create pipe" +msgstr "Es ist nicht möglich, eine Pipe zu erzeugen" + +#: wait-process.c:117 +#, c-format +msgid "%s subprocess" +msgstr "Subprozess %s" + +#: wait-process.c:129 +#, c-format +msgid "%s subprocess got fatal signal" +msgstr "Subprozess %s hat ein fatales Signal erhalten" +EOF + +: ${MSGGREP=msggrep} +${MSGGREP} --add-location=file -N pipe-bidi.c -o mg-test11.tmp mg-test11.po \ + || exit 1 +LC_ALL=C tr -d '\r' < mg-test11.tmp > mg-test11.out || exit 1 + +cat <<\EOF > mg-test11.ok +# German translations for GNU gettext package. +# Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc. +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.11-pre1\n" +"POT-Creation-Date: 2001-12-08 20:33+0100\n" +"PO-Revision-Date: 2001-11-04 12:25+0100\n" +"Last-Translator: Karl Eichwalder <ke@suse.de>\n" +"Language-Team: German <de@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: execute.c pipe-bidi.c pipe-in.c pipe-out.c wait-process.c +#, c-format +msgid "%s subprocess failed" +msgstr "Subprozess %s fehlgeschlagen" + +#: pipe-bidi.c pipe-in.c pipe-out.c +msgid "cannot create pipe" +msgstr "Es ist nicht möglich, eine Pipe zu erzeugen" +EOF + +: ${DIFF=diff} +${DIFF} mg-test11.ok mg-test11.out +result=$? + +exit $result diff --git a/gettext-tools/tests/msgmerge-25 b/gettext-tools/tests/msgmerge-25 new file mode 100755 index 0000000..d0f2d2c --- /dev/null +++ b/gettext-tools/tests/msgmerge-25 @@ -0,0 +1,69 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<EOF > mm-test25.in1 +# first +#. this should be discarded +msgid "1" +msgstr "1x" +# second +#: bogus:1 +msgid "2" +msgstr "this is a really long msgstr " + "used to test the wrapping to " + "make sure it works after all " + "what is a test for if not to test things?" +# third +msgid "3" +msgstr "3z" +EOF + +cat <<EOF > mm-test25.in2 +#. this is the first +#: snark.c:345 +msgid "1" +msgstr "" +#. this is the second +#: hunt.c:759 +msgid "2" +msgstr "" +#. this is the third +#: boojum.c:300 +msgid "3" +msgstr "" +EOF + +: ${MSGMERGE=msgmerge} +${MSGMERGE} --add-location=file -q -o mm-test25.tmp mm-test25.in1 mm-test25.in2 \ + || exit 1 +LC_ALL=C tr -d '\r' < mm-test25.tmp > mm-test25.out || exit 1 + +cat << EOF > mm-test25.ok +# first +#. this is the first +#: snark.c +msgid "1" +msgstr "1x" + +# second +#. this is the second +#: hunt.c +msgid "2" +msgstr "" +"this is a really long msgstr used to test the wrapping to make sure it works " +"after all what is a test for if not to test things?" + +# third +#. this is the third +#: boojum.c +msgid "3" +msgstr "3z" +EOF + +: ${DIFF=diff} +${DIFF} mm-test25.ok mm-test25.out +result=$? + +exit $result diff --git a/gettext-tools/tests/msguniq-7 b/gettext-tools/tests/msguniq-7 new file mode 100755 index 0000000..5cae2e9 --- /dev/null +++ b/gettext-tools/tests/msguniq-7 @@ -0,0 +1,30 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<\EOF > msguniq-7.in +#: foo:1 +msgid "foo" +msgstr "" + +#: bar:1 +msgid "foo" +msgstr "" +EOF + +: ${MSGUNIQ-msguniq} +${MSGUNIQ} --add-location=file -o msguniq-7.tmp msguniq-7.in || exit 1 +LC_ALL=C tr -d '\r' < msguniq-7.tmp > msguniq-7.out || exit 1 + +cat <<\EOF > msguniq-7.ok +#: foo bar +msgid "foo" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} msguniq-7.ok msguniq-7.out +result=$? + +exit $result diff --git a/gettext-tools/tests/xgettext-10 b/gettext-tools/tests/xgettext-10 new file mode 100755 index 0000000..632a4ee --- /dev/null +++ b/gettext-tools/tests/xgettext-10 @@ -0,0 +1,36 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test --add-location=file option. + +cat <<\EOF > xg-test10a.c +gettext ("foo"); +EOF + +cat <<\EOF > xg-test10b.c +gettext ("foo"); +gettext ("bar"); +EOF + +: ${XGETTEXT=xgettext} +${XGETTEXT} --add-location=file --omit-header xg-test10a.c xg-test10b.c \ + -o xg-test10.out >xg-test10.err 2>&1 +result=$? +cat xg-test10.err | grep -v 'warning: Charset' | grep -v '^ ' +test $result = 0 || { exit 1; } + +cat <<\EOF > xg-test10.ok +#: xg-test10a.c xg-test10b.c +msgid "foo" +msgstr "" + +#: xg-test10b.c +msgid "bar" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test10.ok xg-test10.out +result=$? + +exit $result |