-- TSFontTable.mesa 
-- Definition of font metric table format for the Tioga Typesetter
-- Last changed by Michael Plass, May 27, 1982 9:33 am

-- These formats echo the Tfm formats, but with everything converted to an internal representation.

DIRECTORY TSTypes, Tfm, Rope;
TSFontTable: DEFINITIONS = 
BEGIN

Byte: TYPE = [0..377B];

MetricTable: TYPE = REF MetricTableRec;
MetricTableRec: TYPE = RECORD
       [entry: SEQUENCE length:NAT OF REAL];

Ref: TYPE = REF Record;
Record: TYPE = RECORD [
	name: Rope.ROPE, -- name of the Tfm file
	headerInfo: HeaderInfo, -- information from the header
	bc: CHAR, -- first character code in font
	ec: CHAR, -- last character code in font
	fInfoTable: FInfoTable,
	widthTable: MetricTable,
	heightTable: MetricTable,
	depthTable: MetricTable,
	charIcTable: MetricTable,
	ligKernProgram: LigKernProgram,
	kernTable: MetricTable,
	extTable: ExtTable,
	parameters: ParamTable];

HeaderInfo: TYPE = REF HeaderInfoRec;
HeaderInfoRec: TYPE = RECORD
       [checkSum: Tfm.Word, -- identifies the version of the font
	characterCodingScheme: Rope.ROPE,
	family: Rope.ROPE,
	designSize: TSTypes.Dimn,
	face: Byte];

FInfoTable: TYPE = REF FInfoTableRec;
FInfoTableRec: TYPE =  RECORD
       [entry: SEQUENCE length:NAT OF FInfoEntry]; 

FInfoTag: TYPE = Tfm.FInfoTag;

FInfoEntry: TYPE = Tfm.FInfoEntry;

-- The LigKern table contains instructions for a simple machine that decides how to treat special letter pairs.

LigKernProgram: TYPE = REF LigKernProgramRec;
LigKernProgramRec: TYPE = RECORD
       [step: SEQUENCE length:NAT OF LigKernStep];

LigOrKern: TYPE = Tfm.LigOrKern;

LigKernStep: TYPE = Tfm.LigKernEntry;

ExtTable: TYPE = REF ExtTableRec;
ExtTableRec: TYPE; -- Tioga does not use extensible characters yet.

ParamTable: TYPE = REF ParamTableRec;
ParamTableRec: TYPE = RECORD
       [slantNum, slantDenom: LONG INTEGER,
	entry: SEQUENCE length:Tfm.ParamIndex OF REAL];

Load: PROCEDURE [name: Rope.ROPE] RETURNS [Ref];

END.