[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Fixing argp doc strings
From: |
Sergey Poznyakoff |
Subject: |
Fixing argp doc strings |
Date: |
Sat, 09 Sep 2006 08:39:36 +0300 |
Hello,
I have installed the following change:
2006-09-09 Sergey Poznyakoff <address@hidden>
* argp-help.c (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 msgids visible to the translator by writing doc
strings as N_("..") "\v" N_("..").
Index: argp-help.c
===================================================================
RCS file: /cvsroot/gnulib/gnulib/lib/argp-help.c,v
retrieving revision 1.22
retrieving revision 1.24
diff -p -u -r1.22 -r1.24
--- argp-help.c 13 Mar 2006 09:51:53 -0000 1.22
+++ argp-help.c 9 Sep 2006 05:38:06 -0000 1.24
@@ -1475,46 +1475,51 @@ argp_doc (const struct argp *argp, const
{
const char *text;
const char *inp_text;
+ size_t inp_text_len = 0;
+ const char *trans_text;
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 = post ? 0 : argp->doc;
+ trans_text = dgettext (argp->argp_domain, inp_text);
}
else
- inp_text = 0;
+ trans_text = inp_text = 0;
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
? ARGP_KEY_HELP_POST_DOC
: ARGP_KEY_HELP_PRE_DOC,
- inp_text, input);
+ trans_text, input);
}
else
- text = (const char *) inp_text;
+ text = (const char *) trans_text;
if (text)
{
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');
@@ -1522,9 +1527,10 @@ argp_doc (const struct argp *argp, const
anything = 1;
}
- if (text && text != inp_text)
+ if (text && text != trans_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)