<<>> <> <> <> <> <> <> <> <> <> <> <> <<>> DIRECTORY Ascii USING [Lower], NodeStyle USING [FontAlphabets, FontFace, GetReal, GetSpaceWidth, GetTabLoc, GetTabRealCode, LeaderTabStop, LineFormatting, NameParam, PointsPerCentimeter, PointsPerDidot, PointsPerFil, PointsPerFill, PointsPerFilll, PointsPerInch, PointsPerMillimeter, PointsPerPica, RealParam, Ref, RulesTabStop, RuleTabStop, TabAlign, TabArrayRec, TabStop, TabStopRec], NodeStyleWorks USING [AddRealError, colorOps, DoStyleOp, glueOps, LoadProc, NameError, nameOps, OpsRec, Param, ParamRec, PercentError, realOps, RegisterStyleCommand, SetNameProc, StoreError, StyleError, StyleForFrame, TryToPopName, TryToPopReal, TryToPopRope], Rope USING [ActionType, Fetch, IsEmpty, Length, Map, ROPE], Tioga USING [Looks, noLooks], TJaM USING [AGet, Array, AtomFromRope, CommandProc, Frame, PopArray, PopReal, PopRope, Push, PushReal, PushRope]; NodeStyleWorks3Impl: CEDAR MONITOR IMPORTS Ascii, NodeStyle, NodeStyleWorks, Rope, TJaM EXPORTS NodeStyleWorks ~ BEGIN OPEN NodeStyle, NodeStyleWorks; Frame: TYPE ~ TJaM.Frame; ROPE: TYPE ~ Rope.ROPE; <> <> <<>> opsList: LIST OF RECORD[name: ATOM, op: TJaM.CommandProc] ¬ NIL; <<>> Preregister: PROC [param: Param, op: TJaM.CommandProc] RETURNS [Param] ~ { opsList ¬ CONS[[param.opName, op], opsList]; RETURN [param]; }; <<>> PreregisterName: PROC [opName: ATOM, op: TJaM.CommandProc, param: NodeStyle.NameParam] RETURNS [Param] ~ { RETURN Preregister[NEW[ParamRec.name ¬ [nameOps, opName, name[param]]], op]; }; <<>> PreregisterReal: PROC [opName: ATOM, op: TJaM.CommandProc, param: NodeStyle.RealParam] RETURNS [Param] ~ { RETURN Preregister[NEW[ParamRec.real ¬ [realOps, opName, real[param]]], op]; }; PreregisterGlue: PROC [opName: ATOM, op: TJaM.CommandProc, size, stretch, shrink: NodeStyle.RealParam] RETURNS [Param] ~ { RETURN Preregister[NEW[ParamRec.glue ¬ [glueOps, opName, glue[size: size, stretch: stretch, shrink: shrink]]], op]; }; PreregisterColor: PROC [opName: ATOM, op: TJaM.CommandProc, hue, saturation, brightness: NodeStyle.RealParam] RETURNS [Param] ~ { RETURN Preregister[NEW[ParamRec.color ¬ [colorOps, opName, color[hue: hue, saturation: saturation, brightness: brightness]]], op]; }; RegisterWorks3: PUBLIC PROC [frame: Frame] ~ { WHILE opsList # NIL DO RegisterStyleCommand[frame, opsList.first.name, opsList.first.op]; opsList ¬ opsList.rest; ENDLOOP; <<>> RegisterStyleCommand[frame, $clearTabStops, ClearTabStopsOp]; RegisterStyleCommand[frame, $tabStop, TabStopOp]; RegisterStyleCommand[frame, $defaultTabStops, DefaultTabStopsOp]; RegisterStyleCommand[frame, $tabStopLocations, RelativeTabStopsOp]; <<>> RegisterStyleCommand[frame, $pt, PointsOp]; RegisterStyleCommand[frame, $bp, BigPointsOp]; 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, SpacesOp]; RegisterStyleCommand[frame, $printsp, SpacesOp]; RegisterStyleCommand[frame, $sp, SpacesOp]; RegisterStyleCommand[frame, $fil, FilOp]; RegisterStyleCommand[frame, $fill, FillOp]; RegisterStyleCommand[frame, $filll, FilllOp]; }; <