Commit | Line | Data |
---|---|---|
6bf342e1 | 1 | /* $Cambridge: exim/src/src/pcre/pcre.h,v 1.5 2007/01/23 15:08:45 ph10 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 | |
6bf342e1 | 10 | Copyright (c) 1997-2006 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 | ||
46 | /* NOTES FOR FUTURE MAINTAINERS: Do not use numbers with leading zeros, because | |
47 | they may be treated as octal constants. The PCRE_PRERELEASE feature is for | |
48 | identifying release candidates. It might be defined as -RC2, for example. In | |
49 | real releases, it should be defined empty. Do not change the alignment of these | |
50 | statments. The code in ./configure greps out the version numbers by using "cut" | |
51 | to get values from column 29 onwards. These are substituted into pcre-config | |
52 | and libpcre.pc. The values are not put into configure.ac and substituted here | |
53 | (which would simplify this issue) because that makes life harder for those who | |
54 | cannot run ./configure. As it now stands, this file need not be edited in that | |
55 | circumstance. */ | |
c86f6258 | 56 | |
6bf342e1 PH |
57 | #define PCRE_MAJOR 7 |
58 | #define PCRE_MINOR 0 | |
aa41d2de | 59 | #define PCRE_PRERELEASE |
6bf342e1 | 60 | #define PCRE_DATE 18-Dec-2006 |
c86f6258 | 61 | |
aa41d2de PH |
62 | /* Win32 uses DLL by default; it needs special stuff for exported functions |
63 | when building PCRE. */ | |
c86f6258 PH |
64 | |
65 | #ifdef _WIN32 | |
66 | # ifdef PCRE_DEFINITION | |
67 | # ifdef DLL_EXPORT | |
68 | # define PCRE_DATA_SCOPE __declspec(dllexport) | |
69 | # endif | |
70 | # else | |
71 | # ifndef PCRE_STATIC | |
72 | # define PCRE_DATA_SCOPE extern __declspec(dllimport) | |
73 | # endif | |
74 | # endif | |
75 | #endif | |
8ac170f3 | 76 | |
aa41d2de | 77 | /* Otherwise, we use the standard "extern". */ |
8ac170f3 | 78 | |
c86f6258 | 79 | #ifndef PCRE_DATA_SCOPE |
8ac170f3 PH |
80 | # ifdef __cplusplus |
81 | # define PCRE_DATA_SCOPE extern "C" | |
82 | # else | |
83 | # define PCRE_DATA_SCOPE extern | |
84 | # endif | |
c86f6258 PH |
85 | #endif |
86 | ||
87 | /* Have to include stdlib.h in order to ensure that size_t is defined; | |
88 | it is needed here for malloc. */ | |
89 | ||
90 | #include <stdlib.h> | |
91 | ||
92 | /* Allow for C++ users */ | |
93 | ||
94 | #ifdef __cplusplus | |
95 | extern "C" { | |
96 | #endif | |
97 | ||
98 | /* Options */ | |
99 | ||
8ac170f3 PH |
100 | #define PCRE_CASELESS 0x00000001 |
101 | #define PCRE_MULTILINE 0x00000002 | |
102 | #define PCRE_DOTALL 0x00000004 | |
103 | #define PCRE_EXTENDED 0x00000008 | |
104 | #define PCRE_ANCHORED 0x00000010 | |
105 | #define PCRE_DOLLAR_ENDONLY 0x00000020 | |
106 | #define PCRE_EXTRA 0x00000040 | |
107 | #define PCRE_NOTBOL 0x00000080 | |
108 | #define PCRE_NOTEOL 0x00000100 | |
109 | #define PCRE_UNGREEDY 0x00000200 | |
110 | #define PCRE_NOTEMPTY 0x00000400 | |
111 | #define PCRE_UTF8 0x00000800 | |
112 | #define PCRE_NO_AUTO_CAPTURE 0x00001000 | |
113 | #define PCRE_NO_UTF8_CHECK 0x00002000 | |
114 | #define PCRE_AUTO_CALLOUT 0x00004000 | |
115 | #define PCRE_PARTIAL 0x00008000 | |
116 | #define PCRE_DFA_SHORTEST 0x00010000 | |
117 | #define PCRE_DFA_RESTART 0x00020000 | |
118 | #define PCRE_FIRSTLINE 0x00040000 | |
aa41d2de PH |
119 | #define PCRE_DUPNAMES 0x00080000 |
120 | #define PCRE_NEWLINE_CR 0x00100000 | |
121 | #define PCRE_NEWLINE_LF 0x00200000 | |
122 | #define PCRE_NEWLINE_CRLF 0x00300000 | |
6bf342e1 | 123 | #define PCRE_NEWLINE_ANY 0x00400000 |
c86f6258 PH |
124 | |
125 | /* Exec-time and get/set-time error codes */ | |
126 | ||
127 | #define PCRE_ERROR_NOMATCH (-1) | |
128 | #define PCRE_ERROR_NULL (-2) | |
129 | #define PCRE_ERROR_BADOPTION (-3) | |
130 | #define PCRE_ERROR_BADMAGIC (-4) | |
6bf342e1 PH |
131 | #define PCRE_ERROR_UNKNOWN_OPCODE (-5) |
132 | #define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */ | |
c86f6258 PH |
133 | #define PCRE_ERROR_NOMEMORY (-6) |
134 | #define PCRE_ERROR_NOSUBSTRING (-7) | |
135 | #define PCRE_ERROR_MATCHLIMIT (-8) | |
136 | #define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */ | |
137 | #define PCRE_ERROR_BADUTF8 (-10) | |
138 | #define PCRE_ERROR_BADUTF8_OFFSET (-11) | |
139 | #define PCRE_ERROR_PARTIAL (-12) | |
140 | #define PCRE_ERROR_BADPARTIAL (-13) | |
141 | #define PCRE_ERROR_INTERNAL (-14) | |
142 | #define PCRE_ERROR_BADCOUNT (-15) | |
8ac170f3 PH |
143 | #define PCRE_ERROR_DFA_UITEM (-16) |
144 | #define PCRE_ERROR_DFA_UCOND (-17) | |
145 | #define PCRE_ERROR_DFA_UMLIMIT (-18) | |
146 | #define PCRE_ERROR_DFA_WSSIZE (-19) | |
147 | #define PCRE_ERROR_DFA_RECURSE (-20) | |
aa41d2de | 148 | #define PCRE_ERROR_RECURSIONLIMIT (-21) |
6bf342e1 PH |
149 | #define PCRE_ERROR_NULLWSLIMIT (-22) |
150 | #define PCRE_ERROR_BADNEWLINE (-23) | |
c86f6258 PH |
151 | |
152 | /* Request types for pcre_fullinfo() */ | |
153 | ||
154 | #define PCRE_INFO_OPTIONS 0 | |
155 | #define PCRE_INFO_SIZE 1 | |
156 | #define PCRE_INFO_CAPTURECOUNT 2 | |
157 | #define PCRE_INFO_BACKREFMAX 3 | |
158 | #define PCRE_INFO_FIRSTBYTE 4 | |
159 | #define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */ | |
160 | #define PCRE_INFO_FIRSTTABLE 5 | |
161 | #define PCRE_INFO_LASTLITERAL 6 | |
162 | #define PCRE_INFO_NAMEENTRYSIZE 7 | |
163 | #define PCRE_INFO_NAMECOUNT 8 | |
164 | #define PCRE_INFO_NAMETABLE 9 | |
165 | #define PCRE_INFO_STUDYSIZE 10 | |
166 | #define PCRE_INFO_DEFAULT_TABLES 11 | |
167 | ||
aa41d2de PH |
168 | /* Request types for pcre_config(). Do not re-arrange, in order to remain |
169 | compatible. */ | |
c86f6258 PH |
170 | |
171 | #define PCRE_CONFIG_UTF8 0 | |
172 | #define PCRE_CONFIG_NEWLINE 1 | |
173 | #define PCRE_CONFIG_LINK_SIZE 2 | |
174 | #define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3 | |
175 | #define PCRE_CONFIG_MATCH_LIMIT 4 | |
176 | #define PCRE_CONFIG_STACKRECURSE 5 | |
177 | #define PCRE_CONFIG_UNICODE_PROPERTIES 6 | |
aa41d2de | 178 | #define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7 |
c86f6258 | 179 | |
aa41d2de PH |
180 | /* Bit flags for the pcre_extra structure. Do not re-arrange or redefine |
181 | these bits, just add new ones on the end, in order to remain compatible. */ | |
c86f6258 | 182 | |
aa41d2de PH |
183 | #define PCRE_EXTRA_STUDY_DATA 0x0001 |
184 | #define PCRE_EXTRA_MATCH_LIMIT 0x0002 | |
185 | #define PCRE_EXTRA_CALLOUT_DATA 0x0004 | |
186 | #define PCRE_EXTRA_TABLES 0x0008 | |
187 | #define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010 | |
c86f6258 PH |
188 | |
189 | /* Types */ | |
190 | ||
191 | struct real_pcre; /* declaration; the definition is private */ | |
192 | typedef struct real_pcre pcre; | |
193 | ||
aa41d2de PH |
194 | /* When PCRE is compiled as a C++ library, the subject pointer type can be |
195 | replaced with a custom type. For conventional use, the public interface is a | |
196 | const char *. */ | |
197 | ||
198 | #ifndef PCRE_SPTR | |
199 | #define PCRE_SPTR const char * | |
200 | #endif | |
201 | ||
c86f6258 PH |
202 | /* The structure for passing additional data to pcre_exec(). This is defined in |
203 | such as way as to be extensible. Always add new fields at the end, in order to | |
204 | remain compatible. */ | |
205 | ||
206 | typedef struct pcre_extra { | |
207 | unsigned long int flags; /* Bits for which fields are set */ | |
208 | void *study_data; /* Opaque data from pcre_study() */ | |
209 | unsigned long int match_limit; /* Maximum number of calls to match() */ | |
210 | void *callout_data; /* Data passed back in callouts */ | |
211 | const unsigned char *tables; /* Pointer to character tables */ | |
aa41d2de | 212 | unsigned long int match_limit_recursion; /* Max recursive calls to match() */ |
c86f6258 PH |
213 | } pcre_extra; |
214 | ||
215 | /* The structure for passing out data via the pcre_callout_function. We use a | |
216 | structure so that new fields can be added on the end in future versions, | |
217 | without changing the API of the function, thereby allowing old clients to work | |
218 | without modification. */ | |
219 | ||
220 | typedef struct pcre_callout_block { | |
221 | int version; /* Identifies version of block */ | |
222 | /* ------------------------ Version 0 ------------------------------- */ | |
223 | int callout_number; /* Number compiled into pattern */ | |
224 | int *offset_vector; /* The offset vector */ | |
aa41d2de | 225 | PCRE_SPTR subject; /* The subject being matched */ |
c86f6258 PH |
226 | int subject_length; /* The length of the subject */ |
227 | int start_match; /* Offset to start of this match attempt */ | |
228 | int current_position; /* Where we currently are in the subject */ | |
229 | int capture_top; /* Max current capture */ | |
230 | int capture_last; /* Most recently closed capture */ | |
231 | void *callout_data; /* Data passed in with the call */ | |
232 | /* ------------------- Added for Version 1 -------------------------- */ | |
233 | int pattern_position; /* Offset to next item in the pattern */ | |
234 | int next_item_length; /* Length of next item in the pattern */ | |
235 | /* ------------------------------------------------------------------ */ | |
236 | } pcre_callout_block; | |
237 | ||
238 | /* Indirection for store get and free functions. These can be set to | |
239 | alternative malloc/free functions if required. Special ones are used in the | |
240 | non-recursive case for "frames". There is also an optional callout function | |
8ac170f3 PH |
241 | that is triggered by the (?) regex item. For Virtual Pascal, these definitions |
242 | have to take another form. */ | |
c86f6258 PH |
243 | |
244 | #ifndef VPCOMPAT | |
245 | PCRE_DATA_SCOPE void *(*pcre_malloc)(size_t); | |
246 | PCRE_DATA_SCOPE void (*pcre_free)(void *); | |
247 | PCRE_DATA_SCOPE void *(*pcre_stack_malloc)(size_t); | |
248 | PCRE_DATA_SCOPE void (*pcre_stack_free)(void *); | |
249 | PCRE_DATA_SCOPE int (*pcre_callout)(pcre_callout_block *); | |
250 | #else /* VPCOMPAT */ | |
8ac170f3 PH |
251 | PCRE_DATA_SCOPE void *pcre_malloc(size_t); |
252 | PCRE_DATA_SCOPE void pcre_free(void *); | |
253 | PCRE_DATA_SCOPE void *pcre_stack_malloc(size_t); | |
254 | PCRE_DATA_SCOPE void pcre_stack_free(void *); | |
255 | PCRE_DATA_SCOPE int pcre_callout(pcre_callout_block *); | |
c86f6258 PH |
256 | #endif /* VPCOMPAT */ |
257 | ||
258 | /* Exported PCRE functions */ | |
259 | ||
8ac170f3 PH |
260 | PCRE_DATA_SCOPE pcre *pcre_compile(const char *, int, const char **, int *, |
261 | const unsigned char *); | |
262 | PCRE_DATA_SCOPE pcre *pcre_compile2(const char *, int, int *, const char **, | |
263 | int *, const unsigned char *); | |
264 | PCRE_DATA_SCOPE int pcre_config(int, void *); | |
265 | PCRE_DATA_SCOPE int pcre_copy_named_substring(const pcre *, const char *, | |
266 | int *, int, const char *, char *, int); | |
267 | PCRE_DATA_SCOPE int pcre_copy_substring(const char *, int *, int, int, char *, | |
268 | int); | |
269 | PCRE_DATA_SCOPE int pcre_dfa_exec(const pcre *, const pcre_extra *, | |
270 | const char *, int, int, int, int *, int , int *, int); | |
aa41d2de | 271 | PCRE_DATA_SCOPE int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR, |
8ac170f3 PH |
272 | int, int, int, int *, int); |
273 | PCRE_DATA_SCOPE void pcre_free_substring(const char *); | |
274 | PCRE_DATA_SCOPE void pcre_free_substring_list(const char **); | |
275 | PCRE_DATA_SCOPE int pcre_fullinfo(const pcre *, const pcre_extra *, int, | |
276 | void *); | |
277 | PCRE_DATA_SCOPE int pcre_get_named_substring(const pcre *, const char *, | |
278 | int *, int, const char *, const char **); | |
279 | PCRE_DATA_SCOPE int pcre_get_stringnumber(const pcre *, const char *); | |
aa41d2de PH |
280 | PCRE_DATA_SCOPE int pcre_get_stringtable_entries(const pcre *, const char *, |
281 | char **, char **); | |
8ac170f3 PH |
282 | PCRE_DATA_SCOPE int pcre_get_substring(const char *, int *, int, int, |
283 | const char **); | |
284 | PCRE_DATA_SCOPE int pcre_get_substring_list(const char *, int *, int, | |
285 | const char ***); | |
286 | PCRE_DATA_SCOPE int pcre_info(const pcre *, int *, int *); | |
287 | PCRE_DATA_SCOPE const unsigned char *pcre_maketables(void); | |
288 | PCRE_DATA_SCOPE int pcre_refcount(pcre *, int); | |
289 | PCRE_DATA_SCOPE pcre_extra *pcre_study(const pcre *, int, const char **); | |
290 | PCRE_DATA_SCOPE const char *pcre_version(void); | |
c86f6258 PH |
291 | |
292 | #ifdef __cplusplus | |
293 | } /* extern "C" */ | |
294 | #endif | |
295 | ||
296 | #endif /* End of pcre.h */ |