ipp
Version:
Internet Printing Protocol (IPP) for nodejs
859 lines (846 loc) • 54.2 kB
JavaScript
/*
The attributes and their syntaxes are complicated. The functions in this
file serve as syntactic sugar that allow the attribute definitions to remain
close to what you will see in the spec. A bit of processing is done at the end
to convert it to one big object tree. If you want to understand what is going on,
uncomment the console.log() at the end of this file.
*/
var tags = require('./tags');
function text(max){
if(!max) max = 1023;
return { type:'text', max: max };
}
function integer(min,max){
if(max==MAX || max===undefined) max = 2147483647;
if(min===undefined) min = -2147483648;
return { type:'integer', tag:tags['integer'], min: min, max: max };
}
function rangeOfInteger(min,max){
if(max==MAX || max===undefined) max = 2147483647;
if(min===undefined) min = -2147483648;
return { type:'rangeOfInteger', tag:tags['rangeOfInteger'], min: min, max: max };
}
function boolean(){
return { type:'boolean', tag:tags['boolean'] };
}
function charset(){
return { type:'charset', tag:tags['charset'], max: 63 };
}
function keyword(){
return { type:'keyword', tag:tags['keyword'], min:1, max:1023 };
}
function naturalLanguage(){
return { type:'naturalLanguage', tag:tags['naturalLanguage'], max: 63 };
}
function dateTime(){
return { type:'dateTime', tag:tags['dateTime'] };
}
function mimeMediaType(){
return { type:'mimeMediaType', tag:tags['mimeMediaType'], max: 255 };
}
function uri(max){
return { type:'uri', tag:tags['uri'], max: max||1023 };
}
function uriScheme(){
return { type:'uriScheme', tag:tags['uriScheme'], max: 63 };
}
function enumeration(){
return { type:'enumeration', tag:tags['enum'] };
}
function resolution(){
return { type:'resolution', tag:tags['resolution'] };
}
function unknown(){
return { type:'unknown', tag:tags['unknown'] };
}
function name(max){
return { type:'name', max: max||1023 };
}
function novalue(){
return { type:'novalue', tag:tags['no-value'] };
}
function octetString(max){
return { type:'octetString', tag:tags['octetString'], max: max||1023 };
}
//Some attributes allow alternate value syntaxes.
//I want to keep the look and feel of the code close to
//that of the RFCs. So, this _ (underscore) function is
//used to group alternates and not be intrusive visually.
function _(arg1, arg2, arg3){
var args = Array.prototype.slice.call(arguments);
args.lookup = {};
const deferred = createDeferred(function(){
args.forEach(function(a,i){
if(typeof a==="function")
args[i] = a();
args.lookup[args[i].type] = args[i];
});
args.alts = Object.keys(args.lookup).sort().join();
return args;
})
return args.some(function(a){ return isDeferred(a) }) ? deferred : deferred();
}
const createDeferred = function (deferred) {
deferred.isDeferred = true;
return deferred;
}
const isDeferred = function (type) {
return typeof type === "function" && type.isDeferred
}
// In IPP, "1setOf" just means "Array"... but it must 1 or more items
// In javascript, functions can't start with a number- so let's just use...
function setof(type){
if(isDeferred(type)){
return createDeferred(function(){
type = type();
type.setof=true;
return type;
})
}
if(typeof type === "function" && !isDeferred(type)){
type = type();
}
type.setof=true;
return type;
}
// In IPP, a "collection" is an set of name-value
// pairs. In javascript, we call them "Objects".
function collection(group, name){
if(!arguments.length)
return { type: "collection", tag:tags.begCollection }
if(typeof group === "string"){
return createDeferred(function(){
return {
type: "collection",
tag:tags.begCollection,
members: attributes[group][name].members
}
});
}
var defer = Object.keys(group).some(function(key){
return isDeferred(group[key])
})
const deferred = createDeferred(function(){
return {
type: "collection",
tag:tags.begCollection,
members: resolve(group)
}
})
return defer? deferred : deferred();
}
var MAX = {};
var attributes = {};
attributes["Document Description"] = {
"attributes-charset": charset,
"attributes-natural-language": naturalLanguage,
"compression": keyword,
"copies-actual": setof(integer(1,MAX)),
"cover-back-actual": setof(collection("Job Template","cover-back")),
"cover-front-actual": setof(collection("Job Template", "cover-front")),
"current-page-order": keyword,
"date-time-at-completed": _(dateTime, novalue),
"date-time-at-creation": dateTime,
"date-time-at-processing": _(dateTime, novalue),
"detailed-status-messages": setof(text),
"document-access-errors": setof(text),
"document-charset": charset,
"document-digital-signature": keyword,
"document-format": mimeMediaType,
"document-format-details": setof(collection("Operation", "document-format-details")),
"document-format-details-detected": setof(collection("Operation","document-format-details")),
"document-format-detected": mimeMediaType,
"document-format-version": text(127),
"document-format-version-detected": text(127),
"document-job-id": integer(1, MAX),
"document-job-uri": uri,
"document-message": text,
"document-metadata": setof(octetString),
"document-name": name,
"document-natural-language": naturalLanguage,
"document-number": integer(1,MAX),
"document-printer-uri": uri,
"document-state": enumeration,
"document-state-message": text,
"document-state-reasons": setof(keyword),
"document-uri": uri,
"document-uuid": uri(45),
"errors-count": integer(0,MAX),
"finishings-actual": setof(enumeration),
"finishings-col-actual": setof(collection("Job Template","finishings-col")),
"force-front-side-actual": setof(integer(1,MAX)),
"imposition-template-actual": setof(_(keyword, name)),
"impressions": integer(0,MAX),
"impressions-completed": integer(0,MAX),
"impressions-completed-current-copy": integer(0,MAX),
"insert-sheet-actual": setof(collection("Job Template","insert-sheet")),
"k-octets": integer(0,MAX),
"k-octets-processed": integer(0,MAX),
"last-document": boolean,
"media-actual": setof(_(keyword, name)),
"media-col-actual": setof(collection("Job Template","media-col")),
"media-input-tray-check-actual": setof(_(keyword, name)),
"media-sheets": integer(0,MAX),
"media-sheets-completed": integer(0,MAX),
"more-info": uri,
"number-up-actual": setof(integer),
"orientation-requested-actual": setof(enumeration),
"output-bin-actual": setof(name),
"output-device-assigned": name(127),
"overrides-actual": setof(collection("Document Template","overrides")),
"page-delivery-actual": setof(keyword),
"page-order-received-actual": setof(keyword),
"page-ranges-actual": setof(rangeOfInteger(1,MAX)),
"pages": integer(0,MAX),
"pages-completed": integer(0,MAX),
"pages-completed-current-copy": integer(0,MAX),
"presentation-direction-number-up-actual": setof(keyword),
"print-content-optimize-actual": setof(keyword),
"print-quality-actual": setof(enumeration),
"printer-resolution-actual": setof(resolution),
"printer-up-time": integer(1,MAX),
"separator-sheets-actual": setof(collection("Job Template","separator-sheets")),
"sheet-completed-copy-number": integer(0,MAX),
"sides-actual": setof(keyword),
"time-at-completed": _(integer, novalue),
"time-at-creation": integer,
"time-at-processing": _(integer, novalue),
"x-image-position-actual": setof(keyword),
"x-image-shift-actual": setof(integer),
"x-side1-image-shift-actual": setof(integer),
"x-side2-image-shift-actual": setof(integer),
"y-image-position-actual": setof(keyword),
"y-image-shift-actual": setof(integer),
"y-side1-image-shift-actual": setof(integer),
"y-side2-image-shift-actual": setof(integer)
};
attributes["Document Template"] = {
"copies": integer(1,MAX),
"cover-back": collection("Job Template","cover-back"),
"cover-front": collection("Job Template","cover-front"),
"feed-orientation": keyword,
"finishings": setof(enumeration),
"finishings-col": collection("Job Template","finishings-col"),
"font-name-requested": name,
"font-size-requested": integer(1,MAX),
"force-front-side": setof(integer(1,MAX)),
"imposition-template": _(keyword, name),
"insert-sheet": setof(collection("Job Template","insert-sheet")),
"media": _(keyword, name),
"media-col": collection("Job Template","media-col"),
"media-input-tray-check": _(keyword, name),
"number-up": integer(1,MAX),
"orientation-requested": enumeration,
"overrides": setof(collection({
//Any Document Template attribute (TODO)
"document-copies": setof(rangeOfInteger),
"document-numbers": setof(rangeOfInteger),
"pages": setof(rangeOfInteger)
})),
"page-delivery": keyword,
"page-order-received": keyword,
"page-ranges": setof(rangeOfInteger(1,MAX)),
"pdl-init-file": setof(collection("Job Template","pdl-init-file")),
"presentation-direction-number-up": keyword,
"print-color-mode": keyword,
"print-content-optimize": keyword,
"print-quality": enumeration,
"print-rendering-intent": keyword,
"printer-resolution": resolution,
"separator-sheets": collection("Job Template","separator-sheets"),
"sheet-collate": keyword,
"sides": keyword,
"x-image-position": keyword,
"x-image-shift": integer,
"x-side1-image-shift": integer,
"x-side2-image-shift": integer,
"y-image-position": keyword,
"y-image-shift": integer,
"y-side1-image-shift": integer,
"y-side2-image-shift": integer
};
attributes["Event Notifications"] = {
"notify-subscribed-event": keyword,
"notify-text": text
};
attributes["Job Description"] = {
"attributes-charset": charset,
"attributes-natural-language": naturalLanguage,
"compression-supplied": keyword,
"copies-actual": setof(integer(1,MAX)),
"cover-back-actual": setof(collection("Job Template","cover-back")),
"cover-front-actual": setof(collection("Job Template","cover-front")),
"current-page-order": keyword,
"date-time-at-completed": _(dateTime, novalue),
"date-time-at-creation": dateTime,
"date-time-at-processing": _(dateTime, novalue),
"document-charset-supplied": charset,
"document-digital-signature-supplied": keyword,
"document-format-details-supplied": setof(collection("Operation","document-format-details")),
"document-format-supplied": mimeMediaType,
"document-format-version-supplied": text(127),
"document-message-supplied": text,
"document-metadata": setof(octetString),
"document-name-supplied": name,
"document-natural-language-supplied": naturalLanguage,
"document-overrides-actual": setof(collection),
"errors-count": integer(0,MAX),
"finishings-actual": setof(enumeration),
"finishings-col-actual": setof(collection("Job Template","finishings-col")),
"force-front-side-actual": setof(setof(integer(1, MAX))),
"imposition-template-actual": setof(_(keyword, name)),
"impressions-completed-current-copy": integer(0,MAX),
"insert-sheet-actual": setof(collection("Job Template","insert-sheet")),
"job-account-id-actual": setof(name),
"job-accounting-sheets-actual": setof(collection("Job Template","job-accounting-sheets")),
"job-accounting-user-id-actual": setof(name),
"job-attribute-fidelity": boolean,
"job-collation-type": enumeration,
"job-collation-type-actual": setof(keyword),
"job-copies-actual": setof(integer(1,MAX)),
"job-cover-back-actual": setof(collection("Job Template","cover-back")),
"job-cover-front-actual": setof(collection("Job Template","cover-front")),
"job-detailed-status-messages": setof(text),
"job-document-access-errors": setof(text),
"job-error-sheet-actual": setof(collection("Job Template","job-error-sheet")),
"job-finishings-actual": setof(enumeration),
"job-finishings-col-actual": setof(collection("Job Template","media-col")),
"job-hold-until-actual": setof(_(keyword, name)),
"job-id": integer(1,MAX),
"job-impressions": integer(0,MAX),
"job-impressions-completed": integer(0,MAX),
"job-k-octets": integer(0,MAX),
"job-k-octets-processed": integer(0,MAX),
"job-mandatory-attributes": setof(keyword),
"job-media-sheets": integer(0,MAX),
"job-media-sheets-completed": integer(0,MAX),
"job-message-from-operator": text(127),
"job-message-to-operator-actual": setof(text),
"job-more-info": uri,
"job-name": name,
"job-originating-user-name": name,
"job-originating-user-uri": uri,
"job-pages": integer(0,MAX),
"job-pages-completed": integer(0,MAX),
"job-pages-completed-current-copy": integer(0,MAX),
"job-printer-up-time": integer(1,MAX),
"job-printer-uri": uri,
"job-priority-actual": setof(integer(1,100)),
"job-save-printer-make-and-model": text(127),
"job-sheet-message-actual": setof(text),
"job-sheets-actual": setof(_(keyword, name)),
"job-sheets-col-actual": setof(collection("Job Template","job-sheets-col")),
"job-state": _(enumeration, unknown),
"job-state-message": text,
"job-state-reasons": setof(keyword),
"job-uri": uri,
"job-uuid": uri(45),
"media-actual": setof(_(keyword, name)),
"media-col-actual": setof(collection("Job Template","media-col")),
"media-input-tray-check-actual": setof(_(keyword, name)),
"multiple-document-handling-actual": setof(keyword),
"number-of-documents": integer(0,MAX),
"number-of-intervening-jobs": integer(0,MAX),
"number-up-actual": setof(integer(1,MAX)),
"orientation-requested-actual": setof(enumeration),
"original-requesting-user-name": name,
"output-bin-actual": setof(_(keyword, name)),
"output-device-actual": setof(name(127)),
"output-device-assigned": name(127),
"overrides-actual": setof(collection("Job Template","overrides")),
"page-delivery-actual": setof(keyword),
"page-order-received-actual": setof(keyword),
"page-ranges-actual": setof(rangeOfInteger(1,MAX)),
"presentation-direction-number-up-actual": setof(keyword),
"print-content-optimize-actual": setof(keyword),
"print-quality-actual": setof(enumeration),
"printer-resolution-actual": setof(resolution),
"separator-sheets-actual": setof(collection("Job Template", "separator-sheets")),
"sheet-collate-actual": setof(keyword),
"sheet-completed-copy-number": integer(0,MAX),
"sheet-completed-document-number": integer(0,MAX),
"sides-actual": setof(keyword),
"time-at-completed": _(integer, novalue),
"time-at-creation": integer,
"time-at-processing": _(integer, novalue),
"warnings-count": integer(0,MAX),
"x-image-position-actual": setof(keyword),
"x-image-shift-actual": setof(integer),
"x-side1-image-shift-actual": setof(integer),
"x-side2-image-shift-actual": setof(integer),
"y-image-position-actual": setof(keyword),
"y-image-shift-actual": setof(integer),
"y-side1-image-shift-actual": setof(integer),
"y-side2-image-shift-actual": setof(integer)
};
attributes["Job Template"] = {
"copies": integer(1,MAX),
"cover-back": collection({
"cover-type": keyword,
"media": _(keyword, name),
"media-col": collection("Job Template","media-col")
}),
"cover-front": collection({
"cover-type": keyword,
"media": _(keyword, name),
"media-col": collection("Job Template","media-col")
}),
"feed-orientation": keyword,
"finishings": setof(enumeration),
"finishings-col": collection({
"finishing-template": name,
"stitching": collection({
"stitching-locations": setof(integer(0,MAX)),
"stitching-offset": integer(0,MAX),
"stitching-reference-edge": keyword
})
}),
"font-name-requested": name,
"font-size-requested": integer(1,MAX),
"force-front-side": setof(integer(1,MAX)),
"imposition-template": _(keyword, name),
"insert-sheet": setof(collection({
"insert-after-page-number": integer(0,MAX),
"insert-count": integer(0,MAX),
"media": _(keyword, name),
"media-col": collection("Job Template","media-col")
})),
"job-account-id": name,
"job-accounting-sheets": collection({
"job-accounting-output-bin": _(keyword, name),
"job-accounting-sheets-type": _(keyword, name),
"media": _(keyword, name),
"media-col": collection("Job Template","media-col")
}),
"job-accounting-user-id": name,
"job-copies": integer(1,MAX),
"job-cover-back": collection("Job Template","cover-back"),
"job-cover-front": collection("Job Template","cover-front"),
"job-delay-output-until": _(keyword, name),
"job-delay-output-until-time": dateTime,
"job-error-action": keyword,
"job-error-sheet": collection({
"job-error-sheet-type": _(keyword, name),
"job-error-sheet-when": keyword,
"media": _(keyword, name),
"media-col": collection("Job Template","media-col")
}),
"job-finishings": setof(enumeration),
"job-finishings-col": collection("Job Template","finishings-col"),
"job-hold-until": _(keyword, name),
"job-hold-until-time": dateTime,
"job-message-to-operator": text,
"job-phone-number": uri,
"job-priority": integer(1,100),
"job-recipient-name": name,
"job-save-disposition": collection({
"save-disposition": keyword,
"save-info": setof(collection({
"save-document-format": mimeMediaType,
"save-location": uri,
"save-name": name
}))
}),
"job-sheet-message": text,
"job-sheets": _(keyword, name),
"job-sheets-col": collection({
"job-sheets": _(keyword,name),
"media": _(keyword,name),
"media-col": collection("Job Template","media-col")
}),
"media": _(keyword,name),
"media-col": collection({
"media-back-coating": _(keyword,name),
"media-bottom-margin": integer(0,MAX),
"media-color": _(keyword,name),
"media-front-coating": _(keyword,name),
"media-grain": _(keyword,name),
"media-hole-count": integer(0,MAX),
"media-info": text(255),
"media-key": _(keyword,name),
"media-left-margin": integer(0,MAX),
"media-order-count": integer(1,MAX),
"media-pre-printed": _(keyword,name),
"media-recycled": _(keyword,name),
"media-right-margin": integer(0,MAX),
"media-size": collection({
"x-dimension": integer(0,MAX),
"y-dimension": integer(0,MAX),
}),
"media-size-name": _(keyword,name),
"media-source": _(keyword,name),
"media-thickness": integer(1,MAX),
"media-tooth": _(keyword,name),
"media-top-margin": integer(0,MAX),
"media-type": _(keyword,name),
"media-weight-metric": integer(0,MAX)
}),
"media-input-tray-check": _(keyword, name),
"multiple-document-handling": keyword,
"number-up": integer(1,MAX),
"orientation-requested": enumeration,
"output-bin": _(keyword, name),
"output-device": name(127),
"overrides": setof(collection({
//Any Job Template attribute (TODO)
"document-copies": setof(rangeOfInteger),
"document-numbers": setof(rangeOfInteger),
"pages": setof(rangeOfInteger)
})),
"page-delivery": keyword,
"page-order-received": keyword,
"page-ranges": setof(rangeOfInteger(1,MAX)),
"pages-per-subset": setof(integer(1,MAX)),
"pdl-init-file": collection({
"pdl-init-file-entry": name,
"pdl-init-file-location": uri,
"pdl-init-file-name": name
}),
"presentation-direction-number-up": keyword,
"print-color-mode": keyword,
"print-content-optimize": keyword,
"print-quality": enumeration,
"print-rendering-intent": keyword,
"printer-resolution": resolution,
"proof-print": collection({
"media": _(keyword, name),
"media-col": collection("Job Template", "media-col"),
"proof-print-copies": integer(0,MAX)
}),
"separator-sheets": collection({
"media": _(keyword, name),
"media-col": collection("Job Template", "media-col"),
"separator-sheets-type": setof(keyword)
}),
"sheet-collate": keyword,
"sides": keyword,
"x-image-position": keyword,
"x-image-shift": integer,
"x-side1-image-shift": integer,
"x-side2-image-shift": integer,
"y-image-position": keyword,
"y-image-shift": integer,
"y-side1-image-shift": integer,
"y-side2-image-shift": integer
};
attributes["Operation"] = {
"attributes-charset": charset,
"attributes-natural-language": naturalLanguage,
"compression": keyword,
"detailed-status-message": text,
"document-access-error": text,
"document-charset": charset,
"document-digital-signature": keyword,
"document-format": mimeMediaType,
"document-format-details": setof(collection({
"document-format": mimeMediaType,
"document-format-device-id": text(127),
"document-format-version": text(127),
"document-natural-language": setof(naturalLanguage),
"document-source-application-name": name,
"document-source-application-version": text(127),
"document-source-os-name": name(40),
"document-source-os-version": text(40)
})),
"document-message": text,
"document-metadata": setof(octetString),
"document-name": name,
"document-natural-language": naturalLanguage,
"document-password": octetString,
"document-uri": uri,
"first-index": integer(1,MAX),
"identify-actions": setof(keyword),
"ipp-attribute-fidelity": boolean,
"job-hold-until": _(keyword, name),
"job-id": integer(1,MAX),
"job-ids": setof(integer(1,MAX)),
"job-impressions": integer(0,MAX),
"job-k-octets": integer(0,MAX),
"job-mandatory-attributes": setof(keyword),
"job-media-sheets": integer(0,MAX),
"job-message-from-operator": text(127),
"job-name": name,
"job-password": octetString(255),
"job-password-encryption": _(keyword, name),
"job-state": enumeration,
"job-state-message": text,
"job-state-reasons": setof(keyword),
"job-uri": uri,
"last-document": boolean,
"limit": integer(1,MAX),
"message": text(127),
"my-jobs": boolean,
"original-requesting-user-name": name,
"preferred-attributes": collection,
"printer-message-from-operator": text(127),
"printer-uri": uri,
"requested-attributes": setof(keyword),
"requesting-user-name": name,
"requesting-user-uri": uri,
"status-message": text(255),
"which-jobs": keyword
};attributes["Printer Description"] = {
"charset-configured": charset,
"charset-supported": setof(charset),
"color-supported": boolean,
"compression-supported": setof(keyword),
"copies-default": integer(1,MAX),
"copies-supported": rangeOfInteger(1,MAX),
"cover-back-default": collection("Job Template","cover-back"),
"cover-back-supported": setof(keyword),
"cover-front-default": collection("Job Template","cover-front"),
"cover-front-supported": setof(keyword),
"device-service-count": integer(1,MAX),
"device-uuid": uri(45),
"document-charset-default": charset,
"document-charset-supported": setof(charset),
"document-creation-attributes-supported": setof(keyword),
"document-digital-signature-default": keyword,
"document-digital-signature-supported": setof(keyword),
"document-format-default": mimeMediaType,
"document-format-details-default": collection("Operation","document-format-details"),
"document-format-details-supported": setof(keyword),
"document-format-supported": setof(mimeMediaType),
"document-format-varying-attributes": setof(keyword),
"document-format-version-default": text(127),
"document-format-version-supported": setof(text(127)),
"document-natural-language-default": naturalLanguage,
"document-natural-language-supported": setof(naturalLanguage),
"document-password-supported": integer(0,1023),
"feed-orientation-default": keyword,
"feed-orientation-supported": keyword,
"finishings-col-default": collection("Job Template","finishings-col"),
"finishings-col-ready": setof(collection("Job Template","finishings-col")),
"finishings-col-supported": setof(keyword),
"finishings-default": setof(enumeration),
"finishings-ready": setof(enumeration),
"finishings-supported": setof(enumeration),
"font-name-requested-default": name,
"font-name-requested-supported": setof(name),
"font-size-requested-default": integer(1,MAX),
"font-size-requested-supported": setof(rangeOfInteger(1,MAX)),
"force-front-side-default (under review)": setof(integer(1,MAX)),
"force-front-side-supported (under review)": rangeOfInteger(1,MAX),
"generated-natural-language-supported": setof(naturalLanguage),
"identify-actions-default": setof(keyword),
"identify-actions-supported": setof(keyword),
"imposition-template-default": _(keyword, name),
"imposition-template-supported": setof(_(keyword, name)),
"insert-after-page-number-supported": rangeOfInteger(0,MAX),
"insert-count-supported": rangeOfInteger(0,MAX),
"insert-sheet-default": setof(collection("Job Template","insert-sheet")),
"insert-sheet-supported": setof(keyword),
"ipp-features-supported": setof(keyword),
"ipp-versions-supported": setof(keyword),
"ippget-event-life": integer(15,MAX),
"job-account-id-default": _(name, novalue),
"job-account-id-supported": boolean,
"job-accounting-sheets-default": _(collection("Job Template", "job-accounting-sheets"), novalue),
"job-accounting-sheets-supported": setof(keyword),
"job-accounting-user-id-default": _(name, novalue),
"job-accounting-user-id-supported": boolean,
"job-constraints-supported": setof(collection),
"job-copies-default": integer(1,MAX),
"job-copies-supported": rangeOfInteger(1,MAX),
"job-cover-back-default": collection("Job Template","cover-back"),
"job-cover-back-supported": setof(keyword),
"job-cover-front-default": collection("Job Template","cover-front"),
"job-cover-front-supported": setof(keyword),
"job-creation-attributes-supported": setof(keyword),
"job-delay-output-until-default": _(keyword, name),
"job-delay-output-until-supported": setof(_(keyword, name)),
"job-delay-output-until-time-supported": rangeOfInteger(0,MAX),
"job-error-action-default": keyword,
"job-error-action-supported": setof(keyword),
"job-error-sheet-default": _(collection("Job Template", "job-error-sheet"), novalue),
"job-error-sheet-supported": setof(keyword),
"job-finishings-col-default": collection("Job Template","finishings-col"),
"job-finishings-col-ready": setof(collection("Job Template","finishings-col")),
"job-finishings-col-supported": setof(keyword),
"job-finishings-default": setof(enumeration),
"job-finishings-ready": setof(enumeration),
"job-finishings-supported": setof(enumeration),
"job-hold-until-default": _(keyword, name),
"job-hold-until-supported": setof(_(keyword, name)),
"job-hold-until-time-supported": rangeOfInteger(0,MAX),
"job-ids-supported": boolean,
"job-impressions-supported": rangeOfInteger(0,MAX),
"job-k-octets-supported": rangeOfInteger(0,MAX),
"job-media-sheets-supported": rangeOfInteger(0,MAX),
"job-message-to-operator-default": text,
"job-message-to-operator-supported": boolean,
"job-password-encryption-supported": setof(_(keyword, name)),
"job-password-supported": integer(0,255),
"job-phone-number-default": _(uri, novalue),
"job-phone-number-supported": boolean,
"job-priority-default": integer(1,100),
"job-priority-supported": integer(1,100),
"job-recipient-name-default": _(name, novalue),
"job-recipient-name-supported": boolean,
"job-resolvers-supported": setof(collection({
"resolver-name": name
})),
"job-settable-attributes-supported": setof(keyword),
"job-sheet-message-default": text,
"job-sheet-message-supported": boolean,
"job-sheets-col-default": collection("Job Template","job-sheets-col"),
"job-sheets-col-supported": setof(keyword),
"job-sheets-default": _(keyword, name),
"job-sheets-supported": setof(_(keyword, name)),
"job-spooling-supported": keyword,
"max-save-info-supported": integer(1,MAX),
"max-stitching-locations-supported": integer(1,MAX),
"media-back-coating-supported": setof(_(keyword, name)),
"media-bottom-margin-supported": setof(integer(0,MAX)),
"media-col-database": setof(collection({
//TODO: Member attributes are the same as the
// "media-col" Job Template attribute
"media-source-properties": collection({
"media-source-feed-direction": keyword,
"media-source-feed-orientation": enumeration
})
})),
"media-col-default": collection("Job Template","media-col"),
"media-col-ready": setof(collection({
//TODO: Member attributes are the same as the
// "media-col" Job Template attribute
"media-source-properties": collection({
"media-source-feed-direction": keyword,
"media-source-feed-orientation": enumeration
})
})),
"media-col-supported": setof(keyword),
"media-color-supported": setof(_(keyword, name)),
"media-default": _(keyword, name, novalue),
"media-front-coating-supported": setof(_(keyword, name)),
"media-grain-supported": setof(_(keyword, name)),
"media-hole-count-supported": setof(rangeOfInteger(0,MAX)),
"media-info-supported": boolean,
"media-input-tray-check-default": _(keyword, name, novalue),
"media-input-tray-check-supported": setof(_(keyword, name)),
"media-key-supported": setof(_(keyword, name)),
"media-left-margin-supported": setof(integer(0,MAX)),
"media-order-count-supported": setof(rangeOfInteger(1,MAX)),
"media-pre-printed-supported": setof(_(keyword, name)),
"media-ready": setof(_(keyword, name)),
"media-recycled-supported": setof(_(keyword, name)),
"media-right-margin-supported": setof(integer(0,MAX)),
"media-size-supported": setof(collection({
"x-dimension": _(integer(1,MAX),rangeOfInteger(1,MAX)),
"y-dimension": _(integer(1,MAX),rangeOfInteger(1,MAX))
})),
"media-source-supported": setof(_(keyword, name)),
"media-supported": setof(_(keyword, name)),
"media-thickness-supported": rangeOfInteger(1,MAX),
"media-tooth-supported": setof(_(keyword, name)),
"media-top-margin-supported": setof(integer(0,MAX)),
"media-type-supported": setof(_(keyword, name)),
"media-weight-metric-supported": setof(rangeOfInteger(0,MAX)),
"multiple-document-handling-default": keyword,
"multiple-document-handling-supported": setof(keyword),
"multiple-document-jobs-supported": boolean,
"multiple-operation-time-out": integer(1,MAX),
"multiple-operation-timeout-action": keyword,
"natural-language-configured": naturalLanguage,
"number-up-default": integer(1,MAX),
"number-up-supported": _(integer(1,MAX), rangeOfInteger(1,MAX)),
"operations-supported": setof(enumeration),
"orientation-requested-default": _(novalue, enumeration),
"orientation-requested-supported": setof(enumeration),
"output-bin-default": _(keyword, name),
"output-bin-supported": setof(_(keyword, name)),
"output-device-supported": setof(name(127)),
"overrides-supported": setof(keyword),
"page-delivery-default": keyword,
"page-delivery-supported": setof(keyword),
"page-order-received-default": keyword,
"page-order-received-supported": setof(keyword),
"page-ranges-supported": boolean,
"pages-per-minute": integer(0,MAX),
"pages-per-minute-color": integer(0,MAX),
"pages-per-subset-supported": boolean,
"parent-printers-supported": setof(uri),
"pdl-init-file-default": _(collection("Job Template","pdl-init-file"), novalue),
"pdl-init-file-entry-supported": setof(name),
"pdl-init-file-location-supported": setof(uri),
"pdl-init-file-name-subdirectory-supported": boolean,
"pdl-init-file-name-supported": setof(name),
"pdl-init-file-supported": setof(keyword),
"pdl-override-supported": keyword,
"preferred-attributes-supported": boolean,
"presentation-direction-number-up-default": keyword,
"presentation-direction-number-up-supported": setof(keyword),
"print-color-mode-default": keyword,
"print-color-mode-supported": setof(keyword),
"print-content-optimize-default": keyword,
"print-content-optimize-supported": setof(keyword),
"print-quality-default": enumeration,
"print-quality-supported": setof(enumeration),
"print-rendering-intent-default": keyword,
"print-rendering-intent-supported": setof(keyword),
"printer-alert": setof(octetString),
"printer-alert-description": setof(text),
"printer-charge-info": text,
"printer-charge-info-uri": uri,
"printer-current-time": dateTime,
"printer-detailed-status-messages": setof(text),
"printer-device-id": text(1023),
"printer-driver-installer": uri,
"printer-geo-location": uri,
"printer-get-attributes-supported": setof(keyword),
"printer-icc-profiles": setof(collection({
"xri-authentication": name,
"profile-url": uri
})),
"printer-icons": setof(uri),
"printer-info": text(127),
"printer-is-accepting-jobs": boolean,
"printer-location": text(127),
"printer-make-and-model": text(127),
"printer-mandatory-job-attributes": setof(keyword),
"printer-message-date-time": dateTime,
"printer-message-from-operator": text(127),
"printer-message-time": integer,
"printer-more-info": uri,
"printer-more-info-manufacturer": uri,
"printer-name": name(127),
"printer-organization": setof(text),
"printer-organizational-unit": setof(text),
"printer-resolution-default": resolution,
"printer-resolution-supported": resolution,
"printer-settable-attributes-supported": setof(keyword),
"printer-state": enumeration,
"printer-state-change-date-time": dateTime,
"printer-state-change-time": integer(1,MAX),
"printer-state-message": text,
"printer-state-reasons": setof(keyword),
"printer-supply": setof(octetString),
"printer-supply-description": setof(text),
"printer-supply-info-uri": uri,
"printer-up-time": integer(1,MAX),
"printer-uri-supported": setof(uri),
"printer-uuid": uri(45),
"printer-xri-supported": setof(collection({
"xri-authentication": keyword,
"xri-security": keyword,
"xri-uri": uri
})),
"proof-print-default": _(collection("Job Template", "proof-print"), novalue),
"proof-print-supported": setof(keyword),
"pwg-raster-document-resolution-supported": setof(resolution),
"pwg-raster-document-sheet-back": keyword,
"pwg-raster-document-type-supported": setof(keyword),
"queued-job-count": integer(0,MAX),
"reference-uri-schemes-supported": setof(uriScheme),
"repertoire-supported": setof(_(keyword, name)),
"requesting-user-uri-supported": boolean,
"save-disposition-supported": setof(keyword),
"save-document-format-default": mimeMediaType,
"save-document-format-supported": setof(mimeMediaType),
"save-location-default": uri,
"save-location-supported": setof(uri),
"save-name-subdirectory-supported": boolean,
"save-name-supported": boolean,
"separator-sheets-default": collection("Job Template","separator-sheets"),
"separator-sheets-supported": setof(keyword),
"sheet-collate-default"