Elliott Hughes | 5b80804 | 2021-10-01 10:56:10 -0700 | [diff] [blame] | 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 @PCRE2_MAJOR@ |
| 45 | #define PCRE2_MINOR @PCRE2_MINOR@ |
| 46 | #define PCRE2_PRERELEASE @PCRE2_PRERELEASE@ |
| 47 | #define PCRE2_DATE @PCRE2_DATE@ |
| 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 |
Elliott Hughes | 16619d6 | 2021-10-29 12:10:38 -0700 | [diff] [blame] | 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. */ |
Elliott Hughes | 5b80804 | 2021-10-01 10:56:10 -0700 | [diff] [blame] | 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 PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES 0x00000001u /* C */ |
| 150 | #define PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL 0x00000002u /* C */ |
| 151 | #define PCRE2_EXTRA_MATCH_WORD 0x00000004u /* C */ |
| 152 | #define PCRE2_EXTRA_MATCH_LINE 0x00000008u /* C */ |
| 153 | #define PCRE2_EXTRA_ESCAPED_CR_IS_LF 0x00000010u /* C */ |
| 154 | #define PCRE2_EXTRA_ALT_BSUX 0x00000020u /* C */ |
| 155 | #define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK 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 PCRE2_ERROR_MISSING_COMMENT_CLOSING 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 PCRE2_INFO_EXTRAOPTIONS 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_set_compile_extra_options 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 */ |