<<>> <> <> <> <> <> <> <> <> <<>> DIRECTORY Rope USING [Concat, Fetch, FromChar, ROPE, Size], Rosary USING [Fetch, Size], TextEdit USING [LooksFromItem], TextLooks USING [Look, Looks, noLooks, Runs]; TextLooksImpl: CEDAR PROGRAM IMPORTS Rope, Rosary, TextEdit EXPORTS TextLooks = BEGIN OPEN TextLooks; <> LooksToRope: PUBLIC PROC [looks: Looks] RETURNS [rope: Rope.ROPE] = { FOR lk: Look IN Look DO IF looks[lk] THEN rope ¬ Rope.Concat[rope, Rope.FromChar[lk]]; ENDLOOP; }; RopeToLooks: PUBLIC PROC [rope: Rope.ROPE] RETURNS [looks: Looks] = { looks ¬ noLooks; FOR i: INT IN [0..Rope.Size[rope]) DO char: CHAR ¬ Rope.Fetch[rope, i]; IF char IN Look THEN looks[char] ¬ TRUE; ENDLOOP; }; <> Size: PUBLIC PROC [base: Runs] RETURNS [size: INT] = { RETURN[Rosary.Size[base]]; }; <<>> FetchLooks: PUBLIC PROC [runs: Runs, index: INT] RETURNS [Looks] = { IF runs=NIL THEN RETURN [noLooks]; RETURN[TextEdit.LooksFromItem[Rosary.Fetch[runs, index]]]; }; <<>> END.