Created Date: 16 Mar, 2022 15:12
Last Modifed Date: 16 Mar, 2022 15:12

This page applies to Harlequin v13.1r0 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, found in the RIP from version 5.1 onwards.

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.

The keys in the option dictionary, and the type of their values in the output dictionaries are described in Parameter and output dictionaries for currentseparationorder.

Parameter and output dictionaries for currentseparationorder






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



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



This is the colorant index of the separation.



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.

From post-v12, ObjectMap is an additional ColorantType.



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



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



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.



Indicates if the separation is a background separation. See Operators controlling separations, colorants, and color channels for details.



This dictionary contains keys which indicate what operations are performed for objects in the job. The keys are /Picture, /Vignette, /Linework, /Text, /NamedColor, /Other and /Default. Only those values explicitly set through addtoseparationorder are present in this dictionary, along with a /Default entry for all other object keys. The values of each of these keys are one of the names /Ignore, /Mask, /Render, or /Knockout.



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.



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

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

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.