UFPressFontReader.mesa
Created January 17, 1983 2:07 pm
Last edit by Michael Plass on February 14, 1984 2:19:03 pm PST
Last edit by Doug Wyatt on September 30, 1983 6:17 pm
DIRECTORY
Font USING [Key],
ImagerBasic USING [PathMapType, PixelArray],
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];
in meters, or 0 for a scalable font
Rotation: PROCEDURE [fontKey: FontKey] RETURNS [degrees: REAL];
Representation: PROCEDURE [fontKey: FontKey] RETURNS [representation: CharShapeRepresentation];
Resolution: PROCEDURE [fontKey: FontKey] RETURNS [xRes, yRes: REAL];
in bits per inch; only useful for raster fonts
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
];
All of the above dimensions are relative to the point size of the character, and are measured from the reference point of the character, with y increasing upwards and x increasing to the right.
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;
GetCharRaster: PROCEDURE [
fontKey: FontKey,
char: CHAR
] RETURNS [ImagerBasic.PixelArray];
ERROR if Representation[fontKey] # raster
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];
ERROR if Representation[fontKey] # outline.
END.