I didn't follow the conversation but: Why traverse the string again? You already traversed it by "--- ".. then you can leave out the mark: :mark clause.. also you should use [thru newline] to prevent another 'dumb' loop of the parser... rule: [ "===" copy header thru newline (append header " (FIRST LEVEL)" append full-contents header) | "---" copy header thru newline (append header " (SECOND LEVEL)" append full-contents header) | thru newline ] parse/all "..." [ some rule ] ... ...Daan > If anyone can think of a way to refine the following, I love >suggestions: > >rule: [ > mark: > "=== " :mark thru "=== " copy header to newline > (append header " (FIRST LEVEL)" > append full-contents header) | > "--- " :mark thru "--- " copy header to newline > (append header " (SECOND LEVEL)" > append full-contents header) | > thru newline >] > > It's worth noting my attempts to put 'thru" just after mark: and >before the target string resulted in errors with append's attempts >to insert header into full-contents... However, by "backing up" >to :mark once a set of character's was located and THEN going 'thru' >the set of characters I had originally sought allowed me to prevent >the sought after set of characters from being included in the copy >to header. This is the most graceful way I could figer out. If >anyone can think of a better way, I'm all eyes. > Cheerfulness, > > -----EAT > ...Daan <[EMAIL PROTECTED]>