-- TEditFont.mesa; Last Edited by McGregor, 24-Aug-81 15:48:55

DIRECTORY
	NodeStyle USING [Dist],
	NameSymbolTable USING [Name];

TEditFont: DEFINITIONS = BEGIN

Font: TYPE = REF FontObject;

FontObject: TYPE = RECORD [
	height: [0..7777B] ← NULL,
	kerned: BOOLEAN ← NULL,
	width: PACKED ARRAY CHARACTER[0C..177C] OF [0..255] ← NULL,
	raster: CARDINAL ← NULL,
	maxWidth: CARDINAL ← NULL,
	min, max: CHARACTER ← NULL,
	address: LONG POINTER ← NIL,
	bitmap: LONG POINTER TO ARRAY [0..0) OF WORD ← NULL,
	xInSegment: LONG POINTER TO ARRAY CHARACTER[0C..0C) OF CARDINAL ← NULL,
	family: NameSymbolTable.Name,
	size: NodeStyle.Dist ← 0.0,
	next: Font ← NIL
	];

defaultFont: REF --READONLY-- FontObject;

CharWidth: PROCEDURE [char: CHARACTER, font: Font ← defaultFont]
	RETURNS [[0..LAST[INTEGER]]] = INLINE {RETURN[font.width[char]]};
       
StringWidth: PROCEDURE [string: STRING, font: Font ← defaultFont]
	RETURNS [[0..LAST[INTEGER]]] ;

FontHeight: PROCEDURE [font: Font ← defaultFont] RETURNS [[0..LAST[INTEGER]]] =
	INLINE {RETURN [font.height]} ;

XInSegment: PROCEDURE [char: CHARACTER, font: Font] RETURNS [CARDINAL] =
	INLINE {RETURN[font.xInSegment[char]]} ;

EstablishFont: PUBLIC PROCEDURE [family: NameSymbolTable.Name, size: NodeStyle.Dist]
	RETURNS [Font] ;

Error: ERROR [code: ErrorCode] ;
ErrorCode: TYPE = {illegalFormat} ;

END.