1 | /************************************************* |
2 | * Perl-Compatible Regular Expressions * |
3 | *************************************************/ |
4 | |
5 | /* This is the public header file for the PCRE library, second API, to be |
6 | #included by applications that call PCRE2 functions. |
7 | |
8 | Copyright (c) 2016-2021 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 PCRE2_H_IDEMPOTENT_GUARD |
40 | #define PCRE2_H_IDEMPOTENT_GUARD |
41 | |
42 | /* The current PCRE version information. */ |
43 | |
44 | #define PCRE2_MAJOR 10 |
45 | #define PCRE2_MINOR 42 |
46 | #define PCRE2_PRERELEASE |
47 | #define PCRE2_DATE 2022-12-11 |
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 PCRE2, the appropriate |
51 | export setting is defined in pcre2_internal.h, which includes this file. So we |
52 | don't change existing definitions of PCRE2_EXP_DECL. */ |
53 | |
54 | #if defined(_WIN32) && !defined(PCRE2_STATIC) |
55 | # ifndef PCRE2_EXP_DECL |
56 | # define PCRE2_EXP_DECL extern __declspec(dllimport) |
57 | # endif |
58 | #endif |
59 | |
60 | /* By default, we use the standard "extern" declarations. */ |
61 | |
62 | #ifndef PCRE2_EXP_DECL |
63 | # ifdef __cplusplus |
64 | # define PCRE2_EXP_DECL extern "C" |
65 | # else |
66 | # define PCRE2_EXP_DECL extern |
67 | # endif |
68 | #endif |
69 | |
70 | /* When compiling with the MSVC compiler, it is sometimes necessary to include |
71 | a "calling convention" before exported function names. (This is secondhand |
72 | information; I know nothing about MSVC myself). For example, something like |
73 | |
74 | void __cdecl function(....) |
75 | |
76 | might be needed. In order so make this easy, all the exported functions have |
77 | PCRE2_CALL_CONVENTION just before their names. It is rarely needed; if not |
78 | set, we ensure here that it has no effect. */ |
79 | |
80 | #ifndef PCRE2_CALL_CONVENTION |
81 | #define PCRE2_CALL_CONVENTION |
82 | #endif |
83 | |
84 | /* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and |
85 | uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do |
86 | not have stdint.h, which is why we use inttypes.h, which according to the C |
87 | standard is a superset of stdint.h. If inttypes.h is not available the build |
88 | will break and the relevant values must be provided by some other means. */ |
89 | |
90 | #include <limits.h> |
91 | #include <stdlib.h> |
92 | #include <inttypes.h> |
93 | |
94 | /* Allow for C++ users compiling this directly. */ |
95 | |
96 | #ifdef __cplusplus |
97 | extern "C" { |
98 | #endif |
99 | |
100 | /* The following option bits can be passed to pcre2_compile(), pcre2_match(), |
101 | or pcre2_dfa_match(). PCRE2_NO_UTF_CHECK affects only the function to which it |
102 | is passed. Put these bits at the most significant end of the options word so |
103 | others can be added next to them */ |
104 | |
105 | #define PCRE2_ANCHORED 0x80000000u |
106 | #define PCRE2_NO_UTF_CHECK 0x40000000u |
107 | #define PCRE2_ENDANCHORED 0x20000000u |
108 | |
109 | /* The following option bits can be passed only to pcre2_compile(). However, |
110 | they may affect compilation, JIT compilation, and/or interpretive execution. |
111 | The following tags indicate which: |
112 | |
113 | C alters what is compiled by pcre2_compile() |
114 | J alters what is compiled by pcre2_jit_compile() |
115 | M is inspected during pcre2_match() execution |
116 | D is inspected during pcre2_dfa_match() execution |
117 | */ |
118 | |
119 | #define PCRE2_ALLOW_EMPTY_CLASS 0x00000001u /* C */ |
120 | #define PCRE2_ALT_BSUX 0x00000002u /* C */ |
121 | #define PCRE2_AUTO_CALLOUT 0x00000004u /* C */ |
122 | #define PCRE2_CASELESS 0x00000008u /* C */ |
123 | #define PCRE2_DOLLAR_ENDONLY 0x00000010u /* J M D */ |
124 | #define PCRE2_DOTALL 0x00000020u /* C */ |
125 | #define PCRE2_DUPNAMES 0x00000040u /* C */ |
126 | #define PCRE2_EXTENDED 0x00000080u /* C */ |
127 | #define PCRE2_FIRSTLINE 0x00000100u /* J M D */ |
128 | #define PCRE2_MATCH_UNSET_BACKREF 0x00000200u /* C J M */ |
129 | #define PCRE2_MULTILINE 0x00000400u /* C */ |
130 | #define PCRE2_NEVER_UCP 0x00000800u /* C */ |
131 | #define PCRE2_NEVER_UTF 0x00001000u /* C */ |
132 | #define PCRE2_NO_AUTO_CAPTURE 0x00002000u /* C */ |
133 | #define PCRE2_NO_AUTO_POSSESS 0x00004000u /* C */ |
134 | #define PCRE2_NO_DOTSTAR_ANCHOR 0x00008000u /* C */ |
135 | #define PCRE2_NO_START_OPTIMIZE 0x00010000u /* J M D */ |
136 | #define PCRE2_UCP 0x00020000u /* C J M D */ |
137 | #define PCRE2_UNGREEDY 0x00040000u /* C */ |
138 | #define PCRE2_UTF 0x00080000u /* C J M D */ |
139 | #define PCRE2_NEVER_BACKSLASH_C 0x00100000u /* C */ |
140 | #define PCRE2_ALT_CIRCUMFLEX 0x00200000u /* J M D */ |
141 | #define PCRE2_ALT_VERBNAMES 0x00400000u /* C */ |
142 | #define PCRE2_USE_OFFSET_LIMIT 0x00800000u /* J M D */ |
143 | #define PCRE2_EXTENDED_MORE 0x01000000u /* C */ |
144 | #define PCRE2_LITERAL 0x02000000u /* C */ |
145 | #define PCRE2_MATCH_INVALID_UTF 0x04000000u /* J M D */ |
146 | |
147 | /* An additional compile options word is available in the compile context. */ |
148 | |
149 | #define 0x00000001u /* C */ |
150 | #define 0x00000002u /* C */ |
151 | #define 0x00000004u /* C */ |
152 | #define 0x00000008u /* C */ |
153 | #define 0x00000010u /* C */ |
154 | #define 0x00000020u /* C */ |
155 | #define 0x00000040u /* C */ |
156 | |
157 | /* These are for pcre2_jit_compile(). */ |
158 | |
159 | #define PCRE2_JIT_COMPLETE 0x00000001u /* For full matching */ |
160 | #define PCRE2_JIT_PARTIAL_SOFT 0x00000002u |
161 | #define PCRE2_JIT_PARTIAL_HARD 0x00000004u |
162 | #define PCRE2_JIT_INVALID_UTF 0x00000100u |
163 | |
164 | /* These are for pcre2_match(), pcre2_dfa_match(), pcre2_jit_match(), and |
165 | pcre2_substitute(). Some are allowed only for one of the functions, and in |
166 | these cases it is noted below. Note that PCRE2_ANCHORED, PCRE2_ENDANCHORED and |
167 | PCRE2_NO_UTF_CHECK can also be passed to these functions (though |
168 | pcre2_jit_match() ignores the latter since it bypasses all sanity checks). */ |
169 | |
170 | #define PCRE2_NOTBOL 0x00000001u |
171 | #define PCRE2_NOTEOL 0x00000002u |
172 | #define PCRE2_NOTEMPTY 0x00000004u /* ) These two must be kept */ |
173 | #define PCRE2_NOTEMPTY_ATSTART 0x00000008u /* ) adjacent to each other. */ |
174 | #define PCRE2_PARTIAL_SOFT 0x00000010u |
175 | #define PCRE2_PARTIAL_HARD 0x00000020u |
176 | #define PCRE2_DFA_RESTART 0x00000040u /* pcre2_dfa_match() only */ |
177 | #define PCRE2_DFA_SHORTEST 0x00000080u /* pcre2_dfa_match() only */ |
178 | #define PCRE2_SUBSTITUTE_GLOBAL 0x00000100u /* pcre2_substitute() only */ |
179 | #define PCRE2_SUBSTITUTE_EXTENDED 0x00000200u /* pcre2_substitute() only */ |
180 | #define PCRE2_SUBSTITUTE_UNSET_EMPTY 0x00000400u /* pcre2_substitute() only */ |
181 | #define PCRE2_SUBSTITUTE_UNKNOWN_UNSET 0x00000800u /* pcre2_substitute() only */ |
182 | #define PCRE2_SUBSTITUTE_OVERFLOW_LENGTH 0x00001000u /* pcre2_substitute() only */ |
183 | #define PCRE2_NO_JIT 0x00002000u /* Not for pcre2_dfa_match() */ |
184 | #define PCRE2_COPY_MATCHED_SUBJECT 0x00004000u |
185 | #define PCRE2_SUBSTITUTE_LITERAL 0x00008000u /* pcre2_substitute() only */ |
186 | #define PCRE2_SUBSTITUTE_MATCHED 0x00010000u /* pcre2_substitute() only */ |
187 | #define PCRE2_SUBSTITUTE_REPLACEMENT_ONLY 0x00020000u /* pcre2_substitute() only */ |
188 | |
189 | /* Options for pcre2_pattern_convert(). */ |
190 | |
191 | #define PCRE2_CONVERT_UTF 0x00000001u |
192 | #define PCRE2_CONVERT_NO_UTF_CHECK 0x00000002u |
193 | #define PCRE2_CONVERT_POSIX_BASIC 0x00000004u |
194 | #define PCRE2_CONVERT_POSIX_EXTENDED 0x00000008u |
195 | #define PCRE2_CONVERT_GLOB 0x00000010u |
196 | #define PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR 0x00000030u |
197 | #define PCRE2_CONVERT_GLOB_NO_STARSTAR 0x00000050u |
198 | |
199 | /* Newline and \R settings, for use in compile contexts. The newline values |
200 | must be kept in step with values set in config.h and both sets must all be |
201 | greater than zero. */ |
202 | |
203 | #define PCRE2_NEWLINE_CR 1 |
204 | #define PCRE2_NEWLINE_LF 2 |
205 | #define PCRE2_NEWLINE_CRLF 3 |
206 | #define PCRE2_NEWLINE_ANY 4 |
207 | #define PCRE2_NEWLINE_ANYCRLF 5 |
208 | #define PCRE2_NEWLINE_NUL 6 |
209 | |
210 | #define PCRE2_BSR_UNICODE 1 |
211 | #define PCRE2_BSR_ANYCRLF 2 |
212 | |
213 | /* Error codes for pcre2_compile(). Some of these are also used by |
214 | pcre2_pattern_convert(). */ |
215 | |
216 | #define PCRE2_ERROR_END_BACKSLASH 101 |
217 | #define PCRE2_ERROR_END_BACKSLASH_C 102 |
218 | #define PCRE2_ERROR_UNKNOWN_ESCAPE 103 |
219 | #define PCRE2_ERROR_QUANTIFIER_OUT_OF_ORDER 104 |
220 | #define PCRE2_ERROR_QUANTIFIER_TOO_BIG 105 |
221 | #define PCRE2_ERROR_MISSING_SQUARE_BRACKET 106 |
222 | #define PCRE2_ERROR_ESCAPE_INVALID_IN_CLASS 107 |
223 | #define PCRE2_ERROR_CLASS_RANGE_ORDER 108 |
224 | #define PCRE2_ERROR_QUANTIFIER_INVALID 109 |
225 | #define PCRE2_ERROR_INTERNAL_UNEXPECTED_REPEAT 110 |
226 | #define PCRE2_ERROR_INVALID_AFTER_PARENS_QUERY 111 |
227 | #define PCRE2_ERROR_POSIX_CLASS_NOT_IN_CLASS 112 |
228 | #define PCRE2_ERROR_POSIX_NO_SUPPORT_COLLATING 113 |
229 | #define PCRE2_ERROR_MISSING_CLOSING_PARENTHESIS 114 |
230 | #define PCRE2_ERROR_BAD_SUBPATTERN_REFERENCE 115 |
231 | #define PCRE2_ERROR_NULL_PATTERN 116 |
232 | #define PCRE2_ERROR_BAD_OPTIONS 117 |
233 | #define 118 |
234 | #define PCRE2_ERROR_PARENTHESES_NEST_TOO_DEEP 119 |
235 | #define PCRE2_ERROR_PATTERN_TOO_LARGE 120 |
236 | #define PCRE2_ERROR_HEAP_FAILED 121 |
237 | #define PCRE2_ERROR_UNMATCHED_CLOSING_PARENTHESIS 122 |
238 | #define PCRE2_ERROR_INTERNAL_CODE_OVERFLOW 123 |
239 | #define PCRE2_ERROR_MISSING_CONDITION_CLOSING 124 |
240 | #define PCRE2_ERROR_LOOKBEHIND_NOT_FIXED_LENGTH 125 |
241 | #define PCRE2_ERROR_ZERO_RELATIVE_REFERENCE 126 |
242 | #define PCRE2_ERROR_TOO_MANY_CONDITION_BRANCHES 127 |
243 | #define PCRE2_ERROR_CONDITION_ASSERTION_EXPECTED 128 |
244 | #define PCRE2_ERROR_BAD_RELATIVE_REFERENCE 129 |
245 | #define PCRE2_ERROR_UNKNOWN_POSIX_CLASS 130 |
246 | #define PCRE2_ERROR_INTERNAL_STUDY_ERROR 131 |
247 | #define PCRE2_ERROR_UNICODE_NOT_SUPPORTED 132 |
248 | #define PCRE2_ERROR_PARENTHESES_STACK_CHECK 133 |
249 | #define PCRE2_ERROR_CODE_POINT_TOO_BIG 134 |
250 | #define PCRE2_ERROR_LOOKBEHIND_TOO_COMPLICATED 135 |
251 | #define PCRE2_ERROR_LOOKBEHIND_INVALID_BACKSLASH_C 136 |
252 | #define PCRE2_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE 137 |
253 | #define PCRE2_ERROR_CALLOUT_NUMBER_TOO_BIG 138 |
254 | #define PCRE2_ERROR_MISSING_CALLOUT_CLOSING 139 |
255 | #define PCRE2_ERROR_ESCAPE_INVALID_IN_VERB 140 |
256 | #define PCRE2_ERROR_UNRECOGNIZED_AFTER_QUERY_P 141 |
257 | #define PCRE2_ERROR_MISSING_NAME_TERMINATOR 142 |
258 | #define PCRE2_ERROR_DUPLICATE_SUBPATTERN_NAME 143 |
259 | #define PCRE2_ERROR_INVALID_SUBPATTERN_NAME 144 |
260 | #define PCRE2_ERROR_UNICODE_PROPERTIES_UNAVAILABLE 145 |
261 | #define PCRE2_ERROR_MALFORMED_UNICODE_PROPERTY 146 |
262 | #define PCRE2_ERROR_UNKNOWN_UNICODE_PROPERTY 147 |
263 | #define PCRE2_ERROR_SUBPATTERN_NAME_TOO_LONG 148 |
264 | #define PCRE2_ERROR_TOO_MANY_NAMED_SUBPATTERNS 149 |
265 | #define PCRE2_ERROR_CLASS_INVALID_RANGE 150 |
266 | #define PCRE2_ERROR_OCTAL_BYTE_TOO_BIG 151 |
267 | #define PCRE2_ERROR_INTERNAL_OVERRAN_WORKSPACE 152 |
268 | #define PCRE2_ERROR_INTERNAL_MISSING_SUBPATTERN 153 |
269 | #define PCRE2_ERROR_DEFINE_TOO_MANY_BRANCHES 154 |
270 | #define PCRE2_ERROR_BACKSLASH_O_MISSING_BRACE 155 |
271 | #define PCRE2_ERROR_INTERNAL_UNKNOWN_NEWLINE 156 |
272 | #define PCRE2_ERROR_BACKSLASH_G_SYNTAX 157 |
273 | #define PCRE2_ERROR_PARENS_QUERY_R_MISSING_CLOSING 158 |
274 | /* Error 159 is obsolete and should now never occur */ |
275 | #define PCRE2_ERROR_VERB_ARGUMENT_NOT_ALLOWED 159 |
276 | #define PCRE2_ERROR_VERB_UNKNOWN 160 |
277 | #define PCRE2_ERROR_SUBPATTERN_NUMBER_TOO_BIG 161 |
278 | #define PCRE2_ERROR_SUBPATTERN_NAME_EXPECTED 162 |
279 | #define PCRE2_ERROR_INTERNAL_PARSED_OVERFLOW 163 |
280 | #define PCRE2_ERROR_INVALID_OCTAL 164 |
281 | #define PCRE2_ERROR_SUBPATTERN_NAMES_MISMATCH 165 |
282 | #define PCRE2_ERROR_MARK_MISSING_ARGUMENT 166 |
283 | #define PCRE2_ERROR_INVALID_HEXADECIMAL 167 |
284 | #define PCRE2_ERROR_BACKSLASH_C_SYNTAX 168 |
285 | #define PCRE2_ERROR_BACKSLASH_K_SYNTAX 169 |
286 | #define PCRE2_ERROR_INTERNAL_BAD_CODE_LOOKBEHINDS 170 |
287 | #define PCRE2_ERROR_BACKSLASH_N_IN_CLASS 171 |
288 | #define PCRE2_ERROR_CALLOUT_STRING_TOO_LONG 172 |
289 | #define PCRE2_ERROR_UNICODE_DISALLOWED_CODE_POINT 173 |
290 | #define PCRE2_ERROR_UTF_IS_DISABLED 174 |
291 | #define PCRE2_ERROR_UCP_IS_DISABLED 175 |
292 | #define PCRE2_ERROR_VERB_NAME_TOO_LONG 176 |
293 | #define PCRE2_ERROR_BACKSLASH_U_CODE_POINT_TOO_BIG 177 |
294 | #define PCRE2_ERROR_MISSING_OCTAL_OR_HEX_DIGITS 178 |
295 | #define PCRE2_ERROR_VERSION_CONDITION_SYNTAX 179 |
296 | #define PCRE2_ERROR_INTERNAL_BAD_CODE_AUTO_POSSESS 180 |
297 | #define PCRE2_ERROR_CALLOUT_NO_STRING_DELIMITER 181 |
298 | #define PCRE2_ERROR_CALLOUT_BAD_STRING_DELIMITER 182 |
299 | #define PCRE2_ERROR_BACKSLASH_C_CALLER_DISABLED 183 |
300 | #define PCRE2_ERROR_QUERY_BARJX_NEST_TOO_DEEP 184 |
301 | #define PCRE2_ERROR_BACKSLASH_C_LIBRARY_DISABLED 185 |
302 | #define PCRE2_ERROR_PATTERN_TOO_COMPLICATED 186 |
303 | #define PCRE2_ERROR_LOOKBEHIND_TOO_LONG 187 |
304 | #define PCRE2_ERROR_PATTERN_STRING_TOO_LONG 188 |
305 | #define PCRE2_ERROR_INTERNAL_BAD_CODE 189 |
306 | #define PCRE2_ERROR_INTERNAL_BAD_CODE_IN_SKIP 190 |
307 | #define PCRE2_ERROR_NO_SURROGATES_IN_UTF16 191 |
308 | #define PCRE2_ERROR_BAD_LITERAL_OPTIONS 192 |
309 | #define PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE 193 |
310 | #define PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS 194 |
311 | #define PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN 195 |
312 | #define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE 196 |
313 | #define PCRE2_ERROR_TOO_MANY_CAPTURES 197 |
314 | #define PCRE2_ERROR_CONDITION_ATOMIC_ASSERTION_EXPECTED 198 |
315 | #define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND 199 |
316 | |
317 | |
318 | /* "Expected" matching error codes: no match and partial match. */ |
319 | |
320 | #define PCRE2_ERROR_NOMATCH (-1) |
321 | #define PCRE2_ERROR_PARTIAL (-2) |
322 | |
323 | /* Error codes for UTF-8 validity checks */ |
324 | |
325 | #define PCRE2_ERROR_UTF8_ERR1 (-3) |
326 | #define PCRE2_ERROR_UTF8_ERR2 (-4) |
327 | #define PCRE2_ERROR_UTF8_ERR3 (-5) |
328 | #define PCRE2_ERROR_UTF8_ERR4 (-6) |
329 | #define PCRE2_ERROR_UTF8_ERR5 (-7) |
330 | #define PCRE2_ERROR_UTF8_ERR6 (-8) |
331 | #define PCRE2_ERROR_UTF8_ERR7 (-9) |
332 | #define PCRE2_ERROR_UTF8_ERR8 (-10) |
333 | #define PCRE2_ERROR_UTF8_ERR9 (-11) |
334 | #define PCRE2_ERROR_UTF8_ERR10 (-12) |
335 | #define PCRE2_ERROR_UTF8_ERR11 (-13) |
336 | #define PCRE2_ERROR_UTF8_ERR12 (-14) |
337 | #define PCRE2_ERROR_UTF8_ERR13 (-15) |
338 | #define PCRE2_ERROR_UTF8_ERR14 (-16) |
339 | #define PCRE2_ERROR_UTF8_ERR15 (-17) |
340 | #define PCRE2_ERROR_UTF8_ERR16 (-18) |
341 | #define PCRE2_ERROR_UTF8_ERR17 (-19) |
342 | #define PCRE2_ERROR_UTF8_ERR18 (-20) |
343 | #define PCRE2_ERROR_UTF8_ERR19 (-21) |
344 | #define PCRE2_ERROR_UTF8_ERR20 (-22) |
345 | #define PCRE2_ERROR_UTF8_ERR21 (-23) |
346 | |
347 | /* Error codes for UTF-16 validity checks */ |
348 | |
349 | #define PCRE2_ERROR_UTF16_ERR1 (-24) |
350 | #define PCRE2_ERROR_UTF16_ERR2 (-25) |
351 | #define PCRE2_ERROR_UTF16_ERR3 (-26) |
352 | |
353 | /* Error codes for UTF-32 validity checks */ |
354 | |
355 | #define PCRE2_ERROR_UTF32_ERR1 (-27) |
356 | #define PCRE2_ERROR_UTF32_ERR2 (-28) |
357 | |
358 | /* Miscellaneous error codes for pcre2[_dfa]_match(), substring extraction |
359 | functions, context functions, and serializing functions. They are in numerical |
360 | order. Originally they were in alphabetical order too, but now that PCRE2 is |
361 | released, the numbers must not be changed. */ |
362 | |
363 | #define PCRE2_ERROR_BADDATA (-29) |
364 | #define PCRE2_ERROR_MIXEDTABLES (-30) /* Name was changed */ |
365 | #define PCRE2_ERROR_BADMAGIC (-31) |
366 | #define PCRE2_ERROR_BADMODE (-32) |
367 | #define PCRE2_ERROR_BADOFFSET (-33) |
368 | #define PCRE2_ERROR_BADOPTION (-34) |
369 | #define PCRE2_ERROR_BADREPLACEMENT (-35) |
370 | #define PCRE2_ERROR_BADUTFOFFSET (-36) |
371 | #define PCRE2_ERROR_CALLOUT (-37) /* Never used by PCRE2 itself */ |
372 | #define PCRE2_ERROR_DFA_BADRESTART (-38) |
373 | #define PCRE2_ERROR_DFA_RECURSE (-39) |
374 | #define PCRE2_ERROR_DFA_UCOND (-40) |
375 | #define PCRE2_ERROR_DFA_UFUNC (-41) |
376 | #define PCRE2_ERROR_DFA_UITEM (-42) |
377 | #define PCRE2_ERROR_DFA_WSSIZE (-43) |
378 | #define PCRE2_ERROR_INTERNAL (-44) |
379 | #define PCRE2_ERROR_JIT_BADOPTION (-45) |
380 | #define PCRE2_ERROR_JIT_STACKLIMIT (-46) |
381 | #define PCRE2_ERROR_MATCHLIMIT (-47) |
382 | #define PCRE2_ERROR_NOMEMORY (-48) |
383 | #define PCRE2_ERROR_NOSUBSTRING (-49) |
384 | #define PCRE2_ERROR_NOUNIQUESUBSTRING (-50) |
385 | #define PCRE2_ERROR_NULL (-51) |
386 | #define PCRE2_ERROR_RECURSELOOP (-52) |
387 | #define PCRE2_ERROR_DEPTHLIMIT (-53) |
388 | #define PCRE2_ERROR_RECURSIONLIMIT (-53) /* Obsolete synonym */ |
389 | #define PCRE2_ERROR_UNAVAILABLE (-54) |
390 | #define PCRE2_ERROR_UNSET (-55) |
391 | #define PCRE2_ERROR_BADOFFSETLIMIT (-56) |
392 | #define PCRE2_ERROR_BADREPESCAPE (-57) |
393 | #define PCRE2_ERROR_REPMISSINGBRACE (-58) |
394 | #define PCRE2_ERROR_BADSUBSTITUTION (-59) |
395 | #define PCRE2_ERROR_BADSUBSPATTERN (-60) |
396 | #define PCRE2_ERROR_TOOMANYREPLACE (-61) |
397 | #define PCRE2_ERROR_BADSERIALIZEDDATA (-62) |
398 | #define PCRE2_ERROR_HEAPLIMIT (-63) |
399 | #define PCRE2_ERROR_CONVERT_SYNTAX (-64) |
400 | #define PCRE2_ERROR_INTERNAL_DUPMATCH (-65) |
401 | #define PCRE2_ERROR_DFA_UINVALID_UTF (-66) |
402 | |
403 | |
404 | /* Request types for pcre2_pattern_info() */ |
405 | |
406 | #define PCRE2_INFO_ALLOPTIONS 0 |
407 | #define PCRE2_INFO_ARGOPTIONS 1 |
408 | #define PCRE2_INFO_BACKREFMAX 2 |
409 | #define PCRE2_INFO_BSR 3 |
410 | #define PCRE2_INFO_CAPTURECOUNT 4 |
411 | #define PCRE2_INFO_FIRSTCODEUNIT 5 |
412 | #define PCRE2_INFO_FIRSTCODETYPE 6 |
413 | #define PCRE2_INFO_FIRSTBITMAP 7 |
414 | #define PCRE2_INFO_HASCRORLF 8 |
415 | #define PCRE2_INFO_JCHANGED 9 |
416 | #define PCRE2_INFO_JITSIZE 10 |
417 | #define PCRE2_INFO_LASTCODEUNIT 11 |
418 | #define PCRE2_INFO_LASTCODETYPE 12 |
419 | #define PCRE2_INFO_MATCHEMPTY 13 |
420 | #define PCRE2_INFO_MATCHLIMIT 14 |
421 | #define PCRE2_INFO_MAXLOOKBEHIND 15 |
422 | #define PCRE2_INFO_MINLENGTH 16 |
423 | #define PCRE2_INFO_NAMECOUNT 17 |
424 | #define PCRE2_INFO_NAMEENTRYSIZE 18 |
425 | #define PCRE2_INFO_NAMETABLE 19 |
426 | #define PCRE2_INFO_NEWLINE 20 |
427 | #define PCRE2_INFO_DEPTHLIMIT 21 |
428 | #define PCRE2_INFO_RECURSIONLIMIT 21 /* Obsolete synonym */ |
429 | #define PCRE2_INFO_SIZE 22 |
430 | #define PCRE2_INFO_HASBACKSLASHC 23 |
431 | #define PCRE2_INFO_FRAMESIZE 24 |
432 | #define PCRE2_INFO_HEAPLIMIT 25 |
433 | #define 26 |
434 | |
435 | /* Request types for pcre2_config(). */ |
436 | |
437 | #define PCRE2_CONFIG_BSR 0 |
438 | #define PCRE2_CONFIG_JIT 1 |
439 | #define PCRE2_CONFIG_JITTARGET 2 |
440 | #define PCRE2_CONFIG_LINKSIZE 3 |
441 | #define PCRE2_CONFIG_MATCHLIMIT 4 |
442 | #define PCRE2_CONFIG_NEWLINE 5 |
443 | #define PCRE2_CONFIG_PARENSLIMIT 6 |
444 | #define PCRE2_CONFIG_DEPTHLIMIT 7 |
445 | #define PCRE2_CONFIG_RECURSIONLIMIT 7 /* Obsolete synonym */ |
446 | #define PCRE2_CONFIG_STACKRECURSE 8 /* Obsolete */ |
447 | #define PCRE2_CONFIG_UNICODE 9 |
448 | #define PCRE2_CONFIG_UNICODE_VERSION 10 |
449 | #define PCRE2_CONFIG_VERSION 11 |
450 | #define PCRE2_CONFIG_HEAPLIMIT 12 |
451 | #define PCRE2_CONFIG_NEVER_BACKSLASH_C 13 |
452 | #define PCRE2_CONFIG_COMPILED_WIDTHS 14 |
453 | #define PCRE2_CONFIG_TABLES_LENGTH 15 |
454 | |
455 | |
456 | /* Types for code units in patterns and subject strings. */ |
457 | |
458 | typedef uint8_t PCRE2_UCHAR8; |
459 | typedef uint16_t PCRE2_UCHAR16; |
460 | typedef uint32_t PCRE2_UCHAR32; |
461 | |
462 | typedef const PCRE2_UCHAR8 *PCRE2_SPTR8; |
463 | typedef const PCRE2_UCHAR16 *PCRE2_SPTR16; |
464 | typedef const PCRE2_UCHAR32 *PCRE2_SPTR32; |
465 | |
466 | /* The PCRE2_SIZE type is used for all string lengths and offsets in PCRE2, |
467 | including pattern offsets for errors and subject offsets after a match. We |
468 | define special values to indicate zero-terminated strings and unset offsets in |
469 | the offset vector (ovector). */ |
470 | |
471 | #define PCRE2_SIZE size_t |
472 | #define PCRE2_SIZE_MAX SIZE_MAX |
473 | #define PCRE2_ZERO_TERMINATED (~(PCRE2_SIZE)0) |
474 | #define PCRE2_UNSET (~(PCRE2_SIZE)0) |
475 | |
476 | /* Generic types for opaque structures and JIT callback functions. These |
477 | declarations are defined in a macro that is expanded for each width later. */ |
478 | |
479 | #define PCRE2_TYPES_LIST \ |
480 | struct pcre2_real_general_context; \ |
481 | typedef struct pcre2_real_general_context pcre2_general_context; \ |
482 | \ |
483 | struct pcre2_real_compile_context; \ |
484 | typedef struct pcre2_real_compile_context pcre2_compile_context; \ |
485 | \ |
486 | struct pcre2_real_match_context; \ |
487 | typedef struct pcre2_real_match_context pcre2_match_context; \ |
488 | \ |
489 | struct pcre2_real_convert_context; \ |
490 | typedef struct pcre2_real_convert_context pcre2_convert_context; \ |
491 | \ |
492 | struct pcre2_real_code; \ |
493 | typedef struct pcre2_real_code pcre2_code; \ |
494 | \ |
495 | struct pcre2_real_match_data; \ |
496 | typedef struct pcre2_real_match_data pcre2_match_data; \ |
497 | \ |
498 | struct pcre2_real_jit_stack; \ |
499 | typedef struct pcre2_real_jit_stack pcre2_jit_stack; \ |
500 | \ |
501 | typedef pcre2_jit_stack *(*pcre2_jit_callback)(void *); |
502 | |
503 | |
504 | /* The structures for passing out data via callout functions. We use structures |
505 | so that new fields can be added on the end in future versions, without changing |
506 | the API of the function, thereby allowing old clients to work without |
507 | modification. Define the generic versions in a macro; the width-specific |
508 | versions are generated from this macro below. */ |
509 | |
510 | /* Flags for the callout_flags field. These are cleared after a callout. */ |
511 | |
512 | #define PCRE2_CALLOUT_STARTMATCH 0x00000001u /* Set for each bumpalong */ |
513 | #define PCRE2_CALLOUT_BACKTRACK 0x00000002u /* Set after a backtrack */ |
514 | |
515 | #define PCRE2_STRUCTURE_LIST \ |
516 | typedef struct pcre2_callout_block { \ |
517 | uint32_t version; /* Identifies version of block */ \ |
518 | /* ------------------------ Version 0 ------------------------------- */ \ |
519 | uint32_t callout_number; /* Number compiled into pattern */ \ |
520 | uint32_t capture_top; /* Max current capture */ \ |
521 | uint32_t capture_last; /* Most recently closed capture */ \ |
522 | PCRE2_SIZE *offset_vector; /* The offset vector */ \ |
523 | PCRE2_SPTR mark; /* Pointer to current mark or NULL */ \ |
524 | PCRE2_SPTR subject; /* The subject being matched */ \ |
525 | PCRE2_SIZE subject_length; /* The length of the subject */ \ |
526 | PCRE2_SIZE start_match; /* Offset to start of this match attempt */ \ |
527 | PCRE2_SIZE current_position; /* Where we currently are in the subject */ \ |
528 | PCRE2_SIZE pattern_position; /* Offset to next item in the pattern */ \ |
529 | PCRE2_SIZE next_item_length; /* Length of next item in the pattern */ \ |
530 | /* ------------------- Added for Version 1 -------------------------- */ \ |
531 | PCRE2_SIZE callout_string_offset; /* Offset to string within pattern */ \ |
532 | PCRE2_SIZE callout_string_length; /* Length of string compiled into pattern */ \ |
533 | PCRE2_SPTR callout_string; /* String compiled into pattern */ \ |
534 | /* ------------------- Added for Version 2 -------------------------- */ \ |
535 | uint32_t callout_flags; /* See above for list */ \ |
536 | /* ------------------------------------------------------------------ */ \ |
537 | } pcre2_callout_block; \ |
538 | \ |
539 | typedef struct pcre2_callout_enumerate_block { \ |
540 | uint32_t version; /* Identifies version of block */ \ |
541 | /* ------------------------ Version 0 ------------------------------- */ \ |
542 | PCRE2_SIZE pattern_position; /* Offset to next item in the pattern */ \ |
543 | PCRE2_SIZE next_item_length; /* Length of next item in the pattern */ \ |
544 | uint32_t callout_number; /* Number compiled into pattern */ \ |
545 | PCRE2_SIZE callout_string_offset; /* Offset to string within pattern */ \ |
546 | PCRE2_SIZE callout_string_length; /* Length of string compiled into pattern */ \ |
547 | PCRE2_SPTR callout_string; /* String compiled into pattern */ \ |
548 | /* ------------------------------------------------------------------ */ \ |
549 | } pcre2_callout_enumerate_block; \ |
550 | \ |
551 | typedef struct pcre2_substitute_callout_block { \ |
552 | uint32_t version; /* Identifies version of block */ \ |
553 | /* ------------------------ Version 0 ------------------------------- */ \ |
554 | PCRE2_SPTR input; /* Pointer to input subject string */ \ |
555 | PCRE2_SPTR output; /* Pointer to output buffer */ \ |
556 | PCRE2_SIZE output_offsets[2]; /* Changed portion of the output */ \ |
557 | PCRE2_SIZE *ovector; /* Pointer to current ovector */ \ |
558 | uint32_t oveccount; /* Count of pairs set in ovector */ \ |
559 | uint32_t subscount; /* Substitution number */ \ |
560 | /* ------------------------------------------------------------------ */ \ |
561 | } pcre2_substitute_callout_block; |
562 | |
563 | |
564 | /* List the generic forms of all other functions in macros, which will be |
565 | expanded for each width below. Start with functions that give general |
566 | information. */ |
567 | |
568 | #define PCRE2_GENERAL_INFO_FUNCTIONS \ |
569 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_config(uint32_t, void *); |
570 | |
571 | |
572 | /* Functions for manipulating contexts. */ |
573 | |
574 | #define PCRE2_GENERAL_CONTEXT_FUNCTIONS \ |
575 | PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \ |
576 | pcre2_general_context_copy(pcre2_general_context *); \ |
577 | PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \ |
578 | pcre2_general_context_create(void *(*)(PCRE2_SIZE, void *), \ |
579 | void (*)(void *, void *), void *); \ |
580 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
581 | pcre2_general_context_free(pcre2_general_context *); |
582 | |
583 | #define PCRE2_COMPILE_CONTEXT_FUNCTIONS \ |
584 | PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \ |
585 | pcre2_compile_context_copy(pcre2_compile_context *); \ |
586 | PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \ |
587 | pcre2_compile_context_create(pcre2_general_context *);\ |
588 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
589 | pcre2_compile_context_free(pcre2_compile_context *); \ |
590 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
591 | pcre2_set_bsr(pcre2_compile_context *, uint32_t); \ |
592 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
593 | pcre2_set_character_tables(pcre2_compile_context *, const uint8_t *); \ |
594 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
595 | pcre2_set_compile_extra_options(pcre2_compile_context *, uint32_t); \ |
596 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
597 | pcre2_set_max_pattern_length(pcre2_compile_context *, PCRE2_SIZE); \ |
598 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
599 | pcre2_set_newline(pcre2_compile_context *, uint32_t); \ |
600 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
601 | pcre2_set_parens_nest_limit(pcre2_compile_context *, uint32_t); \ |
602 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
603 | pcre2_set_compile_recursion_guard(pcre2_compile_context *, \ |
604 | int (*)(uint32_t, void *), void *); |
605 | |
606 | #define PCRE2_MATCH_CONTEXT_FUNCTIONS \ |
607 | PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \ |
608 | pcre2_match_context_copy(pcre2_match_context *); \ |
609 | PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \ |
610 | pcre2_match_context_create(pcre2_general_context *); \ |
611 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
612 | pcre2_match_context_free(pcre2_match_context *); \ |
613 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
614 | pcre2_set_callout(pcre2_match_context *, \ |
615 | int (*)(pcre2_callout_block *, void *), void *); \ |
616 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
617 | pcre2_set_substitute_callout(pcre2_match_context *, \ |
618 | int (*)(pcre2_substitute_callout_block *, void *), void *); \ |
619 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
620 | pcre2_set_depth_limit(pcre2_match_context *, uint32_t); \ |
621 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
622 | pcre2_set_heap_limit(pcre2_match_context *, uint32_t); \ |
623 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
624 | pcre2_set_match_limit(pcre2_match_context *, uint32_t); \ |
625 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
626 | pcre2_set_offset_limit(pcre2_match_context *, PCRE2_SIZE); \ |
627 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
628 | pcre2_set_recursion_limit(pcre2_match_context *, uint32_t); \ |
629 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
630 | pcre2_set_recursion_memory_management(pcre2_match_context *, \ |
631 | void *(*)(PCRE2_SIZE, void *), void (*)(void *, void *), void *); |
632 | |
633 | #define PCRE2_CONVERT_CONTEXT_FUNCTIONS \ |
634 | PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \ |
635 | pcre2_convert_context_copy(pcre2_convert_context *); \ |
636 | PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \ |
637 | pcre2_convert_context_create(pcre2_general_context *); \ |
638 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
639 | pcre2_convert_context_free(pcre2_convert_context *); \ |
640 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
641 | pcre2_set_glob_escape(pcre2_convert_context *, uint32_t); \ |
642 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
643 | pcre2_set_glob_separator(pcre2_convert_context *, uint32_t); |
644 | |
645 | |
646 | /* Functions concerned with compiling a pattern to PCRE internal code. */ |
647 | |
648 | #define PCRE2_COMPILE_FUNCTIONS \ |
649 | PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ |
650 | pcre2_compile(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, \ |
651 | pcre2_compile_context *); \ |
652 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
653 | pcre2_code_free(pcre2_code *); \ |
654 | PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ |
655 | pcre2_code_copy(const pcre2_code *); \ |
656 | PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ |
657 | pcre2_code_copy_with_tables(const pcre2_code *); |
658 | |
659 | |
660 | /* Functions that give information about a compiled pattern. */ |
661 | |
662 | #define PCRE2_PATTERN_INFO_FUNCTIONS \ |
663 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
664 | pcre2_pattern_info(const pcre2_code *, uint32_t, void *); \ |
665 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
666 | pcre2_callout_enumerate(const pcre2_code *, \ |
667 | int (*)(pcre2_callout_enumerate_block *, void *), void *); |
668 | |
669 | |
670 | /* Functions for running a match and inspecting the result. */ |
671 | |
672 | #define PCRE2_MATCH_FUNCTIONS \ |
673 | PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \ |
674 | pcre2_match_data_create(uint32_t, pcre2_general_context *); \ |
675 | PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \ |
676 | pcre2_match_data_create_from_pattern(const pcre2_code *, \ |
677 | pcre2_general_context *); \ |
678 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
679 | pcre2_dfa_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ |
680 | uint32_t, pcre2_match_data *, pcre2_match_context *, int *, PCRE2_SIZE); \ |
681 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
682 | pcre2_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ |
683 | uint32_t, pcre2_match_data *, pcre2_match_context *); \ |
684 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
685 | pcre2_match_data_free(pcre2_match_data *); \ |
686 | PCRE2_EXP_DECL PCRE2_SPTR PCRE2_CALL_CONVENTION \ |
687 | pcre2_get_mark(pcre2_match_data *); \ |
688 | PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ |
689 | pcre2_get_match_data_size(pcre2_match_data *); \ |
690 | PCRE2_EXP_DECL uint32_t PCRE2_CALL_CONVENTION \ |
691 | pcre2_get_ovector_count(pcre2_match_data *); \ |
692 | PCRE2_EXP_DECL PCRE2_SIZE *PCRE2_CALL_CONVENTION \ |
693 | pcre2_get_ovector_pointer(pcre2_match_data *); \ |
694 | PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ |
695 | pcre2_get_startchar(pcre2_match_data *); |
696 | |
697 | |
698 | /* Convenience functions for handling matched substrings. */ |
699 | |
700 | #define PCRE2_SUBSTRING_FUNCTIONS \ |
701 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
702 | pcre2_substring_copy_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR *, \ |
703 | PCRE2_SIZE *); \ |
704 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
705 | pcre2_substring_copy_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR *, \ |
706 | PCRE2_SIZE *); \ |
707 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
708 | pcre2_substring_free(PCRE2_UCHAR *); \ |
709 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
710 | pcre2_substring_get_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR **, \ |
711 | PCRE2_SIZE *); \ |
712 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
713 | pcre2_substring_get_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR **, \ |
714 | PCRE2_SIZE *); \ |
715 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
716 | pcre2_substring_length_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_SIZE *); \ |
717 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
718 | pcre2_substring_length_bynumber(pcre2_match_data *, uint32_t, PCRE2_SIZE *); \ |
719 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
720 | pcre2_substring_nametable_scan(const pcre2_code *, PCRE2_SPTR, PCRE2_SPTR *, \ |
721 | PCRE2_SPTR *); \ |
722 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
723 | pcre2_substring_number_from_name(const pcre2_code *, PCRE2_SPTR); \ |
724 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
725 | pcre2_substring_list_free(PCRE2_SPTR *); \ |
726 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
727 | pcre2_substring_list_get(pcre2_match_data *, PCRE2_UCHAR ***, PCRE2_SIZE **); |
728 | |
729 | /* Functions for serializing / deserializing compiled patterns. */ |
730 | |
731 | #define PCRE2_SERIALIZE_FUNCTIONS \ |
732 | PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ |
733 | pcre2_serialize_encode(const pcre2_code **, int32_t, uint8_t **, \ |
734 | PCRE2_SIZE *, pcre2_general_context *); \ |
735 | PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ |
736 | pcre2_serialize_decode(pcre2_code **, int32_t, const uint8_t *, \ |
737 | pcre2_general_context *); \ |
738 | PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ |
739 | pcre2_serialize_get_number_of_codes(const uint8_t *); \ |
740 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
741 | pcre2_serialize_free(uint8_t *); |
742 | |
743 | |
744 | /* Convenience function for match + substitute. */ |
745 | |
746 | #define PCRE2_SUBSTITUTE_FUNCTION \ |
747 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
748 | pcre2_substitute(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ |
749 | uint32_t, pcre2_match_data *, pcre2_match_context *, PCRE2_SPTR, \ |
750 | PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE *); |
751 | |
752 | |
753 | /* Functions for converting pattern source strings. */ |
754 | |
755 | #define PCRE2_CONVERT_FUNCTIONS \ |
756 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
757 | pcre2_pattern_convert(PCRE2_SPTR, PCRE2_SIZE, uint32_t, PCRE2_UCHAR **, \ |
758 | PCRE2_SIZE *, pcre2_convert_context *); \ |
759 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
760 | pcre2_converted_pattern_free(PCRE2_UCHAR *); |
761 | |
762 | |
763 | /* Functions for JIT processing */ |
764 | |
765 | #define PCRE2_JIT_FUNCTIONS \ |
766 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
767 | pcre2_jit_compile(pcre2_code *, uint32_t); \ |
768 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
769 | pcre2_jit_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ |
770 | uint32_t, pcre2_match_data *, pcre2_match_context *); \ |
771 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
772 | pcre2_jit_free_unused_memory(pcre2_general_context *); \ |
773 | PCRE2_EXP_DECL pcre2_jit_stack *PCRE2_CALL_CONVENTION \ |
774 | pcre2_jit_stack_create(PCRE2_SIZE, PCRE2_SIZE, pcre2_general_context *); \ |
775 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
776 | pcre2_jit_stack_assign(pcre2_match_context *, pcre2_jit_callback, void *); \ |
777 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
778 | pcre2_jit_stack_free(pcre2_jit_stack *); |
779 | |
780 | |
781 | /* Other miscellaneous functions. */ |
782 | |
783 | #define PCRE2_OTHER_FUNCTIONS \ |
784 | PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ |
785 | pcre2_get_error_message(int, PCRE2_UCHAR *, PCRE2_SIZE); \ |
786 | PCRE2_EXP_DECL const uint8_t *PCRE2_CALL_CONVENTION \ |
787 | pcre2_maketables(pcre2_general_context *); \ |
788 | PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ |
789 | pcre2_maketables_free(pcre2_general_context *, const uint8_t *); |
790 | |
791 | /* Define macros that generate width-specific names from generic versions. The |
792 | three-level macro scheme is necessary to get the macros expanded when we want |
793 | them to be. First we get the width from PCRE2_LOCAL_WIDTH, which is used for |
794 | generating three versions of everything below. After that, PCRE2_SUFFIX will be |
795 | re-defined to use PCRE2_CODE_UNIT_WIDTH, for use when macros such as |
796 | pcre2_compile are called by application code. */ |
797 | |
798 | #define PCRE2_JOIN(a,b) a ## b |
799 | #define PCRE2_GLUE(a,b) PCRE2_JOIN(a,b) |
800 | #define PCRE2_SUFFIX(a) PCRE2_GLUE(a,PCRE2_LOCAL_WIDTH) |
801 | |
802 | |
803 | /* Data types */ |
804 | |
805 | #define PCRE2_UCHAR PCRE2_SUFFIX(PCRE2_UCHAR) |
806 | #define PCRE2_SPTR PCRE2_SUFFIX(PCRE2_SPTR) |
807 | |
808 | #define pcre2_code PCRE2_SUFFIX(pcre2_code_) |
809 | #define pcre2_jit_callback PCRE2_SUFFIX(pcre2_jit_callback_) |
810 | #define pcre2_jit_stack PCRE2_SUFFIX(pcre2_jit_stack_) |
811 | |
812 | #define pcre2_real_code PCRE2_SUFFIX(pcre2_real_code_) |
813 | #define pcre2_real_general_context PCRE2_SUFFIX(pcre2_real_general_context_) |
814 | #define pcre2_real_compile_context PCRE2_SUFFIX(pcre2_real_compile_context_) |
815 | #define pcre2_real_convert_context PCRE2_SUFFIX(pcre2_real_convert_context_) |
816 | #define pcre2_real_match_context PCRE2_SUFFIX(pcre2_real_match_context_) |
817 | #define pcre2_real_jit_stack PCRE2_SUFFIX(pcre2_real_jit_stack_) |
818 | #define pcre2_real_match_data PCRE2_SUFFIX(pcre2_real_match_data_) |
819 | |
820 | |
821 | /* Data blocks */ |
822 | |
823 | #define pcre2_callout_block PCRE2_SUFFIX(pcre2_callout_block_) |
824 | #define pcre2_callout_enumerate_block PCRE2_SUFFIX(pcre2_callout_enumerate_block_) |
825 | #define pcre2_substitute_callout_block PCRE2_SUFFIX(pcre2_substitute_callout_block_) |
826 | #define pcre2_general_context PCRE2_SUFFIX(pcre2_general_context_) |
827 | #define pcre2_compile_context PCRE2_SUFFIX(pcre2_compile_context_) |
828 | #define pcre2_convert_context PCRE2_SUFFIX(pcre2_convert_context_) |
829 | #define pcre2_match_context PCRE2_SUFFIX(pcre2_match_context_) |
830 | #define pcre2_match_data PCRE2_SUFFIX(pcre2_match_data_) |
831 | |
832 | |
833 | /* Functions: the complete list in alphabetical order */ |
834 | |
835 | #define pcre2_callout_enumerate PCRE2_SUFFIX(pcre2_callout_enumerate_) |
836 | #define pcre2_code_copy PCRE2_SUFFIX(pcre2_code_copy_) |
837 | #define pcre2_code_copy_with_tables PCRE2_SUFFIX(pcre2_code_copy_with_tables_) |
838 | #define pcre2_code_free PCRE2_SUFFIX(pcre2_code_free_) |
839 | #define pcre2_compile PCRE2_SUFFIX(pcre2_compile_) |
840 | #define pcre2_compile_context_copy PCRE2_SUFFIX(pcre2_compile_context_copy_) |
841 | #define pcre2_compile_context_create PCRE2_SUFFIX(pcre2_compile_context_create_) |
842 | #define pcre2_compile_context_free PCRE2_SUFFIX(pcre2_compile_context_free_) |
843 | #define pcre2_config PCRE2_SUFFIX(pcre2_config_) |
844 | #define pcre2_convert_context_copy PCRE2_SUFFIX(pcre2_convert_context_copy_) |
845 | #define pcre2_convert_context_create PCRE2_SUFFIX(pcre2_convert_context_create_) |
846 | #define pcre2_convert_context_free PCRE2_SUFFIX(pcre2_convert_context_free_) |
847 | #define pcre2_converted_pattern_free PCRE2_SUFFIX(pcre2_converted_pattern_free_) |
848 | #define pcre2_dfa_match PCRE2_SUFFIX(pcre2_dfa_match_) |
849 | #define pcre2_general_context_copy PCRE2_SUFFIX(pcre2_general_context_copy_) |
850 | #define pcre2_general_context_create PCRE2_SUFFIX(pcre2_general_context_create_) |
851 | #define pcre2_general_context_free PCRE2_SUFFIX(pcre2_general_context_free_) |
852 | #define pcre2_get_error_message PCRE2_SUFFIX(pcre2_get_error_message_) |
853 | #define pcre2_get_mark PCRE2_SUFFIX(pcre2_get_mark_) |
854 | #define pcre2_get_match_data_size PCRE2_SUFFIX(pcre2_get_match_data_size_) |
855 | #define pcre2_get_ovector_pointer PCRE2_SUFFIX(pcre2_get_ovector_pointer_) |
856 | #define pcre2_get_ovector_count PCRE2_SUFFIX(pcre2_get_ovector_count_) |
857 | #define pcre2_get_startchar PCRE2_SUFFIX(pcre2_get_startchar_) |
858 | #define pcre2_jit_compile PCRE2_SUFFIX(pcre2_jit_compile_) |
859 | #define pcre2_jit_match PCRE2_SUFFIX(pcre2_jit_match_) |
860 | #define pcre2_jit_free_unused_memory PCRE2_SUFFIX(pcre2_jit_free_unused_memory_) |
861 | #define pcre2_jit_stack_assign PCRE2_SUFFIX(pcre2_jit_stack_assign_) |
862 | #define pcre2_jit_stack_create PCRE2_SUFFIX(pcre2_jit_stack_create_) |
863 | #define pcre2_jit_stack_free PCRE2_SUFFIX(pcre2_jit_stack_free_) |
864 | #define pcre2_maketables PCRE2_SUFFIX(pcre2_maketables_) |
865 | #define pcre2_maketables_free PCRE2_SUFFIX(pcre2_maketables_free_) |
866 | #define pcre2_match PCRE2_SUFFIX(pcre2_match_) |
867 | #define pcre2_match_context_copy PCRE2_SUFFIX(pcre2_match_context_copy_) |
868 | #define pcre2_match_context_create PCRE2_SUFFIX(pcre2_match_context_create_) |
869 | #define pcre2_match_context_free PCRE2_SUFFIX(pcre2_match_context_free_) |
870 | #define pcre2_match_data_create PCRE2_SUFFIX(pcre2_match_data_create_) |
871 | #define pcre2_match_data_create_from_pattern PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_) |
872 | #define pcre2_match_data_free PCRE2_SUFFIX(pcre2_match_data_free_) |
873 | #define pcre2_pattern_convert PCRE2_SUFFIX(pcre2_pattern_convert_) |
874 | #define pcre2_pattern_info PCRE2_SUFFIX(pcre2_pattern_info_) |
875 | #define pcre2_serialize_decode PCRE2_SUFFIX(pcre2_serialize_decode_) |
876 | #define pcre2_serialize_encode PCRE2_SUFFIX(pcre2_serialize_encode_) |
877 | #define pcre2_serialize_free PCRE2_SUFFIX(pcre2_serialize_free_) |
878 | #define pcre2_serialize_get_number_of_codes PCRE2_SUFFIX(pcre2_serialize_get_number_of_codes_) |
879 | #define pcre2_set_bsr PCRE2_SUFFIX(pcre2_set_bsr_) |
880 | #define pcre2_set_callout PCRE2_SUFFIX(pcre2_set_callout_) |
881 | #define pcre2_set_character_tables PCRE2_SUFFIX(pcre2_set_character_tables_) |
882 | #define PCRE2_SUFFIX(pcre2_set_compile_extra_options_) |
883 | #define pcre2_set_compile_recursion_guard PCRE2_SUFFIX(pcre2_set_compile_recursion_guard_) |
884 | #define pcre2_set_depth_limit PCRE2_SUFFIX(pcre2_set_depth_limit_) |
885 | #define pcre2_set_glob_escape PCRE2_SUFFIX(pcre2_set_glob_escape_) |
886 | #define pcre2_set_glob_separator PCRE2_SUFFIX(pcre2_set_glob_separator_) |
887 | #define pcre2_set_heap_limit PCRE2_SUFFIX(pcre2_set_heap_limit_) |
888 | #define pcre2_set_match_limit PCRE2_SUFFIX(pcre2_set_match_limit_) |
889 | #define pcre2_set_max_pattern_length PCRE2_SUFFIX(pcre2_set_max_pattern_length_) |
890 | #define pcre2_set_newline PCRE2_SUFFIX(pcre2_set_newline_) |
891 | #define pcre2_set_parens_nest_limit PCRE2_SUFFIX(pcre2_set_parens_nest_limit_) |
892 | #define pcre2_set_offset_limit PCRE2_SUFFIX(pcre2_set_offset_limit_) |
893 | #define pcre2_set_substitute_callout PCRE2_SUFFIX(pcre2_set_substitute_callout_) |
894 | #define pcre2_substitute PCRE2_SUFFIX(pcre2_substitute_) |
895 | #define pcre2_substring_copy_byname PCRE2_SUFFIX(pcre2_substring_copy_byname_) |
896 | #define pcre2_substring_copy_bynumber PCRE2_SUFFIX(pcre2_substring_copy_bynumber_) |
897 | #define pcre2_substring_free PCRE2_SUFFIX(pcre2_substring_free_) |
898 | #define pcre2_substring_get_byname PCRE2_SUFFIX(pcre2_substring_get_byname_) |
899 | #define pcre2_substring_get_bynumber PCRE2_SUFFIX(pcre2_substring_get_bynumber_) |
900 | #define pcre2_substring_length_byname PCRE2_SUFFIX(pcre2_substring_length_byname_) |
901 | #define pcre2_substring_length_bynumber PCRE2_SUFFIX(pcre2_substring_length_bynumber_) |
902 | #define pcre2_substring_list_get PCRE2_SUFFIX(pcre2_substring_list_get_) |
903 | #define pcre2_substring_list_free PCRE2_SUFFIX(pcre2_substring_list_free_) |
904 | #define pcre2_substring_nametable_scan PCRE2_SUFFIX(pcre2_substring_nametable_scan_) |
905 | #define pcre2_substring_number_from_name PCRE2_SUFFIX(pcre2_substring_number_from_name_) |
906 | |
907 | /* Keep this old function name for backwards compatibility */ |
908 | #define pcre2_set_recursion_limit PCRE2_SUFFIX(pcre2_set_recursion_limit_) |
909 | |
910 | /* Keep this obsolete function for backwards compatibility: it is now a noop. */ |
911 | #define pcre2_set_recursion_memory_management PCRE2_SUFFIX(pcre2_set_recursion_memory_management_) |
912 | |
913 | /* Now generate all three sets of width-specific structures and function |
914 | prototypes. */ |
915 | |
916 | #define PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS \ |
917 | PCRE2_TYPES_LIST \ |
918 | PCRE2_STRUCTURE_LIST \ |
919 | PCRE2_GENERAL_INFO_FUNCTIONS \ |
920 | PCRE2_GENERAL_CONTEXT_FUNCTIONS \ |
921 | PCRE2_COMPILE_CONTEXT_FUNCTIONS \ |
922 | PCRE2_CONVERT_CONTEXT_FUNCTIONS \ |
923 | PCRE2_CONVERT_FUNCTIONS \ |
924 | PCRE2_MATCH_CONTEXT_FUNCTIONS \ |
925 | PCRE2_COMPILE_FUNCTIONS \ |
926 | PCRE2_PATTERN_INFO_FUNCTIONS \ |
927 | PCRE2_MATCH_FUNCTIONS \ |
928 | PCRE2_SUBSTRING_FUNCTIONS \ |
929 | PCRE2_SERIALIZE_FUNCTIONS \ |
930 | PCRE2_SUBSTITUTE_FUNCTION \ |
931 | PCRE2_JIT_FUNCTIONS \ |
932 | PCRE2_OTHER_FUNCTIONS |
933 | |
934 | #define PCRE2_LOCAL_WIDTH 8 |
935 | PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS |
936 | #undef PCRE2_LOCAL_WIDTH |
937 | |
938 | #define PCRE2_LOCAL_WIDTH 16 |
939 | PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS |
940 | #undef PCRE2_LOCAL_WIDTH |
941 | |
942 | #define PCRE2_LOCAL_WIDTH 32 |
943 | PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS |
944 | #undef PCRE2_LOCAL_WIDTH |
945 | |
946 | /* Undefine the list macros; they are no longer needed. */ |
947 | |
948 | #undef PCRE2_TYPES_LIST |
949 | #undef PCRE2_STRUCTURE_LIST |
950 | #undef PCRE2_GENERAL_INFO_FUNCTIONS |
951 | #undef PCRE2_GENERAL_CONTEXT_FUNCTIONS |
952 | #undef PCRE2_COMPILE_CONTEXT_FUNCTIONS |
953 | #undef PCRE2_CONVERT_CONTEXT_FUNCTIONS |
954 | #undef PCRE2_MATCH_CONTEXT_FUNCTIONS |
955 | #undef PCRE2_COMPILE_FUNCTIONS |
956 | #undef PCRE2_PATTERN_INFO_FUNCTIONS |
957 | #undef PCRE2_MATCH_FUNCTIONS |
958 | #undef PCRE2_SUBSTRING_FUNCTIONS |
959 | #undef PCRE2_SERIALIZE_FUNCTIONS |
960 | #undef PCRE2_SUBSTITUTE_FUNCTION |
961 | #undef PCRE2_JIT_FUNCTIONS |
962 | #undef PCRE2_OTHER_FUNCTIONS |
963 | #undef PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS |
964 | |
965 | /* PCRE2_CODE_UNIT_WIDTH must be defined. If it is 8, 16, or 32, redefine |
966 | PCRE2_SUFFIX to use it. If it is 0, undefine the other macros and make |
967 | PCRE2_SUFFIX a no-op. Otherwise, generate an error. */ |
968 | |
969 | #undef PCRE2_SUFFIX |
970 | #ifndef PCRE2_CODE_UNIT_WIDTH |
971 | #error PCRE2_CODE_UNIT_WIDTH must be defined before including pcre2.h. |
972 | #error Use 8, 16, or 32; or 0 for a multi-width application. |
973 | #else /* PCRE2_CODE_UNIT_WIDTH is defined */ |
974 | #if PCRE2_CODE_UNIT_WIDTH == 8 || \ |
975 | PCRE2_CODE_UNIT_WIDTH == 16 || \ |
976 | PCRE2_CODE_UNIT_WIDTH == 32 |
977 | #define PCRE2_SUFFIX(a) PCRE2_GLUE(a, PCRE2_CODE_UNIT_WIDTH) |
978 | #elif PCRE2_CODE_UNIT_WIDTH == 0 |
979 | #undef PCRE2_JOIN |
980 | #undef PCRE2_GLUE |
981 | #define PCRE2_SUFFIX(a) a |
982 | #else |
983 | #error PCRE2_CODE_UNIT_WIDTH must be 0, 8, 16, or 32. |
984 | #endif |
985 | #endif /* PCRE2_CODE_UNIT_WIDTH is defined */ |
986 | |
987 | #ifdef __cplusplus |
988 | } /* extern "C" */ |
989 | #endif |
990 | |
991 | #endif /* PCRE2_H_IDEMPOTENT_GUARD */ |
992 | |
993 | /* End of pcre2.h */ |
994 | |