annotate src/regex.h @ 29473:80835e075d87

(display_line): Set row's and iterator's starts_in_middle_of_char_p and ends_in_middle_of_char_p flags. Set cursor even if row ends in the middle of a character. (dump_glyph_row): Print values of new flags. (redisplay_window) <cursor movement in unchanged window>: When point has been moved forward, and PT is at the end of the cursor row, don't place the cursor in the next row if the cursor row ends in the middle of a character or at ZV.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 06 Jun 2000 20:02:39 +0000
parents 975fe3d8922e
children a1149eb06423
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
1 /* Definitions for data structures and routines for the regular
2454
d77bb274b15c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1797
diff changeset
2 expression library, version 0.12.
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
3
28061
93767747c32d Update the copyright.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27692
diff changeset
4 Copyright (C) 1985,89,90,91,92,93,95,2000 Free Software Foundation, Inc.
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
5
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
6 This program is free software; you can redistribute it and/or modify
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
9 any later version.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
10
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
11 This program is distributed in the hope that it will be useful,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
15
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
17 along with this program; if not, write to the Free Software
14414
6e7bb4bd5010 Update FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 13249
diff changeset
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
6e7bb4bd5010 Update FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 13249
diff changeset
19 USA. */
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
20
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
21 #ifndef __REGEXP_LIBRARY_H__
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
22 #define __REGEXP_LIBRARY_H__
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
23
1637
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
24 /* POSIX says that <sys/types.h> must be included (by the caller) before
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
25 <regex.h>. */
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
26
11840
8902ebe369bd [VMS]: Don't #include <stddef.h> if _POSIX_SOURCE or _POSIX_C_SOURCE is
Roland McGrath <roland@gnu.org>
parents: 9982
diff changeset
27 #if !defined (_POSIX_C_SOURCE) && !defined (_POSIX_SOURCE) && defined (VMS)
1637
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
28 /* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
29 should be there. */
1579
bcd84459e68a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1544
diff changeset
30 #include <stddef.h>
bcd84459e68a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1544
diff changeset
31 #endif
bcd84459e68a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1544
diff changeset
32
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
33
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
34 /* The following bits are used to determine the regexp syntax we
27692
bb0e45f6ca86 * regex.h (RE_SYNTAX_EMACS): Add RE_CHAR_CLASSES and RE_INTERVALS
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27450
diff changeset
35 recognize. The set/not-set meanings where historically chosen so
bb0e45f6ca86 * regex.h (RE_SYNTAX_EMACS): Add RE_CHAR_CLASSES and RE_INTERVALS
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27450
diff changeset
36 that Emacs syntax had the value 0.
bb0e45f6ca86 * regex.h (RE_SYNTAX_EMACS): Add RE_CHAR_CLASSES and RE_INTERVALS
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27450
diff changeset
37 The bits are given in alphabetical order, and
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
38 the definitions shifted by one from the previous bit; thus, when we
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
39 add or remove a bit, only one other definition need change. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
40 typedef unsigned reg_syntax_t;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
41
27450
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
42 /* If this bit is set, then even *?, +? and ?? match greedily. */
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
43 #define RE_ALL_GREEDY (1)
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
44
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
45 /* If this bit is not set, then \ inside a bracket expression is literal.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
46 If set, then such a \ quotes the following character. */
27450
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
47 #define RE_BACKSLASH_ESCAPE_IN_LISTS (RE_ALL_GREEDY << 1)
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
48
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
49 /* If this bit is not set, then + and ? are operators, and \+ and \? are
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
50 literals.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
51 If set, then \+ and \? are operators and + and ? are literals. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
52 #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
53
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
54 /* If this bit is set, then character classes are supported. They are:
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
55 [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
56 [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
57 If not set, then character classes are not supported. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
58 #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
59
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
60 /* If this bit is set, then ^ and $ are always anchors (outside bracket
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
61 expressions, of course).
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
62 If this bit is not set, then it depends:
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
63 ^ is an anchor if it is at the beginning of a regular
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
64 expression or after an open-group or an alternation operator;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
65 $ is an anchor if it is at the end of a regular expression, or
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
66 before a close-group or an alternation operator.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
67
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
68 This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
69 POSIX draft 11.2 says that * etc. in leading positions is undefined.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
70 We already implemented a previous draft which made those constructs
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
71 invalid, though, so we haven't changed the code back. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
72 #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
73
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
74 /* If this bit is set, then special characters are always special
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
75 regardless of where they are in the pattern.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
76 If this bit is not set, then special characters are special only in
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
77 some contexts; otherwise they are ordinary. Specifically,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
78 * + ? and intervals are only special when not after the beginning,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
79 open-group, or alternation operator. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
80 #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
81
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
82 /* If this bit is set, then *, +, ?, and { cannot be first in an re or
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
83 immediately after an alternation or begin-group operator. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
84 #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
85
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
86 /* If this bit is set, then . matches newline.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
87 If not set, then it doesn't. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
88 #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
89
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
90 /* If this bit is set, then . doesn't match NUL.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
91 If not set, then it does. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
92 #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
93
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
94 /* If this bit is set, nonmatching lists [^...] do not match newline.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
95 If not set, they do. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
96 #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
97
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
98 /* If this bit is set, either \{...\} or {...} defines an
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
99 interval, depending on RE_NO_BK_BRACES.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
100 If not set, \{, \}, {, and } are literals. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
101 #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
102
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
103 /* If this bit is set, +, ? and | aren't recognized as operators.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
104 If not set, they are. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
105 #define RE_LIMITED_OPS (RE_INTERVALS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
106
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
107 /* If this bit is set, newline is an alternation operator.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
108 If not set, newline is literal. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
109 #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
110
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
111 /* If this bit is set, then `{...}' defines an interval, and \{ and \}
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
112 are literals.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
113 If not set, then `\{...\}' defines an interval. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
114 #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
115
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
116 /* If this bit is set, (...) defines a group, and \( and \) are literals.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
117 If not set, \(...\) defines a group, and ( and ) are literals. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
118 #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
119
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
120 /* If this bit is set, then \<digit> matches <digit>.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
121 If not set, then \<digit> is a back-reference. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
122 #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
123
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
124 /* If this bit is set, then | is an alternation operator, and \| is literal.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
125 If not set, then \| is an alternation operator, and | is literal. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
126 #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
127
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
128 /* If this bit is set, then an ending range point collating higher
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
129 than the starting range point, as in [z-a], is invalid.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
130 If not set, then when ending range point collates higher than the
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
131 starting range point, the range is ignored. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
132 #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
133
27450
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
134 /* If this bit is set, succeed as soon as we match the whole pattern,
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
135 without further backtracking. */
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
136 #define RE_NO_POSIX_BACKTRACKING (RE_NO_EMPTY_RANGES << 1)
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
137
28061
93767747c32d Update the copyright.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27692
diff changeset
138 /* If this bit is set, then (?:...) is treated as a shy group. */
93767747c32d Update the copyright.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27692
diff changeset
139 #define RE_SHY_GROUPS (RE_NO_POSIX_BACKTRACKING << 1)
93767747c32d Update the copyright.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27692
diff changeset
140
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
141 /* If this bit is set, then an unmatched ) is ordinary.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
142 If not set, then an unmatched ) is invalid. */
28061
93767747c32d Update the copyright.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27692
diff changeset
143 #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_SHY_GROUPS << 1)
9982
65d2d56726ea (RE_NO_POSIX_BACKTRACKING): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 9717
diff changeset
144
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
145 /* This global variable defines the particular regexp syntax to use (for
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
146 some interfaces). When a regexp is compiled, the syntax used is
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
147 stored in the pattern buffer, so changing this does not affect
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
148 already-compiled regexps. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
149 extern reg_syntax_t re_syntax_options;
18261
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
150
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
151 #ifdef emacs
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
152 /* In Emacs, this is the string or buffer in which we
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
153 are matching. It is used for looking up syntax properties. */
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
154 extern Lisp_Object re_match_object;
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
155 #endif
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
156
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
157
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
158 /* Define combinations of the above bits for the standard possibilities.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
159 (The [[[ comments delimit what gets put into the Texinfo file, so
27692
bb0e45f6ca86 * regex.h (RE_SYNTAX_EMACS): Add RE_CHAR_CLASSES and RE_INTERVALS
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27450
diff changeset
160 don't delete them!) */
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
161 /* [[[begin syntaxes]]] */
28061
93767747c32d Update the copyright.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27692
diff changeset
162 #define RE_SYNTAX_EMACS (RE_CHAR_CLASSES | RE_INTERVALS | RE_SHY_GROUPS)
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
163
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
164 #define RE_SYNTAX_AWK \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
165 (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
166 | RE_NO_BK_PARENS | RE_NO_BK_REFS \
1690
256b87a92511 *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 1637
diff changeset
167 | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
27450
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
168 | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_ALL_GREEDY)
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
169
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
170 #define RE_SYNTAX_POSIX_AWK \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
171 (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
172
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
173 #define RE_SYNTAX_GREP \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
174 (RE_BK_PLUS_QM | RE_CHAR_CLASSES \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
175 | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
27450
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
176 | RE_NEWLINE_ALT | RE_ALL_GREEDY)
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
177
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
178 #define RE_SYNTAX_EGREP \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
179 (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
180 | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
181 | RE_NEWLINE_ALT | RE_NO_BK_PARENS \
27450
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
182 | RE_NO_BK_VBAR | RE_ALL_GREEDY)
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
183
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
184 #define RE_SYNTAX_POSIX_EGREP \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
185 (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
186
1637
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
187 /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
188 #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
189
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
190 #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
191
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
192 /* Syntax bits common to both basic and extended POSIX regex syntax. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
193 #define _RE_SYNTAX_POSIX_COMMON \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
194 (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
27450
1f69452af743 Lost version containing non-greedy changes from Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 21561
diff changeset
195 | RE_INTERVALS | RE_NO_EMPTY_RANGES | RE_ALL_GREEDY)
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
196
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
197 #define RE_SYNTAX_POSIX_BASIC \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
198 (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
199
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
200 /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
201 RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
202 isn't minimal, since other operators, such as \`, aren't disabled. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
203 #define RE_SYNTAX_POSIX_MINIMAL_BASIC \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
204 (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
205
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
206 #define RE_SYNTAX_POSIX_EXTENDED \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
207 (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
208 | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
209 | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
210 | RE_UNMATCHED_RIGHT_PAREN_ORD)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
211
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
212 /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
213 replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
214 #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
215 (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
216 | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
217 | RE_NO_BK_PARENS | RE_NO_BK_REFS \
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
218 | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
219 /* [[[end syntaxes]]] */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
220
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
221 /* Maximum number of duplicates an interval can allow. Some systems
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
222 (erroneously) define this in other header files, but we want our
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
223 value, so remove any previous define. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
224 #ifdef RE_DUP_MAX
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
225 #undef RE_DUP_MAX
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
226 #endif
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
227 #define RE_DUP_MAX ((1 << 15) - 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
228
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
229
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
230 /* POSIX `cflags' bits (i.e., information for `regcomp'). */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
231
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
232 /* If this bit is set, then use extended regular expression syntax.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
233 If not set, then use basic regular expression syntax. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
234 #define REG_EXTENDED 1
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
235
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
236 /* If this bit is set, then ignore case when matching.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
237 If not set, then case is significant. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
238 #define REG_ICASE (REG_EXTENDED << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
239
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
240 /* If this bit is set, then anchors do not match at newline
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
241 characters in the string.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
242 If not set, then anchors do match at newlines. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
243 #define REG_NEWLINE (REG_ICASE << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
244
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
245 /* If this bit is set, then report only success or fail in regexec.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
246 If not set, then returns differ between not matching and errors. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
247 #define REG_NOSUB (REG_NEWLINE << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
248
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
249
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
250 /* POSIX `eflags' bits (i.e., information for regexec). */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
251
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
252 /* If this bit is set, then the beginning-of-line operator doesn't match
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
253 the beginning of the string (presumably because it's not the
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
254 beginning of a line).
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
255 If not set, then the beginning-of-line operator does match the
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
256 beginning of the string. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
257 #define REG_NOTBOL 1
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
258
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
259 /* Like REG_NOTBOL, except for the end-of-line. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
260 #define REG_NOTEOL (1 << 1)
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
261
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
262
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
263 /* If any error codes are removed, changed, or added, update the
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
264 `re_error_msg' table in regex.c. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
265 typedef enum
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
266 {
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
267 REG_NOERROR = 0, /* Success. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
268 REG_NOMATCH, /* Didn't find a match (for regexec). */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
269
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
270 /* POSIX regcomp return error codes. (In the order listed in the
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
271 standard.) */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
272 REG_BADPAT, /* Invalid pattern. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
273 REG_ECOLLATE, /* Not implemented. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
274 REG_ECTYPE, /* Invalid character class name. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
275 REG_EESCAPE, /* Trailing backslash. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
276 REG_ESUBREG, /* Invalid back reference. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
277 REG_EBRACK, /* Unmatched left bracket. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
278 REG_EPAREN, /* Parenthesis imbalance. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
279 REG_EBRACE, /* Unmatched \{. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
280 REG_BADBR, /* Invalid contents of \{\}. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
281 REG_ERANGE, /* Invalid range end. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
282 REG_ESPACE, /* Ran out of memory. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
283 REG_BADRPT, /* No preceding re for repetition op. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
284
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
285 /* Error codes we've added. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
286 REG_EEND, /* Premature end. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
287 REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
288 REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
289 } reg_errcode_t;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
290
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
291 /* This data structure represents a compiled pattern. Before calling
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
292 the pattern compiler, the fields `buffer', `allocated', `fastmap',
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
293 `translate', and `no_sub' can be set. After the pattern has been
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
294 compiled, the `re_nsub' field is available. All other fields are
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
295 private to the regex routines. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
296
28202
118ca0109252 (RE_TRANSLATE. RE_TRANSLATE_P): Moved to regex.c.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28061
diff changeset
297 #ifndef RE_TRANSLATE_TYPE
13249
c7dea1ffceab (RE_TRANSLATE_TYPE): Define, if not already defined.
Richard M. Stallman <rms@gnu.org>
parents: 11840
diff changeset
298 #define RE_TRANSLATE_TYPE char *
c7dea1ffceab (RE_TRANSLATE_TYPE): Define, if not already defined.
Richard M. Stallman <rms@gnu.org>
parents: 11840
diff changeset
299 #endif
c7dea1ffceab (RE_TRANSLATE_TYPE): Define, if not already defined.
Richard M. Stallman <rms@gnu.org>
parents: 11840
diff changeset
300
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
301 struct re_pattern_buffer
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
302 {
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
303 /* [[[begin pattern_buffer]]] */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
304 /* Space that holds the compiled pattern. It is declared as
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
305 `unsigned char *' because its elements are
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
306 sometimes used as array indexes. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
307 unsigned char *buffer;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
308
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
309 /* Number of bytes to which `buffer' points. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
310 unsigned long allocated;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
311
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
312 /* Number of bytes actually used in `buffer'. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
313 unsigned long used;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
314
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
315 /* Syntax setting with which the pattern was compiled. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
316 reg_syntax_t syntax;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
317
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
318 /* Pointer to a fastmap, if any, otherwise zero. re_search uses
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
319 the fastmap, if there is one, to skip over impossible
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
320 starting points for matches. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
321 char *fastmap;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
322
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
323 /* Either a translate table to apply to all characters before
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
324 comparing them, or zero for no translation. The translation
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
325 is applied to a pattern when it is compiled and to a string
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
326 when it is matched. */
13249
c7dea1ffceab (RE_TRANSLATE_TYPE): Define, if not already defined.
Richard M. Stallman <rms@gnu.org>
parents: 11840
diff changeset
327 RE_TRANSLATE_TYPE translate;
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
328
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
329 /* Number of subexpressions found by the compiler. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
330 size_t re_nsub;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
331
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
332 /* Zero if this pattern cannot match the empty string, one else.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
333 Well, in truth it's used only in `re_search_2', to see
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
334 whether or not we should use the fastmap, so we don't set
28061
93767747c32d Update the copyright.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 27692
diff changeset
335 this absolutely perfectly; see `re_compile_fastmap'. */
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
336 unsigned can_be_null : 1;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
337
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
338 /* If REGS_UNALLOCATED, allocate space in the `regs' structure
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
339 for `max (RE_NREGS, re_nsub + 1)' groups.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
340 If REGS_REALLOCATE, reallocate space if necessary.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
341 If REGS_FIXED, use what's there. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
342 #define REGS_UNALLOCATED 0
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
343 #define REGS_REALLOCATE 1
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
344 #define REGS_FIXED 2
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
345 unsigned regs_allocated : 2;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
346
1637
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
347 /* Set to zero when `regex_compile' compiles a pattern; set to one
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
348 by `re_compile_fastmap' if it updates the fastmap. */
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
349 unsigned fastmap_accurate : 1;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
350
1637
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
351 /* If set, `re_match_2' does not return information about
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
352 subexpressions. */
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
353 unsigned no_sub : 1;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
354
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
355 /* If set, a beginning-of-line anchor doesn't match at the
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
356 beginning of the string. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
357 unsigned not_bol : 1;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
358
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
359 /* Similarly for an end-of-line anchor. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
360 unsigned not_eol : 1;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
361
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
362 /* If true, an anchor at a newline matches. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
363 unsigned newline_anchor : 1;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
364
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28202
diff changeset
365 #ifdef emacs
18261
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
366 /* If true, multi-byte form in the `buffer' should be recognized as a
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
367 multibyte character. */
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
368 unsigned multibyte : 1;
28473
975fe3d8922e * regex.c (PTR_TO_OFFSET) [!emacs]: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28202
diff changeset
369 #endif
18261
2f0b00246056 (struct re_pattern_buffer): New member multibyte.
Richard M. Stallman <rms@gnu.org>
parents: 14414
diff changeset
370
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
371 /* [[[end pattern_buffer]]] */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
372 };
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
373
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
374 typedef struct re_pattern_buffer regex_t;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
375
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
376 /* Type for byte offsets within the string. POSIX mandates this. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
377 typedef int regoff_t;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
378
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
379
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
380 /* This is the structure we store register match data in. See
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
381 regex.texinfo for a full description of what registers match. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
382 struct re_registers
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
383 {
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
384 unsigned num_regs;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
385 regoff_t *start;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
386 regoff_t *end;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
387 };
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
388
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
389
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
390 /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
391 `re_match_2' returns information about at least this many registers
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
392 the first time a `regs' structure is passed. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
393 #ifndef RE_NREGS
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
394 #define RE_NREGS 30
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
395 #endif
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
396
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
397
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
398 /* POSIX specification for registers. Aside from the different names than
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
399 `re_registers', POSIX uses an array of structures, instead of a
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
400 structure of arrays. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
401 typedef struct
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
402 {
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
403 regoff_t rm_so; /* Byte offset from string's start to substring's start. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
404 regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
405 } regmatch_t;
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
406
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
407 /* Declarations for routines. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
408
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
409 /* To avoid duplicating every routine declaration -- once with a
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
410 prototype (if we are ANSI), and once without (if we aren't) -- we
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
411 use the following macro to declare argument types. This
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
412 unfortunately clutters up the declarations a bit, but I think it's
1797
cc86c049e576 *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 1722
diff changeset
413 worth it. */
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
414
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
415 #if __STDC__
1722
e5e26318e6e5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1690
diff changeset
416
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
417 #define _RE_ARGS(args) args
1722
e5e26318e6e5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1690
diff changeset
418
1637
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
419 #else /* not __STDC__ */
1722
e5e26318e6e5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1690
diff changeset
420
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
421 #define _RE_ARGS(args) ()
1722
e5e26318e6e5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1690
diff changeset
422
1637
e81cb2cc709e *** empty log message ***
Karl Berry <karl@gnu.org>
parents: 1579
diff changeset
423 #endif /* not __STDC__ */
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
424
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
425 /* Sets the current default syntax to SYNTAX, and return the old syntax.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
426 You can also simply assign to the `re_syntax_options' variable. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
427 extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
428
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
429 /* Compile the regular expression PATTERN, with length LENGTH
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
430 and syntax given by the global `re_syntax_options', into the buffer
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
431 BUFFER. Return NULL if successful, and an error string if not. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
432 extern const char *re_compile_pattern
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
433 _RE_ARGS ((const char *pattern, int length,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
434 struct re_pattern_buffer *buffer));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
435
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
436
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
437 /* Compile a fastmap for the compiled pattern in BUFFER; used to
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
438 accelerate searches. Return 0 if successful and -2 if was an
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
439 internal error. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
440 extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
441
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
442
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
443 /* Search in the string STRING (with length LENGTH) for the pattern
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
444 compiled into BUFFER. Start searching at position START, for RANGE
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
445 characters. Return the starting position of the match, -1 for no
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
446 match, or -2 for an internal error. Also return register
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
447 information in REGS (if REGS and BUFFER->no_sub are nonzero). */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
448 extern int re_search
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
449 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
450 int length, int start, int range, struct re_registers *regs));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
451
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
452
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
453 /* Like `re_search', but search in the concatenation of STRING1 and
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
454 STRING2. Also, stop searching at index START + STOP. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
455 extern int re_search_2
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
456 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
457 int length1, const char *string2, int length2,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
458 int start, int range, struct re_registers *regs, int stop));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
459
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
460
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
461 /* Like `re_search', but return how many characters in STRING the regexp
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
462 in BUFFER matched, starting at position START. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
463 extern int re_match
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
464 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
465 int length, int start, struct re_registers *regs));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
466
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
467
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
468 /* Relates to `re_match' as `re_search_2' relates to `re_search'. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
469 extern int re_match_2
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
470 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
471 int length1, const char *string2, int length2,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
472 int start, struct re_registers *regs, int stop));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
473
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
474
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
475 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
476 ENDS. Subsequent matches using BUFFER and REGS will use this memory
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
477 for recording register information. STARTS and ENDS must be
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
478 allocated with malloc, and must each be at least `NUM_REGS * sizeof
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
479 (regoff_t)' bytes long.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
480
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
481 If NUM_REGS == 0, then subsequent matches should allocate their own
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
482 register data.
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
483
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
484 Unless this function is called, the first search or match using
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
485 PATTERN_BUFFER will allocate its own register data, without
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
486 freeing the old data. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
487 extern void re_set_registers
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
488 _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
489 unsigned num_regs, regoff_t *starts, regoff_t *ends));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
490
9717
96a592ccb751 (re_comp, re_exec): Define this obsolete 4.2bsd
Paul Eggert <eggert@twinsun.com>
parents: 9584
diff changeset
491 #ifdef _REGEX_RE_COMP
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
492 /* 4.2 bsd compatibility. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
493 extern char *re_comp _RE_ARGS ((const char *));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
494 extern int re_exec _RE_ARGS ((const char *));
9717
96a592ccb751 (re_comp, re_exec): Define this obsolete 4.2bsd
Paul Eggert <eggert@twinsun.com>
parents: 9584
diff changeset
495 #endif
1154
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
496
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
497 /* POSIX compatibility. */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
498 extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
499 extern int regexec
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
500 _RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
501 regmatch_t pmatch[], int eflags));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
502 extern size_t regerror
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
503 _RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
504 size_t errbuf_size));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
505 extern void regfree _RE_ARGS ((regex_t *preg));
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
506
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
507 #endif /* not __REGEXP_LIBRARY_H__ */
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
508
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
509 /*
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
510 Local variables:
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
511 make-backup-files: t
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
512 version-control: t
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
513 trim-versions-without-asking: nil
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
514 End:
1f21815ef4cf Initial revision
Karl Berry <karl@gnu.org>
parents:
diff changeset
515 */