X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsearch.c;h=d8cca5c0813ffdd50bc5277b38a5f3aa444b7e01;hb=112b4eb6a71cd613a534b4246b4cc024ed9bf22e;hp=169e1d71541eceb244e99ef740788fd47ed8b40b;hpb=b10ee70be2e0ce31599b05e9d58f83fc92141de0;p=chise%2Fxemacs-chise.git- diff --git a/src/search.c b/src/search.c index 169e1d7..d8cca5c 100644 --- a/src/search.c +++ b/src/search.c @@ -1,6 +1,7 @@ /* String search routines for XEmacs. Copyright (C) 1985, 1986, 1987, 1992-1995 Free Software Foundation, Inc. Copyright (C) 1995 Sun Microsystems, Inc. + Copyright (C) 1999,2000,2001 MORIOKA Tomohiko This file is part of XEmacs. @@ -312,8 +313,8 @@ looking_at_1 (Lisp_Object string, struct buffer *buf, int posix) s1 = p2 - p1; s2 = BI_BUF_ZV (buf) - p2; + regex_match_object = Qnil; regex_emacs_buffer = buf; - regex_emacs_buffer_p = 1; i = re_match_2 (bufp, (char *) BI_BUF_BYTE_ADDRESS (buf, p1), s1, (char *) BI_BUF_BYTE_ADDRESS (buf, p2), s2, BI_BUF_PT (buf) - BI_BUF_BEGV (buf), &search_regs, @@ -403,8 +404,8 @@ string_match_1 (Lisp_Object regexp, Lisp_Object string, Lisp_Object start, QUIT; { Bytecount bis = charcount_to_bytecount (XSTRING_DATA (string), s); + regex_match_object = string; regex_emacs_buffer = buf; - regex_emacs_buffer_p = 0; val = re_search (bufp, (char *) XSTRING_DATA (string), XSTRING_LENGTH (string), bis, XSTRING_LENGTH (string) - bis, @@ -495,8 +496,8 @@ fast_string_match (Lisp_Object regexp, const Bufbyte *nonreloc, } /* #### evil current-buffer dependency */ + regex_match_object = reloc; regex_emacs_buffer = current_buffer; - regex_emacs_buffer_p = 0; val = re_search (bufp, (char *) newnonreloc + offset, length, 0, length, 0); @@ -784,7 +785,13 @@ skip_chars (struct buffer *buf, int forwardp, int syntaxp, unsigned char fastmap[0400]; int negate = 0; REGISTER int i; +#ifndef emacs +#ifdef UTF2000 + Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->syntax_table); +#else Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->mirror_syntax_table); +#endif +#endif Bufpos limit; if (NILP (lim)) @@ -880,6 +887,7 @@ skip_chars (struct buffer *buf, int forwardp, int syntaxp, if (syntaxp) { + SETUP_SYNTAX_CACHE_FOR_BUFFER (buf, BUF_PT (buf), forwardp ? 1 : -1); /* All syntax designators are normal chars so nothing strange to worry about */ if (forwardp) @@ -887,20 +895,26 @@ skip_chars (struct buffer *buf, int forwardp, int syntaxp, while (BUF_PT (buf) < limit && fastmap[(unsigned char) syntax_code_spec - [(int) SYNTAX (syntax_table, - BUF_FETCH_CHAR - (buf, BUF_PT (buf)))]]) - BUF_SET_PT (buf, BUF_PT (buf) + 1); + [(int) SYNTAX_FROM_CACHE (syntax_table, + BUF_FETCH_CHAR + (buf, BUF_PT (buf)))]]) + { + BUF_SET_PT (buf, BUF_PT (buf) + 1); + UPDATE_SYNTAX_CACHE_FORWARD (BUF_PT (buf)); + } } else { while (BUF_PT (buf) > limit && fastmap[(unsigned char) syntax_code_spec - [(int) SYNTAX (syntax_table, - BUF_FETCH_CHAR - (buf, BUF_PT (buf) - 1))]]) - BUF_SET_PT (buf, BUF_PT (buf) - 1); + [(int) SYNTAX_FROM_CACHE (syntax_table, + BUF_FETCH_CHAR + (buf, BUF_PT (buf) - 1))]]) + { + BUF_SET_PT (buf, BUF_PT (buf) - 1); + UPDATE_SYNTAX_CACHE_BACKWARD (BUF_PT (buf) - 1); + } } } else @@ -1160,13 +1174,13 @@ search_buffer (struct buffer *buf, Lisp_Object string, Bufpos bufpos, p2 = BI_BUF_CEILING_OF (buf, p1); s1 = p2 - p1; s2 = BI_BUF_ZV (buf) - p2; + regex_match_object = Qnil; while (n < 0) { Bytecount val; QUIT; regex_emacs_buffer = buf; - regex_emacs_buffer_p = 1; val = re_search_2 (bufp, (char *) BI_BUF_BYTE_ADDRESS (buf, p1), s1, (char *) BI_BUF_BYTE_ADDRESS (buf, p2), s2, @@ -1205,7 +1219,6 @@ search_buffer (struct buffer *buf, Lisp_Object string, Bufpos bufpos, Bytecount val; QUIT; regex_emacs_buffer = buf; - regex_emacs_buffer_p = 1; val = re_search_2 (bufp, (char *) BI_BUF_BYTE_ADDRESS (buf, p1), s1, (char *) BI_BUF_BYTE_ADDRESS (buf, p2), s2, @@ -1277,7 +1290,11 @@ search_buffer (struct buffer *buf, Lisp_Object string, Bufpos bufpos, { /* Keep track of which character set row contains the characters that need translation. */ +#ifdef UTF2000 + int charset_base_code = c >> 6; +#else int charset_base_code = c & ~CHAR_FIELD3_MASK; +#endif if (charset_base == -1) charset_base = charset_base_code; else if (charset_base != charset_base_code) @@ -1576,7 +1593,11 @@ boyer_moore (struct buffer *buf, Bufbyte *base_pat, Bytecount len, while (!BUFBYTE_FIRST_BYTE_P (*charstart)) charstart--; untranslated = charptr_emchar (charstart); +#ifdef UTF2000 + if (charset_base == (untranslated >> 6)) +#else if (charset_base == (untranslated & ~CHAR_FIELD3_MASK)) +#endif { ch = TRANSLATE (trt, untranslated); if (!BUFBYTE_FIRST_BYTE_P (*ptr)) @@ -1926,7 +1947,11 @@ wordify (Lisp_Object buffer, Lisp_Object string) Charcount i, len; EMACS_INT punct_count = 0, word_count = 0; struct buffer *buf = decode_buffer (buffer, 0); +#ifdef UTF2000 + Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->syntax_table); +#else Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->mirror_syntax_table); +#endif CHECK_STRING (string); len = XSTRING_CHAR_LENGTH (string); @@ -2282,7 +2307,11 @@ and you do not need to specify it. buf = XBUFFER (buffer); } +#ifdef UTF2000 + syntax_table = XCHAR_TABLE (buf->syntax_table); +#else syntax_table = XCHAR_TABLE (buf->mirror_syntax_table); +#endif case_action = nochange; /* We tried an initialization */ /* but some C compilers blew it */