summaryrefslogtreecommitdiff
path: root/ppdc
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2008-10-10 21:06:56 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2008-10-10 21:06:56 +0000
commit02797ade68b0319ee055bc1b50a4e587c68a97c6 (patch)
tree5092faf1e710b1610a2bcf3742b8c1ba6e466585 /ppdc
parent61cf44e2b78833ba0e6ebdfb436009220c685b50 (diff)
Add missing file.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1011 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'ppdc')
-rw-r--r--ppdc/genstrings.cxx209
1 files changed, 209 insertions, 0 deletions
diff --git a/ppdc/genstrings.cxx b/ppdc/genstrings.cxx
new file mode 100644
index 000000000..46bfeb391
--- /dev/null
+++ b/ppdc/genstrings.cxx
@@ -0,0 +1,209 @@
+//
+// "$Id$"
+//
+// GNU gettext message generator for the CUPS PPD Compiler.
+//
+// This program is used to generate a dummy source file containing all of
+// the standard media and sample driver strings. The results are picked up
+// by GNU gettext and placed in the CUPS message catalog.
+//
+// Copyright 2008 by Apple Inc.
+//
+// These coded instructions, statements, and computer programs are the
+// property of Apple Inc. and are protected by Federal copyright
+// law. Distribution and use rights are outlined in the file "LICENSE.txt"
+// which should have been included with this file. If this file is
+// file is missing or damaged, see the license at "http://www.cups.org/".
+//
+// Usage:
+//
+// ./genstrings >sample.c
+//
+// Contents:
+//
+// main() - Main entry for the PPD compiler.
+// add_ui_strings() - Add all UI strings from the driver.
+// write_cstring() - Write a translation string as a valid C string to
+// stdout.
+//
+
+//
+// Include necessary headers...
+//
+
+#include "ppdc.h"
+#include <unistd.h>
+
+
+//
+// Local functions...
+//
+
+static void add_ui_strings(ppdcDriver *d, ppdcCatalog *catalog);
+static void write_cstring(const char *s);
+
+
+//
+// 'main()' - Main entry for the PPD compiler.
+//
+
+int // O - Exit status
+main(void)
+{
+ ppdcSource *src; // PPD source file data
+ ppdcCatalog *catalog; // Catalog to hold all of the UI strings
+
+
+ // Make sure we are in the right place...
+ if (access("../data", 0) || access("sample.drv", 0))
+ {
+ puts("You must run genstrings from the ppdc directory.");
+ return (1);
+ }
+
+ // Load the sample drivers...
+ ppdcSource::add_include("../data");
+
+ src = new ppdcSource("sample.drv");
+ catalog = new ppdcCatalog(NULL);
+
+ // Add the media size strings...
+ ppdcMediaSize *size; // Current media size
+
+ for (size = (ppdcMediaSize *)src->sizes->first();
+ size;
+ size = (ppdcMediaSize *)src->sizes->next())
+ catalog->add_message(size->text->value);
+
+ // Then collect all of the UI strings from the sample drivers...
+ ppdcDriver *d; // Current driver
+
+ for (d = (ppdcDriver *)src->drivers->first();
+ d;
+ d = (ppdcDriver *)src->drivers->next())
+ add_ui_strings(d, catalog);
+
+ // Finally, write all of the strings...
+ ppdcMessage *message;
+
+ for (message = (ppdcMessage *)catalog->messages->first();
+ message;
+ message = (ppdcMessage *)catalog->messages->next())
+ write_cstring(message->id->value);
+
+ // Return with no errors.
+ return (0);
+}
+
+
+//
+// 'add_ui_strings()' - Add all UI strings from the driver.
+//
+
+static void
+add_ui_strings(ppdcDriver *d, // I - Driver data
+ ppdcCatalog *catalog) // I - Message catalog
+{
+ // Add the make/model/language strings...
+ catalog->add_message(d->manufacturer->value);
+ catalog->add_message(d->model_name->value);
+
+ // Add the group/option/choice strings...
+ ppdcGroup *g; // Current group
+ ppdcOption *o; // Current option
+ ppdcChoice *c; // Current choice
+
+ for (g = (ppdcGroup *)d->groups->first();
+ g;
+ g = (ppdcGroup *)d->groups->next())
+ {
+ if (!g->options->count)
+ continue;
+
+ if (strcasecmp(g->name->value, "General"))
+ catalog->add_message(g->text->value);
+
+ for (o = (ppdcOption *)g->options->first();
+ o;
+ o = (ppdcOption *)g->options->next())
+ {
+ if (!o->choices->count)
+ continue;
+
+ if (o->text->value && strcmp(o->name->value, o->text->value))
+ catalog->add_message(o->text->value);
+ else
+ catalog->add_message(o->name->value);
+
+ for (c = (ppdcChoice *)o->choices->first();
+ c;
+ c = (ppdcChoice *)o->choices->next())
+ if (c->text->value && strcmp(c->name->value, c->text->value))
+ catalog->add_message(c->text->value);
+ else
+ catalog->add_message(c->name->value);
+ }
+ }
+
+ // Add profile and preset strings...
+ ppdcAttr *a; // Current attribute
+ for (a = (ppdcAttr *)d->attrs->first();
+ a;
+ a = (ppdcAttr *)d->attrs->next())
+ {
+ if (a->text->value && a->text->value[0] &&
+ (a->localizable ||
+ !strncmp(a->name->value, "Custom", 6) ||
+ !strncmp(a->name->value, "ParamCustom", 11) ||
+ !strcmp(a->name->value, "APCustomColorMatchingName") ||
+ !strcmp(a->name->value, "APPrinterPreset") ||
+ !strcmp(a->name->value, "cupsICCProfile") ||
+ !strcmp(a->name->value, "cupsIPPReason") ||
+ !strcmp(a->name->value, "cupsMarkerName")))
+ {
+ catalog->add_message(a->text->value);
+
+ if ((a->localizable && a->value->value[0]) ||
+ !strcmp(a->name->value, "cupsIPPReason"))
+ catalog->add_message(a->value->value);
+ }
+ else if (!strncmp(a->name->value, "Custom", 6) ||
+ !strncmp(a->name->value, "ParamCustom", 11))
+ catalog->add_message(a->name->value);
+ }
+}
+
+
+//
+// 'write_cstring()' - Write a translation string as a valid C string to stdout.
+//
+
+static void
+write_cstring(const char *s) /* I - String to write */
+{
+ fputs("_(\"", stdout);
+ if (s)
+ {
+ while (*s)
+ {
+ if (*s == '\\')
+ fputs("\\\\", stdout);
+ else if (*s == '\"')
+ fputs("\\\"", stdout);
+ else if (*s == '\t')
+ fputs("\\t", stdout);
+ else if (*s == '\n')
+ fputs("\\n", stdout);
+ else
+ putchar(*s);
+
+ s ++;
+ }
+ }
+ puts("\");");
+}
+
+
+//
+// End of "$Id$".
+//