<> <> <> <> DIRECTORY Font USING [Key], ImagerBasic USING [PathMapType], Rope USING [ROPE]; UFPressFontReader: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; FontKey: TYPE = RECORD [fileKey: Font.Key, fontIndex: NAT _ 0]; CharShapeRepresentation: TYPE = {raster, outline, widthsOnly}; Error: SIGNAL[errorCode: ErrorCode, fontFileWordOffset: INT]; ErrorCode: TYPE = {fileNotFound, fontIndexTooLong, cantHappen, dataSegmentTooLong, invalidPointerInFile, consistencyCheck, fileHasBeenClosed, wrongFontFormatForThisOperation, invalidCodeInFile}; NumberOfFontsInFile: PROCEDURE [fileKey: Font.Key] RETURNS [NAT]; Family: PROCEDURE [fontKey: FontKey] RETURNS [family: ROPE]; Face: PROCEDURE [fontKey: FontKey] RETURNS [face: [0..256)]; Range: PROCEDURE [fontKey: FontKey] RETURNS [bc, ec: CHAR]; Size: PROCEDURE [fontKey: FontKey] RETURNS [size: REAL]; <> Rotation: PROCEDURE [fontKey: FontKey] RETURNS [degrees: REAL]; Representation: PROCEDURE [fontKey: FontKey] RETURNS [representation: CharShapeRepresentation]; Resolution: PROCEDURE [fontKey: FontKey] RETURNS [xRes, yRes: REAL]; <> GetCharInfo: PROCEDURE [fontKey: FontKey, char: CHAR] RETURNS [info: CharInfo]; CharInfo: TYPE = RECORD [ widthX, widthY: REAL, -- the width vector minX, minY: REAL, -- the lower left corner of the bounding box maxX, maxY: REAL -- the upper right corner of the bounding box ]; <> MoveToProc: TYPE = PROCEDURE [x, y: REAL]; LineToProc: TYPE = PROCEDURE [x, y: REAL]; CurveToProc: TYPE = PROCEDURE [x1, y1, x2, y2, x3, y3: REAL]; DrawAreaProc: TYPE = PROCEDURE; GetCharOutline: PROCEDURE [ fontKey: FontKey, char: CHAR, moveToProc: MoveToProc, lineToProc: LineToProc, curveToProc: CurveToProc, drawAreaProc: DrawAreaProc ]; GetCharPath: PROCEDURE [ fontKey: FontKey, char: CHAR ] RETURNS [pathMap: ImagerBasic.PathMapType, pathData: REF]; <> END.