diff options
Diffstat (limited to 'src/fe-text/textbuffer.c')
-rw-r--r-- | src/fe-text/textbuffer.c | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/src/fe-text/textbuffer.c b/src/fe-text/textbuffer.c index 561fdabd..3668f4c7 100644 --- a/src/fe-text/textbuffer.c +++ b/src/fe-text/textbuffer.c @@ -27,7 +27,7 @@ #include "textbuffer.h" -#ifdef HAVE_REGEX_H +#ifndef USE_GREGEX # include <regex.h> #endif @@ -545,7 +545,9 @@ GList *textbuffer_find_text(TEXT_BUFFER_REC *buffer, LINE_REC *startline, int before, int after, int regexp, int fullword, int case_sensitive) { -#ifdef HAVE_REGEX_H +#ifdef USE_GREGEX + GRegex *preg; +#else regex_t preg; #endif LINE_REC *line, *pre_line; @@ -557,16 +559,23 @@ GList *textbuffer_find_text(TEXT_BUFFER_REC *buffer, LINE_REC *startline, g_return_val_if_fail(buffer != NULL, NULL); g_return_val_if_fail(text != NULL, NULL); +#ifdef USE_GREGEX + preg = NULL; + + if (regexp) { + preg = g_regex_new(text, G_REGEX_RAW | (case_sensitive ? 0 : G_REGEX_CASELESS), 0, NULL); + + if (preg == NULL) + return NULL; + } +#else if (regexp) { -#ifdef HAVE_REGEX_H int flags = REG_EXTENDED | REG_NOSUB | (case_sensitive ? 0 : REG_ICASE); if (regcomp(&preg, text, flags) != 0) return NULL; -#else - return NULL; -#endif } +#endif matches = NULL; match_after = 0; str = g_string_new(NULL); @@ -585,12 +594,15 @@ GList *textbuffer_find_text(TEXT_BUFFER_REC *buffer, LINE_REC *startline, if (*text != '\0') { textbuffer_line2text(line, FALSE, str); - if (line_matched) - line_matched = -#ifdef HAVE_REGEX_H - regexp ? regexec(&preg, str->str, 0, NULL, 0) == 0 : + if (line_matched) { + line_matched = regexp ? +#ifdef USE_GREGEX + g_regex_match(preg, str->str, 0, NULL) +#else + regexec(&preg, str->str, 0, NULL, 0) == 0 #endif - match_func(str->str, text) != NULL; + : match_func(str->str, text) != NULL; + } } if (line_matched) { @@ -618,7 +630,11 @@ GList *textbuffer_find_text(TEXT_BUFFER_REC *buffer, LINE_REC *startline, matches = g_list_append(matches, NULL); } } -#ifdef HAVE_REGEX_H + +#ifdef USE_GREGEX + if (preg != NULL) + g_regex_unref(preg); +#else if (regexp) regfree(&preg); #endif g_string_free(str, TRUE); |