Mercurial > emacs
changeset 61682:0015a00ccb5a
(boyer_moore): Fix previous change.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Wed, 20 Apr 2005 07:21:47 +0000 |
parents | f571b77284ff |
children | 589380e2abb7 |
files | src/search.c |
diffstat | 1 files changed, 18 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/search.c Wed Apr 20 02:06:48 2005 +0000 +++ b/src/search.c Wed Apr 20 07:21:47 2005 +0000 @@ -1692,22 +1692,31 @@ i = infinity; if (! NILP (trt)) { - /* If the byte currently looking at is a head of a character - to check case-equivalents, set CH to that character. An - ASCII character and a non-ASCII character matching with - CHARSET_BASE are to be checked. */ + /* If the byte currently looking at is the last of a + character to check case-equivalents, set CH to that + character. An ASCII character and a non-ASCII character + matching with CHARSET_BASE are to be checked. */ int ch = -1; if (ASCII_BYTE_P (*ptr) || ! multibyte) ch = *ptr; - else if (charset_base && CHAR_HEAD_P (*ptr)) + else if (charset_base + && (pat_end - ptr) == 1 || CHAR_HEAD_P (ptr[1])) { - ch = STRING_CHAR (ptr, pat_end - ptr); + unsigned char *charstart = ptr - 1; + + while (! (CHAR_HEAD_P (*charstart))) + charstart--; + ch = STRING_CHAR (charstart, ptr - charstart + 1); if (charset_base != (ch & ~CHAR_FIELD3_MASK)) ch = -1; } - j = *ptr; + if (ch > 0400) + j = ((unsigned char) ch) | 0200; + else + j = *ptr; + if (i == infinity) stride_for_teases = BM_tab[j]; @@ -1717,12 +1726,8 @@ if (ch >= 0) { int starting_ch = ch; - int starting_j; - - if (ch > 0400) - starting_j = ((unsigned char) ch) | 0200; - else - starting_j = (unsigned char) ch; + int starting_j = j; + while (1) { TRANSLATE (ch, inverse_trt, ch);