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