From dfe7ff3c3fbc2f9ed66171358fafa9abb9f2b23d Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 27 May 2024 15:51:50 -0400 Subject: xregex: Support non-capturing groups with -regextype emacs Link: https://savannah.gnu.org/bugs/index.php?65770 Link: https://github.com/kkos/oniguruma/issues/296 --- src/xregex.c | 8 +++++++- tests/gnu/regextype_emacs.sh | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/xregex.c b/src/xregex.c index 484f099..414c366 100644 --- a/src/xregex.c +++ b/src/xregex.c @@ -37,6 +37,8 @@ struct bfs_regex { static int bfs_onig_status; static OnigEncoding bfs_onig_enc; +static OnigSyntaxType bfs_onig_syntax_emacs; + /** pthread_once() callback. */ static void bfs_onig_once(void) { // Fall back to ASCII by default @@ -103,6 +105,10 @@ static void bfs_onig_once(void) { if (bfs_onig_status != ONIG_NORMAL) { bfs_onig_enc = NULL; } + + // https://github.com/kkos/oniguruma/issues/296 + onig_copy_syntax(&bfs_onig_syntax_emacs, ONIG_SYNTAX_EMACS); + bfs_onig_syntax_emacs.op2 |= ONIG_SYN_OP2_QMARK_GROUP_EFFECT; } /** Initialize Oniguruma. */ @@ -144,7 +150,7 @@ int bfs_regcomp(struct bfs_regex **preg, const char *pattern, enum bfs_regex_typ syntax = ONIG_SYNTAX_POSIX_EXTENDED; break; case BFS_REGEX_EMACS: - syntax = ONIG_SYNTAX_EMACS; + syntax = &bfs_onig_syntax_emacs; break; case BFS_REGEX_GREP: syntax = ONIG_SYNTAX_GREP; diff --git a/tests/gnu/regextype_emacs.sh b/tests/gnu/regextype_emacs.sh index 3cc388c..164d17a 100644 --- a/tests/gnu/regextype_emacs.sh +++ b/tests/gnu/regextype_emacs.sh @@ -1,3 +1,3 @@ invoke_bfs -regextype emacs -quit || skip -bfs_diff basic -regextype emacs -regex '.*/\(f+o?o?\|bar\)' +bfs_diff basic -regextype emacs -regex '.*/\(?:f+o?o?\|bar\)' -- cgit v1.2.3