X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Fsyntax.c;h=4fdc4be1a6e911c8f9587f0017a6f6e4d1cbc453;hp=16a09024a521431092a46fefba10a3eae1a50d66;hb=1c97bf160520f9e0b193236a902eb4b73d59d134;hpb=a71e0987b7080176e0046b0b0ed72a9a70e2571d diff --git a/src/syntax.c b/src/syntax.c index 16a0902..4fdc4be 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -327,7 +327,7 @@ syntax table. } - +#ifdef MULE /* Return 1 if there is a word boundary between two word-constituent characters C1 and C2 if they appear in this order, else return 0. There is no word boundary between two word-constituent ASCII @@ -337,6 +337,17 @@ syntax table. && word_boundary_p (c1, c2)) extern int word_boundary_p (Emchar c1, Emchar c2); +#else +static int +word_constituent_p (struct buffer *buf, Bufpos pos, + struct Lisp_Char_Table *tab) +{ + enum syntaxcode code = SYNTAX_UNSAFE (tab, BUF_FETCH_CHAR (buf, pos)); + return ((words_include_escapes && + (code == Sescape || code == Scharquote)) + || (code == Sword)); +} +#endif /* Return the position across COUNT words from FROM. If that many words cannot be found before the end of the buffer, return 0. @@ -347,8 +358,10 @@ scan_words (struct buffer *buf, Bufpos from, int count) { Bufpos limit = count > 0 ? BUF_ZV (buf) : BUF_BEGV (buf); struct Lisp_Char_Table *mirrortab = XCHAR_TABLE (buf->mirror_syntax_table); +#ifdef MULE Emchar ch0, ch1; enum syntaxcode code; +#endif while (count > 0) { @@ -358,28 +371,41 @@ scan_words (struct buffer *buf, Bufpos from, int count) { if (from == limit) return 0; +#ifdef MULE ch0 = BUF_FETCH_CHAR (buf, from); code = SYNTAX_UNSAFE (mirrortab, ch0); +#else + if (word_constituent_p (buf, from, mirrortab)) + break; +#endif from++; +#ifdef MULE if (words_include_escapes && (code == Sescape || code == Scharquote)) break; if (code == Sword) break; +#endif } QUIT; - while ( from != limit ) + while ((from != limit) +#ifndef MULE + && word_constituent_p (buf, from, mirrortab) +#endif + ) { +#ifdef MULE ch1 = BUF_FETCH_CHAR (buf, from); code = SYNTAX_UNSAFE (mirrortab, ch1); if (!(words_include_escapes && (code == Sescape || code == Scharquote))) if (code != Sword || WORD_BOUNDARY_P (ch0, ch1)) break; - from++; ch0 = ch1; +#endif + from++; } count--; } @@ -392,7 +418,12 @@ scan_words (struct buffer *buf, Bufpos from, int count) { if (from == limit) return 0; +#ifndef MULE + if (word_constituent_p (buf, from - 1, mirrortab)) + break; +#endif from--; +#ifdef MULE ch1 = BUF_FETCH_CHAR (buf, from - 1); code = SYNTAX_UNSAFE (mirrortab, ch1); if (words_include_escapes @@ -400,20 +431,27 @@ scan_words (struct buffer *buf, Bufpos from, int count) break; if (code == Sword) break; +#endif } QUIT; - while ( from != limit ) + while ((from != limit) +#ifndef MULE + && word_constituent_p (buf, from - 1, mirrortab) +#endif + ) { +#ifdef MULE ch0 = BUF_FETCH_CHAR (buf, from - 1); code = SYNTAX_UNSAFE (mirrortab, ch0); if (!(words_include_escapes && (code == Sescape || code == Scharquote))) if (code != Sword || WORD_BOUNDARY_P (ch0, ch1)) break; - from--; ch1 = ch0; +#endif + from--; } count++; }