]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Update API documentation.
authorMichael R Sweet <michael.r.sweet@gmail.com>
Fri, 23 Aug 2019 12:32:10 +0000 (08:32 -0400)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Fri, 23 Aug 2019 12:32:10 +0000 (08:32 -0400)
doc/help/api-admin.html
doc/help/api-filter.html
doc/help/api-ppd.html
doc/help/api-raster.html
doc/help/cupspm.epub
doc/help/cupspm.html
doc/help/postscript-driver.html
doc/help/ppd-compiler.html
doc/help/raster-driver.html
doc/help/spec-ppd.html

index f9969d4a9a8b9793347de6172aaa8d3338fcf373..7e6b407024e14a2f4a48385448e8a8a60d9756aa 100644 (file)
@@ -5,7 +5,7 @@
     <title>Administration APIs</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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   Administrative API header for CUPS.
 
@@ -481,6 +482,7 @@ h3.title {
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
index eddd06389b42092e49639973acea0f26ab366dfc..961f4623ae941f2a6476c79447b18e411d13ef0c 100644 (file)
@@ -5,7 +5,7 @@
     <title>Filter and Backend Programming</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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   Filter and backend programming header for CUPS.
 
@@ -487,6 +488,7 @@ h3.title {
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
index 4ddb11ae72f652feee8c18832a6e61cb7164cfb4..623a3a8e07f68ef2a47e3717f9e147afa403c109 100644 (file)
@@ -5,7 +5,7 @@
     <title>PPD API (DEPRECATED)</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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   PPD API header for CUPS.
 
@@ -486,6 +487,7 @@ h3.title {
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
@@ -2125,6 +2127,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <tr><th>PPD_CUSTOM_POINTS </th>        <td class="description">Measurement value in points</td></tr>
         <tr><th>PPD_CUSTOM_REAL </th>        <td class="description">Real number value</td></tr>
         <tr><th>PPD_CUSTOM_STRING </th>        <td class="description">String of characters</td></tr>
+        <tr><th>PPD_CUSTOM_UNKNOWN </th>        <td class="description">Unknown type (error)</td></tr>
 </tbody></table>
       <h3 class="enumeration"><a id="ppd_cs_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cs_e</a></h3>
         <p class="description">Colorspaces </p>
index 6eccab791d123831922e15a929ae45f3ccc07373..6a9e7638544c26ef53ac24640de3fb5862df74af 100644 (file)
@@ -5,7 +5,7 @@
     <title>Raster API</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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   Raster API documentation for CUPS.
 
@@ -481,6 +482,7 @@ h3.title {
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
index 5cd742cd109165ac0b163c5a235f376658998c99..fea9e5af5e57ee65f545f820d82080cd61ec4e97 100644 (file)
Binary files a/doc/help/cupspm.epub and b/doc/help/cupspm.epub differ
index 4c68087f543baca340ca9063ed86bf4838a62464..c27281518c08690e47583fbedb6b05a1c979f2e6 100644 (file)
@@ -5,91 +5,62 @@
     <title>CUPS Programming Manual</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="creator" content="codedoc v3.2">
     <meta name="author" content="Michael R Sweet">
     <meta name="copyright" content="Copyright &#xa9; 2007-2019 by Apple Inc. All Rights Reserved.">
     <meta name="version" content="2.3.0">
     <style type="text/css"><!--
-body, p, h1, h2, h3, h4 {
+body, p, h1, h2, h3, h4, h5, h6 {
   font-family: sans-serif;
+  line-height: 1.4;
 }
-div.body h1 {
-  font-size: 250%;
+h1, h2, h3, h4, h5, h6 {
   font-weight: bold;
+  page-break-inside: avoid;
+}
+h1 {
+  font-size: 250%;
   margin: 0;
 }
-div.body h2 {
+h2 {
   font-size: 250%;
   margin-top: 1.5em;
 }
-div.body h3 {
-  font-size: 150%;
+h3 {
+  font-size: 200%;
   margin-bottom: 0.5em;
   margin-top: 1.5em;
 }
-div.body h4 {
-  font-size: 110%;
+h4 {
+  font-size: 150%;
   margin-bottom: 0.5em;
   margin-top: 1.5em;
 }
-div.body h5 {
-  font-size: 100%;
+h5 {
+  font-size: 125%;
   margin-bottom: 0.5em;
   margin-top: 1.5em;
 }
-div.contents {
-  background: #e8e8e8;
-  border: solid thin black;
-  padding: 10px;
-}
-div.contents h1 {
+h6 {
   font-size: 110%;
+  margin-bottom: 0.5em;
+  margin-top: 1.5em;
 }
-div.contents h2 {
-  font-size: 100%;
+div.header h1, div.header p {
+  text-align: center;
 }
-div.contents ul.contents {
-  font-size: 80%;
+div.contents, div.body, div.footer {
+  page-break-before: always;
 }
-.class {
+.class, .enumeration, .function, .struct, .typedef, .union {
   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);
@@ -97,19 +68,15 @@ blockquote {
   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;
-  font-size: 90%;
   hyphens: manual;
   -webkit-hyphens: manual;
-  page-break-inside: avoid;
 }
 p.code, pre, ul.code li {
+  background: rgba(127,127,127,0.1);
+  border: thin dotted gray;
   padding: 10px;
-}
-p code, li code {
-  padding: 2px 5px;
+  page-break-inside: avoid;
 }
 a:link, a:visited {
   text-decoration: none;
@@ -123,7 +90,7 @@ span.info {
   font-weight: bold;
   white-space: nowrap;
 }
-h3 span.info, h4 span.info {
+h1 span.info, h2 span.info, h3 span.info, h4 span.info {
   border-top-left-radius: 10px;
   border-top-right-radius: 10px;
   float: right;
@@ -143,13 +110,38 @@ ul.contents > li {
 ul.contents li ul.code, ul.contents li ul.subcontents {
   padding-left: 2em;
 }
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td {
+  border: solid 1px #666;
+  padding: 5px 10px;
+  vertical-align: top;
+}
+td.left {
+  text-align: left;
+}
+td.center {
+  text-align: center;
+}
+td.right {
+  text-align: right;
+}
+th {
+  border-bottom: solid 2px #000;
+  padding: 1px 5px;
+  text-align: center;
+  vertical-align: bottom;
+}
+tr:nth-child(even) {
+  background: rgba(127,127,127,0.1);n}
 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-bottom: none;
   border-right: 2px solid gray;
   font-family: monospace;
   padding: 5px 10px 5px 2px;
@@ -157,24 +149,22 @@ table.list th {
   vertical-align: top;
 }
 table.list td {
+  border: none;
   padding: 5px 2px 5px 10px;
   text-align: left;
   vertical-align: top;
 }
-h1.title {
-}
-h2.title {
-  border-bottom: solid 2px black;
-}
-h3.title {
+h2.title, h3.title {
   border-bottom: solid 2px black;
 }
 --></style>
   </head>
   <body>
-    <h1 class="title">CUPS Programming Manual</h1>
-    <p>Michael R Sweet</p>
-    <p>Copyright &#xa9; 2007-2019 by Apple Inc. All Rights Reserved.</p>
+    <div class="header">
+      <h1 class="title">CUPS Programming Manual</h1>
+      <p>Michael R Sweet</p>
+      <p>Copyright &#xa9; 2007-2019 by Apple Inc. All Rights Reserved.</p>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
@@ -520,16 +510,20 @@ h3.title {
     <blockquote>
     <p>Please <a href="https://github.com/apple/cups/issues">file issues on Github</a> to provide feedback on this document.</p>
 </blockquote>
-    <h2><a id="introduction">Introduction</a></h2>
+    <h2 class="title" id="introduction">Introduction</h2>
     <p>CUPS provides the &quot;cups&quot; library to talk to the different parts of CUPS and with Internet Printing Protocol (IPP) printers. The &quot;cups&quot; library functions are accessed by including the <code>&lt;cups/cups.h&gt;</code> header.</p>
     <p>CUPS is based on the Internet Printing Protocol (&quot;IPP&quot;), which allows clients (applications) to communicate with a server (the scheduler, printers, etc.) to get a list of destinations, send print jobs, and so forth. You identify which server you want to communicate with using a pointer to the opaque structure <code>http_t</code>. The <code>CUPS_HTTP_DEFAULT</code> constant can be used when you want to talk to the CUPS scheduler.</p>
-    <h3><a id="guidelines">Guidelines</a></h3>
+    <h3 class="title" id="guidelines">Guidelines</h3>
     <p>When writing software (other than printer drivers) that uses the &quot;cups&quot; library:</p>
     <ul>
-    <li>Do not use undocumented or deprecated APIs,</li>
-    <li>Do not rely on pre-configured printers,</li>
-    <li>Do not assume that printers support specific features or formats, and</li>
-    <li>Do not rely on implementation details (PPDs, etc.)</li>
+    <li>    <p>Do not use undocumented or deprecated APIs,</p>
+</li>
+    <li>    <p>Do not rely on pre-configured printers,</p>
+</li>
+    <li>    <p>Do not assume that printers support specific features or formats, and</p>
+</li>
+    <li>    <p>Do not rely on implementation details (PPDs, etc.)</p>
+</li>
 </ul>
     <p>CUPS is designed to insulate users and developers from the implementation details of printers and file formats. The goal is to allow an application to supply a print file in a standard format with the user intent (&quot;print four copies, two-sided on A4 media, and staple each copy&quot;) and have the printing system manage the printer communication and format conversion needed.</p>
     <p>Similarly, printer and job management applications can use standard query operations to obtain the status information in a common, generic form and use standard management operations to control the state of those printers and jobs.</p>
@@ -537,9 +531,9 @@ h3.title {
     <p><strong>Note:</strong></p>
     <p>CUPS printer drivers necessarily depend on specific file formats and certain implementation details of the CUPS software. Please consult the Postscript and raster printer driver developer documentation on <a href="https://www.cups.org/documentation.html">CUPS.org</a> for more information.</p>
 </blockquote>
-    <h3><a id="terms-used-in-this-document">Terms Used in This Document</a></h3>
-    <p>A <em>Destination</em> is a printer or print queue that accepts print jobs. A <em>Print</em> <em>Job</em> is a collection of one or more documents that are processed by a destination using options supplied when creating the job. A <em>Document</em> is a file (JPEG image, PDF file, etc.) suitable for printing. An <em>Option</em> controls some aspect of printing, such as the media used. <em>Media</em> is the sheets or roll that is printed on. An <em>Attribute</em> is an option encoded for an Internet Printing Protocol (IPP) request.</p>
-    <h3><a id="compiling-programs-that-use-the-cups-api">Compiling Programs That Use the CUPS API</a></h3>
+    <h3 class="title" id="terms-used-in-this-document">Terms Used in This Document</h3>
+    <p>A <em>Destination</em> is a printer or print queue that accepts print jobs. A <em>Print Job</em> is a collection of one or more documents that are processed by a destination using options supplied when creating the job. A <em>Document</em> is a file (JPEG image, PDF file, etc.) suitable for printing. An <em>Option</em> controls some aspect of printing, such as the media used. <em>Media</em> is the sheets or roll that is printed on. An <em>Attribute</em> is an option encoded for an Internet Printing Protocol (IPP) request.</p>
+    <h3 class="title" id="compiling-programs-that-use-the-cups-api">Compiling Programs That Use the CUPS API</h3>
     <p>The CUPS libraries can be used from any C, C++, or Objective C program. The method of compiling against the libraries varies depending on the operating system and installation of CUPS. The following sections show how to compile a simple program (shown below) in two common environments.</p>
     <p>The following simple program lists the available destinations:</p>
     <pre><code>#include &lt;stdio.h&gt;
@@ -562,20 +556,20 @@ int main(void)
   return (0);
 }
 </code></pre>
-    <h4><a id="compiling-with-xcode">Compiling with Xcode</a></h4>
-    <p>In Xcode, choose <em>New</em> <em>Project...</em> from the <em>File</em> menu (or press SHIFT+CMD+N), then select the <em>Command</em> <em>Line</em> <em>Tool</em> under the macOS Application project type. Click <em>Next</em> and enter a name for the project, for example &quot;firstcups&quot;. Click <em>Next</em> and choose a project directory. The click <em>Next</em> to create the project.</p>
-    <p>In the project window, click on the <em>Build</em> <em>Phases</em> group and expand the <em>Link</em> <em>Binary</em> <em>with</em> <em>Libraries</em> section. Click <em>+</em>, type &quot;libcups&quot; to show the library, and then double-click on <code>libcups.tbd</code>.</p>
+    <h4 id="compiling-with-xcode">Compiling with Xcode</h4>
+    <p>In Xcode, choose <em>New Project...</em> from the <em>File</em> menu (or press SHIFT+CMD+N), then select the <em>Command Line Tool</em> under the macOS Application project type. Click <em>Next</em> and enter a name for the project, for example &quot;firstcups&quot;. Click <em>Next</em> and choose a project directory. The click <em>Next</em> to create the project.</p>
+    <p>In the project window, click on the <em>Build Phases</em> group and expand the <em>Link Binary with Libraries</em> section. Click <em>+</em>, type &quot;libcups&quot; to show the library, and then double-click on <code>libcups.tbd</code>.</p>
     <p>Finally, click on the <code>main.c</code> file in the sidebar and copy the example program to the file. Build and run (CMD+R) to see the list of destinations.</p>
-    <h4><a id="compiling-with-gcc">Compiling with GCC</a></h4>
+    <h4 id="compiling-with-gcc">Compiling with GCC</h4>
     <p>From the command-line, create a file called <code>sample.c</code> using your favorite editor, copy the example to this file, and save. Then run the following command to compile it with GCC and run it:</p>
     <pre><code>gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
 ./simple
 </code></pre>
     <p>The <code>cups-config</code> command provides the compiler flags (<code>cups-config --cflags</code>) and libraries (<code>cups-config --libs</code>) needed for the local system.</p>
-    <h2><a id="working-with-destinations">Working with Destinations</a></h2>
+    <h2 class="title" id="working-with-destinations">Working with Destinations</h2>
     <p>Destinations, which in CUPS represent individual printers or classes (collections or pools) of printers, are represented by the <code>cups_dest_t</code> structure which includes the name (<code>name</code>), instance (<code>instance</code>, saved options/settings), whether the destination is the default for the user (<code>is_default</code>), and the options and basic information associated with that destination (<code>num_options</code> and <code>options</code>).</p>
     <p>Historically destinations have been manually maintained by the administrator of a system or network, but CUPS also supports dynamic discovery of destinations on the current network.</p>
-    <h3><a id="finding-available-destinations">Finding Available Destinations</a></h3>
+    <h3 class="title" id="finding-available-destinations">Finding Available Destinations</h3>
     <p>The <code>cupsEnumDests</code> function finds all of the available destinations:</p>
     <pre><code> int
  cupsEnumDests(unsigned flags, int msec, int *cancel,
@@ -587,24 +581,42 @@ int main(void)
     <p>The <code>cancel</code> argument points to an integer variable that, when set to a non-zero value, will cause enumeration to stop as soon as possible. It can be <code>NULL</code> if not needed.</p>
     <p>The <code>type</code> and <code>mask</code> arguments are bitfields that allow the caller to filter the destinations based on categories and/or capabilities. The destination's &quot;printer-type&quot; value is masked by the <code>mask</code> value and compared to the <code>type</code> value when filtering. For example, to only enumerate destinations that are hosted on the local system, pass <code>CUPS_PRINTER_LOCAL</code> for the <code>type</code> argument and <code>CUPS_PRINTER_DISCOVERED</code> for the <code>mask</code> argument. The following constants can be used for filtering:</p>
     <ul>
-    <li><code>CUPS_PRINTER_CLASS</code>: A collection of destinations.</li>
-    <li><code>CUPS_PRINTER_FAX</code>: A facsimile device.</li>
-    <li><code>CUPS_PRINTER_LOCAL</code>: A local printer or class. This constant has the value 0 (no bits set) and is only used for the <code>type</code> argument and is paired with the <code>CUPS_PRINTER_REMOTE</code> or <code>CUPS_PRINTER_DISCOVERED</code> constant passed in the <code>mask</code> argument.</li>
-    <li><code>CUPS_PRINTER_REMOTE</code>: A remote (shared) printer or class.</li>
-    <li><code>CUPS_PRINTER_DISCOVERED</code>: An available network printer or class.</li>
-    <li><code>CUPS_PRINTER_BW</code>: Can do B&amp;W printing.</li>
-    <li><code>CUPS_PRINTER_COLOR</code>: Can do color printing.</li>
-    <li><code>CUPS_PRINTER_DUPLEX</code>: Can do two-sided printing.</li>
-    <li><code>CUPS_PRINTER_STAPLE</code>: Can staple output.</li>
-    <li><code>CUPS_PRINTER_COLLATE</code>: Can quickly collate copies.</li>
-    <li><code>CUPS_PRINTER_PUNCH</code>: Can punch output.</li>
-    <li><code>CUPS_PRINTER_COVER</code>: Can cover output.</li>
-    <li><code>CUPS_PRINTER_BIND</code>: Can bind output.</li>
-    <li><code>CUPS_PRINTER_SORT</code>: Can sort output (mailboxes, etc.)</li>
-    <li><code>CUPS_PRINTER_SMALL</code>: Can print on Letter/Legal/A4-size media.</li>
-    <li><code>CUPS_PRINTER_MEDIUM</code>: Can print on Tabloid/B/C/A3/A2-size media.</li>
-    <li><code>CUPS_PRINTER_LARGE</code>: Can print on D/E/A1/A0-size media.</li>
-    <li><code>CUPS_PRINTER_VARIABLE</code>: Can print on rolls and custom-size media.</li>
+    <li>    <p><code>CUPS_PRINTER_CLASS</code>: A collection of destinations.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_FAX</code>: A facsimile device.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_LOCAL</code>: A local printer or class. This constant has the value 0 (no bits set) and is only used for the <code>type</code> argument and is paired with the <code>CUPS_PRINTER_REMOTE</code> or <code>CUPS_PRINTER_DISCOVERED</code> constant passed in the <code>mask</code> argument.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_REMOTE</code>: A remote (shared) printer or class.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_DISCOVERED</code>: An available network printer or class.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_BW</code>: Can do B&amp;W printing.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_COLOR</code>: Can do color printing.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_DUPLEX</code>: Can do two-sided printing.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_STAPLE</code>: Can staple output.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_COLLATE</code>: Can quickly collate copies.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_PUNCH</code>: Can punch output.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_COVER</code>: Can cover output.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_BIND</code>: Can bind output.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_SORT</code>: Can sort output (mailboxes, etc.)</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_SMALL</code>: Can print on Letter/Legal/A4-size media.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_MEDIUM</code>: Can print on Tabloid/B/C/A3/A2-size media.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_LARGE</code>: Can print on D/E/A1/A0-size media.</p>
+</li>
+    <li>    <p><code>CUPS_PRINTER_VARIABLE</code>: Can print on rolls and custom-size media.</p>
+</li>
 </ul>
     <p>The <code>cb</code> argument specifies a function to call for every destination that is found:</p>
     <pre><code>typedef int (*cups_dest_cb_t)(void *user_data,
@@ -613,9 +625,12 @@ int main(void)
 </code></pre>
     <p>The callback function receives a copy of the <code>user_data</code> argument along with a bitfield (<code>flags</code>) and the destination that was found. The <code>flags</code> argument can have any of the following constant (bit) values set:</p>
     <ul>
-    <li><code>CUPS_DEST_FLAGS_MORE</code>: There are more destinations coming.</li>
-    <li><code>CUPS_DEST_FLAGS_REMOVED</code>: The destination has gone away and should be removed from the list of destinations a user can select.</li>
-    <li><code>CUPS_DEST_FLAGS_ERROR</code>: An error occurred. The reason for the error can be found by calling the <code>cupsLastError</code> and/or <code>cupsLastErrorString</code> functions.</li>
+    <li>    <p><code>CUPS_DEST_FLAGS_MORE</code>: There are more destinations coming.</p>
+</li>
+    <li>    <p><code>CUPS_DEST_FLAGS_REMOVED</code>: The destination has gone away and should be removed from the list of destinations a user can select.</p>
+</li>
+    <li>    <p><code>CUPS_DEST_FLAGS_ERROR</code>: An error occurred. The reason for the error can be found by calling the <code>cupsLastError</code> and/or <code>cupsLastErrorString</code> functions.</p>
+</li>
 </ul>
     <p>The callback function returns 0 to stop enumeration or 1 to continue.</p>
     <blockquote>
@@ -689,34 +704,45 @@ my_get_dests(cups_ptype_t type, cups_ptype_t mask,
   return (user_data.num_dests);
 }
 </code></pre>
-    <h3><a id="basic-destination-information">Basic Destination Information</a></h3>
+    <h3 class="title" id="basic-destination-information">Basic Destination Information</h3>
     <p>The <code>num_options</code> and <code>options</code> members of the <code>cups_dest_t</code> structure provide basic attributes about the destination in addition to the user default options and values for that destination. The following names are predefined for various destination attributes:</p>
     <ul>
-    <li>&quot;auth-info-required&quot;: The type of authentication required for printing to this destination: &quot;none&quot;, &quot;username,password&quot;, &quot;domain,username,password&quot;, or &quot;negotiate&quot; (Kerberos).</li>
-    <li>&quot;printer-info&quot;: The human-readable description of the destination such as &quot;My Laser Printer&quot;.</li>
-    <li>&quot;printer-is-accepting-jobs&quot;: &quot;true&quot; if the destination is accepting new jobs, &quot;false&quot; otherwise.</li>
-    <li>&quot;printer-is-shared&quot;: &quot;true&quot; if the destination is being shared with other computers, &quot;false&quot; otherwise.</li>
-    <li>&quot;printer-location&quot;: The human-readable location of the destination such as &quot;Lab 4&quot;.</li>
-    <li>&quot;printer-make-and-model&quot;: The human-readable make and model of the destination such as &quot;ExampleCorp LaserPrinter 4000 Series&quot;.</li>
-    <li>&quot;printer-state&quot;: &quot;3&quot; if the destination is idle, &quot;4&quot; if the destination is printing a job, and &quot;5&quot; if the destination is stopped.</li>
-    <li>&quot;printer-state-change-time&quot;: The UNIX time when the destination entered the current state.</li>
-    <li>&quot;printer-state-reasons&quot;: Additional comma-delimited state keywords for the destination such as &quot;media-tray-empty-error&quot; and &quot;toner-low-warning&quot;.</li>
-    <li>&quot;printer-type&quot;: The <code>cups_ptype_t</code> value associated with the destination.</li>
-    <li>&quot;printer-uri-supported&quot;: The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer.</li>
+    <li>    <p>&quot;auth-info-required&quot;: The type of authentication required for printing to this destination: &quot;none&quot;, &quot;username,password&quot;, &quot;domain,username,password&quot;, or &quot;negotiate&quot; (Kerberos).</p>
+</li>
+    <li>    <p>&quot;printer-info&quot;: The human-readable description of the destination such as &quot;My Laser Printer&quot;.</p>
+</li>
+    <li>    <p>&quot;printer-is-accepting-jobs&quot;: &quot;true&quot; if the destination is accepting new jobs, &quot;false&quot; otherwise.</p>
+</li>
+    <li>    <p>&quot;printer-is-shared&quot;: &quot;true&quot; if the destination is being shared with other computers, &quot;false&quot; otherwise.</p>
+</li>
+    <li>    <p>&quot;printer-location&quot;: The human-readable location of the destination such as &quot;Lab 4&quot;.</p>
+</li>
+    <li>    <p>&quot;printer-make-and-model&quot;: The human-readable make and model of the destination such as &quot;ExampleCorp LaserPrinter 4000 Series&quot;.</p>
+</li>
+    <li>    <p>&quot;printer-state&quot;: &quot;3&quot; if the destination is idle, &quot;4&quot; if the destination is printing a job, and &quot;5&quot; if the destination is stopped.</p>
+</li>
+    <li>    <p>&quot;printer-state-change-time&quot;: The UNIX time when the destination entered the current state.</p>
+</li>
+    <li>    <p>&quot;printer-state-reasons&quot;: Additional comma-delimited state keywords for the destination such as &quot;media-tray-empty-error&quot; and &quot;toner-low-warning&quot;.</p>
+</li>
+    <li>    <p>&quot;printer-type&quot;: The <code>cups_ptype_t</code> value associated with the destination.</p>
+</li>
+    <li>    <p>&quot;printer-uri-supported&quot;: The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer.</p>
+</li>
 </ul>
     <p>Use the <code>cupsGetOption</code> function to retrieve the value. For example, the following code gets the make and model of a destination:</p>
     <pre><code>const char *model = cupsGetOption(&quot;printer-make-and-model&quot;,
                                   dest-&gt;num_options,
                                   dest-&gt;options);
 </code></pre>
-    <h3><a id="detailed-destination-information">Detailed Destination Information</a></h3>
+    <h3 class="title" id="detailed-destination-information">Detailed Destination Information</h3>
     <p>Once a destination has been chosen, the <code>cupsCopyDestInfo</code> function can be used to gather detailed information about the destination:</p>
     <pre><code>cups_dinfo_t *
 cupsCopyDestInfo(http_t *http, cups_dest_t *dest);
 </code></pre>
     <p>The <code>http</code> argument specifies a connection to the CUPS scheduler and is typically the constant <code>CUPS_HTTP_DEFAULT</code>. The <code>dest</code> argument specifies the destination to query.</p>
     <p>The <code>cups_dinfo_t</code> structure that is returned contains a snapshot of the supported options and their supported, ready, and default values. It also can report constraints between different options and values, and recommend changes to resolve those constraints.</p>
-    <h4><a id="getting-supported-options-and-values">Getting Supported Options and Values</a></h4>
+    <h4 id="getting-supported-options-and-values">Getting Supported Options and Values</h4>
     <p>The <code>cupsCheckDestSupported</code> function can be used to test whether a particular option or option and value is supported:</p>
     <pre><code>int
 cupsCheckDestSupported(http_t *http, cups_dest_t *dest,
@@ -726,16 +752,26 @@ cupsCheckDestSupported(http_t *http, cups_dest_t *dest,
 </code></pre>
     <p>The <code>option</code> argument specifies the name of the option to check. The following constants can be used to check the various standard options:</p>
     <ul>
-    <li><code>CUPS_COPIES</code>: Controls the number of copies that are produced.</li>
-    <li><code>CUPS_FINISHINGS</code>: A comma-delimited list of integer constants that control the finishing processes that are applied to the job, including stapling, punching, and folding.</li>
-    <li><code>CUPS_MEDIA</code>: Controls the media size that is used, typically one of the following: <code>CUPS_MEDIA_3X5</code>, <code>CUPS_MEDIA_4X6</code>, <code>CUPS_MEDIA_5X7</code>, <code>CUPS_MEDIA_8X10</code>, <code>CUPS_MEDIA_A3</code>, <code>CUPS_MEDIA_A4</code>, <code>CUPS_MEDIA_A5</code>, <code>CUPS_MEDIA_A6</code>, <code>CUPS_MEDIA_ENV10</code>, <code>CUPS_MEDIA_ENVDL</code>, <code>CUPS_MEDIA_LEGAL</code>, <code>CUPS_MEDIA_LETTER</code>, <code>CUPS_MEDIA_PHOTO_L</code>, <code>CUPS_MEDIA_SUPERBA3</code>, or <code>CUPS_MEDIA_TABLOID</code>.</li>
-    <li><code>CUPS_MEDIA_SOURCE</code>: Controls where the media is pulled from, typically either <code>CUPS_MEDIA_SOURCE_AUTO</code> or <code>CUPS_MEDIA_SOURCE_MANUAL</code>.</li>
-    <li><code>CUPS_MEDIA_TYPE</code>: Controls the type of media that is used, typically one of the following: <code>CUPS_MEDIA_TYPE_AUTO</code>, <code>CUPS_MEDIA_TYPE_ENVELOPE</code>, <code>CUPS_MEDIA_TYPE_LABELS</code>, <code>CUPS_MEDIA_TYPE_LETTERHEAD</code>, <code>CUPS_MEDIA_TYPE_PHOTO</code>, <code>CUPS_MEDIA_TYPE_PHOTO_GLOSSY</code>, <code>CUPS_MEDIA_TYPE_PHOTO_MATTE</code>, <code>CUPS_MEDIA_TYPE_PLAIN</code>, or <code>CUPS_MEDIA_TYPE_TRANSPARENCY</code>.</li>
-    <li><code>CUPS_NUMBER_UP</code>: Controls the number of document pages that are placed on each media side.</li>
-    <li><code>CUPS_ORIENTATION</code>: Controls the orientation of document pages placed on the media: <code>CUPS_ORIENTATION_PORTRAIT</code> or <code>CUPS_ORIENTATION_LANDSCAPE</code>.</li>
-    <li><code>CUPS_PRINT_COLOR_MODE</code>: Controls whether the output is in color (<code>CUPS_PRINT_COLOR_MODE_COLOR</code>), grayscale (<code>CUPS_PRINT_COLOR_MODE_MONOCHROME</code>), or either (<code>CUPS_PRINT_COLOR_MODE_AUTO</code>).</li>
-    <li><code>CUPS_PRINT_QUALITY</code>: Controls the generate quality of the output: <code>CUPS_PRINT_QUALITY_DRAFT</code>, <code>CUPS_PRINT_QUALITY_NORMAL</code>, or <code>CUPS_PRINT_QUALITY_HIGH</code>.</li>
-    <li><code>CUPS_SIDES</code>: Controls whether prints are placed on one or both sides of the media: <code>CUPS_SIDES_ONE_SIDED</code>, <code>CUPS_SIDES_TWO_SIDED_PORTRAIT</code>, or <code>CUPS_SIDES_TWO_SIDED_LANDSCAPE</code>.</li>
+    <li>    <p><code>CUPS_COPIES</code>: Controls the number of copies that are produced.</p>
+</li>
+    <li>    <p><code>CUPS_FINISHINGS</code>: A comma-delimited list of integer constants that control the finishing processes that are applied to the job, including stapling, punching, and folding.</p>
+</li>
+    <li>    <p><code>CUPS_MEDIA</code>: Controls the media size that is used, typically one of the following: <code>CUPS_MEDIA_3X5</code>, <code>CUPS_MEDIA_4X6</code>, <code>CUPS_MEDIA_5X7</code>, <code>CUPS_MEDIA_8X10</code>, <code>CUPS_MEDIA_A3</code>, <code>CUPS_MEDIA_A4</code>, <code>CUPS_MEDIA_A5</code>, <code>CUPS_MEDIA_A6</code>, <code>CUPS_MEDIA_ENV10</code>, <code>CUPS_MEDIA_ENVDL</code>, <code>CUPS_MEDIA_LEGAL</code>, <code>CUPS_MEDIA_LETTER</code>, <code>CUPS_MEDIA_PHOTO_L</code>, <code>CUPS_MEDIA_SUPERBA3</code>, or <code>CUPS_MEDIA_TABLOID</code>.</p>
+</li>
+    <li>    <p><code>CUPS_MEDIA_SOURCE</code>: Controls where the media is pulled from, typically either <code>CUPS_MEDIA_SOURCE_AUTO</code> or <code>CUPS_MEDIA_SOURCE_MANUAL</code>.</p>
+</li>
+    <li>    <p><code>CUPS_MEDIA_TYPE</code>: Controls the type of media that is used, typically one of the following: <code>CUPS_MEDIA_TYPE_AUTO</code>, <code>CUPS_MEDIA_TYPE_ENVELOPE</code>, <code>CUPS_MEDIA_TYPE_LABELS</code>, <code>CUPS_MEDIA_TYPE_LETTERHEAD</code>, <code>CUPS_MEDIA_TYPE_PHOTO</code>, <code>CUPS_MEDIA_TYPE_PHOTO_GLOSSY</code>, <code>CUPS_MEDIA_TYPE_PHOTO_MATTE</code>, <code>CUPS_MEDIA_TYPE_PLAIN</code>, or <code>CUPS_MEDIA_TYPE_TRANSPARENCY</code>.</p>
+</li>
+    <li>    <p><code>CUPS_NUMBER_UP</code>: Controls the number of document pages that are placed on each media side.</p>
+</li>
+    <li>    <p><code>CUPS_ORIENTATION</code>: Controls the orientation of document pages placed on the media: <code>CUPS_ORIENTATION_PORTRAIT</code> or <code>CUPS_ORIENTATION_LANDSCAPE</code>.</p>
+</li>
+    <li>    <p><code>CUPS_PRINT_COLOR_MODE</code>: Controls whether the output is in color (<code>CUPS_PRINT_COLOR_MODE_COLOR</code>), grayscale (<code>CUPS_PRINT_COLOR_MODE_MONOCHROME</code>), or either (<code>CUPS_PRINT_COLOR_MODE_AUTO</code>).</p>
+</li>
+    <li>    <p><code>CUPS_PRINT_QUALITY</code>: Controls the generate quality of the output: <code>CUPS_PRINT_QUALITY_DRAFT</code>, <code>CUPS_PRINT_QUALITY_NORMAL</code>, or <code>CUPS_PRINT_QUALITY_HIGH</code>.</p>
+</li>
+    <li>    <p><code>CUPS_SIDES</code>: Controls whether prints are placed on one or both sides of the media: <code>CUPS_SIDES_ONE_SIDED</code>, <code>CUPS_SIDES_TWO_SIDED_PORTRAIT</code>, or <code>CUPS_SIDES_TWO_SIDED_LANDSCAPE</code>.</p>
+</li>
 </ul>
     <p>If the <code>value</code> argument is <code>NULL</code>, the <code>cupsCheckDestSupported</code> function returns whether the option is supported by the destination. Otherwise, the function returns whether the specified value of the option is supported.</p>
     <p>The <code>cupsFindDestSupported</code> function returns the IPP attribute containing the supported values for a given option:</p>
@@ -772,7 +808,7 @@ int i, count = ippGetCount(attrs);
 for (i = 0; i &lt; count; i ++)
   puts(ippGetString(attrs, i, NULL));
 </code></pre>
-    <h4><a id="getting-default-values">Getting Default Values</a></h4>
+    <h4 id="getting-default-values">Getting Default Values</h4>
     <p>There are two sets of default values - user defaults that are available via the <code>num_options</code> and <code>options</code> members of the <code>cups_dest_t</code> structure, and destination defaults that available via the <code>cups_dinfo_t</code> structure and the <code>cupsFindDestDefault</code> function which returns the IPP attribute containing the default value(s) for a given option:</p>
     <pre><code>ipp_attribute_t *
 cupsFindDestDefault(http_t *http, cups_dest_t *dest,
@@ -802,7 +838,7 @@ else
   putchar('\n');
 }
 </code></pre>
-    <h4><a id="getting-ready-loaded-values">Getting Ready (Loaded) Values</a></h4>
+    <h4 id="getting-ready-loaded-values">Getting Ready (Loaded) Values</h4>
     <p>The finishings and media options also support queries for the ready, or loaded, values. For example, a printer may have punch and staple finishers installed but be out of staples - the supported values will list both punch and staple finishing processes but the ready values will only list the punch processes. Similarly, a printer may support hundreds of different sizes of media but only have a single size loaded at any given time - the ready values are limited to the media that is actually in the printer.</p>
     <p>The <code>cupsFindDestReady</code> function finds the IPP attribute containing the ready values for a given option:</p>
     <pre><code>ipp_attribute_t *
@@ -825,7 +861,7 @@ if (ready_finishings != NULL)
 else
   puts(&quot;no finishings are ready.&quot;);
 </code></pre>
-    <h4><a id="media-size-options">Media Size Options</a></h4>
+    <h4 id="media-size-options">Media Size Options</h4>
     <p>CUPS provides functions for querying the dimensions and margins for each of the supported media size options. The <code>cups_size_t</code> structure is used to describe a media size:</p>
     <pre><code>typedef struct cups_size_s
 {
@@ -850,11 +886,16 @@ cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest,
 </code></pre>
     <p>The <code>media</code>, <code>width</code>, and <code>length</code> arguments specify the size to lookup. The <code>flags</code> argument specifies a bitfield controlling various lookup options:</p>
     <ul>
-    <li><code>CUPS_MEDIA_FLAGS_DEFAULT</code>: Find the closest size supported by the printer.</li>
-    <li><code>CUPS_MEDIA_FLAGS_BORDERLESS</code>: Find a borderless size.</li>
-    <li><code>CUPS_MEDIA_FLAGS_DUPLEX</code>: Find a size compatible with two-sided printing.</li>
-    <li><code>CUPS_MEDIA_FLAGS_EXACT</code>: Find an exact match for the size.</li>
-    <li><code>CUPS_MEDIA_FLAGS_READY</code>: If the printer supports media sensing or configuration of the media in each tray/source, find the size amongst the &quot;ready&quot; media.</li>
+    <li>    <p><code>CUPS_MEDIA_FLAGS_DEFAULT</code>: Find the closest size supported by the printer.</p>
+</li>
+    <li>    <p><code>CUPS_MEDIA_FLAGS_BORDERLESS</code>: Find a borderless size.</p>
+</li>
+    <li>    <p><code>CUPS_MEDIA_FLAGS_DUPLEX</code>: Find a size compatible with two-sided printing.</p>
+</li>
+    <li>    <p><code>CUPS_MEDIA_FLAGS_EXACT</code>: Find an exact match for the size.</p>
+</li>
+    <li>    <p><code>CUPS_MEDIA_FLAGS_READY</code>: If the printer supports media sensing or configuration of the media in each tray/source, find the size amongst the &quot;ready&quot; media.</p>
+</li>
 </ul>
     <p>If a matching size is found for the destination, the size information is stored in the structure pointed to by the <code>size</code> argument and 1 is returned. Otherwise 0 is returned.</p>
     <p>For example, the following code prints the margins for two-sided printing on US Letter media:</p>
@@ -912,7 +953,7 @@ cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
                         cups_dinfo_t *dinfo, unsigned flags,
                         cups_size_t *size);
 </code></pre>
-    <h4><a id="localizing-options-and-values">Localizing Options and Values</a></h4>
+    <h4 id="localizing-options-and-values">Localizing Options and Values</h4>
     <p>CUPS provides three functions to get localized, human-readable strings in the user's current locale for options and values: <code>cupsLocalizeDestMedia</code>, <code>cupsLocalizeDestOption</code>, and <code>cupsLocalizeDestValue</code>:</p>
     <pre><code>const char *
 cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest,
@@ -929,7 +970,7 @@ cupsLocalizeDestValue(http_t *http, cups_dest_t *dest,
                       cups_dinfo_t *info,
                       const char *option, const char *value);
 </code></pre>
-    <h3><a id="submitting-a-print-job">Submitting a Print Job</a></h3>
+    <h3 class="title" id="submitting-a-print-job">Submitting a Print Job</h3>
     <p>Once you are ready to submit a print job, you create a job using the <code>cupsCreateDestJob</code> function:</p>
     <pre><code>ipp_status_t
 cupsCreateDestJob(http_t *http, cups_dest_t *dest,
@@ -980,10 +1021,14 @@ cupsFinishDestDocument(http_t *http, cups_dest_t *dest,
 </code></pre>
     <p>The <code>docname</code> argument specifies the name of the document, typically the original filename. The <code>format</code> argument specifies the MIME media type of the document, including the following constants:</p>
     <ul>
-    <li><code>CUPS_FORMAT_JPEG</code>: &quot;image/jpeg&quot;</li>
-    <li><code>CUPS_FORMAT_PDF</code>: &quot;application/pdf&quot;</li>
-    <li><code>CUPS_FORMAT_POSTSCRIPT</code>: &quot;application/postscript&quot;</li>
-    <li><code>CUPS_FORMAT_TEXT</code>: &quot;text/plain&quot;</li>
+    <li>    <p><code>CUPS_FORMAT_JPEG</code>: &quot;image/jpeg&quot;</p>
+</li>
+    <li>    <p><code>CUPS_FORMAT_PDF</code>: &quot;application/pdf&quot;</p>
+</li>
+    <li>    <p><code>CUPS_FORMAT_POSTSCRIPT</code>: &quot;application/postscript&quot;</p>
+</li>
+    <li>    <p><code>CUPS_FORMAT_TEXT</code>: &quot;text/plain&quot;</p>
+</li>
 </ul>
     <p>The <code>num_options</code> and <code>options</code> arguments specify per-document print options, which at present must be 0 and <code>NULL</code>. The <code>last_document</code> argument specifies whether this is the last document in the job.</p>
     <p>For example, the following code submits a PDF file to the job that was just created:</p>
@@ -1010,9 +1055,9 @@ if (cupsStartDestDocument(CUPS_HTTP_DEFAULT, dest, info,
 
 fclose(fp);
 </code></pre>
-    <h2><a id="sending-ipp-requests">Sending IPP Requests</a></h2>
+    <h2 class="title" id="sending-ipp-requests">Sending IPP Requests</h2>
     <p>CUPS provides a rich API for sending IPP requests to the scheduler or printers, typically from management or utility applications whose primary purpose is not to send print jobs.</p>
-    <h3><a id="connecting-to-the-scheduler-or-printer">Connecting to the Scheduler or Printer</a></h3>
+    <h3 class="title" id="connecting-to-the-scheduler-or-printer">Connecting to the Scheduler or Printer</h3>
     <p>The connection to the scheduler or printer is represented by the HTTP connection type <code>http_t</code>. The <code>cupsConnectDest</code> function connects to the scheduler or printer associated with the destination:</p>
     <pre><code>http_t *
 cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec,
@@ -1033,7 +1078,7 @@ http_t *http = cupsConnectDest(dest, CUPS_DEST_FLAGS_DEVICE,
                                30000, NULL, resource,
                                sizeof(resource), NULL, NULL);
 </code></pre>
-    <h3><a id="creating-an-ipp-request">Creating an IPP Request</a></h3>
+    <h3 class="title" id="creating-an-ipp-request">Creating an IPP Request</h3>
     <p>IPP requests are represented by the IPP message type <code>ipp_t</code> and each IPP attribute in the request is representing using the type <code>ipp_attribute_t</code>. Each IPP request includes an operation code (<code>IPP_OP_CREATE_JOB</code>, <code>IPP_OP_GET_PRINTER_ATTRIBUTES</code>, etc.) and a 32-bit integer identifier.</p>
     <p>The <code>ippNewRequest</code> function creates a new IPP request:</p>
     <pre><code>ipp_t *
@@ -1071,19 +1116,30 @@ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
     <p>The <code>ippAddStrings</code> function adds an attribute with one or more strings, in this case three. The <code>IPP_TAG_KEYWORD</code> argument specifies that the strings are keyword values, which are used for attribute names. All strings use the same language (<code>NULL</code>), and the attribute will contain the three strings in the array <code>requested_attributes</code>.</p>
     <p>CUPS provides many functions to adding attributes of different types:</p>
     <ul>
-    <li><code>ippAddBoolean</code> adds a boolean (<code>IPP_TAG_BOOLEAN</code>) attribute with one value.</li>
-    <li><code>ippAddInteger</code> adds an enum (<code>IPP_TAG_ENUM</code>) or integer (<code>IPP_TAG_INTEGER</code>) attribute with one value.</li>
-    <li><code>ippAddIntegers</code> adds an enum or integer attribute with one or more values.</li>
-    <li><code>ippAddOctetString</code> adds an octetString attribute with one value.</li>
-    <li><code>ippAddOutOfBand</code> adds a admin-defined (<code>IPP_TAG_ADMINDEFINE</code>), default (<code>IPP_TAG_DEFAULT</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable (<code>IPP_TAG_NOTSETTABLE</code>), unknown (<code>IPP_TAG_UNKNOWN</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_VALUE</code>) out-of-band attribute.</li>
-    <li><code>ippAddRange</code> adds a rangeOfInteger attribute with one range.</li>
-    <li><code>ippAddRanges</code> adds a rangeOfInteger attribute with one or more ranges.</li>
-    <li><code>ippAddResolution</code> adds a resolution attribute with one resolution.</li>
-    <li><code>ippAddResolutions</code> adds a resolution attribute with one or more resolutions.</li>
-    <li><code>ippAddString</code> adds a charset (<code>IPP_TAG_CHARSET</code>), keyword (<code>IPP_TAG_KEYWORD</code>), mimeMediaType (<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code> and <code>IPP_TAG_NAMELANG</code>), naturalLanguage (<code>IPP_TAG_NATURAL_LANGUAGE</code>), text (<code>IPP_TAG_TEXT</code> and <code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), or uriScheme (<code>IPP_TAG_URISCHEME</code>) attribute with one value.</li>
-    <li><code>ippAddStrings</code> adds a charset, keyword, mimeMediaType, name, naturalLanguage, text, uri, or uriScheme attribute with one or more values.</li>
+    <li>    <p><code>ippAddBoolean</code> adds a boolean (<code>IPP_TAG_BOOLEAN</code>) attribute with one value.</p>
+</li>
+    <li>    <p><code>ippAddInteger</code> adds an enum (<code>IPP_TAG_ENUM</code>) or integer (<code>IPP_TAG_INTEGER</code>) attribute with one value.</p>
+</li>
+    <li>    <p><code>ippAddIntegers</code> adds an enum or integer attribute with one or more values.</p>
+</li>
+    <li>    <p><code>ippAddOctetString</code> adds an octetString attribute with one value.</p>
+</li>
+    <li>    <p><code>ippAddOutOfBand</code> adds a admin-defined (<code>IPP_TAG_ADMINDEFINE</code>), default (<code>IPP_TAG_DEFAULT</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable (<code>IPP_TAG_NOTSETTABLE</code>), unknown (<code>IPP_TAG_UNKNOWN</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_VALUE</code>) out-of-band attribute.</p>
+</li>
+    <li>    <p><code>ippAddRange</code> adds a rangeOfInteger attribute with one range.</p>
+</li>
+    <li>    <p><code>ippAddRanges</code> adds a rangeOfInteger attribute with one or more ranges.</p>
+</li>
+    <li>    <p><code>ippAddResolution</code> adds a resolution attribute with one resolution.</p>
+</li>
+    <li>    <p><code>ippAddResolutions</code> adds a resolution attribute with one or more resolutions.</p>
+</li>
+    <li>    <p><code>ippAddString</code> adds a charset (<code>IPP_TAG_CHARSET</code>), keyword (<code>IPP_TAG_KEYWORD</code>), mimeMediaType (<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code> and <code>IPP_TAG_NAMELANG</code>), naturalLanguage (<code>IPP_TAG_NATURAL_LANGUAGE</code>), text (<code>IPP_TAG_TEXT</code> and <code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), or uriScheme (<code>IPP_TAG_URISCHEME</code>) attribute with one value.</p>
+</li>
+    <li>    <p><code>ippAddStrings</code> adds a charset, keyword, mimeMediaType, name, naturalLanguage, text, uri, or uriScheme attribute with one or more values.</p>
+</li>
 </ul>
-    <h3><a id="sending-the-ipp-request">Sending the IPP Request</a></h3>
+    <h3 class="title" id="sending-the-ipp-request">Sending the IPP Request</h3>
     <p>Once you have created the IPP request, you can send it using the <code>cupsDoRequest</code> function. For example, the following code sends the IPP Get-Printer-Attributes request to the destination and saves the response:</p>
     <pre><code>ipp_t *response = cupsDoRequest(http, request, resource);
 </code></pre>
@@ -1105,7 +1161,7 @@ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
   printf(&quot;Request failed: %s\n&quot;, cupsLastErrorString());
 }
 </code></pre>
-    <h3><a id="processing-the-ipp-response">Processing the IPP Response</a></h3>
+    <h3 class="title" id="processing-the-ipp-response">Processing the IPP Response</h3>
     <p>Each response to an IPP request is also an IPP message (<code>ipp_t</code>) with its own IPP attributes (<code>ipp_attribute_t</code>) that includes a status code (<code>IPP_STATUS_OK</code>, <code>IPP_STATUS_ERROR_BAD_REQUEST</code>, etc.) and the corresponding 32-bit integer identifier from the request.</p>
     <p>For example, the following code finds the printer state attributes and prints their values:</p>
     <pre><code>ipp_attribute_t *attr;
@@ -1142,7 +1198,7 @@ if ((attr = ippFindAttribute(response, &quot;printer-state-reasons&quot;,
     <p>Once you are done using the IPP response message, free it using the <code>ippDelete</code> function:</p>
     <pre><code>ippDelete(response);
 </code></pre>
-    <h3><a id="authentication">Authentication</a></h3>
+    <h3 class="title" id="authentication">Authentication</h3>
     <p>CUPS normally handles authentication through the console. GUI applications should set a password callback using the <code>cupsSetPasswordCB2</code> function:</p>
     <pre><code>void
 cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);
index f94fa72fd79ed7d9fc2722d216cfe5bafd52258e..59832ebdce59181d759c55458dce5222eb301f5b 100644 (file)
@@ -5,7 +5,7 @@
     <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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   PostScript printer driver documentation for CUPS.
 
@@ -477,6 +478,7 @@ h3.title {
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
index b33ca2d273220b060df0ab6a9a136c15d1f3eb5b..f85ebc2d4994e45a6162255fbda6f9ac53844781 100644 (file)
@@ -5,7 +5,7 @@
     <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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   PPD compiler documentation for CUPS.
 
@@ -485,6 +486,7 @@ that describe the features and capabilities of one or more printers.</P>
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
index de573c6169411884ab4690f4e5c8f39b24b7e53d..9b7c84e3fefed8b13c8fc39df93d6e1229325030 100644 (file)
@@ -5,7 +5,7 @@
     <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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   Raster printer driver documentation for CUPS.
 
@@ -477,6 +478,7 @@ h3.title {
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">
index 3782eb7cab083b922a5c9ac887b4b776287c21bd..e0ed28603639094b4c88d9d8defdcd3c0c71f650 100644 (file)
@@ -5,7 +5,7 @@
     <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="creator" content="codedoc v3.2">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -450,6 +450,7 @@ h3.title {
 --></style>
   </head>
   <body>
+    <div class="header">
 <!--
   PPD extension documentation for CUPS.
 
@@ -477,6 +478,7 @@ h3.title {
 </tr>
 </tbody>
 </table></div>
+    </div>
     <div class="contents">
       <h2 class="title">Contents</h2>
       <ul class="contents">