+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>backend(7)</title>
-</head>
-<body>
-<h1 class="title">backend(7)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-backend - cups backend transmission interfaces
-<h2 class="title"><a name="SYNOPSIS">Synopsis</a></h2>
-<b>backend</b>
-<br>
-<b>backend</b>
-<i>job</i>
-<i>user</i>
-<i>title</i>
-<i>num-copies</i>
-<i>options</i>
-[
-<i>filename</i>
-]
-<pre class="man">
-
-<b>#include <cups/cups.h></b>
-
-<b>const char *cupsBackendDeviceURI</b>(<b>char **</b><i>argv</i>);
-
-<b>void cupsBackendReport</b>(<b>const char *</b><i>device_scheme</i>,
- <b>const char *</b><i>device_uri</i>,
- <b>const char *</b><i>device_make_and_model</i>,
- <b>const char *</b><i>device_info</i>,
- <b>const char *</b><i>device_id</i>,
- <b>const char *</b><i>device_location</i>);
-
-<b>ssize_t cupsBackChannelWrite</b>(<b>const char *</b><i>buffer</i>,
- <b>size_t </b><i>bytes</i>, <b>double </b><i>timeout</i>);
-
-<b>int cupsSideChannelRead</b>(<b>cups_sc_command_t *</b><i>command</i>,
- <b>cups_sc_status_t *</b><i>status</i>, <b>char *</b><i>data</i>,
- <b>int *</b><i>datalen</i>, <b>double </b><i>timeout</i>);
-
-<b>int cupsSideChannelWrite</b>(<b>cups_sc_command_t </b><i>command</i>,
- <b>cups_sc_status_t </b><i>status</i>, <b>const char *</b><i>data</i>,
- <b>int </b><i>datalen</i>, <b>double </b><i>timeout</i>);
-</pre>
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-Backends are a special type of
-<b>filter</b>(7)
-which is used to send print data to and discover different devices on the system.
-<p>Like filters, backends must be capable of reading from a filename on the command-line or from the standard input, copying the standard input to a temporary file as required by the physical interface.
-<p>The command name (<i>argv[0]</i>) is set to the device URI of the destination printer.
-Authentication information in
-<i>argv[0]</i>
-is removed, so backend developers are urged to use the
-<b>DEVICE_URI</b>
-environment variable whenever authentication information is required. The
-<b>cupsBackendDeviceURI</b>()
-function may be used to retrieve the correct device URI.
-<p>Back-channel data from the device should be relayed to the job filters using the <i>cupsBackChannelWrite</i> function.
-<p>Backends are responsible for reading side-channel requests using the
-<b>cupsSideChannelRead</b>()
-function and responding with the
-<b>cupsSideChannelWrite</b>()
-function. The
-<b>CUPS_SC_FD</b>
-constant defines the file descriptor that should be monitored for incoming requests.
-<h3><a name="DEVICE_DISCOVERY">Device Discovery</a></h3>
-When run with no arguments, the backend should list the devices and schemes it supports or is advertising to the standard output.
-The output consists of zero or more lines consisting of any of the following forms:
-<pre class="man">
-
- device-class scheme "Unknown" "device-info"
- device-class device-uri "device-make-and-model" "device-info"
- device-class device-uri "device-make-and-model" "device-info" "device-id"
- device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location"
-</pre>
-<p>The
-<b>cupsBackendReport</b>()
-function can be used to generate these lines and handle any necessary escaping of characters in the various strings.
-<p>The
-<i>device-class</i>
-field is one of the following values:
-<dl class="man">
-<dt><b>direct</b>
-<dd style="margin-left: 5.0em">The device-uri refers to a specific direct-access device with no options, such as a parallel, USB, or SCSI device.
-<dt><b>file</b>
-<dd style="margin-left: 5.0em">The device-uri refers to a file on disk.
-<dt><b>network</b>
-<dd style="margin-left: 5.0em">The device-uri refers to a networked device and conforms to the general form for
-network URIs.
-<dt><b>serial</b>
-<dd style="margin-left: 5.0em">The device-uri refers to a serial device with configurable baud rate and other options.
-If the device-uri contains a baud value, it represents the maximum baud rate supported by the device.
-</dl>
-<p>The
-<i>scheme</i>
-field provides the URI scheme that is supported by the backend.
-Backends should use this form only when the backend supports any URI using that scheme.
-The
-<i>device-uri</i>
-field specifies the full URI to use when communicating with the device.
-<p>The
-<i>device-make-and-model</i>
-field specifies the make and model of the device, e.g. "Example Foojet 2000".
-If the make and model is not known, you must report "Unknown".
-<p>The
-<i>device-info</i>
-field specifies additional information about the device.
-Typically this includes the make and model along with the port number or network address, e.g. "Example Foojet 2000 USB #1".
-<p>The optional
-<i>device-id</i>
-field specifies the IEEE-1284 device ID string for the device, which is used to select a matching driver.
-<p>The optional
-<i>device-location</i>
-field specifies the physical location of the device, which is often used to pre-populate the printer-location attribute when adding a printer.
-<h3><a name="PERMISSIONS">Permissions</a></h3>
-Backends without world read and execute permissions are run as the root user.
-Otherwise, the backend is run using an unprivileged user account, typically "lp".
-<h2 class="title"><a name="EXIT_STATUS">Exit Status</a></h2>
-The following exit codes are defined for backends:
-<dl class="man">
-<dt><b>CUPS_BACKEND_OK</b>
-<dd style="margin-left: 5.0em">The print file was successfully transmitted to the device or remote server.
-<dt><b>CUPS_BACKEND_FAILED</b>
-<dd style="margin-left: 5.0em"><br>
-The print file was not successfully transmitted to the device or remote server.
-The scheduler will respond to this by canceling the job, retrying the job, or stopping the queue depending on the state of the
-<i>printer-error-policy</i>
-attribute.
-<dt><b>CUPS_BACKEND_AUTH_REQUIRED</b>
-<dd style="margin-left: 5.0em">The print file was not successfully transmitted because valid authentication information is required.
-The scheduler will respond to this by holding the job and adding the 'cups-held-for-authentication' keyword to the "job-reasons" Job Description attribute.
-<dt><b>CUPS_BACKEND_HOLD</b>
-<dd style="margin-left: 5.0em">The print file was not successfully transmitted because it cannot be printed at this time.
-The scheduler will respond to this by holding the job.
-<dt><b>CUPS_BACKEND_STOP</b>
-<dd style="margin-left: 5.0em">The print file was not successfully transmitted because it cannot be printed at this time.
-The scheduler will respond to this by stopping the queue.
-<dt><b>CUPS_BACKEND_CANCEL</b>
-<dd style="margin-left: 5.0em">The print file was not successfully transmitted because one or more attributes are not supported or the job was canceled at the printer.
-The scheduler will respond to this by canceling the job.
-<dt><b>CUPS_BACKEND_RETRY</b>
-<dd style="margin-left: 5.0em">The print file was not successfully transmitted because of a temporary issue.
-The scheduler will retry the job at a future time - other jobs may print before this one.
-<dt><b>CUPS_BACKEND_RETRY_CURRENT</b>
-<dd style="margin-left: 5.0em">The print file was not successfully transmitted because of a temporary issue.
-The scheduler will retry the job immediately without allowing intervening jobs.
-</dl>
-<p>All other exit code values are reserved.
-<h2 class="title"><a name="ENVIRONMENT">Environment</a></h2>
-In addition to the environment variables listed in
-<b>cups</b>(1)
-and
-<b>filter</b>(7),
-CUPS backends can expect the following environment variable:
-<dl class="man">
-<dt><b>DEVICE_URI</b>
-<dd style="margin-left: 5.0em">The device URI associated with the printer.
-</dl>
-<h2 class="title"><a name="FILES">Files</a></h2>
-<i>/etc/cups/cups-files.conf</i>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-CUPS backends are not generally designed to be run directly by the user.
-Aside from the device URI issue (
-<i>argv[0]</i>
-and
-<b>DEVICE_URI</b>
-environment variable contain the device URI), CUPS backends also expect specific environment variables and file descriptors, and typically run in a user session that (on macOS) has additional restrictions that affect how it runs.
-Backends can also be installed with restricted permissions (0500 or 0700) that tell the scheduler to run them as the "root" user instead of an unprivileged user (typically "lp") on the system.
-<p>Unless you are a developer and know what you are doing, please do not run backends directly.
-Instead, use the
-<b>lp</b>(1)
-or
-<b>lpr</b>(1)
-programs to send print jobs or
-<b>lpinfo</b>(8)
-to query for available printers using the backend.
-The one exception is the SNMP backend - see
-<b>cups-snmp</b>(8)
-for more information.
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-CUPS printer drivers and backends are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<i>cups</i>(1),
-<i>cups-files.conf</i>(5),
-<i>cups-snmp</i>(8),
-<i>cupsd</i>(8),
-<i>filter</i>(7),
-<i>lp</i>(1),
-<i>lpinfo</i>(8),
-<i>lpr</i>(1),
-<br>
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>filter(7)</title>
-</head>
-<body>
-<h1 class="title">filter(7)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-filter - cups file conversion filter interface
-<h2 class="title"><a name="SYNOPSIS">Synopsis</a></h2>
-<b>filter</b>
-<i>job</i>
-<i>user</i>
-<i>title</i>
-<i>num-copies</i>
-<i>options</i>
-[
-<i>filename</i>
-]
-<pre class="man">
-
-<b>#include <cups/cups.h></b>
-
-<b>ssize_t cupsBackChannelRead</b>(<b>char *</b><i>buffer</i>, <b>size_t </b><i>bytes</i>,
- <b>double </b><i>timeout</i>);
-
-<b>cups_sc_status_t cupsSideChannelDoRequest</b>(<b>cups_sc_command_t </b><i>command</i>,
- <b>char *</b><i>data</i>, <b>int *</b><i>datalen</i>,
- <b>double </b><i>timeout</i>);
-
-<b>#include <cups/ppd.h></b>
-
-<b>const char *cupsGetOption</b>(<b>const char *</b><i>name</i>, <b>int </b><i>num_options</i>,
- <b>cups_option_t *</b><i>options</i>);
-
-<b>int cupsMarkOptions</b>(<b>ppd_file_t *</b><i>ppd</i>, <b>int </b><i>num_options</i>,
- <b>cups_option_t *</b><i>options</i>);
-
-<b>int cupsParseOptions</b>(<b>const char *</b><i>arg</i>, <b>int </b><i>num_options</i>,
- <b>cups_option_t **</b><i>options</i>);
-
-<b>ppd_choice_t *ppdFindMarkedChoice</b>(<b>ppd_file_t *</b><i>ppd</i>, <b>const char *</b><i>keyword</i>);
-
-<b>void ppdMarkDefaults</b>(<b>ppd_file_t *</b><i>ppd</i>);
-
-<b>ppd_file_t *ppdOpenFile</b>(<b>const char *</b><i>filename</i>);
-</pre>
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-The CUPS filter interface provides a standard method for adding support for new document types or printers to CUPS.
-Each filter is capable of converting from one or more input formats to another format that can either be printed directly or piped into another filter to get it to a printable format.
-<p>Filters <b>MUST</b> be capable of reading from a filename on the command-line or from the standard input, copying the standard input to a temporary file as required by the file format.
-All output <b>MUST</b> be sent to the standard output.
-Filters <b>MUST NOT</b> attempt to communicate directly with the printer, other processes, or other services.
-<p>The command name (<i>argv[0]</i>) is set to the name of the destination printer but is also available in the <b>PRINTER</b><i> environment variable.
-</i><h2 class="title"><a name="OPTIONS">Options</a></h2>
-Options are passed in <i>argv[5]</i> and are encoded from the corresponding IPP attributes used when the job was submitted. Use the
-<b>cupsParseOptions</b>()
-function to load the options into a <b>cups_option_t</b> array and the
-<b>cupsGetOption</b>()
-function to get the value of a specific attribute.
-Be careful to look for common aliases of IPP attributes such as "landscape" for the IPP "orientation-requested" attribute.
-<p>Options passed on the command-line typically do not include the default choices the printer's PPD file. Use the
-<b>ppdMarkDefaults</b>()
-and
-<b>cupsMarkOptions</b>()
-functions in the CUPS library to apply the options to the PPD defaults and map any IPP attributes to the corresponding PPD options.
-Use
-<b>ppdFindMarkedChoice</b>()
-to get the user-selected choice for a PPD option. For example, a filter might use the following code to determine the current value of the <b>Duplex</b> PPD option:
-<pre class="man">
-
- ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
- cups_option_t *options = NULL;
- int num_options = cupsParseOptions(argv[5], 0, &options);
-
- ppdMarkDefaults(ppd);
- cupsMarkOptions(ppd, num_options, options);
-
- ppd_choice_t *choice = ppdFindMarkedChoice(ppd, "Duplex");
-</pre>
-<p>Raster filters should use option choices set through the raster page header, as those reflect the options in effect for a given page.
-Options specified on the command-line determine the default values for the entire job, which can be overridden on a per-page basis.
-<h2 class="title"><a name="LOG_MESSAGES">Log Messages</a></h2>
-Messages sent to the standard error are generally stored in the printer's "printer-state-message" attribute and the current <b>ErrorLog</b> file.
-Each line begins with a standard prefix:
-<dl class="man">
-<dt><b>ALERT: </b><i>message</i>
-<dd style="margin-left: 5.0em">Sets the "printer-state-message" attribute and adds the specified message to the current <b>ErrorLog</b> using the "alert" log level.
-<dt><b>ATTR: </b><i>attribute=value </i>[ <i>... attribute=value</i>]
-<dd style="margin-left: 5.0em">Sets the named job or printer attribute(s). The following job attributes can be set: "job-media-progress". The following printer attributes can be set:
-"auth-info-required", "marker-colors", "marker-high-levels", "marker-levels",
-"marker-low-levels", "marker-message", "marker-names", "marker-types",
-"printer-alert", and "printer-alert-description".
-<dt><b>CRIT: </b><i>message</i>
-<dd style="margin-left: 5.0em">Sets the "printer-state-message" attribute and adds the specified message to the current <b>ErrorLog</b> using the "critical" log level.
-<dt><b>DEBUG: </b><i>message</i>
-<dd style="margin-left: 5.0em">Adds the specified message to the current <b>ErrorLog</b> using the "debug" log level.
-<b>DEBUG</b> messages are never stored in the "printer-state-message" attribute.
-<dt><b>DEBUG2: </b><i>message</i>
-<dd style="margin-left: 5.0em"><br>
-Adds the specified message to the current <b>ErrorLog</b> using the "debug2" log level.
-<b>DEBUG2</b> messages are never stored in the "printer-state-message" attribute.
-<dt><b>EMERG: </b><i>message</i>
-<dd style="margin-left: 5.0em">Sets the "printer-state-message" attribute and adds the specified message to the current <b>ErrorLog</b> using the "emergency" log level.
-<dt><b>ERROR:</b><i> message</i>
-<dd style="margin-left: 5.0em">Sets the "printer-state-message" attribute and adds the specified message to the current <b>ErrorLog</b> using the "error" log level.
-<dt><b>INFO:</b><i> message</i>
-<dd style="margin-left: 5.0em">Sets the "printer-state-message" attribute. If the current <b>LogLevel</b> is set to "debug2", also adds the specified message to the current <b>ErrorLog</b> using the "info" log level.
-<dt><b>NOTICE:</b><i> message</i>
-<dd style="margin-left: 5.0em">Sets the "printer-state-message" attribute and adds the specified message to the current <b>ErrorLog</b> using the "notice" log level.
-<dt><b>PAGE:</b><i> page-number #-copies</i>
-<dd style="margin-left: 5.0em"><dt><b>PAGE:</b><i> total #-pages</i>
-<dd style="margin-left: 5.0em">Adds an entry to the current <b>PageLog</b>. The first form adds <i>#-copies</i> to the "job-media-sheets-completed" attribute. The second form sets the "job-media-sheets-completed" attribute to <i>#-pages</i>.
-<dt><b>PPD:</b><i> Keyword=Value</i> [ <i>... KeywordN=Value</i> ]
-<dd style="margin-left: 5.0em">Sets the named keywords in the printer's PPD file. This is typically used to update default option keywords such as <b>DefaultPageSize</b> and the various installable options in the PPD file.
-<dt><b>STATE:</b><i> printer-state-reason </i>[ <i>... printer-state-reason</i> ]
-<dd style="margin-left: 5.0em"><dt><b>STATE: +</b><i> printer-state-reason </i>[ <i>... printer-state-reason</i> ]
-<dd style="margin-left: 5.0em"><dt><b>STATE: -</b><i> printer-state-reason </i>[ <i>... printer-state-reason</i> ]
-<dd style="margin-left: 5.0em">Sets, adds, or removes "printer-state-reason" keywords for the current queue. Typically this is used to indicate media, ink, and toner conditions on a printer.
-<dt><b>WARNING:</b><i> message</i>
-<dd style="margin-left: 5.0em">Sets the "printer-state-message" attribute and adds the specified message to the current <b>ErrorLog</b> using the "warning" log level.
-</dl>
-<h2 class="title"><a name="ENVIRONMENT_VARIABLES">Environment Variables</a></h2>
-The following environment variables are defined by the CUPS
-server when executing the filter:
-<dl class="man">
-<dt><b>CHARSET</b>
-<dd style="margin-left: 5.0em">The default text character set, typically "utf-8".
-<dt><b>CLASS</b>
-<dd style="margin-left: 5.0em">When a job is submitted to a printer class, contains the name of the destination printer class. Otherwise this environment variable will not be set.
-<dt><b>CONTENT_TYPE</b>
-<dd style="margin-left: 5.0em">The MIME media type associated with the submitted job file, for example "application/postscript".
-<dt><b>CUPS_CACHEDIR</b>
-<dd style="margin-left: 5.0em">The directory where semi-persistent cache files can be found and stored.
-<dt><b>CUPS_DATADIR</b>
-<dd style="margin-left: 5.0em">The directory where data files can be found.
-<dt><b>CUPS_FILETYPE</b>
-<dd style="margin-left: 5.0em">The type of file being printed: "job-sheet" for a banner page and "document"
-for a regular print file.
-<dt><b>CUPS_MAX_MESSAGE</b>
-<dd style="margin-left: 5.0em">The maximum size of a message sent to <i>stderr</i>, including any leading prefix and the trailing newline.
-<dt><b>CUPS_SERVERROOT</b>
-<dd style="margin-left: 5.0em">The root directory of the server.
-<dt><b>FINAL_CONTENT_TYPE</b>
-<dd style="margin-left: 5.0em">The MIME media type associated with the output destined for the printer, for example "application/vnd.cups-postscript".
-<dt><b>LANG</b>
-<dd style="margin-left: 5.0em">The default language locale (typically C or en).
-<dt><b>PATH</b>
-<dd style="margin-left: 5.0em">The standard execution path for external programs that may be run by the filter.
-<dt><b>PPD</b>
-<dd style="margin-left: 5.0em">The full pathname of the PostScript Printer Description (PPD) file for this printer.
-<dt><b>PRINTER</b>
-<dd style="margin-left: 5.0em">The name of the printer.
-<dt><b>RIP_CACHE</b>
-<dd style="margin-left: 5.0em">The recommended amount of memory to use for Raster Image Processors (RIPs).
-<dt><b>SOFTWARE</b>
-<dd style="margin-left: 5.0em">The name and version number of the server (typically CUPS/<i>major.minor</i>).
-<dt><b>TZ</b>
-<dd style="margin-left: 5.0em">The timezone of the server.
-<dt><b>USER</b>
-<dd style="margin-left: 5.0em">The user executing the filter, typically "lp" or "root"; consult the <i>cups-files.conf</i> file for the current setting.
-</dl>
-<h2 class="title"><a name="CONFORMING_TO">Conforming To</a></h2>
-While the filter interface is compatible with System V interface scripts, CUPS does not support System V interface scripts.
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-CUPS printer drivers and backends are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<p>CUPS filters are not meant to be run directly by the user.
-Aside from the legacy System V interface issues (<i>argv[0]</i> is the printer name), CUPS filters also expect specific environment variables and file descriptors, and typically run in a user session that (on macOS) has additional restrictions that affect how it runs.
-Unless you are a developer and know what you are doing, please do not run filters directly.
-Instead, use the
-<b>cupsfilter</b>(8)
-program to use the appropriate filters to do the conversions you need.
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>backend</b>(7),
-<b>cups</b>(1),
-<b>cups-files.conf</b>(5),
-<b>cupsd</b>(8),
-<b>cupsfilter</b>(8),
-<br>
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>mime.convs(5)</title>
-</head>
-<body>
-<h1 class="title">mime.convs(5)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-mime.convs - mime type conversion file for cups (deprecated)
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-The <b>mime.convs</b> file defines the filters that are available for converting files from one format to another.
-The standard filters support text, PDF, PostScript, and many types of image files.
-<p>Additional filters are specified in files with the extension <i>.convs</i> in the CUPS configuration directory.
-<p>Each line in the <b>mime.convs</b> file is a comment, blank, or filter
-line.
-Comment lines start with the # character.
-Filter lines specify the source and destination MIME types along with a relative cost associated with the filter and the filter to run:
-<pre class="man">
-
- source/type destination/type cost filter
-
-</pre>
-The <i>source/type</i> field specifies the source MIME media type that is consumed by the filter.
-<p>The <i>destination/type</i> field specifies the destination MIME media type that is produced by the filter.
-<p>The <i>cost</i> field specifies the relative cost for running the filter.
-A value of 100 means that the filter uses a large amount of resources while a value of 0 means that the filter uses very few resources.
-<p>The <i>filter</i> field specifies the filter program filename.
-Filenames are relative to the CUPS filter directory.
-<h2 class="title"><a name="FILES">Files</a></h2>
-<i>/etc/cups</i> - Typical CUPS configuration directory.
-<br>
-<i>/usr/lib/cups/filter</i> - Typical CUPS filter directory.
-<br>
-<i>/usr/libexec/cups/filter</i> - CUPS filter directory on macOS.
-<h2 class="title"><a name="EXAMPLES">Examples</a></h2>
-Define a filter that converts PostScript documents to CUPS Raster format:
-<pre class="man">
-
- application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
-
-</pre>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-CUPS filters are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>cups-files.conf</b>(5),
-<b>cupsd.conf</b>(5),
-<b>cupsd</b>(8),
-<b>cupsfilter</b>(8),
-<b>mime.types</b>(5),
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>mime.types(5)</title>
-</head>
-<body>
-<h1 class="title">mime.types(5)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-mime.types - mime type description file for cups
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-The <b>mime.types</b> file defines the recognized file types.
-<p>Additional file types are specified in files with the extension <i>.types</i> in the CUPS configuration directory.
-<p>Each line in the <b>mime.types</b> file is a comment, blank, or rule line.
-Comment lines start with the # character.
-Rule lines start with the MIME media type and are optionally followed by a series of file recognition rules:
-<pre class="man">
-
- <i>mime/type </i>[ <i>rule </i>... <i>rule </i>]
-
-</pre>
-Rules can be extended over multiple lines using the backslash character (\):
-<pre class="man">
-
- <i>mime/type </i>[ <i>really-really-really-long-rule </i>... <b>\
- </b><i>rule </i>]
-
-</pre>
-MIME media types specified by the <i>mime/type</i> field are case-insensitive and are sorted in ascending alphanumeric order for the purposes of matching.
-See the "TYPE MATCHING AND PRIORITY" section for more information.
-<p>The rules may be grouped using parenthesis, joined using "+" for a logical AND, joined using "," or whitespace for a logical OR, and negated using "!".
-<h3><a name="RULES">Rules</a></h3>
-Rules take two forms - a filename extension by itself and functions with test
-values inside parenthesis.
-The following functions are available:
-<dl class="man">
-<dt><b>match("</b><i>pattern</i><b>")</b>
-<dd style="margin-left: 5.0em">True if the filename matches the given shell wildcard <i>pattern</i>.
-<dt><b>ascii(</b><i>offset</i><b>,</b><i>length</i><b>)</b>
-<dd style="margin-left: 5.0em">True if the <i>length</i> bytes starting at <i>offset</i> are valid printable ASCII (CR, NL, TAB, BS, 32-126).
-<dt><b>printable(</b><i>offset</i><b>,</b><i>length</i><b>)</b>
-<dd style="margin-left: 5.0em">True if the <i>length</i> bytes starting at <i>offset</i> are printable 8-bit chars (CR, NL, TAB, BS, 32-126, 128-254).
-<dt><b>priority(</b><i>number</i><b>)</b>
-<dd style="margin-left: 5.0em">Specifies the relative priority of this MIME media type.
-The default priority is 100.
-Larger values have higher priority while smaller values have lower priority.
-<dt><b>string(</b><i>offset</i><b>,"</b><i>string</i><b>")</b>
-<dd style="margin-left: 5.0em">True if the bytes starting at <i>offset</i> are identical to <i>string</i>.
-<dt><b>istring(</b><i>offset</i><b>,"</b><i>string</i><b>")</b>
-<dd style="margin-left: 5.0em">True if the bytes starting at <i>offset</i> match <i>string</i> without respect to case.
-<dt><b>char(</b><i>offset</i><b>,</b><i>value</i><b>)</b>
-<dd style="margin-left: 5.0em">True if the byte at <i>offset</i> is identical to <i>value</i>.
-<dt><b>short(</b><i>offset</i><b>,</b><i>value</i><b>)</b>
-<dd style="margin-left: 5.0em">True if the 16-bit big-endian integer at <i>offset</i> is identical to <i>value</i>.
-<dt><b>int(</b><i>offset</i><b>,</b><i>value</i><b>)</b>
-<dd style="margin-left: 5.0em">True if the 32-bit big-endian integer at <i>offset</i> is identical to <i>value</i>.
-<dt><b>locale("</b><i>string</i><b>")</b>
-<dd style="margin-left: 5.0em">True if current locale matches <i>string</i>.
-<dt><b>contains(</b><i>offset</i><b>,</b><i>range</i><b>,"</b><i>string</i><b>")</b>
-<dd style="margin-left: 5.0em">True if the bytes starting at <i>offset</i> for <i>range</i> bytes contains <i>string</i>.
-</dl>
-<h3><a name="STRING_CONSTANTS">String Constants</a></h3>
-String constants can be specified inside quotes ("") for strings containing whitespace and angle brackets (<>) for hexadecimal strings.
-<h3><a name="TYPE_MATCHING_AND_PRIORITY">Type Matching And Priority</a></h3>
-When CUPS needs to determine the MIME media type of a given file, it checks every MIME media type defined in the <i>.types</i> files.
-When two or more types match a given file, the type chosen will depend on the type name and priority, with higher-priority types being used over lower-priority ones.
-If the types have the same priority, the type names are sorted alphanumerically in ascending order and the first type is chosen.
-<p>For example, if two types "text/bar" and "text/foo" are defined as matching the
-extension "doc", normally the type "text/bar" will be chosen since its name is
-alphanumerically smaller than "text/foo".
-However, if "text/foo" also defines a higher priority than "text/bar", "text/foo" will be chosen instead.
-<h2 class="title"><a name="FILES">Files</a></h2>
-<i>/etc/cups</i> - Typical CUPS configuration directory.
-<h2 class="title"><a name="EXAMPLES">Examples</a></h2>
-Define two MIME media types for raster data, with one being a subset with higher priority:
-<pre class="man">
-
- application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR") \
- string(0,"RaS2") string(0,"2SaR") \
- string(0,"RaS3") string(0,"3SaR")
-
- image/pwg-raster string(0,"RaS2") + \
- string(4,PwgRaster<00>) priority(150)
-</pre>
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>cups-files.conf</b>(5),
-<b>cupsd.conf</b>(5),
-<b>cupsd</b>(8),
-<b>cupsfilter</b>(8),
-<b>mime.convs</b>(5),
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>ppdc(1)</title>
-</head>
-<body>
-<h1 class="title">ppdc(1)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-ppdc - cups ppd compiler (deprecated)
-<h2 class="title"><a name="SYNOPSIS">Synopsis</a></h2>
-<b>ppdc</b>
-[
-<b>-D </b><i>name</i>[<b>=</b><i>value</i>]
-] [
-<b>-I</b>
-<i>include-directory</i>
-] [
-<b>-c</b>
-<i>message-catalog</i>
-] [
-<b>-d</b>
-<i>output-directory</i>
-] [
-<b>-l</b>
-<i>language(s)</i>
-] [
-<b>-m</b>
-] [
-<b>-t</b>
-] [
-<b>-v</b>
-] [
-<b>-z</b>
-] [
-<b>--cr</b>
-] [
-<b>--crlf</b>
-] [
-<b>--lf</b>
-]
-<i>source-file</i>
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-<b>ppdc</b> compiles PPDC source files into one or more PPD files.
-<b>This program is deprecated and will be removed in a future release of CUPS.</b>
-<h2 class="title"><a name="OPTIONS">Options</a></h2>
-<b>ppdc</b> supports the following options:
-<dl class="man">
-<dt><b>-D </b><i>name</i>[<b>=</b><i>value</i>]
-<dd style="margin-left: 5.0em">Sets the named variable for use in the source file.
-It is equivalent to using the <i>#define</i> directive in the source file.
-<dt><b>-I </b><i>include-directory</i>
-<dd style="margin-left: 5.0em">Specifies an alternate include directory.
-Multiple <i>-I</i> options can be supplied to add additional directories.
-<dt><b>-c </b><i>message-catalog</i>
-<dd style="margin-left: 5.0em">Specifies a single message catalog file in GNU gettext (filename.po) or Apple strings (filename.strings) format to be used for localization.
-<dt><b>-d </b><i>output-directory</i>
-<dd style="margin-left: 5.0em">Specifies the output directory for PPD files.
-The default output directory is "ppd".
-<dt><b>-l </b><i>language(s)</i>
-<dd style="margin-left: 5.0em">Specifies one or more languages to use when localizing the PPD file(s).
-The default language is "en" (English).
-Separate multiple languages with commas, for example "de_DE,en_UK,es_ES,es_MX,es_US,fr_CA,fr_FR,it_IT" will create PPD files with German, UK English, Spanish (Spain, Mexico, and US), French (France and Canada), and Italian languages in each file.
-<dt><b>-m</b>
-<dd style="margin-left: 5.0em">Specifies that the output filename should be based on the ModelName value instead of FileName or PCFilenName.
-<dt><b>-t</b>
-<dd style="margin-left: 5.0em">Specifies that PPD files should be tested instead of generated.
-<dt><b>-v</b>
-<dd style="margin-left: 5.0em">Specifies verbose output, basically a running status of which files are being loaded or written.
-<b>-z</b>
-Generates compressed PPD files (filename.ppd.gz).
-The default is to generate uncompressed PPD files.
-<dt><b>--cr</b>
-<dd style="margin-left: 5.0em"><dt><b>--crlf</b>
-<dd style="margin-left: 5.0em"><dt><b>--lf</b>
-<dd style="margin-left: 5.0em">Specifies the line ending to use - carriage return, carriage return and line feed, or line feed alone.
-The default is to use the line feed character alone.
-</dl>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-PPD files are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>ppdhtml</b>(1),
-<b>ppdi</b>(1),
-<b>ppdmerge</b>(1),
-<b>ppdpo</b>(1),
-<b>ppdcfile</b>(5),
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>ppdcfile(5)</title>
-</head>
-<body>
-<h1 class="title">ppdcfile(5)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-ppdcfile - cups ppd compiler source file format (deprecated)
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-The CUPS PPD compiler reads meta files that contain descriptions of one or more PPD files to be generated by
-<b>ppdc</b>(1).
-This man page provides a quick reference to the supported keywords and should be used in conjunction with the online help for CUPS.
-<p>The source file format is plain ASCII text that can be edited using your favorite text editor. Comments are supported using the C (/* ... */) and C++ (// ...) comment mechanisms.
-<p>Printer driver information can be grouped and shared using curly braces ({ ... }); PPD files are written when a close brace or end-of-file is seen and a PCFileName directive has been defined.
-<p>Directives may be placed anywhere on a line and are followed by one or more values. The following is a list of the available directives and the values they accept:
-<dl class="man">
-<dt><b>#define </b><i>name value</i>
-<dd style="margin-left: 5.0em"><dt><b>#elif </b>{<i>name </i>| <i>value</i>}
-<dd style="margin-left: 5.0em"><dt><b>#else</b>
-<dd style="margin-left: 5.0em"><dt><b>#endif</b>
-<dd style="margin-left: 5.0em"><dt><b>#font </b><i>name encoding "version" charset status</i>
-<dd style="margin-left: 5.0em"><dt><b>#if </b>{<i>name </i>| <i>value</i>}
-<dd style="margin-left: 5.0em"><dt><b>#include <</b><i>filename</i><b>></b>
-<dd style="margin-left: 5.0em"><dt><b>#include "</b><i>filename</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>#media </b><i>name width length</i>
-<dd style="margin-left: 5.0em"><dt><b>#media "</b><i>name</i><b>/</b><i>text</i><b>" </b><i>width length</i>
-<dd style="margin-left: 5.0em"><dt><b>#po </b><i>locale </i><b>"</b><i>filename</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>Attribute </b><i>name </i><b>"" </b><i>value</i>
-<dd style="margin-left: 5.0em"><dt><b>Attribute </b><i>name keyword value</i>
-<dd style="margin-left: 5.0em"><dt><b>Attribute </b><i>name </i><b>"</b><i>keyword</i><b>/</b><i>text</i><b>" </b><i>value</i>
-<dd style="margin-left: 5.0em"><dt><b>Choice </b><i>name </i><b>"</b><i>code</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>Choice "</b><i>name</i><b>/</b><i>text</i><b>" "</b><i>code</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>ColorDevice </b><i>boolean-value</i>
-<dd style="margin-left: 5.0em"><dt><b>ColorModel </b><i>name colorspace colororder compression</i>
-<dd style="margin-left: 5.0em"><dt><b>ColorModel "</b><i>name</i><b>/</b><i>text</i><b>" </b><i>colorspace colororder compression</i>
-<dd style="margin-left: 5.0em"><dt><b>ColorProfile </b><i>resolution</i><b>/</b><i>mediatype gamma density matrix</i>
-<dd style="margin-left: 5.0em"><dt><b>Copyright "</b><i>text</i>"
-<dd style="margin-left: 5.0em"><dt><b>CustomMedia </b><i>name width length left bottom right top </i><b>"</b><i>size-code</i><b>" "</b><i>region-code</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>CustomMedia "</b><i>name</i><b>/</b><i>text</i><b>" </b><i>width length left bottom right top </i><b>"</b><i>size-code</i><b>" "</b><i>region-code</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>Cutter </b><i>boolean-value</i>
-<dd style="margin-left: 5.0em"><dt><b>Darkness </b><i>temperature name</i>
-<dd style="margin-left: 5.0em"><dt><b>Darkness </b><i>temperature </i><b>"</b><i>name</i><b>/</b><i>text</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>DriverType </b><i>type</i>
-<dd style="margin-left: 5.0em"><dt><b>Duplex </b><i>type</i>
-<dd style="margin-left: 5.0em"><dt><b>Filter </b><i>mime-type cost program</i>
-<dd style="margin-left: 5.0em"><dt><b>Finishing </b><i>name</i>
-<dd style="margin-left: 5.0em"><dt><b>Finishing "</b><i>name</i><b>/</b><i>text</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>Font *</b>
-<dd style="margin-left: 5.0em"><dt><b>Font </b><i>name encoding </i><b>"</b><i>version</i><b>" </b><i>charset status</i>
-<dd style="margin-left: 5.0em"><dt><b>Group </b><i>name</i>
-<dd style="margin-left: 5.0em"><dt><b>Group "</b><i>name</i><b>/</b><i>text</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>HWMargins </b><i>left bottom right top</i>
-<dd style="margin-left: 5.0em"><dt><b>InputSlot </b><i>position name</i>
-<dd style="margin-left: 5.0em"><dt><b>InputSlot </b><i>position </i><b>"</b><i>name</i><b>/</b><i>text</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>Installable </b><i>name</i>
-<dd style="margin-left: 5.0em"><dt><b>Installable "</b><i>name</i><b>/</b><i>text</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>LocAttribute </b><i>name </i><b>"</b><i>keyword</i><b>/</b><i>text</i><b>" </b><i>value</i>
-<dd style="margin-left: 5.0em"><dt><b>ManualCopies </b><i>boolean-value</i>
-<dd style="margin-left: 5.0em"><dt><b>Manufacturer "</b><i>name</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>MaxSize </b><i>width length</i>
-<dd style="margin-left: 5.0em"><dt><b>MediaSize </b><i>name</i>
-<dd style="margin-left: 5.0em"><dt><b>MediaType </b><i>type name</i>
-<dd style="margin-left: 5.0em"><dt><b>MediaType </b><i>type </i><b>"</b><i>name</i><b>/</b><i>text</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>MinSize </b><i>width length</i>
-<dd style="margin-left: 5.0em"><dt><b>ModelName "</b><i>name</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>ModelNumber </b><i>number</i>
-<dd style="margin-left: 5.0em"><dt><b>Option </b><i>name type section order</i>
-<dd style="margin-left: 5.0em"><dt><b>Option "</b><i>name</i><b>/</b><i>text</i><b>" </b><i>type section order</i>
-<dd style="margin-left: 5.0em"><dt><b>PCFileName "</b><i>filename.ppd</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>Resolution </b><i>colorspace bits-per-color row-count row-feed row-step name</i>
-<dd style="margin-left: 5.0em"><dt><b>Resolution </b><i>colorspace bits-per-color row-count row-feed row-step </i><b>"</b><i>name</i><b>/</b><i>text</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>SimpleColorProfile </b><i>resolution</i><b>/</b><i>mediatype density yellow-density red-density gamma red-adjust green-adjust blue-adjust</i>
-<dd style="margin-left: 5.0em"><dt><b>Throughput </b><i>pages-per-minute</i>
-<dd style="margin-left: 5.0em"><dt><b>UIConstraints "</b><i>*Option1 *Option2</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>UIConstraints "</b><i>*Option1 Choice1 *Option2</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>UIConstraints "</b><i>*Option1 *Option2 Choice2</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>UIConstraints "</b><i>*Option1 Choice1 *Option2 Choice2</i><b>"</b>
-<dd style="margin-left: 5.0em"><dt><b>VariablePaperSize </b><i>boolean-value</i>
-<dd style="margin-left: 5.0em"><dt><b>Version </b><i>number</i>
-<dd style="margin-left: 5.0em"></dl>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-PPD files are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>ppdc</b>(1),
-<b>ppdhtml</b>(1),
-<b>ppdi</b>(1),
-<b>ppdmerge</b>(1),
-<b>ppdpo</b>(1),
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>ppdhtml(1)</title>
-</head>
-<body>
-<h1 class="title">ppdhtml(1)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-ppdhtml - cups html summary generator (deprecated)
-<h2 class="title"><a name="SYNOPSIS">Synopsis</a></h2>
-<b>ppdhtml</b>
-[
-<b>-D </b><i>name</i>[<b>=</b><i>value</i>]
-] [
-<b>-I</b>
-<i>include-directory</i>
-]
-<i>source-file</i>
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-<b>ppdhtml</b> reads a driver information file and produces a HTML summary page that lists all of the drivers in a file and the supported options.
-<b>This program is deprecated and will be removed in a future release of CUPS.</b>
-<h2 class="title"><a name="OPTIONS">Options</a></h2>
-<b>ppdhtml</b> supports the following options:
-<dl class="man">
-<dt><b>-D </b><i>name</i>[<b>=</b><i>value</i>]
-<dd style="margin-left: 5.0em">Sets the named variable for use in the source file.
-It is equivalent to using the <i>#define</i> directive in the source file.
-<dt><b>-I </b><i>include-directory</i>
-<dd style="margin-left: 5.0em">Specifies an alternate include directory.
-Multiple <i>-I</i> options can be supplied to add additional directories.
-</dl>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-PPD files are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>ppdc</b>(1),
-<b>ppdcfile</b>(5),
-<b>ppdi</b>(1),
-<b>ppdmerge</b>(1),
-<b>ppdpo</b>(1),
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>ppdi(1)</title>
-</head>
-<body>
-<h1 class="title">ppdi(1)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-ppdi - import ppd files (deprecated)
-<h2 class="title"><a name="SYNOPSIS">Synopsis</a></h2>
-<b>ppdi</b>
-[
-<b>-I</b>
-<i>include-directory</i>
-] [
-<b>-o</b>
-<i>source-file</i>
-]
-<i>ppd-file</i>
-[ ...
-<i>ppd-file</i>
-]
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-<b>ppdi</b> imports one or more PPD files into a PPD compiler source file.
-Multiple languages of the same PPD file are merged into a single printer definition to facilitate accurate changes for all localizations.
-<b>This program is deprecated and will be removed in a future release of CUPS.</b>
-<h2 class="title"><a name="OPTIONS">Options</a></h2>
-<b>ppdi</b> supports the following options:
-<dl class="man">
-<dt><b>-I </b><i>include-directory</i>
-<dd style="margin-left: 5.0em">Specifies an alternate include directory.
-Multiple <i>-I</i> options can be supplied to add additional directories.
-<dt><b>-o </b><i>source-file</i>
-<dd style="margin-left: 5.0em">Specifies the PPD source file to update.
-If the source file does not exist, a new source file is created.
-Otherwise the existing file is merged with the new PPD file(s) on the command-line.
-If no source file is specified, the filename <i>ppdi.drv</i> is used.
-</dl>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-PPD files are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>ppdc</b>(1),
-<b>ppdhtml</b>(1),
-<b>ppdmerge</b>(1),
-<b>ppdpo</b>(1),
-<b>ppdcfile</b>(5),
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>ppdmerge(1)</title>
-</head>
-<body>
-<h1 class="title">ppdmerge(1)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-ppdmerge - merge ppd files (deprecated)
-<h2 class="title"><a name="SYNOPSIS">Synopsis</a></h2>
-<b>ppdmerge</b>
-[
-<b>-o</b>
-<i>output-ppd-file</i>
-]
-<i>ppd-file</i>
-<i>ppd-file</i>
-[ ...
-<i>ppd-file</i>
-]
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-<b>ppdmerge</b> merges two or more PPD files into a single, multi-language
-PPD file.
-<b>This program is deprecated and will be removed in a future release of CUPS.</b>
-<h2 class="title"><a name="OPTIONS">Options</a></h2>
-<b>ppdmerge</b> supports the following options:
-<dl class="man">
-<dt><b>-o </b><i>output-ppd-file</i>
-<dd style="margin-left: 3.0em">Specifies the PPD file to create.
-If not specified, the merged PPD file is written to the standard output.
-If the output file already exists, it is silently overwritten.
-</dl>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-PPD files are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<p><b>ppdmerge</b> does not check whether the merged PPD files are for the same device.
-Merging of different device PPDs will yield unpredictable results.
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>ppdc</b>(1),
-<b>ppdhtml</b>(1),
-<b>ppdi</b>(1),
-<b>ppdpo</b>(1),
-<b>ppdcfile</b>(5),
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML>
-<html>
-<!-- SECTION: Man Pages -->
-<head>
- <link rel="stylesheet" type="text/css" href="../cups-printable.css">
- <title>ppdpo(1)</title>
-</head>
-<body>
-<h1 class="title">ppdpo(1)</h1>
-<h2 class="title"><a name="NAME">Name</a></h2>
-ppdpo - ppd message catalog generator (deprecated)
-<h2 class="title"><a name="SYNOPSIS">Synopsis</a></h2>
-<b>ppdpo</b>
-[
-<b>-D </b><i>name</i>[<b>=</b><i>value</i>]
-] [
-<b>-I</b>
-<i>include-directory</i>
-] [
-<b>-o</b>
-<i>output-file</i>
-]
-<i>source-file</i>
-<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
-<b>ppdpo</b> extracts UI strings from PPDC source files and updates either a GNU gettext or macOS strings format message catalog source file for translation.
-<b>This program is deprecated and will be removed in a future release of CUPS.</b>
-<h2 class="title"><a name="OPTIONS">Options</a></h2>
-<b>ppdpo</b> supports the following options:
-<dl class="man">
-<dt><b>-D </b><i>name</i>[<b>=</b><i>value</i>]
-<dd style="margin-left: 5.0em">Sets the named variable for use in the source file.
-It is equivalent to using the <i>#define</i> directive in the source file.
-<dt><b>-I </b><i>include-directory</i>
-<dd style="margin-left: 5.0em">Specifies an alternate include directory.
-Multiple <i>-I</i> options can be supplied to add additional directories.
-<dt><b>-o </b><i>output-file</i>
-<dd style="margin-left: 5.0em">Specifies the output file.
-The supported extensions are <i>.po</i> or <i>.po.gz</i> for GNU gettext format message catalogs and <i>.strings</i> for macOS strings files.
-</dl>
-<h2 class="title"><a name="NOTES">Notes</a></h2>
-PPD files are deprecated and will no longer be supported in a future feature release of CUPS.
-Printers that do not support IPP can be supported using applications such as
-<b>ippeveprinter</b>(1).
-<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
-<b>ppdc</b>(1),
-<b>ppdhtml</b>(1),
-<b>ppdi</b>(1),
-<b>ppdmerge</b>(1),
-<b>ppdcfile(5),</b>
-CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
-<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright © 2007-2019 by Apple Inc.
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<!-- SECTION: Programming -->
- <head>
- <title>Developing PostScript Printer Drivers</title>
- <meta name="keywords" content="Programming">
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- <meta name="creator" content="codedoc v3.1">
- <meta name="author" content="Unknown">
- <meta name="copyright" content="Unknown">
- <meta name="version" content="0.0">
- <style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1 { font-size: 2em; }
-H2 { font-size: 1.75em; }
-H3 { font-size: 1.5em; }
-H4 { font-size: 1.25em; }
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-BLOCKQUOTE {
- border-left: solid 2px #777;
- margin: 1em 0;
- padding: 10px;
-}
-
-BLOCKQUOTE OL LI {
- margin-left: -1em;
-}
-
-PRE.command, PRE.example {
- background: #eee;
- margin: 0 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding: 5pt 10pt 0;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- font-size: 250%;
- font-weight: bold;
- margin: 0;
-}
-div.body h2 {
- font-size: 250%;
- margin-top: 1.5em;
-}
-div.body h3 {
- font-size: 150%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h4 {
- font-size: 110%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h5 {
- font-size: 100%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-.class {
- border-bottom: solid 2px gray;
-}
-.constants {
-}
-.description {
- margin-top: 0.5em;
-}
-.discussion {
-}
-.enumeration {
- border-bottom: solid 2px gray;
-}
-.function {
- border-bottom: solid 2px gray;
- margin-bottom: 0;
-}
-.members {
-}
-.method {
-}
-.parameters {
-}
-.returnvalue {
-}
-.struct {
- border-bottom: solid 2px gray;
-}
-.typedef {
- border-bottom: solid 2px gray;
-}
-.union {
- border-bottom: solid 2px gray;
-}
-.variable {
-}
-h1, h2, h3, h4, h5, h6 {
- page-break-inside: avoid;
-}
-blockquote {
- border: solid thin gray;
- box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
- padding: 10px 10px 0px;
- page-break-inside: avoid;
-}
-p code, li code, p.code, pre, ul.code li {
- background: rgba(127,127,127,0.1);
- border: thin dotted gray;
- font-family: monospace;
- hyphens: manual;
- -webkit-hyphens: manual;
- page-break-inside: avoid;
-}
-p.code, pre, ul.code li {
- padding: 10px;
-}
-p code, li code {
- padding: 2px 5px;
-}
-a:link, a:visited {
- text-decoration: none;
-}
-span.info {
- background: black;
- border: solid thin black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-h2 span.info, h3 span.info, h4 span.info {
- border-radius: 10px;
- float: right;
- font-size: 80%;
- padding: 3px 6px;
-}
-h2.title span.info, h3.title span.info, h4.title span.info {
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
-}
-h2.title span.info {
- padding: 4px 6px;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-table.list {
- border-collapse: collapse;
- width: 100%;
-}
-table.list tr:nth-child(even) {
- background: rgba(127,127,127,0.1);]n}
-table.list th {
- border-right: 2px solid gray;
- font-family: monospace;
- padding: 5px 10px 5px 2px;
- text-align: right;
- vertical-align: top;
-}
-table.list td {
- padding: 5px 2px 5px 10px;
- text-align: left;
- vertical-align: top;
-}
-h1.title {
-}
-h2.title {
- border-bottom: solid 2px black;
-}
-h3.title {
- border-bottom: solid 2px black;
-}
---></style>
- </head>
- <body>
-<!--
- PostScript printer driver documentation for CUPS.
-
- Copyright © 2007-2012 by Apple Inc.
- Copyright © 1997-2007 by Easy Software Products.
-
- Licensed under Apache License v2.0. See the file "LICENSE" for more
- information.
--->
-
-<h1 class='title'>Developing PostScript Printer Drivers</h1>
-
-<p>This document describes how to develop printer drivers for PostScript printers. Topics include: <a href='#BASICS'>printer driver basics</a>, <a href='#CREATE'>creating new PPD files</a>, <a href='#IMPORT'>importing existing PPD files</a>, <a href='#FILTERS'>using custom filters</a>, <a href='#COLOR'>implementing color management</a>, and <a href='#MACOSX'>adding macOS features</a>.</p>
-
-<div class='summary'><table summary='General Information'>
-<tbody>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='raster-driver.html'>Developing Raster Printer Drivers</a><br>
- Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
- Programming: <a href='ppd-compiler.html'>Introduction to the PPD Compiler</a><br>
- Programming: <a href='api-raster.html'>Raster API</a><br>
- References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a><br>
- Specifications: <a href='spec-ppd.html'>CUPS PPD Extensions</a></td>
-</tr>
-</tbody>
-</table></div>
- <div class="contents">
- <h2 class="title">Contents</h2>
- <ul class="contents">
- <li><a href="#BASICS">Printer Driver Basics</a></li>
- <li><a href="#CREATING">Creating New PPD Files</a><ul class="subcontents">
- <li><a href="#IMPORT">Importing Existing PPD Files</a></li>
- </ul></li>
- <li><a href="#FILTERS">Using Custom Filters</a></li>
- <li><a href="#COLOR">Implementing Color Management</a></li>
- <li><a href="#MACOSX">Adding macOS Features</a></li>
- </ul>
- </div>
- <div class="body">
-<h2 class='title'><a name='BASICS'>Printer Driver Basics</a></h2>
-
-<p>A CUPS PostScript printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, zero or more <em>filter</em> programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.</p>
-
-<p>Every time a user prints something the scheduler program, <a href='man-cupsd.html'>cupsd(8)</a>, determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into device-independent PostScript, and then from device-independent PostScript to device-dependent PostScript. <a href='#FIGURE_1'>Figure 1</a> shows the data flow of a typical print job.</p>
-
-<div class='figure'><table summary='PostScript Filter Chain'>
-<caption>Figure 1: <a name='FIGURE_1'>PostScript Filter Chain</a></caption>
-<tr><td><img src='../images/cups-postscript-chain.png' width='700' height='150' alt='PostScript Filter Chain'></td></tr>
-</table></div>
-
-<p>The optional PostScript filter can be provided to add printer-specific commands to the PostScript output that cannot be represented in the PPD file or to reorganize the output for special printer features. Typically this is used to support advanced job management or finishing functions on the printer. CUPS includes a generic PostScript filter that handles all PPD-defined commands.</p>
-
-<p>The optional port monitor handles interface-specific protocol or encoding issues. For example, many PostScript printers support the Binary Communications Protocol (BCP) and Tagged Binary Communications Protocol (TBCP) to allow applications to print 8-bit ("binary") PostScript jobs. CUPS includes port monitors for BCP and TBCP, and you can supply your own port monitors as needed.</p>
-
-<p>The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.</p>
-
-<p>The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. <a href='#FIGURE_2'>Figure 2</a> shows the data flow of a typical command job.</p>
-
-<div class='figure'><table summary='Command Filter Chain'>
-<caption>Figure 2: <a name='FIGURE_2'>Command Filter Chain</a></caption>
-<tr><td><img src='../images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
-</table></div>
-
-<p>PostScript printer drivers typically do not require their own command filter since CUPS includes a generic PostScript command filter that supports all of the standard functions using PPD-defined commands.</p>
-
-
-<h2 class='title'><a name='CREATING'>Creating New PPD Files</a></h2>
-
-<p>We recommend using the CUPS PPD compiler, <a href='man-ppdc.html'>ppdc(1)</a>, to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "<a href='ppd-compiler.html'>Introduction to the PPD Compiler</a>" document. <a href='#LISTING_1'>Listing 1</a> shows a driver information file for a black-and-white PostScript printer.</p>
-
-<p class='example'>Listing 1: <a name='LISTING_1'>"examples/postscript.drv"</a></p>
-
-<pre class='example'>
-// Include standard font and media definitions
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-
-// Specify this is a PostScript printer driver
-<a href='ref-ppdcfile.html#DriverType'>DriverType</a> ps
-
-// List the fonts that are supported, in this case all standard fonts
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-
-// Manufacturer, model name, and version
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "Foo"
-<a href='ref-ppdcfile.html#ModelName'>ModelName</a> "Foo LaserProofer 2000"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-
-// PostScript printer attributes
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> DefaultColorSpace "" Gray
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> LandscapeOrientation "" Minus90
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> LanguageLevel "" "3"
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> Product "" "(Foo LaserProofer 2000)"
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> PSVersion "" "(3010) 0"
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> TTRasterizer "" Type42
-
-// Supported page sizes
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Legal
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-
-// Query command for page size
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> "?PageSize" "" "
- save
- currentpagedevice /PageSize get aload pop
- 2 copy gt {exch} if (Unknown)
- 23 dict
- dup [612 792] (Letter) put
- dup [612 1008] (Legal) put
- dup [595 842] (A4) put
- {exch aload pop 4 index sub abs 5 le exch
- 5 index sub abs 5 le and
- {exch pop exit} {pop} ifelse
- } bind forall = flush pop pop
- restore"
-
-// Specify the name of the PPD file we want to generate
-<a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "fooproof.ppd"
-</pre>
-
-<h3>Required Attributes</h3>
-
-<p>PostScript drivers require the attributes listed in <a href='#TABLE_1'>Table 1</a>. If not specified, the defaults for CUPS drivers are used. A typical PostScript driver information file would include the following attributes:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> DefaultColorSpace "" Gray
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> LandscapeOrientation "" Minus90
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> LanguageLevel "" "3"
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> Product "" "(Foo LaserProofer 2000)"
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> PSVersion "" "(3010) 0"
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> TTRasterizer "" Type42
-</pre>
-
-<div class='table'><table summary='Required PostScript Printer Driver Attributes'>
-<caption>Table 1: <a name='TABLE_1'>Required PostScript Printer Driver Attributes</a></caption>
-<thead>
-<tr>
- <th>Attribute</th>
- <th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <td><tt>DefaultColorSpace</tt></td>
- <td>The default colorspace:
- <tt>Gray</tt>, <tt>RGB</tt>, <tt>CMY</tt>, or
- <tt>CMYK</tt>. If not specified, then <tt>RGB</tt> is
- assumed.</td>
-</tr>
-<tr>
- <td><tt>LandscapeOrientation</tt></td>
- <td>The preferred landscape
- orientation: <tt>Plus90</tt>, <tt>Minus90</tt>, or
- <tt>Any</tt>. If not specified, <tt>Plus90</tt> is
- assumed.</td>
-</tr>
-<tr>
- <td><tt>LanguageLevel</tt></td>
- <td>The PostScript language
- level supported by the device: 1, 2, or 3. If not
- specified, 2 is assumed.</td>
-</tr>
-<tr>
- <td><tt>Product</tt></td>
- <td>The string returned by
- the PostScript <tt>product</tt> operator, which
- <i>must</i> include parenthesis to conform with
- PostScript syntax rules for strings. Multiple
- <tt>Product</tt> attributes may be specified to support
- multiple products with the same PPD file. If not
- specified, "(ESP Ghostscript)" and "(GNU Ghostscript)"
- are assumed.</td>
-</tr>
-<tr>
- <td><tt>PSVersion</tt></td>
- <td>The PostScript
- interpreter version numbers as returned by the
- <tt>version</tt> and <tt>revision</tt> operators. The
- required format is "(version) revision". Multiple
- <tt>PSVersion</tt> attributes may be specified to
- support multiple interpreter version numbers. If not
- specified, "(3010) 705" and "(3010) 707" are
- assumed.</td>
-</tr>
-<tr>
- <td><tt>TTRasterizer</tt></td>
- <td>The type of TrueType
- font rasterizer supported by the device, if any. The
- supported values are <tt>None</tt>, <tt>Accept68k</tt>,
- <tt>Type42</tt>, and <tt>TrueImage</tt>. If not
- specified, <tt>None</tt> is assumed.</td>
-</tr>
-</table></div>
-
-<h3>Query Commands</h3>
-
-<p>Most PostScript printer PPD files include query commands (<tt>?PageSize</tt>, etc.) that allow applications to query the printer for its current settings and configuration. Query commands are included in driver information files as attributes. For example, the example in <a href='#LISTING_1'>Listing 1</a> uses the following definition for the <tt>PageSize</tt> query command:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> "?PageSize" "" "
- save
- currentpagedevice /PageSize get aload pop
- 2 copy gt {exch} if (Unknown)
- 23 dict
- dup [612 792] (Letter) put
- dup [612 1008] (Legal) put
- dup [595 842] (A4) put
- {exch aload pop 4 index sub abs 5 le exch
- 5 index sub abs 5 le and
- {exch pop exit} {pop} ifelse
- } bind forall = flush pop pop
- restore"
-</pre>
-
-<p>Query commands can span multiple lines, however no single line may contain more than 255 characters.</p>
-
-<h3><a name='IMPORT'>Importing Existing PPD Files</a></h3>
-
-<P>CUPS includes a utility called <a href='man-ppdi.html'>ppdi(1)</a>
-which allows you to import existing PPD files into the driver information file
-format used by the PPD compiler <a href='man-ppdc.html'>ppdc(1)</a>. Once
-imported, you can modify, localize, and regenerate the PPD files easily. Type
-the following command to import the PPD file <VAR>mydevice.ppd</VAR> into the
-driver information file <VAR>mydevice.drv</VAR>:</P>
-
-<pre class='command'>
-ppdi -o mydevice.drv mydevice.ppd
-</pre>
-
-<P>If you have a whole directory of PPD files that you would like to import,
-you can list multiple filenames or use shell wildcards to import more than one
-PPD file on the command-line:</P>
-
-<pre class='command'>
-ppdi -o mydevice.drv mydevice1.ppd mydevice2.ppd
-ppdi -o mydevice.drv *.ppd
-</pre>
-
-<P>If the driver information file already exists, the new PPD
-file entries are appended to the end of the file. Each PPD file
-is placed in its own group of curly braces within the driver
-information file.</P>
-
-
-<h2 class='title'><a name='FILTERS'>Using Custom Filters</a></h2>
-
-<p>Normally a PostScript printer driver will not utilize any additional print filters. For drivers that provide additional filters such as a CUPS command file filter for doing printer maintenance, you must also list the following <tt>Filter</tt> directive to handle printing PostScript files:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-postscript 0 -
-</pre>
-
-<h3>Custom Command Filters</h3>
-
-<p>The <tt>application/vnd.cups-command</tt> file type is used for CUPS command files. Use the following <tt>Filter</tt> directive to handle CUPS command files:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-command 100 /path/to/command/filter
-</pre>
-
-<p>To use the standard PostScript command filter, specify <var>commandtops</var> as the path to the command filter.</p>
-
-<h3>Custom PDF Filters</h3>
-
-<p>The <tt>application/pdf</tt> file type is used for unfiltered PDF files while the <tt>application/vnd.cups-pdf</tt> file type is used for filtered PDF files. Use the following <tt>Filter</tt> directive to handle filtered PDF files:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-pdf 100 /path/to/pdf/filter
-</pre>
-
-<p>For unfiltered PDF files, use:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/pdf 100 /path/to/pdf/filter
-</pre>
-
-<p>Custom PDF filters that accept filtered data do not need to perform number-up processing and other types of page imposition, while those that accept unfiltered data MUST do the number-up processing themselves.</p>
-
-<h3>Custom PostScript Filters</h3>
-
-<p>The <tt>application/vnd.cups-postscript</tt> file type is used for filtered PostScript files. Use the following <tt>Filter</tt> directive to handle PostScript files:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-postscript 100 /path/to/postscript/filter
-</pre>
-
-
-<h2 class='title'><a name='COLOR'>Implementing Color Management</a></h2>
-
-<p>CUPS uses ICC color profiles to provide more accurate color reproduction. The <a href='spec-ppd.html#cupsICCProfile'><tt>cupsICCProfile</tt></a> attribute defines the color profiles that are available for a given printer, for example:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
-</pre>
-
-<p>where "ColorModel.MediaType.Resolution" defines a selector based on the corresponding option selections. A simple driver might only define profiles for the color models that are supported, for example a printer supporting Gray and RGB might use:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
-</pre>
-
-<p>The options used for profile selection can be customized using the <tt>cupsICCQualifier2</tt> and <tt>cupsICCQualifier3</tt> attributes.</p>
-
-
-<h2 class='title'><a name='MACOSX'>Adding macOS Features</a></h2>
-
-<p>macOS printer drivers can provide <a href='spec-ppd.html#MACOSX'>additional attributes</a> to specify additional option panes in the print dialog, an image of the printer, a help book, and option presets for the driver software:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APDialogExtension "" /Library/Printers/Vendor/filename.plugin
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APHelpBook "" /Library/Printers/Vendor/filename.bundle
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterPreset "name/text" "*option choice ..."
-</pre>
- </div>
- </body>
-</html>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<!-- SECTION: Programming -->
- <head>
- <title>Introduction to the PPD Compiler</title>
- <meta name="keywords" content="Programming">
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- <meta name="creator" content="codedoc v3.1">
- <meta name="author" content="Unknown">
- <meta name="copyright" content="Unknown">
- <meta name="version" content="0.0">
- <style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1 { font-size: 2em; }
-H2 { font-size: 1.75em; }
-H3 { font-size: 1.5em; }
-H4 { font-size: 1.25em; }
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-BLOCKQUOTE {
- border-left: solid 2px #777;
- margin: 1em 0;
- padding: 10px;
-}
-
-BLOCKQUOTE OL LI {
- margin-left: -1em;
-}
-
-PRE.command, PRE.example {
- background: #eee;
- margin: 0 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding: 5pt 10pt 0;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- font-size: 250%;
- font-weight: bold;
- margin: 0;
-}
-div.body h2 {
- font-size: 250%;
- margin-top: 1.5em;
-}
-div.body h3 {
- font-size: 150%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h4 {
- font-size: 110%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h5 {
- font-size: 100%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-.class {
- border-bottom: solid 2px gray;
-}
-.constants {
-}
-.description {
- margin-top: 0.5em;
-}
-.discussion {
-}
-.enumeration {
- border-bottom: solid 2px gray;
-}
-.function {
- border-bottom: solid 2px gray;
- margin-bottom: 0;
-}
-.members {
-}
-.method {
-}
-.parameters {
-}
-.returnvalue {
-}
-.struct {
- border-bottom: solid 2px gray;
-}
-.typedef {
- border-bottom: solid 2px gray;
-}
-.union {
- border-bottom: solid 2px gray;
-}
-.variable {
-}
-h1, h2, h3, h4, h5, h6 {
- page-break-inside: avoid;
-}
-blockquote {
- border: solid thin gray;
- box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
- padding: 10px 10px 0px;
- page-break-inside: avoid;
-}
-p code, li code, p.code, pre, ul.code li {
- background: rgba(127,127,127,0.1);
- border: thin dotted gray;
- font-family: monospace;
- hyphens: manual;
- -webkit-hyphens: manual;
- page-break-inside: avoid;
-}
-p.code, pre, ul.code li {
- padding: 10px;
-}
-p code, li code {
- padding: 2px 5px;
-}
-a:link, a:visited {
- text-decoration: none;
-}
-span.info {
- background: black;
- border: solid thin black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-h2 span.info, h3 span.info, h4 span.info {
- border-radius: 10px;
- float: right;
- font-size: 80%;
- padding: 3px 6px;
-}
-h2.title span.info, h3.title span.info, h4.title span.info {
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
-}
-h2.title span.info {
- padding: 4px 6px;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-table.list {
- border-collapse: collapse;
- width: 100%;
-}
-table.list tr:nth-child(even) {
- background: rgba(127,127,127,0.1);]n}
-table.list th {
- border-right: 2px solid gray;
- font-family: monospace;
- padding: 5px 10px 5px 2px;
- text-align: right;
- vertical-align: top;
-}
-table.list td {
- padding: 5px 2px 5px 10px;
- text-align: left;
- vertical-align: top;
-}
-h1.title {
-}
-h2.title {
- border-bottom: solid 2px black;
-}
-h3.title {
- border-bottom: solid 2px black;
-}
---></style>
- </head>
- <body>
-<!--
- PPD compiler documentation for CUPS.
-
- Copyright © 2007-2012 by Apple Inc.
- Copyright © 1997-2007 by Easy Software Products.
-
- Licensed under Apache License v2.0. See the file "LICENSE" for more
- information.
--->
-
-<h1 class='title'>Introduction to the PPD Compiler</h1>
-
-<P>This document describes how to use the CUPS PostScript Printer Description
-(PPD) file compiler. The PPD compiler generates PPD files from simple text files
-that describe the features and capabilities of one or more printers.</P>
-
-<BLOCKQUOTE><B>Note:</B>
-
-<P>The PPD compiler and related tools are deprecated and will be removed in a future release of CUPS.</P>
-
-</BLOCKQUOTE>
-
-<div class='summary'><table summary='General Information'>
-<tbody>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='raster-driver.html'>Developing Raster Printer Drivers</a><br>
- Programming: <a href='postscript-driver.html'>Developing PostScript Printer Drivers</a><br>
- Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
- Programming: <a href='api-raster.html'>Raster API</a><br>
- References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a><br>
- Specifications: <a href='spec-ppd.html'>CUPS PPD Extensions</a></td>
-</tr>
-</tbody>
-</table></div>
- <div class="contents">
- <h2 class="title">Contents</h2>
- <ul class="contents">
- <li><a href="#BASICS">The Basics</a></li>
- <li><a href="#DRV">Driver Information Files</a><ul class="subcontents">
- <li><a href="#SIMPLE">A Simple Example</a></li>
- <li><a href="#GROUPING">Grouping and Inheritance</a></li>
- <li><a href="#COLOR">Color Support</a></li>
- <li><a href="#OPTIONS">Defining Custom Options and Option Groups</a></li>
- <li><a href="#DEFINE">Defining Constants</a></li>
- <li><a href="#CONDITIONAL">Conditional Statements</a></li>
- <li><a href="#CONSTRAINTS">Defining Constraints</a></li>
- </ul></li>
- <li><a href="#LOCALIZATION">Localization</a><ul class="subcontents">
- <li><a href="#PPDPO">The ppdpo Utility</a></li>
- <li><a href="#PPDC_CATALOG">Using Message Catalogs with the PPD Compiler</a></li>
- </ul></li>
- </ul>
- </div>
- <div class="body">
-<h2 class='title'><a name='BASICS'>The Basics</a></h2>
-
-<P>The PPD compiler, <a href='man-ppdc.html'><code>ppdc(1)</code></a>, is a
-simple command-line tool that takes a single <I>driver information file</I>,
-which by convention uses the extension <VAR>.drv</VAR>, and produces one or more
-PPD files that may be distributed with your printer drivers for use with CUPS.
-For example, you would run the following command to create the English language
-PPD files defined by the driver information file <VAR>mydrivers.drv</VAR>:</P>
-
-<pre class='command'>
-ppdc mydrivers.drv
-</pre>
-
-<P>The PPD files are placed in a subdirectory called
-<VAR>ppd</VAR>. The <TT>-d</TT> option is used to put the PPD
-files in a different location, for example:</p>
-
-<pre class='command'>
-ppdc -d myppds mydrivers.drv
-</pre>
-
-<P>places the PPD files in a subdirectory named
-<VAR>myppds</VAR>. Finally, use the <TT>-l</TT> option to
-specify the language localization for the PPD files that are
-created, for example:</P>
-
-<pre class='command'>
-ppdc -d myppds/de -l de mydrivers.drv
-ppdc -d myppds/en -l en mydrivers.drv
-ppdc -d myppds/es -l es mydrivers.drv
-ppdc -d myppds/fr -l fr mydrivers.drv
-ppdc -d myppds/it -l it mydrivers.drv
-</pre>
-
-<P>creates PPD files in German (de), English (en), Spanish (es),
-French (fr), and Italian (it) in the corresponding
-subdirectories. Specify multiple languages (separated by commas) to produce
-"globalized" PPD files:</p>
-
-<pre class='command'>
-ppdc -d myppds -l de,en,es,fr,it mydrivers.drv
-</pre>
-
-
-<h2 class='title'><a name='DRV'>Driver Information Files</a></h2>
-
-<P>The driver information files accepted by the PPD compiler are
-plain text files that define the various attributes and options
-that are included in the PPD files that are generated. A driver
-information file can define the information for one or more printers and
-their corresponding PPD files.</P>
-
-<p class='example'><a name="LISTING1">Listing 1: "examples/minimum.drv"</a></p>
-
-<pre class='example'>
-<I>// Include standard font and media definitions</I>
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-
-<I>// List the fonts that are supported, in this case all standard fonts...</I>
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-
-<I>// Manufacturer, model name, and version</I>
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "Foo"
-<a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-
-<I>// Each filter provided by the driver...</I>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 rastertofoo
-
-<I>// Supported page sizes</I>
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-
-<I>// Supported resolutions</I>
-*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "600dpi/600 DPI"
-
-<I>// Specify the name of the PPD file we want to generate...</I>
-<a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojet2k.ppd"
-</pre>
-
-
-<h3><a name='SIMPLE'>A Simple Example</a></h3>
-
-<P>The example in <A HREF="#LISTING1">Listing 1</A> shows a driver information
-file which defines the minimum required attributes to provide a valid PPD file.
-The first part of the file includes standard definition files for fonts and
-media sizes:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-</pre>
-
-<P>The <TT>#include</TT> directive works just like the C/C++ include directive;
-files included using the angle brackets (<TT><filename></TT>) are found
-in any of the standard include directories and files included using quotes
-(<TT>"filename"</TT>) are found in the same directory as the source or include
-file. The <TT><font.defs></TT> include file defines the standard fonts
-which are included with GPL Ghostscript and the Apple PDF RIP, while the
-<TT><media.defs></TT> include file defines the standard media sizes
-listed in Appendix B of the Adobe PostScript Printer Description File Format
-Specification.</P>
-
-<P>CUPS provides several other standard include files:</P>
-
-<UL>
-
- <LI><TT><epson.h></TT> - Defines all of the rastertoepson driver
- constants.</LI>
-
- <LI><TT><escp.h></TT> - Defines all of the rastertoescpx driver
- constants.</LI>
-
- <LI><TT><hp.h></TT> - Defines all of the rastertohp driver
- constants.</LI>
-
- <LI><TT><label.h></TT> - Defines all of the rastertolabel driver
- constants.</LI>
-
- <LI><TT><pcl.h></TT> - Defines all of the rastertopclx driver
- constants.</LI>
-
- <LI><TT><raster.defs></TT> - Defines all of the CUPS raster format
- constants.</LI>
-
-</UL>
-
-<P>Next we list all of the fonts that are available in the driver; for CUPS
-raster drivers, the following line is all that is usually supplied:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-</pre>
-
-<P>The <TT>Font</TT> directive specifies the name of a single font or the
-asterisk to specify all fonts. For example, you would use the following line to
-define an additional bar code font that you are supplying with your printer
-driver:</P>
-
-<pre class='example'>
-<I>// name encoding version charset status</I>
-<a href='ref-ppdcfile.html#Font'>Font</a> Barcode-Foo Special "(1.0)" Special ROM
-</pre>
-
-<P>The name of the font is <TT>Barcode-Foo</TT>. Since it is not a standard
-text font, the encoding and charset name <TT>Special</TT> is used. The version
-number is <TT>1.0</TT> and the status (where the font is located) is
-<TT>ROM</TT> to indicate that the font does not need to be embedded in
-documents that use the font for this printer.</P>
-
-<P>Third comes the manufacturer, model name, and version number information
-strings:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "Foo"
-<a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-</pre>
-
-<P>These strings are used when the user (or auto-configuration program) selects
-the printer driver for a newly connected device.</p>
-
-<P>The list of filters comes after the information strings; for the example in
-<A HREF="#LISTING1">Listing 1</A>, we have a single filter that takes CUPS
-raster data:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 rastertofoo
-</pre>
-
-<P>Each filter specified in the driver information file is the equivalent of a
-printer driver for that format; if a user submits a print job in a different
-format, CUPS figures out the sequence of commands that will produce a supported
-format for the least relative cost.</P>
-
-<P>Once we have defined the driver information we specify the supported options.
-For the example driver we support a single resolution of 600 dots per inch and
-two media sizes, A4 and Letter:</P>
-
-<pre class='example'>
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-
-*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "600dpi/600 DPI"
-</pre>
-
-<P>The asterisk in front of the <TT>MediaSize</TT> and <TT>Resolution</TT>
-directives specify that those option choices are the default. The
-<TT>MediaSize</TT> directive is followed by a media size name which is normally
-defined in the <TT><media.defs></TT> file and corresponds to a standard
-Adobe media size name. If the default media size is <TT>Letter</TT>, the PPD
-compiler will override it to be <TT>A4</TT> for non-English localizations for
-you automatically.</P>
-
-<P>The <TT>Resolution</TT> directive accepts several values after it as
-follows:</P>
-
-<OL>
-
- <LI>Colorspace for this resolution, if any. In the example file, the
- colorspace <TT>k</TT> is used which corresponds to black. For printer
- drivers that support color printing, this field is usually specified as
- "-" for "no change".</LI>
-
- <LI>Bits per color. In the example file, we define 8 bits per color, for
- a continuous-tone grayscale output. All versions of CUPS support 1 and
- 8 bits per color. CUPS 1.2 and higher (macOS 10.5 and higher) also
- supports 16 bits per color.</LI>
-
- <LI>Rows per band. In the example file, we define 0 rows per band to
- indicate that our printer driver does not process the page in
- bands.</LI>
-
- <LI>Row feed. In the example, we define the feed value to be 0 to
- indicate that our printer driver does not interleave the output.</LI>
-
- <LI>Row step. In the example, we define the step value to be 0 to
- indicate that our printer driver does not interleave the output. This
- value normally indicates the spacing between the nozzles of an inkjet
- printer - when combined with the previous two values, it informs the
- driver how to stagger the output on the page to produce interleaved
- lines on the page for higher-resolution output.</LI>
-
- <LI>Choice name and text. In the example, we define the choice name and
- text to be <TT>"600dpi/600 DPI"</TT>. The name and text are separated by
- slash (<TT>/</TT>) character; if no text is specified, then the name is
- used as the text. The PPD compiler parses the name to determine the
- actual resolution; the name can be of the form
- <TT><I>RESOLUTION</I>dpi</TT> for resolutions that are equal
- horizontally and vertically or <TT><I>HRES</I>x<I>VRES</I>dpi</TT> for
- isometric resolutions. Only integer resolution values are supported, so
- a resolution name of <TT>300dpi</TT> is valid while <TT>300.1dpi</TT> is
- not.</LI>
-
-</OL>
-
-<P>Finally, the <TT>PCFileName</TT> directive specifies that the named PPD file
-should be written for the current driver definitions:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojet2k.ppd"
-</pre>
-
-<P>The filename follows the directive and <I>must</I> conform to the Adobe
-filename requirements in the Adobe Postscript Printer Description File Format
-Specification. Specifically, the filename may not exceed 8 characters followed
-by the extension <VAR>.ppd</VAR>. The <TT>FileName</TT> directive can be used to
-specify longer filenames:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#FileName'>FileName</a> "FooJet 2000"
-</pre>
-
-
-<h3><a name='GROUPING'>Grouping and Inheritance</a></h3>
-
-<P>The previous example created a single PPD file. Driver information files can
-also define multiple printers by using the PPD compiler grouping functionality.
-Directives are grouped using the curly braces (<TT>{</TT> and <TT>}</TT>) and
-every group that uses the <TT>PCFileName</TT> or <TT>FileName</TT> directives
-produces a PPD file with that name. <A HREF="#LISTING2">Listing 2</A> shows a
-variation of the original example that uses two groups to define two printers
-that share the same printer driver filter but provide two different resolution
-options.</P>
-
-<p class='example'><a name="LISTING2">Listing 2: "examples/grouping.drv"</a></p>
-
-<pre class='example'>
-
-<I>// Include standard font and media definitions</I>
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-
-<I>// List the fonts that are supported, in this case all standard fonts...</I>
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-
-<I>// Manufacturer and version</I>
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "Foo"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-
-<I>// Each filter provided by the driver...</I>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 rastertofoo
-
-<I>// Supported page sizes</I>
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-
-{
- <I>// Supported resolutions</I>
- *<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "600dpi/600 DPI"
-
- <I>// Specify the model name and filename...</I>
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojet2k.ppd"
-}
-
-{
- <I>// Supported resolutions</I>
- *<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "1200dpi/1200 DPI"
-
- <I>// Specify the model name and filename...</I>
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2001"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojt2k1.ppd"
-}
-</pre>
-
-<P>The second example is essentially the same as the first, except that each
-printer model is defined inside of a pair of curly braces. For example, the
-first printer is defined using:</P>
-
-<pre class='example'>
-{
- // Supported resolutions
- *<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "600dpi/600 DPI"
-
- // Specify the model name and filename...
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojet2k.ppd"
-}
-</pre>
-
-<P>The printer <I>inherits</I> all of the definitions from the parent group (the
-top part of the file) and adds the additional definitions inside the curly
-braces for that printer driver. When we define the second group, it also
-inherits the same definitions from the parent group but <I>none</I> of the
-definitions from the first driver. Groups can be nested to any number of levels
-to support variations of similar models without duplication of information.</P>
-
-
-<h3><a name='COLOR'>Color Support</a></h3>
-
-<P>For printer drivers that support color printing, the
-<TT>ColorDevice</TT> and <TT>ColorModel</TT> directives should be
-used to tell the printing system that color output is desired
-and in what formats. <A HREF="#LISTING3">Listing 3</A> shows a
-variation of the previous example which includes a color printer
-that supports printing at 300 and 600 DPI.</P>
-
-<P>The key changes are the addition of the <TT>ColorDevice</TT>
-directive:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#ColorDevice'>ColorDevice</a> true
-</pre>
-
-<P>which tells the printing system that the printer supports
-color printing, and the <TT>ColorModel</TT> directives:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> Gray/Grayscale w chunky 0
-*<a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> RGB/Color rgb chunky 0
-</pre>
-
-<P>which tell the printing system which colorspaces are supported by the printer
-driver for color printing. Each of the <TT>ColorModel</TT> directives is
-followed by the option name and text (<TT>Gray/Grayscale</TT> and
-<TT>RGB/Color</TT>), the colorspace name (<TT>w</TT> and <TT>rgb</TT>), the
-color organization (<TT>chunky</TT>), and the compression mode number
-(<TT>0</TT>) to be passed to the driver. The option name can be any of the
-standard Adobe <TT>ColorModel</TT> names:</P>
-
-<UL>
-
- <LI><TT>Gray</TT> - Grayscale output.
-
- <LI><TT>RGB</TT> - Color output, typically using the RGB
- colorspace, but without a separate black channel.
-
- <LI><TT>CMYK</TT> - Color output with a separate black
- channel.
-
-</UL>
-
-<P>Custom names can be used, however it is recommended that you use your vendor
-prefix for any custom names, for example "fooName".</P>
-
-<P>The colorspace name can be any of the following universally supported
-colorspaces:</P>
-
-<UL>
- <LI><TT>w</TT> - Luminance</LI>
-
- <LI><TT>rgb</TT> - Red, green, blue</LI>
-
- <LI><TT>k</TT> - Black</LI>
-
- <LI><TT>cmy</TT> - Cyan, magenta, yellow</LI>
-
- <LI><TT>cmyk</TT> - Cyan, magenta, yellow, black</LI>
-
-</UL>
-
-<P>The color organization can be any of the following values:</P>
-
-<UL>
-
- <LI><TT>chunky</TT> - Color values are passed together on a line
- as RGB RGB RGB RGB</LI>
-
- <LI><TT>banded</TT> - Color values are passed separately
- on a line as RRRR GGGG BBBB; not supported by the Apple
- RIP filters</LI>
-
- <LI><TT>planar</TT> - Color values are passed separately
- on a page as RRRR RRRR RRRR ... GGGG GGGG GGGG ... BBBB
- BBBB BBBB; not supported by the Apple RIP filters</LI>
-
-</UL>
-
-<P>The compression mode value is passed to the driver in the
-<TT>cupsCompression</TT> attribute. It is traditionally used to select an
-appropriate compression mode for the color model but can be used for any
-purpose, such as specifying a photo mode vs. standard mode.</P>
-
-<p class='example'><a name="LISTING3">Listing 3: "examples/color.drv"</a></p>
-
-<pre class='example'>
-
-<I>// Include standard font and media definitions</I>
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-
-<I>// List the fonts that are supported, in this case all standard fonts...</I>
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-
-<I>// Manufacturer and version</I>
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "Foo"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-
-<I>// Each filter provided by the driver...</I>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 rastertofoo
-
-<I>// Supported page sizes</I>
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-
-{
- <I>// Supported resolutions</I>
- *<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "600dpi/600 DPI"
-
- <I>// Specify the model name and filename...</I>
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojet2k.ppd"
-}
-
-{
- <I>// Supports color printing</I>
- <a href='ref-ppdcfile.html#ColorDevice'>ColorDevice</a> true
-
- <I>// Supported colorspaces</I>
- <a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> Gray/Grayscale w chunky 0
- *<a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> RGB/Color rgb chunky 0
-
- <I>// Supported resolutions</I>
- *<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 8 0 0 0 "300dpi/300 DPI"
- <a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 8 0 0 0 "600dpi/600 DPI"
-
- <I>// Specify the model name and filename...</I>
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet Color"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojetco.ppd"
-}
-</pre>
-
-
-<h3><a name='OPTIONS'>Defining Custom Options and Option Groups</a></h3>
-
-<P>The <TT>Group</TT>, <TT>Option</TT>, and <TT>Choice</TT>
-directives are used to define or select a group, option, or
-choice. <A HREF="#LISTING4">Listing 4</A> shows a variation of
-the first example that provides two custom options in a group
-named "Footasm".</P>
-
-<p class='example'><a name="LISTING4">Listing 4: "examples/custom.drv"</a></p>
-
-<pre class='example'>
-
-<I>// Include standard font and media definitions</I>
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-
-<I>// List the fonts that are supported, in this case all standard fonts...</I>
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-
-<I>// Manufacturer, model name, and version</I>
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "Foo"
-<a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-
-<I>// Each filter provided by the driver...</I>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 rastertofoo
-
-<I>// Supported page sizes</I>
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-
-<I>// Supported resolutions</I>
-*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "600dpi/600 DPI"
-
-<I>// Option Group</I>
-<a href='ref-ppdcfile.html#Group'>Group</a> "Footasm"
-
- <I>// Boolean option</I>
- <a href='ref-ppdcfile.html#Option'>Option</a> "fooEnhance/Resolution Enhancement" Boolean AnySetup 10
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> True/Yes "<</cupsCompression 1>>setpagedevice"
- <a href='ref-ppdcfile.html#Choice'>Choice</a> False/No "<</cupsCompression 0>>setpagedevice"
-
- <I>// Multiple choice option</I>
- <a href='ref-ppdcfile.html#Option'>Option</a> "fooOutputType/Output Quality" PickOne AnySetup 10
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> "Auto/Automatic Selection"
- "<</OutputType(Auto)>>setpagedevice""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "Text/Optimize for Text"
- "<</OutputType(Text)>>setpagedevice""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "Graph/Optimize for Graphics"
- "<</OutputType(Graph)>>setpagedevice""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "Photo/Optimize for Photos"
- "<</OutputType(Photo)>>setpagedevice""
-
-<I>// Specify the name of the PPD file we want to generate...</I>
-<a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojet2k.ppd"
-</pre>
-
-<P>The custom group is introduced by the <TT>Group</TT>
-directive which is followed by the name and optionally text for
-the user:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Group'>Group</a> "Footasm/Footastic Options"
-</pre>
-
-<P>The group name must conform to the PPD specification and
-cannot exceed 40 characters in length. If you specify user text,
-it cannot exceed 80 characters in length. The groups
-<TT>General</TT>, <TT>Extra</TT>, and
-<TT>InstallableOptions</TT> are predefined by CUPS; the general
-and extra groups are filled by the UI options defined by the PPD
-specification. The <TT>InstallableOptions</TT> group is reserved
-for options that define whether accessories for the printer
-(duplexer unit, finisher, stapler, etc.) are installed.</P>
-
-<P>Once the group is specified, the <TT>Option</TT> directive is
-used to introduce a new option:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Option'>Option</a> "fooEnhance/Resolution Enhancement" Boolean AnySetup 10
-</pre>
-
-<P>The directive is followed by the name of the option and any
-optional user text, the option type, the PostScript document group, and
-the sort order number. The option name must conform to the PPD specification
-and cannot exceed 40 characters in length. If you specify user text, it
-cannot exceed 80 characters in length.</P>
-
-<P>The option type can be <TT>Boolean</TT> for true/false
-selections, <TT>PickOne</TT> for picking one of many choices, or
-<TT>PickMany</TT> for picking zero or more choices. Boolean
-options can have at most two choices with the names
-<TT>False</TT> and <TT>True</TT>. Pick options can have any
-number of choices, although for Windows compatibility reasons
-the number of choices should not exceed 255.</P>
-
-<P>The PostScript document group is typically <TT>AnySetup</TT>,
-meaning that the option can be introduced at any point in the
-PostScript document. Other values include <TT>PageSetup</TT> to
-include the option before each page and <TT>DocumentSetup</TT>
-to include the option once at the beginning of the document.</P>
-
-<P>The sort order number is used to sort the printer commands
-associated with each option choice within the PostScript
-document. This allows you to setup certain options before others
-as required by the printer. For most CUPS raster printer
-drivers, the value <TT>10</TT> can be used for all options.</P>
-
-<P>Once the option is specified, each option choice can be
-listed using the <TT>Choice</TT> directive:</P>
-
-<pre class='example'>
-*<a href='ref-ppdcfile.html#Choice'>Choice</a> True/Yes "<</cupsCompression 1>>setpagedevice"
-<a href='ref-ppdcfile.html#Choice'>Choice</a> False/No "<</cupsCompression 0>>setpagedevice"
-</pre>
-
-<P>The directive is followed by the choice name and optionally
-user text, and the PostScript commands that should be inserted
-when printing a file to this printer. The option name must
-conform to the PPD specification and cannot exceed 40 characters
-in length. If you specify user text, it cannot exceed 80
-characters in length.</P>
-
-<P>The PostScript commands are also interpreted by any RIP
-filters, so these commands typically must be present for all
-option choices. Most commands take the form:</P>
-
-<pre class='example'>
-<</name value>>setpagedevice
-</pre>
-
-<P>where <TT>name</TT> is the name of the PostScript page device
-attribute and <TT>value</TT> is the numeric or string value for
-that attribute.</P>
-
-
-<h3><a name='DEFINE'>Defining Constants</a></h3>
-
-<P>Sometimes you will want to define constants for your drivers
-so that you can share values in different groups within the same
-driver information file, or to share values between different
-driver information files using the <TT>#include</TT> directive.
-The <TT>#define</TT> directive is used to define constants for
-use in your printer definitions:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#_define'>#define</a> NAME value
-</pre>
-
-<P>The <TT>NAME</TT> is any sequence of letters, numbers, and
-the underscore. The <TT>value</TT> is a number or string; if the
-value contains spaces you must put double quotes around it, for
-example:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#_define'>#define</a> FOO "My String Value"
-</pre>
-
-<P>Constants can also be defined on the command-line using the <tt>-D</tt>
-option:</P>
-
-<pre class='command'>
-ppdc -DNAME="value" filename.drv
-</pre>
-
-<P>Once defined, you use the notation <TT>$NAME</TT> to substitute the value of
-the constant in the file, for example:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#_define'>#define</a> MANUFACTURER "Foo"
-<a href='ref-ppdcfile.html#_define'>#define</a> FOO_600 0
-<a href='ref-ppdcfile.html#_define'>#define</a> FOO_1200 1
-
-{
- <a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "$MANUFACTURER"
- <a href='ref-ppdcfile.html#ModelNumber'>ModelNumber</a> $FOO_600
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
- ...
-}
-
-{
- <a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "$MANUFACTURER"
- <a href='ref-ppdcfile.html#ModelNumber'>ModelNumber</a> $FOO_1200
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2001"
- ...
-}
-</pre>
-
-<P>Numeric constants can be bitwise OR'd together by placing the constants
-inside parenthesis, for example:</P>
-
-<pre class='example'>
-<I>// ModelNumber capability bits</I>
-<a href='ref-ppdcfile.html#_define'>#define</a> DUPLEX 1
-<a href='ref-ppdcfile.html#_define'>#define</a> COLOR 2
-
-...
-
-{
- <I>// Define a model number specifying the capabilities of the printer...</I>
- <a href='ref-ppdcfile.html#ModelNumber'>ModelNumber</a> ($DUPLEX $COLOR)
- ...
-}
-</pre>
-
-
-<h3><a name='CONDITIONAL'>Conditional Statements</a></h3>
-
-<p>The PPD compiler supports conditional compilation using the <tt>#if</tt>,
-<tt>#elif</tt>, <tt>#else</tt>, and <tt>#endif</tt> directives. The <tt>#if</tt>
-and <tt>#elif</tt> directives are followed by a constant name or an expression.
-For example, to include a group of options when "ADVANCED" is defined:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#_if'>#if</a> ADVANCED
-<a href='ref-ppdcfile.html#Group'>Group</a> "Advanced/Advanced Options"
- <a href='ref-ppdcfile.html#Option'>Option</a> "fooCyanAdjust/Cyan Adjustment"
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus10/+10%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus5/+5%" ""
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> "none/No Adjustment" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus5/-5%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus10/-10%" ""
- <a href='ref-ppdcfile.html#Option'>Option</a> "fooMagentaAdjust/Magenta Adjustment"
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus10/+10%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus5/+5%" ""
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> "none/No Adjustment" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus5/-5%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus10/-10%" ""
- <a href='ref-ppdcfile.html#Option'>Option</a> "fooYellowAdjust/Yellow Adjustment"
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus10/+10%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus5/+5%" ""
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> "none/No Adjustment" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus5/-5%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus10/-10%" ""
- <a href='ref-ppdcfile.html#Option'>Option</a> "fooBlackAdjust/Black Adjustment"
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus10/+10%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "plus5/+5%" ""
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> "none/No Adjustment" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus5/-5%" ""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "minus10/-10%" ""
-<a href='ref-ppdcfile.html#_endif'>#endif</a>
-</pre>
-
-
-<h3><a name='CONSTRAINTS'>Defining Constraints</a></h3>
-
-<P>Constraints are strings that are used to specify that one or more option
-choices are incompatible, for example two-sided printing on transparency media.
-Constraints are also used to prevent the use of uninstalled features such as the
-duplexer unit, additional media trays, and so forth.</P>
-
-<P>The <TT>UIConstraints</TT> directive is used to specify a constraint that is
-placed in the PPD file. The directive is followed by a string using one of the
-following formats:</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*Option1 *Option2"
-<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*Option1 Choice1 *Option2"
-<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*Option1 *Option2 Choice2"
-<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*Option1 Choice1 *Option2 Choice2"
-</pre>
-
-<P>Each option name is preceded by the asterisk (<TT>*</TT>). If no choice is
-given for an option, then all choices <I>except</I> <TT>False</TT> and
-<TT>None</TT> will conflict with the other option and choice(s). Since the PPD
-compiler automatically adds reciprocal constraints (option A conflicts with
-option B, so therefore option B conflicts with option A), you need only specify
-the constraint once.</P>
-
-<p class='example'><a name="LISTING5">Listing 5: "examples/constraint.drv"</a></p>
-
-<pre class='example'>
-
-<I>// Include standard font and media definitions</I>
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-
-<I>// List the fonts that are supported, in this case all standard fonts...</I>
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-
-<I>// Manufacturer, model name, and version</I>
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "Foo"
-<a href='ref-ppdcfile.html#ModelName'>ModelName</a> "FooJet 2000"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-
-<I>// Each filter provided by the driver...</I>
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 rastertofoo
-
-<I>// Supported page sizes</I>
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-
-<I>// Supported resolutions</I>
-*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> k 8 0 0 0 "600dpi/600 DPI"
-
-<I>// Installable Option Group</I>
-<a href='ref-ppdcfile.html#Group'>Group</a> "InstallableOptions/Options Installed"
-
- <I>// Duplexing unit option</I>
- <a href='ref-ppdcfile.html#Option'>Option</a> "OptionDuplexer/Duplexing Unit" Boolean AnySetup 10
- <a href='ref-ppdcfile.html#Choice'>Choice</a> True/Installed ""
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> "False/Not Installed" ""
-
-<I>// General Option Group</I>
-<a href='ref-ppdcfile.html#Group'>Group</a> General
-
- <I>// Duplexing option</I>
- <a href='ref-ppdcfile.html#Option'>Option</a> "Duplex/Two-Sided Printing" PickOne AnySetup 10
- *<a href='ref-ppdcfile.html#Choice'>Choice</a> "None/No" "<</Duplex false>>setpagedevice""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "DuplexNoTumble/Long Edge Binding"
- "<</Duplex true/Tumble false>>setpagedevice""
- <a href='ref-ppdcfile.html#Choice'>Choice</a> "DuplexTumble/Short Edge Binding"
- "<</Duplex true/Tumble true>>setpagedevice""
-
-<I>// Only allow duplexing if the duplexer is installed</I>
-<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*Duplex *OptionDuplexer False"
-
-<I>// Specify the name of the PPD file we want to generate...</I>
-<a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "foojet2k.ppd"
-</pre>
-
-<P><A HREF="#LISTING5">Listing 5</A> shows a variation of the first example with
-an added <TT>Duplex</TT> option and installable option for the duplexer,
-<TT>OptionDuplex</TT>. A constraint is added at the end to specify that any
-choice of the <TT>Duplex</TT> option that is not <TT>None</TT> is incompatible
-with the "Duplexer Installed" option set to "Not Installed"
-(<TT>False</TT>):</P>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*Duplex *OptionDuplexer False"
-</pre>
-
-<h4>Enhanced Constraints</h4>
-
-<p>CUPS 1.4 supports constraints between 2 or more options using the
-<TT>Attribute</TT> directive. <TT>cupsUIConstraints</TT> attributes define
-the constraints, while <TT>cupsUIResolver</TT> attributes define option changes
-to resolve constraints. For example, we can specify the previous duplex
-constraint with a resolver that turns off duplexing with the following two
-lines:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsUIConstraints DuplexOff "*Duplex *OptionDuplexer False"
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsUIResolver DuplexOff "*Duplex None"
-</pre>
-
-<h2 class='title'><a name='LOCALIZATION'>Localization</a></h2>
-
-<p>The PPD compiler provides localization of PPD files in different languages
-through <i>message catalog</i> files in the GNU gettext or Apple .strings
-formats. Each user text string and several key PPD attribute values such as
-<tt>LanguageVersion</tt> and <tt>LanguageEncoding</tt> are looked up in the
-corresponding message catalog and the translated text is substituted in the
-generated PPD files. One message catalog file can be used by multiple driver
-information files, and each file contains a single language translation.</p>
-
-<h3><a name='PPDPO'>The ppdpo Utility</a></h3>
-
-<p>While CUPS includes localizations of all standard media sizes and options in
-several languages, your driver information files may provide their own media
-sizes and options that need to be localized. CUPS provides a utility program to
-aid in the localization of drivers called <a
-href='man-ppdpo.html'><tt>ppdpo(1)</tt></a>. The <tt>ppdpo</tt> program creates
-or updates a message catalog file based upon one or more driver information
-files. New messages are added with the word "TRANSLATE" added to the front of
-the translation string to make locating new strings for translation easier. The
-program accepts the message catalog filename and one or more driver information
-files.</p>
-
-<p>For example, run the following command to create a new German message catalog
-called <var>de.po</var> for all of the driver information files in the current
-directory:</p>
-
-<pre class='command'>
-ppdpo -o de.po *.drv
-</pre>
-
-<p>If the file <var>de.po</var> already exists, <tt>ppdpo</tt> will update the
-contents of the file with any new messages that need to be translated. To create
-an Apple .strings file instead, specify the output filename with a .strings
-extension, for example:</p>
-
-<pre class='command'>
-ppdpo -o de.strings *.drv
-</pre>
-
-<h3><a name='PPDC_CATALOG'>Using Message Catalogs with the PPD Compiler</a></h3>
-
-<p>Once you have created a message catalog, use the <a
-href='ref-ppdcfile.html#_po'><tt>#po</tt></a> directive to declare it in each
-driver information file. For example, to declare the German message catalog for
-a driver use:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#_po'>#po</a> de "de.po" // German
-</pre>
-
-<p>In fact, you can use the <tt>#po</tt> directive as many times as needed:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#_po'>#po</a> de "de.po" // German
-<a href='ref-ppdcfile.html#_po'>#po</a> es "es.po" // Spanish
-<a href='ref-ppdcfile.html#_po'>#po</a> fr "fr.po" // French
-<a href='ref-ppdcfile.html#_po'>#po</a> it "it.po" // Italian
-<a href='ref-ppdcfile.html#_po'>#po</a> ja "ja.po" // Japanese
-</pre>
-
-<p>The filename ("de.po", etc.) can be relative to the location of the driver
-information file or an absolute path. Once defined, the PPD compiler will
-automatically generate a globalized PPD for every language declared in your
-driver information file. To generate a single-language PPD file, simply use the
-<tt>-l</tt> option to list the corresponding locale, for example:</p>
-
-<pre class='command'>
-ppdc -l de -d ppd/de mydrivers.drv
-</pre>
-
-<p>to generate German PPD files.</p>
- </div>
- </body>
-</html>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<!-- SECTION: Programming -->
- <head>
- <title>Developing Raster Printer Drivers</title>
- <meta name="keywords" content="Programming">
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- <meta name="creator" content="codedoc v3.1">
- <meta name="author" content="Unknown">
- <meta name="copyright" content="Unknown">
- <meta name="version" content="0.0">
- <style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1 { font-size: 2em; }
-H2 { font-size: 1.75em; }
-H3 { font-size: 1.5em; }
-H4 { font-size: 1.25em; }
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-BLOCKQUOTE {
- border-left: solid 2px #777;
- margin: 1em 0;
- padding: 10px;
-}
-
-BLOCKQUOTE OL LI {
- margin-left: -1em;
-}
-
-PRE.command, PRE.example {
- background: #eee;
- margin: 0 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding: 5pt 10pt 0;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- font-size: 250%;
- font-weight: bold;
- margin: 0;
-}
-div.body h2 {
- font-size: 250%;
- margin-top: 1.5em;
-}
-div.body h3 {
- font-size: 150%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h4 {
- font-size: 110%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h5 {
- font-size: 100%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-.class {
- border-bottom: solid 2px gray;
-}
-.constants {
-}
-.description {
- margin-top: 0.5em;
-}
-.discussion {
-}
-.enumeration {
- border-bottom: solid 2px gray;
-}
-.function {
- border-bottom: solid 2px gray;
- margin-bottom: 0;
-}
-.members {
-}
-.method {
-}
-.parameters {
-}
-.returnvalue {
-}
-.struct {
- border-bottom: solid 2px gray;
-}
-.typedef {
- border-bottom: solid 2px gray;
-}
-.union {
- border-bottom: solid 2px gray;
-}
-.variable {
-}
-h1, h2, h3, h4, h5, h6 {
- page-break-inside: avoid;
-}
-blockquote {
- border: solid thin gray;
- box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
- padding: 10px 10px 0px;
- page-break-inside: avoid;
-}
-p code, li code, p.code, pre, ul.code li {
- background: rgba(127,127,127,0.1);
- border: thin dotted gray;
- font-family: monospace;
- hyphens: manual;
- -webkit-hyphens: manual;
- page-break-inside: avoid;
-}
-p.code, pre, ul.code li {
- padding: 10px;
-}
-p code, li code {
- padding: 2px 5px;
-}
-a:link, a:visited {
- text-decoration: none;
-}
-span.info {
- background: black;
- border: solid thin black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-h2 span.info, h3 span.info, h4 span.info {
- border-radius: 10px;
- float: right;
- font-size: 80%;
- padding: 3px 6px;
-}
-h2.title span.info, h3.title span.info, h4.title span.info {
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
-}
-h2.title span.info {
- padding: 4px 6px;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-table.list {
- border-collapse: collapse;
- width: 100%;
-}
-table.list tr:nth-child(even) {
- background: rgba(127,127,127,0.1);]n}
-table.list th {
- border-right: 2px solid gray;
- font-family: monospace;
- padding: 5px 10px 5px 2px;
- text-align: right;
- vertical-align: top;
-}
-table.list td {
- padding: 5px 2px 5px 10px;
- text-align: left;
- vertical-align: top;
-}
-h1.title {
-}
-h2.title {
- border-bottom: solid 2px black;
-}
-h3.title {
- border-bottom: solid 2px black;
-}
---></style>
- </head>
- <body>
-<!--
- Raster printer driver documentation for CUPS.
-
- Copyright © 2007-2018 by Apple Inc.
- Copyright © 1997-2007 by Easy Software Products.
-
- Licensed under Apache License v2.0. See the file "LICENSE" for more
- information.
--->
-
-<h1 class='title'>Developing Raster Printer Drivers</h1>
-
-<p>This document describes how to develop printer drivers for raster printers. Topics include: <a href='#BASICS'>printer driver basics</a>, <a href='#CREATE'>creating new PPD files</a>, <a href='#FILTERS'>using filters</a>, <a href='#COLOR'>implementing color management</a>, and <a href='#MACOSX'>adding macOS features</a>.</p>
-
-<div class='summary'><table summary='General Information'>
-<tbody>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='postscript-driver.html'>Developing PostScript Printer Drivers</a><br>
- Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
- Programming: <a href='ppd-compiler.html'>Introduction to the PPD Compiler</a><br>
- Programming: <a href='api-raster.html'>Raster API</a><br>
- References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a><br>
- Specifications: <a href='spec-ppd.html'>CUPS PPD Extensions</a></td>
-</tr>
-</tbody>
-</table></div>
- <div class="contents">
- <h2 class="title">Contents</h2>
- <ul class="contents">
- <li><a href="#BASICS">Printer Driver Basics</a></li>
- <li><a href="#CREATING">Creating New PPD Files</a></li>
- <li><a href="#FILTERS">Using Filters</a></li>
- <li><a href="#COLOR">Implementing Color Management</a></li>
- <li><a href="#MACOSX">Adding macOS Features</a></li>
- </ul>
- </div>
- <div class="body">
-<h2 class='title'><a name='BASICS'>Printer Driver Basics</a></h2>
-
-<p>A CUPS raster printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, one or more <em>filter</em> programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.</p>
-
-<p>Every time a user prints something the scheduler program, <a href='man-cupsd.html'>cupsd(8)</a>, determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into CUPS raster data. <a href='#FIGURE_1'>Figure 1</a> shows the data flow of a typical print job.</p>
-
-<div class='figure'><table summary='Raster Filter Chain'>
-<caption>Figure 1: <a name='FIGURE_1'>Raster Filter Chain</a></caption>
-<tr><td><img src='../images/cups-raster-chain.png' width='700' height='150' alt='Raster Filter Chain'></td></tr>
-</table></div>
-
-<p>The raster filter converts CUPS raster data into a format the printer understands, for example HP-PCL. CUPS includes several sample raster filters supporting standard page description languages (PDLs). <a href='#TABLE_1'>Table 1</a> shows the raster filters that are bundled with CUPS and the languages they support.</p>
-
-<div class='table'><table summary='Standard CUPS Raster Filters'>
-<caption>Table 1: <a name='TABLE_1'>Standard CUPS Raster Filters</a></caption>
-<thead>
-<tr><th>Filter</th><th>PDLs</th><th>ppdc DriverType</th><th>ppdc #include file</th></tr>
-</thead>
-<tbody>
-<tr><td>rastertoepson</td><td>ESC/P, ESC/P2</td><td>epson</td><td>epson.h</td></tr>
-<tr><td>rastertoescpx</td><td>ESC/P, ESC/P2, EPSON Remote Mode</td><td>escp</td><td>escp.h</td></tr>
-<tr><td>rastertohp</td><td>HP-PCL3, HP-PCL5</td><td>hp</td><td>hp.h</td></tr>
-<tr><td>rastertolabel</td><td>CPCL, Dymo, EPL1, EPL2, Intellitech PCL, ZPL</td><td>label</td><td>label.h</td></tr>
-<tr><td>rastertopclx</td><td>HP-RTL, HP-PCL3, HP-PCL3GUI, HP-PCL5, HP-PCL5c, HP-PCL5e</td><td>pcl</td><td>pcl.h</td></tr>
-</tbody>
-</table></div>
-
-<p>The optional port monitor handles interface-specific protocol or encoding issues. For example, some raster printers use the 1284.4 communications protocol.</p>
-
-<p>The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.</p>
-
-<p>The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. <a href='#FIGURE_2'>Figure 2</a> shows the data flow of a typical command job.</p>
-
-<div class='figure'><table summary='Command Filter Chain'>
-<caption>Figure 2: <a name='FIGURE_2'>Command Filter Chain</a></caption>
-<tr><td><img src='../images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
-</table></div>
-
-<p>Raster printer drivers must provide their own command filter.</p>
-
-
-<h2 class='title'><a name='CREATING'>Creating New PPD Files</a></h2>
-
-<p>We recommend using the CUPS PPD compiler, <a href='man-ppdc.html'>ppdc(1)</a>, to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "<a href='ppd-compiler.html'>Introduction to the PPD Compiler</a>" document. <a href='#LISTING_1'>Listing 1</a> shows a driver information file for several similar black-and-white HP-PCL5 laser printers.</p>
-
-<p class='example'>Listing 1: <a name='LISTING_1'>"examples/laserjet-basic.drv"</a></p>
-
-<pre class='example'>
-<I>// Include standard font and media definitions</I>
-<a href='ref-ppdcfile.html#_include'>#include</a> <font.defs>
-<a href='ref-ppdcfile.html#_include'>#include</a> <media.defs>
-
-<I>// Include HP-PCL driver definitions</I>
-<a href='ref-ppdcfile.html#_include'>#include</a> <pcl.h>
-
-<I>// Specify that this driver uses the HP-PCL driver...</I>
-<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
-
-<I>// Specify the driver options via the model number...</I>
-<a href='ref-ppdcfile.html#ModelNumber'>ModelNumber</a> ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION)
-
-<I>// List the fonts that are supported, in this case all standard fonts...</I>
-<a href='ref-ppdcfile.html#Font'>Font</a> *
-
-<I>// Manufacturer and driver version</I>
-<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "HP"
-<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
-
-<I>// Supported page sizes and their margins</I>
-<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12 18 12
-*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Legal
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Executive
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Monarch
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Statement
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> FanFoldGermanLegal
-
-<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12.72 18 12.72
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Env10
-
-<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 9.72 12 9.72 12
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A5
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> B5
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvC5
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvDL
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvISOB5
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Postcard
-<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> DoublePostcard
-
-<I>// Only black-and-white output with mode 3 compression...</I>
-<a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> Gray k chunky 3
-
-<I>// Supported resolutions</I>
-<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 1 0 0 0 "300dpi/300 DPI"
-*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 8 0 0 0 "600dpi/600 DPI"
-
-<I>// Supported input slots</I>
-*<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 7 "Auto/Automatic Selection"
-<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 2 "Manual/Tray 1 - Manual Feed"
-<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 4 "Upper/Tray 1"
-<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 1 "Lower/Tray 2"
-<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 5 "LargeCapacity/Tray 3"
-
-<I>// Tray 3 is an option...</I>
-<a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionLargeCapacity/Tray 3 Installed"
-<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionLargeCapacity False *InputSlot LargeCapacity"
-
-{
- <I>// HP LaserJet 2100 Series</I>
- <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 10
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2100 Series"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt211.ppd"
-}
-
-{
- <I>// LaserJet 2200 and 2300 series have duplexer option...</I>
- <a href='ref-ppdcfile.html#Duplex'>Duplex</a> normal
- <a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionDuplex/Duplexer Installed"
- <a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionDuplex False *Duplex"
-
- {
- <I>// HP LaserJet 2200 Series</I>
- <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 19
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2200 Series"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt221.ppd"
- }
-
- {
- <I>// HP LaserJet 2300 Series</I>
- <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 25
- <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2300 Series"
- <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt231.ppd"
- }
-}
-</pre>
-
-
-<h2 class='title'><a name='FILTERS'>Using Filters</a></h2>
-
-<p>The standard CUPS raster filters can be specified using the
-<a href='ref-ppdcfile.html#DriverType'><tt>DriverType</tt></a> directive, for example:</p>
-
-<pre class='example'>
-<I>// Specify that this driver uses the HP-PCL driver...</I>
-<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
-</pre>
-
-<p><a href='#TABLE_1'>Table 1</a> shows the driver types for each of the standard CUPS raster filters. For drivers that do not use the standard raster filters, the "custom" type is used with <a href='ref-ppdcfile.html#Filter'><tt>Filter</tt></a> directives:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#DriverType'>DriverType</a> custom
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 /path/to/raster/filter
-<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-command 100 /path/to/command/filter
-</pre>
-
-
-<h2 class='title'><a name='COLOR'>Implementing Color Management</a></h2>
-
-<p>CUPS uses ICC color profiles to provide more accurate color reproduction. The <a href='spec-ppd.html#cupsICCProfile'><tt>cupsICCProfile</tt></a> attribute defines the color profiles that are available for a given printer, for example:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "ColorModel.MediaType.Resolution/Description" /path/to/ICC/profile
-</pre>
-
-<p>where "ColorModel.MediaType.Resolution" defines a selector based on the corresponding option selections. A simple driver might only define profiles for the color models that are supported, for example a printer supporting Gray and RGB might use:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "Gray../Grayscale Profile" /path/to/ICC/gray-profile
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> cupsICCProfile "RGB../Full Color Profile" /path/to/ICC/rgb-profile
-</pre>
-
-<p>The options used for profile selection can be customized using the <tt>cupsICCQualifier2</tt> and <tt>cupsICCQualifier3</tt> attributes.</p>
-
-<h3><span class='info'>Since macOS 10.5</span>Custom Color Matching Support</h3>
-
-<p>macOS printer drivers that are based on an existing standard RGB colorspace can tell the system to use the corresponding colorspace instead of an arbitrary ICC color profile when doing color management. The <a href='#APCustom'><tt>APSupportsCustomColorMatching</tt></a> and <tt>APDefaultCustomColorMatchingProfile</tt> attributes can be used to enable this mode:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APSupportsCustomColorMatching "" true
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APDefaultCustomColorMatchingProfile "" sRGB
-</pre>
-
-
-<h2 class='title'><a name='MACOSX'>Adding macOS Features</a></h2>
-
-<p>macOS printer drivers can provide <a href='spec-ppd.html#MACOSX'>additional attributes</a> to specify additional option panes in the print dialog, an image of the printer, a help book, and option presets for the driver software:</p>
-
-<pre class='example'>
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APDialogExtension "" /Library/Printers/Vendor/filename.plugin
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APHelpBook "" /Library/Printers/Vendor/filename.bundle
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
-<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterPreset "name/text" "*option choice ..."
-</pre>
- </div>
- </body>
-</html>
+++ /dev/null
-<HTML>
-<!-- SECTION: References -->
-<HEAD>
- <TITLE>PPD Compiler Driver Information File Reference</TITLE>
- <LINK REL="STYLESHEET" TYPE="text/css" HREF="../cups-printable.css">
-</HEAD>
-<BODY>
-
-<H1 CLASS="title">PPD Compiler Driver Information File Reference</H1>
-
-<p>The CUPS PPD compiler reads meta files that contain descriptions
-of one or more PPD files to be generated by
-<a href="man-ppdc.html">ppdc(1)</a> or the corresponding driver interface
-program <a href="man-drv.html">drv(1)</a>. The source file format is plain
-ASCII text that can be edited using your favorite text editor.</p>
-
-<p>Directives may be placed anywhere on a line and are followed by
-zero or more values.</p>
-
-<p>Comments are supported using the C (/* ... */) and C++ (// ...) comment
-mechanisms.</p>
-
-<p>Directives that accept expressions look for sequences of the form:</p>
-
-<dl>
-
- <dt>NAME</dt>
- <dd>Evaluates to 1 if NAME is defined, otherwise 0.</dd>
-
- <dt>number</dt>
-
- <dd>Evaluates to the specified integer; the number can be preceded by
- a leading sign (+/-) followed by a decimal number (1234), octal number
- (01234), or hexadecimal number (0x1234) using the same rules as C and
- C++.</dd>
-
- <dt>(NAME NAME ... number number ...)</dt>
- <dd>Evaluates to the bitwise OR of each named #define constant or
- number.</dd>
-
- <dt>(NAME == OTHERNAME)</dt>
- <dt>(NAME == number)</dt>
- <dd>Evaluates to 1 if NAME is equal to the other named constant or
- number, otherwise 0.</dd>
-
- <dt>(NAME != OTHERNAME)</dt>
- <dt>(NAME != number)</dt>
- <dd>Evaluates to 1 if NAME is not equal to the other named constant or
- number, otherwise 0.</dd>
-
- <dt>(NAME < OTHERNAME)</dt>
- <dt>(NAME < number)</dt>
- <dd>Evaluates to 1 if NAME is less than to the other named constant or
- number, otherwise 0.</dd>
-
- <dt>(NAME <= OTHERNAME)</dt>
- <dt>(NAME <= number)</dt>
- <dd>Evaluates to 1 if NAME is less than or equal to the other named
- constant or number, otherwise 0.</dd>
-
- <dt>(NAME > OTHERNAME)</dt>
- <dt>(NAME > number)</dt>
- <dd>Evaluates to 1 if NAME is greater than to the other named constant
- or number, otherwise 0.</dd>
-
- <dt>(NAME >= OTHERNAME)</dt>
- <dt>(NAME >= number)</dt>
- <dd>Evaluates to 1 if NAME is greater than or equal to the other named
- constant or number, otherwise 0.</dd>
-
-</dl>
-
-<p>Printer driver information can be grouped and shared using
-curly braces ({ ... }); PPD files are written when a close
-brace or end-of-file is seen and a <a href="#PCFileName">PCFileName</a>
-directive has been defined.</p>
-
-
-<h2 class="title"><a name='_define'>#define</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#define <i>name expression</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#define FOO 100
-#define BAR "Bar, Inc."
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#define</code> directive assigns a value to a name
-which can be later referenced using <code>$name</code>. The name is
-case-insensitive and can be any sequence of letters, numbers,
-and the underscore. The value can be any valid expression.</p>
-
-<h3>Predefined Names</h3>
-
-<p>The following <code>#define</code> names are set by the PPD compiler:</p>
-
-<ul>
-
- <li><code>CUPS_VERSION</code> - The full CUPS version string, e.g.
- "1.4.0"</li>
-
- <li><code>CUPS_VERSION_MAJOR</code> - The major version number, e.g.
- "1"</li>
-
- <li><code>CUPS_VERSION_MINOR</code> - The minor version number, e.g.
- "4"</li>
-
- <li><code>CUPS_VERSION_PATCH</code> - The patch version number, e.g.
- "0"</li>
-
- <li><code>PLATFORM_NAME</code> - The operating system name used by the
- current system as reported by "uname" ("Windows" on Microsoft
- Windows)</li>
-
- <li><code>PLATFORM_ARCH</code> - The processor architecture used by the
- current system as reported by "uname -m" ("X86" or "X64" on Microsoft
- Windows)</li>
-
-</ul>
-
-<h3>See Also</h3>
-
-<p><a href='#_include'><code>#include</code></a></p>
-
-
-<h2 class="title"><a name='_elif'>#elif</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#elif <i>expression</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#if HAVE_FOO
-...
-#elif (HAVE_BAR >= 999)
-...
-#else
-...
-#endif
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#elif</code> directive allows portions of a driver information file
-to be used conditionally. <code>#elif</code> directives must appear after a
-corresponding <a href="#_if"><code>#if</code></a> directive.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_else'><code>#else</code></a>,
-<a href='#_endif'><code>#endif</code></a>,
-<a href='#_if'><code>#if</code></a></p>
-
-
-<h2 class="title"><a name='_else'>#else</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#else
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#if HAVE_FOO
-...
-#elif (HAVE_BAR >= 999)
-...
-#else
-...
-#endif
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#else</code> directive allows portions of a driver information file
-to be used conditionally when the corresponding
-<a href="#_if"><code>#if</code></a> and <a href="#_elif"><code>#elif</code></a>
-expressions are non-zero.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_elif'><code>#elif</code></a>,
-<a href='#_endif'><code>#endif</code></a>,
-<a href='#_if'><code>#if</code></a></p>
-
-
-<h2 class="title"><a name='_endif'>#endif</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#endif
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#if HAVE_FOO
-...
-#elif (HAVE_BAR >= 999)
-...
-#else
-...
-#endif
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#endif</code> directive ends a conditional block of a driver
-information file. It must appear after all of the
-<a href="#_if"><code>#if</code></a>, <a href="#_elif"><code>#elif</code></a>,
-and <a href="#_else"><code>#else</code></a> directives for the current
-conditional block.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_elif'><code>#elif</code></a>,
-<a href='#_else'><code>#else</code></a>,
-<a href='#_if'><code>#if</code></a></p>
-
-
-<h2 class="title"><a name='_font'>#font</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#font <i>name encoding "version" charset status</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#font Courier Standard "(1.05)" Standard ROM
-#font Symbol Special "(001.005)" Special ROM
-#font Barcode-Foo Special "(1.0)" Special Disk
-#font Unicode-Foo Expert "(2.0)" Adobe-Identity ROM
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#font</code> directive defines a "base font" for all
-printer drivers. The name is the PostScript font name.</p>
-
-<p>The encoding is the default encoding of the font, usually
-<code>Standard</code>, <code>Expert</code>, or <code>Special</code>, as
-defined in the Adobe PPD file specification.</p>
-
-<p>The version is the PostScript string definition that
-corresponds to the font version number.</p>
-
-<p>The charset defines the available characters in the font,
-usually <code>Standard</code> or <code>Special</code>, as defined in the
-Adobe PPD file specification.</p>
-
-<p>The status is the installation status of the font and must be
-either the word <code>ROM</code> or <code>Disk</code>.
-
-<p>Base fonts differ from fonts defined using the <a
-href='#Font'><code>Font</code></a> directive in that they are not
-automatically associated with all drivers - you must use the
-special <code>Font *</code> directive to include them in a
-driver.</p>
-
-<p>Currently the <code>#font</code> directive is used mainly for
-defining the standard raster fonts in the
-<code><font.defs></code> include file.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_include'><code>#include</code></a>,
-<a href='#Font'><code>Font</code></a></p>
-
-
-<h2 class="title"><a name='_if'>#if</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#if <i>name or expression</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#if HAVE_FOO
-...
-#elif (HAVE_BAR >= 999)
-...
-#else
-...
-#endif
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#if</code> directive allows portions of a driver information file
-to be used conditionally. When followed by a name, the data that follows is
-used only when the name is defined, otherwise the data is ignored.
-<code>#if</code> directives can be nested up to 100 times.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_elif'><code>#elif</code></a>,
-<a href='#_else'><code>#else</code></a>,
-<a href='#_endif'><code>#endif</code></a></p>
-
-
-<h2 class="title"><a name='_include'>#include</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#include <<i>filename</i>>
-#include "<i>filename</i>"
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#include <font.defs>
-#include "myfile.h"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#include</code> directive reads the named driver
-information file. If the filename is included inside angle
-brackets (<code><filename></code>), then the PPD compiler will
-look for the file in all of the include directories it knows
-about. Otherwise, the file is opened in the current directory
-relative to the current driver information file, and if that
-fails then it looks in the include directories for the file.</p>
-
-<p>The <code>#include</code> directive can be nested to as many
-files as are allowed by the host operating system, typically at
-least 100 files.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_define'><code>#define</code></a>,
-<a href='#_font'><code>#font</code></a>,
-<a href='#_media'><code>#media</code></a></p>
-
-
-<h2 class="title"><a name='_media'>#media</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#media <i>name width length</i>
-#media <i>"name/text" width length</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#media "Letter/Letter - 8.5x11in" 8.5in 11in
-#media "A4/A4 - 210x297mm" 210mm 297mm
-#media "w936h1368/Super B/A3 - 13x19in" 936 1368
-#media Photo 4in 6in
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#media</code> directive defines a named media size for
-inclusion in a driver. The name with optional user text defines
-the name for the media size and is used with the <a
-href='#MediaSize'><code>MediaSize</code></a> directive to associate
-the media size with the driver. The name may contain up to 40 ASCII
-characters within the range of decimal 33 to decimal 126 inclusive,
-except for the characters comma (44), slash (47) and colon (58).
-The user text, if supplied, may not exceed 80 bytes in length.</p>
-
-<p>The width and length define the dimensions of the media. Each
-number is optionally followed by one of the following unit
-suffixes:</p>
-
-<ul>
-
- <li><code>cm</code> - centimeters</li>
-
- <li><code>ft</code> - feet</li>
-
- <li><code>in</code> - inches</li>
-
- <li><code>m</code> - meters</li>
-
- <li><code>mm</code> - millimeters</li>
-
- <li><code>pt</code> - points (72 points = 1 inch)</li>
-
-</ul>
-
-<p>Points are assumed if no units are specified.
-
-<h3>See Also</h3>
-
-<p><a href='#_include'><code>#include</code></a>,
-<a href='#CustomMedia'><code>CustomMedia</code></a>,
-<a href='#MediaSize'><code>MediaSize</code></a></p>
-
-
-<h2 class="title"><a name='_po'>#po</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-#po <i>locale filename</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-#po es "es.po"
-#po fr_CA "mydriver-fr_CA.po"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>#po</code> directive defines a message catalog to use for the
-given POSIX language abbreviation. Multiple <code>#po</code> directives can be
-specified to list multiple catalogs. The filename can be an absolute path or
-relative to the driver information file. GNU gettext and macOS .strings
-files are supported.</p>
-
-
-<h2 class="title"><a name='Attribute'>Attribute</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Attribute <i>name "" value</i>
-Attribute <i>name keyword value</i>
-Attribute <i>name "keyword/text" value</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Attribute cupsInkChannels "" 1
-Attribute cupsAllDither 600dpi "1.0"
-Attribute fooProfile "Photo/Photographic Profile" "photopro.icc"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Attribute</code> directive creates a PPD attribute. The
-name may contain up to 40 ASCII characters within the range of decimal
-33 to decimal 126 inclusive, except for the characters comma (44),
-slash (47) and colon (58).</p>
-
-<p>The selector can be the empty string (<code>""</code>) or text of up
-to 80 bytes.</p>
-
-<p>The value is any string or number; the string may contain multiple
-lines, however no one line may exceed 255 bytes.</p>
-
-<h3>See Also</h3>
-
-<p><a href="#LocAttribute"><code>LocAttribute</code></a></p>
-
-
-<h2 class="title"><a name='Choice'>Choice</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Choice <i>name "code"</i>
-Choice <i>"name/text" "code"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Choice None "<</MediaType (None)>>setpagedevice"
-Choice "False/No" "<</cupsCompression 0>>setpagedevice"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Choice</code> directive adds a single choice to the
-current option. The name may contain up to 40 ASCII characters within
-the range of decimal 33 to decimal 126 inclusive, except for the
-characters comma (44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes
-in length. If no text is provided, the name is used.</p>
-
-<p>The code is any string and may contain multiple lines,
-however no one line may exceed 255 bytes.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='ColorDevice'>ColorDevice</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-ColorDevice <i>boolean-value</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-ColorDevice no
-ColorDevice yes
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>ColorDevice</code> directive tells the application if
-the printer supports color. It is typically used in conjunction
-with the <a href='#ColorModel'><code>ColorModel</code></a> directive
-to provide color printing support.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#ColorModel'><code>ColorModel</code></a></p>
-
-
-<h2 class="title"><span class="info">Deprecated</span><a name='ColorModel'>ColorModel</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-ColorModel <i>name colorspace colororder compression</i>
-ColorModel <i>"name/text" colorspace colororder compression</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-ColorModel Gray/Grayscale w chunky 0
-ColorModel RGB/Color rgb chunky 0
-ColorModel CMYK cmyk chunky 0
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>ColorModel</code> directive is a convenience directive
-which creates a ColorModel option and choice for the current
-printer driver. The name may contain up to 40 ASCII characters within
-the range of decimal 33 to decimal 126 inclusive, except for the
-characters comma (44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<p>The colorspace argument is one of the standard colorspace
-keywords defined later in this appendix in the section titled,
-"<a href='#REF_COLOR_SPACE'>Colorspace Keywords</a>".</p>
-
-<P>The colororder argument is one of the standard color order
-keywords defined later in this appendix in the section titled,
-"<a href='#REF_COLOR_ORDER'>Color Order Keywords</a>".</p>
-
-<p>The compression argument is any number and is assigned to the
-<code>cupsCompression</code> attribute in the PostScript page device
-dictionary.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorDevice'><code>ColorDevice</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><span class="info">Deprecated</span><a name='ColorProfile'>ColorProfile</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-ColorProfile <i>resolution/mediatype gamma density matrix</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-ColorProfile -/- 1.7 1.0
- 1.0 0.0 0.0
- 0.0 1.0 0.0
- 0.0 0.0 1.0
-
-ColorProfile 360dpi/- 1.6 1.0
- 1.0 -0.05 -0.3
- -0.35 1.0 -0.15
- -0.095 -0.238 0.95
-
-ColorProfile 720dpi/Special 1.5 1.0
- 1.0 0.0 -0.38
- -0.4 1.0 0.0
- 0.0 -0.38 0.9
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>ColorProfile</code> directive defines a CMY
-transform-based color profile. The resolution and mediatype
-arguments specify the <code>Resolution</code> and <code>MediaType</code>
-choices which use the profile; the hyphen (<code>-</code>) is used to
-specify that any resolution or mediatype can be used with the
-profile.</p>
-
-<p>The gamma argument specifies the gamma correction to apply to
-the color values (P = p<sup>g</sup>) and is a real number
-greater than 0. Values larger than 1 cause a general lightening
-of the print while values smaller than 1 cause a general
-darkening of the print. A value of 1 disables gamma
-correction.</p>
-
-<p>The density argument specifies the linear density correction
-to apply to the color values (P = d * p<sup>g</sup>) and is a
-real number greater than 0 and less than or equal to 1. A value
-1 of disables density correction while lower values produce
-proportionately lighter output.</p>
-
-<p>The matrix argument specifies a 3x3 linear transformation
-matrix in row-major order. The matrix is applied only to the CMY
-component of a RGB to CMYK transformation and is not used when
-printing in grayscale or CMYK mode unless the printer only
-supports printing with 3 colors.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#SimpleColorProfile'><code>SimpleColorProfile</code></a></p>
-
-
-<h2 class="title"><a name='Copyright'>Copyright</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Copyright <i>"text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Copyright "Copyright 2008 by Foo Enterprises"
-
-Copyright
-"This software is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License as
-published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
-
-This software is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public
-License along with this software; if not, write to the Free
-Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-MA 02111 USA"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Copyright</code> directive adds text comments to the
-top of a PPD file, typically for use in copyright notices. The
-text argument can contain multiple lines of text, but no line
-may exceed 255 bytes.</p>
-
-
-<h2 class="title"><a name='CustomMedia'>CustomMedia</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-CustomMedia <i>name width length left bottom right top
- "size-code" "region-code"</i>
-
-CustomMedia <i>"name/text" width length left bottom right top
- "size-code" "region-code"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-CustomMedia Letter 8.5in 11in 0.25in 0.46in 0.25in 0.04in
- "<</PageSize[612 792]/ImagingBBox null/ManualFeed false>>
- setpagedevice"
- "<</PageSize[612 792]/ImagingBBox null/ManualFeed true>>
- setpagedevice"
-
-CustomMedia "A4/A4 - 210x297mm" 210mm 297mm 12 12 12 12
- "<</PageSize[595 842]/ImagingBBox null>>setpagedevice"
- "<</PageSize[595 842]/ImagingBBox null>>setpagedevice"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>CustomMedia</code> directive adds a custom media size to
-the driver. The name may contain up to 40 ASCII characters within the
-range of decimal 33 to decimal 126 inclusive, except for the characters
-comma (44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<p>The width and length arguments specify the dimensions of the
-media as defined for the <a href="#_media"><code>#media</code></a>
-directive.</p>
-
-<p>The left, bottom, right, and top arguments specify the
-printable margins of the media.</p>
-
-<p>The size-code and region-code arguments specify the
-PostScript commands to run for the <code>PageSize</code> and
-<code>PageRegion</code> options, respectively. The commands can
-contain multiple lines, however no line may be more than 255
-bytes in length.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_media'><code>#media</code></a>,
-<a href='#MediaSize'><code>MediaSize</code></a></p>
-
-
-<h2 class="title"><a name='Cutter'>Cutter</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Cutter <i>boolean-value</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Cutter yes
-Cutter no
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Cutter</code> directive specifies whether the printer
-has a built-in media cutter. When a cutter is present, the
-printer's PPD file will contain a <code>CutMedia</code> option that
-allows the user to control whether the media is cut at the end
-of the job.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><span class="info">Deprecated</span><a name='Darkness'>Darkness</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Darkness <i>temperature name</i>
-Darkness <i>temperature "name/text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Darkness 0 Light
-Darkness 2 "Normal/Standard"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Darkness</code> directive defines a choice for the
-<code>cupsDarkness</code> option which sets the
-<code>cupsCompression</code> attribute in the PostScript page device
-dictionary. It is used with the CUPS <VAR>rastertolabel</VAR>
-sample driver to control the print head temperature and
-therefore the darkness of the print.</p>
-
-<p>The temperature argument specifies a temperature value for
-the Dymo driver from 0 (lowest) to 3 (highest), with 2
-representing the normal setting.</p>
-
-<p>The name may contain up to 40 ASCII characters within the range of
-decimal 33 to decimal 126 inclusive, except for the characters comma
-(44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='DriverType'>DriverType</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-DriverType <i>type</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-DriverType custom
-DriverType escp
-DriverType pcl
-DriverType ps
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>DriverType</code> directive tells the PPD compiler
-which DDK filters to include in the PPD file. The following
-types are supported:</p>
-
-<ul>
-
- <li><code>custom</code> - Use only those filters that are
- defined in the driver information file</li>
-
- <li><code>epson</code> - Use the CUPS sample Epson driver filter
- <var>rastertoepson</var></li>
-
- <li><code>escp</code> - Use the ESC/P DDK driver filters
- <var>commandtoescpx</var> and
- <var>rastertoescpx</var></li>
-
- <li><code>hp</code> - Use the CUPS sample HP driver filter
- <var>rastertohp</var></li>
-
- <li><code>label</code> - Use the CUPS sample label driver filter <var>rastertolabel</var></li>
-
- <li><code>pcl</code> - Use the HP-PCL DDK driver filters
- <var>commandtopclx</var> and
- <var>rastertopclx</var></li>
-
- <li><code>ps</code> - Use no filters; this driver is for a
- standard PostScript device</li>
-
-</ul>
-
-<h3>See Also</h3>
-
-<p><a href='#Filter'><code>Filter</code></a>,
-<a href='#ModelNumber'><code>ModelNumber</code></a></p>
-
-
-<h2 class="title"><a name='Duplex'>Duplex</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Duplex <i>type</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Duplex none
-Duplex normal
-Duplex flip
-Duplex rotated
-Duplex manualtumble
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Duplex</code> directive determines whether double-sided printing
-is supported in the current driver. The type argument specifies the type
-of duplexing that is supported:</p>
-
-<ul>
-
- <li><code>none</code> - double-sided printing is not
- supported</li>
-
- <li><code>normal</code> - double-sided printing is
- supported</li>
-
- <li><code>flip</code> - double-sided printing is supported,
- but the back side image needs to be flipped vertically
- (used primarily with inkjet printers)</li>
-
- <li><code>rotated</code> - double-sided printing is supported,
- but the back side image needs to be rotated 180 degrees for
- DuplexNoTumble</li>
-
- <li><code>manualtumble</code> - double-sided printing is supported,
- but the back side image needs to be rotated 180 degrees for
- DuplexTumble</li>
-
-</ul>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='FileName'>FileName</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-FileName <i>"filename"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-FileName "Acme Laser Printer 2000"
-FileName "Acme Ink Waster 1000"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>FileName</code> attribute specifies the "long" name of the
-PPD file for the current driver.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Manufacturer'><code>Manufacturer</code></a>,
-<a href='#ModelName'><code>ModelName</code></a>,
-<a href="#PCFileName"><code>PCFileName</code></a>,
-<a href='#Version'><code>Version</code></a></p>
-
-
-<h2 class="title"><a name='Filter'>Filter</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Filter <i>mime-type cost program</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Filter application/vnd.cups-raster 50 rastertofoo
-Filter application/vnd.hp-HPGL 25 /usr/foo/filter/hpgltofoo
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Filter</code> directive adds a filter for the current
-driver. The mime-type argument is a valid MIME media type name
-as defined in a CUPS <var>mime.types</var> file.</p>
-
-<p>The cost argument specifies the relative cost of the filter.
-In general, use a number representing the average percentage of
-CPU time that is used when printing the specified MIME media
-type.</p>
-
-<p>The program argument specifies the program to run; if the
-program is not an absolute filename, then CUPS will look for the
-program in the CUPS filter directory.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#DriverType'><code>DriverType</code></a></p>
-
-
-<h2 class="title"><span class="info">Deprecated</span><a name='Finishing'>Finishing</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Finishing <i>name</i>
-Finishing <i>"name/text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Finishing None
-Finishing "Glossy/Photo Overcoat"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Finishing</code> directive adds a choice to the
-<code>cupsFinishing</code> option. The name may contain up to 40 ASCII
-characters within the range of decimal 33 to decimal 126 inclusive,
-except for the characters comma (44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<p>The name is stored in the <code>OutputType</code> attribute in the
-PostScript page device dictionary.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='Font'>Font</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Font <i>name encoding "version" charset status</i>
-Font *
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Font *
-Font Courier Standard "(1.05)" Standard ROM
-Font Symbol Special "(001.005)" Special ROM
-Font Barcode-Foo Special "(1.0)" Special Disk
-Font Unicode-Foo Expert "(2.0)" Adobe-Identity ROM
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Font</code> directive defines a "device font" for the
-current printer driver. The name is the PostScript font name.</p>
-
-<p>The encoding is the default encoding of the font, usually
-<code>Standard</code>, <code>Expert</code>, or <code>Special</code>, as
-defined in the Adobe PPD file specification.</p>
-
-<p>The version is the PostScript string definition that
-corresponds to the font version number.</p>
-
-<p>The charset defines the available characters in the font,
-usually <code>Standard</code> or <code>Special</code>, as defined in the
-Adobe PPD file specification.</p>
-
-<p>The status is the installation status of the font and must be
-either the word <code>ROM</code> or <code>Disk</code>.</p>
-
-<p>Device fonts differ from fonts defined using the <a
-href='#_font'><code>#font</code></a> directive in that they are
-automatically associated with the current driver. Fonts defined
-using <code>#font</code> may be imported into the current driver
-using the <code>Font *</code> form of this directive.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_font'><code>#font</code></a></p>
-
-
-<h2 class="title"><a name='Group'>Group</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Group <i>name</i>
-Group <i>"name/text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Group General
-Group "InstallableOptions/Options Installed"
-Group "Special/Vendor Options"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Group</code> directive specifies the group for new
-<code>Option</code> directives. The name may contain up to 40 ASCII
-characters within the range of decimal 33 to decimal 126 inclusive,
-except for the characters comma (44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 40 bytes in length.
-If no text is provided, the name is used.</p>
-
-<p>The names <code>General</code> and <code>InstallableOptions</code>
-are predefined for the standard Adobe UI keywords and for installable
-options, respectively.</p>
-
-<center><table width='80%' border='1' bgcolor='#cccccc' cellpadding='5' cellspacing='0'>
-<tr>
- <td align='justify'><b>Note:</b>
-
- <p>Because of certain API binary compatibility issues,
- CUPS limits the length of PPD group translation strings
- (text) to 40 bytes, while the PPD specification
- allows for up to 80 bytes.</p>
-
- </td>
-</tr>
-</table></center>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='HWMargins'>HWMargins</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-HWMargins <i>left bottom right top</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-HWMargins 18 36 18 36
-HWMargins 0.25in 0.5in 0.25in 0.5in
-HWMargins 0.6cm 1.2cm 0.6cm 1.2cm
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>HWMargins</code> directive specifies the current
-margins for <a href='#MediaSize'><code>MediaSize</code></a> that
-follow. The left, bottom, right, and top margin values specify
-the printable margins.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#MediaSize'><code>MediaSize</code></a></p>
-
-
-<h2 class="title"><a name='InputSlot'>InputSlot</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-InputSlot <i>position name</i>
-InputSlot <i>position "name/text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-InputSlot 0 Auto
-InputSlot 1 "Upper/Tray 1"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>InputSlot</code> directive adds a new choice to the
-<code>InputSlot</code> option. The position argument is a number
-from 0 to 2<sup>32</sup>-1 specifying the value that is placed
-in the <code>MediaPosition</code> attribute in the PostScript page
-device dictionary.</p>
-
-<p>The name may contain up to 40 ASCII characters within the range of
-decimal 33 to decimal 126 inclusive, except for the characters comma
-(44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='Installable'>Installable</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Installable <i>name</i>
-Installable <i>"name/text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Installable EnvTray
-Installable "Option1/Duplexer Installed"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Installable</code> directive adds a new boolean option
-to the <code>InstallableOptions</code> group with a default value of
-<code>False</code>. The name may contain up to 40 ASCII characters
-within the range of decimal 33 to decimal 126 inclusive, except for
-the characters comma (44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-
-<h2 class="title"><a name='LocAttribute'>LocAttribute</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-LocAttribute <i>name "keyword/text" value</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-LocAttribute fooProfile "Photo/Photographic Profile" "photopro.icc"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>LocAttribute</code> directive creates a localized PPD
-attribute. The name may contain up to 40 ASCII characters within the
-range of decimal 33 to decimal 126 inclusive, except for the characters
-comma (44), slash (47) and colon (58).</p>
-
-<p>The selector can be the empty string (<code>""</code>) or text of up
-to 80 bytes.</p>
-
-<p>The value is any string or number; the string may contain multiple
-lines, however no one line may exceed 255 bytes.</p>
-
-<h3>See Also</h3>
-
-<p><a href="#Attribute"><code>Attribute</code></a></p>
-
-
-<h2 class="title"><a name='ManualCopies'>ManualCopies</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-ManualCopies <i>boolean-value</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-ManualCopies no
-ManualCopies yes
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>ManualCopies</code> directive specifies whether copies
-need to be produced by the RIP filters. The default is
-<code>no</code>.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='Manufacturer'>Manufacturer</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Manufacturer <i>"name"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Manufacturer "Foo"
-Manufacturer "HP"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Manufacturer</code> directive specifies the
-manufacturer name for the current driver. The name argument must
-conform to the manufacturer name requirements in the Adobe PPD
-file specification.</p>
-
-<h3>See Also</h3>
-
-<p><a href="#FileName"><code>FileName</code></a>,
-<a href='#ModelName'><code>ModelName</code></a>,
-<a href='#PCFileName'><code>PCFileName</code></a>,
-<a href='#Version'><code>Version</code></a></p>
-
-
-<h2 class="title"><a name='MaxSize'>MaxSize</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-MaxSize <i>width length</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-MaxSize 36in 100ft
-MaxSize 300cm 30m
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>MaxSize</code> directive specifies the maximum width
-and length that is supported for custom page sizes.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#MinSize'><code>MinSize</code></a>,
-<a href='#VariablePaperSize'><code>VariablePaperSize</code></a></p>
-
-
-<h2 class="title"><a name='MediaSize'>MediaSize</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-MediaSize <i>name</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-MediaSize Letter
-MediaSize A4
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>MediaSize</code> directive adds the named size to the
-current printer driver using the current margins defined with
-the <a href="#HWMargins"><code>HWMargins</code></a> directive. The
-name argument must match a media size defined using the <a
-href="#_media"><code>#media</code></a> directive.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#_media'><code>#media</code></a>,
-<a href='#HWMargins'><code>HWMargins</code></a></p>
-
-
-<h2 class="title"><a name='MediaType'>MediaType</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-MediaType <i>type name</i>
-MediaType <i>type "name/text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-MediaType 0 Auto
-MediaType 1 "Plain/Plain Paper"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>MediaType</code> directive adds a new choice to the
-<code>MediaType</code> option. The type argument is a number
-from 0 to 2<sup>32</sup>-1 specifying the value that is placed
-in the <code>cupsMediaType</code> attribute in the PostScript page
-device dictionary.</p>
-
-<p>The name may contain up to 40 ASCII characters within the range of
-decimal 33 to decimal 126 inclusive, except for the characters comma
-(44), slash (47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<p>The name is placed in the <code>MediaType</code> attribute in the
-PostScript page device dictionary.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='MinSize'>MinSize</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-MinSize <i>width length</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-MinSize 4in 8in
-MinSize 10cm 20cm
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>MinSize</code> directive specifies the minimum width
-and length that is supported for custom page sizes.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#MaxSize'><code>MaxSize</code></a>,
-<a href='#VariablePaperSize'><code>VariablePaperSize</code></a></p>
-
-
-<h2 class="title"><a name='ModelName'>ModelName</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-ModelName <i>"name"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-ModelName "Foo Laser Printer 2000"
-ModelName "Colorific 123"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>ModelName</code> directive sets the printer name for
-the <code>ModelName</code>, <code>NickName</code>, and
-<code>ShortNickName</code> attributes for the printer driver. The
-name is any string of letters, numbers, spaces, and the
-characters ".", "/", "-", and "+" and should not begin with the
-manufacturer name since the PPD compiler will add this
-automatically for you. The maximum length of the name string is
-31 bytes to conform to the Adobe limits on the length of
-<code>ShortNickName</code>.</p>
-
-<h3>See Also</h3>
-
-<p><a href="#FileName"><code>FileName</code></a>,
-<a href='#Manufacturer'><code>Manufacturer</code></a>,
-<a href='#PCFileName'><code>PCFileName</code></a>,
-<a href='#Version'><code>Version</code></a></p>
-
-
-<h2 class="title"><a name='ModelNumber'>ModelNumber</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-ModelNumber <i>expression</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-ModelNumber 123
-ModelNumber ($PCL_PAPER_SIZE $PCL_PJL)
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>ModelNumber</code> directive sets the
-<code>cupsModelNumber</code> attribute for the printer driver, which
-is often used by the printer driver filter to tailor its output
-for the current device. The number is any integer or bitwise OR
-of integers and constants that is appropriate for the printer
-driver filters.<p>
-
-<p>A complete list of printer driver model number constants is
-available later in this appendix in the section titled, "<a
-href='#REF_MODEL_NUMBER'>Printer Driver ModelNumber
-Constants</a>".</p>
-
-<h3>See Also</h3>
-
-<p><a href='#DriverType'><code>DriverType</code></a>,
-<a href='#Filter'><code>Filter</code></a></p>
-
-
-<h2 class="title"><a name='Option'>Option</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Option <i>name type section order</i>
-Option <i>"name/text" type section order</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Option Punch Boolean AnySetup 10
-Option "fooFinish/Finishing Option" PickOne DocumentSetup 10
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Option</code> directive creates a new option in the
-current group, by default the <code>General</code> group. The name
-may contain up to 40 ASCII characters within the range of decimal 33
-to decimal 126 inclusive, except for the characters comma (44), slash
-(47) and colon (58).</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<p>The type argument is one of the following keywords:</p>
-
-<ul>
-
- <li><code>Boolean</code> - a true/false option</li>
-
- <li><code>PickOne</code> - allows the user to pick one
- choice from a list</li>
-
- <li><code>PickMany</code> - allows the user to pick zero or
- more choices from a list</li>
-
-</ul>
-
-<p>The section argument is one of the following keywords:</p>
-
-<ul>
-
- <li><code>AnySetup</code> - The option can be placed in
- either the DocumentSetup or PageSetup sections of the
- PostScript document</li>
-
- <li><code>DocumentSetup</code> - The option must be placed
- in the DocumentSetup section of the PostScript document;
- this does not allow the option to be overridden on
- individual pages</li>
-
- <li><code>ExitServer</code> - The option must be placed in a
- separate initialization job prior to the document (not
- used for raster printer drivers)</li>
-
- <li><code>JCLSetup</code> - The option contains job control
- language commands and must be sent prior to the document
- using the <code>JCLBegin</code> and
- <code>JCLToPSInterpreter</code> attributes (not used for
- raster printer drivers)</li>
-
- <li><code>PageSetup</code> - The option must be placed at the
- beginning of each page in the PostScript document</li>
-
- <li><code>Prolog</code> - The option must be placed in the
- prolog section of the PostScript document; this is
- typically used to add special comments for high-end
- typesetters, but can also be used to add CUPS PostScript
- job ticket comments.</li>
-
-</ul>
-
-<p>The order argument is a real number greater than or equal to
-0.0 and is used to sort the printer commands from many options
-before sending them to the printer or RIP filter.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Resolution'><code>Resolution</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><a name='PCFileName'>PCFileName</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-PCFileName <i>"filename.ppd"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-PCFileName "foljt2k1.ppd"
-PCFileName "deskjet.ppd"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>PCFileName</code> attribute specifies the name of the
-PPD file for the current driver. The filename argument must
-conform to the Adobe PPD file specification and can be no more
-than 8 filename characters plus the extension ".ppd".</p>
-
-<h3>See Also</h3>
-
-<p><a href="#FileName"><code>FileName</code></a>,
-<a href='#Manufacturer'><code>Manufacturer</code></a>,
-<a href='#ModelName'><code>ModelName</code></a>,
-<a href='#Version'><code>Version</code></a></p>
-
-
-<h2 class="title"><span class="info">Deprecated</span><a name='Resolution'>Resolution</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Resolution <i>colorspace bits-per-color row-count row-feed row-step name</i>
-Resolution <i>colorspace bits-per-color row-count row-feed row-step "name/text"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Resolution - 8 0 0 0 300dpi
-Resolution k 8 0 0 0 "600x300dpi/600 DPI Grayscale"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Resolution</code> directive creates a new
-<code>Resolution</code> option choice which sets the
-<code>HWResolution</code>, <code>cupsBitsPerColor</code>,
-<code>cupsRowCount</code>, <code>cupsRowFeed</code>,
-<code>cupsRowStep</code>, and optionally the <code>cupsColorSpace</code>
-page device dictionary attributes. The colorspace argument
-specifies a colorspace to use for the specified resolution and
-can be the hyphen (<code>-</code>) character to make no change to
-the selected color model or any keyword listed in the section
-titled, "<a href='#REF_COLOR_SPACE'>Colorspace Keywords</a>", to
-force the named colorspace.</p>
-
-<p>The bits-per-color argument specifies the number of bits per
-color to generate when RIP'ing a job. The values 1, 2, 4, and 8
-are currently supported by CUPS.</p>
-
-<p>The row-count, row-feed, and row-step argument specify the
-driver-dependent values for the <code>cupsRowCount</code>,
-<code>cupsRowFeed</code>, and <code>cupsRowStep</code> attributes,
-respectively. Most drivers leave these attributes set to 0, but
-any number from 0 to 2<sup>32</sup>-1 is allowed.</p>
-
-<p>The name argument must conform to the resolution naming
-conventions in the Adobe PPD file specification, either
-<code>HHHdpi</code> for symmetric resolutions or <code>HHHxVVVdpi</code>
-for asymmetric resolutions. The <code>HHH</code> and <code>VVV</code> in
-the examples represent the horizontal and vertical resolutions
-which must be positive integer values.</p>
-
-<p>If provided, the text can be any string up to 80 bytes in length.
-If no text is provided, the name is used.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#UIConstraints'><code>UIConstraints</code></a></p>
-
-
-<h2 class="title"><span class="info">Deprecated</span><a name='SimpleColorProfile'>SimpleColorProfile</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-SimpleColorProfile <i>resolution/mediatype density
- yellow-density red-density gamma
- red-adjust green-adjust blue-adjust</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-SimpleColorProfile -/- 100 100 200 1.0 0 0 0
-
-SimpleColorProfile 360dpi/- 100 95 150 1.2 5 10 15
-
-SimpleColorProfile 720dpi/Glossy 100 90 120 1.5 -5 5 10
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>SimpleColorProfile</code> directive creates a
-matrix-based <a href="#ColorProfile"><code>ColorProfile</code></a>.
-The resolution and mediatype arguments specify the
-<code>Resolution</code> and <code>MediaType</code> choices which use the
-profile; the hyphen (<code>-</code>) is used to specify that any
-resolution or mediatype can be used with the profile.</p>
-
-<p>The density argument specifies the linear density correction
-to apply to the color values (P = d * 0.01 * p<sup>g</sup>) and
-is an integer greater than 0 and less than or equal to 100. A
-value 100 of disables density correction while lower values
-produce proportionately lighter output. The density value
-adjusts all color channels equally in all color modes.</p>
-
-<p>The yellow-density argument specifies the density of the
-yellow channel when printing in grayscale or RGB mode and is an
-integer greater than 0 and less then or equal to 100. A value of
-100 disables yellow density correction while lower values
-produce proportionately lighter output.</p>
-
-<P>The red-density argument specifies the two-color density
-limit (e.g. C + M, C + Y, M + Y) when printing in grayscale or
-RGB mode and is an integer greater than 0 and less then or equal
-to 200. A value of 200 disables two-color density correction
-while lower values produce proportionately lighter output.</p>
-
-<p>The gamma argument specifies the gamma correction to apply to
-the color values (P = p<sup>g</sup>) and is a real number
-greater than 0. Values larger than 1 cause a general lightening
-of the print while values smaller than 1 cause a general
-darkening of the print. A value of 1 disables gamma
-correction.</p>
-
-<p>The red-adjust, green-adjust, blue-adjust arguments specify
-the percentage of color to add or remove. Positive red-adjust
-values add magenta and negative values add yellow. Positive
-green-adjust values add cyan and negative values add yellow.
-Positive blue-adjust values add cyan and negative values add
-magenta. Values of 0 disable color adjustments.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#ColorProfile'><code>ColorProfile</code></a></p>
-
-
-<h2 class="title"><a name='Throughput'>Throughput</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Throughput <i>pages-per-minute</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Throughput 1
-Throughput 10
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Throughput</code> directive sets the <code>Throughput</code>
-attribute for the current printer driver. The pages-per-minute
-argument is a positive integer representing the peak number of
-pages per minute that the printer is capable of producing. Use a
-value of 1 for printers that produce less than 1 page per
-minute.</p>
-
-
-<h2 class="title"><a name='UIConstraints'>UIConstraints</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-UIConstraints <i>"*Option1 *Option2"</i>
-UIConstraints <i>"*Option1 Choice1 *Option2"</i>
-UIConstraints <i>"*Option1 *Option2 Choice2"</i>
-UIConstraints <i>"*Option1 Choice1 *Option2 Choice2"</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-UIConstraints "*Finishing *MediaType"
-UIConstraints "*Option1 False *Duplex"
-UIConstraints "*Duplex *MediaType Transparency"
-UIConstraints "*Resolution 600dpi *ColorModel RGB"
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>UIConstraints</code> directive adds a constraint
-between two options. Constraints inform the application when a
-user has chosen incompatible options. Each option name is
-preceded by the asterisk (<code>*</code>). If no choice is given for
-an option, then all choices <i>except</i> <code>False</code> and
-<code>None</code> will conflict with the other option and choice(s).
-Since the PPD compiler automatically adds reciprocal constraints
-(option A conflicts with option B, so therefore option B
-conflicts with option A), you need only specify the constraint
-once.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Choice'><code>Choice</code></a>,
-<a href='#ColorModel'><code>ColorModel</code></a>,
-<a href='#Cutter'><code>Cutter</code></a>,
-<a href='#Darkness'><code>Darkness</code></a>,
-<a href='#Duplex'><code>Duplex</code></a>,
-<a href='#Finishing'><code>Finishing</code></a>,
-<a href='#Group'><code>Group</code></a>,
-<a href='#InputSlot'><code>InputSlot</code></a>,
-<a href='#Installable'><code>Installable</code></a>,
-<a href='#MediaType'><code>MediaType</code></a>,
-<a href='#Option'><code>Option</code></a>,
-<a href='#Resolution'><code>Resolution</code></a></p>
-
-
-<h2 class="title"><a name='VariablePaperSize'>VariablePaperSize</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-VariablePaperSize <i>boolean-value</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-VariablePaperSize yes
-VariablePaperSize no
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>VariablePaperSize</code> directive specifies whether
-the current printer supports variable (custom) page sizes. When
-<code>yes</code> is specified, the PPD compiler will include the
-standard PPD attributes required to support custom page
-sizes.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#MaxSize'><code>MaxSize</code></a>,
-<a href='#MinSize'><code>MinSize</code></a></p>
-
-
-<h2 class="title"><a name='Version'>Version</a></h2>
-
-<h3>Syntax</h3>
-
-<pre>
-Version <i>number</i>
-</pre>
-
-<h3>Examples</h3>
-
-<pre>
-Version 1.0
-Version 3.7
-</pre>
-
-<h3>Description</h3>
-
-<p>The <code>Version</code> directive sets the <code>FileVersion</code>
-attribute in the PPD file and is also used for the
-<code>NickName</code> attribute. The number argument is a positive
-real number.</p>
-
-<h3>See Also</h3>
-
-<p><a href='#Manufacturer'><code>Manufacturer</code></a>,
-<a href='#ModelName'><code>ModelName</code></a>,
-<a href='#PCFileName'><code>PCFileName</code></a></p>
-
-
-<h2 class="title"><a name='REF_INCLUDE'>Standard Include Files</h2>
-
-<p><a href='#TABLEB-1'>Table B-1</a> shows the standard include
-files which are provided with the DDK.</p>
-
-<center><table border='1' cellpadding='5' cellspacing='0' width='80%'>
-<caption align='bottom'><a name='TABLEB-1'><i>Table B-1,
-Standard Include Files</i></a></caption>
-<tr bgcolor='#cccccc'>
- <th>Include File</th>
- <th>Description</th>
-</tr>
-<tr>
- <td valign='top'><code><font.defs></code></td>
- <td align='justify' valign='top'>Defines all of the
- standard fonts which are included with ESP Ghostscript
- and the Apple PDF RIP.</td>
-</tr>
-<tr>
- <td valign='top'><code><epson.h></code></td>
- <td align='justify' valign='top'>Defines all of the
- CUPS ESC/P sample driver constants.</td>
-</tr>
-<tr>
- <td valign='top'><code><escp.h></code></td>
- <td align='justify' valign='top'>Defines all of the
- DDK ESC/P driver constants.</td>
-</tr>
-<tr>
- <td valign='top'><code><hp.h></code></td>
- <td align='justify' valign='top'>Defines all of the
- CUPS HP-PCL sample driver constants.</td>
-</tr>
-<tr>
- <td valign='top'><code><label.h></code></td>
- <td align='justify' valign='top'>Defines all of the
- CUPS label sample driver constants.</td>
-</tr>
-<tr>
- <td valign='top'><code><media.defs></code></td>
- <td align='justify' valign='top'>Defines all of the
- standard media sizes listed in Appendix B of the Adobe
- PostScript Printer Description File Format
- Specification.</td>
-</tr>
-<tr>
- <td valign='top'><code><pcl.h></code></td>
- <td align='justify' valign='top'>Defines all of the
- DDK HP-PCL driver constants.</td>
-</tr>
-<tr>
- <td valign='top'><code><raster.defs></code></td>
- <td align='justify' valign='top'>Defines all of the CUPS
- raster format constants.</td>
-</tr>
-</table></center>
-
-<h2 class="title"><a name='REF_MODEL_NUMBER'>Printer Driver ModelNumber Constants</a></h2>
-
-<p>The CUPS DDK and sample drivers use the
-<code>cupsModelNumber</code> attribute in the PPD file to tailor
-their output to the printer. The following sections describe the
-constants for each driver.</p>
-
-<h3><a name='REF_MODEL_EPSON'>The CUPS ESC/P Sample Driver (epson)</a></h3>
-
-<p>The <code>epson</code> driver supports Epson and Okidata
-dot-matrix, Epson Stylus Color, and Epson Stylus Photo printers.
-<a href='#TABLEB-2'>Table B-2</a> lists the constants for the <a
-href='#ModelNumber'><code>ModelNumber</code></a> directive.
-<code>ModelNumber</code> values should be inserted by referencing
-only one of these constants.</p>
-
-<!-- NEED 20 -->
-<center><table border='1' cellpadding='5' cellspacing='0' width='80%'>
-<caption align='bottom'><a name='TABLEB-2'><i>Table B-2, <code>epson</code> driver
-constants</i></a></caption>
-<tr bgcolor='#cccccc'>
- <th>Constant</th>
- <th>Description</th>
-</tr>
-<tr>
- <td valign='top'><code>EPSON_9PIN</code></td>
- <td align='justify' valign='top'>Epson and Okidata 9-pin
- dot-matrix printers</td>
-</tr>
-<tr>
- <td valign='top'><code>EPSON_24PIN</code></td>
- <td align='justify' valign='top'>Epson and Okidata 24-pin
- dot-matrix printers</td>
-</tr>
-<tr>
- <td valign='top'><code>EPSON_COLOR</code></td>
- <td align='justify' valign='top'>Older Epson Stylus Color
- printers that use the <code>ESC .</code> graphics command</td>
-</tr>
-<tr>
- <td valign='top'><code>EPSON_PHOTO</code></td>
- <td align='justify' valign='top'>Older Epson Stylus Photo
- printers that use the <code>ESC .</code> graphics command</td>
-</tr>
-<tr>
- <td valign='top'><code>EPSON_ICOLOR</code></td>
- <td align='justify' valign='top'>Newer Epson Stylus Color
- printers that use the <code>ESC i</code> graphics command</td>
-</tr>
-<tr>
- <td valign='top'><code>EPSON_IPHOTO</code></td>
- <td align='justify' valign='top'>Newer Epson Stylus Photo
- printers that use the <code>ESC i</code> graphics command</td>
-</tr>
-</table></center>
-
-<h3><a name='REF_MODEL_HP'>The CUPS HP-PCL Sample Driver (hp)</a></h3>
-
-<p>The <code>hp</code> driver supports HP LaserJet and DeskJet
-printers. <a href='#TABLEB-3'>Table B-3</a> lists the constants
-for the <a href='#ModelNumber'><code>ModelNumber</code></a>
-directive. <code>ModelNumber</code> values should be inserted by
-referencing only one of these constants.</p>
-
-<center><table border='1' cellpadding='5' cellspacing='0' width='80%'>
-<caption align='bottom'><a name='TABLEB-3'><i>Table B-3, <code>hp</code> driver
-constants</i></a></caption>
-<tr bgcolor='#cccccc'>
- <th>Constant</th>
- <th>Description</th>
-</tr>
-<tr>
- <td valign='top'><code>HP_LASERJET</code></td>
- <td align='justify' valign='top'>HP LaserJet printers supporting
- PCL 3, 4, or 5</td>
-</tr>
-<tr>
- <td valign='top'><code>HP_DESKJET</code></td>
- <td align='justify' valign='top'>HP DeskJet printers
- supporting PCL 3 and using the simple color graphics
- command (<code>ESC * r # U</code>)</td>
-</tr>
-<tr>
- <td valign='top'><code>HP_DESKJET2</code></td>
- <td align='justify' valign='top'>HP DeskJet printers
- supporting PCL3GUI and using the configure raster graphics
- command (<code>ESC * g # W</code>)</td>
-</tr>
-</table></center>
-
-<h3><a name='REF_MODEL_LABEL'>The CUPS Label Sample Driver (label)</a></h3>
-
-<p>The <code>label</code> driver supports the Dymo Labelwriter, Zebra CPCL, Zebra EPL, and Zebra ZPL, and Intellitech PCL label printers. <a href='#TABLEB-4'>Table B-4</a>
-lists the constants for the <a
-href='#ModelNumber'><code>ModelNumber</code></a> directive.
-<code>ModelNumber</code> values should be inserted by referencing
-only one of these constants.</p>
-
-<center><table border='1' cellpadding='5' cellspacing='0' width='80%'>
-<caption align='bottom'><a name='TABLEB-4'><i>Table B-4, <code>label</code> driver
-constants</i></a></caption>
-<tr bgcolor='#cccccc'>
- <th>Constant</th>
- <th>Description</th>
-</tr>
-<tr>
- <td valign='top'><code>DYMO_3x0</code></td>
- <td align='justify' valign='top'>Format output for the
- Dymo Labelwriter 300, 330, or 330 Turbo.</td>
-</tr>
-<tr>
- <td valign='top'><code>INTELLITECH_PCL</code></td>
- <td align='justify' valign='top'>Format output for the Intellitech PCL printers.</td>
-</tr>
-<tr>
- <td valign='top'><code>ZEBRA_CPCL</code></td>
- <td align='justify' valign='top'>Format output for the Zebra CPCL printers.</td>
-</tr>
-<tr>
- <td valign='top'><code>ZEBRA_EPL_LINE</code></td>
- <td align='justify' valign='top'>Format output for the Zebra EPL line mode (EPL 1) printers.</td>
-</tr>
-<tr>
- <td valign='top'><code>ZEBRA_EPL_PAGE</code></td>
- <td align='justify' valign='top'>Format output for the Zebra EPL page mode (EPL 2) printers.</td>
-</tr>
-<tr>
- <td valign='top'><code>ZEBRA_ZPL</code></td>
- <td align='justify' valign='top'>Format output for the Zebra ZPL printers.</td>
-</tr>
-</table></center>
-
-<h3><a name='REF_MODEL_ESCP'>The DDK ESC/P Driver (escp)</a></h3>
-
-<p>The <code>escp</code> driver supports all Epson inkjet printers.
-<a href='#TABLEB-6'>Table B-6</a> lists the constants for the <a
-href='#ModelNumber'><code>ModelNumber</code></a> directive.
-<code>ModelNumber</code> values should be specified as the bitwise
-OR of one or more of these constants.</p>
-
-<center><table border='1' cellpadding='5' cellspacing='0' width='80%'>
-<caption align='bottom'><a name='TABLEB-6'><i>Table B-6, <code>escp</code> driver
-constants</i></a></caption>
-<tr bgcolor='#cccccc'>
- <th>Constant</th>
- <th>Description</th>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_MICROWEAVE</code></td>
- <td align='justify' valign='top'>Use microweave command?</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_STAGGER</code></td>
- <td align='justify' valign='top'>Are color jets staggered?</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_ESCK</code></td>
- <td align='justify' valign='top'>Use print mode command?</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_EXT_UNITS</code></td>
- <td align='justify' valign='top'>Use extended unit commands?</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_EXT_MARGINS</code></td>
- <td align='justify' valign='top'>Use extended margin command?</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_USB</code></td>
- <td align='justify' valign='top'>Send USB packet mode escape</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_PAGE_SIZE</code></td>
- <td align='justify' valign='top'>Use page size command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_RASTER_ESCI</code></td>
- <td align='justify' valign='top'>Use <code>ESC i</code> graphics command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE</code></td>
- <td align='justify' valign='top'>Use remote mode commands</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_AC</code></td>
- <td align='justify' valign='top'>Use auto-cutter command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_CO</code></td>
- <td align='justify' valign='top'>Use cutter-operation command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_EX</code></td>
- <td align='justify' valign='top'>Use media-position command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_MS</code></td>
- <td align='justify' valign='top'>Use media-size command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_MT</code></td>
- <td align='justify' valign='top'>Use media-type command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_PC</code></td>
- <td align='justify' valign='top'>Use paper-check command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_PH</code></td>
- <td align='justify' valign='top'>Use paper-thickness command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_PP</code></td>
- <td align='justify' valign='top'>Use paper-path command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_SN0</code></td>
- <td align='justify' valign='top'>Use feed-sequence-0 command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_SN1</code></td>
- <td align='justify' valign='top'>Use platten-gap command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_SN2</code></td>
- <td align='justify' valign='top'>Use feed-sequence-2 command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_SN6</code></td>
- <td align='justify' valign='top'>Use eject-delay command</td>
-</tr>
-<tr>
- <td valign='top'><code>ESCP_REMOTE_FP</code></td>
- <td align='justify' valign='top'>Use print-position command</td>
-</tr>
-</table></center>
-
-<h3><a name='REF_MODEL_PCL'>The DDK HP-PCL Driver (pcl)</a></h3>
-
-<p>The <code>pcl</code> driver supports all HP LaserJet, DeskJet,
-and DesignJet printers. <a href='#TABLEB-5'>Table B-5</a> lists
-the constants for the <a
-href='#ModelNumber'><code>ModelNumber</code></a> directive.
-<code>ModelNumber</code> values should be specified as the bitwise
-OR of one or more of these constants.</p>
-
-<center><table border='1' cellpadding='5' cellspacing='0' width='80%'>
-<caption align='bottom'><a name='TABLEB-5'><i>Table B-5, <code>pcl</code> driver
-constants</i></a></caption>
-<tr bgcolor='#cccccc'>
- <th>Constant</th>
- <th>Description</th>
-</tr>
-<tr>
- <td valign='top'><code>PCL_PAPER_SIZE</code></td>
- <td align='justify' valign='top'>Use paper size command (<code>ESC & l # A</code>)</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_INKJET</code></td>
- <td align='justify' valign='top'>Use inkjet commands</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_RASTER_END_COLOR</code></td>
- <td align='justify' valign='top'>Use new end-raster command (<code>ESC * r C</code>)</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_RASTER_CID</code></td>
- <td align='justify' valign='top'>Use configure-image-data command (<code>ESC * v # W</code>)</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_RASTER_CRD</code></td>
- <td align='justify' valign='top'>Use configure-raster-data command (<code>ESC * g # W</code>)</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_RASTER_SIMPLE</code></td>
- <td align='justify' valign='top'>Use simple-raster-color command (<code>ESC * r # U</code>)</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_RASTER_RGB24</code></td>
- <td align='justify' valign='top'>Use 24-bit RGB mode</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_PJL</code></td>
- <td align='justify' valign='top'>Use PJL commands</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_PJL_PAPERWIDTH</code></td>
- <td align='justify' valign='top'>Use PJL PAPERWIDTH/LENGTH commands</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_PJL_HPGL2</code></td>
- <td align='justify' valign='top'>Use PJL ENTER HPGL2 command</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_PJL_PCL3GUI</code></td>
- <td align='justify' valign='top'>Use PJL ENTER PCL3GUI command</td>
-</tr>
-<tr>
- <td valign='top'><code>PCL_PJL_RESOLUTION</code></td>
- <td align='justify' valign='top'>Use PJL SET RESOLUTION command</td>
-</tr>
-</table></center>
-
-<H2><A NAME="REF_COLOR">Color Keywords</A></H2>
-
-<p>The PPD compiler defines two types of color keywords:
-colorspace and color order. The following sections list the
-supported keywords for each type.</p>
-
-<H3><A NAME="REF_COLOR_SPACE">Colorspace Keywords</A></H3>
-
-<P>The following colorspace keywords are recognized:</P>
-
-<UL>
-
- <LI><TT>cielab</TT> - CIE Lab <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>ciexyz</TT> - CIE XYZ <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>cmy</TT> - Cyan, magenta, yellow</LI>
-
- <LI><TT>cmyk</TT> - Cyan, magenta, yellow, black</LI>
-
- <LI><TT>gmck</TT> - Gold, magenta, yellow, black <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>gmcs</TT> - Gold, magenta, yellow, silver <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>gold</TT> - Gold foil <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc1</TT> - ICC-based, 1 color <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc2</TT> - ICC-based, 2 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc3</TT> - ICC-based, 3 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc4</TT> - ICC-based, 4 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc5</TT> - ICC-based, 5 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc6</TT> - ICC-based, 6 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc7</TT> - ICC-based, 7 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc8</TT> - ICC-based, 8 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icc9</TT> - ICC-based, 9 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icca</TT> - ICC-based, 10 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>iccb</TT> - ICC-based, 11 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>iccc</TT> - ICC-based, 12 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>iccd</TT> - ICC-based, 13 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>icce</TT> - ICC-based, 14 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>iccf</TT> - ICC-based, 15 colors <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>k</TT> - Black</LI>
-
- <LI><TT>kcmy</TT> - Black, cyan, magenta, yellow <A HREF="#REF_COLOR_APPLE">*</A></LI>
-
- <LI><TT>kcmycm</TT> - Black, cyan, magenta, yellow, light-cyan, light-magenta <A HREF="#REF_COLOR_APPLE">*</A></LI>
-
- <LI><TT>rgb</TT> - Red, green, blue</LI>
-
- <LI><TT>rgba</TT> - Red, green, blue, alpha</LI>
-
- <LI><TT>rgbw</TT> - Red, green, blue, luminance <A HREF="#REF_COLOR_APPLE">*</A></LI>
-
- <LI><TT>silver</TT> - Silver foil <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>w</TT> - Luminance</LI>
-
- <LI><TT>white</TT> - White ink (as black) <A HREF="#REF_COLOR_APPLE2">**</A></LI>
-
- <LI><TT>ymc</TT> - Yellow, magenta, cyan <A HREF="#REF_COLOR_APPLE">*</A></LI>
-
- <LI><TT>ymck</TT> - Yellow, magenta, cyan, black <A HREF="#REF_COLOR_APPLE">*</A>
-
- <BR>
-
- <BR><A NAME="REF_COLOR_APPLE">*</A> = This colorspace is not supported on macOS prior to 10.4.
- <BR><A NAME="REF_COLOR_APPLE2">**</A> = This colorspace is not supported on macOS.</LI>
-
-</UL>
-
-<H3><A NAME="REF_COLOR_ORDER">Color Order Keywords</A></H3>
-
-<P>The following color order keywords are recognized:</P>
-
-<UL>
-
- <LI><TT>chunked</TT> or <TT>chunky</TT> - Color values
- are passed together on a line as RGB RGB RGB RGB</LI>
-
- <LI><TT>banded</TT> - Color values are passed separately
- on a line as RRRR GGGG BBBB <A
- HREF="#REF_COLOR_APPLE2">*</A></LI>
-
- <LI><TT>planar</TT> - Color values are passed separately
- on a page as RRRR RRRR RRRR ... GGGG GGGG GGGG ... BBBB
- BBBB BBBB <A HREF="#REF_COLOR_APPLE2">*</A>
-
- <BR>
-
- <BR><A NAME="REF_COLOR_APPLE2">*</A> = This color order
- is not supported by the current Apple RIP filters and
- should not be used when developing printer drivers for
- macOS.</LI>
-
-</UL>
-
-</BODY>
-</HTML>
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- SECTION: Specifications -->
-<head>
- <title>CUPS Banner File Format</title>
- <meta name='keywords' content='job-sheets'>
- <link rel='stylesheet' type='text/css' href='../cups-printable.css'>
-</head>
-<body>
-<!--
- Banner file format specification for CUPS.
-
- Copyright © 2008-2011 by Apple Inc.
-
- Licensed under Apache License v2.0. See the file "LICENSE" for more
- information.
--->
-
-<H1 CLASS="title">CUPS Banner File Format</H1>
-
-<h2 class='title'><a name='INTRODUCTION'>Introduction</a></h2>
-
-<p>This specification describes the CUPS banner file format
-(application/vnd.cups-banner) which is used to generate print job cover pages
-and the CUPS test page. The format itself consists of a header followed by
-lines of UTF-8 text containing comments or keywords and values:</p>
-
-<pre class='command'>
-#CUPS-BANNER
-
-# What to show on the cover page
-Show job-id job-name job-originating-user-name time-at-creation
-
-# The header and footer text
-Header Cover Page
-Footer Cover Page
-
-# Arbitrary "notice" text
-Notice All work and no play makes Johnny a dull boy.
-Notice All work and no play makes Johnny a dull boy.
-Notice All work and no play makes Johnny a dull boy.
-Notice All work and no play makes Johnny a dull boy.
-
-# Images to place below the rest
-Image /usr/share/doc/cups/images/cups-icon.png
-Image /usr/share/doc/cups/images/smiley.jpg
-</pre>
-
-
-<h2 class='title'><a name='KEYWORDS'>Standard Keywords</a></h2>
-
-<h3><a name='Footer'>Footer</a></h3>
-
-<p class='summary'>
-Footer text for footer
-</p>
-
-<p>The <code>Footer</code> key defines the text that is centered at the bottom
-of the page. Only one <code>Footer</code> key can be specified.</p>
-
-
-<h3><a name='Header'>Header</a></h3>
-
-<p class='summary'>
-Header text for Header
-</p>
-
-<p>The <code>Header</code> key defines the text that is centered at the top
-of the page. Only one <code>Header</code> key can be specified.</p>
-
-
-<h3><a name='Image'>Image</a></h3>
-
-<p class='summary'>
-Image /path/to/image/filename<br>
-Image relative/path/in/DocumentRoot/filename
-</p>
-
-<p>The <code>Image</code> key defines images that are centered above the footer
-text. Multiple images are centered as a group from left to right. Images are
-scaled as needed to fit on the page with a nominal size of 1"/25cm.</p>
-
-
-<h3><a name='Notice'>Notice</a></h3>
-
-<p class='summary'>
-Notice Text to display below the job information.<br>
-Notice More text to display below the job information.
-</p>
-
-<p>The <code>Notice</code> key defines lines of text that are centered below
-the job information.</p>
-
-
-<h3><a name='Show'>Show</a></h3>
-
-<p class='summary'>
-Show <em>value value ... value</em>
-</p>
-
-<p>The <code>Show</code> key lists the job information that is shown. The
-following values are supported:</p>
-
-<ul>
-
- <li><code>imageable-area</code>: The imageable area of the current
- page size</li>
-
- <li><code>job-billing</code>: Billing information for the job</li>
-
- <li><code>job-id</code>: The job ID</li>
-
- <li><code>job-name</code>: The title of the job</li>
-
- <li><code>job-originating-host-name</code>: The computer that printed
- the job</li>
-
- <li><code>job-originating-user-name</code>: The user that printed the
- job</li>
-
- <li><code>job-uuid</code>: The job UUID</li>
-
- <li><code>options</code>: The options that were provided with the
- job</li>
-
- <li><code>paper-name</code>: The name of the paper size used</li>
-
- <li><code>paper-size</code>: The dimensions of the paper size used.</li>
-
- <li><code>printer-driver-name</code>: The printer driver used</li>
-
- <li><code>printer-driver-version</code>: The driver version</li>
-
- <li><code>printer-info</code>: The printer description</li>
-
- <li><code>printer-location</code>: The location of the printer</li>
-
- <li><code>printer-make-and-model</code>: The make and model strings
- reported by the printer driver</li>
-
- <li><code>printer-name</code>: The printer used</li>
-
- <li><code>time-at-creation</code>: When the job was submitted</li>
-
- <li><code>time-at-processing</code>: The current date and time</li>
-
-</ul>
-
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- SECTION: Specifications -->
-<head>
- <title>CUPS Command File Format</title>
- <meta name='keywords' content='Programming, CUPS Command File Format'>
- <link rel='stylesheet' type='text/css' href='../cups-printable.css'>
-</head>
-<body>
-<!--
- CUPS command file format specification for CUPS.
-
- Copyright © 2007-2018 by Apple Inc.
- Copyright © 1997-2006 by Easy Software Products.
-
- Licensed under Apache License v2.0. See the file "LICENSE" for more
- information.
--->
-
-<H1 CLASS="title">CUPS Command File Format</H1>
-
-<h2 class='title'><a name='INTRODUCTION'>Introduction</a></h2>
-
-<p>This specification describes the CUPS command file format
-(application/vnd.cups-command) which is used to send printer
-maintenance commands to a printer in a device-independent way.
-The current specification supports basic maintenance functions
-such as head cleaning and self-test pages and query functions
-such as auto-configure, report supply levels, and report status.</p>
-
-<p>Printer drivers advertise support for the CUPS command file
-format by providing a filter for the
-<var>application/vnd.cups-command</var> file type. Applications
-can determine if a printer supports printing of CUPS command
-files by checking the <code>printer-type</code> attribute for the
-<code>CUPS_PRINTER_COMMANDS</code> capability bit.</p>
-
-<p>In addition, the PPD file for a printer can contain a
-<code>cupsCommands</code> keyword that provides a list of supported
-commands separated by spaces, for example:</p>
-
-<pre class='command'>
-*cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels ReportStatus"
-</pre>
-
-<p>If no <code>cupsCommands</code> keyword is provided, the command filter
-must support <a href='#AutoConfigure'><code>AutoConfigure</code></a>,
-<a href='#Clean'><code>Clean</code></a>,
-<a href='#PrintSelfTestPage'><code>PrintSelfTestPage</code></a>,
-and <a href='#ReportLevels'><code>ReportLevels</code></a>. The scheduler also
-provides the <code>printer-commands</code> attribute containing the list of
-supported commands.</p>
-
-
-<h2 class='title'><a name='SYNTAX'>File Syntax</a></h2>
-
-<p>CUPS command files are ASCII text files. The first line of a
-CUPS command file MUST contain:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-</pre>
-
-<p>After that, each line is either a command or a comment.
-Comments begin with the # character, e.g.:</p>
-
-<pre class='command'>
-# This is a comment
-</pre>
-
-<p>Commands are any sequence of letters, numbers, and punctuation characters
-optionally followed by parameters separated by whitespace, e.g.:</p>
-
-<pre class='command'>
-Clean all
-PrintSelfTestPage
-</pre>
-
-<p>Command names are case-insensitive, so "PRINTSELFTESTPAGE",
-"printselftestpage", and "PrintSelfTestPage" are equivalent. Vendor-specific
-commands should use a domain name prefix, e.g.:</p>
-
-<pre class='command'>
-com.vendor.foo
-com.vendor.bar param param2 ... paramN
-</pre>
-
-
-<h2 class='title'><a name='COMMANDS'>Standard Commands</a></h2>
-
-<p>The following are the standard commands supported by the format. The only
-required command is
-<a href='#PrintSelfTestPage'><code>PrintSelfTestPage</code></a>.</p>
-
-
-<h3><a name='AutoConfigure'>AutoConfigure</a></h3>
-
-<p class='summary'>AutoConfigure</p>
-
-<p>The <code>AutoConfigure</code> command updates the printer's PPD file
-and driver state information to reflect the current configuration of the
-printer. There are no arguments for this command.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-AutoConfigure
-</pre>
-
-
-<h3><a name='Clean'>Clean</a></h3>
-
-<p class='summary'>Clean <i>colorname</i></p>
-
-<p>The <code>Clean</code> command performs a standard print head cleaning. The
-"colorname" parameter specifies which color or head to clean. If a printer does
-not support cleaning of individual colors or cartridges, then all colors are
-cleaned. Command filters MUST support the "all" colorname. Other standard color
-names include "black", "color", "photo", "cyan", "magenta", "yellow",
-"light-cyan", "light-magenta", "light-black", "light-gray", and "dark-gray".</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-Clean all
-</pre>
-
-
-<h3><a name='PrintAlignmentPage'>PrintAlignmentPage</a></h3>
-
-<p class='summary'>PrintAlignmentPage pass</p>
-
-<p>The <code>PrintAlignmentPage</code> command prints a head alignment page on
-the printer. The "pass" parameter provides a pass number from 1 to N. The number
-of passes is device-dependent.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-PrintAlignmentPage 1
-</pre>
-
-
-<h3><a name='PrintSelfTestPage'>PrintSelfTestPage</a></h3>
-
-<p class='summary'>PrintSelfTestPage</p>
-
-<p>The <code>PrintSelfTestPage</code> command prints a self-test page on the
-printer. Typically this page shows whether all jets on a print head are
-functioning and that the print feed mechanisms are working properly.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-PrintSelfTestPage
-</pre>
-
-
-<h3><a name='ReportLevels'>ReportLevels</a></h3>
-
-<p class='summary'>ReportLevels</p>
-
-<p>The <code>ReportLevels</code> command queries the supply levels on a printer
-and reports "marker-colors", "marker-levels", "marker-names", and
-"marker-types" attributes using "ATTR:" messages sent to the scheduler. This
-command should also report the current printer status using "STATE:" messages
-like the <a href='#ReportStatus'><code>ReportStatus</code></a> command.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-ReportLevels
-</pre>
-
-
-<h3><a name='ReportStatus'>ReportStatus</a></h3>
-
-<p class='summary'>ReportStatus</p>
-
-<p>The <code>ReportStatus</code> command queries the printer for its current
-status and reports it using "STATE:" messages sent to the scheduler.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-ReportLevels
-</pre>
-
-
-<h3><a name='SetAlignment'>SetAlignment</a></h3>
-
-<p class='summary'>SetAlignment pass value ... valueN</p>
-
-<p>The <code>SetAlignment</code> command sets print head alignment values. The
-"pass" parameter is a number from 1 to N. All parameters are
-device-dependent.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-#CUPS-COMMAND
-SetAlignment 1 14
-</pre>
-
-
-</body>
-</html>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<!-- SECTION: Specifications -->
- <head>
- <title>CUPS PPD Extensions</title>
- <meta name="keywords" content="Specifications">
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- <meta name="creator" content="codedoc v3.1">
- <meta name="author" content="Unknown">
- <meta name="copyright" content="Unknown">
- <meta name="version" content="0.0">
- <style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1 { font-size: 2em; }
-H2 { font-size: 1.75em; }
-H3 { font-size: 1.5em; }
-H4 { font-size: 1.25em; }
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-BLOCKQUOTE {
- border-left: solid 2px #777;
- margin: 1em 0;
- padding: 10px;
-}
-
-BLOCKQUOTE OL LI {
- margin-left: -1em;
-}
-
-PRE.command, PRE.example {
- background: #eee;
- margin: 0 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding: 5pt 10pt 0;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- font-size: 250%;
- font-weight: bold;
- margin: 0;
-}
-div.body h2 {
- font-size: 250%;
- margin-top: 1.5em;
-}
-div.body h3 {
- font-size: 150%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h4 {
- font-size: 110%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.body h5 {
- font-size: 100%;
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-.class {
- border-bottom: solid 2px gray;
-}
-.constants {
-}
-.description {
- margin-top: 0.5em;
-}
-.discussion {
-}
-.enumeration {
- border-bottom: solid 2px gray;
-}
-.function {
- border-bottom: solid 2px gray;
- margin-bottom: 0;
-}
-.members {
-}
-.method {
-}
-.parameters {
-}
-.returnvalue {
-}
-.struct {
- border-bottom: solid 2px gray;
-}
-.typedef {
- border-bottom: solid 2px gray;
-}
-.union {
- border-bottom: solid 2px gray;
-}
-.variable {
-}
-h1, h2, h3, h4, h5, h6 {
- page-break-inside: avoid;
-}
-blockquote {
- border: solid thin gray;
- box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
- padding: 10px 10px 0px;
- page-break-inside: avoid;
-}
-p code, li code, p.code, pre, ul.code li {
- background: rgba(127,127,127,0.1);
- border: thin dotted gray;
- font-family: monospace;
- hyphens: manual;
- -webkit-hyphens: manual;
- page-break-inside: avoid;
-}
-p.code, pre, ul.code li {
- padding: 10px;
-}
-p code, li code {
- padding: 2px 5px;
-}
-a:link, a:visited {
- text-decoration: none;
-}
-span.info {
- background: black;
- border: solid thin black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-h2 span.info, h3 span.info, h4 span.info {
- border-radius: 10px;
- float: right;
- font-size: 80%;
- padding: 3px 6px;
-}
-h2.title span.info, h3.title span.info, h4.title span.info {
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
-}
-h2.title span.info {
- padding: 4px 6px;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-table.list {
- border-collapse: collapse;
- width: 100%;
-}
-table.list tr:nth-child(even) {
- background: rgba(127,127,127,0.1);]n}
-table.list th {
- border-right: 2px solid gray;
- font-family: monospace;
- padding: 5px 10px 5px 2px;
- text-align: right;
- vertical-align: top;
-}
-table.list td {
- padding: 5px 2px 5px 10px;
- text-align: left;
- vertical-align: top;
-}
-h1.title {
-}
-h2.title {
- border-bottom: solid 2px black;
-}
-h3.title {
- border-bottom: solid 2px black;
-}
---></style>
- </head>
- <body>
-<!--
- PPD extension documentation for CUPS.
-
- Copyright © 2007-2011 by Apple Inc.
- Copyright © 1997-2007 by Easy Software Products.
-
- Licensed under Apache License v2.0. See the file "LICENSE" for more
- information.
--->
-
-<H1 CLASS="title">CUPS PPD Extensions</H1>
-
-<p>This specification describes the attributes and extensions that CUPS adds to <a href="http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf" target="_blank">Adobe TechNote #5003: PostScript Printer Description File Format Specification Version 4.3</a>. PostScript Printer Description ("PPD") files describe the capabilities of each printer and are used by CUPS to support printer-specific features and intelligent filtering.</p>
-
-<div class='summary'><table summary='General Information'>
-<tbody>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='postscript-driver.html'>Developing PostScript Printer Drivers</a><br>
- Programming: <a href='raster-driver.html'>Developing Raster Printer Drivers</a><br>
- Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
- Programming: <a href='ppd-compiler.html'>Introduction to the PPD Compiler</a><br>
- Programming: <a href='api-raster.html'>Raster API</a><br>
- References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a></td>
-</tr>
-</tbody>
-</table></div>
- <div class="contents">
- <h2 class="title">Contents</h2>
- <ul class="contents">
- <li><a href="#SYNTAX">PPD File Syntax</a></li>
- <li><a href="#AUTOCONFIG">Auto-Configuration</a><ul class="subcontents">
- <li><a href="#APAutoSetupTool">APAutoSetupTool</a></li>
- <li><a href="#QUERYKEYWORD">?MainKeyword</a></li>
- <li><a href="#OID">OIDMainKeyword</a></li>
- </ul></li>
- <li><a href="#PROFILES">Color Profiles</a><ul class="subcontents">
- <li><a href="#cupsColorProfile">cupsColorProfile</a></li>
- <li><a href="#cupsICCProfile">cupsICCProfile</a></li>
- <li><a href="#APCustom">Custom Color Matching Support</a></li>
- </ul></li>
- <li><a href="#CONSTRAINTS">Constraints</a><ul class="subcontents">
- <li><a href="#cupsUIConstraints">cupsUIConstraints</a></li>
- <li><a href="#cupsUIResolver">cupsUIResolver</a></li>
- </ul></li>
- <li><a href="#I18N">Globalized PPD Support</a></li>
- <li><a href="#OPTIONS"><span class="info">CUPS 1.3/macOS 10.6</span>Custom Options</a></li>
- <li><a href="#RASTERPS">Writing PostScript Option Commands for Raster Drivers</a></li>
- <li><a href="#MEDIA">Media Keywords</a><ul class="subcontents">
- <li><a href="#cupsMediaQualifier2">cupsMediaQualifier2</a></li>
- <li><a href="#cupsMediaQualifier3">cupsMediaQualifier3</a></li>
- <li><a href="#cupsMinSize">cupsMinSize</a></li>
- <li><a href="#cupsMaxSize">cupsMaxSize</a></li>
- <li><a href="#cupsPageSizeCategory">cupsPageSizeCategory</a></li>
- </ul></li>
- <li><a href="#ATTRIBUTES">General Attributes</a><ul class="subcontents">
- <li><a href="#cupsBackSide">cupsBackSide</a></li>
- <li><a href="#cupsCommands">cupsCommands</a></li>
- <li><a href="#cupsEvenDuplex">cupsEvenDuplex</a></li>
- <li><a href="#cupsFax">cupsFax</a></li>
- <li><a href="#cupsFilter">cupsFilter</a></li>
- <li><a href="#cupsFilter2">cupsFilter2</a></li>
- <li><a href="#cupsFinishingTemplate">cupsFinishingTemplate</a></li>
- <li><a href="#cupsFlipDuplex">cupsFlipDuplex</a></li>
- <li><a href="#cupsIPPFinishings">cupsIPPFinishings</a></li>
- <li><a href="#cupsIPPReason">cupsIPPReason</a></li>
- <li><a href="#cupsIPPSupplies">cupsIPPSupplies</a></li>
- <li><a href="#cupsJobAccountId">cupsJobAccountId</a></li>
- <li><a href="#cupsJobAccountingUserId">cupsJobAccountingUserId</a></li>
- <li><a href="#cupsJobPassword">cupsJobPassword</a></li>
- <li><a href="#cupsLanguages">cupsLanguages</a></li>
- <li><a href="#cupsMandatory">cupsMandatory</a></li>
- <li><a href="#cupsManualCopies">cupsManualCopies</a></li>
- <li><a href="#cupsMarkerName">cupsMarkerName</a></li>
- <li><a href="#cupsMarkerNotice">cupsMarkerNotice</a></li>
- <li><a href="#cupsMaxCopies">cupsMaxCopies</a></li>
- <li><a href="#cupsModelNumber">cupsModelNumber</a></li>
- <li><a href="#cupsPJLCharset">cupsPJLCharset</a></li>
- <li><a href="#cupsPJLDisplay">cupsPJLDisplay</a></li>
- <li><a href="#cupsPortMonitor">cupsPortMonitor</a></li>
- <li><a href="#cupsPreFilter">cupsPreFilter</a></li>
- <li><a href="#cupsPrintQuality">cupsPrintQuality</a></li>
- <li><a href="#cupsSingleFile">cupsSingleFile</a></li>
- <li><a href="#cupsSNMPSupplies">cupsSNMPSupplies</a></li>
- <li><a href="#cupsVersion">cupsVersion</a></li>
- <li><a href="#JCLToPDFInterpreter">JCLToPDFInterpreter</a></li>
- </ul></li>
- <li><a href="#MACOSX">macOS Attributes</a><ul class="subcontents">
- <li><a href="#APDialogExtension">APDialogExtension</a></li>
- <li><a href="#APDuplexRequiresFlippedMargin">APDuplexRequiresFlippedMargin</a></li>
- <li><a href="#APHelpBook">APHelpBook</a></li>
- <li><a href="#APICADriver">APICADriver</a></li>
- <li><a href="#APPrinterIconPath">APPrinterIconPath</a></li>
- <li><a href="#APPrinterLowInkTool">APPrinterLowInkTool</a></li>
- <li><a href="#APPrinterPreset">APPrinterPreset</a></li>
- <li><a href="#APPrinterUtilityPath">APPrinterUtilityPath</a></li>
- <li><a href="#APScannerOnly">APScannerOnly</a></li>
- <li><a href="#APScanAppBundleID">APScanAppBundleID</a></li>
- </ul></li>
- <li><a href="#HISTORY">Change History</a></li>
- </ul>
- </div>
- <div class="body">
-<h2 class='title'><a name='SYNTAX'>PPD File Syntax</a></h2>
-
-<p>The PPD format is text-based and uses lines of up to 255 characters terminated by a carriage return, linefeed, or combination of carriage return and line feed. The following ABNF definition [<a href="http://tools.ietf.org/html/rfc5234" target="_blank">RFC5234</a>] defines the general format of lines in a PPD file:</p>
-
-<pre class='command'>
-PPD-FILE = HEADER +(DATA / COMMENT / LINE-END)
-
-HEADER = "*PPD-Adobe:" *WSP DQUOTE VERSION DQUOTE LINE-END
-
-VERSION = "4.0" / "4.1" / "4.2" / "4.3"
-
-COMMENT = "*%" *TCHAR LINE-END
-
-DATA = "*" 1*KCHAR [ WSP 1*KCHAR [ "/" 1*TCHAR ] ] ":"
- 1*(*WSP VALUE) LINE-END
-
-VALUE = 1*TCHAR / DQUOTE 1*SCHAR DQUOTE
-
-KCHAR = ALPHA / DIGIT / "_" / "." / "-"
-
-SCHAR = LINE-END / WSP / %x21.23-7E.A0-FF
-
-TCHAR = %x20-7E.A0-FF
-
-LINE-END = CR / LF / CR LF
-</pre>
-
-
-<h2 class='title'><a name='AUTOCONFIG'>Auto-Configuration</a></h2>
-
-<p>CUPS supports several methods of auto-configuration via PPD keywords.</p>
-
-
-<h3 class="title"><span class='info'>macOS 10.5</span><a name='APAutoSetupTool'>APAutoSetupTool</a></h3>
-
-<p class='summary'>*APAutoSetupTool: "/LibraryPrinters/vendor/filename"</p>
-
-<p>This macOS keyword defines a program that sets the default option choices. It is run when a printer is added from the <var>Add Printer</var> window or the <var>Nearby Printers</var> list in the <var>Print</var> dialog.</p>
-
-<p>The program is provided with two arguments: the printer's device URI and the PPD file to be used for the printer. The program must write an updated PPD file to stdout.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Use our setup tool when adding a printer
-*APAutoSetupTool: "/Library/Printers/vendor/Tools/autosetuptool"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.2/CUPS 1.4</span><a name='QUERYKEYWORD'>?MainKeyword</a></h3>
-
-<p class='summary'>*?<i>MainKeyword</i>: "<br>
- PostScript query code that writes a message using the = operator...<br>
-"<br>
-*End</p>
-
-<p>The <tt>?<i>MainKeyword</i></tt> keyword defines PostScript code that determines the currently selected/enabled option keyword (choice) for the main keyword (option). It is typically used when communicating with USB, serial, Appletalk, and AppSocket (port 9100) printers.</p>
-
-<p>The PostScript code typically sends its response back using the <tt>=</tt> operator.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-*OpenUI OptionDuplex/Duplexer Installed: Boolean
-*DuplexOptionDuplex: False
-*OptionDuplex False/Not Installed: ""
-*OptionDuplex True/Installed: ""
-
-<em>*% Query the printer for the presence of the duplexer option...</em>
-*?OptionDuplex: "
- currentpagedevice /Duplex known
- {(True)} {(False)} ifelse
- = flush
-"
-*End
-*CloseUI: OptionDuplex
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.4/CUPS 1.5</span><a name='OID'>OIDMainKeyword</a></h3>
-
-<p class='summary'>*?OID<i>MainKeyword</i>: ".n.n.n..."<br>
-*OID<i>MainKeyword</i> <i>OptionKeyword1</i>: "value"<br>
-...<br>
-*OID<i>MainKeyword</i> <i>OptionKeywordN</i>: "value"</p>
-
-<p>The <tt>OID<i>MainKeyword</i></tt> keyword is used to define SNMP OIDs that map to installable options. The first (query) line defines the OID to lookup on the network device. The second and subsequent keywords define a mapping from OID value to option keyword. Since SNMP is an IP-based network protocol, this method is typically only used to configure AppSocket, IPP, and LPD network printers.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Get the installed memory on the printer...
-*?OIDInstalledMemory: ".1.3.6.1.2.1.25.2.2.0"
-*OIDInstalledMemory 16MB: "16384 KBytes"
-*OIDInstalledMemory 32MB: "32768 KBytes"
-*OIDInstalledMemory 48MB: "49152 KBytes"
-*OIDInstalledMemory 72MB: "73728 KBytes"
-</pre>
-
-
-<h2 class='title'><a name='PROFILES'>Color Profiles</a></h2>
-
-<p>CUPS supports three types of color profiles. The first type is based on sRGB and is used by the standard CUPS raster filters and GPL Ghostscript. The second type is based on ICC profiles and is used by the Quartz-based filters on macOS. The final type is based on well-known colorspaces such as sRGB and Adobe RGB.</p>
-
-<blockquote><b>Note:</b>
-
-<p>At this time, none of the CUPS raster filters support ICC profiles. This will be addressed as time and resources permit.</p>
-
-</blockquote>
-
-
-<h3 class="title"><span class='info'>Deprecated</span><a name='cupsColorProfile'>cupsColorProfile</a></h3>
-
-<p class='summary'>*cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"</p>
-
-<p>This string keyword specifies an sRGB-based color profile consisting of gamma and density controls and a 3x3 CMY color transform matrix. <em>This keyword is not supported on macOS.</em></p>
-
-<p>The <i>Resolution</i> and <i>MediaType</i> values may be "-" to act as a wildcard. Otherwise they must match one of the <tt>Resolution</tt> or <tt>MediaType</tt> option keywords defined in the PPD file.</p>
-
-<p>The <i>density</i> and <i>gamma</i> values define gamma and
-density adjustment function such that:</p>
-
-<pre class='command'>
-f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
-</pre>
-
-<p>The <i>m00</i> through <i>m22</i> values define a 3x3 transformation matrix for the CMY color values. The density function is applied <i>after</i> the CMY transformation:</p>
-
-<pre class='command'>
-| m00 m01 m02 |
-| m10 m11 m12 |
-| m20 m21 m22 |
-</pre>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Specify a profile for printing at 360dpi on all media types</em>
-*cupsColorProfile 360dpi/-: "1.0 1.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
-
-<em>*% Specify a profile for printing at 720dpi on Glossy media</em>
-*cupsColorProfile 720dpi/Glossy: "1.0 2.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
-
-<em>*% Specify a default profile for printing at all other resolutions and media types</em>
-*cupsColorProfile -/-: "0.9 2.0 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.3/CUPS 1.2</span><a name='cupsICCProfile'>cupsICCProfile</a></h3>
-
-<p class='summary'>*cupsICCProfile ColorModel.MediaType.Resolution/Description: "filename"</p>
-
-<p>This keyword specifies an ICC color profile that is used to convert the document colors to the device colorspace. The <tt>ColorModel</tt>, <tt>MediaType</tt>, and <tt>Resolution</tt> option keywords specify a selector for color profiles. If omitted, the color profile will match any option keyword for the corresponding main keyword.</p>
-
-<p>The <tt>Description</tt> specifies human-readable text that is associated with the color profile. The <tt>filename</tt> portion specifies the ICC color profile to use; if the filename is not absolute, it is loaded relative to the <var>/usr/share/cups/profiles</var> directory.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Specify a profile for CMYK printing at 360dpi on all media types</em>
-*cupsICCProfile CMYK..360dpi/360dpi CMYK: "/Library/Printers/vendor/Profiles/foo-360-cmyk.icc"
-
-<em>*% Specify a profile for RGB printing at 720dpi on Glossy media</em>
-*cupsColorProfile RGB.Glossy.720dpi/720dpi Glossy: "/Library/Printers/vendor/Profiles/foo-720-glossy-rgb.icc"
-
-<em>*% Specify a default profile for printing at all other resolutions and media types</em>
-*cupsICCProfile ../Default: "/Library/Printers/vendor/Profiles/foo-default.icc"
-</pre>
-
-<h4 class="title">Customizing the Profile Selection Keywords</h4>
-
-<p>The <tt>ColorModel</tt>, <tt>MediaType</tt>, and <tt>Resolution</tt> main keywords can be reassigned to different main keywords, allowing drivers to do color profile selection based on different parameters. The <tt>cupsICCQualifier1</tt>, <tt>cupsICCQualifier2</tt>, and <tt>cupsICCQualifier3</tt> keywords define the mapping from selector to main keyword:</p>
-
-<pre class='command'>
-*cupsICCQualifier1: MainKeyword1
-*cupsICCQualifier2: MainKeyword2
-*cupsICCQualifier3: MainKeyword3
-</pre>
-
-<p>The default mapping is as follows:</p>
-
-<pre class='command'>
-*cupsICCQualifier1: ColorModel
-*cupsICCQualifier2: MediaType
-*cupsICCQualifier3: Resolution
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.4</span><a name='APCustom'>Custom Color Matching Support</a></h3>
-
-<p class='summary'>*<a href='#APSupportsCustomColorMatching'>APSupportsCustomColorMatching</a>: true<br>
-*<a href='#APCustomColorMatchingName'>APCustomColorMatchingName</a> name/text: ""<br>
-*<a href='#APCustomColorMatchingProfile'>APCustomColorMatchingProfile</a>: profile<br>
-*<a href='#APDefaultCustomColorMatchingProfile'>APDefaultCustomColorMatchingProfile</a>: profile</p>
-
-<p>These keywords tell the macOS raster filters that the printer driver provides its own custom color matching and that generic color profiles should be used when generating 1-, 3-, and 4-component raster data as requested by the driver. The <tt>APCustomColorMatchingProfile</tt> and <tt>APDefaultColorMatchingProfile</tt> keywords specify alternate color profiles (sRGB or AdobeRGB) to use for 3-color (RGB) raster data.</p>
-
-<blockquote><b>Note:</b>
-
-<p>Prior to macOS 10.6, the default RGB color space was Apple's "GenericRGB". The new default in macOS 10.6 and later is "sRGB". For more information, see <a href="http://support.apple.com/kb/HT3712">"macOS v10.6: About gamma 2.2"</a> on Apple's support site.</p>
-
-</blockquote>
-
-<h4 class="title"><span class='info'>macOS 10.5</span><a name='APCustomColorMatchingName'>APCustomColorMatchingName</a></h4>
-
-<p class='summary'>*APCustomColorMatchingName name/text: ""</p>
-
-<p>This keyword defines an alternate name for the color matching provided by a driver in the <var>Color Matching</var> print panel. The default is to use the name "Vendor Matching" or its localized equivalent.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Define the names for our color matching...
-*APCustomColorMatchingName name/AcmeColor(tm): ""
-*fr.APCustomColorMatchingName name/La AcmeColor(tm): ""
-</pre>
-
-<h4 class="title"><span class='info'>macOS 10.5</span><a name='APCustomColorMatchingProfile'>APCustomColorMatchingProfile</a></h4>
-
-<p class='summary'>*APCustomColorMatchingProfile: name</p>
-
-<p>This keyword defines a supported RGB color profile that can be used when doing custom color matching. Currently only <tt>sRGB</tt>, <tt>AdobeRGB</tt>, and <tt>GenericRGB</tt> are supported. If not specified, RGB data will use the GenericRGB colorspace.</p>
-
-<blockquote><b>Note:</b>
-
-<p>If you provide multiple <tt>APCustomColorMatchingProfile</tt> keywords, you are responsible for providing the necessary user interface controls to select the profile in a <a href='#APDialogExtension'>print dialog pane</a>. Add the named profile to the print settings using the key <tt>kPMCustomColorMatchingProfileKey</tt>.</p>
-
-</blockquote>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Use sRGB for RGB color by default, but support both sRGB and AdobeRGB
-*APSupportsCustomColorMatching: true
-*APDefaultCustomColorMatchingProfile: sRGB
-*APCustomColorMatchingProfile: sRGB
-*APCustomColorMatchingProfile: AdobeRGB
-</pre>
-
-<h4 class="title"><span class='info'>macOS 10.5</span><a name='APDefaultCustomColorMatchingProfile'>APDefaultCustomColorMatchingProfile</a></h4>
-
-<p class='summary'>*APDefaultCustomColorMatchingProfile: name</p>
-
-<p>This keyword defines the default RGB color profile that will be used when doing custom color matching. Currently only <tt>sRGB</tt>, <tt>AdobeRGB</tt>, and <tt>GenericRGB</tt> are supported.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Use sRGB for RGB color by default
-*APSupportsCustomColorMatching: true
-*APDefaultCustomColorMatchingProfile: sRGB
-</pre>
-
-<h4 class="title"><span class='info'>macOS 10.4</span><a name='APSupportsCustomColorMatching'>APSupportsCustomColorMatching</a></h4>
-
-<p class='summary'>*APSupportsCustomColorMatching: boolean</p>
-
-<p>This keyword specifies that the driver provides its own custom color matching. When <tt>true</tt>, the default hand-off colorspace will be GenericGray, GenericRGB, or GenericCMYK depending on the number of components the driver requests. The <a href='#APDefaultCustomColorMatchingProfile'><tt>APDefaultCustomColorMatchingProfile</tt></a> keyword can be used to override the default 3-component (RGB) colorspace.</p>
-
-<p>The default for <tt>APSupportsCustomColorMatching</tt> is <tt>false</tt>.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*APSupportsCustomColorMatching: true
-*APDefaultCustomColorMatchingProfile: sRGB
-</pre>
-
-
-<h2 class='title'><a name='CONSTRAINTS'>Constraints</a></h2>
-
-<p>Constraints are option choices that are not allowed by the driver or device, for example printing 2-sided transparencies. All versions of CUPS support constraints defined by the legacy Adobe <tt>UIConstraints</tt> and <tt>NonUIConstraints</tt> keywords which support conflicts between any two option choices, for example:</p>
-
-<pre class='command'>
-*% Do not allow 2-sided printing on transparency media
-*UIConstraints: "*Duplex *MediaType Transparency"
-*UIConstraints: "*MediaType Transparency *Duplex"
-</pre>
-
-<p>While nearly all constraints can be expressed using these keywords, there are valid scenarios requiring constraints between more than two option choices. In addition, resolution of constraints is problematic since users and software have to guess how a particular constraint is best resolved.</p>
-
-<p>CUPS 1.4 and higher define two new keywords for constraints, <tt>cupsUIConstraints</tt> and <tt>cupsUIResolver</tt>. Each <tt>cupsUIConstraints</tt> keyword points to a <tt>cupsUIResolver</tt> keyword which specifies alternate options that resolve the conflict condition. The same <tt>cupsUIResolver</tt> can be used by multiple <tt>cupsUIConstraints</tt>.</p>
-
-<blockquote><b>Note:</b>
-
-<p>When developing PPD files that contain constraints, it is very important to use the <a href="man-cupstestppd.html">cupstestppd(1)</a> program to verify that your constraints are accurate and cannot result in unresolvable option selections.</p>
-
-</blockquote>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsUIConstraints'>cupsUIConstraints</a></h3>
-
-<p class='summary'>*cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."<br>
-*cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 ..."<br>
-*cupsUIConstraints resolver: "*Keyword1 *Keyword2 OptionKeyword2 ..."<br>
-*cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."<br>
-*cupsUIConstraints: "*InstallableKeyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."</p>
-
-<p>Lists two or more options which conflict. The "resolver" string is a (possibly unique) keyword which specifies which options to change when the constraint exists. When no resolver is provided, CUPS first tries the default choice followed by testing each option choice to resolve the conflict.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Specify that 2-sided printing cannot happen on transparencies</em>
-*cupsUIConstraints transparency: "*Duplex *MediaType Transparency"
-
-<em>*% Specify that envelope printing cannot happen from the paper trays</em>
-*cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
-*cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
-*cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
-*cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
-
-<em>*% Specify an installable option constraint for the envelope feeder</em>
-*cupsUIConstraints: "*InputSlot EnvFeeder *InstalledEnvFeeder"
-
-<em>*% Specify that photo printing cannot happen on plain paper or transparencies at 1200dpi</em>
-*cupsUIConstraints photo: "*OutputMode Photo *MediaType Plain *Resolution 1200dpi"
-*cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsUIResolver'>cupsUIResolver</a></h3>
-
-<p class='summary'>*cupsUIResolver resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."</p>
-
-<p>Specifies two or more options to mark/select to resolve a constraint. The "resolver" string identifies a particular action to take for one or more <a href='#cupsUIConstraints'><tt>cupsUIConstraints</tt></a>. The same action can be used for multiple constraints. The option keyword pairs are treated as an ordered list of option selections to try - only the first N selections will be used, where N is the minimum number of selections required. Because <a href="api-ppd.html#cupsResolveConflicts"><code>cupsResolveConflicts()</code></a> will not change the most recent option selection passed to it, at least two options from the constraints must be listed to avoid situations where conflicts cannot be resolved.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Specify the options to change for the 2-sided transparency constraint</em>
-*cupsUIResolver transparency: "*Duplex None *MediaType Plain"
-
-<em>*% Specify the options to change for the envelope printing constraints. Notice
-*% that we try to change the InputSlot to either the envelope feeder or the
-*% manual feed first, then we change the page size...</em>
-*cupsUIResolver envelope: "*InputSlot EnvFeeder *InputSlot ManualFeed *PageSize Letter"
-
-<em>*% Specify the options to change for the photo printing constraints</em>
-*cupsUIResolver photo: "*OutputMode Best *Resolution 600dpi"
-</pre>
-
-
-<h2 class='title'><a name='I18N'>Globalized PPD Support</a></h2>
-
-<p>CUPS 1.2 and higher adds support for PPD files containing multiple languages by following the following additional rules:</p>
-
-<ol>
-
- <li>The <tt>LanguageVersion</tt> MUST be <tt>English</tt></li>
-
- <li>The <tt>LanguageEncoding</tt> MUST be <tt>ISOLatin1</tt></li>
-
- <li>The <tt>cupsLanguages</tt> keyword MUST be provided and list each of the supported locales in the PPD file</li>
-
- <li>Main and option keywords MUST NOT exceed 34 (instead of 40) characters to allow room for the locale prefixes in translation keywords</li>
-
- <li>The main keyword "Translation" MUST NOT be used</li>
-
- <li>Translation strings included with the main and option keywords MUST NOT contain characters outside the ASCII subset of ISOLatin1 and UTF-8; developers wishing to use characters outside ASCII MUST provide a separate set of English localization keywords for the affected keywords.</li>
-
- <li>Localizations are specified using a locale prefix of the form "ll" or "ll_CC." where "ll" is the 2-letter ISO language code and "CC" is the 2-letter ISO country code<ul>
- <li>A generic language translation ("ll") SHOULD be provided with country-specific differences ("ll_CC") provided only as needed</li>
- <li>For historical reasons, the "zh" and "zh_CN" locales map to Simplified Chinese while the "zh_TW" locale maps to Traditional Chinese</li>
- </ul></li>
-
- <li>Locale-specific translation strings MUST be encoded using UTF-8.</li>
-
- <li>Main keywords MUST be localized using one of the following forms:
- <p><tt>*ll.Translation MainKeyword/translation text: ""</tt><br />
- <tt>*ll_CC.Translation MainKeyword/translation text: ""</tt></p></li>
-
- <li>Option keywords MUST be localized using one of the following forms:
- <p><tt>*ll.MainKeyword OptionKeyword/translation text: ""</tt><br>
- <tt>*ll_CC.MainKeyword OptionKeyword/translation text: ""</tt></p></li>
-
- <li>Localization keywords MAY appear anywhere after the first line of the PPD file</li>
-
-</ol>
-
-<blockquote><b>Note:</b>
-
-<p>We use a <tt>LanguageEncoding</tt> value of <tt>ISOLatin1</tt> and limit the allowed base translation strings to ASCII to avoid character coding issues that would otherwise occur. In addition, requiring the base translation strings to be in English allows for easier fallback translation when no localization is provided in the PPD file for a given locale.</p>
-
-</blockquote>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*LanguageVersion: English
-*LanguageEncoding: ISOLatin1
-*cupsLanguages: "de fr_CA"
-*ModelName: "Foobar Laser 9999"
-
-<em>*% Localize ModelName for French and German</em>
-*fr_CA.Translation ModelName/La Foobar Laser 9999: ""
-*de.Translation ModelName/Foobar LaserDrucken 9999: ""
-
-*cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
-<em>*% Localize printer-state-reason for French and German</em>
-*fr_CA.cupsIPPReason com.vendor-error/Une erreur sèrieuse s'est produite: "/help/com.vendor/error.html"
-*de.cupsIPPReason com.vendor-error/Eine ernste Störung trat: "/help/com.vendor/error.html"
-
-...
-
-*OpenUI *InputSlot/Paper Source: PickOne
-*OrderDependency: 10 AnySetup *InputSlot
-*DefaultInputSlot: Auto
-<em>*% Localize InputSlot for French and German</em>
-*fr_CA.Translation InputSlot/Papier source: ""
-*de.Translation InputSlot/Papiereinzug: ""
-*InputSlot Auto/Default: "<</ManualFeed false>>setpagedevice"
-<em>*% Localize InputSlot=Auto for French and German</em>
-*fr_CA.InputSlot Auto/Par Defaut: ""
-*de.InputSlot Auto/Standard: ""
-*InputSlot Manual/Manual Feed: "<</ManualFeed true>>setpagedevice"
-<em>*% Localize InputSlot=Manual for French and German</em>
-*fr_CA.InputSlot Manual/Manuel mecanisme de alimentation: ""
-*de.InputSlot Manual/Manueller Einzug: ""
-*CloseUI: *InputSlot
-</pre>
-
-
-<h2 class='title'><a name='OPTIONS'><span class="info">CUPS 1.3/macOS 10.6</span>Custom Options</a></h2>
-
-<p>CUPS supports custom options using an extension of the <tt>CustomPageSize</tt> and <tt>ParamCustomPageSize</tt> syntax:</p>
-
-<pre class='command'>
-*CustomFoo True: "command"
-*ParamCustomFoo Name1/Text 1: order type minimum maximum
-*ParamCustomFoo Name2/Text 2: order type minimum maximum
-...
-*ParamCustomFoo NameN/Text N: order type minimum maximum
-</pre>
-
-<p>When the base option is part of the <tt>JCLSetup</tt> section, the "command" string contains JCL commands with "\order" placeholders for each numbered parameter. The CUPS API handles any necessary value quoting for HP-PJL commands. For example, if the JCL command string is "@PJL SET PASSCODE=\1" and the first
-option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234".</p>
-
-<p>For non-<tt>JCLSetup</tt> options, the "order" value is a number from 1 to N and specifies the order of values as they are placed on the stack before the command. For example, if the PostScript command string is "<</cupsReal1 2 1 roll>>setpagedevice" and the option value is "2.0" then CUPS will output the string "2.0 <</cupsReal1 2 1 roll>>setpagedevice".</p>
-
-<p>The "type" is one of the following keywords:</p>
-
-<ul>
-
- <li><tt>curve</tt> - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x <sup>value</sup></li>
-
- <li><tt>int</tt> - an integer value from "minimum" to "maximum"</li>
-
- <li><tt>invcurve</tt> - a real value from "minimum" to "maximum" representing a gamma correction curve using the function: f(x) = x <sup>1 / value</sup></li>
-
- <li><tt>passcode</tt> - a string of numbers value with a minimum of "minimum" numbers and a maximum of "maximum" numbers ("minimum" and "maximum" are numbers and passcode strings are not displayed in the user interface)</li>
-
- <li><tt>password</tt> - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers and password strings are not displayed in the user interface)</li>
-
- <li><tt>points</tt> - a measurement value in points from "minimum" to "maximum"</li>
-
- <li><tt>real</tt> - a real value from "minimum" to "maximum"</li>
-
- <li><tt>string</tt> - a string value with a minimum of "minimum" characters and a maximum of "maximum" characters ("minimum" and "maximum" are numbers)</li>
-
-</ul>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Base JCL key code option</em>
-*JCLOpenUI JCLPasscode/Key Code: PickOne
-*OrderDependency: 10 JCLSetup *JCLPasscode
-*DefaultJCLPasscode: None
-*JCLPasscode None/No Code: ""
-*JCLPasscode 1111: "@PJL SET PASSCODE = 1111<0A>"
-*JCLPasscode 2222: "@PJL SET PASSCODE = 2222<0A>"
-*JCLPasscode 3333: "@PJL SET PASSCODE = 3333<0A>"
-*JCLCloseUI: *JCLPasscode
-
-<em>*% Custom JCL key code option</em>
-*CustomJCLPasscode True: "@PJL SET PASSCODE = \1<0A>"
-*ParamCustomJCLPasscode Code/Key Code: 1 passcode 4 4
-
-
-<em>*% Base PostScript watermark option</em>
-*OpenUI WatermarkText/Watermark Text: PickOne
-*OrderDependency: 10 AnySetup *WatermarkText
-*DefaultWatermarkText: None
-*WatermarkText None: ""
-*WatermarkText Draft: "<</cupsString1(Draft)>>setpagedevice"
-*CloseUI: *WatermarkText
-
-<em>*% Custom PostScript watermark option</em>
-*CustomWatermarkText True: "<</cupsString1 3 -1 roll>>setpagedevice"
-*ParamCustomWatermarkText Text: 1 string 0 32
-
-
-<em>*% Base PostScript gamma/density option</em>
-*OpenUI GammaDensity/Gamma and Density: PickOne
-*OrderDependency: 10 AnySetup *GammaDensity
-*DefaultGammaDensity: Normal
-*GammaDensity Normal/Normal: "<</cupsReal1 1.0/cupsReal2 1.0>>setpagedevice"
-*GammaDensity Light/Lighter: "<</cupsReal1 0.9/cupsReal2 0.67>>setpagedevice"
-*GammaDensity Dark/Darker: "<</cupsReal1 1.1/cupsReal2 1.5>>setpagedevice"
-*CloseUI: *GammaDensity
-
-<em>*% Custom PostScript gamma/density option</em>
-*CustomGammaDensity True: "<</cupsReal1 3 -1 roll/cupsReal2 5 -1>>setpagedevice"
-*ParamCustomGammaDensity Gamma: 1 curve 0.1 10
-*ParamCustomGammaDensity Density: 2 real 0 2
-</pre>
-
-
-<h2 class='title'><a name='RASTERPS'>Writing PostScript Option Commands for Raster Drivers</a></h2>
-
-<p>PPD files are used for both PostScript and non-PostScript printers. For CUPS raster drivers, you use a subset of the PostScript language to set page device keywords such as page size, resolution, and so forth. For example, the following code sets the page size to A4 size:</p>
-
-<pre class='command'>
-*PageSize A4: "<</PageSize[595 842]>>setpagedevice"
-</pre>
-
-<p>Custom options typically use other operators to organize the values into a key/value dictionary for <tt>setpagedevice</tt>. For example, our previous <tt>CustomWatermarkText</tt> option code uses the <tt>roll</tt> operator to move the custom string value into the dictionary for <tt>setpagedevice</tt>:</p>
-
-<pre class='command'>
-*CustomWatermarkText True: "<</cupsString1 3 -1 roll>>setpagedevice"
-</pre>
-
-<p>For a custom string value of "My Watermark", CUPS will produce the following PostScript code for the option:</p>
-
-<pre class='command'>
-(My Watermark)
-<</cupsString1 3 -1 roll>>setpagedevice
-</pre>
-
-<p>The code moves the string value ("My Watermark") from the bottom of the stack to the top, creating a dictionary that looks like:</p>
-
-<pre class='command'>
-<</cupsString1(My Watermark)>>setpagedevice
-</pre>
-
-<p>The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.</p>
-
-
-<h3 class="title">Custom Page Size Code</h3>
-
-<p>There are many possible implementations of the <tt>CustomPageSize</tt> code. For CUPS raster drivers, the following code is recommended:</p>
-
-<pre class='command'>
-*ParamCustomPageSize Width: 1 points <i>min-width max-width</i>
-*ParamCustomPageSize Height: 2 points <i>min-height max-height</i>
-*ParamCustomPageSize WidthOffset: 3 points 0 0
-*ParamCustomPageSize HeightOffset: 4 points 0 0
-*ParamCustomPageSize Orientation: 5 int 0 0
-*CustomPageSize True: "pop pop pop <</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice"
-</pre>
-
-
-<h3 class="title">Supported PostScript Operators</h3>
-
-<p>CUPS supports the following PostScript operators in addition to the usual PostScript number, string (literal and hex-encoded), boolean, null, and name values:</p>
-
-<ul>
-
- <li><tt><<</tt> - Start a dictionary.</li>
-
- <li><tt>>></tt> - End a dictionary.</li>
-
- <li><tt>[</tt> - Start an array.</li>
-
- <li><tt>]</tt> - End an array.</li>
-
- <li><tt>copy</tt> - Copy the top N objects on the stack.</li>
-
- <li><tt>dup</tt> - Copy the top object on the stack.</li>
-
- <li><tt>index</tt> - Copy the Nth from the top object on the stack.</li>
-
- <li><tt>pop</tt> - Pop the top object on the stack.</li>
-
- <li><tt>roll</tt> - Shift the top N objects on the stack.</li>
-
- <li><tt>setpagedevice</tt> - Set the page header values according to the key/value dictionary on the stack.</li>
-
-</ul>
-
-<blockquote><b>Note:</b>
-
-<p><em>Never</em> use the unsupported <tt>dict</tt> or <tt>put</tt>
-operators in your option code. These operators are typically used in
-option code dating back to Level 1 PostScript printers, which did not
-support the simpler <tt><<</tt> or <tt>>></tt> operators.
-If you have old option code using <tt>dict</tt> or <tt>put</tt>, you can
-rewrite it very easily to use the newer <tt><<</tt> and
-<tt>>></tt> operators instead. For example, the following code
-to set the page size:</p>
-
-<style type='text/css'><!--
-PRE B {
- background: #000000;
- color: #ffffff;
- padding: 2px 5px;
-}
---></style>
-
-<pre class='command'>
-<b>1 dict dup</b> /PageSize [612 792] <b>put</b> setpagedevice
-</pre>
-
-<p>can be rewritten as:</p>
-
-<pre class='command'>
-<b><<</b> /PageSize [612 792] <b>>></b> setpagedevice
-</pre>
-
-</blockquote>
-
-
-<h3 class="title">Supported Page Device Attributes</h3>
-
-<p>Table 2 shows the supported page device attributes along with PostScript code examples.</p>
-
-<div class='table'>
-<table summary='Supported Page Device Attributes'>
-<caption>Table 2: <a name='TABLE_2'>Supported Page Device Attributes</a></caption>
-<thead>
-<tr>
- <th>Name(s)</th>
- <th>Type</th>
- <th>Description</th>
- <th>Example(s)</th>
-</tr>
-</thead>
-<tbody>
-<tr valign='top'>
- <td><tt>AdvanceDistance</tt></td>
- <td>Integer</td>
- <td>Specifies the number of points to advance roll media after printing.</td>
- <td><tt><</AdvanceDistance 18>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>AdvanceMedia</tt></td>
- <td>Integer</td>
- <td>Specifies when to advance the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page.</td>
- <td><tt><</AdvanceMedia 4>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>Collate</tt></td>
- <td>Boolean</td>
- <td>Specifies whether collated copies are required.</td>
- <td><tt><</Collate true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>CutMedia</tt></td>
- <td>Integer</td>
- <td>Specifies when to cut the media: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page.</td>
- <td><tt><</CutMedia 1>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>Duplex</tt></td>
- <td>Boolean</td>
- <td>Specifies whether 2-sided printing is required.</td>
- <td><tt><</Duplex true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>HWResolution</tt></td>
- <td>Integer Array</td>
- <td>Specifies the resolution of the page image in pixels per inch.</td>
- <td><tt><</HWResolution[1200 1200]>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>InsertSheet</tt></td>
- <td>Boolean</td>
- <td>Specifies whether to insert a blank sheet before the job.</td>
- <td><tt><</InsertSheet true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>Jog</tt></td>
- <td>Integer</td>
- <td>Specifies when to shift the media in the output bin: 0 = never, 1 = after the file, 2 = after the job, 3 = after the set, and 4 = after the page.</td>
- <td><tt><</Jog 2>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>LeadingEdge</tt></td>
- <td>Integer</td>
- <td>Specifies the leading edge of the media: 0 = top, 1 = right, 2 = bottom, 3 = left.</td>
- <td><tt><</LeadingEdge 0>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>ManualFeed</tt></td>
- <td>Boolean</td>
- <td>Specifies whether media should be drawn from the manual feed tray. Note: The <tt>MediaPosition</tt> attribute is preferred over the <tt>ManualFeed</tt> attribute.</td>
- <td><tt><</ManualFeed true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>MediaClass</tt></td>
- <td>String</td>
- <td>Specifies a named media.</td>
- <td><tt><</MediaClass (Invoices)>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>MediaColor</tt></td>
- <td>String</td>
- <td>Specifies the color of the media.</td>
- <td><tt><</MediaColor >>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>MediaPosition</tt></td>
- <td>Integer</td>
- <td>Specifies the tray or source of the media.</td>
- <td><tt><</MediaPosition 12>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>MediaType</tt></td>
- <td>String</td>
- <td>Specifies the general media type.</td>
- <td><tt><</MediaType (Glossy)>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>MediaWeight</tt></td>
- <td>Integer</td>
- <td>Specifies the media weight in grams per meter<sup>2</sup>.</td>
- <td><tt><</MediaWeight 100>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>MirrorPrint</tt></td>
- <td>Boolean</td>
- <td>Specifies whether to flip the output image horizontally.</td>
- <td><tt><</MirrorPrint true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>NegativePrint</tt></td>
- <td>Boolean</td>
- <td>Specifies whether to invert the output image.</td>
- <td><tt><</NegativePrint true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>NumCopies</tt></td>
- <td>Integer</td>
- <td>Specifies the number of copies to produce of each page.</td>
- <td><tt><</NumCopies 100>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>Orientation</tt></td>
- <td>Integer</td>
- <td>Specifies the orientation of the output: 0 = portrait, 1 = landscape rotated counter-clockwise, 2 = upside-down, 3 = landscape rotated clockwise.</td>
- <td><tt><</Orientation 3>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>OutputFaceUp</tt></td>
- <td>Boolean</td>
- <td>Specifies whether to place the media face-up in the output bin/tray.</td>
- <td><tt><</OutputFaceUp true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>OutputType</tt></td>
- <td>String</td>
- <td>Specifies the output type name.</td>
- <td><tt><</OutputType (Photo)>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>PageSize</tt></td>
- <td>Integer/Real Array</td>
- <td>Specifies the width and length/height of the page in points.</td>
- <td><tt><</PageSize[595 842]>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>Separations</tt></td>
- <td>Boolean</td>
- <td>Specifies whether to produce color separations.</td>
- <td><tt><</Separations true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>TraySwitch</tt></td>
- <td>Boolean</td>
- <td>Specifies whether to switch trays automatically.</td>
- <td><tt><</TraySwitch true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>Tumble</tt></td>
- <td>Boolean</td>
- <td>Specifies whether the back sides of pages are rotated 180 degrees.</td>
- <td><tt><</Tumble true>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsBorderlessScalingFactor</tt></td>
- <td>Real</td>
- <td>Specifies the amount to scale the page image dimensions.</td>
- <td><tt><</cupsBorderlessScalingFactor 1.01>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsColorOrder</tt></td>
- <td>Integer</td>
- <td>Specifies the order of colors: 0 = chunked, 1 = banded, 2 = planar.</td>
- <td><tt><</cupsColorOrder 0>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsColorSpace</tt></td>
- <td>Integer</td>
- <td>Specifies the page image colorspace: 0 = W, 1 = RGB, 2 = RGBA, 3 = K, 4 = CMY, 5 = YMC, 6 = CMYK, 7 = YMCK, 8 = KCMY, 9 = KCMYcm, 10 = GMCK, 11 = GMCS, 12 = White, 13 = Gold, 14 = Silver, 15 = CIE XYZ, 16 = CIE Lab, 17 = RGBW, 32 to 46 = CIE Lab (1 to 15 inks)</td>
- <td><tt><</cupsColorSpace 1 >>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsCompression</tt></td>
- <td>Integer</td>
- <td>Specifies a driver compression type/mode.</td>
- <td><tt><</cupsCompression 2>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsInteger0<br>
- ...<br>
- cupsInteger15</tt></td>
- <td>Integer</td>
- <td>Specifies driver integer values.</td>
- <td><tt><</cupsInteger11 1234>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsMarkerType</tt></td>
- <td>String</td>
- <td>Specifies the type of ink/toner to use.</td>
- <td><tt><</cupsMarkerType (Black+Color)>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsMediaType</tt></td>
- <td>Integer</td>
- <td>Specifies a numeric media type.</td>
- <td><tt><</cupsMediaType 999>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsPageSizeName</tt></td>
- <td>String</td>
- <td>Specifies the name of the page size.</td>
- <td><tt><</cupsPageSizeName (A4.Full)>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsPreferredBitsPerColor</tt></td>
- <td>Integer</td>
- <td>Specifies the preferred number of bits per color, typically 8 or 16.</td>
- <td><tt><</cupsPreferredBitsPerColor 16>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsReal0<br>
- ...<br>
- cupsReal15</tt></td>
- <td>Real</td>
- <td>Specifies driver real number values.</td>
- <td><tt><</cupsReal15 1.234>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsRenderingIntent</tt></td>
- <td>String</td>
- <td>Specifies the color rendering intent.</td>
- <td><tt><</cupsRenderingIntent (AbsoluteColorimetric)>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsRowCount</tt></td>
- <td>Integer</td>
- <td>Specifies the number of rows of raster data to print on each line for some drivers.</td>
- <td><tt><</cupsRowCount 24>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsRowFeed</tt></td>
- <td>Integer</td>
- <td>Specifies the number of rows to feed between passes for some drivers.</td>
- <td><tt><</cupsRowFeed 17>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsRowStep</tt></td>
- <td>Integer</td>
- <td>Specifies the number of lines between columns/rows on the print head for some drivers.</td>
- <td><tt><</cupsRowStep 2>>setpagedevice</tt></td>
-</tr>
-<tr valign='top'>
- <td><tt>cupsString0<br>
- ...<br>
- cupsString15</tt></td>
- <td>String</td>
- <td>Specifies driver string values.</td>
- <td><tt><</cupsString0(String Value)>>setpagedevice</tt></td>
-</tr>
-</tbody>
-</table></div>
-
-
-<h2 class='title'><a name='MEDIA'>Media Keywords</a></h2>
-
-<p>The CUPS media keywords allow drivers to specify alternate custom page
-size limits based on up to two options.</p>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMediaQualifier2'>cupsMediaQualifier2</a></h3>
-
-<p class='summary'>*cupsMediaQualifier2: MainKeyword</p>
-
-<p>This keyword specifies the second option to use for overriding the
-custom page size limits.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
-*cupsMediaQualifier2: InputSlot
-*cupsMediaQualifier3: Quality
-*cupsMaxSize .Manual.: "1000 1000"
-*cupsMinSize .Manual.: "100 100"
-*cupsMinSize .Manual.Photo: "200 200"
-*cupsMinSize ..Photo: "300 300"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMediaQualifier3'>cupsMediaQualifier3</a></h3>
-
-<p class='summary'>*cupsMediaQualifier3: MainKeyword</p>
-
-<p>This keyword specifies the third option to use for overriding the
-custom page size limits.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
-*cupsMediaQualifier2: InputSlot
-*cupsMediaQualifier3: Quality
-*cupsMaxSize .Manual.: "1000 1000"
-*cupsMinSize .Manual.: "100 100"
-*cupsMinSize .Manual.Photo: "200 200"
-*cupsMinSize ..Photo: "300 300"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMinSize'>cupsMinSize</a></h3>
-
-<p class='summary'>*cupsMinSize .Qualifier2.Qualifier3: "width length"<br>
-*cupsMinSize .Qualifier2.: "width length"<br>
-*cupsMinSize ..Qualifier3: "width length"</p>
-
-<p>This keyword specifies alternate minimum custom page sizes in points.
-The <a href='#cupsMediaQualifier2'><tt>cupsMediaQualifier2</tt></a> and
-<a href='#cupsMediaQualifier3'><tt>cupsMediaQualifier3</tt></a> keywords
-are used to identify options to use for matching.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
-*cupsMediaQualifier2: InputSlot
-*cupsMediaQualifier3: Quality
-*cupsMaxSize .Manual.: "1000 1000"
-*cupsMinSize .Manual.: "100 100"
-*cupsMinSize .Manual.Photo: "200 200"
-*cupsMinSize ..Photo: "300 300"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMaxSize'>cupsMaxSize</a></h3>
-
-<p class='summary'>*cupsMaxSize .Qualifier2.Qualifier3: "width length"<br>
-*cupsMaxSize .Qualifier2.: "width length"<br>
-*cupsMaxSize ..Qualifier3: "width length"</p>
-
-<p>This keyword specifies alternate maximum custom page sizes in points.
-The <a href='#cupsMediaQualifier2'><tt>cupsMediaQualifier2</tt></a> and
-<a href='#cupsMediaQualifier3'><tt>cupsMediaQualifier3</tt></a> keywords
-are used to identify options to use for matching.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify alternate custom page size limits based on InputSlot and Quality</em>
-*cupsMediaQualifier2: InputSlot
-*cupsMediaQualifier3: Quality
-*cupsMaxSize .Manual.: "1000 1000"
-*cupsMinSize .Manual.: "100 100"
-*cupsMinSize .Manual.Photo: "200 200"
-*cupsMinSize ..Photo: "300 300"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsPageSizeCategory'>cupsPageSizeCategory</a></h3>
-
-<p class="summary">*cupsPageSizeCategory name/text: "name name2 ... nameN"</p>
-
-<p>This keyword lists related paper size names that should be grouped together in the Print or Page Setup dialogs. The "name" portion of the keyword specifies the root/default size for the grouping. On macOS the grouped paper sizes are shown in a submenu of the main paper size. When omitted, sizes with the same dimensions are automatically grouped together, for example "Letter" and "Letter.Borderless".</p>
-
-<p>Example:</p>
-
-<pre class="command">
-<em>*% Specify grouping of borderless/non-borderless sizes</em>
-*cupsPageSizeCategory Letter/US Letter: "Letter Letter.Borderless"
-*cupsPageSizeCategory A4/A4: "A4 A4.Borderless"
-</pre>
-
-
-<h2 class='title'><a name='ATTRIBUTES'>General Attributes</a></h2>
-
-<h3 class="title"><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsBackSide'>cupsBackSide</a></h3>
-
-<p class='summary'>*cupsBackSide: keyword</p>
-
-<p>This keyword requests special handling of the back side of pages
-when doing duplexed (2-sided) output. <a href='#TABLE_1'>Table 1</a>
-shows the supported keyword values for this keyword and their effect
-on the raster data sent to your driver. For example, when <tt>cupsBackSide</tt>
-is <code>Rotated</code> and <tt>Tumble</tt> is <tt>false</tt>, your driver
-will receive print data starting at the bottom right corner of the page, with
-each line going right-to-left instead of left-to-right. The default value is
-<code>Normal</code>.</p>
-
-<blockquote><b>Note:</b>
-
-<p><tt>cupsBackSide</tt> replaces the older <tt>cupsFlipDuplex</tt>
-keyword - if <tt>cupsBackSide</tt> is specified, <tt>cupsFlipDuplex</tt>
-will be ignored.</p>
-
-</blockquote>
-
-<div class='table'>
-<table width='80%' summary='Back Side Raster Coordinate System'>
-<caption>Table 1: <a name='TABLE_1'>Back Side Raster Coordinate System</a></caption>
-<thead>
-<tr>
- <th>cupsBackSide</th>
- <th>Tumble Value</th>
- <th>Image Presentation</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <td><code>Normal</code></td>
- <td><code>false</code></td>
- <td>Left-to-right, top-to-bottom</td>
-</tr>
-<tr>
- <td><code>Normal</code></td>
- <td><code>true</code></td>
- <td>Left-to-right, top-to-bottom</td>
-</tr>
-<tr>
- <td><code>ManualTumble</code></td>
- <td><code>false</code></td>
- <td>Left-to-right, top-to-bottom</td>
-</tr>
-<tr>
- <td><code>ManualTumble</code></td>
- <td><code>true</code></td>
- <td>Right-to-left, bottom-to-top</td>
-</tr>
-<tr>
- <td><code>Rotated</code></td>
- <td><code>false</code></td>
- <td>Right-to-left, bottom-to-top</td>
-</tr>
-<tr>
- <td><code>Rotated</code></td>
- <td><code>true</code></td>
- <td>Right-to-left, top-to-bottom</td>
-</tr>
-<tr>
- <td><code>Flipped</code> *</td>
- <td><code>false</code></td>
- <td>Left-to-right, bottom-to-top</td>
-</tr>
-<tr>
- <td><code>Flipped</code> *</td>
- <td><code>true</code></td>
- <td>Right-to-left, top-to-bottom</td>
-</tr>
-</tbody>
-</table>
-</div>
-
-<p><em>* - Not supported in macOS 10.5.x and earlier</em></p>
-
-<div class='figure'><table summary='Back side images'>
-<caption>Figure 1: Back side images</caption>
-<tr><td><img src='../images/raster.png' width='624' height='448' alt='Back side images'></td></tr>
-</table></div>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Flip the page image for the back side of duplexed output</em>
-*cupsBackSide: Flipped
-
-<em>*% Rotate the page image for the back side of duplexed output</em>
-*cupsBackSide: Rotated
-</pre>
-
-<p>Also see the related <a href='#APDuplexRequiresFlippedMargin'><tt>APDuplexRequiresFlippedMargin</tt></a>
-keyword.</p>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsCommands'>cupsCommands</a></h3>
-
-<p class='summary'>*cupsCommands: "name name2 ... nameN"</p>
-
-<p>This string keyword specifies the commands that are supported by the
-CUPS command file filter for this device. The command names are separated
-by whitespace.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify the list of commands we support</em>
-*cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels com.vendor.foo"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsEvenDuplex'>cupsEvenDuplex</a></h3>
-
-<p class='summary'>*cupsEvenDuplex: boolean</p>
-
-<p>This boolean keyword notifies the RIP filters that the
-destination printer requires an even number of pages when 2-sided
-printing is selected. The default value is <code>false</code>.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Always send an even number of pages when duplexing</em>
-*cupsEvenDuplex: true
-</pre>
-
-
-<h3 class="title"><a name='cupsFax'>cupsFax</a></h3>
-
-<p class='summary'>*cupsFax: boolean</p>
-
-<p>This boolean keyword specifies whether the PPD defines a facsimile device. The default is <tt>false</tt>.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*cupsFax: true
-</pre>
-
-
-<h3 class="title"><a name='cupsFilter'>cupsFilter</a></h3>
-
-<p class='summary'>*cupsFilter: "source/type cost program"</p>
-
-<p>This string keyword provides a conversion rule from the
-given source type to the printer's native format using the
-filter "program". If a printer supports the source type directly,
-the special filter program "-" may be specified.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Standard raster printer driver filter</em>
-*cupsFilter: "application/vnd.cups-raster 100 rastertofoo"
-
-<em>*% Plain text filter</em>
-*cupsFilter: "text/plain 10 texttofoo"
-
-<em>*% Pass-through filter for PostScript printers</em>
-*cupsFilter: "application/vnd.cups-postscript 0 -"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.5</span><a name='cupsFilter2'>cupsFilter2</a></h3>
-
-<p class='summary'>*cupsFilter2: "source/type destination/type cost program"</p>
-
-<p>This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified. The destination type is automatically created as needed and is passed to the filters and backend as the FINAL_CONTENT_TYPE value.</p>
-
-<blockquote><b>Note:</b>
-
-<p>The presence of a single <code>cupsFilter2</code> keyword in the PPD file will hide any <code>cupsFilter</code> keywords from the CUPS scheduler. When using <code>cupsFilter2</code> to provide filters specific for CUPS 1.5 and later, provide a <code>cupsFilter2</code> line for every filter and a <code>cupsFilter</code> line for each filter that is compatible with older versions of CUPS.</p>
-
-</blockquote>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Standard raster printer driver filter</em>
-*cupsFilter2: "application/vnd.cups-raster application/vnd.foo 100 rastertofoo"
-
-<em>*% Plain text filter</em>
-*cupsFilter2: "text/plain application/vnd.foo 10 texttofoo"
-
-<em>*% Pass-through filter for PostScript printers</em>
-*cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 2.3</span><a name='cupsFinishingTemplate'>cupsFinishingTemplate</a></h3>
-
-<p class='summary'>*cupsFinishingTemplate name/text: ""</p>
-
-<p>This option keyword specifies a finishing template (preset) that applies zero or more finishing processes to a job. Unlike <a href="#cupsIPPFinishings"><tt>cupsIPPFinishings</tt></a>, only one template can be selected by the user. PPD files also generally apply a constraint between this option and other finishing options like <tt>Booklet</tt>, <tt>FoldType</tt>, <tt>PunchMedia</tt>, and <tt>StapleWhen</tt>.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*cupsFinishingTemplate none/None: ""
-*cupsFinishingTemplate fold/Letter Fold: ""
-*cupsFinishingTemplate punch/2/3-Hole Punch: ""
-*cupsFinishingTemplate staple/Corner Staple: ""
-*cupsFinishingTemplate staple-dual/Double Staple: ""
-*cupsFinishingTemplate staple-and-fold/Corner Staple and Letter Fold: ""
-*cupsFinishingTemplate staple-and-punch/Corner Staple and 2/3-Hole Punch: ""
-</pre>
-
-
-<h3 class="title"><span class='info'>Deprecated</span><a name='cupsFlipDuplex'>cupsFlipDuplex</a></h3>
-
-<p class='summary'>*cupsFlipDuplex: boolean</p>
-
-<p>Due to implementation differences between macOS and Ghostscript,
-the <tt>cupsFlipDuplex</tt> keyword is deprecated. Instead, use
-the <a href='#cupsBackSide'><tt>cupsBackSide</tt></a> keyword to specify
-the coordinate system (pixel layout) of the page data on the back side of
-duplex pages.</p>
-
-<p>The value <code>true</code> maps to a <tt>cupsBackSide</tt> value
-of <code>Rotated</code> on macOS and <code>Flipped</code> with
-Ghostscript.</p>
-
-<p>The default value is <code>false</code>.</p>
-
-<blockquote><b>Note:</b>
-
-<p>macOS drivers that previously used
-<tt>cupsFlipDuplex</tt> may wish to provide both the old and
-new keywords for maximum compatibility, for example:</p>
-
-<pre class='command'>
-*cupsBackSide: Rotated
-*cupsFlipDuplex: true
-</pre>
-
-<p>Similarly, drivers written for other operating systems using
-Ghostscript can use:</p>
-
-<pre class='command'>
-*cupsBackSide: Flipped
-*cupsFlipDuplex: true
-</pre></blockquote>
-
-
-<h3 class="title"><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsIPPFinishings'>cupsIPPFinishings</a></h3>
-
-<p class='summary'>*cupsIPPFinishings number/text: "*Option Choice ..."</p>
-
-<p>This keyword defines a mapping from IPP <code>finishings</code>
-values to PPD options and choices.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*cupsIPPFinishings 4/staple: "*StapleLocation SinglePortrait"
-*cupsIPPFinishings 5/punch: "*PunchMedia Yes *PunchLocation LeftSide"
-*cupsIPPFinishings 20/staple-top-left: "*StapleLocation SinglePortrait"
-*cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsIPPReason'>cupsIPPReason</a></h3>
-
-<p class='summary'>*cupsIPPReason reason/Reason Text: "optional URIs"</p>
-
-<p>This optional keyword maps custom
-<code>printer-state-reasons</code> keywords that are generated by
-the driver to human readable text. The optional URIs string
-contains zero or more URIs separated by a newline. Each URI can
-be a CUPS server absolute path to a help file under the
-scheduler's <code>DocumentRoot</code> directory, a full HTTP URL
-("http://www.domain.com/path/to/help/page.html"), or any other
-valid URI which directs the user at additional information
-concerning the condition that is being reported.</p>
-
-<p>Since the reason text is limited to 80 characters by the PPD specification, longer text strings can be included by URI-encoding the text with the "text" scheme, for example "text:some%20text". Multiple <code>text</code> URIs are combined by the <tt>ppdLocalizeIPPReason</tt> into a single string that can be displayed to the user.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Map com.vendor-error to text but no page</em>
-*cupsIPPReason com.vendor-error/A serious error occurred: ""
-
-<em>*% Map com.vendor-error to more than 80 characters of text but no page</em>
-*cupsIPPReason com.vendor-error/A serious error occurred: "text:Now%20is%20the%20time
-text:for%20all%20good%20men%20to%20come%20to%20the%20aid%20of%20their%20country."
-
-<em>*% Map com.vendor-error to text and a local page</em>
-*cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html"
-
-<em>*% Map com.vendor-error to text and a remote page</em>
-*cupsIPPReason com.vendor-error/A serious error occurred: "http://www.vendor.com/help"
-
-<em>*% Map com.vendor-error to text and a local, Apple help book, and remote page</em>
-*APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
-*cupsIPPReason com.vendor-error/A serious error occurred: "/help/com.vendor/error.html
-help:anchor='com.vendor-error'%20bookID=Vendor%20Help
-http://www.vendor.com/help"
-*End
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.5</span><a name='cupsIPPSupplies'>cupsIPPSupplies</a></h3>
-
-<p class='summary'>*cupsIPPSupplies: boolean</p>
-
-<p>This keyword tells the IPP backend whether it should report the current marker-xxx supply attribute values. The default value is <code>True</code>.
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Do not use IPP marker-xxx attributes to report supply levels</em>
-*cupsIPPSupplies: False
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsJobAccountId'>cupsJobAccountId</a></h3>
-
-<p class='summary'>*cupsJobAccountId: boolean</p>
-
-<p>This keyword defines whether the printer accepts the job-account-id IPP attribute.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify the printer accepts the job-account-id IPP attribute.</em>
-*cupsJobAccountId: True
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsJobAccountingUserId'>cupsJobAccountingUserId</a></h3>
-
-<p class='summary'>*cupsJobAccountingUserId: boolean</p>
-
-<p>This keyword defines whether the printer accepts the job-accounting-user-id IPP attribute.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify the printer accepts the job-accounting-user-id IPP attribute.</em>
-*cupsJobAccountingUserId: True
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsJobPassword'>cupsJobPassword</a></h3>
-
-<p class='summary'>*cupsJobPassword: "format"</p>
-
-<p>This keyword defines the format of the "job-password" IPP attribute, if supported by the printer. The following format characters are supported:</p>
-
-<ul>
- <li><code>1</code>: US ASCII digits.</li>
- <li><code>A</code>: US ASCII letters.</li>
- <li><code>C</code>: US ASCII letters, numbers, and punctuation.</li>
- <li><code>.</code>: Any US ASCII printable character (0x20 to 0x7e).</li>
- <li><code>N</code>: Any Unicode digit character.</li>
- <li><code>U</code>: Any Unicode letter character.</li>
- <li><code>*</code>: Any Unicode (utf-8) character.</li>
-</ul>
-
-<p>The format characters are repeated to indicate the length of the
-password string. For example, "1111" indicated a 4-digit US ASCII PIN code.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify the printer supports 4-digit PIN codes.</em>
-*cupsJobPassword: "1111"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.2/macOS 10.5</span><a name='cupsLanguages'>cupsLanguages</a></h3>
-
-<p class='summary'>*cupsLanguages: "locale list"</p>
-
-<p>This keyword describes which language localizations are
-included in the PPD. The "locale list" string is a space-delimited
-list of locale names ("en", "en_US", "fr_CA", etc.)</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify Canadian, UK, and US English, and Canadian and French French</em>
-*cupsLanguages: "en_CA en_UK en_US fr_CA fr_FR"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsMandatory'>cupsMandatory</a></h3>
-
-<p class='summary'>*cupsMandatory: "attribute1 attribute2 ... attributeN"</p>
-
-<p>This keyword defines a list of IPP attributes that must be provided when submitting a print job creation request.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify that the user must supply a job-password</em>
-*cupsMandatory: "job-password job-password-encryption"
-</pre>
-
-
-<h3 class="title"><a name='cupsManualCopies'>cupsManualCopies</a></h3>
-
-<p class='summary'>*cupsManualCopies: boolean</p>
-
-<p>This boolean keyword notifies the RIP filters that the
-destination printer does not support copy generation in
-hardware. The default value is <code>false</code>.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Tell the RIP filters to generate the copies for us</em>
-*cupsManualCopies: true
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMarkerName'>cupsMarkerName</a></h3>
-
-<p class='summary'>*cupsMarkerName/Name Text: ""</p>
-
-<p>This optional keyword maps <code>marker-names</code> strings that are
-generated by the driver to human readable text.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Map cyanToner to "Cyan Toner"</em>
-*cupsMarkerName cyanToner/Cyan Toner: ""
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMarkerNotice'>cupsMarkerNotice</a></h3>
-
-<p class='summary'>*cupsMarkerNotice: "disclaimer text"</p>
-
-<p>This optional keyword provides disclaimer text for the supply level
-information provided by the driver, typically something like "supply levels
-are approximate".</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*cupsMarkerNotice: "Supply levels are approximate."
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.6/macOS 10.8</span><a name='cupsMaxCopies'>cupsMaxCopies</a></h3>
-
-<p class='summary'>*cupsMaxCopies: integer</p>
-
-<p>This integer keyword notifies the filters that the destination printer supports up to N copies in hardware. The default value is <code>9999</code>.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Tell the RIP filters we can do up to 99 copies</em>
-*cupsMaxCopies: 99
-</pre>
-
-
-<h3 class="title"><a name='cupsModelNumber'>cupsModelNumber</a></h3>
-
-<p class='summary'>*cupsModelNumber: number</p>
-
-<p>This integer keyword specifies a printer-specific model
-number. This number can be used by a filter program to adjust
-the output for a specific model of printer.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify an integer for a driver-specific model number</em>
-*cupsModelNumber: 1234
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsPJLCharset'>cupsPJLCharset</a></h3>
-
-<p class='summary'>*cupsPJLCharset: "ISO character set name"</p>
-
-<p>This string keyword specifies the character set that is used
-for strings in PJL commands. If not specified, US-ASCII is
-assumed.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify UTF-8 is used in PJL strings</em>
-*cupsPJLCharset: "UTF-8"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsPJLDisplay'>cupsPJLDisplay</a></h3>
-
-<p class='summary'>*cupsPJLDisplay: "what"</p>
-
-<p>This optional keyword specifies which command is used to display the
-job ID, name, and user on the printer's control panel. "What" is either "none"
-to disable this functionality, "job" to use "@PJL JOB DISPLAY", or "rdymsg"
-to use "@PJL RDYMSG DISPLAY". The default is "job".</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Display job information using @PJL SET RDYMSG DISPLAY="foo"</em>
-*cupsPJLDisplay: "rdymsg"
-
-<em>*% Display job information display</em>
-*cupsPJLDisplay: "none"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.2/macOS 10.5</span><a name='cupsPortMonitor'>cupsPortMonitor</a></h3>
-
-<p class='summary'>*cupsPortMonitor urischeme/Descriptive Text: "port monitor"</p>
-
-<p>This string keyword specifies printer-specific "port
-monitor" filters that may be used with the printer. The CUPS
-scheduler also looks for the <tt>Protocols</tt> keyword to see
-if the <tt>BCP</tt> or <tt>TBCP</tt> protocols are supported. If
-so, the corresponding port monitor ("bcp" and "tbcp",
-respectively) is listed in the printer's
-<tt>port-monitor-supported</tt> keyword.</p>
-
-<p>The "urischeme" portion of the keyword specifies the URI scheme
-that this port monitor should be used for. Typically this is used to
-pre-select a particular port monitor for each type of connection that
-is supported by the printer. The "port monitor" string can be "none"
-to disable the port monitor for the given URI scheme.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Specify a PostScript printer that supports the TBCP protocol</em>
-*Protocols: TBCP PJL
-
-<em>*% Specify that TBCP should be used for socket connections but not USB</em>
-*cupsPortMonitor socket/AppSocket Printing: "tbcp"
-*cupsPortMonitor usb/USB Printing: "none"
-
-<em>*% Specify a printer-specific port monitor for an Epson USB printer</em>
-*cupsPortMonitor usb/USB Status Monitor: "epson-usb"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsPreFilter'>cupsPreFilter</a></h3>
-
-<p class='summary'>*cupsPreFilter: "source/type cost program"</p>
-
-<p>This string keyword provides a pre-filter rule. The pre-filter
-program will be inserted in the conversion chain immediately
-before the filter that accepts the given MIME type.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% PDF pre-filter</em>
-*cupsPreFilter: "application/pdf 100 mypdfprefilter"
-
-<em>*% PNG pre-filter</em>
-*cupsPreFilter: "image/png 0 mypngprefilter"
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.5</span><a name='cupsPrintQuality'>cupsPrintQuality</a></h3>
-
-<p class='summary'>*cupsPrintQuality keyword/text: "code"</p>
-
-<p>This UI keyword defines standard print qualities that directly map from the IPP "print-quality" job template keyword. Standard keyword values are "Draft", "Normal", and "High" which are mapped from the IPP "print-quality" values 3, 4, and 5 respectively. Each <code>cupsPrintQuality</code> option typically sets output mode and resolution parameters in the page device dictionary, eliminating the need for separate (and sometimes confusing) output mode and resolution options.</p>
-
-<blockquote><b>Note:</b>
-
-<p>Unlike all of the other keywords defined in this document, <code>cupsPrintQuality</code> is a UI keyword that MUST be enclosed inside the PPD <code>OpenUI</code> and <code>CloseUI</code> keywords.</p>
-
-</blockquote>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*OpenUI *cupsPrintQuality/Print Quality: PickOne
-*OrderDependency: 10 AnySetup *cupsPrintQuality
-*DefaultcupsPrintQuality: Normal
-*cupsPrintQuality Draft/Draft: "code"
-*cupsPrintQuality Normal/Normal: "code"
-*cupsPrintQuality High/Photo: "code"
-*CloseUI: *cupsPrintQuality
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.5</span><a name='cupsSingleFile'>cupsSingleFile</a></h3>
-
-<p class='summary'>*cupsSingleFile: Boolean</p>
-
-<p>This boolean keyword tells the scheduler whether to print multiple files in a job together or singly. The default is "False" which uses a single instance of the backend for all files in the print job. Setting this keyword to "True" will result in separate instances of the backend for each file in the print job.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-<em>*% Send all print data to a single backend</em>
-*cupsSingleFile: False
-
-<em>*% Send each file using a separate backend</em>
-*cupsSingleFile: True
-</pre>
-
-
-<h3 class="title"><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsSNMPSupplies'>cupsSNMPSupplies</a></h3>
-
-<p class='summary'>*cupsSNMPSupplies: boolean</p>
-
-<p>This keyword tells the standard network backends whether they should query
-the standard SNMP Printer MIB OIDs for supply levels. The default value is
-<code>True</code>.
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Do not use SNMP queries to report supply levels</em>
-*cupsSNMPSupplies: False
-</pre>
-
-
-<h3 class="title"><a name='cupsVersion'>cupsVersion</a></h3>
-
-<p class='summary'>*cupsVersion: major.minor</p>
-
-<p>This required keyword describes which version of the CUPS
-PPD file extensions was used. Currently it must be the string
-"1.0", "1.1", "1.2", "1.3", "1.4", "1.5", or "1.6".</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Specify a CUPS 1.2 driver</em>
-*cupsVersion: "1.2"
-</pre>
-
-
-<h3 class="title"><span class="info">CUPS 1.6/macOS 10.8</span><a name="JCLToPDFInterpreter">JCLToPDFInterpreter</a></h3>
-
-<p class="summary">*JCLToPDFInterpreter: "JCL"</p>
-
-<p>This keyword provides the JCL command to insert a PDF job file into a printer-ready data stream. The JCL command is added after the <tt>JCLBegin</tt> value and any commands for JCL options in the PPD file.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% PJL command to start the PDF interpreter</em>
-*JCLToPDFInterpreter: "@PJL ENTER LANGUAGE = PDF<0A>"
-</pre>
-
-
-<h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
-
-<h3 class="title"><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
-
-<p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
-
-<p>This keyword defines additional option panes that are displayed in the
-print dialog. Each keyword adds one or more option panes. See the "OutputBinsPDE"
-example and <a href='http://developer.apple.com/qa/qa2004/qa1352.html'>Apple
-Technical Q&A QA1352</a> for information on writing your own print dialog
-plug-ins.</p>
-
-<blockquote><b>Note:</b>
-
-<p>Since 2010, AirPrint has enabled the printing of full quality photos and
-documents from the Mac without requiring driver software. Starting with macOS
-10.12, system level security features prevent print dialog plug-ins from being
-loaded into applications that have enabled the library validation security
-feature. As of macOS 10.14 the <code>APDialogExtension</code> attribute used to
-create macOS print drivers is deprecated. All new printer models should support
-AirPrint moving forward.</p>
-
-</blockquote>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Add two panes for finishing and driver options
-*APDialogExtension: "/Library/Printers/vendor/finishing.plugin"
-*APDialogExtension: "/Library/Printers/vendor/options.plugin"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.4</span><a name='APDuplexRequiresFlippedMargin'>APDuplexRequiresFlippedMargin</a></h3>
-
-<p class='summary'>*APDuplexRequiresFlippedMargin: boolean</p>
-
-<p>This boolean keyword notifies the RIP filters that the
-destination printer requires the top and bottom margins of the
-<tt>ImageableArea</tt> to be swapped for the back page. The
-default is <tt>true</tt> when <tt>cupsBackSide</tt> is <tt>Flipped</tt>
-and <tt>false</tt> otherwise. <a href='#TABLE_2'>Table 2</a> shows how
-<tt>APDuplexRequiresFlippedMargin</tt> interacts with <tt>cupsBackSide</tt>
-and the <tt>Tumble</tt> page attribute.</p>
-
-<div class='table'>
-<table width='80%' summary='Margin Flipping Modes'>
-<caption>Table 2: <a name='TABLE_2'>Margin Flipping Modes</a></caption>
-<thead>
-<tr>
- <th>APDuplexRequiresFlippedMargin</th>
- <th>cupsBackSide</th>
- <th>Tumble Value</th>
- <th>Margins</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <td>false</td>
- <td>any</td>
- <td>any</td>
- <td>Normal</td>
-</tr>
-<tr>
- <td>any</td>
- <td>Normal</td>
- <td>any</td>
- <td>Normal</td>
-</tr>
-<tr>
- <td>true</td>
- <td>ManualDuplex</td>
- <td>false</td>
- <td>Normal</td>
-</tr>
-<tr>
- <td>true</td>
- <td>ManualDuplex</td>
- <td>true</td>
- <td>Flipped</td>
-</tr>
-<tr>
- <td>true</td>
- <td>Rotated</td>
- <td>false</td>
- <td>Flipped</td>
-</tr>
-<tr>
- <td>true</td>
- <td>Rotated</td>
- <td>true</td>
- <td>Normal</td>
-</tr>
-<tr>
- <td>true or unspecified</td>
- <td>Flipped</td>
- <td>any</td>
- <td>Flipped</td>
-</tr>
-</tbody>
-</table></div>
-
-<p>Example:</p>
-
-<pre class='command'>
-<em>*% Rotate the back side images</em>
-*cupsBackSide: Rotated
-
-<em>*% Don't swap the top and bottom margins for the back side</em>
-*APDuplexRequiresFlippedMargin: false
-</pre>
-
-<p>Also see the related <a href='#cupsBackSide'><tt>cupsBackSide</tt></a>
-keyword.</p>
-
-
-<h3 class="title"><a name='APHelpBook'>APHelpBook</a></h3>
-
-<p class='summary'>*APHelpBook: "bundle URL"</p>
-
-<p>This string keyword specifies the Apple help book bundle to use when
-looking up IPP reason codes for this printer driver. The
-<a href='#cupsIPPReason'><tt>cupsIPPReason</tt></a> keyword maps
-"help" URIs to this file.</p>
-
-<p>Example:</p>
-
-<pre class='command'>
-*APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.6</span><a name='APICADriver'>APICADriver</a></h3>
-
-<p class='summary'>*APICADriver: boolean</p>
-
-<p>This keyword specifies whether the device has a matching Image Capture
-Architecture (ICA) driver for scanning. The default is <tt>False</tt>.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*APICADriver: True
-*APScanAppBundleID: "com.apple.ImageCaptureApp"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.3</span><a name='APPrinterIconPath'>APPrinterIconPath</a></h3>
-
-<p class='summary'>*APPrinterIconPath: "/Library/Printers/vendor/filename.icns"</p>
-
-<p>This keyword defines the location of a printer icon file to use when
-displaying the printer. The file must be in the Apple icon format.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Apple icon file
-*APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.4</span><a name='APPrinterLowInkTool'>APPrinterLowInkTool</a></h3>
-
-<p class='summary'>*APPrinterLowInkTool: "/Library/Printers/vendor/program"</p>
-
-<p>This keyword defines an program that checks the ink/toner/marker levels
-on a printer, returning an XML document with those levels. See the "InkTool"
-example and
-<a href='http://developer.apple.com/technotes/tn2005/tn2144.html'>Apple
-Technical Note TN2144</a> for more information.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Use a vendor monitoring program
-*APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.5</span><a name='APPrinterPreset'>APPrinterPreset</a></h3>
-
-<p class='summary'>*APPrinterPreset name/text: "*Option Choice ..."</p>
-
-<p>This keyword defines presets for multiple options that show up
-in the print dialog of applications (such as iPhoto) that set the job
-style hint to <tt>NSPrintPhotoJobStyleHint</tt>. Each preset maps to one or
-more pairs of PPD options and choices as well as providing key/value data for
-the application. The following standard preset names are currently defined:</p>
-
-<ul>
-
- <li><code>General_with_Paper_Auto-Detect</code>; Normal quality general printing with auto-detected media.</li>
-
- <li><code>General_with_Paper_Auto-Detect_-_Draft</code>; Draft quality general printing with auto-detected media.</li>
-
- <li><code>General_on_Plain_Paper</code>; Normal quality general printing on plain paper.</li>
-
- <li><code>General_on_Plain_Paper_-_Draft</code>; Draft quality general printing on plain paper.</li>
-
- <li><code>Photo_with_Paper_Auto-Detect</code>; Normal quality photo printing with auto-detected media.</li>
-
- <li><code>Photo_with_Paper_Auto-Detect_-_Fine</code>; High quality photo printing with auto-detected media.</li>
-
- <li><code>Photo_on_Plain_Paper</code>; Normal quality photo printing on plain paper.</li>
-
- <li><code>Photo_on_Plain_Paper_-_Fine</code>; High quality photo printing on plain paper.</li>
-
- <li><code>Photo_on_Photo_Paper</code>; Normal quality photo printing on glossy photo paper.</li>
-
- <li><code>Photo_on_Photo_Paper_-_Fine</code>; High quality photo printing on glossy photo paper.</li>
-
- <li><code>Photo_on_Matte_Paper</code>; Normal quality photo printing on matte paper.</li>
-
- <li><code>Photo_on_Matte_Paper_-_Fine</code>; High quality photo printing on matte paper.</li>
-
-</ul>
-
-<p>The value string consists of pairs of keywords, either an option name and
-choice (*MainKeyword OptionKeyword) or a preset identifier and value
-(com.apple.print.preset.foo value). The following preset identifiers are currently used:</p>
-
-<ul>
-
- <li><code>com.apple.print.preset.graphicsType</code>; specifies the type of printing used for this printing - "General" for general purpose printing and "Photo" for photo printing.</li>
-
- <li><code>com.apple.print.preset.media-front-coating</code>; specifies the media type selected by this preset - "none" (plain paper), "glossy", "high-gloss", "semi-gloss", "satin", "matte", and "autodetect".</li>
-
- <li><code>com.apple.print.preset.output-mode</code>; specifies the output mode for this preset - "color" (default for color printers) or "monochrome" (grayscale, default for B&W printers).</li>
-
- <li><code>com.apple.print.preset.quality</code>; specifies the overall print quality selected by this preset - "low" (draft), "mid" (normal), or "high".</li>
-
-</ul>
-
-<p>Presets, like options, can also be localized in multiple languages.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*APPrinterPreset Photo_on_Photo_Paper/Photo on Photo Paper: "
- *MediaType Glossy
- *ColorModel RGB
- *Resolution 300dpi
- com.apple.print.preset.graphicsType Photo
- com.apple.print.preset.quality mid
- com.apple.print.preset.media-front-coating glossy"
-*End
-*fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: ""
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.3</span><a name='APPrinterUtilityPath'>APPrinterUtilityPath</a></h3>
-
-<p class='summary'>*APPrinterPrinterUtilityPath: "/Library/Printers/vendor/filename.app"</p>
-
-<p>This keyword defines a GUI application that can be used to do printer
-maintenance functions such as cleaning the print head(s). See ... for more
-information.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*% Define the printer utility application
-*APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app"
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.6</span><a name='APScannerOnly'>APScannerOnly</a></h3>
-
-<p class='summary'>*APScannerOnly: boolean</p>
-
-<p>This keyword specifies whether the device has scanning but no printing
-capabilities. The default is <tt>False</tt>.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*APICADriver: True
-*APScannerOnly: True
-</pre>
-
-
-<h3 class="title"><span class='info'>macOS 10.3</span><a name='APScanAppBundleID'>APScanAppBundleID</a></h3>
-
-<p class='summary'>*APScanAppBundleID: "bundle ID"</p>
-
-<p>This keyword defines the application to use when scanning pages from
-the device.</p>
-
-<p>Examples:</p>
-
-<pre class='command'>
-*APICADriver: True
-*APScanAppBundleID: "com.apple.ImageCaptureApp"
-</pre>
-
-
-<h2 class='title'><a name='HISTORY'>Change History</a></h2>
-
-<h3 class="title">Changes in CUPS 2.3</h3>
-
-<ul>
-
- <li>Added <a href="#cupsFinishingTemplate"><tt>cupsFinishingTemplate</tt></a> option.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.7</h3>
-
-<ul>
-
- <li>Added <a href="#cupsJobAccountId"><tt>cupsJobAccountId</tt></a>,
- <a href="#cupsJobAccountingUserId"><tt>cupsJobAccountingUserId</tt></a>,
- <a href="#cupsJobPassword"><tt>cupsJobPassword</tt></a>,
- <a href="#cupsMandatory"><tt>cupsMandatory</tt></a> keywords.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.6</h3>
-
-<ul>
-
- <li>Added <a href="#cupsPageSizeCategory"><tt>cupsPageSizeCategory</tt></a> keyword (originally defined in CUPS 1.4).</li>
-
- <li>Added <a href="#cupsMaxCopies"><tt>cupsMaxCopies</tt></a> keyword.</li>
-
- <li>Documented <a href="#JCLToPDFInterpreter"><tt>JCLToPDFInterpreter</tt></a> keyword.</li>
-
- <li>Updated <a href="#cupsVersion"><tt>cupsVersion</tt></a> keyword documentation to list all current releases of CUPS.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.5</h3>
-
-<ul>
-
- <li>Changes all instances of PPD attributes to PPD keywords, to be consistent with the parent specification from Adobe.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.4.5</h3>
-
-<ul>
-
- <li>Added <a href='#cupsPrintQuality'><tt>cupsPrintQuality</tt></a> UI keyword.</li>
-
- <li>Added new properties and values for the <a href='#APPrinterPreset'><tt>APPrinterPreset</tt></a> keyword.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.4</h3>
-
-<ul>
-
- <li>Added <a href='#APICADriver'><tt>APICADriver</tt></a>
- keyword.</li>
-
- <li>Added <a href='#cupsCommands'><tt>cupsCommands</tt></a>
- keyword.</li>
-
- <li>Added <a href='#cupsMarkerName'><tt>cupsMarkerName</tt></a>
- keyword.</li>
-
- <li>Added <a href='#cupsMarkerNotice'><tt>cupsMarkerNotice</tt></a>
- keyword.</li>
-
- <li>Added <a href='#cupsPJLDisplay'><tt>cupsPJLDisplay</tt></a>
- keyword.</li>
-
- <li>Added <a href='#cupsSNMPSupplies'><tt>cupsSNMPSupplies</tt></a>
- keyword.</li>
-
- <li>Added <a href='#cupsUIResolver'><tt>cupsUIResolver</tt></a> and
- <a href='#cupsUIConstraints'><tt>cupsUIConstraints</tt></a>
- keywords.</li>
-
- <li>Added
- <a href='#cupsMediaQualifier2'><tt>cupsMediaQualifier2</tt></a>,
- <a href='#cupsMediaQualifier3'><tt>cupsMediaQualifier3</tt></a>,
- <a href='#cupsMinSize'><tt>cupsMinSize</tt></a>, and
- <a href='#cupsMaxSize'><tt>cupsMaxSize</tt></a> keywords.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.3.1</h3>
-
-<ul>
-
- <li>Added missing macOS <tt>AP</tt> keywords.</li>
-
- <li>Added section on auto-configuration including the
- <tt>OID<i>MainKeyword</i></tt> and <tt>?<i>MainKeyword</i></tt>
- keywords.</li>
-
- <li>Minor reorganization.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.3</h3>
-
-<ul>
-
- <li>Added <a href='#cupsBackSide'><tt>cupsBackSide</tt></a> and
- deprecated <a href='#cupsFlipDuplex'><tt>cupsFlipDuplex</tt></a>.</li>
-
- <li>Added text URI information to
- <a href='#cupsIPPReason'><tt>cupsIPPReason</tt></a> documentation.</li>
-
- <li>Added <a href='#APPrinterPreset'><tt>APPrinterPreset</tt></a>,
- <a href='#cupsIPPFinishings'><tt>cupsIPPFinishings</tt></a>, and
- <a href='#cupsPreFilter'><tt>cupsPreFilter</tt></a> keywords.</li>
-
- <li>Added discussion of custom option code, sample
- <tt>CustomPageSize</tt> code, and "do not use dict and put" note.</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.2.8</h3>
-
-<ul>
-
- <li>Added section on supported PostScript commands for raster
- drivers</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.2</h3>
-
-<ul>
-
- <li>Added globalization support keywords</li>
-
- <li>Added custom option values support</li>
-
- <li>Added <a href='#APHelpBook'><tt>APHelpBook</tt></a> keyword</li>
-
- <li>Added <a href='#APDuplexRequiresFlippedMargin'><tt>APDuplexRequiresFlippedMargin</tt></a>
- keyword</li>
-
- <li>Added <a href='#cupsICCProfile'><tt>cupsICCProfile</tt></a> keyword</li>
-
- <li>Added <a href='#cupsIPPReason'><tt>cupsIPPReason</tt></a> keyword</li>
-
- <li>Added <a href='#cupsLanguages'><tt>cupsLanguages</tt></a> keyword</li>
-
- <li>Added <a href='#cupsPortMonitor'><tt>cupsPortMonitor</tt></a> keyword</li>
-
- <li>Removed <tt>cupsProtocol</tt> keyword</li>
-
-</ul>
-
-
-<h3 class="title">Changes in CUPS 1.1</h3>
-
-<ul>
-
- <li>Added <a href='#cupsFlipDuplex'><tt>cupsFlipDuplex</tt></a> keyword</li>
-
- <li>Added <tt>cupsProtocol</tt> keyword</li>
-
-</ul>
- </div>
- </body>
-</html>
<div class="col-md-4"><a href="doc/relnotes.html">Release Notes</a></div>
<div class="col-md-4"><a href="doc/reporting-bugs.html">Reporting Bugs</a></div>
<div class="col-md-4"><a href="doc/security.html">Server Security</a></div>
- <div class="col-md-4"><a href="doc/license.html">Software License Agreement (CUPS 2.3 and later)</a></div>
- <div class="col-md-4"><a href="doc/old-license.html">Software License Agreement (CUPS 2.2 and earlier)</a></div>
+ <div class="col-md-4"><a href="doc/license.html">Software License Agreement</a></div>
<div class="col-md-4"><a href="doc/translation.html">Translating and Customizing CUPS</a></div>
<div class="col-md-4"><a href="doc/cgi.html">Using CGI Programs</a></div>
<div class="col-md-4"><a href="doc/kerberos.html">Using Kerberos Authentication</a></div>
<h2>Man Pages</h2>
<div class="row">
- <div class="col-md-2"><a href="doc/man-backend.html">backend(7)</a></div>
<div class="col-md-2"><a href="doc/man-cancel.html">cancel(1)</a></div>
<div class="col-md-2"><a href="doc/man-classes.conf.html">classes.conf(5)</a></div>
<div class="col-md-2"><a href="doc/man-client.conf.html">client.conf(5)</a></div>
<div class="col-md-2"><a href="doc/man-cupsenable.html">cupsenable(8)</a></div>
<div class="col-md-2"><a href="doc/man-cupsfilter.html">cupsfilter(8)</a></div>
<div class="col-md-2"><a href="doc/man-cupstestppd.html">cupstestppd(1)</a></div>
- <div class="col-md-2"><a href="doc/man-filter.html">filter(7)</a></div>
<div class="col-md-2"><a href="doc/man-ippeveprinter.html">ippeveprinter(1)</a></div>
<div class="col-md-2"><a href="doc/man-ippevepcl.html">ippevepcl/ps(7)</a></div>
<div class="col-md-2"><a href="doc/man-ippfind.html">ippfind(1)</a></div>
<div class="col-md-2"><a href="doc/man-lprm.html">lprm(1)</a></div>
<div class="col-md-2"><a href="doc/man-lpstat.html">lpstat(1)</a></div>
<div class="col-md-2"><a href="doc/man-mailto.conf.html">mailto.conf(5)</a></div>
- <div class="col-md-2"><a href="doc/man-mime.convs.html">mime.convs(5)</a></div>
- <div class="col-md-2"><a href="doc/man-mime.types.html">mime.types(5)</a></div>
<div class="col-md-2"><a href="doc/man-notifier.html">notifier(7)</a></div>
- <div class="col-md-2"><a href="doc/man-ppdc.html">ppdc(1)</a></div>
- <div class="col-md-2"><a href="doc/man-ppdcfile.html">ppdcfile(5)</a></div>
- <div class="col-md-2"><a href="doc/man-ppdhtml.html">ppdhtml(1)</a></div>
- <div class="col-md-2"><a href="doc/man-ppdi.html">ppdi(1)</a></div>
- <div class="col-md-2"><a href="doc/man-ppdmerge.html">ppdmerge(1)</a></div>
- <div class="col-md-2"><a href="doc/man-ppdpo.html">ppdpo(1)</a></div>
<div class="col-md-2"><a href="doc/man-printers.conf.html">printers.conf(5)</a></div>
<div class="col-md-2"><a href="doc/man-cups-snmp.conf.html">snmp.conf(5)</a></div>
<div class="col-md-2"><a href="doc/man-subscriptions.conf.html">subscriptions.conf(5)</a></div>
<h2>Programming</h2>
<div class="row">
- <div class="col-md-4"><a href="doc/cupspm.html">CUPS Programming Manual (New HTML)</a></div>
- <div class="col-md-4"><a href="doc/cupspm.epub">CUPS Programming Manual (New EPUB)</a></div>
+ <div class="col-md-4"><a href="doc/cupspm.html">CUPS Programming Manual (HTML)</a></div>
+ <div class="col-md-4"><a href="doc/cupspm.epub">CUPS Programming Manual (EPUB)</a></div>
<div class="col-md-4"><a href="doc/api-admin.html">Administrative APIs</a></div>
- <div class="col-md-4"><a href="doc/api-filter.html">Filter and Backend Programming</a></div>
- <div class="col-md-4"><a href="doc/api-raster.html">Raster API</a></div>
- <div class="col-md-4"><a href="doc/postscript-driver.html">Developing PostScript Printer Drivers</a></div>
- <div class="col-md-4"><a href="doc/raster-driver.html">Developing Raster Printer Drivers</a></div>
- <div class="col-md-4"><a href="doc/api-ppd.html">PPD API (DEPRECATED)</a></div>
</div>
<h2>References</h2>
<div class="row">
- <div class="col-md-4"><a href="doc/spec-banner.html">CUPS Banner File Format</a></div>
- <div class="col-md-4"><a href="doc/spec-command.html">CUPS Command File Format</a></div>
<div class="col-md-4"><a href="doc/spec-design.html">CUPS Design Description</a></div>
<div class="col-md-4"><a href="doc/spec-ipp.html">CUPS Implementation of IPP</a></div>
<div class="col-md-4"><a href="doc/spec-ppd.html">CUPS PPD Extensions</a></div>
<div class="col-md-4"><a href="doc/spec-raster.html">CUPS Raster Format</a></div>
<div class="col-md-4"><a href="doc/spec-stp.html">CUPS Software Test Plan</a></div>
- <div class="col-md-4"><a href="doc/ppd-compiler.html">Introduction to the PPD Compiler</a></div>
- <div class="col-md-4"><a href="doc/ref-ppdcfile.html">PPD Compiler Driver Information File Reference</a></div>
</div>