-- TexTableDefs.mesa
-- last written by Doug Wyatt, November 16, 1979 3:35 PM
DIRECTORY
TexCmdDefs: FROM "TexCmdDefs" USING[Cmd],
TexDefs: FROM "TexDefs"
USING[Char,Font,Dimn,Penalty,HangSpec,Digit,
DefType,ChngType,IfType,BoxType,TopBotType,MarkType,CaseType,ModeType],
TexGlueDefs: FROM "TexGlueDefs" USING[GluePtr,GlueType],
TexHashDefs: FROM "TexHashDefs" USING[HashIndex],
TexMathDefs: FROM "TexMathDefs"
USING[MFont,MChar,TMChar,MathFontTableIndex,Delimiter,
MType,SType,StyleStyle,MathSpace,AboveType,VctrType,DelimType],
TexTokenDefs: FROM "TexTokenDefs" USING[TokenListPtr];
TexTableDefs: DEFINITIONS =
BEGIN OPEN TexMathDefs,TexDefs;
TableError: SIGNAL;
UndefinedFont: ERROR;
SaveStackError: ERROR;
nlevs: CARDINAL = 32;
Lev: TYPE = [0..nlevs); -- nesting level; 0 means undefined
CurLev: PROCEDURE RETURNS[Lev];
EndingCode: TYPE = {bottomlevel, simpleblock, trueend, aligncode, alignentry,
mathcode, outputend, noalignend, botinsend, topinsend, justend,
mathblock, mathleft, endvcenter, endscanmath, falseend};
NewSaveLevel: PROCEDURE[EndingCode];
SaveCode: PROCEDURE RETURNS[EndingCode];
UnSave: PROCEDURE[EndingCode];
Cmd: TYPE = TexCmdDefs.Cmd;
CmdInfo: TYPE = RECORD[SELECT COMPUTED Cmd FROM
macprm,lbrace,rbrace,mathbr,tabmrk,supmrk,submrk,
spacer,letter,otherchar,discr,accent,nonmathletter => [char: Char],
mdiscr => [mchar: MChar],
mathonly,tmcharentry => [tmchar: TMChar],
fntfam => [mfont: MFont],
call => [toklist: TexTokenDefs.TokenListPtr],
assignglue => [glueparam: GlueParamType],
assignreal => [dimnparam: DimnParamType],
def => [deftype: DefType],
chcode => [chngtype: ChngType],
ifeven => [iftype: IfType],
box => [boxtype: BoxType],
hmove,vmove => [neg: BOOLEAN],
vskip,hskip => [gluetype: TexGlueDefs.GlueType],
leftright => [lr: DelimType],
topbotins => [topbot: TopBotType],
topbotmark => [marktype: MarkType],
caseshift => [case: CaseType],
mathinput => [mtype: MType, stype: SType],
above => [abovetype: AboveType],
mathstyle => [style: StyleStyle],
mathspace => [space: MathSpace],
vcenter => [vctr: VctrType],
ifmode => [mode: ModeType],
chartypeentry => [chartype: CharType],
fontentry => [defined: BOOLEAN, font: Font],
hangentry => [hangpar: HangPar],
texparentry => [texpar: TexPar],
glueentry => [glue: TexGlueDefs.GluePtr],
undefined,ctrlseq,outpar,match,parend,endv,carret,xt,font,output,innput,
stop,ddt,ascii,setcount,advcount,count,ifT,elsecode,save,leaders,
halign,valign,noalign,vrule,hrule,mark,penlty,noindent,eject,
newaccent,eqno,exspace,limsw,italcorr,hangindent,unskip => NULL,
ENDCASE];
HashIndex: TYPE = TexHashDefs.HashIndex;
HashEquiv: PROCEDURE[i: HashIndex] RETURNS[cmd: Cmd, info: CmdInfo];
SetHashEquiv: PROCEDURE[i: HashIndex, cmd: Cmd, info: CmdInfo,
global: BOOLEAN←FALSE];
HashEquivDefined: PROCEDURE[i: HashIndex] RETURNS[BOOLEAN];
CharType: TYPE =
{
escape, -- escape delimiter (\ in TEX manual)
lbrace, -- begin block symbol ( { )
rbrace, -- end block symbol ( } )
mathbr, -- math break ( $ )
tabmrk, -- tab mark ( in alignment )
carret, -- carriage return and comment mark ( % )
macprm, -- macro parameter ( # )
supmrk, -- superscript ( ↑ )
submrk, -- subscript ( down arrow )
ignore, -- chars to ignore
spacer, -- chars treated as blank space
letter, -- chars treated as letters
otherchar -- none of the above character types
};
ChType: PROCEDURE[c: Char] RETURNS[CharType];
SetChType: PROCEDURE[c: Char, type: CharType];
MModeCode: PROCEDURE[c: Char] RETURNS[TMChar];
SetMModeCode: PROCEDURE[c: Char, tmchar: TMChar];
CurFont: PROCEDURE RETURNS[Font];
SetFont: PROCEDURE[f: Font];
CurMathFont: PROCEDURE[MathFontTableIndex] RETURNS[Font];
SetMathFont: PROCEDURE[MathFontTableIndex, Font];
HangParamType: TYPE = {begin, first, width};
HangPar: TYPE = RECORD[SELECT COMPUTED HangParamType FROM
begin => [begin: CARDINAL],
first => [first: BOOLEAN],
width => [width: Dimn],
ENDCASE];
CurHangIndent,GlobalHangIndent: PROCEDURE RETURNS[HangSpec];
SetHangIndent,SetGlobalHangIndent: PROCEDURE[HangSpec];
TexParamType: TYPE = {jpar, hpen, penpen, wpen, bpen, mbpen, mrpen, disppen,
ragged, tracing};
PenaltyType: TYPE = TexParamType[jpar..disppen];
TexPar: TYPE = RECORD[SELECT COMPUTED TexParamType FROM
jpar,hpen,penpen,wpen,bpen,mbpen,mrpen,disppen => [penalty: Penalty],
ragged => [ragged: CARDINAL],
tracing => [tracing: TraceInfo],
ENDCASE];
TraceInfo: TYPE = RECORD
[boxitems, boxlevel: [0..37B],
showmacros,showinput,ddtstop: BOOLEAN,
reportoverfull,showpages,ddtdump: BOOLEAN];
TexParam: PROCEDURE[t: TexParamType] RETURNS[TexPar];
SetTexParam: PROCEDURE[t: TexParamType, texpar: TexPar];
CurPenalty: PROCEDURE[t: PenaltyType] RETURNS[Penalty];
CurTracing: PROCEDURE RETURNS[TraceInfo];
GlueParamType: TYPE = {lineskip, baselineskip, parskip, dispskip,
topskip, botskip, tabskip, dispaskip, dispbskip};
GlueParam: PROCEDURE[t: GlueParamType] RETURNS[TexGlueDefs.GluePtr];
SetGlueParam: PROCEDURE[t: GlueParamType, glue: TexGlueDefs.GluePtr];
DimnParamType: TYPE = {hsize, vsize, maxdepth, parindent,
topbaseline, mathsurround, varunit, lineskiplimit};
DimnParam: PROCEDURE[t: DimnParamType] RETURNS[Dimn];
SetDimnParam: PROCEDURE[t: DimnParamType, d: Dimn];
Kount: PROCEDURE[Digit] RETURNS[INTEGER];
SetKount: PROCEDURE[Digit,INTEGER];
SpaceFactor: TYPE = Dimn; -- in thousandths
sfOne: SpaceFactor=1000; -- a space factor of one
SfTable: PROCEDURE[Char] RETURNS[SpaceFactor];
SetSfTable: PROCEDURE[Char,SpaceFactor];
AddDelimiter: PROCEDURE[c: Char, delim: Delimiter];
DelimLookup: PROCEDURE[Char] RETURNS[defined: BOOLEAN, delim: Delimiter];
TexHash: PRIVATE PROGRAM;
TexEqtb: PRIVATE PROGRAM;
TexHashInit: PRIVATE PROGRAM;
TexState: PRIVATE PROGRAM;
TexStateInit: PRIVATE PROGRAM;
TexTableControl: PROGRAM;
END.