X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/991a760232de757d71d8dbbed47ee12d81e29d53..9ec0b715e262f45bb434f2c068a86de2c42528e3:/src/syntax.c diff --git a/src/syntax.c b/src/syntax.c index 6514062303..8c5ebb96f2 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -1,14 +1,14 @@ /* GNU Emacs routines to deal with syntax tables; also word and list parsing. Copyright (C) 1985, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2001, - 2002, 2003, 2004, 2005, 2006, 2007 + 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,9 +16,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ #include @@ -1299,20 +1297,20 @@ scan_words (from, count) script = CHAR_TABLE_REF (Vchar_script_table, ch1); while (1) { - int temp_byte; - if (from == beg) break; - temp_byte = dec_bytepos (from_byte); + DEC_BOTH (from, from_byte); UPDATE_SYNTAX_TABLE_BACKWARD (from); - ch0 = FETCH_CHAR_AS_MULTIBYTE (temp_byte); + ch0 = FETCH_CHAR_AS_MULTIBYTE (from_byte); code = SYNTAX (ch0); if ((code != Sword && (! words_include_escapes || (code != Sescape && code != Scharquote))) || ! EQ (CHAR_TABLE_REF (Vchar_script_table, ch0), script)) - break; - DEC_BOTH (from, from_byte); + { + INC_BOTH (from, from_byte); + break; + } ch1 = ch0; } } @@ -1324,7 +1322,7 @@ scan_words (from, count) return from; } -DEFUN ("forward-word", Fforward_word, Sforward_word, 0, 1, "p", +DEFUN ("forward-word", Fforward_word, Sforward_word, 0, 1, "^p", doc: /* Move point forward ARG words (backward if ARG is negative). Normally returns t. If an edge of the buffer or a field boundary is reached, point is left there @@ -2031,13 +2029,13 @@ skip_syntaxes (forwardp, string, lim) p = GPT_ADDR; stop = endp; } + UPDATE_SYNTAX_TABLE_BACKWARD (pos - 1); prev_p = p; while (--p >= stop && ! CHAR_HEAD_P (*p)); c = STRING_CHAR (p, MAX_MULTIBYTE_LENGTH); if (! fastmap[(int) SYNTAX (c)]) break; pos--, pos_byte -= prev_p - p; - UPDATE_SYNTAX_TABLE_BACKWARD (pos); } } else @@ -2051,10 +2049,10 @@ skip_syntaxes (forwardp, string, lim) p = GPT_ADDR; stop = endp; } + UPDATE_SYNTAX_TABLE_BACKWARD (pos - 1); if (! fastmap[(int) SYNTAX (p[-1])]) break; p--, pos--, pos_byte--; - UPDATE_SYNTAX_TABLE_BACKWARD (pos - 1); } } } @@ -2501,7 +2499,8 @@ scan_lists (from, count, depth, sexpflag) { case Sescape: case Scharquote: - if (from == stop) goto lose; + if (from == stop) + goto lose; INC_BOTH (from, from_byte); /* treat following character as a word constituent */ case Sword: @@ -2520,7 +2519,8 @@ scan_lists (from, count, depth, sexpflag) case Scharquote: case Sescape: INC_BOTH (from, from_byte); - if (from == stop) goto lose; + if (from == stop) + goto lose; break; case Sword: case Ssymbol: @@ -2586,7 +2586,8 @@ scan_lists (from, count, depth, sexpflag) stringterm = FETCH_CHAR_AS_MULTIBYTE (temp_pos); while (1) { - if (from >= stop) goto lose; + if (from >= stop) + goto lose; UPDATE_SYNTAX_TABLE_FORWARD (from); c = FETCH_CHAR_AS_MULTIBYTE (from_byte); if (code == Sstring @@ -2615,7 +2616,8 @@ scan_lists (from, count, depth, sexpflag) } /* Reached end of buffer. Error if within object, return nil if between */ - if (depth) goto lose; + if (depth) + goto lose; immediate_quit = 0; return Qnil; @@ -2750,7 +2752,8 @@ scan_lists (from, count, depth, sexpflag) case Sstring_fence: while (1) { - if (from == stop) goto lose; + if (from == stop) + goto lose; DEC_BOTH (from, from_byte); UPDATE_SYNTAX_TABLE_BACKWARD (from); if (!char_quoted (from, from_byte) @@ -2765,7 +2768,8 @@ scan_lists (from, count, depth, sexpflag) stringterm = FETCH_CHAR_AS_MULTIBYTE (from_byte); while (1) { - if (from == stop) goto lose; + if (from == stop) + goto lose; DEC_BOTH (from, from_byte); UPDATE_SYNTAX_TABLE_BACKWARD (from); if (!char_quoted (from, from_byte) @@ -2783,7 +2787,8 @@ scan_lists (from, count, depth, sexpflag) } /* Reached start of buffer. Error if within object, return nil if between */ - if (depth) goto lose; + if (depth) + goto lose; immediate_quit = 0; return Qnil;