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