<<>> <> <> <> <> <<>> DIRECTORY Char USING [XCHAR], ImagerBox USING [Extents], ImagerTransformation USING [Transformation], Rope USING [ROPE], Vector2 USING [VEC]; ImagerFont: CEDAR DEFINITIONS ~ BEGIN ROPE: TYPE ~ Rope.ROPE; VEC: TYPE ~ Vector2.VEC; Transformation: TYPE ~ ImagerTransformation.Transformation; <> XChar: TYPE ~ Char.XCHAR; nullXChar: XChar ~ Char.XCHAR.LAST; <> <<>> XCharProc: TYPE ~ PROC [char: XChar]; XStringProc: TYPE ~ PROC [charAction: XCharProc]; MapRope: PROC [rope: ROPE, start: INT ¬ 0, len: INT ¬ INT.LAST, charAction: XCharProc]; MapText: PROC [text: REF READONLY TEXT, start: NAT ¬ 0, len: NAT ¬ NAT.LAST, charAction: XCharProc]; <> <> <> <> <<>> Font: TYPE ~ REF FontRep; FontRep: TYPE ~ RECORD [ charToClient: Transformation, -- transforms from character to client coordinates typeface: Typeface -- the data and class for the untransformed font ]; Typeface: TYPE ~ REF TypefaceRep; TypefaceRep: TYPE; -- see ImagerTypeface Substitution: TYPE ~ {noSubstitute, substituteWithWarning, substituteQuietly}; Find: PROC [name: ROPE, substitution: Substitution ¬ substituteWithWarning] RETURNS [Font]; <> <> <> <<>> Modify: PROC [font: Font, m: Transformation] RETURNS [Font]; <> Scale: PROC [font: Font, s: REAL] RETURNS [Font]; <> <<>> FindScaled: PROC [name: ROPE, s: REAL] RETURNS [Font]; <> <<>> SelectAlternateMetrics: PROC [font: Font, alternateMetrics: ROPE] RETURNS [Font]; <> <> <<>> <> Extents: TYPE ~ ImagerBox.Extents; -- RECORD [leftExtent, rightExtent, descent, ascent: REAL] CorrectionType: TYPE ~ MACHINE DEPENDENT {mask(0), space(1), none(2), (3)}; Contains: PROC [font: Font, char: XChar] RETURNS [BOOL]; <> NextChar: PROC [font: Font, char: XChar] RETURNS [next: XChar]; <> <> Escapement: PROC [font: Font, char: XChar] RETURNS [VEC]; <> Amplified: PROC [font: Font, char: XChar] RETURNS [BOOL]; <> Correction: PROC [font: Font, char: XChar] RETURNS [CorrectionType]; <> BoundingBox: PROC [font: Font, char: XChar] RETURNS [Extents]; <> FontBoundingBox: PROC [font: Font] RETURNS [Extents]; <> Name: PROC [font: Font] RETURNS [ROPE]; <> Kern: PROC [font: Font, char, successor: XChar] RETURNS [VEC]; <> NextKern: PROC [font: Font, char, successor: XChar] RETURNS [XChar]; <> <> Ligature: PROC [font: Font, char, successor: XChar] RETURNS [XChar]; <> NextLigature: PROC [font: Font, char, successor: XChar] RETURNS [XChar]; <> <> StringEscapement: PROC [font: Font, string: XStringProc, amplifySpace: REAL ¬ 1.0] RETURNS [VEC]; RopeEscapement: PROC [font: Font, rope: ROPE, start: INT ¬ 0, len: INT ¬ INT.LAST, amplifySpace: REAL ¬ 1.0] RETURNS [VEC]; TextEscapement: PROC [font: Font, text: REF READONLY TEXT, start: NAT ¬ 0, len: NAT ¬ NAT.LAST, amplifySpace: REAL ¬ 1.0] RETURNS [VEC]; StringBoundingBox: PROC [font: Font, string: XStringProc, amplifySpace: REAL ¬ 1.0] RETURNS [Extents]; RopeBoundingBox: PROC [font: Font, rope: ROPE, start: INT ¬ 0, len: INT ¬ INT.LAST, amplifySpace: REAL ¬ 1.0] RETURNS [Extents]; TextBoundingBox: PROC [font: Font, text: REF READONLY TEXT, start: NAT ¬ 0, len: NAT ¬ NAT.LAST, amplifySpace: REAL ¬ 1.0] RETURNS [Extents]; END.