summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Troan <ewt@src.gnome.org>1998-10-29 22:52:06 +0000
committerErik Troan <ewt@src.gnome.org>1998-10-29 22:52:06 +0000
commitc35d1e08cbb33be50681da0dfa2b865a354c3dec (patch)
tree382cd272ebdac6b3774941026841670465028424
parent9a854dfe11011fd23f55d6a937b453dab59f6274 (diff)
downloadgnome-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.h4
-rw-r--r--support/popt.h4
-rw-r--r--support/popthelp.c82
-rw-r--r--support/poptint.h4
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)