<<>> <> <> <> <> <> DIRECTORY Rope USING [ROPE]; TextReplace: CEDAR DEFINITIONS = BEGIN <<>> ROPE: TYPE = Rope.ROPE; <<>> RopeMap: TYPE = REF RopeMapRep; RopeMapRep: TYPE = RECORD [ Map: PROC [REF ANY, ROPE] RETURNS [ROPE], data: REF ANY ¬ NIL ]; <<>> Apply: PROC [s: RopeMap, r: ROPE] RETURNS [mapped: ROPE]; <<= {mapped _ s.Map[s.data, r]};>> <<>> id: RopeMap; addBrackets: RopeMap; <<>> Constant: PROC [result: ROPE] RETURNS [rm: RopeMap]; <<>> Cat: PROC [first, second: RopeMap] RETURNS [catted: RopeMap]; <> <<>> Layer: PROC [first, later: RopeMap] RETURNS [layered: RopeMap]; <> <<>> Pair: TYPE = RECORD [match, replace: ROPE, literal, word, ignoreCase: BOOL ¬ FALSE]; PairList: TYPE = LIST OF Pair; <<>> RopeMapFromPairs: PROC [PairList] RETURNS [RopeMap]; <> <<>> END.