Mercurial > hg > octave-kai > gnulib-hg
changeset 7277:e6927185dbdf
(argp_doc): Split the untranslated doc string on '\v',
and translate the two parts separately, instead of feeding
the whole string to gettext. This allows to exclude
'\v' from the strings visible to the translator by writing doc
strings as N_("..") "\v" N_("..").
author | Sergey Poznyakoff <gray@gnu.org.ua> |
---|---|
date | Sat, 09 Sep 2006 05:12:46 +0000 |
parents | 4be2c469b318 |
children | 22ccb5ed3707 |
files | lib/argp-help.c |
diffstat | 1 files changed, 18 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/argp-help.c +++ b/lib/argp-help.c @@ -1475,17 +1475,26 @@ { const char *text; const char *inp_text; + size_t inp_text_len = 0; void *input = 0; int anything = 0; - size_t inp_text_limit = 0; - const char *doc = dgettext (argp->argp_domain, argp->doc); const struct argp_child *child = argp->children; - if (doc) + if (argp->doc) { - char *vt = strchr (doc, '\v'); - inp_text = post ? (vt ? vt + 1 : 0) : doc; - inp_text_limit = (!post && vt) ? (vt - doc) : 0; + char *vt = strchr (argp->doc, '\v'); + if (vt) + { + if (post) + inp_text = vt + 1; + else + { + inp_text_len = vt - argp->doc; + inp_text = __strndup (argp->doc, inp_text_len); + } + } + else + inp_text = dgettext (argp->argp_domain, post ? 0 : argp->doc); } else inp_text = 0; @@ -1493,9 +1502,6 @@ if (argp->help_filter) /* We have to filter the doc strings. */ { - if (inp_text_limit) - /* Copy INP_TEXT so that it's nul-terminated. */ - inp_text = __strndup (inp_text, inp_text_limit); input = __argp_input (argp, state); text = (*argp->help_filter) (post @@ -1511,10 +1517,7 @@ if (pre_blank) __argp_fmtstream_putc (stream, '\n'); - if (text == inp_text && inp_text_limit) - __argp_fmtstream_write (stream, inp_text, inp_text_limit); - else - __argp_fmtstream_puts (stream, text); + __argp_fmtstream_puts (stream, text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); @@ -1524,7 +1527,8 @@ if (text && text != inp_text) free ((char *) text); /* Free TEXT returned from the help filter. */ - if (inp_text && inp_text_limit && argp->help_filter) + + if (inp_text && inp_text_len) free ((char *) inp_text); /* We copied INP_TEXT, so free it now. */ if (post && argp->help_filter)