NodeStyleWorksStartImpl.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Rick Beach, March 19, 1985 5:28:11 pm PST
DIRECTORY
NameSymbolTable USING [MakeName],
NodeStyle,
TJaMOps USING [Begin, defaultFrame, End, Execute, Put, RegisterExplicit, TopDict];
NodeStyleWorksStartImpl: CEDAR PROGRAM
IMPORTS NodeStyle, TJaMOps
EXPORTS NodeStyleWorks
~ BEGIN OPEN NodeStyleWorks;
RunFile: PROC [frame: Frame, name: Name, dictname: LONG STRING]
RETURNS [BOOL] = TRUSTED {
known: BOOL;
[known, ] ← TJaMOps.TryToLoad[frame, name];
IF known THEN RETURN [FALSE];
PushText[frame, dictname];
TJaMOps.Execute[frame, run];
RETURN [TRUE];
};
Start: PROC = {
frame: Frame ← TJaMOps.defaultFrame;
Some JaM commands needed to run the style machinery
get ← GetCommand[frame, Atom.MakeAtom[".get"]];
run ← GetCommand[frame, Atom.MakeAtom[".run"]];
load ← GetCommand[frame, Atom.MakeAtom[".load"]];
start ← GetCommand[frame, Atom.MakeAtom[".start"]];
Remember the system dictionary, since the style machinery manipulates the dictionary stack
sysdict ← TypeCheckDict[GetObject[frame, Atom.MakeAtom[".sysdict"]]];
Check if we have run the start jam code: (start.jam) .run
This provides a user dictionary into which start.jam loads util.jam and errordefs.jam
IF NOT RunFile[frame, $user ,"start.jam"] THEN
TJaMOps.Execute[frame, start];
Remember the user dictionary pointer
userdict ← TJaMOps.TopDict[frame.dictstk];
Create the dicitionary of Tioga style names
[, styledict] ← InitDict[$TiogaStylesDictionary];
TJaMOps.AttachDict[styledict, userdict];
Replace userdict by styledict for rest of startup
TJaMOps.End[frame];
TJaMOps.Begin[frame, styledict];
Create and register dictionaries for style rules, name bindings, and attached styles
stylesDicts[base] ← InitDict[$TiogaBaseStylesDictionary];
stylesDicts[print] ← InitDict[$TiogaPrintStylesDictionary];
stylesDicts[screen] ← InitDict[$TiogaScreenStylesDictionary];
bindingDict ← InitDict[$TiogaBindingDictionary, 200];
attachmentsDict ← InitDict[$TiogaAttachedStylesDictionary];
Check if have run the Tioga utility jam code: (TiogaUtils.jam) .run
[] ← RunFile[frame, $StyleError, "TiogaUtils.jam"];
Register various style machinery operations that are global to a particular style
TJaMOps.RegisterExplicit[frame, $ReportStyleError, ReportStyleErrorOp];
TJaMOps.RegisterExplicit[frame, $StyleName, StyleNameOp];
TJaMOps.RegisterExplicit[frame, $StyleRuleDict, StyleRuleDictOp];
TJaMOps.RegisterExplicit[frame, $PrintRuleDict, PrintRuleDictOp];
TJaMOps.RegisterExplicit[frame, $ScreenRuleDict, ScreenRuleDictOp];
TJaMOps.RegisterExplicit[frame, $OpenPrintStyle, OpenPrintStyleOp];
TJaMOps.RegisterExplicit[frame, $OpenScreenStyle, OpenScreenStyleOp];
TJaMOps.RegisterExplicit[frame, $ResetTestStyle, ResetTestStyleOp];
Register style commands in the binding dictionary
[] ← RegisterStyleCommand[frame, $BeginStyle, BeginStyleOp];
[] ← RegisterStyleCommand[frame, $EndStyle, EndStyleOp];
[] ← RegisterStyleCommand[frame, $StyleRule, StyleRuleOp];
[] ← RegisterStyleCommand[frame, $PrintRule, PrintRuleOp];
[] ← RegisterStyleCommand[frame, $ScreenRule, ScreenRuleOp];
[] ← RegisterStyleCommand[frame, $AttachStyle, AttachStyleOp];
Register style commands for that implement tab stop style attributes
[] ← RegisterStyleCommand[frame, $clearTabStops, ClearTabStopsOp];
[] ← RegisterStyleCommand[frame, $tabStop, TabStopOp];
[] ← RegisterStyleCommand[frame, $defaultTabStops, DefaultTabStopsOp];
[] ← RegisterStyleCommand[frame, $tabStopLocations, RelativeTabStopsOp];
Initialize the small cache of frames by allocating and freeing some
{
frame, frame1, frame2, frame3, frame4: Frame ← NIL;
frame1 ← GetFrame[NIL, NameSymbolTable.nullName, screen];
frame2 ← GetFrame[NIL, NameSymbolTable.nullName, screen];
frame3 ← GetFrame[NIL, NameSymbolTable.nullName, screen];
frame4 ← GetFrame[NIL, NameSymbolTable.nullName, screen];
FreeFrame[frame1, NameSymbolTable.nullName, screen];
FreeFrame[frame2, NameSymbolTable.nullName, screen];
FreeFrame[frame3, NameSymbolTable.nullName, screen];
FreeFrame[frame4, NameSymbolTable.nullName, screen];
};
Register style parameter procedures
specialOp ← DefineSpecialOp[frame, $SpecialOp, SpecialOp];
TJaMOps.RegisterExplicit[frame, $StyleParam, StyleParamOp];
TJaMOps.RegisterExplicit[frame, $isComment, IsCommentOp];
TJaMOps.RegisterExplicit[frame, $isPrint, IsPrintOp];
TJaMOps.RegisterExplicit[frame, $nestingLevel, NestingLevelOp];
Register various literals used by the style machinery as keywords
the ← RegisterStyleLiteral[frame, $the];
smaller ← RegisterStyleLiteral[frame, $smaller];
bigger ← RegisterStyleLiteral[frame, $bigger];
percent ← RegisterStyleLiteral[frame, $percent];
regular ← RegisterStyleLiteral[frame, $regular];
bold ← RegisterStyleLiteral[frame, $bold];
italic ← RegisterStyleLiteral[frame, $italic];
bolditalic ← RegisterStyleLiteral[frame, $bold+italic];
plusbold ← RegisterStyleLiteral[frame, $+bold];
plusitalic ← RegisterStyleLiteral[frame, $+italic];
minusbold ← RegisterStyleLiteral[frame, $-bold];
minusitalic ← RegisterStyleLiteral[frame, $-italic];
capsAndLower ← RegisterStyleLiteral[frame, $caps+lowercase];
capsAndSmallCaps ← RegisterStyleLiteral[frame, $caps+smallcaps];
lowerOnly ← RegisterStyleLiteral[frame, $lowercase];
capsOnly ← RegisterStyleLiteral[frame, $caps];
all ← RegisterStyleLiteral[frame, $all];
visible ← RegisterStyleLiteral[frame, $visible];
lettersAndDigits ← RegisterStyleLiteral[frame, Atom.MakeAtom["letters+digits"]];
none ← RegisterStyleLiteral[frame, $none];
justified ← RegisterStyleLiteral[frame, $justified];
flush ← RegisterStyleLiteral[frame, $flush];
flushLeft ← RegisterStyleLiteral[frame, $flushLeft];
flushRight ← RegisterStyleLiteral[frame, $flushRight];
filled ← RegisterStyleLiteral[frame, $filled];
outlined ← RegisterStyleLiteral[frame, $outlined];
filled ← RegisterStyleLiteral[frame, $filled];
filledAndOutlined ← RegisterStyleLiteral[frame, Atom.MakeAtom["filled+outlined"]];
centered ← RegisterStyleLiteral[frame, $centered];
fixed ← RegisterStyleLiteral[frame, $fixed];
relative ← RegisterStyleLiteral[frame, $relative];
looks ← RegisterStyleLiteral[frame, $looks];
breakIfPast ← RegisterStyleLiteral[frame, $breakIfPast];
spaceIfPast ← RegisterStyleLiteral[frame, $spaceIfPast];
blank ← RegisterStyleLiteral[frame, $blank];
leaders ← RegisterStyleLiteral[frame, $leaders];
rule ← RegisterStyleLiteral[frame, $rule];
rules ← RegisterStyleLiteral[frame, $rules];
aligned ← RegisterStyleLiteral[frame, $aligned];
congruent ← RegisterStyleLiteral[frame, $congruent];
Register the style attribute operations that were preregistered (this module must obviously be last if there are several modules preregistering style attributes)
WHILE opsList # NIL DO
[] ← RegisterStyleCommand[frame, opsList.first.param.opName, opsList.first.op];
opsList ← opsList.rest;
ENDLOOP;
TJaMOps.End[frame]; -- replace sysdict by userdict
TJaMOps.Begin[frame,userdict];
Dimensions
[] ← RegisterStyleCommand[frame, $pt, PointsOp];
[] ← RegisterStyleCommand[frame, $pc, PicasOp];
[] ← RegisterStyleCommand[frame, $in, InchesOp];
[] ← RegisterStyleCommand[frame, $cm, CentimetersOp];
[] ← RegisterStyleCommand[frame, $mm, MillimetersOp];
[] ← RegisterStyleCommand[frame, $dd, DidotPointsOp];
[] ← RegisterStyleCommand[frame, $em, EmsOp];
[] ← RegisterStyleCommand[frame, $en, EnsOp];
[] ← RegisterStyleCommand[frame, $screensp, ScreenSpacesOp];
[] ← RegisterStyleCommand[frame, $printsp, PrintSpacesOp];
[] ← RegisterStyleCommand[frame, $fil, FilOp];
[] ← RegisterStyleCommand[frame, $fill, FillOp];
[] ← RegisterStyleCommand[frame, $filll, FilllOp];
Create a default style
[] ← LoadStyle[defaultStyleName];
};
END.