Re: [PATCH] Support generate poison .mo files for testing
From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:54:33
On Wed, Aug 22, 2012 at 11:43 PM, Junio C Hamano [off-list ref] wrote:
why are you special casing a run of non-blank letters that begin with a dollar sign (swapping two ints is done with "%2$d %1$d", a percent still at the beginning, so there must be something else I am missing)?
'$' is for shell variables. I should separate it from C messages. All these because now that we run the (fake) translation through gettext toolchain, it'll catch us if we don't preserve dynamic parts correctly.
Also why do you stop at isspace()? Isn't a " " (space) a flag that means "If the first character of a signed conversion is not a sign or if a signed conversion results in no characters, a <space> shall be prefixed to the result."
A hurry attempt to get past msgfmt. I should refine these code, either by...
As the flags, min-width, precision, and length do not share the same
character as the conversion that has to come at the end, I think you
only want to do something like
/*
* conversion specifier characters, taken from:
* http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
*/
static const char printf_conversion[] = "diouxXfFeEgGaAcspnCS%";
...
while (msg < end) {
if (*msg == '%') {
strbuf_addch(buf, *msg++);
while (msg < end) {
int ch = *msg++;
strbuf_addch(buf, ch);
if (strchr(printf_conversion, ch))
break;
}
/* copied the printf part literally */
continue;
}
... keep \n ...
... muck with string ...
}
perhaps?following this, or copying the matching logic from msgfmt source. -- Duy