provide arg_printusage_i18n

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23817 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2008-09-13 09:43:44 +00:00
parent 50d02c49b9
commit e3ccedbfa9
2 changed files with 47 additions and 16 deletions

View File

@@ -45,7 +45,12 @@ RCSID("$Id$");
#define ISFLAG(X) ((X).type == arg_flag || (X).type == arg_negative_flag) #define ISFLAG(X) ((X).type == arg_flag || (X).type == arg_negative_flag)
static size_t static size_t
print_arg (char *string, size_t len, int mdoc, int longp, struct getargs *arg) print_arg (char *string,
size_t len,
int mdoc,
int longp,
struct getargs *arg,
char *(i18n)(const char *))
{ {
const char *s; const char *s;
@@ -66,7 +71,7 @@ print_arg (char *string, size_t len, int mdoc, int longp, struct getargs *arg)
} }
if (arg->arg_help) if (arg->arg_help)
s = arg->arg_help; s = (*i18n)(arg->arg_help);
else if (arg->type == arg_integer || arg->type == arg_counter) else if (arg->type == arg_integer || arg->type == arg_counter)
s = "integer"; s = "integer";
else if (arg->type == arg_string) else if (arg->type == arg_string)
@@ -86,7 +91,8 @@ static void
mandoc_template(struct getargs *args, mandoc_template(struct getargs *args,
size_t num_args, size_t num_args,
const char *progname, const char *progname,
const char *extra_string) const char *extra_string,
char *(i18n)(const char *))
{ {
int i; int i;
char timestr[64], cmd[64]; char timestr[64], cmd[64];
@@ -123,22 +129,22 @@ mandoc_template(struct getargs *args,
printf(".Op "); printf(".Op ");
if(args[i].short_name) { if(args[i].short_name) {
print_arg(buf, sizeof(buf), 1, 0, args + i); print_arg(buf, sizeof(buf), 1, 0, args + i, i18n);
printf("Fl %c%s", args[i].short_name, buf); printf("Fl %c%s", args[i].short_name, buf);
if(args[i].long_name) if(args[i].long_name)
printf(" | "); printf(" | ");
} }
if(args[i].long_name) { if(args[i].long_name) {
print_arg(buf, sizeof(buf), 1, 1, args + i); print_arg(buf, sizeof(buf), 1, 1, args + i, i18n);
printf("Fl -%s%s%s", printf("Fl -%s%s%s",
args[i].type == arg_negative_flag ? "no-" : "", args[i].type == arg_negative_flag ? "no-" : "",
args[i].long_name, buf); args[i].long_name, buf);
} }
printf("\n"); printf("\n");
} else { } else {
print_arg(buf, sizeof(buf), 1, 0, args + i); print_arg(buf, sizeof(buf), 1, 0, args + i, i18n);
printf(".Oo Fl %c%s \\*(Ba Xo\n", args[i].short_name, buf); printf(".Oo Fl %c%s \\*(Ba Xo\n", args[i].short_name, buf);
print_arg(buf, sizeof(buf), 1, 1, args + i); print_arg(buf, sizeof(buf), 1, 1, args + i, i18n);
printf(".Fl -%s%s\n.Xc\n.Oc\n", args[i].long_name, buf); printf(".Fl -%s%s\n.Xc\n.Oc\n", args[i].long_name, buf);
} }
/* /*
@@ -155,7 +161,7 @@ mandoc_template(struct getargs *args,
printf(".It Xo\n"); printf(".It Xo\n");
if(args[i].short_name){ if(args[i].short_name){
printf(".Fl %c", args[i].short_name); printf(".Fl %c", args[i].short_name);
print_arg(buf, sizeof(buf), 1, 0, args + i); print_arg(buf, sizeof(buf), 1, 0, args + i, i18n);
printf("%s", buf); printf("%s", buf);
if(args[i].long_name) if(args[i].long_name)
printf(" ,"); printf(" ,");
@@ -165,7 +171,7 @@ mandoc_template(struct getargs *args,
printf(".Fl -%s%s", printf(".Fl -%s%s",
args[i].type == arg_negative_flag ? "no-" : "", args[i].type == arg_negative_flag ? "no-" : "",
args[i].long_name); args[i].long_name);
print_arg(buf, sizeof(buf), 1, 1, args + i); print_arg(buf, sizeof(buf), 1, 1, args + i, i18n);
printf("%s\n", buf); printf("%s\n", buf);
} }
printf(".Xc\n"); printf(".Xc\n");
@@ -198,11 +204,29 @@ check_column(FILE *f, int col, int len, int columns)
return col; return col;
} }
static char *
builtin_i18n(const char *str)
{
return rk_UNCONST(str);
}
void ROKEN_LIB_FUNCTION void ROKEN_LIB_FUNCTION
arg_printusage (struct getargs *args, arg_printusage (struct getargs *args,
size_t num_args, size_t num_args,
const char *progname, const char *progname,
const char *extra_string) const char *extra_string)
{
return arg_printusage_i18n(args, num_args, "Usage",
progname, extra_string, builtin_i18n);
}
void ROKEN_LIB_FUNCTION
arg_printusage_i18n (struct getargs *args,
size_t num_args,
const char *usage,
const char *progname,
const char *extra_string,
char *(i18n)(const char *))
{ {
int i; int i;
size_t max_len = 0; size_t max_len = 0;
@@ -214,7 +238,7 @@ arg_printusage (struct getargs *args,
progname = getprogname(); progname = getprogname();
if(getenv("GETARGMANDOC")){ if(getenv("GETARGMANDOC")){
mandoc_template(args, num_args, progname, extra_string); mandoc_template(args, num_args, progname, extra_string, i18n);
return; return;
} }
if(get_window_size(2, &ws) == 0) if(get_window_size(2, &ws) == 0)
@@ -222,7 +246,7 @@ arg_printusage (struct getargs *args,
else else
columns = 80; columns = 80;
col = 0; col = 0;
col += fprintf (stderr, "Usage: %s", progname); col += fprintf (stderr, "%s: %s", usage, progname);
buf[0] = '\0'; buf[0] = '\0';
for (i = 0; i < num_args; ++i) { for (i = 0; i < num_args; ++i) {
if(args[i].short_name && ISFLAG(args[i])) { if(args[i].short_name && ISFLAG(args[i])) {
@@ -254,7 +278,7 @@ arg_printusage (struct getargs *args,
strlcat(buf, args[i].long_name, sizeof(buf)); strlcat(buf, args[i].long_name, sizeof(buf));
len += strlen(args[i].long_name); len += strlen(args[i].long_name);
len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf), len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf),
0, 1, &args[i]); 0, 1, &args[i], i18n);
strlcat(buf, "]", sizeof(buf)); strlcat(buf, "]", sizeof(buf));
if(args[i].type == arg_strings) if(args[i].type == arg_strings)
strlcat(buf, "...", sizeof(buf)); strlcat(buf, "...", sizeof(buf));
@@ -265,7 +289,7 @@ arg_printusage (struct getargs *args,
snprintf(buf, sizeof(buf), "[-%c", args[i].short_name); snprintf(buf, sizeof(buf), "[-%c", args[i].short_name);
len += 2; len += 2;
len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf), len += print_arg(buf + strlen(buf), sizeof(buf) - strlen(buf),
0, 0, &args[i]); 0, 0, &args[i], i18n);
strlcat(buf, "]", sizeof(buf)); strlcat(buf, "]", sizeof(buf));
if(args[i].type == arg_strings) if(args[i].type == arg_strings)
strlcat(buf, "...", sizeof(buf)); strlcat(buf, "...", sizeof(buf));
@@ -287,7 +311,7 @@ arg_printusage (struct getargs *args,
if (args[i].short_name) { if (args[i].short_name) {
count += fprintf (stderr, "-%c", args[i].short_name); count += fprintf (stderr, "-%c", args[i].short_name);
print_arg (buf, sizeof(buf), 0, 0, &args[i]); print_arg (buf, sizeof(buf), 0, 0, &args[i], i18n);
count += fprintf(stderr, "%s", buf); count += fprintf(stderr, "%s", buf);
} }
if (args[i].short_name && args[i].long_name) if (args[i].short_name && args[i].long_name)
@@ -297,12 +321,12 @@ arg_printusage (struct getargs *args,
if (args[i].type == arg_negative_flag) if (args[i].type == arg_negative_flag)
count += fprintf (stderr, "no-"); count += fprintf (stderr, "no-");
count += fprintf (stderr, "%s", args[i].long_name); count += fprintf (stderr, "%s", args[i].long_name);
print_arg (buf, sizeof(buf), 0, 1, &args[i]); print_arg (buf, sizeof(buf), 0, 1, &args[i], i18n);
count += fprintf(stderr, "%s", buf); count += fprintf(stderr, "%s", buf);
} }
while(count++ <= max_len) while(count++ <= max_len)
putc (' ', stderr); putc (' ', stderr);
fprintf (stderr, "%s\n", args[i].help); fprintf (stderr, "%s\n", (*i18n)(args[i].help));
} }
} }
} }

View File

@@ -96,6 +96,13 @@ arg_printusage (struct getargs *args,
const char *progname, const char *progname,
const char *extra_string); const char *extra_string);
void ROKEN_LIB_FUNCTION
arg_printusage_i18n (struct getargs *args,
size_t num_args,
const char *progname,
const char *extra_string,
char *(i18n)(const char *));
void ROKEN_LIB_FUNCTION void ROKEN_LIB_FUNCTION
free_getarg_strings (getarg_strings *); free_getarg_strings (getarg_strings *);