UFPressFontReader.mesa
Created January 17, 1983 2:07 pm
Last edit by Michael Plass on January 20, 1983 5:08 pm
DIRECTORY
Graphics,
PressFontFormat,
Rope,
UnifiedFonts;
UFPressFontReader: CEDAR DEFINITIONS =
BEGIN
ROPE: TYPE = Rope.ROPE;
FontKey: TYPE = RECORD [fileKey: UnifiedFonts.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: UnifiedFonts.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 [rotation: 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.
DrawChar:
PROCEDURE [context: Graphics.Context, fontKey: FontKey, char:
CHAR];
The character, which may be in any supported format, is drawn at the scale of one em per unit. Thus to draw a 10 point font, scale by a factor of 10 before drawing. The current position is updated by the width after the character is drawn.
DrawCharRaster:
PROCEDURE [context: Graphics.Context, fontKey: FontKey, char:
CHAR];
The character is drawn at the scale of one pixel per unit. The current position is updated by the width after the character is drawn.
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 [path: Graphics.Path];
END.