<> <> <> <> <<>> DIRECTORY Imager USING [Box, Color, Context, VEC], ImagerFont USING [Font, Extents, XChar], NodeStyle USING [Ref, RealParam, TabStop, FontUnderlining], NodeStyleOps USING [OfStyle], Scaled USING [Value], TEditDocument USING [LineBreak], TextLooks USING [Looks], TextNode USING [Location, Ref]; TEditFormat: CEDAR DEFINITIONS ~ BEGIN <> LineInfo: TYPE = REF LineInfoRec; LineInfoRec: TYPE = RECORD [ charInfo: CharInfo, formatInfo: FormatInfo, positionInfo: PositionInfo, artworkClass: ArtworkClass, artworkData: REF, startPos, nextPos: TextNode.Location, xOffset: Scaled.Value, xmin, ymin, xmax, ymax: INTEGER, <> nChars: NAT, nBlankCharsAtEnd: NAT, break: TEditDocument.LineBreak, hasBackground: BOOL, amplifySpace: REAL, startAmplifyIndex: CharNumber, index: INT, -- for use by clients data: REF, -- for use by clients link: LineInfo ]; CharNumber: TYPE = [0..LAST[CARDINAL]/SIZE[CharInfoEntry]-8); CharInfo: PUBLIC TYPE = REF CharInfoRec; CharInfoRec: PUBLIC TYPE = RECORD [ seq: SEQUENCE maxLength: CharNumber OF CharInfoEntry ]; CharInfoEntry: TYPE = RECORD [ char: ImagerFont.XChar, formatNumber: FormatNumber, alteredWidth: BOOLEAN, amplified: BOOLEAN, width: Scaled.Value ]; FormatNumber: TYPE = [0..LAST[CARDINAL]/SIZE[FormatInfoEntry]-16); FormatInfo: PUBLIC TYPE = REF FormatInfoRec; FormatInfoRec: PUBLIC TYPE = RECORD [ length: FormatNumber _ 0, seq: SEQUENCE maxLength: FormatNumber OF FormatInfoEntry ]; FormatInfoEntry: TYPE = RECORD [ looks: TextLooks.Looks, font: ImagerFont.Font _ NIL, color: Imager.Color _ NIL, tab: NodeStyle.TabStop _ NIL, vShift: REAL _ 0.0, extension: REF, strikeout: NodeStyle.FontUnderlining _ None, underlining: NodeStyle.FontUnderlining _ None, unique: BOOL ]; PositionInfo: PUBLIC TYPE = REF PositionInfoRec; PositionInfoRec: PUBLIC TYPE = RECORD [ seq: SEQUENCE maxLength: CharNumber OF INTEGER ]; FormatLine: FormatProc; FormatProc: TYPE ~ PROC [ lineInfo: LineInfo, node: TextNode.Ref, startOffset: INT, nodeStyle: NodeStyle.Ref, lineWidth: Scaled.Value, doLigsAndKern: BOOLEAN _ FALSE, kind: NodeStyleOps.OfStyle _ screen ]; Paint: PaintProc; PaintProc: TYPE ~ PROC [lineInfo: LineInfo, context: Imager.Context]; <> <<>> Resolve: ResolveProc; ResolveProc: TYPE ~ PROC [lineInfo: LineInfo, x: INTEGER] RETURNS [loc: TextNode.Location, xmin, width: INTEGER, rightOfLine: BOOLEAN]; <> <<>> CharPosition: CharPositionProc; CharPositionProc: TYPE ~ PROC [lineInfo: LineInfo, offset: INT] RETURNS [x, width: INTEGER]; <> <<>> BoundingBox: BoundingBoxProc; BoundingBoxProc: TYPE ~ PROC [lineInfo: LineInfo, start: INT _ 0, length: INT _ LAST[INT]] RETURNS [Imager.Box]; <> <<>> Allocate: PROC RETURNS [lineInfo: LineInfo]; <> <<>> Release: PROC [lineInfo: LineInfo]; <> <<>> <> RegisterArtwork: PROC [ArtworkClass]; UnRegisterArtwork: PROC [ATOM]; GetArtworkClass: PROC [ATOM] RETURNS [ArtworkClass]; ArtworkClass: TYPE ~ REF ArtworkClassRep; ArtworkClassRep: TYPE ~ RECORD [ name: ATOM, format: FormatProc, paint: PaintProc, resolve: ResolveProc, charPosition: CharPositionProc, boundingBox: BoundingBoxProc ]; <> <> <<>> CharacterArtwork: TYPE ~ REF CharacterArtworkRep; CharacterArtworkRep: TYPE ~ RECORD [ paint: PROC [CharacterArtwork, Imager.Context], extents: ImagerFont.Extents _ [0, 0, 0, 0], escapement: Imager.VEC _ [0, 0], amplified: BOOL _ FALSE, data: REF _ NIL ]; CharacterArtworkClass: TYPE ~ REF CharacterArtworkClassRep; CharacterArtworkClassRep: TYPE ~ RECORD [ name: ATOM, format: PROC [CharacterArtworkClass, TextNode.Location, NodeStyle.Ref, NodeStyleOps.OfStyle] RETURNS [CharacterArtwork], <> data: REF ]; RegisterCharacterArtwork: PROC [class: CharacterArtworkClass]; UnregisterCharacterArtwork: PROC [name: ATOM]; GetCharacterArtworkClass: PROC [ATOM] RETURNS [CharacterArtworkClass]; GetFont: PROC [style: NodeStyle.Ref] RETURNS [ImagerFont.Font]; GetColor: PROC [style: NodeStyle.Ref, h: NodeStyle.RealParam _ textHue, s: NodeStyle.RealParam _ textSaturation, b: NodeStyle.RealParam _ textBrightness] RETURNS [color: Imager.Color]; <> ArtworkEnabled: PROC RETURNS [BOOL]; SetArtworkEnabled: PROC [enabled: BOOL] RETURNS [was: BOOL]; <> <> <> maxHyph: NAT ~ 16; HyphenationPosition: TYPE ~ [0..256) _ 0; HyphenationPositions: TYPE ~ PACKED ARRAY [0..maxHyph) OF HyphenationPosition; HyphProc: TYPE ~ PROC [node: TextNode.Ref, start, len: INT, hyphData: REF] RETURNS [HyphenationPositions]; <> RegisterHyphenation: PROC [hyphenationClass: ATOM, hyphProc: HyphProc, hyphData: REF] RETURNS [oldProc: HyphProc, oldData: REF]; <> END.