diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2013-01-20 20:44:15 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2013-01-20 20:44:15 +0200 |
commit | cb565f17eb9f4ce96c6a78fec2951120fee75a35 (patch) | |
tree | 2724c73bcb7b468805e01892348cb22142787388 /re.c | |
parent | 2d1a7927d6d83e406597e12bca21311eb99343e4 (diff) | |
download | egawk-cb565f17eb9f4ce96c6a78fec2951120fee75a35.tar.gz egawk-cb565f17eb9f4ce96c6a78fec2951120fee75a35.tar.bz2 egawk-cb565f17eb9f4ce96c6a78fec2951120fee75a35.zip |
Fix bug with --traditional + --re-interval.
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 40 |
1 files changed, 39 insertions, 1 deletions
@@ -27,6 +27,7 @@ static reg_syntax_t syn; static void check_bracket_exp(char *s, size_t len); +const char *regexflags2str(int flags); /* make_regexp --- generate compiled regular expressions */ @@ -394,7 +395,7 @@ resetup() * variable remains for use with --traditional. */ if (do_intervals) - syn |= RE_INTERVALS | RE_INVALID_INTERVAL_ORD; + syn |= RE_INTERVALS | RE_INVALID_INTERVAL_ORD | RE_NO_BK_BRACES; (void) re_set_syntax(syn); dfasyntax(syn, FALSE, '\n'); @@ -609,3 +610,40 @@ again: done: s[length] = save; } + +/* regexflags2str --- make regex flags printable */ + +const char * +regexflags2str(int flags) +{ + static const struct flagtab regextab[] = { + { RE_BACKSLASH_ESCAPE_IN_LISTS, "RE_BACKSLASH_ESCAPE_IN_LISTS" }, + { RE_BK_PLUS_QM, "RE_BK_PLUS_QM" }, + { RE_CHAR_CLASSES, "RE_CHAR_CLASSES" }, + { RE_CONTEXT_INDEP_ANCHORS, "RE_CONTEXT_INDEP_ANCHORS" }, + { RE_CONTEXT_INDEP_OPS, "RE_CONTEXT_INDEP_OPS" }, + { RE_CONTEXT_INVALID_OPS, "RE_CONTEXT_INVALID_OPS" }, + { RE_DOT_NEWLINE, "RE_DOT_NEWLINE" }, + { RE_DOT_NOT_NULL, "RE_DOT_NOT_NULL" }, + { RE_HAT_LISTS_NOT_NEWLINE, "RE_HAT_LISTS_NOT_NEWLINE" }, + { RE_INTERVALS, "RE_INTERVALS" }, + { RE_LIMITED_OPS, "RE_LIMITED_OPS" }, + { RE_NEWLINE_ALT, "RE_NEWLINE_ALT" }, + { RE_NO_BK_BRACES, "RE_NO_BK_BRACES" }, + { RE_NO_BK_PARENS, "RE_NO_BK_PARENS" }, + { RE_NO_BK_REFS, "RE_NO_BK_REFS" }, + { RE_NO_BK_VBAR, "RE_NO_BK_VBAR" }, + { RE_NO_EMPTY_RANGES, "RE_NO_EMPTY_RANGES" }, + { RE_UNMATCHED_RIGHT_PAREN_ORD, "RE_UNMATCHED_RIGHT_PAREN_ORD" }, + { RE_NO_POSIX_BACKTRACKING, "RE_NO_POSIX_BACKTRACKING" }, + { RE_NO_GNU_OPS, "RE_NO_GNU_OPS" }, + { RE_DEBUG, "RE_DEBUG" }, + { RE_INVALID_INTERVAL_ORD, "RE_INVALID_INTERVAL_ORD" }, + { RE_ICASE, "RE_ICASE" }, + { RE_CARET_ANCHORS_HERE, "RE_CARET_ANCHORS_HERE" }, + { RE_CONTEXT_INVALID_DUP, "RE_CONTEXT_INVALID_DUP" }, + { 0, NULL } + }; + + return genflags2str(flags, regextab); +} |