Created Date: 16 Mar, 2022 14:44
Last Modifed Date: 25 Jan, 2023 10:19


This page applies to Harlequin v13.1r0 and later; and to Harlequin Core but not Harlequin MultiRIP.

An example illustrating ColorantFamilies follows. It shows the use of two device types to distinguish between configurations where channels may be omitted (Mutable) and configurations where they may not be omitted (Fixed). The Plugin name arbitrarily chosen is “SimpleDevice”. This example would be appropriate for including in RIP boot-up PostScript (for example, in Sys/HqnOEM):

<<
   % Default keys for Colorants dictionary selection which must allow a match
   % with a Colorants dictionary, or else the setpagedevice will throw an error
  /Plugin (SimpleDevice)
  /DeviceType (Fixed)
  
  /SeparationDetails <<
    /ColorantFamilies [
      <<
        /ColorantFamilyName (DeviceGray)
        /DeviceTypes [
          <<
            /Plugin (SimpleDevice)
            /DeviceType (Mutable)
            % CustomConversions don't apply to process spaces
            /CustomConversions ({{}{}{}} cvlit)
            /Colorants [
              << /Names [ (Gray) /Presence 1 /ColorantType 2 /sRGB [0.0 0.0 0.0] ] >>
            ]
          >>
        ]
      >>
      <<
        /ColorantFamilyName (DeviceRGB)
        /DeviceTypes [
          <<
            /Plugin (SimpleDevice)
            /DeviceType (Fixed) % All channels required
            % CustomConversions don't apply to process spaces
            /CustomConversions ({{}{}{}} cvlit)
            /Colorants [
              << /Names [ (Red) ]   /Presence 2 /ColorantType 1 /sRGB [1.0 0.0 0.0] >>
              << /Names [ (Green) ] /Presence 2 /ColorantType 1 /sRGB [0.0 1.0 0.0] >>
              << /Names [ (Blue) ]  /Presence 2 /ColorantType 1 /sRGB [0.0 0.0 1.0] >>
            ]
          >>
        ]
      >>
      <<
        /ColorantFamilyName (DeviceCMYK)
        /DeviceTypes [
          <<
            /Plugin (SimpleDevice)
            /DeviceType (Mutable)
            % CustomConversions don't apply to process spaces.
            /CustomConversions ({{}{}{}} cvlit)
            /Colorants [
              << /Names [ (Cyan) (C) ]    /Presence 1 /ColorantType 1 /sRGB [0.0 1.0 1.0] >>
              << /Names [ (Magenta) (M) ] /Presence 1 /ColorantType 1 /sRGB [1.0 0.0 1.0] >>
              << /Names [ (Yellow) (Y) ]  /Presence 1 /ColorantType 1 /sRGB [1.0 1.0 0.0] >>
              << /Names [ (Black) (K) ]   /Presence 1 /ColorantType 2 /sRGB [0.0 0.0 0.0] >>
            ]
          >>
          <<
            /Plugin (SimpleDevice)
            /DeviceType (Fixed) % All channels required
             % CustomConversions don't apply to process spaces
            /CustomConversions ({{}{}{}} cvlit)
            /Colorants [
              << /Names [ (Cyan) (C) ]    /Presence 2 /ColorantType 1 /sRGB [0.0 1.0 1.0] >>
              << /Names [ (Magenta) (M) ] /Presence 2 /ColorantType 1 /sRGB [1.0 0.0 1.0] >>
              << /Names [ (Yellow) (Y) ]  /Presence 2 /ColorantType 1 /sRGB [1.0 1.0 0.0] >>
              << /Names [ (Black) (K) ]   /Presence 2 /ColorantType 2 /sRGB [0.0 0.0 0.0] >>
            ]
          >>
        ]
      >>
      <<
        % This colorant family is for CMYK + OG spots
        /ColorantFamilyName (Hex)
        /DeviceTypes [
          <<
            /Plugin (SimpleDevice)
            /DeviceType (Mutable)
            % CustomConversions don't apply to process spaces (OG are spots)
            /CustomConversions ({{}{}{}} cvlit)
            /Colorants [
              << /Names [ (Hex Cyan) (HexC) ]    /Presence 1 /ColorantType 1 /sRGB [0 1 1] >>
              << /Names [ (Hex Magenta) (HexM) ] /Presence 1 /ColorantType 1 /sRGB [1 0 1] >>
              << /Names [ (Hex Yellow) (HexY) ]  /Presence 1 /ColorantType 1 /sRGB [1 1 0] >>
              << /Names [ (Hex Black) (HexK) ]   /Presence 1 /ColorantType 2 /sRGB [0 0 0] >>
              << /Names [ (Hex Orange) (HexO) ]  /Presence 1 /ColorantType 3 /sRGB [1 0.5 0] >>
              << /Names [ (Hex Green) (HexG) ]   /Presence 1 /ColorantType 3 /sRGB [0 1 0] >>
            ]
          >>
        ]
      >>
    ]
  >>
>> setpagedevice
TEXT

If the job specific config later invokes this:

<<
  /Plugin (SimpleDevice)
  /DeviceType (Mutable)
  /ProcessColorModel /DeviceCMYK
  /SeparationColorNames []
  /SeparationDetails <<
    /SeparationStyle 4    % composite
    /CompositeColorNames [ /Cyan /Magenta /Yellow /Black ]
    % The value of 1 means the Mutable DeviceType works with separation omission
    % to avoid rendering blank separations.
    /ColorantRender [ /Cyan 1 /Magenta 1 /Yellow 1 /Black 1 ]
    /Omit <<
      /Process true
    >>
  >>
>> setpagedevice
CODE

the selected Colorants array is the one that matches the Plugin, DeviceType, and contains CMYK colorants (that is):

            /Colorants [
              << /Names [ (Cyan) (C) ]    /Presence 1 /ColorantType 1 /sRGB [0.0 1.0 1.0] >>
              << /Names [ (Magenta) (M) ] /Presence 1 /ColorantType 1 /sRGB [1.0 0.0 1.0] >>
              << /Names [ (Yellow) (Y) ]  /Presence 1 /ColorantType 1 /sRGB [1.0 1.0 0.0] >>
              << /Names [ (Black) (K) ]   /Presence 1 /ColorantType 2 /sRGB [0.0 0.0 0.0] >>
            ]
CODE