repeat scan

control structure

Syntax
repeat scan string-expression
   (match pattern condition?
      local-declaration*
      action*)+
again


Purpose

Scans a string-expression for specified patterns in the same manner as the do scan action. When a match is found, the corresponding actions are performed. However, the string is then scanned again, from the first character to the right of the part matched by the previous iteration.

This process continues until one of the following conditions has been met:

  • The entire string-expression has been "consumed".
  • The unused portion fails to match any pattern (or satisfy its associated condition, if specified).
  • The repeat scan is explicitly terminated with an exit or halt (or with the return if the repeat scan is in a function).

Note that an else phrase may not be used in a repeat scan action. If an "if all else fails" (if no other case applies) case is required, a match any alternative can be used with exit at the end to terminate the loop.

In repeat scan, patterns that can match zero characters are given special treatment. Zero characters cannot be matched successfully twice in a row. OmniMark enforces this by interpreting a match of zero characters as successful only if the previous iteration matched one or more characters.