annotate src/syntax.c @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents 3e20f4e3dbaa
children cef07afc1e9e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* GNU Emacs routines to deal with syntax tables; also word and list parsing.
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 1998
diff changeset
2 Copyright (C) 1985, 1987, 1993 Free Software Foundation, Inc.
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
726
5f08efa38dd0 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 624
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 any later version.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 #include "config.h"
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 #include <ctype.h>
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 #include "lisp.h"
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 #include "commands.h"
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 #include "buffer.h"
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 #include "syntax.h"
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 Lisp_Object Qsyntax_table_p;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29
3720
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
30 static void scan_sexps_forward ();
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
31 static int char_quoted ();
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
32
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 int words_include_escapes;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
35 /* This is the internal form of the parse state used in parse-partial-sexp. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
36
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
37 struct lisp_parse_state
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
38 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
39 int depth; /* Depth at end of parsing */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
40 int instring; /* -1 if not within string, else desired terminator. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
41 int incomment; /* Nonzero if within a comment at end of parsing */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
42 int comstyle; /* comment style a=0, or b=1 */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
43 int quoted; /* Nonzero if just after an escape char at end of parsing */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
44 int thislevelstart; /* Char number of most recent start-of-expression at current level */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
45 int prevlevelstart; /* Char number of start of containing expression */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
46 int location; /* Char number at which parsing stopped. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
47 int mindepth; /* Minimum depth seen while scanning. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
48 int comstart; /* Position just after last comment starter. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
49 };
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
50
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
51 /* These variables are a cache for finding the start of a defun.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
52 find_start_pos is the place for which the defun start was found.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
53 find_start_value is the defun start position found for it.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
54 find_start_buffer is the buffer it was found in.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
55 find_start_begv is the BEGV value when it was found.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
56 find_start_modiff is the value of MODIFF when it was found. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
57
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
58 static int find_start_pos;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
59 static int find_start_value;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
60 static struct buffer *find_start_buffer;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
61 static int find_start_begv;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
62 static int find_start_modiff;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
63
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
64 /* Find a defun-start that is the last one before POS (or nearly the last).
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
65 We record what we find, so that another call in the same area
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
66 can return the same value right away. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
67
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
68 static int
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
69 find_defun_start (pos)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
70 int pos;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
71 {
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
72 int tem;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
73 int shortage;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
74
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
75 /* Use previous finding, if it's valid and applies to this inquiry. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
76 if (current_buffer == find_start_buffer
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
77 /* Reuse the defun-start even if POS is a little farther on.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
78 POS might be in the next defun, but that's ok.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
79 Our value may not be the best possible, but will still be usable. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
80 && pos <= find_start_pos + 1000
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
81 && pos >= find_start_value
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
82 && BEGV == find_start_begv
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
83 && MODIFF == find_start_modiff)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
84 return find_start_value;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
85
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
86 /* Back up to start of line. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
87 tem = scan_buffer ('\n', pos, -1, &shortage);
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
88
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
89 while (tem > BEGV)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
90 {
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
91 /* Open-paren at start of line means we found our defun-start. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
92 if (SYNTAX (FETCH_CHAR (tem)) == Sopen)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
93 break;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
94 /* Move to beg of previous line. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
95 tem = scan_buffer ('\n', tem, -2, &shortage);
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
96 }
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
97
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
98 /* Record what we found, for the next try. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
99 find_start_value = tem;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
100 find_start_buffer = current_buffer;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
101 find_start_modiff = MODIFF;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
102 find_start_begv = BEGV;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
103 find_start_pos = pos;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
104
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
105 return find_start_value;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
106 }
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
107
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 DEFUN ("syntax-table-p", Fsyntax_table_p, Ssyntax_table_p, 1, 1, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 "Return t if ARG is a syntax table.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 Any vector of 256 elements will do.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (obj)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 Lisp_Object obj;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 if (XTYPE (obj) == Lisp_Vector && XVECTOR (obj)->size == 0400)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 return Qt;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 Lisp_Object
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 check_syntax_table (obj)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 Lisp_Object obj;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 register Lisp_Object tem;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 while (tem = Fsyntax_table_p (obj),
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
125 NILP (tem))
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
126 obj = wrong_type_argument (Qsyntax_table_p, obj);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 return obj;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 DEFUN ("syntax-table", Fsyntax_table, Ssyntax_table, 0, 0, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 "Return the current syntax table.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 This is the one specified by the current buffer.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ()
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 return current_buffer->syntax_table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 DEFUN ("standard-syntax-table", Fstandard_syntax_table,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 Sstandard_syntax_table, 0, 0, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 "Return the standard syntax table.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 This is the one used for new buffers.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ()
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 return Vstandard_syntax_table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 DEFUN ("copy-syntax-table", Fcopy_syntax_table, Scopy_syntax_table, 0, 1, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 "Construct a new syntax table and return it.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 It is a copy of the TABLE, which defaults to the standard syntax table.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (table)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 Lisp_Object table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 Lisp_Object size, val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 XFASTINT (size) = 0400;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 XFASTINT (val) = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 val = Fmake_vector (size, val);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
158 if (!NILP (table))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 table = check_syntax_table (table);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
160 else if (NILP (Vstandard_syntax_table))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 /* Can only be null during initialization */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 return val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 else table = Vstandard_syntax_table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 bcopy (XVECTOR (table)->contents,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 XVECTOR (val)->contents, 0400 * sizeof (Lisp_Object));
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 return val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 DEFUN ("set-syntax-table", Fset_syntax_table, Sset_syntax_table, 1, 1, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 "Select a new syntax table for the current buffer.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 One argument, a syntax table.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 (table)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 Lisp_Object table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 table = check_syntax_table (table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 current_buffer->syntax_table = table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 /* Indicate that this buffer now has a specified syntax table. */
3684
2be7629a9e17 (Fset_syntax_table): Add XFASTINT.
Richard M. Stallman <rms@gnu.org>
parents: 3609
diff changeset
179 current_buffer->local_var_flags
2be7629a9e17 (Fset_syntax_table): Add XFASTINT.
Richard M. Stallman <rms@gnu.org>
parents: 3609
diff changeset
180 |= XFASTINT (buffer_local_flags.syntax_table);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 return table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 /* Convert a letter which signifies a syntax code
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 into the code it signifies.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 This is used by modify-syntax-entry, and other things. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 unsigned char syntax_spec_code[0400] =
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 { 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 (char) Swhitespace, 0377, (char) Sstring, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (char) Smath, 0377, 0377, (char) Squote,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (char) Sopen, (char) Sclose, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 0377, (char) Swhitespace, (char) Spunct, (char) Scharquote,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (char) Scomment, 0377, (char) Sendcomment, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377, /* @, A, ... */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 0377, 0377, 0377, 0377, 0377, 0377, 0377, (char) Sword,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 0377, 0377, 0377, 0377, (char) Sescape, 0377, 0377, (char) Ssymbol,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377, /* `, a, ... */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 0377, 0377, 0377, 0377, 0377, 0377, 0377, (char) Sword,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 };
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 /* Indexed by syntax code, give the letter that describes it. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 char syntax_code_spec[13] =
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ' ', '.', 'w', '_', '(', ')', '\'', '\"', '$', '\\', '/', '<', '>'
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 };
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 DEFUN ("char-syntax", Fchar_syntax, Schar_syntax, 1, 1, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 "Return the syntax code of CHAR, described by a character.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 For example, if CHAR is a word constituent, the character `?w' is returned.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 The characters that correspond to various syntax codes\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 are listed in the documentation of `modify-syntax-entry'.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (ch)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 Lisp_Object ch;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 CHECK_NUMBER (ch, 0);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 return make_number (syntax_code_spec[(int) SYNTAX (0xFF & XINT (ch))]);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 /* This comment supplies the doc string for modify-syntax-entry,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 for make-docfile to see. We cannot put this in the real DEFUN
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 due to limits in the Unix cpp.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232
4141
373bff27d0d6 * syntax.c (Fmodify_syntax_entry): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 3794
diff changeset
233 DEFUN ("modify-syntax-entry", foo, bar, 2, 3, 0,
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 "Set syntax for character CHAR according to string S.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 The syntax is changed only for table TABLE, which defaults to\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 the current buffer's syntax table.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 The first character of S should be one of the following:\n\
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
238 Space or - whitespace syntax. w word constituent.\n\
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
239 _ symbol constituent. . punctuation.\n\
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
240 ( open-parenthesis. ) close-parenthesis.\n\
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
241 \" string quote. \\ escape.\n\
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
242 $ paired delimiter. ' expression quote or prefix operator.\n\
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
243 < comment starter. > comment ender.\n\
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
244 / character-quote.\n\
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 Only single-character comment start and end sequences are represented thus.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 Two-character sequences are represented as described below.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 The second character of S is the matching parenthesis,\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 used only if the first character is `(' or `)'.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 Any additional characters are flags.\n\
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
250 Defined flags are the characters 1, 2, 3, 4, b, and p.\n\
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 1 means C is the start of a two-char comment start sequence.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 2 means C is the second character of such a sequence.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 3 means C is the start of a two-char comment end sequence.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 4 means C is the second character of such a sequence.\n\
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
255 \n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
256 There can be up to two orthogonal comment sequences. This is to support\n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
257 language modes such as C++. By default, all comment sequences are of style\n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
258 a, but you can set the comment sequence style to b (on the second character of a\n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
259 comment-start, or the first character of a comment-end sequence) by using\n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
260 this flag:\n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
261 b means C is part of comment sequence b.\n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
262 \n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
263 p means C is a prefix character for `backward-prefix-chars';\n\
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
264 such characters are treated as whitespace when they occur\n\
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 between expressions.")
4141
373bff27d0d6 * syntax.c (Fmodify_syntax_entry): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 3794
diff changeset
266 (char, s, table)
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 DEFUN ("modify-syntax-entry", Fmodify_syntax_entry, Smodify_syntax_entry, 2, 3,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 /* I really don't know why this is interactive
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 help-form should at least be made useful whilst reading the second arg
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 "cSet syntax for character: \nsSet syntax for %s to: ",
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 0 /* See immediately above */)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (c, newentry, syntax_table)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 Lisp_Object c, newentry, syntax_table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 register unsigned char *p, match;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 register enum syntaxcode code;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 Lisp_Object val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 CHECK_NUMBER (c, 0);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 CHECK_STRING (newentry, 1);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
284 if (NILP (syntax_table))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 syntax_table = current_buffer->syntax_table;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 syntax_table = check_syntax_table (syntax_table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 p = XSTRING (newentry)->data;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 code = (enum syntaxcode) syntax_spec_code[*p++];
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 if (((int) code & 0377) == 0377)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 error ("invalid syntax description letter: %c", c);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 match = *p;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 if (match) p++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 if (match == ' ') match = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 XFASTINT (val) = (match << 8) + (int) code;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 while (*p)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 switch (*p++)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 case '1':
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 XFASTINT (val) |= 1 << 16;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 case '2':
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 XFASTINT (val) |= 1 << 17;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 case '3':
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 XFASTINT (val) |= 1 << 18;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 case '4':
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 XFASTINT (val) |= 1 << 19;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 case 'p':
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 XFASTINT (val) |= 1 << 20;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 break;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
321
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
322 case 'b':
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
323 XFASTINT (val) |= 1 << 21;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
324 break;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 XVECTOR (syntax_table)->contents[0xFF & XINT (c)] = val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 /* Dump syntax table to buffer in human-readable format */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333
3720
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
334 static void
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 describe_syntax (value)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 Lisp_Object value;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 register enum syntaxcode code;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
339 char desc, match, start1, start2, end1, end2, prefix, comstyle;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 char str[2];
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 Findent_to (make_number (16), make_number (1));
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 if (XTYPE (value) != Lisp_Int)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 insert_string ("invalid");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 return;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 code = (enum syntaxcode) (XINT (value) & 0377);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 match = (XINT (value) >> 8) & 0377;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 start1 = (XINT (value) >> 16) & 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 start2 = (XINT (value) >> 17) & 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 end1 = (XINT (value) >> 18) & 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 end2 = (XINT (value) >> 19) & 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 prefix = (XINT (value) >> 20) & 1;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
357 comstyle = (XINT (value) >> 21) & 1;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 if ((int) code < 0 || (int) code >= (int) Smax)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 insert_string ("invalid");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 return;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 desc = syntax_code_spec[(int) code];
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 str[0] = desc, str[1] = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 insert (str, 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 str[0] = match ? match : ' ';
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 insert (str, 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 if (start1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 insert ("1", 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 if (start2)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 insert ("2", 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 if (end1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 insert ("3", 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 if (end2)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 insert ("4", 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 if (prefix)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 insert ("p", 1);
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
385 if (comstyle)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
386 insert ("b", 1);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 insert_string ("\twhich means: ");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 #ifdef SWITCH_ENUM_BUG
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 switch ((int) code)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 #else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 switch (code)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 case Swhitespace:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 insert_string ("whitespace"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 case Spunct:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 insert_string ("punctuation"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 case Sword:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 insert_string ("word"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 case Ssymbol:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 insert_string ("symbol"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 case Sopen:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 insert_string ("open"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 case Sclose:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 insert_string ("close"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 case Squote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 insert_string ("quote"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 case Sstring:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 insert_string ("string"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 case Smath:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 insert_string ("math"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 case Sescape:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 insert_string ("escape"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 case Scharquote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 insert_string ("charquote"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 case Scomment:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 insert_string ("comment"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 case Sendcomment:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 insert_string ("endcomment"); break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 default:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 insert_string ("invalid");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 return;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 if (match)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 insert_string (", matches ");
1292
d9a103f4843e (describe_syntax): Use insert_char to insert `match'.
Joseph Arceneaux <jla@gnu.org>
parents: 1167
diff changeset
430 insert_char (match);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 if (start1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 insert_string (",\n\t is the first character of a comment-start sequence");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 if (start2)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 insert_string (",\n\t is the second character of a comment-start sequence");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 if (end1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 insert_string (",\n\t is the first character of a comment-end sequence");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 if (end2)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 insert_string (",\n\t is the second character of a comment-end sequence");
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
442 if (comstyle)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
443 insert_string (" (comment style b)");
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
444
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 if (prefix)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 insert_string (",\n\t is a prefix character for `backward-prefix-chars'");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 insert_string ("\n");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450
3720
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
451 static Lisp_Object
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 describe_syntax_1 (vector)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 Lisp_Object vector;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 struct buffer *old = current_buffer;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 set_buffer_internal (XBUFFER (Vstandard_output));
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
457 describe_vector (vector, Qnil, describe_syntax, 0, Qnil);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 set_buffer_internal (old);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 DEFUN ("describe-syntax", Fdescribe_syntax, Sdescribe_syntax, 0, 0, "",
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 "Describe the syntax specifications in the syntax table.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 The descriptions are inserted in a buffer, which is then displayed.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 ()
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 internal_with_output_to_temp_buffer
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 ("*Help*", describe_syntax_1, current_buffer->syntax_table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 /* Return the position across COUNT words from FROM.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 If that many words cannot be found before the end of the buffer, return 0.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 COUNT negative means scan backward and stop at word beginning. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 scan_words (from, count)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 register int from, count;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 register int beg = BEGV;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 register int end = ZV;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 register int code;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 immediate_quit = 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 QUIT;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 while (count > 0)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 if (from == end)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 immediate_quit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 return 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 code = SYNTAX (FETCH_CHAR (from));
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 if (words_include_escapes
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 && (code == Sescape || code == Scharquote))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 if (code == Sword)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 if (from == end) break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 code = SYNTAX (FETCH_CHAR (from));
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 if (!(words_include_escapes
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 && (code == Sescape || code == Scharquote)))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 if (code != Sword)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 count--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 while (count < 0)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 if (from == beg)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 immediate_quit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 return 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 code = SYNTAX (FETCH_CHAR (from - 1));
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 if (words_include_escapes
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 && (code == Sescape || code == Scharquote))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 if (code == Sword)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 if (from == beg) break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 code = SYNTAX (FETCH_CHAR (from - 1));
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 if (!(words_include_escapes
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 && (code == Sescape || code == Scharquote)))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 if (code != Sword)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 count++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 immediate_quit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 return from;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 DEFUN ("forward-word", Fforward_word, Sforward_word, 1, 1, "p",
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 "Move point forward ARG words (backward if ARG is negative).\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 Normally returns t.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 If an edge of the buffer is reached, point is left there\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 and nil is returned.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (count)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 Lisp_Object count;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 int val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 CHECK_NUMBER (count, 0);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 if (!(val = scan_words (point, XINT (count))))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 SET_PT (XINT (count) > 0 ? ZV : BEGV);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 SET_PT (val);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 return Qt;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
571 DEFUN ("forward-comment", Fforward_comment, Sforward_comment, 1, 1, 0,
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
572 "Move forward across up to N comments. If N is negative, move backward.\n\
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
573 Stop scanning if we find something other than a comment or whitespace.\n\
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
574 Set point to where scanning stops.\n\
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
575 If N comments are found as expected, with nothing except whitespace\n\
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
576 between them, return t; otherwise return nil.")
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
577 (count)
3095
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
578 Lisp_Object count;
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
579 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
580 register int from;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
581 register int stop;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
582 register int c;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
583 register enum syntaxcode code;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
584 int comstyle = 0; /* style of comment encountered */
3087
ea0cb469490e (Fforward_comment): Fix last change.
Richard M. Stallman <rms@gnu.org>
parents: 3086
diff changeset
585 int found;
3095
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
586 int count1;
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
587
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
588 CHECK_NUMBER (count, 0);
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
589 count1 = XINT (count);
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
590
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
591 immediate_quit = 1;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
592 QUIT;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
593
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
594 from = PT;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
595
3095
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
596 while (count1 > 0)
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
597 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
598 stop = ZV;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
599 while (from < stop)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
600 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
601 c = FETCH_CHAR (from);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
602 code = SYNTAX (c);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
603 from++;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
604 comstyle = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
605 if (from < stop && SYNTAX_COMSTART_FIRST (c)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
606 && SYNTAX_COMSTART_SECOND (FETCH_CHAR (from)))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
607 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
608 /* we have encountered a comment start sequence and we
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
609 are ignoring all text inside comments. we must record
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
610 the comment style this sequence begins so that later,
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
611 only a comment end of the same style actually ends
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
612 the comment section */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
613 code = Scomment;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
614 comstyle = SYNTAX_COMMENT_STYLE (FETCH_CHAR (from));
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
615 from++;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
616 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
617
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
618 if (code == Scomment)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
619 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
620 while (1)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
621 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
622 if (from == stop)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
623 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
624 immediate_quit = 0;
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
625 SET_PT (from);
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
626 return Qnil;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
627 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
628 c = FETCH_CHAR (from);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
629 if (SYNTAX (c) == Sendcomment
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
630 && SYNTAX_COMMENT_STYLE (c) == comstyle)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
631 /* we have encountered a comment end of the same style
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
632 as the comment sequence which began this comment
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
633 section */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
634 break;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
635 from++;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
636 if (from < stop && SYNTAX_COMEND_FIRST (c)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
637 && SYNTAX_COMEND_SECOND (FETCH_CHAR (from))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
638 && SYNTAX_COMMENT_STYLE (c) == comstyle)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
639 /* we have encountered a comment end of the same style
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
640 as the comment sequence which began this comment
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
641 section */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
642 { from++; break; }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
643 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
644 /* We have skipped one comment. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
645 break;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
646 }
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
647 else if (code != Swhitespace && code != Sendcomment)
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
648 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
649 immediate_quit = 0;
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
650 SET_PT (from - 1);
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
651 return Qnil;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
652 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
653 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
654
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
655 /* End of comment reached */
3095
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
656 count1--;
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
657 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
658
3095
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
659 while (count1 < 0)
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
660 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
661 stop = BEGV;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
662 while (from > stop)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
663 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
664 int quoted;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
665
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
666 from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
667 quoted = char_quoted (from);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
668 if (quoted)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
669 from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
670 c = FETCH_CHAR (from);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
671 code = SYNTAX (c);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
672 comstyle = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
673 if (from > stop && SYNTAX_COMEND_SECOND (c)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
674 && SYNTAX_COMEND_FIRST (FETCH_CHAR (from - 1))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
675 && !char_quoted (from - 1))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
676 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
677 /* we must record the comment style encountered so that
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
678 later, we can match only the proper comment begin
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
679 sequence of the same style */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
680 code = Sendcomment;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
681 comstyle = SYNTAX_COMMENT_STYLE (FETCH_CHAR (from - 1));
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
682 from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
683 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
684
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
685 if (code == Sendcomment && !quoted)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
686 {
3794
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
687 #if 0
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
688 if (code != SYNTAX (c))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
689 /* For a two-char comment ender, we can assume
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
690 it does end a comment. So scan back in a simple way. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
691 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
692 if (from != stop) from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
693 while (1)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
694 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
695 if (SYNTAX (c = FETCH_CHAR (from)) == Scomment
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
696 && SYNTAX_COMMENT_STYLE (c) == comstyle)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
697 break;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
698 if (from == stop)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
699 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
700 immediate_quit = 0;
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
701 SET_PT (from);
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
702 return Qnil;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
703 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
704 from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
705 if (SYNTAX_COMSTART_SECOND (c)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
706 && SYNTAX_COMSTART_FIRST (FETCH_CHAR (from))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
707 && SYNTAX_COMMENT_STYLE (c) == comstyle
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
708 && !char_quoted (from))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
709 break;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
710 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
711 break;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
712 }
3794
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
713 #endif /* 0 */
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
714
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
715 /* Look back, counting the parity of string-quotes,
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
716 and recording the comment-starters seen.
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
717 When we reach a safe place, assume that's not in a string;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
718 then step the main scan to the earliest comment-starter seen
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
719 an even number of string quotes away from the safe place.
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
720
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
721 OFROM[I] is position of the earliest comment-starter seen
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
722 which is I+2X quotes from the comment-end.
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
723 PARITY is current parity of quotes from the comment end. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
724 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
725 int parity = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
726 char my_stringend = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
727 int string_lossage = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
728 int comment_end = from;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
729 int comstart_pos = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
730 int comstart_parity = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
731
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
732 /* At beginning of range to scan, we're outside of strings;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
733 that determines quote parity to the comment-end. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
734 while (from != stop)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
735 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
736 /* Move back and examine a character. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
737 from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
738
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
739 c = FETCH_CHAR (from);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
740 code = SYNTAX (c);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
741
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
742 /* If this char is the second of a 2-char comment sequence,
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
743 back up and give the pair the appropriate syntax. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
744 if (from > stop && SYNTAX_COMEND_SECOND (c)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
745 && SYNTAX_COMEND_FIRST (FETCH_CHAR (from - 1)))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
746 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
747 code = Sendcomment;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
748 from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
749 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
750
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
751 else if (from > stop && SYNTAX_COMSTART_SECOND (c)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
752 && SYNTAX_COMSTART_FIRST (FETCH_CHAR (from - 1))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
753 && comstyle == SYNTAX_COMMENT_STYLE (c))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
754 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
755 code = Scomment;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
756 from--;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
757 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
758
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
759 /* Ignore escaped characters. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
760 if (char_quoted (from))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
761 continue;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
762
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
763 /* Track parity of quotes. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
764 if (code == Sstring)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
765 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
766 parity ^= 1;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
767 if (my_stringend == 0)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
768 my_stringend = c;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
769 /* If we have two kinds of string delimiters.
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
770 There's no way to grok this scanning backwards. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
771 else if (my_stringend != c)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
772 string_lossage = 1;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
773 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
774
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
775 /* Record comment-starters according to that
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
776 quote-parity to the comment-end. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
777 if (code == Scomment)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
778 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
779 comstart_parity = parity;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
780 comstart_pos = from;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
781 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
782
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
783 /* If we find another earlier comment-ender,
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3568
diff changeset
784 any comment-starts earlier than that don't count
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
785 (because they go with the earlier comment-ender). */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
786 if (code == Sendcomment
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
787 && SYNTAX_COMMENT_STYLE (FETCH_CHAR (from)) == comstyle)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
788 break;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
789
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
790 /* Assume a defun-start point is outside of strings. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
791 if (code == Sopen
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
792 && (from == stop || FETCH_CHAR (from - 1) == '\n'))
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
793 break;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
794 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
795
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
796 if (comstart_pos == 0)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
797 from = comment_end;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
798 /* If the earliest comment starter
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
799 is followed by uniform paired string quotes or none,
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
800 we know it can't be inside a string
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
801 since if it were then the comment ender would be inside one.
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
802 So it does start a comment. Skip back to it. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
803 else if (comstart_parity == 0 && !string_lossage)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
804 from = comstart_pos;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
805 else
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
806 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
807 /* We had two kinds of string delimiters mixed up
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
808 together. Decode this going forwards.
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
809 Scan fwd from the previous comment ender
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
810 to the one in question; this records where we
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
811 last passed a comment starter. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
812 struct lisp_parse_state state;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
813 scan_sexps_forward (&state, find_defun_start (comment_end),
3720
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
814 comment_end - 1, -10000, 0, Qnil, 0);
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
815 if (state.incomment)
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
816 from = state.comstart;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
817 else
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
818 /* We can't grok this as a comment; scan it normally. */
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
819 from = comment_end;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
820 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
821 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
822 }
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
823 else if ((code != Swhitespace && code != Scomment) || quoted)
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
824 {
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
825 immediate_quit = 0;
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
826 SET_PT (from + 1);
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
827 return Qnil;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
828 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
829 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
830
3095
ef7d99920f81 (Fforward_comment): Arg is a Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 3087
diff changeset
831 count1++;
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
832 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
833
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
834 SET_PT (from);
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
835 immediate_quit = 0;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
836 return Qt;
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
837 }
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
838
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 int parse_sexp_ignore_comments;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 Lisp_Object
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 scan_lists (from, count, depth, sexpflag)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 register int from;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 int count, depth, sexpflag;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 Lisp_Object val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 register int stop;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 register int c;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 char stringterm;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 int quoted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 int mathexit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 register enum syntaxcode code;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 int min_depth = depth; /* Err out if depth gets less than this. */
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
854 int comstyle = 0; /* style of comment encountered */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 if (depth > 0) min_depth = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 immediate_quit = 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 QUIT;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 while (count > 0)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 stop = ZV;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 while (from < stop)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 c = FETCH_CHAR (from);
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
867 code = SYNTAX (c);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 if (from < stop && SYNTAX_COMSTART_FIRST (c)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 && SYNTAX_COMSTART_SECOND (FETCH_CHAR (from))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 && parse_sexp_ignore_comments)
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
872 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
873 /* we have encountered a comment start sequence and we
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
874 are ignoring all text inside comments. we must record
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
875 the comment style this sequence begins so that later,
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
876 only a comment end of the same style actually ends
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
877 the comment section */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
878 code = Scomment;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
879 comstyle = SYNTAX_COMMENT_STYLE (FETCH_CHAR (from));
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
880 from++;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
881 }
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
882
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 if (SYNTAX_PREFIX (c))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 continue;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 #ifdef SWITCH_ENUM_BUG
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 switch ((int) code)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 #else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 switch (code)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 case Sescape:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 case Scharquote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 if (from == stop) goto lose;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 /* treat following character as a word constituent */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 case Sword:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 case Ssymbol:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 if (depth || !sexpflag) break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 /* This word counts as a sexp; return at end of it. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 while (from < stop)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 #ifdef SWITCH_ENUM_BUG
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
904 switch ((int) SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 #else
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
906 switch (SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 case Scharquote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 case Sescape:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 if (from == stop) goto lose;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 case Sword:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 case Ssymbol:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 case Squote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 default:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 case Scomment:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 if (!parse_sexp_ignore_comments) break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 if (from == stop) goto done;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
930 c = FETCH_CHAR (from);
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
931 if (SYNTAX (c) == Sendcomment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
932 && SYNTAX_COMMENT_STYLE (c) == comstyle)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
933 /* we have encountered a comment end of the same style
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
934 as the comment sequence which began this comment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
935 section */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 if (from < stop && SYNTAX_COMEND_FIRST (c)
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
939 && SYNTAX_COMEND_SECOND (FETCH_CHAR (from))
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
940 && SYNTAX_COMMENT_STYLE (c) == comstyle)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
941 /* we have encountered a comment end of the same style
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
942 as the comment sequence which began this comment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
943 section */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 { from++; break; }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 case Smath:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 if (!sexpflag)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 if (from != stop && c == FETCH_CHAR (from))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 if (mathexit)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 mathexit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 goto close1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 mathexit = 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 case Sopen:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 if (!++depth) goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 case Sclose:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 close1:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 if (!--depth) goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 if (depth < min_depth)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 error ("Containing expression ends prematurely");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 case Sstring:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 stringterm = FETCH_CHAR (from - 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 if (from >= stop) goto lose;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 if (FETCH_CHAR (from) == stringterm) break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 #ifdef SWITCH_ENUM_BUG
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
978 switch ((int) SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 #else
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
980 switch (SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 case Scharquote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 case Sescape:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 if (!depth && sexpflag) goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 /* Reached end of buffer. Error if within object, return nil if between */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 if (depth) goto lose;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 immediate_quit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 /* End of object reached */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 done:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 count--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 while (count < 0)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 stop = BEGV;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 while (from > stop)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 if (quoted = char_quoted (from))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 c = FETCH_CHAR (from);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 code = SYNTAX (c);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 if (from > stop && SYNTAX_COMEND_SECOND (c)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 && SYNTAX_COMEND_FIRST (FETCH_CHAR (from - 1))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 && !char_quoted (from - 1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 && parse_sexp_ignore_comments)
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1020 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1021 /* we must record the comment style encountered so that
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1022 later, we can match only the proper comment begin
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1023 sequence of the same style */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1024 code = Sendcomment;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1025 comstyle = SYNTAX_COMMENT_STYLE (FETCH_CHAR (from - 1));
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1026 from--;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1027 }
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1028
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 if (SYNTAX_PREFIX (c))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 continue;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 #ifdef SWITCH_ENUM_BUG
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 switch ((int) (quoted ? Sword : code))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 #else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 switch (quoted ? Sword : code)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 case Sword:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 case Ssymbol:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 if (depth || !sexpflag) break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 /* This word counts as a sexp; count object finished after passing it. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 while (from > stop)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 quoted = char_quoted (from - 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 if (quoted)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 from--;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1047 if (! (quoted || SYNTAX (FETCH_CHAR (from - 1)) == Sword
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1048 || SYNTAX (FETCH_CHAR (from - 1)) == Ssymbol
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1049 || SYNTAX (FETCH_CHAR (from - 1)) == Squote))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 goto done2;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 goto done2;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 case Smath:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 if (!sexpflag)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 if (from != stop && c == FETCH_CHAR (from - 1))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 if (mathexit)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 mathexit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 goto open2;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 mathexit = 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 case Sclose:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 if (!++depth) goto done2;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 case Sopen:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 open2:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 if (!--depth) goto done2;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 if (depth < min_depth)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 error ("Containing expression ends prematurely");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 case Sendcomment:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 if (!parse_sexp_ignore_comments)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 break;
3794
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1081 #if 0
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1082 if (code != SYNTAX (c))
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1083 /* For a two-char comment ender, we can assume
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1084 it does end a comment. So scan back in a simple way. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1085 {
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1086 if (from != stop) from--;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1087 while (1)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1088 {
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1089 if (SYNTAX (c = FETCH_CHAR (from)) == Scomment
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1090 && SYNTAX_COMMENT_STYLE (c) == comstyle)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1091 break;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1092 if (from == stop) goto done;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1093 from--;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1094 if (SYNTAX_COMSTART_SECOND (c)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1095 && SYNTAX_COMSTART_FIRST (FETCH_CHAR (from))
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1096 && SYNTAX_COMMENT_STYLE (c) == comstyle
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1097 && !char_quoted (from))
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1098 break;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1099 }
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1100 break;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1101 }
3794
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1102 #endif /* 0 */
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1103
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 /* Look back, counting the parity of string-quotes,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 and recording the comment-starters seen.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 When we reach a safe place, assume that's not in a string;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 then step the main scan to the earliest comment-starter seen
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 an even number of string quotes away from the safe place.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 OFROM[I] is position of the earliest comment-starter seen
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 which is I+2X quotes from the comment-end.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 PARITY is current parity of quotes from the comment end. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 int parity = 0;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1115 char my_stringend = 0;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1116 int string_lossage = 0;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1117 int comment_end = from;
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1118 int comstart_pos = 0;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1119 int comstart_parity = 0;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 /* At beginning of range to scan, we're outside of strings;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 that determines quote parity to the comment-end. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 while (from != stop)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 /* Move back and examine a character. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 c = FETCH_CHAR (from);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 code = SYNTAX (c);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 /* If this char is the second of a 2-char comment sequence,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 back up and give the pair the appropriate syntax. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 if (from > stop && SYNTAX_COMEND_SECOND (c)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 && SYNTAX_COMEND_FIRST (FETCH_CHAR (from - 1)))
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1135 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1136 code = Sendcomment;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1137 from--;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1138 }
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1139
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 else if (from > stop && SYNTAX_COMSTART_SECOND (c)
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1141 && SYNTAX_COMSTART_FIRST (FETCH_CHAR (from - 1))
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1142 && comstyle == SYNTAX_COMMENT_STYLE (c))
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1143 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1144 code = Scomment;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1145 from--;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1146 }
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 /* Ignore escaped characters. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 if (char_quoted (from))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 continue;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1152 /* Track parity of quotes. */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 if (code == Sstring)
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1154 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1155 parity ^= 1;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1156 if (my_stringend == 0)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1157 my_stringend = c;
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1158 /* If we have two kinds of string delimiters.
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1159 There's no way to grok this scanning backwards. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1160 else if (my_stringend != c)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1161 string_lossage = 1;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1162 }
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 /* Record comment-starters according to that
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 quote-parity to the comment-end. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 if (code == Scomment)
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1167 {
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1168 comstart_parity = parity;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1169 comstart_pos = from;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1170 }
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1172 /* If we find another earlier comment-ender,
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3568
diff changeset
1173 any comment-starts earlier than that don't count
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1174 (because they go with the earlier comment-ender). */
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1175 if (code == Sendcomment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1176 && SYNTAX_COMMENT_STYLE (FETCH_CHAR (from)) == comstyle)
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 break;
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1178
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1179 /* Assume a defun-start point is outside of strings. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1180 if (code == Sopen
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1181 && (from == stop || FETCH_CHAR (from - 1) == '\n'))
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1182 break;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 }
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1184
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1185 if (comstart_pos == 0)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1186 from = comment_end;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1187 /* If the earliest comment starter
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1188 is followed by uniform paired string quotes or none,
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1189 we know it can't be inside a string
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1190 since if it were then the comment ender would be inside one.
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1191 So it does start a comment. Skip back to it. */
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1192 else if (comstart_parity == 0 && !string_lossage)
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1193 from = comstart_pos;
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1194 else
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1195 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1196 /* We had two kinds of string delimiters mixed up
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1197 together. Decode this going forwards.
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1198 Scan fwd from the previous comment ender
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1199 to the one in question; this records where we
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1200 last passed a comment starter. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1201 struct lisp_parse_state state;
1167
a9aeeaa9da8f (scan_lists): When searching back for comment:
Richard M. Stallman <rms@gnu.org>
parents: 1085
diff changeset
1202 scan_sexps_forward (&state, find_defun_start (comment_end),
3720
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
1203 comment_end - 1, -10000, 0, Qnil, 0);
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1204 if (state.incomment)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1205 from = state.comstart;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1206 else
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1207 /* We can't grok this as a comment; scan it normally. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1208 from = comment_end;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1209 }
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 case Sstring:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 stringterm = FETCH_CHAR (from);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 if (from == stop) goto lose;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 if (!char_quoted (from - 1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 && stringterm == FETCH_CHAR (from - 1))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 from--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 if (!depth && sexpflag) goto done2;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 /* Reached start of buffer. Error if within object, return nil if between */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 if (depth) goto lose;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 immediate_quit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 done2:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 count++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 immediate_quit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 XFASTINT (val) = from;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 return val;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 lose:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 error ("Unbalanced parentheses");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 /* NOTREACHED */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248
3720
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
1249 static int
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 char_quoted (pos)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 register int pos;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 register enum syntaxcode code;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 register int beg = BEGV;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 register int quoted = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 while (pos > beg
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 && ((code = SYNTAX (FETCH_CHAR (pos - 1))) == Scharquote
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 || code == Sescape))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 pos--, quoted = !quoted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 return quoted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 DEFUN ("scan-lists", Fscan_lists, Sscan_lists, 3, 3, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 "Scan from character number FROM by COUNT lists.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 Returns the character number of the position thus found.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 \n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 If DEPTH is nonzero, paren depth begins counting from that value,\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 only places where the depth in parentheses becomes zero\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 are candidates for stopping; COUNT such places are counted.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 Thus, a positive value for DEPTH means go out levels.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 \n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 Comments are ignored if `parse-sexp-ignore-comments' is non-nil.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 \n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 If the beginning or end of (the accessible part of) the buffer is reached\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 and the depth is wrong, an error is signaled.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 If the depth is right but the count is not used up, nil is returned.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 (from, count, depth)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 Lisp_Object from, count, depth;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 CHECK_NUMBER (from, 0);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 CHECK_NUMBER (count, 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 CHECK_NUMBER (depth, 2);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 return scan_lists (XINT (from), XINT (count), XINT (depth), 0);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 DEFUN ("scan-sexps", Fscan_sexps, Sscan_sexps, 2, 2, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 "Scan from character number FROM by COUNT balanced expressions.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 If COUNT is negative, scan backwards.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 Returns the character number of the position thus found.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 \n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 Comments are ignored if `parse-sexp-ignore-comments' is non-nil.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 \n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 If the beginning or end of (the accessible part of) the buffer is reached\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 in the middle of a parenthetical grouping, an error is signaled.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297 If the beginning or end is reached between groupings\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 but before count is used up, nil is returned.")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 (from, count)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 Lisp_Object from, count;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 CHECK_NUMBER (from, 0);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 CHECK_NUMBER (count, 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 return scan_lists (XINT (from), XINT (count), 0, 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, Sbackward_prefix_chars,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 0, 0, 0,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 "Move point backward over any number of chars with prefix syntax.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 This includes chars with \"quote\" or \"prefix\" syntax (' or p).")
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 ()
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 int beg = BEGV;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 int pos = point;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 while (pos > beg && !char_quoted (pos - 1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 && (SYNTAX (FETCH_CHAR (pos - 1)) == Squote
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 || SYNTAX_PREFIX (FETCH_CHAR (pos - 1))))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 pos--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 SET_PT (pos);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 return Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1327 /* Parse forward from FROM to END,
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1328 assuming that FROM has state OLDSTATE (nil means FROM is start of function),
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1329 and return a description of the state of the parse at END.
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1330 If STOPBEFORE is nonzero, stop at the start of an atom.
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1331 If COMMENTSTOP is nonzero, stop at the start of a comment. */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332
3720
408c7ee69be7 (scan_lists, Fforward_comment): Pass 0 as commentstop arg
Richard M. Stallman <rms@gnu.org>
parents: 3684
diff changeset
1333 static void
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1334 scan_sexps_forward (stateptr, from, end, targetdepth,
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1335 stopbefore, oldstate, commentstop)
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1336 struct lisp_parse_state *stateptr;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 register int from;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 int end, targetdepth, stopbefore;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 Lisp_Object oldstate;
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1340 int commentstop;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 struct lisp_parse_state state;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 register enum syntaxcode code;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 struct level { int last, prev; };
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 struct level levelstart[100];
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 register struct level *curlevel = levelstart;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 struct level *endlevel = levelstart + 100;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 char prev;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 register int depth; /* Paren depth of current scanning location.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 level - levelstart equals this except
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 when the depth becomes negative. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 int mindepth; /* Lowest DEPTH value seen. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 int start_quoted = 0; /* Nonzero means starting after a char quote */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 Lisp_Object tem;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 immediate_quit = 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 QUIT;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
1360 if (NILP (oldstate))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 depth = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 state.instring = -1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 state.incomment = 0;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1365 state.comstyle = 0; /* comment style a by default */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 tem = Fcar (oldstate);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
1370 if (!NILP (tem))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 depth = XINT (tem);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 depth = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 oldstate = Fcdr (oldstate);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 oldstate = Fcdr (oldstate);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 oldstate = Fcdr (oldstate);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 tem = Fcar (oldstate);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
1379 state.instring = !NILP (tem) ? XINT (tem) : -1;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 oldstate = Fcdr (oldstate);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 tem = Fcar (oldstate);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
1383 state.incomment = !NILP (tem);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 oldstate = Fcdr (oldstate);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 tem = Fcar (oldstate);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
1387 start_quoted = !NILP (tem);
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1388
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1389 /* if the eight element of the list is nil, we are in comment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1390 style a. if it is non-nil, we are in comment style b */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1391 oldstate = Fcdr (oldstate);
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1392 oldstate = Fcdr (oldstate);
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1393 tem = Fcar (oldstate);
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1394 state.comstyle = !NILP (tem);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 state.quoted = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 mindepth = depth;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 curlevel->prev = -1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 curlevel->last = -1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 /* Enter the loop at a place appropriate for initial state. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 if (state.incomment) goto startincomment;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 if (state.instring >= 0)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 if (start_quoted) goto startquotedinstring;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 goto startinstring;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 if (start_quoted) goto startquoted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 while (from < end)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 {
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1414 code = SYNTAX (FETCH_CHAR (from));
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 from++;
3794
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1416 if (code == Scomment)
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1417 state.comstart = from-1;
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1418
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1419 else if (from < end && SYNTAX_COMSTART_FIRST (FETCH_CHAR (from - 1))
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1420 && SYNTAX_COMSTART_SECOND (FETCH_CHAR (from)))
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1421 {
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1422 /* Record the comment style we have entered so that only
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1423 the comment-end sequence of the same style actually
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1424 terminates the comment section. */
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1425 code = Scomment;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1426 state.comstyle = SYNTAX_COMMENT_STYLE (FETCH_CHAR (from));
3794
ea9d3f2cd5fa (scan_lists, Fforward_comment): #if 0 the code
Richard M. Stallman <rms@gnu.org>
parents: 3720
diff changeset
1427 state.comstart = from-1;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1428 from++;
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1429 }
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1430
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 if (SYNTAX_PREFIX (FETCH_CHAR (from - 1)))
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432 continue;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 #ifdef SWITCH_ENUM_BUG
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 switch ((int) code)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 #else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 switch (code)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 case Sescape:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 case Scharquote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 if (stopbefore) goto stop; /* this arg means stop at sexp start */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 curlevel->last = from - 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 startquoted:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 if (from == end) goto endquoted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 goto symstarted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 /* treat following character as a word constituent */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 case Sword:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 case Ssymbol:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 if (stopbefore) goto stop; /* this arg means stop at sexp start */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 curlevel->last = from - 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 symstarted:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 while (from < end)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 #ifdef SWITCH_ENUM_BUG
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1456 switch ((int) SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457 #else
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1458 switch (SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 case Scharquote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 case Sescape:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 if (from == end) goto endquoted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 case Sword:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467 case Ssymbol:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 case Squote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 default:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471 goto symdone;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 symdone:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 curlevel->prev = curlevel->last;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 case Scomment:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 state.incomment = 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 startincomment:
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1482 if (commentstop)
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1483 goto done;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 if (from == end) goto done;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1487 prev = FETCH_CHAR (from);
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1488 if (SYNTAX (prev) == Sendcomment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1489 && SYNTAX_COMMENT_STYLE (prev) == state.comstyle)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1490 /* Only terminate the comment section if the endcomment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1491 of the same style as the start sequence has been
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1492 encountered. */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 if (from < end && SYNTAX_COMEND_FIRST (prev)
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1496 && SYNTAX_COMEND_SECOND (FETCH_CHAR (from))
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1497 && SYNTAX_COMMENT_STYLE (prev) == state.comstyle)
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1498 /* Only terminate the comment section if the end-comment
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1499 sequence of the same style as the start sequence has
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1500 been encountered. */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 { from++; break; }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 state.incomment = 0;
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1504 state.comstyle = 0; /* reset the comment style */
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 case Sopen:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 if (stopbefore) goto stop; /* this arg means stop at sexp start */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 depth++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 /* curlevel++->last ran into compiler bug on Apollo */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 curlevel->last = from - 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 if (++curlevel == endlevel)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 error ("Nesting too deep for parser");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 curlevel->prev = -1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 curlevel->last = -1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 if (!--targetdepth) goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 case Sclose:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 depth--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 if (depth < mindepth)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 mindepth = depth;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 if (curlevel != levelstart)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 curlevel--;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 curlevel->prev = curlevel->last;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 if (!++targetdepth) goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529 case Sstring:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 if (stopbefore) goto stop; /* this arg means stop at sexp start */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 curlevel->last = from - 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 state.instring = FETCH_CHAR (from - 1);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 startinstring:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 while (1)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536 if (from >= end) goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 if (FETCH_CHAR (from) == state.instring) break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 #ifdef SWITCH_ENUM_BUG
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1539 switch ((int) SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 #else
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1541 switch (SYNTAX (FETCH_CHAR (from)))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 #endif
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 case Scharquote:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 case Sescape:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 startquotedinstring:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 if (from >= end) goto endquoted;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 state.instring = -1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 curlevel->prev = curlevel->last;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 from++;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 case Smath:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 break;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 goto done;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 stop: /* Here if stopping before start of sexp. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 from--; /* We have just fetched the char that starts it; */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 goto done; /* but return the position before it. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 endquoted:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 state.quoted = 1;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 done:
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 state.depth = depth;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 state.mindepth = mindepth;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 state.thislevelstart = curlevel->prev;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 state.prevlevelstart
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 = (curlevel == levelstart) ? -1 : (curlevel - 1)->last;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 state.location = from;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 immediate_quit = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1578 *stateptr = state;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 /* This comment supplies the doc string for parse-partial-sexp,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 for make-docfile to see. We cannot put this in the real DEFUN
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 due to limits in the Unix cpp.
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1585 DEFUN ("parse-partial-sexp", Ffoo, Sfoo, 2, 6, 0,
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 "Parse Lisp syntax starting at FROM until TO; return status of parse at TO.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 Parsing stops at TO or when certain criteria are met;\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 point is set to where parsing stops.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 If fifth arg STATE is omitted or nil,\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 parsing assumes that FROM is the beginning of a function.\n\
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1591 Value is a list of eight elements describing final state of parsing:\n\
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 1. depth in parens.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1593 2. character address of start of innermost containing list; nil if none.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 3. character address of start of last complete sexp terminated.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595 4. non-nil if inside a string.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596 (it is the character that will terminate the string.)\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 5. t if inside a comment.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1598 6. t if following a quote character.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1599 7. the minimum paren-depth encountered during this scan.\n\
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1600 8. t if in a comment of style `b'.\n\
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601 If third arg TARGETDEPTH is non-nil, parsing stops if the depth\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1602 in parentheses becomes equal to TARGETDEPTH.\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603 Fourth arg STOPBEFORE non-nil means stop when come to\n\
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 any character that starts a sexp.\n\
4393
3e20f4e3dbaa Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4307
diff changeset
1605 Fifth arg STATE is an eight-list like what this function returns.\n\
726
5f08efa38dd0 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 624
diff changeset
1606 It is used to initialize the state of the parse. Its second and third
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1607 elements are ignored.
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1608 Sixth args COMMENTSTOP non-nil means stop at the start of a comment.")
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1609 (from, to, targetdepth, stopbefore, state, commentstop)
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610 */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1612 DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 6, 0,
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 0 /* See immediately above */)
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1614 (from, to, targetdepth, stopbefore, oldstate, commentstop)
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1615 Lisp_Object from, to, targetdepth, stopbefore, oldstate, commentstop;
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 struct lisp_parse_state state;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 int target;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 163
diff changeset
1620 if (!NILP (targetdepth))
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1622 CHECK_NUMBER (targetdepth, 3);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1623 target = XINT (targetdepth);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625 else
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 target = -100000; /* We won't reach this depth */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 validate_region (&from, &to);
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1629 scan_sexps_forward (&state, XINT (from), XINT (to),
3568
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1630 target, !NILP (stopbefore), oldstate,
3ee951a22a80 (Fforward_comment): Set point to where scan stops,
Richard M. Stallman <rms@gnu.org>
parents: 3095
diff changeset
1631 !NILP (commentstop));
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 SET_PT (state.location);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 return Fcons (make_number (state.depth),
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636 Fcons (state.prevlevelstart < 0 ? Qnil : make_number (state.prevlevelstart),
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1637 Fcons (state.thislevelstart < 0 ? Qnil : make_number (state.thislevelstart),
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 Fcons (state.instring >= 0 ? make_number (state.instring) : Qnil,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1639 Fcons (state.incomment ? Qt : Qnil,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1640 Fcons (state.quoted ? Qt : Qnil,
1085
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1641 Fcons (make_number (state.mindepth),
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1642 Fcons (state.comstyle ? Qt : Qnil,
91a456e52db1 (scan_lists): Improve smarts for backwards scan of comments.
Richard M. Stallman <rms@gnu.org>
parents: 726
diff changeset
1643 Qnil))))))));
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1644 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1646 init_syntax_once ()
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648 register int i;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1649 register struct Lisp_Vector *v;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1650
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1651 /* Set this now, so first buffer creation can refer to it. */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1652 /* Make it nil before calling copy-syntax-table
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1653 so that copy-syntax-table will know not to try to copy from garbage */
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1654 Vstandard_syntax_table = Qnil;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 Vstandard_syntax_table = Fcopy_syntax_table (Qnil);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1657 v = XVECTOR (Vstandard_syntax_table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1658
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659 for (i = 'a'; i <= 'z'; i++)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 XFASTINT (v->contents[i]) = (int) Sword;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1661 for (i = 'A'; i <= 'Z'; i++)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662 XFASTINT (v->contents[i]) = (int) Sword;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663 for (i = '0'; i <= '9'; i++)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1664 XFASTINT (v->contents[i]) = (int) Sword;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1665 XFASTINT (v->contents['$']) = (int) Sword;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 XFASTINT (v->contents['%']) = (int) Sword;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 XFASTINT (v->contents['(']) = (int) Sopen + (')' << 8);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 XFASTINT (v->contents[')']) = (int) Sclose + ('(' << 8);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 XFASTINT (v->contents['[']) = (int) Sopen + (']' << 8);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671 XFASTINT (v->contents[']']) = (int) Sclose + ('[' << 8);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 XFASTINT (v->contents['{']) = (int) Sopen + ('}' << 8);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 XFASTINT (v->contents['}']) = (int) Sclose + ('{' << 8);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 XFASTINT (v->contents['"']) = (int) Sstring;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 XFASTINT (v->contents['\\']) = (int) Sescape;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 for (i = 0; i < 10; i++)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 XFASTINT (v->contents["_-+*/&|<>="[i]]) = (int) Ssymbol;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 for (i = 0; i < 12; i++)
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 XFASTINT (v->contents[".,;:?!#@~^'`"[i]]) = (int) Spunct;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 }
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 syms_of_syntax ()
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 {
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686 Qsyntax_table_p = intern ("syntax-table-p");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 staticpro (&Qsyntax_table_p);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 DEFVAR_BOOL ("parse-sexp-ignore-comments", &parse_sexp_ignore_comments,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 "Non-nil means `forward-sexp', etc., should treat comments as whitespace.");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 words_include_escapes = 0;
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693 DEFVAR_BOOL ("words-include-escapes", &words_include_escapes,
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 "Non-nil means `forward-word', etc., should treat escape chars part of words.");
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696 defsubr (&Ssyntax_table_p);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697 defsubr (&Ssyntax_table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698 defsubr (&Sstandard_syntax_table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 defsubr (&Scopy_syntax_table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 defsubr (&Sset_syntax_table);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701 defsubr (&Schar_syntax);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 defsubr (&Smodify_syntax_entry);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703 defsubr (&Sdescribe_syntax);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1704
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705 defsubr (&Sforward_word);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706
1998
656f4297962e (describe_syntax_1): Delete excess arg to describe_vector.
Richard M. Stallman <rms@gnu.org>
parents: 1394
diff changeset
1707 defsubr (&Sforward_comment);
163
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 defsubr (&Sscan_lists);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1709 defsubr (&Sscan_sexps);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1710 defsubr (&Sbackward_prefix_chars);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1711 defsubr (&Sparse_partial_sexp);
0f3996cb4ae5 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712 }