]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - doc/help/ppd-compiler.html
Greatly simplify the man page handling.
[thirdparty/cups.git] / doc / help / ppd-compiler.html
index 10e9c462b71a916dfc8c72c6afb518bae3c12367..b33ca2d273220b060df0ab6a9a136c15d1f3eb5b 100644 (file)
@@ -1,11 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<!DOCTYPE html>
 <html>
 <!-- SECTION: Programming -->
-<head>
-<title>Introduction to the PPD Compiler</title>
-<meta name="keywords" content="Programming">
-<meta name="creator" content="Mini-XML v2.6">
-<style type="text/css"><!--
+  <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;
 }
@@ -14,6 +18,11 @@ 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;
@@ -23,20 +32,41 @@ PRE {
   font-family: monaco, courier, monospace;
 }
 
-PRE.command {
-  margin-left: 36pt;
+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;
 }
-  
-PRE.example {
-  background: #eeeeee;
-  border: dotted thin #999999;
-  margin-left: 36pt;
-  padding: 10px;
+
+DL.man DD {
+  margin-left: 5em;
+}
+
+DL.man DT {
+  margin-left: 0;
+}
+
+PRE.man {
+  margin: 0;
 }
 
 PRE.command EM, PRE.example EM {
@@ -53,12 +83,6 @@ P.formula {
   margin-left: 36pt;
 }
 
-BLOCKQUOTE {
-  background: #cccccc;
-  border: solid thin #999999;
-  padding: 10pt;
-}
-
 A IMG {
   border: none;
 }
@@ -70,7 +94,7 @@ A:link:hover IMG {
 }
 
 A:link, A:visited {
-  font-weight: normal;
+  font-weight: inherit;
   text-decoration: none;
 }
 
@@ -114,7 +138,7 @@ DIV.table CAPTION {
 
 DIV.table TABLE TD {
   border: solid thin #cccccc;
-  padding-top: 5pt;
+  padding: 5pt 10pt 0;
 }
 
 DIV.table TABLE TH {
@@ -166,6 +190,9 @@ H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
   font-size: 100%;
 }
 
+H1.title {
+}
+
 H2.title, H3.title {
   border-bottom: solid 2pt #000000;
 }
@@ -259,26 +286,126 @@ DIV.summary TABLE THEAD TH {
 
 /* 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, div.body h4, div.body h5 {
+div.body h3 {
+  font-size: 150%;
   margin-bottom: 0.5em;
   margin-top: 1.5em;
 }
-.class, .enumeration, .function, .struct, .typedef, .union {
-  border-bottom: solid thin #999999;
-  margin-bottom: 0;
-  margin-top: 2em;
+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;
 }
-code, p.code, pre, ul.code li {
-  font-family: monaco, courier, monospace;
-  font-size: 90%;
+.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;
@@ -294,46 +421,57 @@ ul.contents > li {
 ul.contents li ul.code, ul.contents li ul.subcontents {
   padding-left: 2em;
 }
-div.body dl {
-  margin-left: 0;
-  margin-top: 0;
-}
-div.body dt {
-  font-style: italic;
-  margin-left: 0;
-  margin-top: 0;
-}
-div.body dd {
-  margin-bottom: 0.5em;
-}
-
-/* This is just for the HTML files generated with the framedhelp target */
-div.contents {
-  background: #e8e8e8;
-  border: solid thin black;
-  padding: 10px;
+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;
 }
-div.contents h1 {
-  font-size: 110%;
+table.list td {
+  padding: 5px 2px 5px 10px;
+  text-align: left;
+  vertical-align: top;
 }
-div.contents h2 {
-  font-size: 100%;
+h1.title {
 }
-div.contents ul.contents {
-  font-size: 80%;
+h2.title {
+  border-bottom: solid 2px black;
 }
-div.contents ul.subcontents li {
-  margin-left: 1em;
-  text-indent: -1em;
+h3.title {
+  border-bottom: solid 2px black;
 }
 --></style>
-</head>
-<body>
-<div class='body'>
+  </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>
@@ -347,19 +485,26 @@ that describe the features and capabilities of one or more printers.</P>
 </tr>
 </tbody>
 </table></div>
-<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>
-</ul>
+    <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
@@ -567,7 +712,7 @@ follows:</P>
 
        <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 (Mac OS X 10.5 and higher) also
+       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
@@ -1170,6 +1315,79 @@ lines:</p>
 <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>
-</div>
-</body>
+
+<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>