[gtksourceview] pcre2: match gregex flags more closely



commit 48934c02a772c6128050b6d72ee7176685fd8eac
Author: Christian Hergert <chergert redhat com>
Date:   Thu Oct 1 15:38:47 2020 -0700

    pcre2: match gregex flags more closely
    
    This makes various flags closer to what gregex would do internally when
    using PCRE.

 gtksourceview/implregex.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
---
diff --git a/gtksourceview/implregex.c b/gtksourceview/implregex.c
index dbe04a69..04f5389b 100644
--- a/gtksourceview/implregex.c
+++ b/gtksourceview/implregex.c
@@ -76,7 +76,9 @@ translate_compile_flags (GRegexCompileFlags flags)
                ret |= PCRE2_DUPNAMES;
 
        ret |= PCRE2_UCP;
-       ret |= PCRE2_BSR_UNICODE;
+
+       if (~flags & G_REGEX_BSR_ANYCRLF)
+               ret |= PCRE2_BSR_UNICODE;
 
        return ret;
 }
@@ -153,7 +155,7 @@ impl_regex_new (const char          *pattern,
        else if (compile_options & G_REGEX_NEWLINE_ANYCRLF)
                pcre2_set_newline (context, PCRE2_NEWLINE_ANYCRLF);
        else
-               pcre2_set_newline (context, PCRE2_NEWLINE_LF);
+               pcre2_set_newline (context, PCRE2_NEWLINE_ANY);
 
        regex->code = pcre2_compile ((PCRE2_SPTR)pattern,
                                     PCRE2_ZERO_TERMINATED,
@@ -543,11 +545,16 @@ again:
        }
        else
        {
+               gsize match_flags = match_info->regex->match_flags;
+
+               if (match_info->regex->compile_flags & PCRE2_UTF)
+                       match_flags |= PCRE2_NO_UTF_CHECK;
+
                rc = pcre2_match (match_info->regex->code,
                                  (PCRE2_SPTR)match_info->string,
                                  match_info->string_len,
                                  match_info->start_pos,
-                                 match_info->match_flags,
+                                 match_flags,
                                  match_info->match_data,
                                  NULL);
        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]