From 02797ade68b0319ee055bc1b50a4e587c68a97c6 Mon Sep 17 00:00:00 2001 From: msweet Date: Fri, 10 Oct 2008 21:06:56 +0000 Subject: [PATCH] Add missing file. git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1011 a1ca3aef-8c08-0410-bb20-df032aa958be --- ppdc/genstrings.cxx | 209 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 ppdc/genstrings.cxx 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 + + +// +// 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$". +// -- 2.39.2