summaryrefslogtreecommitdiff
path: root/cups
diff options
context:
space:
mode:
authorMichael Sweet <michael.r.sweet@gmail.com>2017-11-30 11:38:54 -0500
committerMichael Sweet <michael.r.sweet@gmail.com>2017-11-30 11:38:54 -0500
commit84de5e9234e078e149a982848bf49ed4a8e83bd1 (patch)
tree41ac2b1d906ea0e266ad0683d419e91bea9bb9db /cups
parent63b75fbef93c854583d3cb22b951f12ecb75efa3 (diff)
downloadcups-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.c6
-rw-r--r--cups/dest-options.c107
-rw-r--r--cups/language-private.h1
-rw-r--r--cups/pwg-media.c16
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;