Created Date: 16 Mar, 2022 15:12
Last Modified Date: 13 Oct, 2023 14:37


This page applies to Harlequin v14.0r0 and later; both Harlequin Core and Harlequin MultiRIP.

The currentseparationorder operator is defined in internaldict, and is a non-standard extension to the PostScript language.

dict currentseparationorder array

This operator returns an array of arrays, containing dictionaries of colorant information. The array returned contains an entry for each sheet that will be produced. The entries are arrays containing dictionaries of information about each colorant that appears on the sheet. The sheet entries appear in the order in which they will be sent to the pagebuffer device, and include dynamic separations. Information appears for each copy of a separation.

The information returned in each colorant dictionary is determined by the keys in the dictionary supplied to currentseparationorder. This supplied dictionary contains a set of key-value pairs that control which pieces of information are returned. The values supplied in this dictionary can be used to restrict the set of colorants returned.

The values of all of the keys supplied must match the colorant information for the colorant to be returned. A value of null will match any value of the colorant information. If a dictionary is provided which does not contain any valid keys, a rangecheck error is raised.

Parameter and output dictionaries for currentseparationorder

Name

Type

Description

Name

name

This is the name of the color. If separation detection is enabled, this is the name of the color detected.

Separation

name

This is the name of the underlying colorant for the separation.

ColorantIndex

integer

This is the colorant index of the separation.

ColorantType

name

This is the type of the colorant, which shows how it was introduced. It will be one of the names/Unknown, /Process, /Spot or /ExtraSpot, or /ObjectMap.

sRGB

array

This is an array of three real values, giving the approximate RGB values for the colorant.

CMYK

array

This is an array of four real values, giving the approximate CMYK values for the colorant.

Omit

boolean

If this value is true, the separation would be omitted when rendering, either because of blank separation omission, or because a gray or preseparated job was detected when separating. Note that specifying this key will make the operator take more time, because a pass over the display list may be needed.

Background

boolean

Indicates if the separation is a background separation. See Using background separations for details.

Properties

dictionary

This dictionary contains object keys that indicate how to process objects based on their graphic properties. The keys are /Picture, /Text, /Shading, /Vignette, /Linework, /Other and /Default. (For definitions of the types, see Object types.) Only those values explicitly set through addtoseparationorder are present in this dictionary, along with a /Default entry for all other object types.  Note that for the two pairs of synonyms, both are returned when a value has been set to that type. For the values and their meanings, see addtoseparationorder object keys.

X

integer

The X offset of the separation, in device space pixels.

X and Y are both upper case keys as returned by currentseparationorder, but take care when using this operator and addtoseparationorder, which uses lower case.

Y

integer

The Y offset of the separation, in device space pixels.

Example: Detecting blank separations

Detecting blank spot color separations must start with having the RIP configured to omit blank separations.

The simplest example is the following, as already given in Output only non-blank separations . You may want to set more values in the SeparationDetails dictionary for other reasons.

            <<
              /SeparationDetails <<
                /Omit <<
                  /Monochrome false
                  /Separations false
                  /Process true
                  /Spot true
                >>
              >>
            >> setpagedevice
TEXT

Then, at the end of the page (in a StartRender procedure, for example), you can call the currentseparationorder operator:

              <<
                /Name null
                /Omit null
              >> 1183615869 internaldict /currentseparationorder get exec
              {
                {
                  % Stack holds a dictionary containing Name and Omit keys
                  % Insert here your code to manipulate the stack
                } forall
              } forall
TEXT

In simple cases without step-and-repeat or repeated separations the code inside the two nested repeats is called once for each separation that was requested. Omit is true if that separation is omitted because it is blank, and false if there is something on it.

If you are repeating separations on multiple "sheets" or using step and repeat, there are predictably more calls to the nested code.