DIRECTORY Graphics, Rope USING [Fetch], RopeEdit USING [Size], TiogaItemClass, TiogaNode, TiogaNodeOps, VFonts; TextNodeClassImpl: CEDAR PROGRAM IMPORTS Graphics, Rope, RopeEdit, TiogaNodeOps, VFonts = BEGIN TextLengthProc: TiogaItemClass.ItemLengthProc = BEGIN text: TiogaNode.RefTextNode = TiogaNodeOps.NarrowToTextNode[self]; RETURN[RopeEdit.Size[text.rope]]; END; TextNotifyProc: TiogaItemClass.ItemNotifyProc = BEGIN text: TiogaNode.RefTextNode = TiogaNodeOps.NarrowToTextNode[self]; ERROR; END; TextDestroyProc: TiogaItemClass.ItemDestroyProc = BEGIN text: TiogaNode.RefTextNode = TiogaNodeOps.NarrowToTextNode[self]; text.rope _ NIL; text.runs _ NIL; END; TextCopyProc: TiogaItemClass.ItemCopyProc = BEGIN text: TiogaNode.RefTextNode = TiogaNodeOps.NarrowToTextNode[self]; ERROR; END; TextFastFormatProc: TiogaItemClass.ItemFastFormatProc = BEGIN text: TiogaNode.RefTextNode = TiogaNodeOps.NarrowToTextNode[self]; c: CHAR; i: INT _ start; size: INT _ RopeEdit.Size[text.rope]; rightExtent _ 0; topExtent _ MIN[VFonts.FontAscent[], topBound]; bottomExtent _ MIN[VFonts.FontHeight[]-VFonts.FontAscent[], bottomBound]; Graphics.SetCP[context, 0, 0]; WHILE rightExtent