diff options
author | Steve Bennett <steveb@workware.net.au> | 2024-09-21 08:33:42 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2025-03-13 10:26:16 +1000 |
commit | 70846641e4fc5494df1f4d10d93d73a31276b0f6 (patch) | |
tree | d5e18479a400d7d9f634ee525b20b80caf2f588b /jimregexp.c | |
parent | 6ebd6620fb9807932b81d696c2594c3f5a875990 (diff) | |
download | jimtcl-70846641e4fc5494df1f4d10d93d73a31276b0f6.zip jimtcl-70846641e4fc5494df1f4d10d93d73a31276b0f6.tar.gz jimtcl-70846641e4fc5494df1f4d10d93d73a31276b0f6.tar.bz2 |
regexp, regsub: add support for -expanded
Fixes #311
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jimregexp.c')
-rw-r--r-- | jimregexp.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/jimregexp.c b/jimregexp.c index 136b0c0..38db210 100644 --- a/jimregexp.c +++ b/jimregexp.c @@ -948,6 +948,27 @@ cc_switch: ret = regnode(preg, EXACTLY); + if (preg->cflags & REG_EXPANDED) { + /* Skip leading white space */ + while ((ch = *preg->regparse) != 0) { + if (strchr(" \t\r\n\f\v", ch)) { + preg->regparse++; + continue; + } + break; + } + if (ch == '#') { + /* And skip comments to end of line */ + preg->regparse++; + while ((ch = *preg->regparse) != 0) { + preg->regparse++; + if (ch == '\n') { + break; + } + } + } + } + /* Note that a META operator such as ? or * consumes the * preceding char. * Thus we must be careful to look ahead by 2 and add the @@ -993,6 +1014,12 @@ cc_switch: break; } + /* For REG_EXPANDED, if we hit white space, stop */ + if ((preg->cflags & REG_EXPANDED) && n == 1 && strchr(" \t\r\n\f\v", ch)) { + preg->regparse += n; + break; + } + /* No, so just add this char normally */ regc(preg, ch); added++; |