diff options
author | Michael Sweet <michael.r.sweet@gmail.com> | 2017-11-30 11:38:54 -0500 |
---|---|---|
committer | Michael Sweet <michael.r.sweet@gmail.com> | 2017-11-30 11:38:54 -0500 |
commit | 84de5e9234e078e149a982848bf49ed4a8e83bd1 (patch) | |
tree | 41ac2b1d906ea0e266ad0683d419e91bea9bb9db /cups | |
parent | 63b75fbef93c854583d3cb22b951f12ecb75efa3 (diff) | |
download | cups-84de5e9234e078e149a982848bf49ed4a8e83bd1.tar.gz |
Last of the media improvements (Issue #5167)
cups/dest-localization.c:
- Use "other tray" and "other media" for unknown media sources and types.
cups/dest-options.c:
- media-key is king for size matching.
- Synthesize a media-key value using the size name unless we can't get one.
cups/language-private.h:
- Add _CUPS_MESSAGE_PO constant.
cups/pwg-media.c:
- Allow PWG names with a trailing "_foo" qualifier (so media-key still works
if an application just adds the _cups_size_t.media value as the "media"
option.
locale/*.{po,pot,strings}:
- Update localization strings.
locale/cups.footer:
- Add common HP and Canon media types.
locale/checkpo.c:
- Fix \ validation.
Diffstat (limited to 'cups')
-rw-r--r-- | cups/dest-localization.c | 6 | ||||
-rw-r--r-- | cups/dest-options.c | 107 | ||||
-rw-r--r-- | cups/language-private.h | 1 | ||||
-rw-r--r-- | cups/pwg-media.c | 16 |
4 files changed, 79 insertions, 51 deletions
diff --git a/cups/dest-localization.c b/cups/dest-localization.c index d6fc8b955..de272e1e7 100644 --- a/cups/dest-localization.c +++ b/cups/dest-localization.c @@ -162,8 +162,10 @@ cupsLocalizeDestMedia( { DEBUG_printf(("1cupsLocalizeDestMedia: MATCH mdb%p [key=\"%s\" size_name=\"%s\" source=\"%s\" type=\"%s\" width=%d length=%d B%d L%d R%d T%d]", (void *)mdb, mdb->key, mdb->size_name, mdb->source, mdb->type, mdb->width, mdb->length, mdb->bottom, mdb->left, mdb->right, mdb->top)); - lsource = cupsLocalizeDestValue(http, dest, dinfo, "media-source", mdb->source); - ltype = cupsLocalizeDestValue(http, dest, dinfo, "media-type", mdb->type); + if ((lsource = cupsLocalizeDestValue(http, dest, dinfo, "media-source", mdb->source)) == mdb->source && mdb->source) + lsource = _cupsLangString(lang, _("Other Tray")); + if ((ltype = cupsLocalizeDestValue(http, dest, dinfo, "media-type", mdb->type)) == mdb->type && mdb->type) + ltype = _cupsLangString(lang, _("Other Media")); } else { diff --git a/cups/dest-options.c b/cups/dest-options.c index a2830cc14..ea1067408 100644 --- a/cups/dest-options.c +++ b/cups/dest-options.c @@ -1030,10 +1030,10 @@ cupsGetDestMediaByIndex( return (0); } - if (nsize->size_name) - strlcpy(size->media, nsize->size_name, sizeof(size->media)); - else if (nsize->key) + if (nsize->key) strlcpy(size->media, nsize->key, sizeof(size->media)); + else if (nsize->size_name) + strlcpy(size->media, nsize->size_name, sizeof(size->media)); else if ((pwg = pwgMediaForSize(nsize->width, nsize->length)) != NULL) strlcpy(size->media, pwg->pwg, sizeof(size->media)); else @@ -1605,7 +1605,7 @@ cups_create_media_db( pwg_media_t *pwg; /* PWG media info */ cups_array_t *db; /* New media database array */ _cups_media_db_t mdb; /* Media entry */ - char media_key[255]; /* Synthesized media-key value */ + char media_key[256]; /* Synthesized media-key value */ db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db, @@ -1706,71 +1706,92 @@ cups_create_media_db( } } - if ((media_attr = ippFindAttribute(val->collection, "media-color", - IPP_TAG_ZERO)) != NULL && - (media_attr->value_tag == IPP_TAG_NAME || - media_attr->value_tag == IPP_TAG_NAMELANG || - media_attr->value_tag == IPP_TAG_KEYWORD)) + if ((media_attr = ippFindAttribute(val->collection, "media-color", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.color = media_attr->values[0].string.text; - if ((media_attr = ippFindAttribute(val->collection, "media-info", - IPP_TAG_TEXT)) != NULL) + if ((media_attr = ippFindAttribute(val->collection, "media-info", IPP_TAG_TEXT)) != NULL) mdb.info = media_attr->values[0].string.text; - if ((media_attr = ippFindAttribute(val->collection, "media-key", - IPP_TAG_ZERO)) != NULL && - (media_attr->value_tag == IPP_TAG_NAME || - media_attr->value_tag == IPP_TAG_NAMELANG || - media_attr->value_tag == IPP_TAG_KEYWORD)) + if ((media_attr = ippFindAttribute(val->collection, "media-key", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.key = media_attr->values[0].string.text; - if ((media_attr = ippFindAttribute(val->collection, "media-size-name", - IPP_TAG_ZERO)) != NULL && - (media_attr->value_tag == IPP_TAG_NAME || - media_attr->value_tag == IPP_TAG_NAMELANG || - media_attr->value_tag == IPP_TAG_KEYWORD)) + if ((media_attr = ippFindAttribute(val->collection, "media-size-name", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.size_name = media_attr->values[0].string.text; - if ((media_attr = ippFindAttribute(val->collection, "media-source", - IPP_TAG_ZERO)) != NULL && - (media_attr->value_tag == IPP_TAG_NAME || - media_attr->value_tag == IPP_TAG_NAMELANG || - media_attr->value_tag == IPP_TAG_KEYWORD)) + if ((media_attr = ippFindAttribute(val->collection, "media-source", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.source = media_attr->values[0].string.text; - if ((media_attr = ippFindAttribute(val->collection, "media-type", - IPP_TAG_ZERO)) != NULL && - (media_attr->value_tag == IPP_TAG_NAME || - media_attr->value_tag == IPP_TAG_NAMELANG || - media_attr->value_tag == IPP_TAG_KEYWORD)) + if ((media_attr = ippFindAttribute(val->collection, "media-type", IPP_TAG_ZERO)) != NULL && (media_attr->value_tag == IPP_TAG_NAME || media_attr->value_tag == IPP_TAG_NAMELANG || media_attr->value_tag == IPP_TAG_KEYWORD)) mdb.type = media_attr->values[0].string.text; - if ((media_attr = ippFindAttribute(val->collection, "media-bottom-margin", - IPP_TAG_INTEGER)) != NULL) + if ((media_attr = ippFindAttribute(val->collection, "media-bottom-margin", IPP_TAG_INTEGER)) != NULL) mdb.bottom = media_attr->values[0].integer; - if ((media_attr = ippFindAttribute(val->collection, "media-left-margin", - IPP_TAG_INTEGER)) != NULL) + if ((media_attr = ippFindAttribute(val->collection, "media-left-margin", IPP_TAG_INTEGER)) != NULL) mdb.left = media_attr->values[0].integer; - if ((media_attr = ippFindAttribute(val->collection, "media-right-margin", - IPP_TAG_INTEGER)) != NULL) + if ((media_attr = ippFindAttribute(val->collection, "media-right-margin", IPP_TAG_INTEGER)) != NULL) mdb.right = media_attr->values[0].integer; - if ((media_attr = ippFindAttribute(val->collection, "media-top-margin", - IPP_TAG_INTEGER)) != NULL) + if ((media_attr = ippFindAttribute(val->collection, "media-top-margin", IPP_TAG_INTEGER)) != NULL) mdb.top = media_attr->values[0].integer; if (!mdb.key) { - if (flags & CUPS_MEDIA_FLAGS_READY) - snprintf(media_key, sizeof(media_key), "cups-media-ready-%d", i + 1); - else - snprintf(media_key, sizeof(media_key), "cups-media-%d", i + 1); + if (!mdb.size_name && (pwg = pwgMediaForSize(mdb.width, mdb.length)) != NULL) + mdb.size_name = (char *)pwg->pwg; + + if (!mdb.size_name) + { + /* + * Use a CUPS-specific identifier if we don't have a size name... + */ + + if (flags & CUPS_MEDIA_FLAGS_READY) + snprintf(media_key, sizeof(media_key), "cups-media-ready-%d", i + 1); + else + snprintf(media_key, sizeof(media_key), "cups-media-%d", i + 1); + } + else if (mdb.source) + { + /* + * Generate key using size name, source, and type (if set)... + */ + + if (mdb.type) + snprintf(media_key, sizeof(media_key), "%s_%s_%s", mdb.size_name, mdb.source, mdb.type); + else + snprintf(media_key, sizeof(media_key), "%s_%s", mdb.size_name, mdb.source); + } + else if (mdb.type) + { + /* + * Generate key using size name and type... + */ + + snprintf(media_key, sizeof(media_key), "%s_%s", mdb.size_name, mdb.type); + } + else + { + /* + * Key is just the size name... + */ + + strlcpy(media_key, mdb.size_name, sizeof(media_key)); + } + + /* + * Append "_borderless" for borderless media... + */ + + if (!mdb.bottom && !mdb.left && !mdb.right && !mdb.top) + strlcat(media_key, "_borderless", sizeof(media_key)); mdb.key = media_key; } + DEBUG_printf(("1cups_create_media_db: Adding media: key=\"%s\", width=%d, length=%d, source=\"%s\", type=\"%s\".", mdb.key, mdb.width, mdb.length, mdb.source, mdb.type)); + cupsArrayAdd(db, &mdb); } diff --git a/cups/language-private.h b/cups/language-private.h index ca6a9cb4e..1f69c4edb 100644 --- a/cups/language-private.h +++ b/cups/language-private.h @@ -36,6 +36,7 @@ extern "C" { * Constants... */ +# define _CUPS_MESSAGE_PO 0 /* Message file is in GNU .po format */ # define _CUPS_MESSAGE_UNQUOTE 1 /* Unescape \foo in strings? */ # define _CUPS_MESSAGE_STRINGS 2 /* Message file is in Apple .strings format */ diff --git a/cups/pwg-media.c b/cups/pwg-media.c index 26fc78d8f..61671efe8 100644 --- a/cups/pwg-media.c +++ b/cups/pwg-media.c @@ -838,18 +838,22 @@ pwgMediaForPWG(const char *pwg) /* I - PWG size name */ /* * Try decoding the self-describing name of the form: * - * class_name_WWWxHHHin - * class_name_WWWxHHHmm + * class_name_WWWxHHHin[_something] + * class_name_WWWxHHHmm[_something] */ int w, l; /* Width and length of page */ int numer; /* Scale factor for units */ - const char *units = ptr + strlen(ptr) - 2; - /* Units from size */ + const char *units; /* Units from size */ - ptr ++; + if ((units = strchr(ptr + 1, '_')) != NULL) + units -= 2; + else + units = ptr + strlen(ptr) - 2; - if (units >= ptr && !strcmp(units, "in")) + ptr ++; + + if (units >= ptr && (!strcmp(units, "in") || !strncmp(units, "in_", 3))) numer = 2540; else numer = 100; |