<> <> <> DIRECTORY Rope USING [ROPE], TiogaLooks USING [Looks, Runs], TiogaNode, TiogaItemClass, TiogaBasicClass; TiogaNodeOps: CEDAR DEFINITIONS = BEGIN OPEN Rope, TiogaNode, TiogaItemClass, TiogaBasicClass; <> RegisterItemClass: PROC [classRec: ItemClassRec] RETURNS [ItemClassID]; <> LookupItemID: PROC [flavor: ItemFlavor] RETURNS [ItemClassID]; <> <<>> FetchItemClass: PROC [id: ItemClassID] RETURNS [ItemClass]; <> <> RegisterBasicClass: PROC [classRec: BasicClassRec] RETURNS [BasicClassID]; <> LookupBasicID: PROC [flavor: BasicFlavor] RETURNS [BasicClassID]; <> <<>> FetchBasicClass: PROC [id: BasicClassID] RETURNS [BasicClass]; <> <> NewBranchNode: PROC RETURNS [br: RefBranchNode]; NewTextNode: PROC [class: ItemClassID] RETURNS [tx: RefTextNode]; NewListNode: PROC [class: ItemClassID] RETURNS [ls: RefListNode]; NewBoxNode: PROC [class: ItemClassID] RETURNS [bx: RefBoxNode]; NewBasicNode: PROC [class: BasicClassID] RETURNS [bs: RefBasicNode]; <> FetchChar: PROC [text: RefTextNode, index: Offset] RETURNS [CHAR]; <> FetchLooks: PROC [text: RefTextNode, index: Offset] RETURNS [TiogaLooks.Looks]; <> <> Fetch: PROC [text: RefTextNode, index: Offset] RETURNS [CHAR, TiogaLooks.Looks]; <> GetRope, NodeRope: PROC [text: RefTextNode] RETURNS [ROPE]; GetRuns, NodeRuns: PROC [text: RefTextNode] RETURNS [TiogaLooks.Runs]; Size: PROC [text: RefTextNode] RETURNS [Offset]; <> FromRope: PROC [rope: ROPE] RETURNS [RefTextNode]; <> FromString: PROC [string: REF READONLY TEXT] RETURNS [RefTextNode]; <> <> <<>> DocFromNode: PROC [child: RefItemNode] RETURNS [root: RefBranchNode]; <> <> <<>> FreeTree: PROC [root: RefBranchNode]; <> IsBranch: PROC [n: Ref] RETURNS [BOOL] = INLINE {RETURN[n#NIL AND ISTYPE[n, RefBranchNode]]}; IsItem: PROC [n: Ref] RETURNS [BOOL] = INLINE {RETURN[n#NIL AND ISTYPE[n, RefItemNode]]}; IsText: PROC [n: Ref] RETURNS [BOOL] = INLINE {RETURN[n#NIL AND ISTYPE[n, RefTextNode]]}; IsList: PROC [n: Ref] RETURNS [BOOL] = INLINE {RETURN[n#NIL AND ISTYPE[n, RefListNode]]}; IsBox: PROC [n: Ref] RETURNS [BOOL] = INLINE {RETURN[n#NIL AND ISTYPE[n, RefBoxNode]]}; IsBasic: PROC [n: Ref] RETURNS [BOOL] = INLINE {RETURN[n#NIL AND ISTYPE[n, RefBasicNode]]}; <> <> NarrowToBranchNode: PROC [n: Ref] RETURNS [RefBranchNode] = INLINE {RETURN [WITH n SELECT FROM br: RefBranchNode => br, ENDCASE => NIL] }; NarrowToItemNode: PROC [n: Ref] RETURNS [RefItemNode] = INLINE {RETURN [WITH n SELECT FROM it: RefItemNode => it, ENDCASE => NIL] }; NarrowToTextNode: PROC [n: Ref] RETURNS [RefTextNode] = INLINE {RETURN [WITH n SELECT FROM tx: RefTextNode => tx, ENDCASE => NIL] }; NarrowToListNode: PROC [n: Ref] RETURNS [ls: RefListNode] = INLINE {RETURN [WITH n SELECT FROM ls: RefListNode => ls, ENDCASE => NIL] }; NarrowToBoxNode: PROC [n: Ref] RETURNS [RefBoxNode] = INLINE {RETURN [WITH n SELECT FROM bx: RefBoxNode => bx, ENDCASE => NIL] }; NarrowToBasicNode: PROC [n: Ref] RETURNS [RefBasicNode] = INLINE {RETURN [WITH n SELECT FROM bs: RefBasicNode => bs, ENDCASE => NIL] }; <> <<>> MakeNodeLoc: PROC [n: Ref] RETURNS [Location]; MakeNodeSpan: PROC [first, last: Ref] RETURNS [Span]; NodeSpan: PROC [span: Span] RETURNS [Span] = INLINE { RETURN [[[span.start.path,NodeItself],[span.end.path,NodeItself]]] }; NodeLoc: PROC [loc: Location] RETURNS [Location] = INLINE { RETURN [[loc.path,NodeItself]] }; EndPos: PROC [n: RefTextNode] RETURNS [Offset]; -- gives offset at end of text node END.