diff options
author | ewt <ewt> | 1998-10-29 22:52:03 +0000 |
---|---|---|
committer | ewt <ewt> | 1998-10-29 22:52:03 +0000 |
commit | 915018419b4f3fe3c9705a0feef375c8cced0917 (patch) | |
tree | 47a2ca4bb2eb6ce7e92f22e661b968867984344d /popthelp.c | |
parent | 7124dbd013a67f74c16745719441248888d867c4 (diff) | |
download | libpopt-915018419b4f3fe3c9705a0feef375c8cced0917.tar.gz |
added POPT_ARG_INTL_DOMAIN (Elliot Lee)
updated Makefile's to be more GNUish (Elliot Lee)
Diffstat (limited to 'popthelp.c')
-rw-r--r-- | popthelp.c | 82 |
1 files changed, 58 insertions, 24 deletions
@@ -1,3 +1,5 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ + /* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING file accompanying popt source distributions, available from ftp://ftp.redhat.com/pub/code/popt */ @@ -18,9 +20,9 @@ static void displayArgs(poptContext con, enum poptCallbackReason foo, struct poptOption * key, const char * arg, void * data) { if (key->shortName== '?') - poptPrintHelp(con, stderr, 0); + poptPrintHelp(con, stdout, 0); else - poptPrintUsage(con, stderr, 0); + poptPrintUsage(con, stdout, 0); exit(0); } @@ -31,26 +33,44 @@ struct poptOption poptHelpOptions[] = { { NULL, '\0', 0, NULL, 0 } } ; -static const char * getArgDescrip(const struct poptOption * opt) { + +static const char * +getTableTranslationDomain(const struct poptOption *table) +{ + const struct poptOption *opt; + + for(opt = table; + opt->longName || opt->shortName || opt->arg; + opt++) { + if(opt->argInfo == POPT_ARG_INTL_DOMAIN) + return opt->arg; + } + + return NULL; +} + +static const char * getArgDescrip(const struct poptOption * opt, + const char *translation_domain) { if (!(opt->argInfo & POPT_ARG_MASK)) return NULL; if (opt == (poptHelpOptions + 1) || opt == (poptHelpOptions + 2)) if (opt->argDescrip) return POPT_(opt->argDescrip); - if (opt->argDescrip) return _(opt->argDescrip); + if (opt->argDescrip) return D_(translation_domain, opt->argDescrip); return POPT_("ARG"); } static void singleOptionHelp(FILE * f, int maxLeftCol, - const struct poptOption * opt) { + const struct poptOption * opt, + const char *translation_domain) { int indentLength = maxLeftCol + 5; int lineLength = 79 - indentLength; - const char * help = _(opt->descrip); + const char * help = D_(translation_domain, opt->descrip); int helpLength; const char * ch; char format[10]; char * left = alloca(maxLeftCol + 1); - const char * argDescrip = getArgDescrip(opt); + const char * argDescrip = getArgDescrip(opt, translation_domain); *left = '\0'; if (opt->longName && opt->shortName) @@ -90,14 +110,15 @@ static void singleOptionHelp(FILE * f, int maxLeftCol, if (helpLength) fprintf(f, "%s\n", help); } -static int maxArgWidth(const struct poptOption * opt) { +static int maxArgWidth(const struct poptOption * opt, + const char * translation_domain) { int max = 0; int this; const char * s; while (opt->longName || opt->shortName || opt->arg) { if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) { - this = maxArgWidth(opt->arg); + this = maxArgWidth(opt->arg, translation_domain); if (this > max) max = this; } else if (!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) { this = opt->shortName ? 2 : 0; @@ -106,7 +127,7 @@ static int maxArgWidth(const struct poptOption * opt) { this += strlen(opt->longName) + 2; } - s = getArgDescrip(opt); + s = getArgDescrip(opt, translation_domain); if (s) this += strlen(s) + 1; if (this > max) max = this; @@ -119,23 +140,30 @@ static int maxArgWidth(const struct poptOption * opt) { } static void singleTableHelp(FILE * f, const struct poptOption * table, - int left) { + int left, + const char *translation_domain) { const struct poptOption * opt; + const char *sub_transdom; opt = table; while (opt->longName || opt->shortName || opt->arg) { if ((opt->longName || opt->shortName) && !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) - singleOptionHelp(f, left, opt); + singleOptionHelp(f, left, opt, translation_domain); opt++; } opt = table; while (opt->longName || opt->shortName || opt->arg) { if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) { + sub_transdom = getTableTranslationDomain(opt->arg); + if(!sub_transdom) + sub_transdom = translation_domain; + if (opt->descrip) - fprintf(f, "\n%s\n", _(opt->descrip)); - singleTableHelp(f, opt->arg, left); + fprintf(f, "\n%s\n", D_(sub_transdom, opt->descrip)); + + singleTableHelp(f, opt->arg, left, sub_transdom); } opt++; } @@ -165,16 +193,17 @@ void poptPrintHelp(poptContext con, FILE * f, int flags) { else fprintf(f, " %s\n", POPT_("[OPTION...]")); - leftColWidth = maxArgWidth(con->options); - singleTableHelp(f, con->options, leftColWidth); + leftColWidth = maxArgWidth(con->options, NULL); + singleTableHelp(f, con->options, leftColWidth, NULL); } static int singleOptionUsage(FILE * f, int cursor, - const struct poptOption * opt) { + const struct poptOption * opt, + const char *translation_domain) { int len = 3; char shortStr[2]; const char * item = shortStr; - const char * argDescrip = getArgDescrip(opt); + const char * argDescrip = getArgDescrip(opt, translation_domain); if (opt->shortName) { if (!(opt->argInfo & POPT_ARG_MASK)) @@ -204,16 +233,21 @@ static int singleOptionUsage(FILE * f, int cursor, return cursor + len + 1; } -int singleTableUsage(FILE * f, int cursor, const struct poptOption * table) { +int singleTableUsage(FILE * f, int cursor, const struct poptOption * table, + const char *translation_domain) { const struct poptOption * opt; opt = table; while (opt->longName || opt->shortName || opt->arg) { - if ((opt->longName || opt->shortName) && - !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) - cursor = singleOptionUsage(f, cursor, opt); + if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) + translation_domain = (const char *)opt->arg; else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) - cursor = singleTableUsage(f, cursor, opt->arg); + cursor = singleTableUsage(f, cursor, opt->arg, + translation_domain); + else if ((opt->longName || opt->shortName) && + !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) + cursor = singleOptionUsage(f, cursor, opt, translation_domain); + opt++; } @@ -251,7 +285,7 @@ void poptPrintUsage(poptContext con, FILE * f, int flags) { cursor = showHelpIntro(con, f); cursor += showShortOptions(con->options, f, NULL); - singleTableUsage(f, cursor, con->options); + singleTableUsage(f, cursor, con->options, NULL); if (con->otherHelp) { cursor += strlen(con->otherHelp) + 1; |