]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - doc/help/spec-ppd.html
Greatly simplify the man page handling.
[thirdparty/cups.git] / doc / help / spec-ppd.html
index d4b5c493433d17d8a78eb6fcf81bb2c75f07b961..3782eb7cab083b922a5c9ac887b4b776287c21bd 100644 (file)
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!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="Mini-XML v2.8">
-<style type="text/css"><!--
+  <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;
 }
@@ -15,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;
@@ -24,9 +32,19 @@ PRE {
   font-family: monaco, courier, monospace;
 }
 
-PRE.command {
-  border: dotted thin #7f7f7f;
-  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;
 }
 
@@ -51,13 +69,6 @@ PRE.man {
   margin: 0;
 }
 
-PRE.example {
-  background: #eeeeee;
-  border: dotted thin #999999;
-  margin-left: 36pt;
-  padding: 10pt;
-}
-
 PRE.command EM, PRE.example EM {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
 }
@@ -72,12 +83,6 @@ P.formula {
   margin-left: 36pt;
 }
 
-BLOCKQUOTE {
-  background: #eeeeee;
-  border: solid thin #999999;
-  padding: 10pt;
-}
-
 A IMG {
   border: none;
 }
@@ -133,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 {
@@ -281,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;
@@ -316,53 +421,43 @@ 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 extension documentation for CUPS.
 
-  Copyright 2007-2011 by Apple Inc.
-  Copyright 1997-2007 by Easy Software Products.
+  Copyright © 2007-2011 by Apple Inc.
+  Copyright © 1997-2007 by Easy Software Products.
 
-  These coded instructions, statements, and computer programs are the
-  property of Apple Inc. and are protected by Federal copyright
-  law.  Distribution and use rights are outlined in the file "LICENSE.txt"
-  which should have been included with this file.  If this file is
-  file is missing or damaged, see the license at "http://www.cups.org/".
+  Licensed under Apache License v2.0.  See the file "LICENSE" for more
+  information.
 -->
 
 <H1 CLASS="title">CUPS PPD Extensions</H1>
@@ -382,78 +477,82 @@ div.contents ul.subcontents li {
 </tr>
 </tbody>
 </table></div>
-<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">CUPS 1.3/macOS 10.6Custom 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="#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 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">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>
@@ -486,7 +585,8 @@ LINE-END = CR / LF / CR LF
 
 <p>CUPS supports several methods of auto-configuration via PPD keywords.</p>
 
-<h3><span class='info'>macOS 10.5</span><a name='APAutoSetupTool'>APAutoSetupTool</a></h3>
+
+<h3 class="title"><span class='info'>macOS 10.5</span><a name='APAutoSetupTool'>APAutoSetupTool</a></h3>
 
 <p class='summary'>*APAutoSetupTool: "/LibraryPrinters/vendor/filename"</p>
 
@@ -501,7 +601,8 @@ LINE-END = CR / LF / CR LF
 *APAutoSetupTool: "/Library/Printers/vendor/Tools/autosetuptool"
 </pre>
 
-<h3><span class='info'>macOS 10.2/CUPS 1.4</span><a name='QUERYKEYWORD'>?MainKeyword</a></h3>
+
+<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>
@@ -530,7 +631,8 @@ LINE-END = CR / LF / CR LF
 *CloseUI: OptionDuplex
 </pre>
 
-<h3><span class='info'>macOS 10.4/CUPS 1.5</span><a name='OID'>OIDMainKeyword</a></h3>
+
+<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>
@@ -561,7 +663,8 @@ LINE-END = CR / LF / CR LF
 
 </blockquote>
 
-<h3><span class='info'>Deprecated</span><a name='cupsColorProfile'>cupsColorProfile</a></h3>
+
+<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>
 
@@ -598,7 +701,7 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 </pre>
 
 
-<h3><span class='info'>macOS 10.3/CUPS 1.2</span><a name='cupsICCProfile'>cupsICCProfile</a></h3>
+<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>
 
@@ -619,7 +722,7 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 *cupsICCProfile ../Default: "/Library/Printers/vendor/Profiles/foo-default.icc"
 </pre>
 
-<h4>Customizing the Profile Selection Keywords</h4>
+<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>
 
@@ -637,7 +740,8 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 *cupsICCQualifier3: Resolution
 </pre>
 
-<h3><span class='info'>macOS 10.4</span><a name='APCustom'>Custom Color Matching Support</a></h3>
+
+<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>
@@ -652,7 +756,7 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 
 </blockquote>
 
-<h4><span class='info'>macOS 10.5</span><a name='APCustomColorMatchingName'>APCustomColorMatchingName</a></h4>
+<h4 class="title"><span class='info'>macOS 10.5</span><a name='APCustomColorMatchingName'>APCustomColorMatchingName</a></h4>
 
 <p class='summary'>*APCustomColorMatchingName name/text: ""</p>
 
@@ -666,7 +770,7 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 *fr.APCustomColorMatchingName name/La AcmeColor(tm): ""
 </pre>
 
-<h4><span class='info'>macOS 10.5</span><a name='APCustomColorMatchingProfile'>APCustomColorMatchingProfile</a></h4>
+<h4 class="title"><span class='info'>macOS 10.5</span><a name='APCustomColorMatchingProfile'>APCustomColorMatchingProfile</a></h4>
 
 <p class='summary'>*APCustomColorMatchingProfile: name</p>
 
@@ -688,7 +792,7 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 *APCustomColorMatchingProfile: AdobeRGB
 </pre>
 
-<h4><span class='info'>macOS 10.5</span><a name='APDefaultCustomColorMatchingProfile'>APDefaultCustomColorMatchingProfile</a></h4>
+<h4 class="title"><span class='info'>macOS 10.5</span><a name='APDefaultCustomColorMatchingProfile'>APDefaultCustomColorMatchingProfile</a></h4>
 
 <p class='summary'>*APDefaultCustomColorMatchingProfile: name</p>
 
@@ -702,7 +806,7 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 *APDefaultCustomColorMatchingProfile: sRGB
 </pre>
 
-<h4><span class='info'>macOS 10.4</span><a name='APSupportsCustomColorMatching'>APSupportsCustomColorMatching</a></h4>
+<h4 class="title"><span class='info'>macOS 10.4</span><a name='APSupportsCustomColorMatching'>APSupportsCustomColorMatching</a></h4>
 
 <p class='summary'>*APSupportsCustomColorMatching: boolean</p>
 
@@ -738,7 +842,8 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 
 </blockquote>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsUIConstraints'>cupsUIConstraints</a></h3>
+
+<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>
@@ -768,7 +873,8 @@ f(x) = density * x <sup style='font-size: 100%'>gamma</sup>
 *cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi"
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsUIResolver'>cupsUIResolver</a></h3>
+
+<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>
 
@@ -985,7 +1091,8 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234"
 
 <p>The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.</p>
 
-<h3>Custom Page Size Code</h3>
+
+<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>
 
@@ -998,7 +1105,8 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234"
 *CustomPageSize True: "pop pop pop &lt;&lt;/PageSize[5 -2 roll]/ImagingBBox null&gt;&gt;setpagedevice"
 </pre>
 
-<h3>Supported PostScript Operators</h3>
+
+<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>
 
@@ -1057,7 +1165,8 @@ PRE B {
 
 </blockquote>
 
-<h3>Supported Page Device Attributes</h3>
+
+<h3 class="title">Supported Page Device Attributes</h3>
 
 <p>Table 2 shows the supported page device attributes along with PostScript code examples.</p>
 
@@ -1328,7 +1437,8 @@ PRE B {
 <p>The CUPS media keywords allow drivers to specify alternate custom page
 size limits based on up to two options.</p>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMediaQualifier2'>cupsMediaQualifier2</a></h3>
+
+<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>
 
@@ -1347,7 +1457,8 @@ custom page size limits.</p>
 *cupsMinSize ..Photo: "300 300"
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMediaQualifier3'>cupsMediaQualifier3</a></h3>
+
+<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>
 
@@ -1366,7 +1477,8 @@ custom page size limits.</p>
 *cupsMinSize ..Photo: "300 300"
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMinSize'>cupsMinSize</a></h3>
+
+<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>
@@ -1389,7 +1501,8 @@ are used to identify options to use for matching.</p>
 *cupsMinSize ..Photo: "300 300"
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMaxSize'>cupsMaxSize</a></h3>
+
+<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>
@@ -1413,7 +1526,7 @@ are used to identify options to use for matching.</p>
 </pre>
 
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsPageSizeCategory'>cupsPageSizeCategory</a></h3>
+<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>
 
@@ -1430,7 +1543,7 @@ are used to identify options to use for matching.</p>
 
 <h2 class='title'><a name='ATTRIBUTES'>General Attributes</a></h2>
 
-<h3><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsBackSide'>cupsBackSide</a></h3>
+<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>
 
@@ -1526,7 +1639,8 @@ will be ignored.</p>
 <p>Also see the related <a href='#APDuplexRequiresFlippedMargin'><tt>APDuplexRequiresFlippedMargin</tt></a>
 keyword.</p>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsCommands'>cupsCommands</a></h3>
+
+<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>
 
@@ -1542,7 +1656,7 @@ by whitespace.</p>
 </pre>
 
 
-<h3><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsEvenDuplex'>cupsEvenDuplex</a></h3>
+<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>
 
@@ -1557,7 +1671,8 @@ printing is selected. The default value is <code>false</code>.</p>
 *cupsEvenDuplex: true
 </pre>
 
-<h3><a name='cupsFax'>cupsFax</a></h3>
+
+<h3 class="title"><a name='cupsFax'>cupsFax</a></h3>
 
 <p class='summary'>*cupsFax: boolean</p>
 
@@ -1569,7 +1684,8 @@ printing is selected. The default value is <code>false</code>.</p>
 *cupsFax: true
 </pre>
 
-<h3><a name='cupsFilter'>cupsFilter</a></h3>
+
+<h3 class="title"><a name='cupsFilter'>cupsFilter</a></h3>
 
 <p class='summary'>*cupsFilter: "source/type cost program"</p>
 
@@ -1591,7 +1707,8 @@ the special filter program "-" may be specified.</p>
 *cupsFilter: "application/vnd.cups-postscript 0 -"
 </pre>
 
-<h3><span class='info'>CUPS 1.5</span><a name='cupsFilter2'>cupsFilter2</a></h3>
+
+<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>
 
@@ -1616,7 +1733,27 @@ the special filter program "-" may be specified.</p>
 *cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -"
 </pre>
 
-<h3><span class='info'>Deprecated</span><a name='cupsFlipDuplex'>cupsFlipDuplex</a></h3>
+
+<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>
 
@@ -1651,7 +1788,8 @@ Ghostscript can use:</p>
 *cupsFlipDuplex: true
 </pre></blockquote>
 
-<h3><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsIPPFinishings'>cupsIPPFinishings</a></h3>
+
+<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>
 
@@ -1667,7 +1805,8 @@ values to PPD options and choices.</p>
 *cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape"
 </pre>
 
-<h3><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsIPPReason'>cupsIPPReason</a></h3>
+
+<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>
 
@@ -1707,7 +1846,8 @@ http://www.vendor.com/help"
 *End
 </pre>
 
-<h3><span class='info'>CUPS 1.5</span><a name='cupsIPPSupplies'>cupsIPPSupplies</a></h3>
+
+<h3 class="title"><span class='info'>CUPS 1.5</span><a name='cupsIPPSupplies'>cupsIPPSupplies</a></h3>
 
 <p class='summary'>*cupsIPPSupplies: boolean</p>
 
@@ -1721,7 +1861,7 @@ http://www.vendor.com/help"
 </pre>
 
 
-<h3><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsJobAccountId'>cupsJobAccountId</a></h3>
+<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>
 
@@ -1735,7 +1875,7 @@ http://www.vendor.com/help"
 </pre>
 
 
-<h3><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsJobAccountingUserId'>cupsJobAccountingUserId</a></h3>
+<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>
 
@@ -1749,11 +1889,24 @@ http://www.vendor.com/help"
 </pre>
 
 
-<h3><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsJobPassword'>cupsJobPassword</a></h3>
+<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. Currently the only supported format is "1111" indicating a 4-digit PIN code.</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>
 
@@ -1763,7 +1916,7 @@ http://www.vendor.com/help"
 </pre>
 
 
-<h3><span class='info'>CUPS 1.2/macOS 10.5</span><a name='cupsLanguages'>cupsLanguages</a></h3>
+<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>
 
@@ -1779,7 +1932,7 @@ list of locale names ("en", "en_US", "fr_CA", etc.)</p>
 </pre>
 
 
-<h3><span class='info'>CUPS 1.7/macOS 10.9</span><a name='cupsMandatory'>cupsMandatory</a></h3>
+<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>
 
@@ -1793,7 +1946,7 @@ list of locale names ("en", "en_US", "fr_CA", etc.)</p>
 </pre>
 
 
-<h3><a name='cupsManualCopies'>cupsManualCopies</a></h3>
+<h3 class="title"><a name='cupsManualCopies'>cupsManualCopies</a></h3>
 
 <p class='summary'>*cupsManualCopies: boolean</p>
 
@@ -1808,7 +1961,8 @@ hardware. The default value is <code>false</code>.</p>
 *cupsManualCopies: true
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMarkerName'>cupsMarkerName</a></h3>
+
+<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>
 
@@ -1822,7 +1976,8 @@ generated by the driver to human readable text.</p>
 *cupsMarkerName cyanToner/Cyan Toner: ""
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsMarkerNotice'>cupsMarkerNotice</a></h3>
+
+<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>
 
@@ -1836,7 +1991,8 @@ are approximate".</p>
 *cupsMarkerNotice: "Supply levels are approximate."
 </pre>
 
-<h3><span class='info'>CUPS 1.6/macOS 10.8</span><a name='cupsMaxCopies'>cupsMaxCopies</a></h3>
+
+<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>
 
@@ -1849,7 +2005,8 @@ are approximate".</p>
 *cupsMaxCopies: 99
 </pre>
 
-<h3><a name='cupsModelNumber'>cupsModelNumber</a></h3>
+
+<h3 class="title"><a name='cupsModelNumber'>cupsModelNumber</a></h3>
 
 <p class='summary'>*cupsModelNumber: number</p>
 
@@ -1865,7 +2022,7 @@ the output for a specific model of printer.</p>
 </pre>
 
 
-<h3><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsPJLCharset'>cupsPJLCharset</a></h3>
+<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>
 
@@ -1880,7 +2037,8 @@ assumed.</p>
 *cupsPJLCharset: "UTF-8"
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsPJLDisplay'>cupsPJLDisplay</a></h3>
+
+<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>
 
@@ -1899,7 +2057,8 @@ to use "@PJL RDYMSG DISPLAY". The default is "job".</p>
 *cupsPJLDisplay: "none"
 </pre>
 
-<h3><span class='info'>CUPS 1.2/macOS 10.5</span><a name='cupsPortMonitor'>cupsPortMonitor</a></h3>
+
+<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>
 
@@ -1931,7 +2090,8 @@ to disable the port monitor for the given URI scheme.</p>
 *cupsPortMonitor usb/USB Status Monitor: "epson-usb"
 </pre>
 
-<h3><span class='info'>CUPS 1.3/macOS 10.5</span><a name='cupsPreFilter'>cupsPreFilter</a></h3>
+
+<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>
 
@@ -1950,7 +2110,7 @@ before the filter that accepts the given MIME type.</p>
 </pre>
 
 
-<h3><span class='info'>CUPS 1.5</span><a name='cupsPrintQuality'>cupsPrintQuality</a></h3>
+<h3 class="title"><span class='info'>CUPS 1.5</span><a name='cupsPrintQuality'>cupsPrintQuality</a></h3>
 
 <p class='summary'>*cupsPrintQuality keyword/text: "code"</p>
 
@@ -1974,7 +2134,8 @@ before the filter that accepts the given MIME type.</p>
 *CloseUI: *cupsPrintQuality
 </pre>
 
-<h3><span class='info'>CUPS 1.5</span><a name='cupsSingleFile'>cupsSingleFile</a></h3>
+
+<h3 class="title"><span class='info'>CUPS 1.5</span><a name='cupsSingleFile'>cupsSingleFile</a></h3>
 
 <p class='summary'>*cupsSingleFile: Boolean</p>
 
@@ -1990,7 +2151,8 @@ before the filter that accepts the given MIME type.</p>
 *cupsSingleFile: True
 </pre>
 
-<h3><span class='info'>CUPS 1.4/macOS 10.6</span><a name='cupsSNMPSupplies'>cupsSNMPSupplies</a></h3>
+
+<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>
 
@@ -2005,7 +2167,8 @@ the standard SNMP Printer MIB OIDs for supply levels. The default value is
 *cupsSNMPSupplies: False
 </pre>
 
-<h3><a name='cupsVersion'>cupsVersion</a></h3>
+
+<h3 class="title"><a name='cupsVersion'>cupsVersion</a></h3>
 
 <p class='summary'>*cupsVersion: major.minor</p>
 
@@ -2021,7 +2184,7 @@ PPD file extensions was used. Currently it must be the string
 </pre>
 
 
-<h3><span class="info">CUPS 1.6/macOS 10.8</span><a name="JCLToPDFInterpreter">JCLToPDFInterpreter</a></h3>
+<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>
 
@@ -2037,7 +2200,7 @@ PPD file extensions was used. Currently it must be the string
 
 <h2 class='title'><a name='MACOSX'>macOS Attributes</a></h2>
 
-<h3><span class='info'>macOS 10.3</span><a name='APDialogExtension'>APDialogExtension</a></h3>
+<h3 class="title"><span class='info'>Deprecated</span><a name='APDialogExtension'>APDialogExtension</a></h3>
 
 <p class='summary'>*APDialogExtension: "/Library/Printers/vendor/filename.plugin"</p>
 
@@ -2049,9 +2212,13 @@ plug-ins.</p>
 
 <blockquote><b>Note:</b>
 
-<p>Starting with macOS 10.5, each plug-in must be compiled "4-way fat"
-(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled
-in order to be usable with all applications.</p>
+<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>
 
@@ -2063,7 +2230,8 @@ in order to be usable with all applications.</p>
 *APDialogExtension: "/Library/Printers/vendor/options.plugin"
 </pre>
 
-<h3><span class='info'>macOS 10.4</span><a name='APDuplexRequiresFlippedMargin'>APDuplexRequiresFlippedMargin</a></h3>
+
+<h3 class="title"><span class='info'>macOS 10.4</span><a name='APDuplexRequiresFlippedMargin'>APDuplexRequiresFlippedMargin</a></h3>
 
 <p class='summary'>*APDuplexRequiresFlippedMargin: boolean</p>
 
@@ -2145,7 +2313,8 @@ and the <tt>Tumble</tt> page attribute.</p>
 <p>Also see the related <a href='#cupsBackSide'><tt>cupsBackSide</tt></a>
 keyword.</p>
 
-<h3><a name='APHelpBook'>APHelpBook</a></h3>
+
+<h3 class="title"><a name='APHelpBook'>APHelpBook</a></h3>
 
 <p class='summary'>*APHelpBook: "bundle URL"</p>
 
@@ -2160,7 +2329,8 @@ looking up IPP reason codes for this printer driver. The
 *APHelpBook: "file:///Library/Printers/vendor/Help.bundle"
 </pre>
 
-<h3><span class='info'>macOS 10.6</span><a name='APICADriver'>APICADriver</a></h3>
+
+<h3 class="title"><span class='info'>macOS 10.6</span><a name='APICADriver'>APICADriver</a></h3>
 
 <p class='summary'>*APICADriver: boolean</p>
 
@@ -2174,7 +2344,8 @@ Architecture (ICA) driver for scanning. The default is <tt>False</tt>.</p>
 *APScanAppBundleID: "com.apple.ImageCaptureApp"
 </pre>
 
-<h3><span class='info'>macOS 10.3</span><a name='APPrinterIconPath'>APPrinterIconPath</a></h3>
+
+<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>
 
@@ -2188,7 +2359,8 @@ displaying the printer. The file must be in the Apple icon format.</p>
 *APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns"
 </pre>
 
-<h3><span class='info'>macOS 10.4</span><a name='APPrinterLowInkTool'>APPrinterLowInkTool</a></h3>
+
+<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>
 
@@ -2205,7 +2377,8 @@ Technical Note TN2144</a> for more information.</p>
 *APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool"
 </pre>
 
-<h3><span class='info'>macOS 10.5</span><a name='APPrinterPreset'>APPrinterPreset</a></h3>
+
+<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>
 
@@ -2275,7 +2448,8 @@ choice (*MainKeyword OptionKeyword) or a preset identifier and value
 *fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: ""
 </pre>
 
-<h3><span class='info'>macOS 10.3</span><a name='APPrinterUtilityPath'>APPrinterUtilityPath</a></h3>
+
+<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>
 
@@ -2290,7 +2464,8 @@ information.</p>
 *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app"
 </pre>
 
-<h3><span class='info'>macOS 10.6</span><a name='APScannerOnly'>APScannerOnly</a></h3>
+
+<h3 class="title"><span class='info'>macOS 10.6</span><a name='APScannerOnly'>APScannerOnly</a></h3>
 
 <p class='summary'>*APScannerOnly: boolean</p>
 
@@ -2304,7 +2479,8 @@ capabilities. The default is <tt>False</tt>.</p>
 *APScannerOnly: True
 </pre>
 
-<h3><span class='info'>macOS 10.3</span><a name='APScanAppBundleID'>APScanAppBundleID</a></h3>
+
+<h3 class="title"><span class='info'>macOS 10.3</span><a name='APScanAppBundleID'>APScanAppBundleID</a></h3>
 
 <p class='summary'>*APScanAppBundleID: "bundle ID"</p>
 
@@ -2321,7 +2497,16 @@ the device.</p>
 
 <h2 class='title'><a name='HISTORY'>Change History</a></h2>
 
-<h3>Changes in CUPS 1.7</h3>
+<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>
 
@@ -2333,7 +2518,7 @@ the device.</p>
 </ul>
 
 
-<h3>Changes in CUPS 1.6</h3>
+<h3 class="title">Changes in CUPS 1.6</h3>
 
 <ul>
 
@@ -2348,7 +2533,7 @@ the device.</p>
 </ul>
 
 
-<h3>Changes in CUPS 1.5</h3>
+<h3 class="title">Changes in CUPS 1.5</h3>
 
 <ul>
 
@@ -2357,7 +2542,7 @@ the device.</p>
 </ul>
 
 
-<h3>Changes in CUPS 1.4.5</h3>
+<h3 class="title">Changes in CUPS 1.4.5</h3>
 
 <ul>
 
@@ -2368,7 +2553,7 @@ the device.</p>
 </ul>
 
 
-<h3>Changes in CUPS 1.4</h3>
+<h3 class="title">Changes in CUPS 1.4</h3>
 
 <ul>
 
@@ -2403,7 +2588,7 @@ the device.</p>
 </ul>
 
 
-<h3>Changes in CUPS 1.3.1</h3>
+<h3 class="title">Changes in CUPS 1.3.1</h3>
 
 <ul>
 
@@ -2418,7 +2603,7 @@ the device.</p>
 </ul>
 
 
-<h3>Changes in CUPS 1.3</h3>
+<h3 class="title">Changes in CUPS 1.3</h3>
 
 <ul>
 
@@ -2437,7 +2622,8 @@ the device.</p>
 
 </ul>
 
-<h3>Changes in CUPS 1.2.8</h3>
+
+<h3 class="title">Changes in CUPS 1.2.8</h3>
 
 <ul>
 
@@ -2446,7 +2632,8 @@ the device.</p>
 
 </ul>
 
-<h3>Changes in CUPS 1.2</h3>
+
+<h3 class="title">Changes in CUPS 1.2</h3>
 
 <ul>
 
@@ -2471,7 +2658,8 @@ the device.</p>
 
 </ul>
 
-<h3>Changes in CUPS 1.1</h3>
+
+<h3 class="title">Changes in CUPS 1.1</h3>
 
 <ul>
 
@@ -2480,6 +2668,6 @@ the device.</p>
        <li>Added <tt>cupsProtocol</tt> keyword</li>
 
 </ul>
-</div>
-</body>
+    </div>
+  </body>
 </html>