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