From 4f63d6cdafa4052f52fa15e8fc97650c558d45b4 Mon Sep 17 00:00:00 2001 From: Michael Sweet Date: Tue, 28 Nov 2017 12:59:45 -0500 Subject: [PATCH] Add support for finishings-col (Issue #5180) - cups/ppd-cache.c: Look for cupsFinishingTemplate option, finishings-col-database attribute. Add finishings-col with finishing-template. - cups/ppd-private.h: Add array of finishing-template names. - scheduler/printers.c: Add finishings-col-database. --- CHANGES.md | 3 +- cups/ppd-cache.c | 63 +++++++++++++++++++---- cups/ppd-private.h | 1 + doc/help/cupspm.epub | Bin 219681 -> 220297 bytes doc/help/cupspm.html | 29 +++++++++++ doc/help/spec-ppd.html | 73 +++++++++++++++++++++++++++ filter/spec-ppd.shtml | 72 ++++++++++++++++++++++++++ scheduler/printers.c | 31 ++++++++---- xcode/CUPS.xcodeproj/project.pbxproj | 2 +- 9 files changed, 251 insertions(+), 23 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0b370e110..a7a90062c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -CHANGES - 2.3b1 - 2017-11-27 +CHANGES - 2.3b1 - 2017-11-28 ============================ @@ -41,4 +41,5 @@ Changes in CUPS v2.3b1 when available (Issue #5168) - The cups-driverd program incorrectly stopped scanning PPDs as soon as a loop was seen (Issue #5170) +- IPP Everywhere PPDs now support finishing templates (Issue #5180) diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c index 925028790..042ba73cc 100644 --- a/cups/ppd-cache.c +++ b/cups/ppd-cache.c @@ -69,7 +69,8 @@ _cupsConvertOptions( *media_type, /* media-type value */ *collate_str, /* multiple-document-handling value */ *color_attr_name, /* Supported color attribute */ - *mandatory; /* Mandatory attributes */ + *mandatory, /* Mandatory attributes */ + *finishing_template; /* Finishing template */ int num_finishings = 0, /* Number of finishing values */ finishings[10]; /* Finishing enum values */ ppd_choice_t *choice; /* Marked choice */ @@ -136,6 +137,8 @@ _cupsConvertOptions( if (strcmp(mandatory, "copies") && strcmp(mandatory, "destination-uris") && strcmp(mandatory, "finishings") && + strcmp(mandatory, "finishings-col") && + strcmp(mandatory, "finishing-template") && strcmp(mandatory, "job-account-id") && strcmp(mandatory, "job-accounting-user-id") && strcmp(mandatory, "job-password") && @@ -358,10 +361,16 @@ _cupsConvertOptions( * Map finishing options... */ - num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options, (int)(sizeof(finishings) / sizeof(finishings[0])), finishings); - if (num_finishings > 0) + if ((finishing_template = cupsGetOption("cupsFinishingTemplate", num_options, options)) == NULL) + finishing_template = cupsGetOption("finishing-template", num_options, options); + + if (finishing_template) { - ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings", num_finishings, finishings); + ipp_t *fin_col = ippNew(); /* finishings-col value */ + + ippAddString(fin_col, IPP_TAG_JOB, IPP_TAG_KEYWORD, "finishing-template", NULL, finishing_template); + ippAddCollection(request, IPP_TAG_JOB, "finishings-col", fin_col); + ippDelete(fin_col); if (copies != finishings_copies && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL) { @@ -372,6 +381,23 @@ _cupsConvertOptions( ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / finishings_copies); } } + else + { + num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options, (int)(sizeof(finishings) / sizeof(finishings[0])), finishings); + if (num_finishings > 0) + { + ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings", num_finishings, finishings); + + if (copies != finishings_copies && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL) + { + /* + * Send job-pages-per-set attribute to apply finishings correctly... + */ + + ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / finishings_copies); + } + } + } return (copies); } @@ -863,6 +889,13 @@ _ppdCacheCreateWithFile( cupsArrayAdd(pc->finishings, finishings); } + else if (!_cups_strcasecmp(line, "FinishingTemplate")) + { + if (!pc->templates) + pc->templates = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); + + cupsArrayAdd(pc->templates, value); + } else if (!_cups_strcasecmp(line, "MaxCopies")) pc->max_copies = atoi(value); else if (!_cups_strcasecmp(line, "ChargeInfoURI")) @@ -958,7 +991,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ *media_type, /* MediaType option */ *output_bin, /* OutputBin option */ *color_model, /* ColorModel option */ - *duplex; /* Duplex option */ + *duplex, /* Duplex option */ + *ppd_option; /* Other PPD option */ ppd_choice_t *choice; /* Current InputSlot/MediaType */ pwg_map_t *map; /* Current source/type map */ ppd_attr_t *ppd_attr; /* Current PPD preset attribute */ @@ -1695,8 +1729,6 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ * No IPP mapping data, try to map common/standard PPD keywords... */ - ppd_option_t *ppd_option; /* PPD option */ - pc->finishings = cupsArrayNew3((cups_array_func_t)pwg_compare_finishings, NULL, NULL, 0, NULL, (cups_afree_func_t)pwg_free_finishings); if ((ppd_option = ppdFindOption(ppd, "StapleLocation")) != NULL) @@ -1798,6 +1830,14 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ } } + if ((ppd_option = ppdFindOption(ppd, "cupsFinishingTemplate")) != NULL) + { + pc->templates = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0, (cups_acopy_func_t)_cupsStrAlloc, (cups_afree_func_t)_cupsStrFree); + + for (choice = ppd_option->choices, i = ppd_option->num_choices; i > 0; choice ++, i --) + cupsArrayAdd(pc->templates, (void *)choice->choice); + } + /* * Max copies... */ @@ -2730,7 +2770,7 @@ _ppdCacheWriteFile( pwg_map_t *map; /* Current map */ _pwg_finishings_t *f; /* Current finishing option */ cups_option_t *option; /* Current option */ - const char *value; /* Filter/pre-filter value */ + const char *value; /* String value */ char newfile[1024]; /* New filename */ @@ -2878,6 +2918,9 @@ _ppdCacheWriteFile( cupsFilePutChar(fp, '\n'); } + for (value = (const char *)cupsArrayFirst(pc->templates); value; value = (const char *)cupsArrayNext(pc->templates)) + cupsFilePutConf(fp, "FinishingTemplate", value); + /* * Max copies... */ @@ -4036,8 +4079,8 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */ cupsFilePrintf(fp, "*OpenUI *cupsFinishingTemplate/%s: PickOne\n", _cupsLangString(lang, _("Finishing Preset"))); cupsFilePuts(fp, "*OrderDependency: 10 AnySetup *cupsFinishingTemplate\n"); - cupsFilePuts(fp, "*DefaultcupsFinishingTemplate: None\n"); - cupsFilePrintf(fp, "*cupsFinishingTemplate None/%s: \"\"\n", _cupsLangString(lang, _("None"))); + cupsFilePuts(fp, "*DefaultcupsFinishingTemplate: none\n"); + cupsFilePrintf(fp, "*cupsFinishingTemplate none/%s: \"\"\n", _cupsLangString(lang, _("None"))); templates = cupsArrayNew((cups_array_func_t)strcmp, NULL); count = ippGetCount(attr); diff --git a/cups/ppd-private.h b/cups/ppd-private.h index e7c0d6e5f..6cd168327 100644 --- a/cups/ppd-private.h +++ b/cups/ppd-private.h @@ -139,6 +139,7 @@ struct _ppd_cache_s /**** PPD cache and PWG conversion data ****/ *prefilters; /* cupsPreFilter values */ int single_file; /* cupsSingleFile value */ cups_array_t *finishings; /* cupsIPPFinishings values */ + cups_array_t *templates; /* cupsFinishingTemplate values */ int max_copies, /* cupsMaxCopies value */ account_id, /* cupsJobAccountId value */ accounting_user_id; /* cupsJobAccountingUserId value */ diff --git a/doc/help/cupspm.epub b/doc/help/cupspm.epub index 331d9be1d76624b394eef68d80159dfad0a1baf4..e857f988bcde430145c2e99828156d559babe646 100644 GIT binary patch delta 17066 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 delta 16563 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 a-0bcC*8;p**+42dfbb4bnSKP&Rt5l*(iCL? diff --git a/doc/help/cupspm.html b/doc/help/cupspm.html index ba52cad6a..b07dadb00 100644 --- a/doc/help/cupspm.html +++ b/doc/help/cupspm.html @@ -6291,15 +6291,21 @@ are server-oriented...

IPP operations

Constants

+ + + + + + @@ -6315,32 +6321,52 @@ are server-oriented...

+ + + + + + + + + + + + + + + + + + + +
IPP_OP_ALLOCATE_PRINTER_RESOURCES Allocate-Printer-Resources: Use resources for a printer.
IPP_OP_CANCEL_CURRENT_JOB Cancel-Current-Job: Cancel the current job
IPP_OP_CANCEL_JOB Cancel-Job: Cancel a job
IPP_OP_CANCEL_JOBS Cancel-Jobs: Cancel all jobs (administrative)
IPP_OP_CANCEL_MY_JOBS Cancel-My-Jobs: Cancel a user's jobs
IPP_OP_CANCEL_RESOURCE Cancel-Resource: Uninstall a resource.
IPP_OP_CANCEL_SUBSCRIPTION  CUPS 1.2/macOS 10.5  Cancel-Subscription: Cancel a subscription
IPP_OP_CLOSE_JOB Close-Job: Close a job and start printing
IPP_OP_CREATE_JOB Create-Job: Create an empty print job
IPP_OP_CREATE_JOB_SUBSCRIPTIONS  CUPS 1.2/macOS 10.5  Create-Job-Subscriptions: Create one of more job subscriptions
IPP_OP_CREATE_PRINTER Create-Printer: Create a new service.
IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS  CUPS 1.2/macOS 10.5  Create-Printer-Subscriptions: Create one or more printer subscriptions
IPP_OP_CREATE_RESOURCE Create-Resource: Create a new (empty) resource.
IPP_OP_CREATE_RESOURCE_SUBSCRIPTIONS Create-Resource-Subscriptions: Create event subscriptions for a resource.
IPP_OP_CREATE_SYSTEM_SUBSCRIPTIONS Create-System-Subscriptions: Create event subscriptions for a system.
IPP_OP_CUPS_ADD_MODIFY_CLASS CUPS-Add-Modify-Class: Add or modify a class
IPP_OP_CUPS_ADD_MODIFY_PRINTER CUPS-Add-Modify-Printer: Add or modify a printer
IPP_OP_CUPS_AUTHENTICATE_JOB  CUPS 1.2/macOS 10.5  CUPS-Authenticate-Job: Authenticate a job
IPP_OP_CUPS_INVALID Invalid operation name for ippOpValue
IPP_OP_CUPS_MOVE_JOB CUPS-Move-Job: Move a job to a different printer
IPP_OP_CUPS_SET_DEFAULT CUPS-Set-Default: Set the default printer
IPP_OP_DEALLOCATE_PRINTER_RESOURCES Deallocate-Printer-Resources: Stop using resources for a printer.
IPP_OP_DELETE_PRINTER Delete-Printer: Delete an existing service.
IPP_OP_DISABLE_ALL_PRINTERS Disable-All-Printers: Stop accepting new jobs on all services.
IPP_OP_DISABLE_PRINTER Disable-Printer: Reject new jobs for a printer
IPP_OP_ENABLE_ALL_PRINTERS Enable-All-Printers: Start accepting new jobs on all services.
IPP_OP_ENABLE_PRINTER Enable-Printer: Accept new jobs for a printer
IPP_OP_GET_JOBS Get-Jobs: Get a list of jobs
IPP_OP_GET_JOB_ATTRIBUTES Get-Job-Attribute: Get information about a job
IPP_OP_GET_NOTIFICATIONS  CUPS 1.2/macOS 10.5  Get-Notifications: Get notification events
IPP_OP_GET_PRINTERS Get-Printers: Get a list of services.
IPP_OP_GET_PRINTER_ATTRIBUTES Get-Printer-Attributes: Get information about a printer
IPP_OP_GET_PRINTER_SUPPORTED_VALUES Get-Printer-Supported-Values: Get supported values
IPP_OP_GET_SUBSCRIPTIONS  CUPS 1.2/macOS 10.5  Get-Subscriptions: Get list of subscriptions
IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES  CUPS 1.2/macOS 10.5  Get-Subscription-Attributes: Get subscription information
IPP_OP_GET_SYSTEM_ATTRIBUTES Get-System-Attributes: Get system object attributes.
IPP_OP_GET_SYSTEM_SUPPORTED_VALUES Get-System-Supported-Values: Get supported values for system object attributes.
IPP_OP_HOLD_JOB Hold-Job: Hold a job for printing
IPP_OP_HOLD_NEW_JOBS Hold-New-Jobs: Hold new jobs
IPP_OP_IDENTIFY_PRINTER Identify-Printer: Make the printer beep, flash, or display a message for identification
IPP_OP_INSTALL_RESOURCE Install-Resource: Install a resource.
IPP_OP_PAUSE_ALL_PRINTERS Pause-All-Printers: Stop all services immediately.
IPP_OP_PAUSE_ALL_PRINTERS_AFTER_CURRENT_JOB Pause-All-Printers-After-Current-Job: Stop all services after processing the current jobs.
IPP_OP_PAUSE_PRINTER Pause-Printer: Stop a printer
IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB Pause-Printer-After-Current-Job: Stop printer after the current job
IPP_OP_PRINT_JOB Print-Job: Print a single file
IPP_OP_PROMOTE_JOB Promote-Job: Promote a job to print sooner
IPP_OP_REGISTER_OUTPUT_DEVICE Register-Output-Device: Register a remote service.
IPP_OP_RELEASE_HELD_NEW_JOBS Release-Held-New-Jobs: Release new jobs that were previously held
IPP_OP_RELEASE_JOB Release-Job: Release a job for printing
IPP_OP_RENEW_SUBSCRIPTION  CUPS 1.2/macOS 10.5  Renew-Subscription: Renew a printer subscription
IPP_OP_RESTART_JOB  DEPRECATED  Restart-Job: Reprint a job
IPP_OP_RESTART_SYSTEM Restart-System: Restart all services.
IPP_OP_RESUME_ALL_PRINTERS Resume-All-Printers: Start job processing on all services.
IPP_OP_RESUME_JOB Resume-Job: Resume the current job
IPP_OP_RESUME_PRINTER Resume-Printer: Start a printer
IPP_OP_SCHEDULE_JOB_AFTER Schedule-Job-After: Schedule a job to print after another
IPP_OP_SEND_DOCUMENT Send-Document: Add a file to a job
IPP_OP_SEND_RESOURCE_DATA Send-Resource-Data: Upload the data for a resource.
IPP_OP_SET_JOB_ATTRIBUTES Set-Job-Attributes: Set job values
IPP_OP_SET_PRINTER_ATTRIBUTES Set-Printer-Attributes: Set printer values
IPP_OP_SET_RESOURCE_ATTRIBUTES Set-Resource-Attributes: Set resource object attributes.
IPP_OP_SET_SYSTEM_ATTRIBUTES Set-System-Attributes: Set system object attributes.
IPP_OP_SHUTDOWN_ALL_PRINTERS Shutdown-All-Printers: Shutdown all services.
IPP_OP_SHUTDOWN_ONE_PRINTER Shutdown-One-Printer: Shutdown a service.
IPP_OP_STARTUP_ALL_PRINTERS Startup-All-Printers: Startup all services.
IPP_OP_STARTUP_ONE_PRINTER Startup-One-Printer: Start a service.
IPP_OP_SUSPEND_CURRENT_JOB Suspend-Current-Job: Suspend the current job
IPP_OP_VALIDATE_JOB Validate-Job: Validate job values prior to submission
@@ -6461,6 +6487,7 @@ are server-oriented...

IPP_TAG_DATE Date/time value IPP_TAG_DEFAULT Default value IPP_TAG_DELETEATTR Delete-attribute value + IPP_TAG_DOCUMENT Document group IPP_TAG_END End-of-attributes IPP_TAG_ENUM Enumeration value IPP_TAG_EVENT_NOTIFICATION Event group @@ -6477,8 +6504,10 @@ are server-oriented...

IPP_TAG_PRINTER Printer group IPP_TAG_RANGE Range value IPP_TAG_RESOLUTION Resolution value + IPP_TAG_RESOURCE Resource group IPP_TAG_STRING Octet string value IPP_TAG_SUBSCRIPTION Subscription group + IPP_TAG_SYSTEM System group IPP_TAG_TEXT Text value IPP_TAG_TEXTLANG Text-with-language value IPP_TAG_UNKNOWN Unknown value diff --git a/doc/help/spec-ppd.html b/doc/help/spec-ppd.html index 06f5769a8..dd2c07a15 100644 --- a/doc/help/spec-ppd.html +++ b/doc/help/spec-ppd.html @@ -419,6 +419,7 @@ div.contents ul.subcontents li {
  • cupsFax
  • cupsFilter
  • cupsFilter2
  • +
  • cupsFinishingTemplate
  • cupsFlipDuplex
  • cupsIPPFinishings
  • cupsIPPReason
  • @@ -491,6 +492,7 @@ LINE-END = CR / LF / CR LF

    CUPS supports several methods of auto-configuration via PPD keywords.

    +

    macOS 10.5APAutoSetupTool

    *APAutoSetupTool: "/LibraryPrinters/vendor/filename"

    @@ -506,6 +508,7 @@ LINE-END = CR / LF / CR LF *APAutoSetupTool: "/Library/Printers/vendor/Tools/autosetuptool" +

    macOS 10.2/CUPS 1.4?MainKeyword

    *?MainKeyword: "
    @@ -535,6 +538,7 @@ LINE-END = CR / LF / CR LF *CloseUI: OptionDuplex +

    macOS 10.4/CUPS 1.5OIDMainKeyword

    *?OIDMainKeyword: ".n.n.n..."
    @@ -566,6 +570,7 @@ LINE-END = CR / LF / CR LF +

    DeprecatedcupsColorProfile

    *cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"

    @@ -642,6 +647,7 @@ f(x) = density * x gamma *cupsICCQualifier3: Resolution +

    macOS 10.4Custom Color Matching Support

    *APSupportsCustomColorMatching: true
    @@ -743,6 +749,7 @@ f(x) = density * x gamma +

    CUPS 1.4/macOS 10.6cupsUIConstraints

    *cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."
    @@ -773,6 +780,7 @@ f(x) = density * x gamma *cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi" +

    CUPS 1.4/macOS 10.6cupsUIResolver

    *cupsUIResolver resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."

    @@ -990,6 +998,7 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234"

    The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.

    +

    Custom Page Size Code

    There are many possible implementations of the CustomPageSize code. For CUPS raster drivers, the following code is recommended:

    @@ -1003,6 +1012,7 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234" *CustomPageSize True: "pop pop pop <</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice" +

    Supported PostScript Operators

    CUPS supports the following PostScript operators in addition to the usual PostScript number, string (literal and hex-encoded), boolean, null, and name values:

    @@ -1062,6 +1072,7 @@ PRE B { +

    Supported Page Device Attributes

    Table 2 shows the supported page device attributes along with PostScript code examples.

    @@ -1333,6 +1344,7 @@ PRE B {

    The CUPS media keywords allow drivers to specify alternate custom page size limits based on up to two options.

    +

    CUPS 1.4/macOS 10.6cupsMediaQualifier2

    *cupsMediaQualifier2: MainKeyword

    @@ -1352,6 +1364,7 @@ custom page size limits.

    *cupsMinSize ..Photo: "300 300" +

    CUPS 1.4/macOS 10.6cupsMediaQualifier3

    *cupsMediaQualifier3: MainKeyword

    @@ -1371,6 +1384,7 @@ custom page size limits.

    *cupsMinSize ..Photo: "300 300" +

    CUPS 1.4/macOS 10.6cupsMinSize

    *cupsMinSize .Qualifier2.Qualifier3: "width length"
    @@ -1394,6 +1408,7 @@ are used to identify options to use for matching.

    *cupsMinSize ..Photo: "300 300" +

    CUPS 1.4/macOS 10.6cupsMaxSize

    *cupsMaxSize .Qualifier2.Qualifier3: "width length"
    @@ -1531,6 +1546,7 @@ will be ignored.

    Also see the related APDuplexRequiresFlippedMargin keyword.

    +

    CUPS 1.4/macOS 10.6cupsCommands

    *cupsCommands: "name name2 ... nameN"

    @@ -1562,6 +1578,7 @@ printing is selected. The default value is false.

    *cupsEvenDuplex: true +

    cupsFax

    *cupsFax: boolean

    @@ -1574,6 +1591,7 @@ printing is selected. The default value is false.

    *cupsFax: true +

    cupsFilter

    *cupsFilter: "source/type cost program"

    @@ -1596,6 +1614,7 @@ the special filter program "-" may be specified.

    *cupsFilter: "application/vnd.cups-postscript 0 -" +

    CUPS 1.5cupsFilter2

    *cupsFilter2: "source/type destination/type cost program"

    @@ -1621,6 +1640,26 @@ the special filter program "-" may be specified.

    *cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -" + +

    CUPS 2.3cupsFinishingTemplate

    + +

    *cupsFinishingTemplate name/text: ""

    + +

    This option keyword specifies a finishing template (preset) that applies zero or more finishing processes to a job. Unlike cupsIPPFinishings, only one template can be selected by the user. PPD files also generally apply a constraint between this option and other finishing options like Booklet, FoldType, PunchMedia, and StapleWhen.

    + +

    Examples:

    + +
    +*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: ""
    +
    + +

    DeprecatedcupsFlipDuplex

    *cupsFlipDuplex: boolean

    @@ -1656,6 +1695,7 @@ Ghostscript can use:

    *cupsFlipDuplex: true +

    CUPS 1.3/macOS 10.5cupsIPPFinishings

    *cupsIPPFinishings number/text: "*Option Choice ..."

    @@ -1672,6 +1712,7 @@ values to PPD options and choices.

    *cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape" +

    CUPS 1.3/macOS 10.5cupsIPPReason

    *cupsIPPReason reason/Reason Text: "optional URIs"

    @@ -1712,6 +1753,7 @@ http://www.vendor.com/help" *End +

    CUPS 1.5cupsIPPSupplies

    *cupsIPPSupplies: boolean

    @@ -1813,6 +1855,7 @@ hardware. The default value is false.

    *cupsManualCopies: true +

    CUPS 1.4/macOS 10.6cupsMarkerName

    *cupsMarkerName/Name Text: ""

    @@ -1827,6 +1870,7 @@ generated by the driver to human readable text.

    *cupsMarkerName cyanToner/Cyan Toner: "" +

    CUPS 1.4/macOS 10.6cupsMarkerNotice

    *cupsMarkerNotice: "disclaimer text"

    @@ -1841,6 +1885,7 @@ are approximate".

    *cupsMarkerNotice: "Supply levels are approximate." +

    CUPS 1.6/macOS 10.8cupsMaxCopies

    *cupsMaxCopies: integer

    @@ -1854,6 +1899,7 @@ are approximate".

    *cupsMaxCopies: 99 +

    cupsModelNumber

    *cupsModelNumber: number

    @@ -1885,6 +1931,7 @@ assumed.

    *cupsPJLCharset: "UTF-8" +

    CUPS 1.4/macOS 10.6cupsPJLDisplay

    *cupsPJLDisplay: "what"

    @@ -1904,6 +1951,7 @@ to use "@PJL RDYMSG DISPLAY". The default is "job".

    *cupsPJLDisplay: "none" +

    CUPS 1.2/macOS 10.5cupsPortMonitor

    *cupsPortMonitor urischeme/Descriptive Text: "port monitor"

    @@ -1936,6 +1984,7 @@ to disable the port monitor for the given URI scheme.

    *cupsPortMonitor usb/USB Status Monitor: "epson-usb" +

    CUPS 1.3/macOS 10.5cupsPreFilter

    *cupsPreFilter: "source/type cost program"

    @@ -1979,6 +2028,7 @@ before the filter that accepts the given MIME type.

    *CloseUI: *cupsPrintQuality +

    CUPS 1.5cupsSingleFile

    *cupsSingleFile: Boolean

    @@ -1995,6 +2045,7 @@ before the filter that accepts the given MIME type.

    *cupsSingleFile: True +

    CUPS 1.4/macOS 10.6cupsSNMPSupplies

    *cupsSNMPSupplies: boolean

    @@ -2010,6 +2061,7 @@ the standard SNMP Printer MIB OIDs for supply levels. The default value is *cupsSNMPSupplies: False +

    cupsVersion

    *cupsVersion: major.minor

    @@ -2068,6 +2120,7 @@ in order to be usable with all applications.

    *APDialogExtension: "/Library/Printers/vendor/options.plugin" +

    macOS 10.4APDuplexRequiresFlippedMargin

    *APDuplexRequiresFlippedMargin: boolean

    @@ -2150,6 +2203,7 @@ and the Tumble page attribute.

    Also see the related cupsBackSide keyword.

    +

    APHelpBook

    *APHelpBook: "bundle URL"

    @@ -2165,6 +2219,7 @@ looking up IPP reason codes for this printer driver. The *APHelpBook: "file:///Library/Printers/vendor/Help.bundle" +

    macOS 10.6APICADriver

    *APICADriver: boolean

    @@ -2179,6 +2234,7 @@ Architecture (ICA) driver for scanning. The default is False.

    *APScanAppBundleID: "com.apple.ImageCaptureApp" +

    macOS 10.3APPrinterIconPath

    *APPrinterIconPath: "/Library/Printers/vendor/filename.icns"

    @@ -2193,6 +2249,7 @@ displaying the printer. The file must be in the Apple icon format.

    *APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns" +

    macOS 10.4APPrinterLowInkTool

    *APPrinterLowInkTool: "/Library/Printers/vendor/program"

    @@ -2210,6 +2267,7 @@ Technical Note TN2144 for more information.

    *APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool" +

    macOS 10.5APPrinterPreset

    *APPrinterPreset name/text: "*Option Choice ..."

    @@ -2280,6 +2338,7 @@ choice (*MainKeyword OptionKeyword) or a preset identifier and value *fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: "" +

    macOS 10.3APPrinterUtilityPath

    *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/filename.app"

    @@ -2295,6 +2354,7 @@ information.

    *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app" +

    macOS 10.6APScannerOnly

    *APScannerOnly: boolean

    @@ -2309,6 +2369,7 @@ capabilities. The default is False.

    *APScannerOnly: True +

    macOS 10.3APScanAppBundleID

    *APScanAppBundleID: "bundle ID"

    @@ -2326,6 +2387,15 @@ the device.

    Change History

    +

    Changes in CUPS 2.3

    + + + +

    Changes in CUPS 1.7

      @@ -2442,6 +2512,7 @@ the device.

    +

    Changes in CUPS 1.2.8

      @@ -2451,6 +2522,7 @@ the device.

    +

    Changes in CUPS 1.2

      @@ -2476,6 +2548,7 @@ the device.

    +

    Changes in CUPS 1.1

      diff --git a/filter/spec-ppd.shtml b/filter/spec-ppd.shtml index 3b7543082..6f84dbdab 100644 --- a/filter/spec-ppd.shtml +++ b/filter/spec-ppd.shtml @@ -30,6 +30,7 @@ LINE-END = CR / LF / CR LF

      CUPS supports several methods of auto-configuration via PPD keywords.

      +

      macOS 10.5APAutoSetupTool

      *APAutoSetupTool: "/LibraryPrinters/vendor/filename"

      @@ -45,6 +46,7 @@ LINE-END = CR / LF / CR LF *APAutoSetupTool: "/Library/Printers/vendor/Tools/autosetuptool" +

      macOS 10.2/CUPS 1.4?MainKeyword

      *?MainKeyword: "
      @@ -74,6 +76,7 @@ LINE-END = CR / LF / CR LF *CloseUI: OptionDuplex +

      macOS 10.4/CUPS 1.5OIDMainKeyword

      *?OIDMainKeyword: ".n.n.n..."
      @@ -105,6 +108,7 @@ LINE-END = CR / LF / CR LF +

      DeprecatedcupsColorProfile

      *cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"

      @@ -181,6 +185,7 @@ f(x) = density * x gamma *cupsICCQualifier3: Resolution +

      macOS 10.4Custom Color Matching Support

      *APSupportsCustomColorMatching: true
      @@ -282,6 +287,7 @@ f(x) = density * x gamma +

      CUPS 1.4/macOS 10.6cupsUIConstraints

      *cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."
      @@ -312,6 +318,7 @@ f(x) = density * x gamma *cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi" +

      CUPS 1.4/macOS 10.6cupsUIResolver

      *cupsUIResolver resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."

      @@ -529,6 +536,7 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234"

      The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.

      +

      Custom Page Size Code

      There are many possible implementations of the CustomPageSize code. For CUPS raster drivers, the following code is recommended:

      @@ -542,6 +550,7 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234" *CustomPageSize True: "pop pop pop <</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice" +

      Supported PostScript Operators

      CUPS supports the following PostScript operators in addition to the usual PostScript number, string (literal and hex-encoded), boolean, null, and name values:

      @@ -601,6 +610,7 @@ PRE B { +

      Supported Page Device Attributes

      Table 2 shows the supported page device attributes along with PostScript code examples.

      @@ -872,6 +882,7 @@ PRE B {

      The CUPS media keywords allow drivers to specify alternate custom page size limits based on up to two options.

      +

      CUPS 1.4/macOS 10.6cupsMediaQualifier2

      *cupsMediaQualifier2: MainKeyword

      @@ -891,6 +902,7 @@ custom page size limits.

      *cupsMinSize ..Photo: "300 300" +

      CUPS 1.4/macOS 10.6cupsMediaQualifier3

      *cupsMediaQualifier3: MainKeyword

      @@ -910,6 +922,7 @@ custom page size limits.

      *cupsMinSize ..Photo: "300 300" +

      CUPS 1.4/macOS 10.6cupsMinSize

      *cupsMinSize .Qualifier2.Qualifier3: "width length"
      @@ -933,6 +946,7 @@ are used to identify options to use for matching.

      *cupsMinSize ..Photo: "300 300" +

      CUPS 1.4/macOS 10.6cupsMaxSize

      *cupsMaxSize .Qualifier2.Qualifier3: "width length"
      @@ -1070,6 +1084,7 @@ will be ignored.

      Also see the related APDuplexRequiresFlippedMargin keyword.

      +

      CUPS 1.4/macOS 10.6cupsCommands

      *cupsCommands: "name name2 ... nameN"

      @@ -1101,6 +1116,7 @@ printing is selected. The default value is false.

      *cupsEvenDuplex: true +

      cupsFax

      *cupsFax: boolean

      @@ -1113,6 +1129,7 @@ printing is selected. The default value is false.

      *cupsFax: true +

      cupsFilter

      *cupsFilter: "source/type cost program"

      @@ -1135,6 +1152,7 @@ the special filter program "-" may be specified.

      *cupsFilter: "application/vnd.cups-postscript 0 -" +

      CUPS 1.5cupsFilter2

      *cupsFilter2: "source/type destination/type cost program"

      @@ -1160,6 +1178,26 @@ the special filter program "-" may be specified.

      *cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -" + +

      CUPS 2.3cupsFinishingTemplate

      + +

      *cupsFinishingTemplate name/text: ""

      + +

      This option keyword specifies a finishing template (preset) that applies zero or more finishing processes to a job. Unlike cupsIPPFinishings, only one template can be selected by the user. PPD files also generally apply a constraint between this option and other finishing options like Booklet, FoldType, PunchMedia, and StapleWhen.

      + +

      Examples:

      + +
      +*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: ""
      +
      + +

      DeprecatedcupsFlipDuplex

      *cupsFlipDuplex: boolean

      @@ -1195,6 +1233,7 @@ Ghostscript can use:

      *cupsFlipDuplex: true +

      CUPS 1.3/macOS 10.5cupsIPPFinishings

      *cupsIPPFinishings number/text: "*Option Choice ..."

      @@ -1211,6 +1250,7 @@ values to PPD options and choices.

      *cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape" +

      CUPS 1.3/macOS 10.5cupsIPPReason

      *cupsIPPReason reason/Reason Text: "optional URIs"

      @@ -1251,6 +1291,7 @@ http://www.vendor.com/help" *End +

      CUPS 1.5cupsIPPSupplies

      *cupsIPPSupplies: boolean

      @@ -1352,6 +1393,7 @@ hardware. The default value is false.

      *cupsManualCopies: true +

      CUPS 1.4/macOS 10.6cupsMarkerName

      *cupsMarkerName/Name Text: ""

      @@ -1366,6 +1408,7 @@ generated by the driver to human readable text.

      *cupsMarkerName cyanToner/Cyan Toner: "" +

      CUPS 1.4/macOS 10.6cupsMarkerNotice

      *cupsMarkerNotice: "disclaimer text"

      @@ -1380,6 +1423,7 @@ are approximate".

      *cupsMarkerNotice: "Supply levels are approximate." +

      CUPS 1.6/macOS 10.8cupsMaxCopies

      *cupsMaxCopies: integer

      @@ -1393,6 +1437,7 @@ are approximate".

      *cupsMaxCopies: 99 +

      cupsModelNumber

      *cupsModelNumber: number

      @@ -1424,6 +1469,7 @@ assumed.

      *cupsPJLCharset: "UTF-8" +

      CUPS 1.4/macOS 10.6cupsPJLDisplay

      *cupsPJLDisplay: "what"

      @@ -1443,6 +1489,7 @@ to use "@PJL RDYMSG DISPLAY". The default is "job".

      *cupsPJLDisplay: "none" +

      CUPS 1.2/macOS 10.5cupsPortMonitor

      *cupsPortMonitor urischeme/Descriptive Text: "port monitor"

      @@ -1475,6 +1522,7 @@ to disable the port monitor for the given URI scheme.

      *cupsPortMonitor usb/USB Status Monitor: "epson-usb" +

      CUPS 1.3/macOS 10.5cupsPreFilter

      *cupsPreFilter: "source/type cost program"

      @@ -1518,6 +1566,7 @@ before the filter that accepts the given MIME type.

      *CloseUI: *cupsPrintQuality +

      CUPS 1.5cupsSingleFile

      *cupsSingleFile: Boolean

      @@ -1534,6 +1583,7 @@ before the filter that accepts the given MIME type.

      *cupsSingleFile: True +

      CUPS 1.4/macOS 10.6cupsSNMPSupplies

      *cupsSNMPSupplies: boolean

      @@ -1549,6 +1599,7 @@ the standard SNMP Printer MIB OIDs for supply levels. The default value is *cupsSNMPSupplies: False +

      cupsVersion

      *cupsVersion: major.minor

      @@ -1607,6 +1658,7 @@ in order to be usable with all applications.

      *APDialogExtension: "/Library/Printers/vendor/options.plugin" +

      macOS 10.4APDuplexRequiresFlippedMargin

      *APDuplexRequiresFlippedMargin: boolean

      @@ -1689,6 +1741,7 @@ and the Tumble page attribute.

      Also see the related cupsBackSide keyword.

      +

      APHelpBook

      *APHelpBook: "bundle URL"

      @@ -1704,6 +1757,7 @@ looking up IPP reason codes for this printer driver. The *APHelpBook: "file:///Library/Printers/vendor/Help.bundle" +

      macOS 10.6APICADriver

      *APICADriver: boolean

      @@ -1718,6 +1772,7 @@ Architecture (ICA) driver for scanning. The default is False.

      *APScanAppBundleID: "com.apple.ImageCaptureApp" +

      macOS 10.3APPrinterIconPath

      *APPrinterIconPath: "/Library/Printers/vendor/filename.icns"

      @@ -1732,6 +1787,7 @@ displaying the printer. The file must be in the Apple icon format.

      *APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns" +

      macOS 10.4APPrinterLowInkTool

      *APPrinterLowInkTool: "/Library/Printers/vendor/program"

      @@ -1749,6 +1805,7 @@ Technical Note TN2144 for more information.

      *APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool" +

      macOS 10.5APPrinterPreset

      *APPrinterPreset name/text: "*Option Choice ..."

      @@ -1819,6 +1876,7 @@ choice (*MainKeyword OptionKeyword) or a preset identifier and value *fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: "" +

      macOS 10.3APPrinterUtilityPath

      *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/filename.app"

      @@ -1834,6 +1892,7 @@ information.

      *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app" +

      macOS 10.6APScannerOnly

      *APScannerOnly: boolean

      @@ -1848,6 +1907,7 @@ capabilities. The default is False.

      *APScannerOnly: True +

      macOS 10.3APScanAppBundleID

      *APScanAppBundleID: "bundle ID"

      @@ -1865,6 +1925,15 @@ the device.

      Change History

      +

      Changes in CUPS 2.3

      + + + +

      Changes in CUPS 1.7

        @@ -1981,6 +2050,7 @@ the device.

      +

      Changes in CUPS 1.2.8

        @@ -1990,6 +2060,7 @@ the device.

      +

      Changes in CUPS 1.2

        @@ -2015,6 +2086,7 @@ the device.

      +

      Changes in CUPS 1.1

        diff --git a/scheduler/printers.c b/scheduler/printers.c index 662c58c98..557d7514f 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c @@ -4098,17 +4098,10 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ input_slot = ppdFindMarkedChoice(ppd, "InputSlot"); media_type = ppdFindMarkedChoice(ppd, "MediaType"); col = new_media_col(pwgsize, - input_slot ? - _ppdCacheGetSource(p->pc, - input_slot->choice) : - NULL, - media_type ? - _ppdCacheGetType(p->pc, - media_type->choice) : - NULL); - - ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-default", - col); + input_slot ? _ppdCacheGetSource(p->pc, input_slot->choice) : NULL, + media_type ? _ppdCacheGetType(p->pc, media_type->choice) : NULL); + + ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER, "media-col-default", col); ippDelete(col); } @@ -4698,6 +4691,22 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ } } + if (p->pc && p->pc->templates) + { + const char *template; /* Finishing template */ + ipp_attribute_t *fin_col_db; /* finishings-col-database attribute */ + ipp_t *fin_col; /* finishings-col value */ + + fin_col_db = ippAddCollections(p->ppd_attrs, IPP_TAG_PRINTER, "finishings-col-database", cupsArrayCount(p->pc->templates), NULL); + for (i = 0, template = (const char *)cupsArrayFirst(p->pc->templates); template; i ++, template = (const char *)cupsArrayNext(p->pc->templates)) + { + fin_col = ippNew(); + ippAddString(fin_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "finishing-template", NULL, template); + ippSetCollection(p->ppd_attrs, &fin_col_db, i, fin_col); + ippDelete(fin_col); + } + } + for (i = 0; i < ppd->num_sizes; i ++) if (ppd->sizes[i].length > 1728) p->type |= CUPS_PRINTER_LARGE; diff --git a/xcode/CUPS.xcodeproj/project.pbxproj b/xcode/CUPS.xcodeproj/project.pbxproj index b057da2c9..b4729ddb6 100644 --- a/xcode/CUPS.xcodeproj/project.pbxproj +++ b/xcode/CUPS.xcodeproj/project.pbxproj @@ -7211,7 +7211,7 @@ 72BF96371333042100B1EAD7 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0920; + LastUpgradeCheck = 0910; ORGANIZATIONNAME = "Apple Inc."; TargetAttributes = { 270695FD1CADF3E200FFE5FB = { -- 2.39.2