<> <> <> DIRECTORY Scaled; TiogaLineBreak: CEDAR DEFINITIONS = BEGIN <> <> <> Node: TYPE = REF; Offset: TYPE = INT; -- just to compile until integration with TiogaNode -- Stuff to go into TiogaNode FlexOrder: TYPE = [0..3]; KerfIndex: TYPE = [0..LAST[CARDINAL]/SIZE[Kerf]-7]; Penalty: TYPE = INTEGER; Glue: TYPE = RECORD [ size: Scaled.Value, stretch: Scaled.Value, stretchOrder: FlexOrder, shrink: Scaled.Value, shrinkOrder: FlexOrder ]; ComposingStick: TYPE = REF ComposingStickRec; ComposingStickRec: TYPE = RECORD [ elements: ElementSeq, kerfs: KerfSeq, results: BreakSeq ]; ElementSeq: TYPE = REF ElementSeqRec; ElementSeqRec: TYPE = RECORD [ length: NAT, seq: SEQUENCE maxLength: NAT OF Element ]; OfElement: TYPE = {box, glue, tab, kerf}; Element: TYPE = RECORD [ SELECT kind: OfElement FROM box => [size: Scaled.Value], glue => [ stretchOrder, shrinkOrder: FlexOrder, size, stretch, shrink: Scaled.Value ], tab => [distanceFromStartOfLine: Scaled.Value], kerf => [kerfIndex: KerfIndex, offset: Offset], ENDCASE ]; KerfSeq: TYPE = REF KerfSeqRec; KerfSeqRec: TYPE = RECORD [ length: KerfIndex, seq: SEQUENCE maxLength: KerfIndex OF Kerf ]; Kerf: TYPE = RECORD [ join, prebreak, postbreak: Glue, penalty: Penalty, node: Node ]; BreakSeq: TYPE = REF BreakRec; BreakRec: TYPE = RECORD [ length: NAT, seq: SEQUENCE maxLength: NAT OF Break ]; Break: TYPE = RECORD [ node: Node, offset: Offset, glueSet: Scaled.Value ]; -- Stuff to stay in TiogaLineBreak: ObtainScratch: PROCEDURE RETURNS [ComposingStick]; ReleaseScratch: PROCEDURE [composingStick: ComposingStick]; Reset: PROCEDURE [composingStick: ComposingStick]; <> AppendBox: PROCEDURE [composingStick: ComposingStick, size: Scaled.Value]; AppendGlue: PROCEDURE [ composingStick: ComposingStick, glue: Glue ]; MakeKerf: PROCEDURE [ composingStick: ComposingStick, join, prebreak, postbreak: Glue, penalty: Penalty, node: Node ] RETURNS [KerfIndex]; AppendKerf: PROCEDURE [ composingStick: ComposingStick, kerfIndex: KerfIndex, clientIndex: INT ]; ChooseBreaks: PROCEDURE [composingStick: ComposingStick, measure: Scaled.Value _ Scaled.zero, measureProc: MeasureProc _ NIL, measureClientData: REF _ NIL]; MeasureProc: TYPE = PROCEDURE [measureClientData: REF, lineNumber: INT] RETURNS [measure: Scaled.Value]; <> END.