-- RopeFind.mesa
-- derived from EditorFind.Mesa of Laurel 6
-- written by Bill Paxton, May 1981
-- last edit by Bill Paxton, 3-Jun-81 12:34:33

-- This module provides a "Find" operation for ropes
	
DIRECTORY
Rope;

RopeFind: DEFINITIONS =
BEGIN OPEN r:Rope;

Rope: TYPE = r.Ref;
Int: TYPE = LONG INTEGER;
MaxLen: Int = LAST[Int];

MalformedPattern: ERROR;

Find: PROC [pattern, rope: Rope, start: Int ← 0, len: Int ← MaxLen]
	RETURNS [found: BOOLEAN, at, atEnd, patternEnd: Int] = INLINE {
	[found,at,atEnd,patternEnd] ← Try[Create[pattern],rope,start,len] };
-- Searches for a match to pattern within [start .. start+len) of rope.
-- If found, returns TRUE, with [at .. atEnd) the matched range,

Finder: TYPE = REF FinderRec;
FinderRec: TYPE;

Create: PROC [pattern: Rope] RETURNS [finder: Finder];

Try: PROC [finder: Finder, rope: Rope, start: Int ← 0, len: Int ← MaxLen]
	RETURNS [found: BOOLEAN, at, atEnd, patternEnd: Int];


-- ***** Initialization

StartRopeFind: PROC; -- for initialization only

END.