:: COND([LAST == "<"] : first : begin) (* Return value map: REJECT -> 0 text = 1 push_func = 2 call_func = 3 argument = 4 special_argument = 5 ellipsis = 6 raw_str = 7 *) (* A macro of the form COND(expr, then, else) will be interpreted in any case where any token is allowed Syntax: start state+ start: colon default-match-action state: state-name colon match-action+ default-match-action match-action: match colon action suffix* IF(cexpr) match colon action suffix* default-match-action default-match-action: colon action suffix* match: char LOOKAHEAD char char LOOKAHEAD char action: state-name ACCEPT(result) IGNORE ACCEPT(result) REJECT(error) TERMINATE suffix: EXEC(expr) *) begin: '#': arg '(': REJECT(blank_fname) '|': IGNORE ACCEPT(1) (*blank text is valid*) IF([parenDepth == 0]) ')': REJECT(extra_r) ')': ACCEPT(3) EXEC([--parenDepth]) '.': el1 '\\': escapetext IF([parenDepth == 0]) '>': TERMINATE '>': REJECT(extra_l) : text first: '(': REJECT(blank_fname) '|': REJECT(extra_p) ')': REJECT(extra_r) '<': REJECT(extra_a) '>': REJECT(early_close) '#': REJECT(overmarked_arg) '\\': REJECT(escape_nostr) '[0-9]': farg '.': el1 : fsparg text: '\\': escapetext '<': REJECT(extra_a) LOOKAHEAD ')': ACCEPT(1) IF([SOFAR == "raw"]) '(': IGNORE ACCEPT(raw_str) EXEC([++parenDepth]) '(': IGNORE ACCEPT(2) EXEC([++parenDepth]) '|': IGNORE ACCEPT(1) '#': text_nofun EXEC([epos=pos]) : text escapetext: : text text_nofun: '\\': escapetext_nofun '(': REJECT(invalid_fname) escapetext_nofun: : text_nofun arg: '<': REJECT(extra_a) '>': REJECT(extra_l) '(': REJECT(call_arg) '#': REJECT(extra_h) '\\': REJECT(escape_nostr) LOOKAHEAD ')': ACCEPT(4) '[0-9]': arg '|': IGNORE ACCEPT(4) : sp_arg sp_arg: '<': REJECT(extra_a) '>': REJECT(extra_l) '(': REJECT(call_arg) '#': REJECT(extra_h) '\\': REJECT(escape_nostr) LOOKAHEAD ')': ACCEPT(5) '|': IGNORE ACCEPT(5) : sp_arg farg: '[0-9]': farg '<': REJECT(extra_a) '>': IGNORE ACCEPT(4) '(': IGNORE ACCEPT(2) EXEC([++parenDepth]) '#': REJECT(extra_h_t) ')': REJECT(extra_r) '|': REJECT(extra_p) : fsparg fsparg: '<': REJECT(extra_a) '>': IGNORE ACCEPT(5) '(': IGNORE ACCEPT(2) EXEC([++parenDepth]) '#': REJECT(extra_h_t) ')': REJECT(extra_r) '|': REJECT(extra_p) : fsparg el1 '.': el2 '\\': escapetext '<': REJECT(extra_a) LOOKAHEAD ')': ACCEPT(1) : text el3 '.': ACCEPT(6) '\\': escapetext '<': REJECT(extra_a) LOOKAHEAD ')': ACCEPT(1) : text