diff options
author | Erik Troan <ewt@src.gnome.org> | 1998-10-29 22:52:06 +0000 |
---|---|---|
committer | Erik Troan <ewt@src.gnome.org> | 1998-10-29 22:52:06 +0000 |
commit | c35d1e08cbb33be50681da0dfa2b865a354c3dec (patch) | |
tree | 382cd272ebdac6b3774941026841670465028424 | |
parent | 9a854dfe11011fd23f55d6a937b453dab59f6274 (diff) | |
download | gnome-common-c35d1e08cbb33be50681da0dfa2b865a354c3dec.tar.gz |
added POPT_ARG_INTL_DOMAIN (Elliot Lee)
updated Makefile's to be more GNUish (Elliot Lee)
svn path=/trunk/; revision=460
-rw-r--r-- | support/popt-gnome.h | 4 | ||||
-rw-r--r-- | support/popt.h | 4 | ||||
-rw-r--r-- | support/popthelp.c | 82 | ||||
-rw-r--r-- | support/poptint.h | 4 |
4 files changed, 69 insertions, 25 deletions
diff --git a/support/popt-gnome.h b/support/popt-gnome.h index 9bac797..e216049 100644 --- a/support/popt-gnome.h +++ b/support/popt-gnome.h @@ -18,6 +18,10 @@ set first in table; arg points to callback, descrip points to callback data to pass */ +#define POPT_ARG_INTL_DOMAIN 6 /* set the translation domain + for this table and any + included tables; arg points + to the domain string */ #define POPT_ARG_MASK 0x0000FFFF #define POPT_ARGFLAG_ONEDASH 0x80000000 /* allow -longoption */ #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000 /* don't show in help/usage */ diff --git a/support/popt.h b/support/popt.h index 9bac797..e216049 100644 --- a/support/popt.h +++ b/support/popt.h @@ -18,6 +18,10 @@ set first in table; arg points to callback, descrip points to callback data to pass */ +#define POPT_ARG_INTL_DOMAIN 6 /* set the translation domain + for this table and any + included tables; arg points + to the domain string */ #define POPT_ARG_MASK 0x0000FFFF #define POPT_ARGFLAG_ONEDASH 0x80000000 /* allow -longoption */ #define POPT_ARGFLAG_DOC_HIDDEN 0x40000000 /* don't show in help/usage */ diff --git a/support/popthelp.c b/support/popthelp.c index 021e044..c454640 100644 --- a/support/popthelp.c +++ b/support/popthelp.c @@ -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; diff --git a/support/poptint.h b/support/poptint.h index 5d99be5..8fc6a84 100644 --- a/support/poptint.h +++ b/support/poptint.h @@ -54,9 +54,11 @@ struct poptContext_s { #endif #ifdef HAVE_DGETTEXT -#define POPT_(foo) dgettext("popt", foo) +#define D_(dom, str) dgettext(dom, str) +#define POPT_(foo) D_("popt", foo) #else #define POPT_(foo) (foo) +#define D_(dom, str) (str) #endif #define N_(foo) (foo) |