Syntax Rules

*Keyword: StringValue
*Keyword Option/Translation: StringValue | QuotedValue | SymbolValue

KEYCHAR     ::= *
SYMCHAR     ::= #
QUOTE       ::= "
SEPCHAR     ::= :
XLATION     ::= /
NUL         ::= ASCII 0
TAB         ::= ASCII 9
CR          ::= ASCII 13
LF          ::= ASCII 10
SPACE       ::= ASCII 32
WHITE       ::= TAB | SPACE | CR | LF

XldEntry    ::= *Keyword: StringValue
            ::= *Keyword Option[/Translation]: StringValue | QuotedValue | SymbolValue

Name        ::= Sequence of any valid characters, except WHITE, *, / and :
Keyword     ::= Name
Option      ::= Name
SymbolValue ::= #Name
Translation ::= Sequence of any valid characters, except CR, LF, and :
StringValue ::= Sequence of any valid characters, except CR and LF
                Cannot begin with SPACE, ", and #
QuotedValue ::= " Sequence of any valid characters except the quote character itself "
HexString   ::= < { 0-9 A-F a-f }* >

Translation can have embedded hexdecimal strings. QuotedValue also allows
embedded hexdecimal strings if QuotedHexString is not set to Off.

Only printable ASCII characters and WHITE characters are allowed in a PCL-XL
printer description file. There are two alternatives for including binary data:

1. For small amount of binary data, use embedded hexdecimal strings.
2. For large amount of binary data, use SymbolInclude entries.

If multiple entries affect the same information, later entries overwrite previous ones.

Names are case-sensitive.


PCL XL Printer Description

*SpecVersion: StringValue
*FileVersion: StringValue
*XLProtocol: StringValue

    The format of a version number is Integer[.Integer], e.g. 1 or 4.0.
    The first number is the major version number. The second number is
    the minor revision number.

*VendorName: QuotedValue
*ModelName: QuotedValue
*JCLBegin: QuotedValue
*JCLEnterLanguage: QuotedValue
*JCLEnd: QuotedValue
*ColorDepth: StringValue
   
    The string value consists of two integers. The first number specifies
    number of color planes. The second number specifies bits per plane.

*BeginFeature featureName: StringValue

    The string value specifies the default selection name,
    or Unknown if the default selection is undefined.

*featureName selectionName: QuotedValue | SymbolValue
*EndFeature: featureName

*InstallableOptions: StringValue

    The string value is a list of space-separated feature names, e.g.
    *featureName1 *featureName2 ...

*UIConstraints: *featureName1 selectionName1|* *featureName2 selectionName2|*

    Specifies a feature constraint. If selection1 of feature1 is chosen,
    then selection2 of feature2 will be inaccessible.

    If selectionName1 is *, then any selection of feature1 except
    None or False will cause the constraint.

    If selectionName2 is *, then any selection of feature2 except
    None or False will be constrained.

*OrderDependency: Order Section *featureName

    Order is an integer value. When multiple features appear in the same
    section, features with smaller order values should be invoked before
    those with larger order values.

    Section can be one of the following:

    None        No invocation code is emitted
    JobSetup    Invocation code should appear in the job setup section
    DocSetup    Invocation code should appear in the document setup section
    PageSetup   Invocation code should appear in the page setup section
    Trailer     Invocation code should appear in the trailer section

    If there is no OrderDependency entry corresponding to a featureName,
    the default value is "0 DocSetup" for non-installable printer features
    and "0 None" for installable options.
    
*QuotedHexString: On | Off
*Unit: Millimeter | Inch | Point
*PageSize mediaOption: QuotedValue
*PaperDimension mediaOptions: StringValue

    The string value consists of two real numbers. The first number
    specifies the paper width in current units. The second number
    specifies the paper height.

*ImageableArea mediaOption: StringValue

    The string value consists of four real numbers. They define the
    left, top, right and bottom coordinates of the imageable area.

*CustomPaperSize: StringValue

    The string value consists of two real numbers. They specify the
    maximum width and height of custom paper size.

    This entry should only be present if the printer support custom
    paper size.

*InputSlot trayOption: QuotedValue
*MediaType typeOption: QuotedValue
*OutputBin binOption: QuotedValue

*Duplex duplexOption: QuotedValue

    Do not include these entries if the printer doesn't support
    duplex feature.

    duplexOption must be None, Horizontal, or Vertical.

*Collate collateOption: QuotedValue

    Do not include these entries if the printer doesn't support
    collation feature.

    collateOption must be either True or False.

*Resolution: resOption: QuotedValue

    The format of resOption is Xres [x Yres], e.g.
        300
        1200x600

*MemoryOption memOption: QuotedValue

    The quoted value is an integer which specifies the amount of
    memory available to the language interpreter. Note that this
    is NOT the same as the total amount of installed memory.

*Font fontName: StringValue

    The string value consists of two names separated by space.
    The first name specifies font encoding. The second name
    specifies font metrics.

*FontEncoding fontEncoding: QuotedValue
*FontMetrics fontMetrics: QuotedValue

    The quoted value specifies the name of the file containing
    font encoding or font metrics information.

*Symbol symbolName: QuotedValue

*SymbolInclude symbolName: QuotedValue
*Include: QuotedValue

    The value specifies the name of the file to be included.

* ...Comment...

For historical reasons, lines starting with *% are also considered comments.


Standard of PageSize names:

    Letter
    Legal
    ...

Standard InputSlot names:

    Upper Cassette
    Lower Cassette
    Envelope Feeder
    ...

Standard MediaType names:

    Plain Paper
    Glossy Paper
    Transparent Film
    ...

