[vte] regex: Simplify no-match region calculation
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte] regex: Simplify no-match region calculation
- Date: Wed, 7 Oct 2015 20:15:56 +0000 (UTC)
commit 9a774ea964769466c8db6476b9b34dcb67c67245
Author: Christian Persch <chpe gnome org>
Date: Wed Oct 7 22:15:05 2015 +0200
regex: Simplify no-match region calculation
It is only necessary to updated start/end_blank once per regex.
Note that with or without the patch, the no-match region sometimes is wrong.
src/vte.cc | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
---
diff --git a/src/vte.cc b/src/vte.cc
index dc65932..66d33d8 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -1654,6 +1654,7 @@ vte_terminal_match_check_internal_pcre(VteTerminal *terminal,
PCRE2_SPTR8, PCRE2_SIZE, PCRE2_SIZE, uint32_t,
pcre2_match_data_8 *, pcre2_match_context_8 *);
int r = 0;
+ gssize sblank = G_MINSSIZE, eblank = G_MAXSSIZE;
regex = &g_array_index(terminal->pvt->match_regexes,
struct vte_match_regex,
@@ -1685,7 +1686,6 @@ vte_terminal_match_check_internal_pcre(VteTerminal *terminal,
match_context)) >= 0 || r == PCRE2_ERROR_PARTIAL)) {
gsize ko = offset;
gsize rm_so, rm_eo;
- gssize sblank=G_MINSSIZE, eblank=G_MAXSSIZE;
ovector = pcre2_get_ovector_pointer_8(match_data);
rm_so = ovector[0];
@@ -1754,17 +1754,18 @@ vte_terminal_match_check_internal_pcre(VteTerminal *terminal,
if (ko < rm_so && rm_so < eblank) {
eblank = rm_so;
}
-
- if (sblank > start_blank) {
- start_blank = sblank;
- }
- if (eblank < end_blank) {
- end_blank = eblank;
- }
}
if (G_UNLIKELY(r < PCRE2_ERROR_PARTIAL))
_vte_debug_print(VTE_DEBUG_REGEX, "Unexpected pcre2_match error code: %d\n", r);
+
+ if (sblank > start_blank) {
+ start_blank = sblank;
+ }
+ if (eblank < end_blank) {
+ end_blank = eblank;
+ }
+
}
pcre2_match_data_free_8(match_data);
@@ -1826,6 +1827,8 @@ vte_terminal_match_check_internal_gregex(VteTerminal *terminal,
/* Now iterate over each regex we need to match against. */
for (i = 0; i < terminal->pvt->match_regexes->len; i++) {
+ gint sblank = G_MININT, eblank = G_MAXINT;
+
regex = &g_array_index(terminal->pvt->match_regexes,
struct vte_match_regex,
i);
@@ -1850,7 +1853,6 @@ vte_terminal_match_check_internal_gregex(VteTerminal *terminal,
while (g_match_info_matches(match_info)) {
gint ko = offset;
- gint sblank=G_MININT, eblank=G_MAXINT;
gint rm_so, rm_eo;
if (g_match_info_fetch_pos (match_info, 0, &rm_so, &rm_eo)) {
@@ -1901,19 +1903,19 @@ vte_terminal_match_check_internal_gregex(VteTerminal *terminal,
if (ko < rm_so && rm_so < eblank) {
eblank = rm_so;
}
-
- if (sblank > start_blank) {
- start_blank = sblank;
- }
- if (eblank < end_blank) {
- end_blank = eblank;
- }
}
g_match_info_next(match_info, NULL);
}
g_match_info_free(match_info);
+
+ if (sblank > start_blank) {
+ start_blank = sblank;
+ }
+ if (eblank < end_blank) {
+ end_blank = eblank;
+ }
}
/* Record smallest span where none of the dingus match */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]