annotate src/search.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 7a2e1d7362c5
children ad4add779dac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* String search routines for GNU Emacs.
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2655
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1993 Free Software Foundation, Inc.
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 the Free Software Foundation; either version 1, or (at your option)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 #include "config.h"
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 #include "lisp.h"
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "syntax.h"
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "buffer.h"
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "commands.h"
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
26 #include "blockinput.h"
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
27
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include <sys/types.h>
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include "regex.h"
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #define max(a, b) ((a) > (b) ? (a) : (b))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #define min(a, b) ((a) < (b) ? (a) : (b))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 /* We compile regexps into this buffer and then use it for searching. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 struct re_pattern_buffer searchbuf;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 char search_fastmap[0400];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 /* Last regexp we compiled */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 Lisp_Object last_regexp;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
44 /* Every call to re_match, etc., must pass &search_regs as the regs
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
45 argument unless you can show it is unnecessary (i.e., if re_match
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
46 is certainly going to be called again before region-around-match
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
47 can be called).
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
48
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
49 Since the registers are now dynamically allocated, we need to make
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
50 sure not to refer to the Nth register before checking that it has
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
51 been allocated by checking search_regs.num_regs.
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
53 The regex code keeps track of whether it has allocated the search
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
54 buffer using bits in searchbuf. This means that whenever you
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
55 compile a new pattern, it completely forgets whether it has
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
56 allocated any registers, and will allocate new registers the next
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
57 time you call a searching or matching function. Therefore, we need
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
58 to call re_set_registers after compiling a new pattern or after
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
59 setting the match registers, so that the regex functions will be
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
60 able to free or re-allocate it properly. */
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 static struct re_registers search_regs;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
63 /* The buffer in which the last search was performed, or
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
64 Qt if the last search was done in a string;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
65 Qnil if no searching has been done yet. */
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
66 static Lisp_Object last_thing_searched;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 /* error condition signalled when regexp compile_pattern fails */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 Lisp_Object Qinvalid_regexp;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 static void
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 matcher_overflow ()
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 error ("Stack overflow in regexp matcher");
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 #ifdef __STDC__
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 #define CONST const
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 #else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 #define CONST
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 #endif
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 /* Compile a regexp and signal a Lisp error if anything goes wrong. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
86 compile_pattern (pattern, bufp, regp, translate)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 Lisp_Object pattern;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 struct re_pattern_buffer *bufp;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
89 struct re_registers *regp;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 char *translate;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 CONST char *val;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 Lisp_Object dummy;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 if (EQ (pattern, last_regexp)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 && translate == bufp->translate)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 return;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
98
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 last_regexp = Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 bufp->translate = translate;
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
101 BLOCK_INPUT;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 val = re_compile_pattern ((char *) XSTRING (pattern)->data,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 XSTRING (pattern)->size,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 bufp);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
105 UNBLOCK_INPUT;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 if (val)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 dummy = build_string (val);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 while (1)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 Fsignal (Qinvalid_regexp, Fcons (dummy, Qnil));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 }
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
112
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 last_regexp = pattern;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
114
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
115 /* Advise the searching functions about the space we have allocated
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
116 for register data. */
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
117 BLOCK_INPUT;
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
118 if (regp)
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
119 re_set_registers (bufp, regp, regp->num_regs, regp->start, regp->end);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
120 UNBLOCK_INPUT;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
121
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 return;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 /* Error condition used for failing searches */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 Lisp_Object Qsearch_failed;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 Lisp_Object
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 signal_failure (arg)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 Lisp_Object arg;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 Fsignal (Qsearch_failed, Fcons (arg, Qnil));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 return Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 DEFUN ("looking-at", Flooking_at, Slooking_at, 1, 1, 0,
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 635
diff changeset
137 "Return t if text after point matches regular expression PAT.\n\
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 635
diff changeset
138 This function modifies the match data that `match-beginning',\n\
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 635
diff changeset
139 `match-end' and `match-data' access; save and restore the match\n\
635
197f38dd0105 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 621
diff changeset
140 data if you want to preserve them.")
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 (string)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 Lisp_Object string;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 Lisp_Object val;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 unsigned char *p1, *p2;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 int s1, s2;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 register int i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 CHECK_STRING (string, 0);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
150 compile_pattern (string, &searchbuf, &search_regs,
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 !NILP (current_buffer->case_fold_search) ? DOWNCASE_TABLE : 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 immediate_quit = 1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 QUIT; /* Do a pending quit right away, to avoid paradoxical behavior */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 /* Get pointers and sizes of the two strings
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 that make up the visible portion of the buffer. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 p1 = BEGV_ADDR;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 s1 = GPT - BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 p2 = GAP_END_ADDR;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 s2 = ZV - GPT;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 if (s1 < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 p2 = p1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 s2 = ZV - BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 s1 = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 if (s2 < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 s1 = ZV - BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 s2 = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 i = re_match_2 (&searchbuf, (char *) p1, s1, (char *) p2, s2,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 point - BEGV, &search_regs,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 ZV - BEGV);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 if (i == -2)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 matcher_overflow ();
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 val = (0 <= i ? Qt : Qnil);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
182 for (i = 0; i < search_regs.num_regs; i++)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 if (search_regs.start[i] >= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 search_regs.start[i] += BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 search_regs.end[i] += BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 }
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
188 XSET (last_thing_searched, Lisp_Buffer, current_buffer);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 immediate_quit = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 return val;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 DEFUN ("string-match", Fstring_match, Sstring_match, 2, 3, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 "Return index of start of first match for REGEXP in STRING, or nil.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 If third arg START is non-nil, start search at that index in STRING.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 For index of first char beyond the match, do (match-end 0).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 `match-end' and `match-beginning' also give indices of substrings\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 matched by parenthesis constructs in the pattern.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 (regexp, string, start)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 Lisp_Object regexp, string, start;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 int val;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 int s;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 CHECK_STRING (regexp, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 CHECK_STRING (string, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 if (NILP (start))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 s = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 int len = XSTRING (string)->size;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 CHECK_NUMBER (start, 2);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 s = XINT (start);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 if (s < 0 && -s <= len)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 s = len - s;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 else if (0 > s || s > len)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 args_out_of_range (string, start);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
222 compile_pattern (regexp, &searchbuf, &search_regs,
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 !NILP (current_buffer->case_fold_search) ? DOWNCASE_TABLE : 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 immediate_quit = 1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 val = re_search (&searchbuf, (char *) XSTRING (string)->data,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 XSTRING (string)->size, s, XSTRING (string)->size - s,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 &search_regs);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 immediate_quit = 0;
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
229 last_thing_searched = Qt;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 if (val == -2)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 matcher_overflow ();
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 if (val < 0) return Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 return make_number (val);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 }
842
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
235
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
236 /* Match REGEXP against STRING, searching all of STRING,
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
237 and return the index of the match, or negative on failure.
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
238 This does not clobber the match data. */
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
239
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
240 int
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
241 fast_string_match (regexp, string)
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
242 Lisp_Object regexp, string;
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
243 {
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
244 int val;
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
245
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
246 compile_pattern (regexp, &searchbuf, 0, 0);
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
247 immediate_quit = 1;
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
248 val = re_search (&searchbuf, (char *) XSTRING (string)->data,
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
249 XSTRING (string)->size, 0, XSTRING (string)->size,
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
250 0);
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
251 immediate_quit = 0;
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
252 return val;
5ce0a9ac1ea7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
253 }
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
255 /* Search for COUNT instances of the character TARGET, starting at START.
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
256 If COUNT is negative, search backwards.
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
257
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
258 If we find COUNT instances, set *SHORTAGE to zero, and return the
1413
527af9fa8676 Comment fix.
Richard M. Stallman <rms@gnu.org>
parents: 842
diff changeset
259 position after the COUNTth match. Note that for reverse motion
527af9fa8676 Comment fix.
Richard M. Stallman <rms@gnu.org>
parents: 842
diff changeset
260 this is not the same as the usual convention for Emacs motion commands.
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
261
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
262 If we don't find COUNT instances before reaching the end of the
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
263 buffer (or the beginning, if scanning backwards), set *SHORTAGE to
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
264 the number of TARGETs left unfound, and return the end of the
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
265 buffer we bumped up against. */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
266
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
267 scan_buffer (target, start, count, shortage)
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
268 int *shortage, start;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
269 register int count, target;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 {
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
271 int limit = ((count > 0) ? ZV - 1 : BEGV);
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
272 int direction = ((count > 0) ? 1 : -1);
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
273
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
274 register unsigned char *cursor;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 unsigned char *base;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
276
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
277 register int ceiling;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
278 register unsigned char *ceiling_addr;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 if (shortage != 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 *shortage = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 immediate_quit = 1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
285 if (count > 0)
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
286 while (start != limit + 1)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 {
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
288 ceiling = BUFFER_CEILING_OF (start);
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
289 ceiling = min (limit, ceiling);
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
290 ceiling_addr = &FETCH_CHAR (ceiling) + 1;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
291 base = (cursor = &FETCH_CHAR (start));
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 while (1)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 {
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
294 while (*cursor != target && ++cursor != ceiling_addr)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
296 if (cursor != ceiling_addr)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 {
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
298 if (--count == 0)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 immediate_quit = 0;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
301 return (start + cursor - base + 1);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 else
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
304 if (++cursor == ceiling_addr)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 break;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 break;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 }
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
310 start += cursor - base;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 {
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
314 start--; /* first character we scan */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
315 while (start > limit - 1)
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
316 { /* we WILL scan under start */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
317 ceiling = BUFFER_FLOOR_OF (start);
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
318 ceiling = max (limit, ceiling);
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
319 ceiling_addr = &FETCH_CHAR (ceiling) - 1;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
320 base = (cursor = &FETCH_CHAR (start));
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 cursor++;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 while (1)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 {
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
324 while (--cursor != ceiling_addr && *cursor != target)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
326 if (cursor != ceiling_addr)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 {
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
328 if (++count == 0)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 immediate_quit = 0;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
331 return (start + cursor - base + 1);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 break;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 }
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
337 start += cursor - base;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 immediate_quit = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 if (shortage != 0)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
342 *shortage = count * direction;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 639
diff changeset
343 return (start + ((direction == 1 ? 0 : 1)));
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 int
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 find_next_newline (from, cnt)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 register int from, cnt;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 return (scan_buffer ('\n', from, cnt, (int *) 0));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
353 Lisp_Object skip_chars ();
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
354
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 DEFUN ("skip-chars-forward", Fskip_chars_forward, Sskip_chars_forward, 1, 2, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 "Move point forward, stopping before a char not in CHARS, or at position LIM.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 CHARS is like the inside of a `[...]' in a regular expression\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 except that `]' is never special and `\\' quotes `^', `-' or `\\'.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 Thus, with arg \"a-zA-Z\", this skips letters stopping before first nonletter.\n\
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
360 With arg \"^a-zA-Z\", skips nonletters stopping before first letter.\n\
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
361 Returns the distance traveled, either zero or positive.")
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 (string, lim)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 Lisp_Object string, lim;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 {
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
365 return skip_chars (1, 0, string, lim);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 DEFUN ("skip-chars-backward", Fskip_chars_backward, Sskip_chars_backward, 1, 2, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 "Move point backward, stopping after a char not in CHARS, or at position LIM.\n\
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
370 See `skip-chars-forward' for details.\n\
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
371 Returns the distance traveled, either zero or negative.")
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 (string, lim)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 Lisp_Object string, lim;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 {
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
375 return skip_chars (0, 0, string, lim);
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
376 }
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
377
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
378 DEFUN ("skip-syntax-forward", Fskip_syntax_forward, Sskip_syntax_forward, 1, 2, 0,
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
379 "Move point forward across chars in specified syntax classes.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
380 SYNTAX is a string of syntax code characters.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
381 Stop before a char whose syntax is not in SYNTAX, or at position LIM.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
382 If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
383 This function returns the distance traveled, either zero or positive.")
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
384 (syntax, lim)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
385 Lisp_Object syntax, lim;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
386 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
387 return skip_chars (1, 1, syntax, lim);
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
388 }
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
389
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
390 DEFUN ("skip-syntax-backward", Fskip_syntax_backward, Sskip_syntax_backward, 1, 2, 0,
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
391 "Move point backward across chars in specified syntax classes.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
392 SYNTAX is a string of syntax code characters.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
393 Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
394 If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.\n\
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
395 This function returns the distance traveled, either zero or negative.")
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
396 (syntax, lim)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
397 Lisp_Object syntax, lim;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
398 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
399 return skip_chars (0, 1, syntax, lim);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
402 Lisp_Object
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
403 skip_chars (forwardp, syntaxp, string, lim)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
404 int forwardp, syntaxp;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 Lisp_Object string, lim;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 register unsigned char *p, *pend;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 register unsigned char c;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 unsigned char fastmap[0400];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 int negate = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 register int i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 CHECK_STRING (string, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 if (NILP (lim))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 XSET (lim, Lisp_Int, forwardp ? ZV : BEGV);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 CHECK_NUMBER_COERCE_MARKER (lim, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 #if 0 /* This breaks some things... jla. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 /* In any case, don't allow scan outside bounds of buffer. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 if (XFASTINT (lim) > ZV)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 XFASTINT (lim) = ZV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 if (XFASTINT (lim) < BEGV)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 XFASTINT (lim) = BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 #endif
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 p = XSTRING (string)->data;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 pend = p + XSTRING (string)->size;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 bzero (fastmap, sizeof fastmap);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 if (p != pend && *p == '^')
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 negate = 1; p++;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
437 /* Find the characters specified and set their elements of fastmap.
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
438 If syntaxp, each character counts as itself.
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
439 Otherwise, handle backslashes and ranges specially */
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 while (p != pend)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 c = *p++;
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
444 if (syntaxp)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
445 fastmap[c] = 1;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
446 else
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 {
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
448 if (c == '\\')
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
449 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
450 if (p == pend) break;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
451 c = *p++;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
452 }
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
453 if (p != pend && *p == '-')
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 {
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
455 p++;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
456 if (p == pend) break;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
457 while (c <= *p)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
458 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
459 fastmap[c] = 1;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
460 c++;
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
461 }
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
462 p++;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 }
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
464 else
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
465 fastmap[c] = 1;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 /* If ^ was the first character, complement the fastmap. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 if (negate)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 for (i = 0; i < sizeof fastmap; i++)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 fastmap[i] ^= 1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
475 {
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
476 int start_point = point;
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
477
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
478 immediate_quit = 1;
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
479 if (syntaxp)
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
480 {
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
481
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
482 if (forwardp)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
483 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
484 while (point < XINT (lim)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
485 && fastmap[(unsigned char) syntax_code_spec[(int) SYNTAX (FETCH_CHAR (point))]])
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
486 SET_PT (point + 1);
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
487 }
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
488 else
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
489 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
490 while (point > XINT (lim)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
491 && fastmap[(unsigned char) syntax_code_spec[(int) SYNTAX (FETCH_CHAR (point - 1))]])
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
492 SET_PT (point - 1);
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
493 }
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
494 }
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
495 else
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
496 {
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
497 if (forwardp)
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
498 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
499 while (point < XINT (lim) && fastmap[FETCH_CHAR (point)])
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
500 SET_PT (point + 1);
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
501 }
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
502 else
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
503 {
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
504 while (point > XINT (lim) && fastmap[FETCH_CHAR (point - 1)])
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
505 SET_PT (point - 1);
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
506 }
1684
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
507 }
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
508 immediate_quit = 0;
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
509
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
510 return make_number (point - start_point);
f4d848dea8ff * search.c (Fskip_chars_forward, Fskip_chars_backward): Return the
Jim Blandy <jimb@redhat.com>
parents: 1523
diff changeset
511 }
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 /* Subroutines of Lisp buffer search functions. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 static Lisp_Object
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 search_command (string, bound, noerror, count, direction, RE)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 Lisp_Object string, bound, noerror, count;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 int direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 int RE;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 register int np;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 int lim;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 int n = direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 if (!NILP (count))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 CHECK_NUMBER (count, 3);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 n *= XINT (count);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 CHECK_STRING (string, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 if (NILP (bound))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 lim = n > 0 ? ZV : BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 CHECK_NUMBER_COERCE_MARKER (bound, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 lim = XINT (bound);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 if (n > 0 ? lim < point : lim > point)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 error ("Invalid search bound (wrong side of point)");
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 if (lim > ZV)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 lim = ZV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 if (lim < BEGV)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 lim = BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 np = search_buffer (string, point, lim, n, RE,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 (!NILP (current_buffer->case_fold_search)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 ? XSTRING (current_buffer->case_canon_table)->data : 0),
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 (!NILP (current_buffer->case_fold_search)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 ? XSTRING (current_buffer->case_eqv_table)->data : 0));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 if (np <= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 if (NILP (noerror))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 return signal_failure (string);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 if (!EQ (noerror, Qt))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 if (lim < BEGV || lim > ZV)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 abort ();
1878
1c26d0049d4f (search_command): #if 0 previous change.
Richard M. Stallman <rms@gnu.org>
parents: 1877
diff changeset
560 SET_PT (lim);
1c26d0049d4f (search_command): #if 0 previous change.
Richard M. Stallman <rms@gnu.org>
parents: 1877
diff changeset
561 return Qnil;
1c26d0049d4f (search_command): #if 0 previous change.
Richard M. Stallman <rms@gnu.org>
parents: 1877
diff changeset
562 #if 0 /* This would be clean, but maybe programs depend on
1c26d0049d4f (search_command): #if 0 previous change.
Richard M. Stallman <rms@gnu.org>
parents: 1877
diff changeset
563 a value of nil here. */
1877
7786f61ec635 (search_command): When moving to LIM on failure, return LIM.
Richard M. Stallman <rms@gnu.org>
parents: 1684
diff changeset
564 np = lim;
1878
1c26d0049d4f (search_command): #if 0 previous change.
Richard M. Stallman <rms@gnu.org>
parents: 1877
diff changeset
565 #endif
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 }
1877
7786f61ec635 (search_command): When moving to LIM on failure, return LIM.
Richard M. Stallman <rms@gnu.org>
parents: 1684
diff changeset
567 else
7786f61ec635 (search_command): When moving to LIM on failure, return LIM.
Richard M. Stallman <rms@gnu.org>
parents: 1684
diff changeset
568 return Qnil;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 if (np < BEGV || np > ZV)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 abort ();
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 SET_PT (np);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 return make_number (np);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 /* search for the n'th occurrence of STRING in the current buffer,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 starting at position POS and stopping at position LIM,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 treating PAT as a literal string if RE is false or as
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 a regular expression if RE is true.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 If N is positive, searching is forward and LIM must be greater than POS.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 If N is negative, searching is backward and LIM must be less than POS.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 Returns -x if only N-x occurrences found (x > 0),
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 or else the position at the beginning of the Nth occurrence
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 (if searching backward) or the end (if searching forward). */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 search_buffer (string, pos, lim, n, RE, trt, inverse_trt)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 Lisp_Object string;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 int pos;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 int lim;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 int n;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 int RE;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 register unsigned char *trt;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 register unsigned char *inverse_trt;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 int len = XSTRING (string)->size;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 unsigned char *base_pat = XSTRING (string)->data;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 register int *BM_tab;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 int *BM_tab_base;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 register int direction = ((n > 0) ? 1 : -1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 register int dirlen;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 int infinity, limit, k, stride_for_teases;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 register unsigned char *pat, *cursor, *p_limit;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 register int i, j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 unsigned char *p1, *p2;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 int s1, s2;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 /* Null string is found at starting position. */
4299
7a2e1d7362c5 (search_buffer): If n is 0, just return POS.
Richard M. Stallman <rms@gnu.org>
parents: 3615
diff changeset
613 if (len == 0)
7a2e1d7362c5 (search_buffer): If n is 0, just return POS.
Richard M. Stallman <rms@gnu.org>
parents: 3615
diff changeset
614 return pos;
7a2e1d7362c5 (search_buffer): If n is 0, just return POS.
Richard M. Stallman <rms@gnu.org>
parents: 3615
diff changeset
615
7a2e1d7362c5 (search_buffer): If n is 0, just return POS.
Richard M. Stallman <rms@gnu.org>
parents: 3615
diff changeset
616 /* Searching 0 times means don't move. */
7a2e1d7362c5 (search_buffer): If n is 0, just return POS.
Richard M. Stallman <rms@gnu.org>
parents: 3615
diff changeset
617 if (n == 0)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 return pos;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 if (RE)
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
621 compile_pattern (string, &searchbuf, &search_regs, (char *) trt);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 if (RE /* Here we detect whether the */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 /* generality of an RE search is */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 /* really needed. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 /* first item is "exact match" */
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
627 && *(searchbuf.buffer) == (char) RE_EXACTN_VALUE
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 && searchbuf.buffer[1] + 2 == searchbuf.used) /*first is ONLY item */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 RE = 0; /* can do straight (non RE) search */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 pat = (base_pat = (unsigned char *) searchbuf.buffer + 2);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 /* trt already applied */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 len = searchbuf.used - 2;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 else if (!RE)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 pat = (unsigned char *) alloca (len);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 for (i = len; i--;) /* Copy the pattern; apply trt */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 *pat++ = (((int) trt) ? trt [*base_pat++] : *base_pat++);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 pat -= len; base_pat = pat;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 if (RE)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 immediate_quit = 1; /* Quit immediately if user types ^G,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 because letting this function finish
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 can take too long. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 QUIT; /* Do a pending quit right away,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 to avoid paradoxical behavior */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 /* Get pointers and sizes of the two strings
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 that make up the visible portion of the buffer. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 p1 = BEGV_ADDR;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 s1 = GPT - BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 p2 = GAP_END_ADDR;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 s2 = ZV - GPT;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 if (s1 < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 p2 = p1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 s2 = ZV - BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 s1 = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 if (s2 < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 s1 = ZV - BEGV;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 s2 = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 while (n < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 {
2475
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
671 int val;
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
672 val = re_search_2 (&searchbuf, (char *) p1, s1, (char *) p2, s2,
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
673 pos - BEGV, lim - pos, &search_regs,
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
674 /* Don't allow match past current point */
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
675 pos - BEGV);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 if (val == -2)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 matcher_overflow ();
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 if (val >= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 j = BEGV;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
681 for (i = 0; i < search_regs.num_regs; i++)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 if (search_regs.start[i] >= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 search_regs.start[i] += j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 search_regs.end[i] += j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 }
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
687 XSET (last_thing_searched, Lisp_Buffer, current_buffer);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 /* Set pos to the new position. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 pos = search_regs.start[0];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 immediate_quit = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 return (n);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 n++;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 while (n > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 {
2475
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
700 int val;
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
701 val = re_search_2 (&searchbuf, (char *) p1, s1, (char *) p2, s2,
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
702 pos - BEGV, lim - pos, &search_regs,
052bbdf1b817 (search_buffer): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
703 lim - BEGV);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 if (val == -2)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 matcher_overflow ();
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 if (val >= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 j = BEGV;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
709 for (i = 0; i < search_regs.num_regs; i++)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 if (search_regs.start[i] >= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 search_regs.start[i] += j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 search_regs.end[i] += j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 }
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
715 XSET (last_thing_searched, Lisp_Buffer, current_buffer);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 pos = search_regs.end[0];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 immediate_quit = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 return (0 - n);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 n--;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 immediate_quit = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 return (pos);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 else /* non-RE case */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 #ifdef C_ALLOCA
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 int BM_tab_space[0400];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 BM_tab = &BM_tab_space[0];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 #else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 BM_tab = (int *) alloca (0400 * sizeof (int));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 #endif
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 /* The general approach is that we are going to maintain that we know */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 /* the first (closest to the present position, in whatever direction */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 /* we're searching) character that could possibly be the last */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 /* (furthest from present position) character of a valid match. We */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 /* advance the state of our knowledge by looking at that character */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 /* and seeing whether it indeed matches the last character of the */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 /* pattern. If it does, we take a closer look. If it does not, we */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 /* move our pointer (to putative last characters) as far as is */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 /* logically possible. This amount of movement, which I call a */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 /* stride, will be the length of the pattern if the actual character */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 /* appears nowhere in the pattern, otherwise it will be the distance */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 /* from the last occurrence of that character to the end of the */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 /* pattern. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 /* As a coding trick, an enormous stride is coded into the table for */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 /* characters that match the last character. This allows use of only */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 /* a single test, a test for having gone past the end of the */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 /* permissible match region, to test for both possible matches (when */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 /* the stride goes past the end immediately) and failure to */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 /* match (where you get nudged past the end one stride at a time). */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 /* Here we make a "mickey mouse" BM table. The stride of the search */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 /* is determined only by the last character of the putative match. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 /* If that character does not match, we will stride the proper */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 /* distance to propose a match that superimposes it on the last */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 /* instance of a character that matches it (per trt), or misses */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 /* it entirely if there is none. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 dirlen = len * direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 infinity = dirlen - (lim + pos + len + len) * direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 if (direction < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766 pat = (base_pat += len - 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 BM_tab_base = BM_tab;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 BM_tab += 0400;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 j = dirlen; /* to get it in a register */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770 /* A character that does not appear in the pattern induces a */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 /* stride equal to the pattern length. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 while (BM_tab_base != BM_tab)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 *--BM_tab = j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 *--BM_tab = j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 *--BM_tab = j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 *--BM_tab = j;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 i = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 while (i != infinity)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 j = pat[i]; i += direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 if (i == dirlen) i = infinity;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 if ((int) trt)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 k = (j = trt[j]);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 if (i == infinity)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 stride_for_teases = BM_tab[j];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 BM_tab[j] = dirlen - i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 /* A translation table is accompanied by its inverse -- see */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 /* comment following downcase_table for details */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 while ((j = inverse_trt[j]) != k)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 BM_tab[j] = dirlen - i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 if (i == infinity)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 stride_for_teases = BM_tab[j];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 BM_tab[j] = dirlen - i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 /* stride_for_teases tells how much to stride if we get a */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 /* match on the far character but are subsequently */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 /* disappointed, by recording what the stride would have been */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 /* for that character if the last character had been */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 /* different. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 infinity = dirlen - infinity;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 pos += dirlen - ((direction > 0) ? direction : 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 /* loop invariant - pos points at where last char (first char if reverse)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 of pattern would align in a possible match. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 while (n != 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813 if ((lim - pos - (direction > 0)) * direction < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 return (n * (0 - direction));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 /* First we do the part we can by pointers (maybe nothing) */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 QUIT;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 pat = base_pat;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 limit = pos - dirlen + direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 limit = ((direction > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 ? BUFFER_CEILING_OF (limit)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 : BUFFER_FLOOR_OF (limit));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 /* LIMIT is now the last (not beyond-last!) value
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 POS can take on without hitting edge of buffer or the gap. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 limit = ((direction > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 ? min (lim - 1, min (limit, pos + 20000))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 : max (lim, max (limit, pos - 20000)));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 if ((limit - pos) * direction > 20)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 p_limit = &FETCH_CHAR (limit);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 p2 = (cursor = &FETCH_CHAR (pos));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 /* In this loop, pos + cursor - p2 is the surrogate for pos */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 while (1) /* use one cursor setting as long as i can */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 if (direction > 0) /* worth duplicating */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 /* Use signed comparison if appropriate
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 to make cursor+infinity sure to be > p_limit.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 Assuming that the buffer lies in a range of addresses
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 that are all "positive" (as ints) or all "negative",
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 either kind of comparison will work as long
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 as we don't step by infinity. So pick the kind
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 that works when we do step by infinity. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 if ((int) (p_limit + infinity) > (int) p_limit)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 while ((int) cursor <= (int) p_limit)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 cursor += BM_tab[*cursor];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 while ((unsigned int) cursor <= (unsigned int) p_limit)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 cursor += BM_tab[*cursor];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 if ((int) (p_limit + infinity) < (int) p_limit)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 while ((int) cursor >= (int) p_limit)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 cursor += BM_tab[*cursor];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 while ((unsigned int) cursor >= (unsigned int) p_limit)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 cursor += BM_tab[*cursor];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 /* If you are here, cursor is beyond the end of the searched region. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 /* This can happen if you match on the far character of the pattern, */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 /* because the "stride" of that character is infinity, a number able */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 /* to throw you well beyond the end of the search. It can also */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 /* happen if you fail to match within the permitted region and would */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 /* otherwise try a character beyond that region */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 if ((cursor - p_limit) * direction <= len)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 break; /* a small overrun is genuine */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 cursor -= infinity; /* large overrun = hit */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 i = dirlen - direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 if ((int) trt)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 while ((i -= direction) + direction != 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 if (pat[i] != trt[*(cursor -= direction)])
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 break;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 while ((i -= direction) + direction != 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 if (pat[i] != *(cursor -= direction))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 break;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 cursor += dirlen - i - direction; /* fix cursor */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 if (i + direction == 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 cursor -= direction;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
885
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
886 /* Make sure we have registers in which to store
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
887 the match position. */
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
888 if (search_regs.num_regs == 0)
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
889 {
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
890 regoff_t *starts, *ends;
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
891
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
892 starts =
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
893 (regoff_t *) xmalloc (2 * sizeof (regoff_t));
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
894 ends =
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
895 (regoff_t *) xmalloc (2 * sizeof (regoff_t));
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
896 BLOCK_INPUT;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
897 re_set_registers (&searchbuf,
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
898 &search_regs,
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
899 2, starts, ends);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
900 UNBLOCK_INPUT;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
901 }
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
902
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 search_regs.start[0]
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
904 = pos + cursor - p2 + ((direction > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 ? 1 - len : 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906 search_regs.end[0] = len + search_regs.start[0];
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
907 XSET (last_thing_searched, Lisp_Buffer, current_buffer);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 if ((n -= direction) != 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 cursor += dirlen; /* to resume search */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 return ((direction > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 ? search_regs.end[0] : search_regs.start[0]);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 cursor += stride_for_teases; /* <sigh> we lose - */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 pos += cursor - p2;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920 /* Now we'll pick up a clump that has to be done the hard */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 /* way because it covers a discontinuity */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923 limit = ((direction > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
924 ? BUFFER_CEILING_OF (pos - dirlen + 1)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 : BUFFER_FLOOR_OF (pos - dirlen - 1));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 limit = ((direction > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 ? min (limit + len, lim - 1)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928 : max (limit - len, lim));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 /* LIMIT is now the last value POS can have
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 and still be valid for a possible match. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 while (1)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933 /* This loop can be coded for space rather than */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 /* speed because it will usually run only once. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 /* (the reach is at most len + 21, and typically */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 /* does not exceed len) */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 while ((limit - pos) * direction >= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 pos += BM_tab[FETCH_CHAR(pos)];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 /* now run the same tests to distinguish going off the */
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2961
diff changeset
940 /* end, a match or a phony match. */
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 if ((pos - limit) * direction <= len)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 break; /* ran off the end */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 /* Found what might be a match.
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 Set POS back to last (first if reverse) char pos. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 pos -= infinity;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 i = dirlen - direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 while ((i -= direction) + direction != 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 pos -= direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 if (pat[i] != (((int) trt)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 ? trt[FETCH_CHAR(pos)]
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 : FETCH_CHAR (pos)))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 break;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 /* Above loop has moved POS part or all the way
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 back to the first char pos (last char pos if reverse).
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 Set it once again at the last (first if reverse) char. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 pos += dirlen - i- direction;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 if (i + direction == 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 pos -= direction;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
962
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
963 /* Make sure we have registers in which to store
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
964 the match position. */
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
965 if (search_regs.num_regs == 0)
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
966 {
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
967 regoff_t *starts, *ends;
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
968
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
969 starts =
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
970 (regoff_t *) xmalloc (2 * sizeof (regoff_t));
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
971 ends =
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
972 (regoff_t *) xmalloc (2 * sizeof (regoff_t));
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
973 BLOCK_INPUT;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
974 re_set_registers (&searchbuf,
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
975 &search_regs,
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
976 2, starts, ends);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
977 UNBLOCK_INPUT;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
978 }
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
979
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 search_regs.start[0]
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981 = pos + ((direction > 0) ? 1 - len : 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 search_regs.end[0] = len + search_regs.start[0];
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
983 XSET (last_thing_searched, Lisp_Buffer, current_buffer);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 if ((n -= direction) != 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 pos += dirlen; /* to resume search */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 return ((direction > 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 ? search_regs.end[0] : search_regs.start[0]);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 pos += stride_for_teases;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 /* We have done one clump. Can we continue? */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 if ((lim - pos) * direction < 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 return ((0 - n) * direction);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 return pos;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 /* Given a string of words separated by word delimiters,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 compute a regexp that matches those exact words
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 separated by arbitrary punctuation. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 static Lisp_Object
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 wordify (string)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 Lisp_Object string;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 register unsigned char *p, *o;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 register int i, len, punct_count = 0, word_count = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 Lisp_Object val;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 CHECK_STRING (string, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 p = XSTRING (string)->data;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 len = XSTRING (string)->size;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 for (i = 0; i < len; i++)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 if (SYNTAX (p[i]) != Sword)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 punct_count++;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 if (i > 0 && SYNTAX (p[i-1]) == Sword) word_count++;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 if (SYNTAX (p[len-1]) == Sword) word_count++;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 if (!word_count) return build_string ("");
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 val = make_string (p, len - punct_count + 5 * (word_count - 1) + 4);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 o = XSTRING (val)->data;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 *o++ = '\\';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 *o++ = 'b';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 for (i = 0; i < len; i++)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 if (SYNTAX (p[i]) == Sword)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 *o++ = p[i];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 else if (i > 0 && SYNTAX (p[i-1]) == Sword && --word_count)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 *o++ = '\\';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 *o++ = 'W';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 *o++ = '\\';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 *o++ = 'W';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 *o++ = '*';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 *o++ = '\\';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 *o++ = 'b';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 return val;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 DEFUN ("search-backward", Fsearch_backward, Ssearch_backward, 1, 4,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 "sSearch backward: ",
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 "Search backward from point for STRING.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 Set point to the beginning of the occurrence found, and return point.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 An optional second argument bounds the search; it is a buffer position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 The match found must not extend before that position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 Optional third argument, if t, means if fail just return nil (no error).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 If not nil and not t, position at limit of search and return nil.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059 Optional fourth argument is repeat count--search for successive occurrences.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 See also the functions `match-beginning', `match-end' and `replace-match'.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 (string, bound, noerror, count)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 Lisp_Object string, bound, noerror, count;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 return search_command (string, bound, noerror, count, -1, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 DEFUN ("search-forward", Fsearch_forward, Ssearch_forward, 1, 4, "sSearch: ",
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 "Search forward from point for STRING.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 Set point to the end of the occurrence found, and return point.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 An optional second argument bounds the search; it is a buffer position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 The match found must not extend after that position. nil is equivalent\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 to (point-max).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 Optional third argument, if t, means if fail just return nil (no error).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 If not nil and not t, move to limit of search and return nil.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 Optional fourth argument is repeat count--search for successive occurrences.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 See also the functions `match-beginning', `match-end' and `replace-match'.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 (string, bound, noerror, count)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 Lisp_Object string, bound, noerror, count;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 return search_command (string, bound, noerror, count, 1, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 DEFUN ("word-search-backward", Fword_search_backward, Sword_search_backward, 1, 4,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 "sWord search backward: ",
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085 "Search backward from point for STRING, ignoring differences in punctuation.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 Set point to the beginning of the occurrence found, and return point.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 An optional second argument bounds the search; it is a buffer position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 The match found must not extend before that position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 Optional third argument, if t, means if fail just return nil (no error).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 If not nil and not t, move to limit of search and return nil.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 Optional fourth argument is repeat count--search for successive occurrences.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 (string, bound, noerror, count)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 Lisp_Object string, bound, noerror, count;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 return search_command (wordify (string), bound, noerror, count, -1, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 DEFUN ("word-search-forward", Fword_search_forward, Sword_search_forward, 1, 4,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 "sWord search: ",
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 "Search forward from point for STRING, ignoring differences in punctuation.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 Set point to the end of the occurrence found, and return point.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 An optional second argument bounds the search; it is a buffer position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 The match found must not extend after that position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 Optional third argument, if t, means if fail just return nil (no error).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 If not nil and not t, move to limit of search and return nil.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 Optional fourth argument is repeat count--search for successive occurrences.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 (string, bound, noerror, count)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 Lisp_Object string, bound, noerror, count;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 return search_command (wordify (string), bound, noerror, count, 1, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 DEFUN ("re-search-backward", Fre_search_backward, Sre_search_backward, 1, 4,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 "sRE search backward: ",
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 "Search backward from point for match for regular expression REGEXP.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 Set point to the beginning of the match, and return point.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 The match found is the one starting last in the buffer\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 and yet ending before the place the origin of the search.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 An optional second argument bounds the search; it is a buffer position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 The match found must start at or after that position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 Optional third argument, if t, means if fail just return nil (no error).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 If not nil and not t, move to limit of search and return nil.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 Optional fourth argument is repeat count--search for successive occurrences.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 See also the functions `match-beginning', `match-end' and `replace-match'.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 (string, bound, noerror, count)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 Lisp_Object string, bound, noerror, count;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 return search_command (string, bound, noerror, count, -1, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 DEFUN ("re-search-forward", Fre_search_forward, Sre_search_forward, 1, 4,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 "sRE search: ",
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 "Search forward from point for regular expression REGEXP.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 Set point to the end of the occurrence found, and return point.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 An optional second argument bounds the search; it is a buffer position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 The match found must not extend after that position.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 Optional third argument, if t, means if fail just return nil (no error).\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 If not nil and not t, move to limit of search and return nil.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 Optional fourth argument is repeat count--search for successive occurrences.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 See also the functions `match-beginning', `match-end' and `replace-match'.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 (string, bound, noerror, count)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 Lisp_Object string, bound, noerror, count;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 return search_command (string, bound, noerror, count, 1, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 DEFUN ("replace-match", Freplace_match, Sreplace_match, 1, 3, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 "Replace text matched by last search with NEWTEXT.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 If second arg FIXEDCASE is non-nil, do not alter case of replacement text.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 Otherwise convert to all caps or cap initials, like replaced text.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 If third arg LITERAL is non-nil, insert NEWTEXT literally.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 Otherwise treat `\\' as special:\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 `\\&' in NEWTEXT means substitute original matched text.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 `\\N' means substitute what matched the Nth `\\(...\\)'.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 If Nth parens didn't match, substitute nothing.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 `\\\\' means insert one `\\'.\n\
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1157 FIXEDCASE and LITERAL are optional arguments.\n\
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 Leaves point at end of replacement text.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 (string, fixedcase, literal)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 Lisp_Object string, fixedcase, literal;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 enum { nochange, all_caps, cap_initial } case_action;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 register int pos, last;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 int some_multiletter_word;
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1165 int some_lowercase;
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1166 int some_uppercase_initial;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 register int c, prevc;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 int inslen;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 CHECK_STRING (string, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 case_action = nochange; /* We tried an initialization */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 /* but some C compilers blew it */
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1174
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1175 if (search_regs.num_regs <= 0)
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1176 error ("replace-match called before any match found");
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1177
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 if (search_regs.start[0] < BEGV
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 || search_regs.start[0] > search_regs.end[0]
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 || search_regs.end[0] > ZV)
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1181 args_out_of_range (make_number (search_regs.start[0]),
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1182 make_number (search_regs.end[0]));
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 if (NILP (fixedcase))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 /* Decide how to casify by examining the matched text. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 last = search_regs.end[0];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 prevc = '\n';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 case_action = all_caps;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 /* some_multiletter_word is set nonzero if any original word
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 is more than one letter long. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 some_multiletter_word = 0;
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1195 some_lowercase = 0;
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1196 some_uppercase_initial = 0;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 for (pos = search_regs.start[0]; pos < last; pos++)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 c = FETCH_CHAR (pos);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 if (LOWERCASEP (c))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 /* Cannot be all caps if any original char is lower case */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1205 some_lowercase = 1;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 if (SYNTAX (prevc) != Sword)
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1207 ;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 some_multiletter_word = 1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 else if (!NOCASEP (c))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 {
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1213 if (SYNTAX (prevc) != Sword)
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1214 some_uppercase_initial = 1;
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1215 else
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 some_multiletter_word = 1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219 prevc = c;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1222 /* Convert to all caps if the old text is all caps
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1223 and has at least one multiletter word. */
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1224 if (! some_lowercase && some_multiletter_word)
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1225 case_action = all_caps;
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1226 /* Capitalize each word, if the old text has a capitalized word. */
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1227 else if (some_uppercase_initial)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 case_action = cap_initial;
2393
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1229 else
a35d2c5cbb3b (Freplace_match): Clean up criterion about converting case.
Richard M. Stallman <rms@gnu.org>
parents: 1926
diff changeset
1230 case_action = nochange;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232
2655
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1233 /* We insert the replacement text before the old text, and then
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1234 delete the original text. This means that markers at the
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1235 beginning or end of the original will float to the corresponding
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1236 position in the replacement. */
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1237 SET_PT (search_regs.start[0]);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 if (!NILP (literal))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 Finsert (1, &string);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 struct gcpro gcpro1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 GCPRO1 (string);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 for (pos = 0; pos < XSTRING (string)->size; pos++)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 {
2655
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1247 int offset = point - search_regs.start[0];
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1248
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 c = XSTRING (string)->data[pos];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 if (c == '\\')
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 c = XSTRING (string)->data[++pos];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 if (c == '&')
2655
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1254 Finsert_buffer_substring
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1255 (Fcurrent_buffer (),
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1256 make_number (search_regs.start[0] + offset),
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1257 make_number (search_regs.end[0] + offset));
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1258 else if (c >= '1' && c <= search_regs.num_regs + '0')
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 if (search_regs.start[c - '0'] >= 1)
2655
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1261 Finsert_buffer_substring
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1262 (Fcurrent_buffer (),
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1263 make_number (search_regs.start[c - '0'] + offset),
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1264 make_number (search_regs.end[c - '0'] + offset));
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 insert_char (c);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 insert_char (c);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 UNGCPRO;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274
2655
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1275 inslen = point - (search_regs.start[0]);
594a33ffed85 * search.c (Freplace_match): Arrange for markers sitting at the
Jim Blandy <jimb@redhat.com>
parents: 2475
diff changeset
1276 del_range (search_regs.start[0] + inslen, search_regs.end[0] + inslen);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 if (case_action == all_caps)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 Fupcase_region (make_number (point - inslen), make_number (point));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 else if (case_action == cap_initial)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 upcase_initials_region (make_number (point - inslen), make_number (point));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 return Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 static Lisp_Object
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 match_limit (num, beginningp)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 Lisp_Object num;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 int beginningp;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 register int n;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 CHECK_NUMBER (num, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 n = XINT (num);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1294 if (n < 0 || n >= search_regs.num_regs)
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1295 args_out_of_range (num, make_number (search_regs.num_regs));
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1296 if (search_regs.num_regs <= 0
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1297 || search_regs.start[n] < 0)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 return Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 return (make_number ((beginningp) ? search_regs.start[n]
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 : search_regs.end[n]));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 DEFUN ("match-beginning", Fmatch_beginning, Smatch_beginning, 1, 1, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 "Return position of start of text matched by last search.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 ARG, a number, specifies which parenthesized expression in the last regexp.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 Value is nil if ARGth pair didn't match, or there were less than ARG pairs.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 Zero means the entire text matched by the whole regexp or whole string.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 (num)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 Lisp_Object num;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 return match_limit (num, 1);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 DEFUN ("match-end", Fmatch_end, Smatch_end, 1, 1, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 "Return position of end of text matched by last search.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 ARG, a number, specifies which parenthesized expression in the last regexp.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 Value is nil if ARGth pair didn't match, or there were less than ARG pairs.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 Zero means the entire text matched by the whole regexp or whole string.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 (num)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 Lisp_Object num;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 return match_limit (num, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 DEFUN ("match-data", Fmatch_data, Smatch_data, 0, 0, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 "Return a list containing all info on what the last search matched.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 Element 2N is `(match-beginning N)'; element 2N + 1 is `(match-end N)'.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 All the elements are markers or nil (nil if the Nth pair didn't match)\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 if the last match was on a buffer; integers or nil if a string was matched.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 Use `store-match-data' to reinstate the data in this list.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 ()
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 {
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1333 Lisp_Object *data;
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 int i, len;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1336 if (NILP (last_thing_searched))
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1337 error ("match-data called before any match found");
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1338
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1339 data = (Lisp_Object *) alloca ((2 * search_regs.num_regs)
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1340 * sizeof (Lisp_Object));
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1341
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 len = -1;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1343 for (i = 0; i < search_regs.num_regs; i++)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 int start = search_regs.start[i];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 if (start >= 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 {
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1348 if (EQ (last_thing_searched, Qt))
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 XFASTINT (data[2 * i]) = start;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 XFASTINT (data[2 * i + 1]) = search_regs.end[i];
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 }
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1353 else if (XTYPE (last_thing_searched) == Lisp_Buffer)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 data[2 * i] = Fmake_marker ();
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1356 Fset_marker (data[2 * i],
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1357 make_number (start),
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1358 last_thing_searched);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 data[2 * i + 1] = Fmake_marker ();
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 Fset_marker (data[2 * i + 1],
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1361 make_number (search_regs.end[i]),
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1362 last_thing_searched);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 }
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1364 else
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1365 /* last_thing_searched must always be Qt, a buffer, or Qnil. */
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1366 abort ();
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1367
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 len = i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 data[2 * i] = data [2 * i + 1] = Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 return Flist (2 * len + 2, data);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 DEFUN ("store-match-data", Fstore_match_data, Sstore_match_data, 1, 1, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 "Set internal data on last search match from elements of LIST.\n\
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 LIST should have been created by calling `match-data' previously.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 (list)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 register Lisp_Object list;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 register int i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 register Lisp_Object marker;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 if (!CONSP (list) && !NILP (list))
1926
952f2a18f83d * callint.c (Fcall_interactively): Pass the correct number of
Jim Blandy <jimb@redhat.com>
parents: 1896
diff changeset
1387 list = wrong_type_argument (Qconsp, list);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1389 /* Unless we find a marker with a buffer in LIST, assume that this
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1390 match data came from a string. */
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1391 last_thing_searched = Qt;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1392
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1393 /* Allocate registers if they don't already exist. */
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1394 {
1523
bd61aaa7828b * search.c (Fstore_match_data): Don't assume Flength returns an
Jim Blandy <jimb@redhat.com>
parents: 1413
diff changeset
1395 int length = XFASTINT (Flength (list)) / 2;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1396
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1397 if (length > search_regs.num_regs)
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1398 {
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1399 if (search_regs.num_regs == 0)
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1400 {
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1401 search_regs.start
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1402 = (regoff_t *) xmalloc (length * sizeof (regoff_t));
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1403 search_regs.end
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1404 = (regoff_t *) xmalloc (length * sizeof (regoff_t));
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1405 }
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1406 else
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1407 {
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1408 search_regs.start
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1409 = (regoff_t *) xrealloc (search_regs.start,
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1410 length * sizeof (regoff_t));
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1411 search_regs.end
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1412 = (regoff_t *) xrealloc (search_regs.end,
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1413 length * sizeof (regoff_t));
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1414 }
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1415
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
1416 BLOCK_INPUT;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1417 re_set_registers (&searchbuf, &search_regs, length,
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1418 search_regs.start, search_regs.end);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2393
diff changeset
1419 UNBLOCK_INPUT;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1420 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1421 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1422
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 605
diff changeset
1423 for (i = 0; i < search_regs.num_regs; i++)
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 marker = Fcar (list);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 if (NILP (marker))
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 search_regs.start[i] = -1;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 list = Fcdr (list);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 else
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 {
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1433 if (XTYPE (marker) == Lisp_Marker)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1434 {
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1435 if (XMARKER (marker)->buffer == 0)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1436 XFASTINT (marker) = 0;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1437 else
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1438 XSET (last_thing_searched, Lisp_Buffer,
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1439 XMARKER (marker)->buffer);
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1440 }
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 CHECK_NUMBER_COERCE_MARKER (marker, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 search_regs.start[i] = XINT (marker);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 list = Fcdr (list);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 marker = Fcar (list);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 if (XTYPE (marker) == Lisp_Marker
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 && XMARKER (marker)->buffer == 0)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 XFASTINT (marker) = 0;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 CHECK_NUMBER_COERCE_MARKER (marker, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 search_regs.end[i] = XINT (marker);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 list = Fcdr (list);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 return Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 /* Quote a string to inactivate reg-expr chars */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 DEFUN ("regexp-quote", Fregexp_quote, Sregexp_quote, 1, 1, 0,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 "Return a regexp string which matches exactly STRING and nothing else.")
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 (str)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 Lisp_Object str;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 register unsigned char *in, *out, *end;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 register unsigned char *temp;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470 CHECK_STRING (str, 0);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 temp = (unsigned char *) alloca (XSTRING (str)->size * 2);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474 /* Now copy the data into the new string, inserting escapes. */
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1476 in = XSTRING (str)->data;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 end = in + XSTRING (str)->size;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 out = temp;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 for (; in != end; in++)
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 if (*in == '[' || *in == ']'
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 || *in == '*' || *in == '.' || *in == '\\'
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 || *in == '?' || *in == '+'
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 || *in == '^' || *in == '$')
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 *out++ = '\\';
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487 *out++ = *in;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 return make_string (temp, out - temp);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1491 }
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 syms_of_search ()
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 {
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495 register int i;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497 searchbuf.allocated = 100;
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 603
diff changeset
1498 searchbuf.buffer = (unsigned char *) malloc (searchbuf.allocated);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499 searchbuf.fastmap = search_fastmap;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 Qsearch_failed = intern ("search-failed");
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 staticpro (&Qsearch_failed);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 Qinvalid_regexp = intern ("invalid-regexp");
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504 staticpro (&Qinvalid_regexp);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 Fput (Qsearch_failed, Qerror_conditions,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 Fcons (Qsearch_failed, Fcons (Qerror, Qnil)));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 Fput (Qsearch_failed, Qerror_message,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1509 build_string ("Search failed"));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511 Fput (Qinvalid_regexp, Qerror_conditions,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 Fcons (Qinvalid_regexp, Fcons (Qerror, Qnil)));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 Fput (Qinvalid_regexp, Qerror_message,
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514 build_string ("Invalid regexp"));
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 last_regexp = Qnil;
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 staticpro (&last_regexp);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1519 last_thing_searched = Qnil;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1520 staticpro (&last_thing_searched);
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1521
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 defsubr (&Sstring_match);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 defsubr (&Slooking_at);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 defsubr (&Sskip_chars_forward);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 defsubr (&Sskip_chars_backward);
1896
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
1526 defsubr (&Sskip_syntax_forward);
10895ac08bc6 (Fskip_syntax_backward): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1878
diff changeset
1527 defsubr (&Sskip_syntax_backward);
603
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 defsubr (&Ssearch_forward);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 defsubr (&Ssearch_backward);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530 defsubr (&Sword_search_forward);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 defsubr (&Sword_search_backward);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 defsubr (&Sre_search_forward);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 defsubr (&Sre_search_backward);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 defsubr (&Sreplace_match);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 defsubr (&Smatch_beginning);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 defsubr (&Smatch_end);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 defsubr (&Smatch_data);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 defsubr (&Sstore_match_data);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 defsubr (&Sregexp_quote);
470f556a9453 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 }