<<>> <> <> <> <> <<>> DIRECTORY ImagerColor USING [Color, ColorOperator, ConstantColor, OpConstantColor, PixelEncoding, SampleEncoding, SampleTableProc, SpecialColor, Structure], ImagerPixel USING [PixelBuffer, PixelMap, PixelProc], ImagerPixelArray USING [PixelArray], ImagerSample USING [Function], Rope USING [ROPE], SymTab USING [Ref]; ImagerColorPrivate: CEDAR DEFINITIONS ~ BEGIN <<>> Color: TYPE ~ ImagerColor.Color; ColorOperator: TYPE ~ ImagerColor.ColorOperator; ConstantColor: TYPE ~ ImagerColor.ConstantColor; OpConstantColor: TYPE ~ ImagerColor.OpConstantColor; PixelBuffer: TYPE ~ ImagerPixel.PixelBuffer; PixelArray: TYPE ~ ImagerPixelArray.PixelArray; PixelMap: TYPE ~ ImagerPixel.PixelMap; PixelProc: TYPE ~ ImagerPixel.PixelProc; ROPE: TYPE ~ Rope.ROPE; <> Structure: TYPE ~ ImagerColor.Structure; Element: TYPE ~ RECORD [ SELECT tag: * FROM atom => [atom: ATOM], structure => [structure: Structure], real => [real: REAL], int => [int: INT], color => [color: Color], colorOperator => [colorOperator: ColorOperator], ENDCASE ]; StructureClass: TYPE ~ REF StructureClassRep; StructureClassRep: TYPE ~ RECORD [ size: PROC [structure: Structure] RETURNS [INT], get: PROC [structure: Structure, i: INT] RETURNS [Element] ]; MakeStructure: PROC [class: StructureClass, data: REF] RETURNS [Structure]; SSize: PROC [structure: Structure] RETURNS [INT]; SCheckSize: PROC [structure: Structure, size: INT] RETURNS [INT]; <> SGet: PROC [structure: Structure, i: INT] RETURNS [Element]; <> SGetAtom: PROC [structure: Structure, i: INT] RETURNS [ATOM]; SGetReal: PROC [structure: Structure, i: INT] RETURNS [REAL]; SGetInt: PROC [structure: Structure, i: INT] RETURNS [INT]; SGetStructure: PROC [structure: Structure, i: INT] RETURNS [Structure]; SGetOptionalStructure: PROC [structure: Structure, i: INT, wantSize: INT ¬ -1] RETURNS [Structure]; <> SGetColor: PROC [structure: Structure, i: INT] RETURNS [Color]; SGetColorOperator: PROC [structure: Structure, i: INT] RETURNS [ColorOperator]; SGetProp: PROC [structure: Structure, key: ATOM] RETURNS [Element]; <> SMergeProp: PROC [s, t: Structure] RETURNS [Structure]; ElementAction: TYPE ~ PROC [element: Element]; ElementGenerator: TYPE ~ PROC [elementAction: ElementAction]; StructureFromElementGenerator: PROC [elementGenerator: ElementGenerator] RETURNS [Structure]; <> StructureFromList: PROC [list: LIST OF Element] RETURNS [Structure]; <> StructureEqual: PROC [s, t: Structure] RETURNS [BOOL]; <> ColorEqual: PROC [a, b: Color] RETURNS [BOOL]; <> <> PixelEncoding: TYPE ~ ImagerColor.PixelEncoding; ApplyPixelEncoding: PROC [pm: PixelEncoding, i: NAT, value: REAL] RETURNS [REAL]; PixelEncodingEqual: PROC [a, b: PixelEncoding] RETURNS [BOOL]; PixelEncodingFromStructure: PROC [structure: Structure] RETURNS [PixelEncoding]; StructureFromPixelEncoding: PROC [map: PixelEncoding] RETURNS [Structure]; SampleEncoding: TYPE ~ ImagerColor.SampleEncoding; MakeSampleEncoding: PROC [size: NAT ¬ 0, sampleTableProc: ImagerColor.SampleTableProc ¬ NIL] RETURNS [SampleEncoding]; SampleEncodingEqual: PROC [a, b: SampleEncoding] RETURNS [BOOL]; SampleEncodingFromStructure: PROC [structure: Structure] RETURNS [SampleEncoding]; StructureFromSampleEncoding: PROC [e: SampleEncoding] RETURNS [Structure]; <> ConstantColorsEqual: PROC [a, b: ConstantColor] RETURNS [BOOL]; GrayFromColor: PROC [color: ConstantColor] RETURNS [REAL]; <> IntensityFromColor: PROC [color: ConstantColor] RETURNS [REAL]; <> ApplyToList: PROC [colorOperator: ColorOperator, colorSpace: ColorSpace, pixel: LIST OF REAL] RETURNS [LIST OF REAL]; <> <> namedColorTable: SymTab.Ref; <> RegisterNamedColor: PROC [color: ImagerColor.SpecialColor]; <> <> <> <> Signal: TYPE ~ REAL; ColorPoint: TYPE ~ REF ColorPointRep; ColorPointRep: TYPE ~ RECORD [ <> outOfGamut: BOOL ¬ FALSE, s: SEQUENCE dim: NAT OF Signal ]; MakeColorPoint: PROC [dim: NAT, s: REAL ¬ 0.0] RETURNS [ColorPoint]; DestroyColorPoint: PROC [ColorPoint] RETURNS [ColorPoint ¬ NIL]; -- to scratch pool ColorSpace: TYPE ~ MACHINE DEPENDENT { Y, RGB, CIELAB, YES, Highlight, firstProcess, (CARD.LAST) }; DefineProcessSpace: PROC [colorOperator: ColorOperator, val: ColorSpace[Y..firstProcess] ¬ firstProcess] RETURNS [ColorSpace]; <> ColorOperatorFromColorSpace: PROC [colorSpace: ColorSpace] RETURNS [ColorOperator]; <> ColorSpaceDimension: PROC [ColorSpace] RETURNS [NAT]; <> GetPixelEncoding: PROC [colorOperator: ColorOperator] RETURNS [PixelEncoding]; <> TransformConstantColor: PROC [color: OpConstantColor, colorSpace: ColorSpace] RETURNS [ColorPoint]; <> <> ColorTransform: TYPE ~ REF ColorTransformRep; ColorTransformRep: TYPE ~ RECORD [ domain: ColorSpace, rangeMax: ColorPoint, -- the maximum coordinate values proc: PROC [self: ColorTransform, in: ColorPoint, out: ColorPoint], <> data: REF ]; ColorTransformGenerator: TYPE ~ REF ColorTransformGeneratorRep; <> ColorTransformGeneratorRep: TYPE ~ RECORD [ spaces: LIST OF ColorSpace, <> proc: PROC [self: ColorTransformGenerator, input: ColorSpace, appearanceHints: Structure] RETURNS [ColorTransform], data: REF ]; ChooseColorSpace: PROC [colorOperator: ColorOperator, spaces: LIST OF ColorSpace] RETURNS [ColorSpace]; <> <<>> ColorPointFromColor: PROC [color: OpConstantColor, transform: ColorTransform] RETURNS [ColorPoint]; <> TranslateProc: TYPE ~ PROC [pixelsIn: PixelBuffer, pixelsOut: PixelBuffer]; <> TranslatePixels: PROC [colorOperator: ColorOperator, transform: ColorTransform, maxIn: PixelProc, translateAction: PROC [translate: TranslateProc]]; Translate: PROC [colorOperator: ColorOperator, transform: ColorTransform, pa: PixelArray] RETURNS [PixelMap]; <> ColorOperatorClass: TYPE ~ REF ColorOperatorClassRep; ColorOperatorClassRep: TYPE ~ RECORD [ name: ROPE, -- hierarchical name of Interpress color model operator createColorOperator: ColorOperatorCreateProc, -- makes a new ColorOperator for this class getCreateData: GetCreateDataProc, -- gets back the parameters to the color model operator getPixelEncoding: GetPixelEncodingProc, -- tables for decoding sample values prior to calling apply apply: ApplyProc, -- converts a single pixel dataEqual: DataEqualProc, -- tests for equality of data supportedOutputs: LIST OF ColorSpace ]; ColorOperatorCreateProc: TYPE ~ PROC [class: ColorOperatorClass, structure: Structure] RETURNS [ColorOperator]; GetCreateDataProc: TYPE ~ PROC [colorOperator: ColorOperator] RETURNS [Structure]; ApplyProc: TYPE ~ PROC [colorOperator: ColorOperator, pixelIn: TupleProc, colorSpace: ColorSpace, out: ColorPoint]; <> <> <> <> <> GetPixelEncodingProc: TYPE ~ PROC [colorOperator: ColorOperator] RETURNS [PixelEncoding]; TupleProc: TYPE ~ PROC [i: NAT] RETURNS [REAL]; DataEqualProc: TYPE ~ PROC [selfData, otherData: REF] RETURNS [BOOL]; colorOperatorClassTable: SymTab.Ref; <> FindColorOperatorClass: PROC [name: ROPE] RETURNS [ColorOperatorClass]; <> NewColorOperatorClass: PROC [name: ROPE, createColorOperator: ColorOperatorCreateProc, getCreateData: GetCreateDataProc, getPixelEncoding: GetPixelEncodingProc, apply: ApplyProc, dataEqual: DataEqualProc, supportedOutputs: LIST OF ColorSpace] RETURNS [ColorOperatorClass]; <> NewColorOperator: PROC [chromatic: BOOL, samplesPerPixelIn: NAT, class: ColorOperatorClass, data: REF, appearanceHints: Structure] RETURNS [ColorOperator]; <> <> Function: TYPE ~ ImagerSample.Function; StippleData: TYPE ~ REF StippleDataRep; StippleDataRep: TYPE ~ RECORD [word: WORD, function: Function]; IntensityFromStipple: PROC [word: WORD] RETURNS [REAL]; ColorFromStipple: PROC [word: WORD, function: Function] RETURNS [ImagerColor.SpecialColor]; END.