-- TiogaDocumentRopeImpl.Mesa
-- written by Bill Paxton. March 31, 1983
-- last written by Paxton. July 18, 1983 2:36 pm
DIRECTORY
Rope,
TiogaNode,
TiogaNodeOps,
TiogaPathOps,
TiogaDocumentRope;
TiogaDocumentRopeImpl:
CEDAR
PROGRAM
IMPORTS TiogaNodeOps, TiogaPathOps, Rope
EXPORTS TiogaDocumentRope
SHARES Rope = BEGIN
ObjectRope: TYPE = object node Rope.RopeRep;
Create:
PUBLIC PROC [doc: TiogaNode.Ref]
RETURNS [r: Rope.
ROPE] = {
docSize: INT = TiogaPathOps.LocOffset[[[doc,NIL],0], TiogaPathOps.LastLocWithin[[doc,NIL]]];
RETURN [NEW[ObjectRope ← [node[object[docSize,doc,Fetch,NIL,NIL]]]]] };
Fetch:
PROC [data:
REF, index:
INT]
RETURNS [
CHAR] = {
doc: TiogaNode.Ref ← NARROW[data];
loc: TiogaNode.Location = TiogaPathOps.LocRelative[[[doc,NIL],0], index];
n: TiogaNode.RefTextNode = TiogaNodeOps.NarrowToTextNode[loc.path.node];
IF n=NIL OR loc.where >= Rope.Size[n.rope] THEN RETURN ['\n];
RETURN [Rope.Fetch[n.rope, loc.where]] };
END.