Commit | Line | Data |
---|---|---|
47db1125 | 1 | /* $Cambridge: exim/src/src/pcre/pcre.h,v 1.7 2007/11/12 13:02:19 nm4 Exp $ */ |
aa41d2de | 2 | |
c86f6258 PH |
3 | /************************************************* |
4 | * Perl-Compatible Regular Expressions * | |
5 | *************************************************/ | |
6 | ||
aa41d2de PH |
7 | /* This is the public header file for the PCRE library, to be #included by |
8 | applications that call the PCRE functions. | |
c86f6258 | 9 | |
64f2600a | 10 | Copyright (c) 1997-2007 University of Cambridge |
c86f6258 PH |
11 | |
12 | ----------------------------------------------------------------------------- | |
13 | Redistribution and use in source and binary forms, with or without | |
14 | modification, are permitted provided that the following conditions are met: | |
15 | ||
16 | * Redistributions of source code must retain the above copyright notice, | |
17 | this list of conditions and the following disclaimer. | |
18 | ||
19 | * Redistributions in binary form must reproduce the above copyright | |
20 | notice, this list of conditions and the following disclaimer in the | |
21 | documentation and/or other materials provided with the distribution. | |
22 | ||
23 | * Neither the name of the University of Cambridge nor the names of its | |
24 | contributors may be used to endorse or promote products derived from | |
25 | this software without specific prior written permission. | |
26 | ||
27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
28 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
29 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
30 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
31 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
32 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
33 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
34 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
35 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
36 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
37 | POSSIBILITY OF SUCH DAMAGE. | |
38 | ----------------------------------------------------------------------------- | |
39 | */ | |
40 | ||
41 | #ifndef _PCRE_H | |
42 | #define _PCRE_H | |
43 | ||
aa41d2de PH |
44 | /* The current PCRE version information. */ |
45 | ||
6bf342e1 | 46 | #define PCRE_MAJOR 7 |
64f2600a PH |
47 | #define PCRE_MINOR 2 |
48 | #define PCRE_PRERELEASE | |
49 | #define PCRE_DATE 2007-06-19 | |
c86f6258 | 50 | |
64f2600a PH |
51 | /* When an application links to a PCRE DLL in Windows, the symbols that are |
52 | imported have to be identified as such. When building PCRE, the appropriate | |
53 | export setting is defined in pcre_internal.h, which includes this file. So we | |
47db1125 | 54 | don't change existing definitions of PCRE_EXP_DECL and PCRECPP_EXP_DECL. */ |
c86f6258 | 55 | |
47db1125 NM |
56 | #if defined(_WIN32) && !defined(PCRE_STATIC) |
57 | # ifndef PCRE_EXP_DECL | |
58 | # define PCRE_EXP_DECL extern __declspec(dllimport) | |
59 | # endif | |
60 | # ifdef __cplusplus | |
61 | # ifndef PCRECPP_EXP_DECL | |
62 | # define PCRECPP_EXP_DECL extern __declspec(dllimport) | |
63 | # endif | |
64 | # ifndef PCRECPP_EXP_DEFN | |
65 | # define PCRECPP_EXP_DEFN __declspec(dllimport) | |
c86f6258 PH |
66 | # endif |
67 | # endif | |
68 | #endif | |
8ac170f3 | 69 | |
64f2600a | 70 | /* By default, we use the standard "extern" declarations. */ |
8ac170f3 | 71 | |
64f2600a | 72 | #ifndef PCRE_EXP_DECL |
8ac170f3 | 73 | # ifdef __cplusplus |
47db1125 | 74 | # define PCRE_EXP_DECL extern "C" |
8ac170f3 | 75 | # else |
47db1125 NM |
76 | # define PCRE_EXP_DECL extern |
77 | # endif | |
78 | #endif | |
79 | ||
80 | #ifdef __cplusplus | |
81 | # ifndef PCRECPP_EXP_DECL | |
82 | # define PCRECPP_EXP_DECL extern | |
83 | # endif | |
84 | # ifndef PCRECPP_EXP_DEFN | |
85 | # define PCRECPP_EXP_DEFN | |
8ac170f3 | 86 | # endif |
c86f6258 PH |
87 | #endif |
88 | ||
89 | /* Have to include stdlib.h in order to ensure that size_t is defined; | |
90 | it is needed here for malloc. */ | |
91 | ||
92 | #include <stdlib.h> | |
93 | ||
94 | /* Allow for C++ users */ | |
95 | ||
96 | #ifdef __cplusplus | |
97 | extern "C" { | |
98 | #endif | |
99 | ||
100 | /* Options */ | |
101 | ||
8ac170f3 PH |
102 | #define PCRE_CASELESS 0x00000001 |
103 | #define PCRE_MULTILINE 0x00000002 | |
104 | #define PCRE_DOTALL 0x00000004 | |
105 | #define PCRE_EXTENDED 0x00000008 | |
106 | #define PCRE_ANCHORED 0x00000010 | |
107 | #define PCRE_DOLLAR_ENDONLY 0x00000020 | |
108 | #define PCRE_EXTRA 0x00000040 | |
109 | #define PCRE_NOTBOL 0x00000080 | |
110 | #define PCRE_NOTEOL 0x00000100 | |
111 | #define PCRE_UNGREEDY 0x00000200 | |
112 | #define PCRE_NOTEMPTY 0x00000400 | |
113 | #define PCRE_UTF8 0x00000800 | |
114 | #define PCRE_NO_AUTO_CAPTURE 0x00001000 | |
115 | #define PCRE_NO_UTF8_CHECK 0x00002000 | |
116 | #define PCRE_AUTO_CALLOUT 0x00004000 | |
117 | #define PCRE_PARTIAL 0x00008000 | |
118 | #define PCRE_DFA_SHORTEST 0x00010000 | |
119 | #define PCRE_DFA_RESTART 0x00020000 | |
120 | #define PCRE_FIRSTLINE 0x00040000 | |
aa41d2de PH |
121 | #define PCRE_DUPNAMES 0x00080000 |
122 | #define PCRE_NEWLINE_CR 0x00100000 | |
123 | #define PCRE_NEWLINE_LF 0x00200000 | |
124 | #define PCRE_NEWLINE_CRLF 0x00300000 | |
6bf342e1 | 125 | #define PCRE_NEWLINE_ANY 0x00400000 |
64f2600a | 126 | #define PCRE_NEWLINE_ANYCRLF 0x00500000 |
47db1125 NM |
127 | #define PCRE_BSR_ANYCRLF 0x00800000 |
128 | #define PCRE_BSR_UNICODE 0x01000000 | |
c86f6258 PH |
129 | |
130 | /* Exec-time and get/set-time error codes */ | |
131 | ||
132 | #define PCRE_ERROR_NOMATCH (-1) | |
133 | #define PCRE_ERROR_NULL (-2) | |
134 | #define PCRE_ERROR_BADOPTION (-3) | |
135 | #define PCRE_ERROR_BADMAGIC (-4) | |
6bf342e1 PH |
136 | #define PCRE_ERROR_UNKNOWN_OPCODE (-5) |
137 | #define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */ | |
c86f6258 PH |
138 | #define PCRE_ERROR_NOMEMORY (-6) |
139 | #define PCRE_ERROR_NOSUBSTRING (-7) | |
140 | #define PCRE_ERROR_MATCHLIMIT (-8) | |
141 | #define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */ | |
142 | #define PCRE_ERROR_BADUTF8 (-10) | |
143 | #define PCRE_ERROR_BADUTF8_OFFSET (-11) | |
144 | #define PCRE_ERROR_PARTIAL (-12) | |
145 | #define PCRE_ERROR_BADPARTIAL (-13) | |
146 | #define PCRE_ERROR_INTERNAL (-14) | |
147 | #define PCRE_ERROR_BADCOUNT (-15) | |
8ac170f3 PH |
148 | #define PCRE_ERROR_DFA_UITEM (-16) |
149 | #define PCRE_ERROR_DFA_UCOND (-17) | |
150 | #define PCRE_ERROR_DFA_UMLIMIT (-18) | |
151 | #define PCRE_ERROR_DFA_WSSIZE (-19) | |
152 | #define PCRE_ERROR_DFA_RECURSE (-20) | |
aa41d2de | 153 | #define PCRE_ERROR_RECURSIONLIMIT (-21) |
47db1125 | 154 | #define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */ |
6bf342e1 | 155 | #define PCRE_ERROR_BADNEWLINE (-23) |
c86f6258 PH |
156 | |
157 | /* Request types for pcre_fullinfo() */ | |
158 | ||
159 | #define PCRE_INFO_OPTIONS 0 | |
160 | #define PCRE_INFO_SIZE 1 | |
161 | #define PCRE_INFO_CAPTURECOUNT 2 | |
162 | #define PCRE_INFO_BACKREFMAX 3 | |
163 | #define PCRE_INFO_FIRSTBYTE 4 | |
164 | #define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */ | |
165 | #define PCRE_INFO_FIRSTTABLE 5 | |
166 | #define PCRE_INFO_LASTLITERAL 6 | |
167 | #define PCRE_INFO_NAMEENTRYSIZE 7 | |
168 | #define PCRE_INFO_NAMECOUNT 8 | |
169 | #define PCRE_INFO_NAMETABLE 9 | |
170 | #define PCRE_INFO_STUDYSIZE 10 | |
171 | #define PCRE_INFO_DEFAULT_TABLES 11 | |
64f2600a PH |
172 | #define PCRE_INFO_OKPARTIAL 12 |
173 | #define PCRE_INFO_JCHANGED 13 | |
47db1125 | 174 | #define PCRE_INFO_HASCRORLF 14 |
c86f6258 | 175 | |
aa41d2de PH |
176 | /* Request types for pcre_config(). Do not re-arrange, in order to remain |
177 | compatible. */ | |
c86f6258 PH |
178 | |
179 | #define PCRE_CONFIG_UTF8 0 | |
180 | #define PCRE_CONFIG_NEWLINE 1 | |
181 | #define PCRE_CONFIG_LINK_SIZE 2 | |
182 | #define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3 | |
183 | #define PCRE_CONFIG_MATCH_LIMIT 4 | |
184 | #define PCRE_CONFIG_STACKRECURSE 5 | |
185 | #define PCRE_CONFIG_UNICODE_PROPERTIES 6 | |
aa41d2de | 186 | #define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7 |
47db1125 | 187 | #define PCRE_CONFIG_BSR 8 |
c86f6258 | 188 | |
aa41d2de PH |
189 | /* Bit flags for the pcre_extra structure. Do not re-arrange or redefine |
190 | these bits, just add new ones on the end, in order to remain compatible. */ | |
c86f6258 | 191 | |
aa41d2de PH |
192 | #define PCRE_EXTRA_STUDY_DATA 0x0001 |
193 | #define PCRE_EXTRA_MATCH_LIMIT 0x0002 | |
194 | #define PCRE_EXTRA_CALLOUT_DATA 0x0004 | |
195 | #define PCRE_EXTRA_TABLES 0x0008 | |
196 | #define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010 | |
c86f6258 PH |
197 | |
198 | /* Types */ | |
199 | ||
200 | struct real_pcre; /* declaration; the definition is private */ | |
201 | typedef struct real_pcre pcre; | |
202 | ||
aa41d2de PH |
203 | /* When PCRE is compiled as a C++ library, the subject pointer type can be |
204 | replaced with a custom type. For conventional use, the public interface is a | |
205 | const char *. */ | |
206 | ||
207 | #ifndef PCRE_SPTR | |
208 | #define PCRE_SPTR const char * | |
209 | #endif | |
210 | ||
c86f6258 PH |
211 | /* The structure for passing additional data to pcre_exec(). This is defined in |
212 | such as way as to be extensible. Always add new fields at the end, in order to | |
213 | remain compatible. */ | |
214 | ||
215 | typedef struct pcre_extra { | |
216 | unsigned long int flags; /* Bits for which fields are set */ | |
217 | void *study_data; /* Opaque data from pcre_study() */ | |
218 | unsigned long int match_limit; /* Maximum number of calls to match() */ | |
219 | void *callout_data; /* Data passed back in callouts */ | |
220 | const unsigned char *tables; /* Pointer to character tables */ | |
aa41d2de | 221 | unsigned long int match_limit_recursion; /* Max recursive calls to match() */ |
c86f6258 PH |
222 | } pcre_extra; |
223 | ||
224 | /* The structure for passing out data via the pcre_callout_function. We use a | |
225 | structure so that new fields can be added on the end in future versions, | |
226 | without changing the API of the function, thereby allowing old clients to work | |
227 | without modification. */ | |
228 | ||
229 | typedef struct pcre_callout_block { | |
230 | int version; /* Identifies version of block */ | |
231 | /* ------------------------ Version 0 ------------------------------- */ | |
232 | int callout_number; /* Number compiled into pattern */ | |
233 | int *offset_vector; /* The offset vector */ | |
aa41d2de | 234 | PCRE_SPTR subject; /* The subject being matched */ |
c86f6258 PH |
235 | int subject_length; /* The length of the subject */ |
236 | int start_match; /* Offset to start of this match attempt */ | |
237 | int current_position; /* Where we currently are in the subject */ | |
238 | int capture_top; /* Max current capture */ | |
239 | int capture_last; /* Most recently closed capture */ | |
240 | void *callout_data; /* Data passed in with the call */ | |
241 | /* ------------------- Added for Version 1 -------------------------- */ | |
242 | int pattern_position; /* Offset to next item in the pattern */ | |
243 | int next_item_length; /* Length of next item in the pattern */ | |
244 | /* ------------------------------------------------------------------ */ | |
245 | } pcre_callout_block; | |
246 | ||
247 | /* Indirection for store get and free functions. These can be set to | |
248 | alternative malloc/free functions if required. Special ones are used in the | |
249 | non-recursive case for "frames". There is also an optional callout function | |
8ac170f3 PH |
250 | that is triggered by the (?) regex item. For Virtual Pascal, these definitions |
251 | have to take another form. */ | |
c86f6258 PH |
252 | |
253 | #ifndef VPCOMPAT | |
64f2600a PH |
254 | PCRE_EXP_DECL void *(*pcre_malloc)(size_t); |
255 | PCRE_EXP_DECL void (*pcre_free)(void *); | |
256 | PCRE_EXP_DECL void *(*pcre_stack_malloc)(size_t); | |
257 | PCRE_EXP_DECL void (*pcre_stack_free)(void *); | |
258 | PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *); | |
c86f6258 | 259 | #else /* VPCOMPAT */ |
64f2600a PH |
260 | PCRE_EXP_DECL void *pcre_malloc(size_t); |
261 | PCRE_EXP_DECL void pcre_free(void *); | |
262 | PCRE_EXP_DECL void *pcre_stack_malloc(size_t); | |
263 | PCRE_EXP_DECL void pcre_stack_free(void *); | |
264 | PCRE_EXP_DECL int pcre_callout(pcre_callout_block *); | |
c86f6258 PH |
265 | #endif /* VPCOMPAT */ |
266 | ||
267 | /* Exported PCRE functions */ | |
268 | ||
64f2600a | 269 | PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *, |
8ac170f3 | 270 | const unsigned char *); |
64f2600a | 271 | PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **, |
8ac170f3 | 272 | int *, const unsigned char *); |
64f2600a PH |
273 | PCRE_EXP_DECL int pcre_config(int, void *); |
274 | PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *, | |
8ac170f3 | 275 | int *, int, const char *, char *, int); |
64f2600a | 276 | PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int, char *, |
8ac170f3 | 277 | int); |
64f2600a | 278 | PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *, |
8ac170f3 | 279 | const char *, int, int, int, int *, int , int *, int); |
64f2600a | 280 | PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR, |
8ac170f3 | 281 | int, int, int, int *, int); |
64f2600a PH |
282 | PCRE_EXP_DECL void pcre_free_substring(const char *); |
283 | PCRE_EXP_DECL void pcre_free_substring_list(const char **); | |
284 | PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int, | |
8ac170f3 | 285 | void *); |
64f2600a | 286 | PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *, |
8ac170f3 | 287 | int *, int, const char *, const char **); |
64f2600a PH |
288 | PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *); |
289 | PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *, | |
aa41d2de | 290 | char **, char **); |
64f2600a | 291 | PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int, |
8ac170f3 | 292 | const char **); |
64f2600a | 293 | PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int, |
8ac170f3 | 294 | const char ***); |
64f2600a PH |
295 | PCRE_EXP_DECL int pcre_info(const pcre *, int *, int *); |
296 | PCRE_EXP_DECL const unsigned char *pcre_maketables(void); | |
297 | PCRE_EXP_DECL int pcre_refcount(pcre *, int); | |
298 | PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **); | |
299 | PCRE_EXP_DECL const char *pcre_version(void); | |
c86f6258 PH |
300 | |
301 | #ifdef __cplusplus | |
302 | } /* extern "C" */ | |
303 | #endif | |
304 | ||
305 | #endif /* End of pcre.h */ |