DIRECTORY ImagerTransformation USING [Transformation], Prop USING [PropList], Rope USING [ROPE], Vector2 USING [VEC]; Font: CEDAR DEFINITIONS ~ BEGIN ROPE: TYPE ~ Rope.ROPE; VEC: TYPE ~ Vector2.VEC; Transformation: TYPE ~ ImagerTransformation.Transformation; FONT: TYPE ~ REF FontRep; FontRep: TYPE ~ RECORD[ class: Class, data: REF, name: ROPE, charToClient: Transformation, props: Prop.PropList ]; Class: TYPE ~ REF ClassRep; ClassRep: TYPE ~ RECORD[ Modify: PROC[font: FONT, m: Transformation] RETURNS[FONT], Contains: PROC[font: FONT, char: Char] RETURNS[BOOL], NextChar: PROC[font: FONT, char: Char] RETURNS[next: Char], Width: PROC[font: FONT, char: Char] RETURNS[VEC], Amplified: PROC[font: FONT, char: Char] RETURNS[BOOL], Correction: PROC[font: FONT, char: Char] RETURNS[CorrectionType], BoundingBox: PROC[font: FONT, char: Char] RETURNS[Extents], Ligature: PROC[font: FONT, char, successor: Char] RETURNS[Char], NextLigature: PROC[font: FONT, char, successor: Char] RETURNS[Char], Kern: PROC[font: FONT, char, successor: Char] RETURNS[VEC], NextKern: PROC[font: FONT, char, successor: Char] RETURNS[Char], CharInfo: PROC[font: FONT, char: Char, key: ATOM] RETURNS[OptionalReal], MaskChar: PROC[font: FONT, char: Char, imager: REF -- Imager.Context --] ]; Char: TYPE ~ CARDINAL; nullChar: Char ~ CARDINAL.LAST; CorrectionType: TYPE ~ {none, space, mask}; Extents: TYPE ~ RECORD[leftExtent, rightExtent, descent, ascent: REAL]; OptionalReal: TYPE ~ RECORD[exists: BOOL, value: REAL]; Find: PROC[name: ROPE] RETURNS[FONT]; Modify: PROC[font: FONT, m: Transformation] RETURNS[FONT]; Scale: PROC[font: FONT, s: REAL] RETURNS[FONT]; Contains: PROC[font: FONT, char: Char] RETURNS[BOOL]; NextChar: PROC[font: FONT, char: Char] RETURNS[next: Char]; BoundingBox: PROC[font: FONT, char: Char] RETURNS[Extents]; Width: PROC[font: FONT, char: Char] RETURNS[VEC]; Amplified: PROC[font: FONT, char: Char] RETURNS[BOOL]; Correction: PROC[font: FONT, char: Char] RETURNS[CorrectionType]; Kern: PROC[font: FONT, char, successor: Char] RETURNS[VEC]; NextKern: PROC[font: FONT, char, successor: Char] RETURNS[Char]; Ligature: PROC[font: FONT, char, successor: Char] RETURNS[Char]; NextLigature: PROC[font: FONT, char, successor: Char] RETURNS[Char]; CharInfo: PROC[font: FONT, char: Char, key: ATOM] RETURNS[OptionalReal]; MaskChar: PROC[font: FONT, char: Char, imager: REF -- Imager.Context --]; PutProp: PROC[font: FONT, key: REF, value: REF]; GetProp: PROC[font: FONT, key: REF] RETURNS[value: REF]; Register: PROC[prefix: ROPE, find: PROC[ROPE] RETURNS[FONT]]; END. \Font.mesa Copyright c 1984, Xerox Corporation. All rights reserved. Michael Plass, July 31, 1984 10:58:40 am PDT Doug Wyatt, October 9, 1984 2:54:11 pm PDT Find the font with the given hierarchical name. It's safe to use RefText.TrustTextAsRope for the name. Modify a font by post-concatenating the given transformation. Equivalent to Modify[font, ImagerTransformation.Scale[s]]. TRUE iff the character exists in the font. Returns next char in the font, or nullChar. Call with nullChar to get first char in font. Returns a true bounding box for the character mask (not necessarily as tight as possible). Returns kerning adjustment between char and successor, or [0, 0]. Returns next successor that kerns with char. Call with successor=nullChar to get first one. Returns a ligature formed from char and successor, or nullChar. Returns next successor that has a ligature with char, Call with successor=nullChar to get first one. Escape hatch for getting other information not included above. Applies the character mask. Register a procedure responsible for finding fonts whose names have the given prefix. Ê8˜šœ ™ Jšœ Ïmœ/™:J™,J™*—J™šÏk ˜ Jšœžœ˜,Jšœžœ ˜Jšœžœžœ˜Jšœžœžœ˜—J˜Jšœžœž ˜Jšœž˜J˜Jšžœžœžœ˜Jšžœžœ žœ˜Jšœžœ'˜;J˜Jšžœžœžœ ˜šœ žœžœ˜J˜ Jšœžœ˜ Jšœžœ˜ Jšœ˜Jšœ˜J˜J˜—Jšœžœžœ ˜šœ žœžœ˜Jš Ïnœžœžœžœžœ˜:Jš Ÿœžœžœžœžœ˜5JšŸœžœžœžœ ˜;Jš Ÿœžœžœžœžœ˜1Jš Ÿ œžœžœžœžœ˜6JšŸ œžœžœžœ˜AJšŸ œžœžœžœ ˜;JšŸœžœžœžœ˜@JšŸ œžœžœžœ˜DJš Ÿœžœžœžœžœ˜;JšŸœžœžœžœ˜@Jš Ÿœžœžœžœžœ˜HJš ŸœžœžœžœÏcœ˜HJ˜J˜—Jšœžœžœ˜šœžœžœ˜J˜—šœžœ˜+J˜—šœ žœžœ+žœ˜GJ˜—š œžœžœ žœ žœ˜7J˜—š Ÿœžœžœžœžœ˜%Jšœ/™/J™6J™—š Ÿœžœžœžœžœ˜:J™=J˜—š Ÿœžœžœžœžœžœ˜/Jšœ:™:J˜—š Ÿœžœžœžœžœ˜5Jšœ*™*J˜—šŸœžœžœžœ ˜;Jšœ+™+Jšœ-™-J˜—šŸ œžœžœžœ ˜;JšœZ™ZJ˜—š Ÿœžœžœžœžœ˜1J˜—š Ÿ œžœžœžœžœ˜6J˜—šŸ œžœžœžœ˜AJ˜—š Ÿœžœžœžœžœ˜;J™AJ˜—šŸœžœžœžœ˜@Jšœ,™,Jšœ.™.J˜—šŸœžœžœžœ˜@J™?J˜—šŸ œžœžœžœ˜DJšœ5™5Jšœ.™.J˜—š Ÿœžœžœžœžœ˜HJšœ>™>J™—š Ÿœžœžœžœ œ˜IJšœ™J™—š Ÿœžœžœžœ žœ˜0J˜—š Ÿœžœžœžœžœžœ˜8J˜—J˜šŸœžœ žœžœžœžœžœ˜=J™UJ™—Jšžœ˜J˜—…— ²