<<>> <> <> <> <> <<>> DIRECTORY Char USING [XCHAR], Imager USING [Box, Color, Context, VEC], ImagerFont USING [Font, Extents], NodeStyle USING [Style, TabStop, FontUnderlining], Scaled USING [Value], Tioga USING [Node, Location, Looks]; TEditFormat: CEDAR DEFINITIONS ~ BEGIN <> LineInfo: TYPE = REF LineInfoRec; LineInfoRec: TYPE = RECORD [ charInfo: CharInfo, formatInfo: FormatInfo, positionInfo: PositionInfo, artworkClass: ArtworkClass, artworkData: REF, startPos, nextPos: Tioga.Location, xOffset: Scaled.Value, xmin, ymin, xmax, ymax: INTEGER, <> nChars: NAT, nBlankCharsAtEnd: NAT, break: LineBreak, hasBackground: BOOL, amplifySpace: REAL, startAmplifyIndex: CharNumber, index: INT, -- for use by clients data: REF, -- for use by clients link: LineInfo ]; CharNumber: TYPE = NAT; CharInfo: TYPE = REF CharInfoRec; CharInfoRec: TYPE = RECORD [ seq: SEQUENCE maxLength: CharNumber OF CharInfoEntry ]; CharInfoEntry: TYPE = PACKED RECORD [ char: Char.XCHAR, formatNumber: FormatNumber, alteredWidth: BOOL, amplified: BOOL, width: Scaled.Value ]; FormatNumber: TYPE = [0..2**30); FormatInfo: TYPE = REF FormatInfoRec; FormatInfoRec: TYPE = RECORD [ length: FormatNumber ¬ 0, seq: SEQUENCE maxLength: FormatNumber OF FormatInfoEntry ]; FormatInfoEntry: TYPE = RECORD [ looks: Tioga.Looks, font: ImagerFont.Font ¬ NIL, color: Imager.Color ¬ NIL, tab: NodeStyle.TabStop ¬ NIL, vShift: REAL ¬ 0.0, strikeout: NodeStyle.FontUnderlining ¬ None, underlining: NodeStyle.FontUnderlining ¬ None, extension: REF ExtraFormatInfoRep, unique: BOOL ]; ExtraFormatInfoRep: TYPE; -- see TEditFormatImpl PositionInfo: TYPE = REF PositionInfoRec; PositionInfoRec: TYPE = RECORD [seq: SEQUENCE maxLength: CharNumber OF INTEGER]; LineBreak: TYPE ~ { eon, cr, wrap } ¬ eon; FormatLine: FormatProc; FormatProc: TYPE ~ PROC [lineInfo: LineInfo, node: Tioga.Node, startOffset: INT, nodeStyle: NodeStyle.Style, lineWidth: Scaled.Value, doLigsAndKern: BOOL ¬ FALSE]; Paint: PaintProc; PaintProc: TYPE ~ PROC [lineInfo: LineInfo, context: Imager.Context]; <> <<>> Resolve: ResolveProc; ResolveProc: TYPE ~ PROC [lineInfo: LineInfo, x: INTEGER] RETURNS [loc: Tioga.Location, xmin, width: INTEGER, rightOfLine: BOOL]; <> <<>> 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 ]; CharacterFormatProc: TYPE ~ PROC [class: CharacterArtworkClass, loc: Tioga.Location, style: NodeStyle.Style] RETURNS [CharacterArtwork]; CharacterArtworkClass: TYPE ~ REF CharacterArtworkClassRep; CharacterArtworkClassRep: TYPE ~ RECORD [ name: ATOM, format: CharacterFormatProc, <> data: REF ]; RegisterCharacterArtwork: PROC [class: CharacterArtworkClass]; UnregisterCharacterArtwork: PROC [name: ATOM]; GetCharacterArtworkClass: PROC [ATOM] RETURNS [CharacterArtworkClass]; <<>> <> 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: Tioga.Node, start, len: INT, hyphData: REF] RETURNS [HyphenationPositions]; <> RegisterHyphenation: PROC [hyphenationClass: ATOM, hyphProc: HyphProc, hyphData: REF] RETURNS [oldProc: HyphProc, oldData: REF]; <> END.