`:'
apply the rule once only (default is recursive)
`@'
stop applying rules in case of match; the current rule is
still applied recursively; combine with `:' to apply the
current rule only once and then stop.
`#'
stop current operation if the rule matches, and issue an
`unwilling to perform' error.
`G{n}'
jump n
rules back and forth (watch for loops!). Note that
`G{1}' is implicit in every rule.
`I'
ignores errors in rule; this means, in case of error, e.g.
issued by a map, the error is treated as a missed match.
The `unwilling to perform' is not overridden.
`U{n}'
uses n
as return code if the rule matches; the flag does
not alter the recursive behavior of the rule, so, to have
it performed only once, it must be used in combination
with `:', e.g. `:U{16}'
returns the value `16' after
exactly one execution of the rule, if the pattern matches.
As a consequence, its behavior is equivalent to `@', with
the return code set to n
; or, in other words, `@' is
equivalent to `U{0}'. By convention, the freely available
codes are above 16 included; the others are reserved.
The ordering of the flags can be significant. For instance:
`IG{2}' means ignore errors and jump two lines ahead both in case
of match and in case of error, while `G{2}I' means ignore errors,
but jump two lines ahead only in case of match.
More flags (mainly Action Flags) will be added as needed.