[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r108546: * regex.c (at_begline_loc
From: |
Andreas Schwab |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r108546: * regex.c (at_begline_loc_p): Also recognize `(?N:' and correctly |
Date: |
Fri, 02 Nov 2012 02:25:33 -0000 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 108546
committer: Andreas Schwab <address@hidden>
branch nick: emacs
timestamp: Sun 2012-06-10 10:39:19 +0200
message:
* regex.c (at_begline_loc_p): Also recognize `(?N:' and correctly
account for preceding backslashes. (Bug#11663)
modified:
src/ChangeLog
src/regex.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2012-06-09 16:44:44 +0000
+++ b/src/ChangeLog 2012-06-10 08:39:19 +0000
@@ -1,3 +1,8 @@
+2012-06-10 Andreas Schwab <address@hidden>
+
+ * regex.c (at_begline_loc_p): Also recognize `(?N:' and correctly
+ account for preceding backslashes. (Bug#11663)
+
2012-06-09 Chong Yidong <address@hidden>
* term.c: Support italics in capable terminals (Bug#9652).
=== modified file 'src/regex.c'
--- a/src/regex.c 2012-05-21 15:36:54 +0000
+++ b/src/regex.c 2012-06-10 08:39:19 +0000
@@ -3824,18 +3824,37 @@
at_begline_loc_p (const re_char *pattern, const re_char *p, reg_syntax_t
syntax)
{
re_char *prev = p - 2;
- boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
-
- return
- /* After a subexpression? */
- (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
- /* After an alternative? */
- || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash))
- /* After a shy subexpression? */
- || ((syntax & RE_SHY_GROUPS) && prev - 2 >= pattern
- && prev[-1] == '?' && prev[-2] == '('
- && (syntax & RE_NO_BK_PARENS
- || (prev - 3 >= pattern && prev[-3] == '\\')));
+ boolean odd_backslashes;
+
+ /* After a subexpression? */
+ if (*prev == '(')
+ odd_backslashes = (syntax & RE_NO_BK_PARENS) == 0;
+
+ /* After an alternative? */
+ else if (*prev == '|')
+ odd_backslashes = (syntax & RE_NO_BK_VBAR) == 0;
+
+ /* After a shy subexpression? */
+ else if (*prev == ':' && (syntax & RE_SHY_GROUPS))
+ {
+ /* Skip over optional regnum. */
+ while (prev - 1 >= pattern && prev[-1] >= '0' && prev[-1] <= '9')
+ --prev;
+
+ if (!(prev - 2 >= pattern
+ && prev[-1] == '?' && prev[-2] == '('))
+ return false;
+ prev -= 2;
+ odd_backslashes = (syntax & RE_NO_BK_PARENS) == 0;
+ }
+ else
+ return false;
+
+ /* Count the number of preceding backslashes. */
+ p = prev;
+ while (prev - 1 >= pattern && prev[-1] == '\\')
+ --prev;
+ return (p - prev) & odd_backslashes;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/emacs-24 r108546: * regex.c (at_begline_loc_p): Also recognize `(?N:' and correctly,
Andreas Schwab <=