165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/************************************************* 265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich* Perl-Compatible Regular Expressions * 365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*************************************************/ 465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* PCRE is a library of functions to support regular expressions whose syntax 765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichand semantics are as close as possible to those of the Perl 5 language. 865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich Written by Philip Hazel 1065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich Copyright (c) 1997-2014 University of Cambridge 1165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich----------------------------------------------------------------------------- 1365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichRedistribution and use in source and binary forms, with or without 1465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmodification, are permitted provided that the following conditions are met: 1565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich * Redistributions of source code must retain the above copyright notice, 1765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich this list of conditions and the following disclaimer. 1865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich * Redistributions in binary form must reproduce the above copyright 2065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich notice, this list of conditions and the following disclaimer in the 2165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich documentation and/or other materials provided with the distribution. 2265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich * Neither the name of the University of Cambridge nor the names of its 2465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich contributors may be used to endorse or promote products derived from 2565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich this software without specific prior written permission. 2665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2865de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2965de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 3065de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 3165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 3265de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 3365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 3465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 3565de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichPOSSIBILITY OF SUCH DAMAGE. 3865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich----------------------------------------------------------------------------- 3965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*/ 4065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 4165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This header contains definitions that are shared between the different 4265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmodules, but which are not relevant to the exported API. This includes some 4365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfunctions whose names all begin with "_pcre_", "_pcre16_" or "_pcre32_" 4465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdepending on the PRIV macro. */ 4565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 4665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PCRE_INTERNAL_H 4765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_INTERNAL_H 4865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 4965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Define PCRE_DEBUG to get debugging output on stdout. */ 5065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 5165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if 0 5265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_DEBUG 5365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 5465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 5565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* PCRE is compiled as an 8 bit library if it is not requested otherwise. */ 5665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 5765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if !defined COMPILE_PCRE16 && !defined COMPILE_PCRE32 5865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define COMPILE_PCRE8 5965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 6065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 6165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* If SUPPORT_UCP is defined, SUPPORT_UTF must also be defined. The 6265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich"configure" script ensures this, but not everybody uses "configure". */ 6365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 6465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined SUPPORT_UCP && !(defined SUPPORT_UTF) 6565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define SUPPORT_UTF 1 6665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 6765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 6865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* We define SUPPORT_UTF if SUPPORT_UTF8 is enabled for compatibility 6965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichreasons with existing code. */ 7065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 7165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined SUPPORT_UTF8 && !(defined SUPPORT_UTF) 7265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define SUPPORT_UTF 1 7365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 7465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 7565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Fixme: SUPPORT_UTF8 should be eventually disappear from the code. 7665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichUntil then we define it if SUPPORT_UTF is defined. */ 7765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 7865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined SUPPORT_UTF && !(defined SUPPORT_UTF8) 7965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define SUPPORT_UTF8 1 8065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 8165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 8265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* We do not support both EBCDIC and UTF-8/16/32 at the same time. The "configure" 8365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichscript prevents both being selected, but not everybody uses "configure". */ 8465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 8565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined EBCDIC && defined SUPPORT_UTF 8665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error The use of both EBCDIC and SUPPORT_UTF is not supported. 8765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 8865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 8965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef 9065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinline, and there are *still* stupid compilers about that don't like indented 9165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpre-processor statements, or at least there were when I first wrote this. After 9265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichall, it had only been about 10 years then... 9365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 9465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichIt turns out that the Mac Debugging.h header also defines the macro DPRINTF, so 9565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbe absolutely sure we get our version. */ 9665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 9765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#undef DPRINTF 9865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef PCRE_DEBUG 9965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define DPRINTF(p) printf p 10065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 10165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define DPRINTF(p) /* Nothing */ 10265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 10365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 10465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 10565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Standard C headers plus the external interface definition. The only time 10665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsetjmp and stdarg are used is when NO_RECURSE is set. */ 10765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 10865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <ctype.h> 10965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <limits.h> 11065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <stddef.h> 11165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <stdio.h> 11265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <stdlib.h> 11365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <string.h> 11465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 11565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Valgrind (memcheck) support */ 11665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 11765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef SUPPORT_VALGRIND 11865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <valgrind/memcheck.h> 11965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 12065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 12165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* When compiling a DLL for Windows, the exported symbols have to be declared 12265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichusing some MS magic. I found some useful information on this web page: 12365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichhttp://msdn2.microsoft.com/en-us/library/y4h7bcy6(VS.80).aspx. According to the 12465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinformation there, using __declspec(dllexport) without "extern" we have a 12565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdefinition; with "extern" we have a declaration. The settings here override the 12665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsetting in pcre.h (which is included below); it defines only PCRE_EXP_DECL, 12765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwhich is all that is needed for applications (they just import the symbols). We 12865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichuse: 12965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 13065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_EXP_DECL for declarations 13165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_EXP_DEFN for definitions of exported functions 13265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_EXP_DATA_DEFN for definitions of exported variables 13365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 13465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe reason for the two DEFN macros is that in non-Windows environments, one 13565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdoes not want to have "extern" before variable definitions because it leads to 13665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcompiler warnings. So we distinguish between functions and variables. In 13765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichWindows, the two should always be the same. 13865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 13965de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe reason for wrapping this in #ifndef PCRE_EXP_DECL is so that pcretest, 14065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwhich is an application, but needs to import this file in order to "peek" at 14165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinternals, can #include pcre.h first to get an application's-eye view. 14265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 14365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichIn principle, people compiling for non-Windows, non-Unix-like (i.e. uncommon, 14465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichspecial-purpose environments) might want to stick other stuff in front of 14565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichexported symbols. That's why, in the non-Windows case, we set PCRE_EXP_DEFN and 14665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichPCRE_EXP_DATA_DEFN only if they are not already set. */ 14765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 14865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PCRE_EXP_DECL 14965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# ifdef _WIN32 15065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# ifndef PCRE_STATIC 15165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DECL extern __declspec(dllexport) 15265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DEFN __declspec(dllexport) 15365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DATA_DEFN __declspec(dllexport) 15465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# else 15565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DECL extern 15665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DEFN 15765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DATA_DEFN 15865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# endif 15965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# else 16065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# ifdef __cplusplus 16165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DECL extern "C" 16265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# else 16365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DECL extern 16465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# endif 16565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# ifndef PCRE_EXP_DEFN 16665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DEFN PCRE_EXP_DECL 16765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# endif 16865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# ifndef PCRE_EXP_DATA_DEFN 16965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# define PCRE_EXP_DATA_DEFN 17065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# endif 17165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# endif 17265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 17365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 17465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* When compiling with the MSVC compiler, it is sometimes necessary to include 17565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevicha "calling convention" before exported function names. (This is secondhand 17665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinformation; I know nothing about MSVC myself). For example, something like 17765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 17865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich void __cdecl function(....) 17965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 18065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmight be needed. In order so make this easy, all the exported functions have 18165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichPCRE_CALL_CONVENTION just before their names. It is rarely needed; if not 18265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichset, we ensure here that it has no effect. */ 18365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 18465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PCRE_CALL_CONVENTION 18565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_CALL_CONVENTION 18665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 18765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 18865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* We need to have types that specify unsigned 8, 16 and 32-bit integers. We 18965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcannot determine these outside the compilation (e.g. by running a program as 19065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpart of "configure") because PCRE is often cross-compiled for use on other 19165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsystems. Instead we make use of the maximum sizes that are available at 19265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpreprocessor time in standard C environments. */ 19365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 19465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef unsigned char pcre_uint8; 19565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 19665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if USHRT_MAX == 65535 19765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef unsigned short pcre_uint16; 19865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef short pcre_int16; 19965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_UINT16_MAX USHRT_MAX 20065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_INT16_MAX SHRT_MAX 20165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif UINT_MAX == 65535 20265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef unsigned int pcre_uint16; 20365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef int pcre_int16; 20465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_UINT16_MAX UINT_MAX 20565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_INT16_MAX INT_MAX 20665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 20765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Cannot determine a type for 16-bit integers 20865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 20965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 21065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if UINT_MAX == 4294967295U 21165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef unsigned int pcre_uint32; 21265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef int pcre_int32; 21365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_UINT32_MAX UINT_MAX 21465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_INT32_MAX INT_MAX 21565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif ULONG_MAX == 4294967295UL 21665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef unsigned long int pcre_uint32; 21765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef long int pcre_int32; 21865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_UINT32_MAX ULONG_MAX 21965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_INT32_MAX LONG_MAX 22065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 22165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Cannot determine a type for 32-bit integers 22265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 22365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 22465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* When checking for integer overflow in pcre_compile(), we need to handle 22565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichlarge integers. If a 64-bit integer type is available, we can use that. 22665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichOtherwise we have to cast to double, which of course requires floating point 22765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevicharithmetic. Handle this by defining a macro for the appropriate type. If 22865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichstdint.h is available, include it; it may define INT64_MAX. Systems that do not 22965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichhave stdint.h (e.g. Solaris) may have inttypes.h. The macro int64_t may be set 23065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichby "configure". */ 23165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 23265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined HAVE_STDINT_H 23365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <stdint.h> 23465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined HAVE_INTTYPES_H 23565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include <inttypes.h> 23665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 23765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 23865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined INT64_MAX || defined int64_t 23965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define INT64_OR_DOUBLE int64_t 24065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 24165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define INT64_OR_DOUBLE double 24265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 24365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 24465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* All character handling must be done as unsigned characters. Otherwise there 24565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichare problems with top-bit-set characters and functions such as isspace(). 24665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichHowever, we leave the interface to the outside world as char * or short *, 24765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbecause that should make things easier for callers. This character type is 24865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcalled pcre_uchar. 24965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 25065de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe IN_UCHARS macro multiply its argument with the byte size of the current 25165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_uchar type. Useful for memcpy and such operations, whose require the 25265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbyte size of their input/output buffers. 25365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 25465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe MAX_255 macro checks whether its pcre_uchar input is less than 256. 25565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 25665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe TABLE_GET macro is designed for accessing elements of tables whose contain 25765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichexactly 256 items. When the character is able to contain more than 256 25865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichitems, some check is needed before accessing these tables. 25965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*/ 26065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 26165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 26265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 26365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef unsigned char pcre_uchar; 26465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define IN_UCHARS(x) (x) 26565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_255(c) 1 26665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define TABLE_GET(c, table, default) ((table)[c]) 26765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 26865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 26965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 27065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if USHRT_MAX != 65535 27165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This is a warning message. Change PCRE_UCHAR16 to a 16 bit data type in 27265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre.h(.in) and disable (comment out) this message. */ 27365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Warning: PCRE_UCHAR16 is not a 16 bit data type. 27465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 27565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 27665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef pcre_uint16 pcre_uchar; 27765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCHAR_SHIFT (1) 27865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define IN_UCHARS(x) ((x) << UCHAR_SHIFT) 27965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_255(c) ((c) <= 255u) 28065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default)) 28165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 28265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 28365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 28465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef pcre_uint32 pcre_uchar; 28565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCHAR_SHIFT (2) 28665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define IN_UCHARS(x) ((x) << UCHAR_SHIFT) 28765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_255(c) ((c) <= 255u) 28865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default)) 28965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 29065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 29165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Unsupported compiling mode 29265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE[8|16|32] */ 29365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 29465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This is an unsigned int value that no character can ever have. UTF-8 29565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcharacters only go up to 0x7fffffff (though Unicode doesn't go beyond 29665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich0x0010ffff). */ 29765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 29865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define NOTACHAR 0xffffffff 29965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 30065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* PCRE is able to support several different kinds of newline (CR, LF, CRLF, 30165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich"any" and "anycrlf" at present). The following macros are used to package up 30265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtesting for newlines. NLBLOCK, PSSTART, and PSEND are defined in the various 30365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmodules to indicate in which datablock the parameters exist, and what the 30465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichstart/end of string field names are. */ 30565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 30665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define NLTYPE_FIXED 0 /* Newline is a fixed length string */ 30765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define NLTYPE_ANY 1 /* Newline is any Unicode line ending */ 30865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define NLTYPE_ANYCRLF 2 /* Newline is CR, LF, or CRLF */ 30965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 31065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This macro checks for a newline at the given position */ 31165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 31265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define IS_NEWLINE(p) \ 31365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((NLBLOCK->nltype != NLTYPE_FIXED)? \ 31465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((p) < NLBLOCK->PSEND && \ 31565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PRIV(is_newline)((p), NLBLOCK->nltype, NLBLOCK->PSEND, \ 31665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich &(NLBLOCK->nllen), utf)) \ 31765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich : \ 31865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \ 31965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich UCHAR21TEST(p) == NLBLOCK->nl[0] && \ 32065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (NLBLOCK->nllen == 1 || UCHAR21TEST(p+1) == NLBLOCK->nl[1]) \ 32165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ) \ 32265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ) 32365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 32465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This macro checks for a newline immediately preceding the given position */ 32565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 32665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define WAS_NEWLINE(p) \ 32765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((NLBLOCK->nltype != NLTYPE_FIXED)? \ 32865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((p) > NLBLOCK->PSSTART && \ 32965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PRIV(was_newline)((p), NLBLOCK->nltype, NLBLOCK->PSSTART, \ 33065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich &(NLBLOCK->nllen), utf)) \ 33165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich : \ 33265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \ 33365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich UCHAR21TEST(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ 33465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (NLBLOCK->nllen == 1 || UCHAR21TEST(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ 33565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ) \ 33665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ) 33765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 33865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* When PCRE is compiled as a C++ library, the subject pointer can be replaced 33965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwith a custom type. This makes it possible, for example, to allow pcre_exec() 34065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichto process subject strings that are discontinuous by using a smart pointer 34165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichclass. It must always be possible to inspect all of the subject string in 34265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_exec() because of the way it backtracks. Two macros are required in the 34365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichnormal case, for sign-unspecified and unsigned char pointers. The former is 34465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichused for the external interface and appears in pcre.h, which is why its name 34565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmust begin with PCRE_. */ 34665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 34765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef CUSTOM_SUBJECT_PTR 34865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_PUCHAR CUSTOM_SUBJECT_PTR 34965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 35065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_PUCHAR const pcre_uchar * 35165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 35265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 35365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Include the public PCRE header and the definitions of UCP character property 35465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichvalues. */ 35565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 35665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include "pcre.h" 35765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#include "ucp.h" 35865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 35965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef COMPILE_PCRE32 36065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Assert that the public PCRE_UCHAR32 is a 32-bit type */ 36165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef int __assert_pcre_uchar32_size[sizeof(PCRE_UCHAR32) == 4 ? 1 : -1]; 36265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 36365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 36465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* When compiling for use with the Virtual Pascal compiler, these functions 36565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichneed to have their names changed. PCRE must be compiled with the -DVPCOMPAT 36665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichoption on the command line. */ 36765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 36865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef VPCOMPAT 36965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define strlen(s) _strlen(s) 37065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define strncmp(s1,s2,m) _strncmp(s1,s2,m) 37165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define memcmp(s,c,n) _memcmp(s,c,n) 37265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define memcpy(d,s,n) _memcpy(d,s,n) 37365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define memmove(d,s,n) _memmove(d,s,n) 37465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define memset(s,c,n) _memset(s,c,n) 37565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else /* VPCOMPAT */ 37665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 37765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(), 37865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdefine a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY 37965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichis set. Otherwise, include an emulating function for those systems that have 38065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichneither (there some non-Unix environments where this is the case). */ 38165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 38265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef HAVE_MEMMOVE 38365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#undef memmove /* some systems may have a macro */ 38465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef HAVE_BCOPY 38565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define memmove(a, b, c) bcopy(b, a, c) 38665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else /* HAVE_BCOPY */ 38765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichstatic void * 38865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_memmove(void *d, const void *s, size_t n) 38965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich{ 39065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsize_t i; 39165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichunsigned char *dest = (unsigned char *)d; 39265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichconst unsigned char *src = (const unsigned char *)s; 39365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichif (dest > src) 39465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { 39565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich dest += n; 39665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich src += n; 39765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich for (i = 0; i < n; ++i) *(--dest) = *(--src); 39865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich return (void *)dest; 39965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } 40065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichelse 40165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { 40265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich for (i = 0; i < n; ++i) *dest++ = *src++; 40365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich return (void *)(dest - n); 40465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } 40565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} 40665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define memmove(a, b, c) pcre_memmove(a, b, c) 40765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* not HAVE_BCOPY */ 40865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* not HAVE_MEMMOVE */ 40965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* not VPCOMPAT */ 41065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 41165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 41265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored 41365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichin big-endian order) by default. These are used, for example, to link from the 41465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichstart of a subpattern to its alternatives and its end. The use of 2 bytes per 41565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichoffset limits the size of the compiled regex to around 64K, which is big enough 41665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfor almost everybody. However, I received a request for an even bigger limit. 41765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichFor this reason, and also to make the code easier to maintain, the storing and 41865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichloading of offsets from the byte string is now handled by the macros that are 41965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdefined here. 42065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 42165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe macros are controlled by the value of LINK_SIZE. This defaults to 2 in 42265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthe config.h file, but can be overridden by using -D on the command line. This 42365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichis automated on Unix systems via the "configure" command. */ 42465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 42565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 42665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 42765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if LINK_SIZE == 2 42865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 42965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT(a,n,d) \ 43065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n] = (d) >> 8), \ 43165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[(n)+1] = (d) & 255) 43265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 43365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET(a,n) \ 43465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (((a)[n] << 8) | (a)[(n)+1]) 43565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 43665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_PATTERN_SIZE (1 << 16) 43765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 43865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 43965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif LINK_SIZE == 3 44065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 44165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT(a,n,d) \ 44265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n] = (d) >> 16), \ 44365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[(n)+1] = (d) >> 8), \ 44465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[(n)+2] = (d) & 255) 44565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 44665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET(a,n) \ 44765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2]) 44865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 44965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_PATTERN_SIZE (1 << 24) 45065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 45165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 45265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif LINK_SIZE == 4 45365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 45465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT(a,n,d) \ 45565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n] = (d) >> 24), \ 45665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[(n)+1] = (d) >> 16), \ 45765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[(n)+2] = (d) >> 8), \ 45865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[(n)+3] = (d) & 255) 45965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 46065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET(a,n) \ 46165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3]) 46265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 46365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Keep it positive */ 46465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_PATTERN_SIZE (1 << 30) 46565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 46665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 46765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error LINK_SIZE must be either 2, 3, or 4 46865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 46965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 47065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 47165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 47265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if LINK_SIZE == 2 47365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 47465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Redefine LINK_SIZE as a multiple of sizeof(pcre_uchar) */ 47565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#undef LINK_SIZE 47665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define LINK_SIZE 1 47765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 47865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT(a,n,d) \ 47965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n] = (d)) 48065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 48165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET(a,n) \ 48265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n]) 48365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 48465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_PATTERN_SIZE (1 << 16) 48565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 48665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif LINK_SIZE == 3 || LINK_SIZE == 4 48765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 48865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Redefine LINK_SIZE as a multiple of sizeof(pcre_uchar) */ 48965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#undef LINK_SIZE 49065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define LINK_SIZE 2 49165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 49265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT(a,n,d) \ 49365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n] = (d) >> 16), \ 49465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[(n)+1] = (d) & 65535) 49565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 49665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET(a,n) \ 49765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (((a)[n] << 16) | (a)[(n)+1]) 49865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 49965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Keep it positive */ 50065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_PATTERN_SIZE (1 << 30) 50165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 50265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 50365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error LINK_SIZE must be either 2, 3, or 4 50465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 50565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 50665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 50765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 50865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Only supported LINK_SIZE is 4 */ 50965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Redefine LINK_SIZE as a multiple of sizeof(pcre_uchar) */ 51065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#undef LINK_SIZE 51165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define LINK_SIZE 1 51265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 51365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT(a,n,d) \ 51465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n] = (d)) 51565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 51665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET(a,n) \ 51765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (a[n]) 51865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 51965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Keep it positive */ 52065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_PATTERN_SIZE (1 << 30) 52165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 52265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 52365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Unsupported compiling mode 52465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE[8|16|32] */ 52565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 52665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Convenience macro defined in terms of the others */ 52765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 52865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUTINC(a,n,d) PUT(a,n,d), a += LINK_SIZE 52965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 53065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 53165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* PCRE uses some other 2-byte quantities that do not change when the size of 53265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichoffsets changes. There are used for repeat counts and for other things such as 53365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcapturing parenthesis numbers in back references. */ 53465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 53565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 53665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 53765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define IMM2_SIZE 2 53865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 53965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT2(a,n,d) \ 54065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich a[n] = (d) >> 8; \ 54165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich a[(n)+1] = (d) & 255 54265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 54365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* For reasons that I do not understand, the expression in this GET2 macro is 54465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtreated by gcc as a signed expression, even when a is declared as unsigned. It 54565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichseems that any kind of arithmetic results in a signed value. */ 54665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 54765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET2(a,n) \ 54865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (unsigned int)(((a)[n] << 8) | (a)[(n)+1]) 54965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 55065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 55165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 55265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define IMM2_SIZE 1 55365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 55465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT2(a,n,d) \ 55565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich a[n] = d 55665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 55765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET2(a,n) \ 55865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich a[n] 55965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 56065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 56165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 56265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define IMM2_SIZE 1 56365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 56465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT2(a,n,d) \ 56565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich a[n] = d 56665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 56765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET2(a,n) \ 56865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich a[n] 56965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 57065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 57165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Unsupported compiling mode 57265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE[8|16|32] */ 57365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 57465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUT2INC(a,n,d) PUT2(a,n,d), a += IMM2_SIZE 57565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 57665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* The maximum length of a MARK name is currently one data unit; it may be 57765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichchanged in future to be a fixed number of bytes or to depend on LINK_SIZE. */ 57865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 57965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32 58065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_MARK ((1u << 16) - 1) 58165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 58265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_MARK ((1u << 8) - 1) 58365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 58465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 58565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* There is a proposed future special "UTF-21" mode, in which only the lowest 58665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich21 bits of a 32-bit character are interpreted as UTF, with the remaining 11 58765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichhigh-order bits available to the application for other uses. In preparation for 58865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthe future implementation of this mode, there are macros that load a data item 58965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichand, if in this special mode, mask it to 21 bits. These macros all have names 59065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichstarting with UCHAR21. In all other modes, including the normal 32-bit 59165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichlibrary, the macros all have the same simple definitions. When the new mode is 59265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichimplemented, it is expected that these definitions will be varied appropriately 59365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichusing #ifdef when compiling the library that supports the special mode. */ 59465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 59565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCHAR21(eptr) (*(eptr)) 59665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCHAR21TEST(eptr) (*(eptr)) 59765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCHAR21INC(eptr) (*(eptr)++) 59865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCHAR21INCTEST(eptr) (*(eptr)++) 59965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 60065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* When UTF encoding is being used, a character is no longer just a single 60165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbyte in 8-bit mode or a single short in 16-bit mode. The macros for character 60265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichhandling generate simple sequences when used in the basic mode, and more 60365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcomplicated ones for UTF characters. GETCHARLENTEST and other macros are not 60465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichused when UTF is not supported. To make sure they can never even appear when 60565de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichUTF support is omitted, we don't even define them. */ 60665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 60765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef SUPPORT_UTF 60865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 60965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define MAX_VALUE_FOR_SINGLE_CHAR */ 61065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define HAS_EXTRALEN(c) */ 61165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define GET_EXTRALEN(c) */ 61265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define NOT_FIRSTCHAR(c) */ 61365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHAR(c, eptr) c = *eptr; 61465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARTEST(c, eptr) c = *eptr; 61565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINC(c, eptr) c = *eptr++; 61665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINCTEST(c, eptr) c = *eptr++; 61765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARLEN(c, eptr, len) c = *eptr; 61865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define GETCHARLENTEST(c, eptr, len) */ 61965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define BACKCHAR(eptr) */ 62065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define FORWARDCHAR(eptr) */ 62165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* #define ACROSSCHAR(condition, eptr, action) */ 62265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 62365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else /* SUPPORT_UTF */ 62465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 62565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Tests whether the code point needs extra characters to decode. */ 62665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 62765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HASUTF8EXTRALEN(c) ((c) >= 0xc0) 62865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 62965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Base macro to pick up the remaining bytes of a UTF-8 character, not 63065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichadvancing the pointer. */ 63165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 63265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETUTF8(c, eptr) \ 63365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 63465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if ((c & 0x20) == 0) \ 63565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \ 63665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x10) == 0) \ 63765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \ 63865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x08) == 0) \ 63965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \ 64065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \ 64165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x04) == 0) \ 64265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \ 64365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \ 64465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (eptr[4] & 0x3f); \ 64565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else \ 64665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \ 64765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \ 64865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \ 64965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } 65065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 65165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Base macro to pick up the remaining bytes of a UTF-8 character, advancing 65265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthe pointer. */ 65365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 65465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETUTF8INC(c, eptr) \ 65565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 65665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if ((c & 0x20) == 0) \ 65765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x1f) << 6) | (*eptr++ & 0x3f); \ 65865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x10) == 0) \ 65965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 66065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x0f) << 12) | ((*eptr & 0x3f) << 6) | (eptr[1] & 0x3f); \ 66165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich eptr += 2; \ 66265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 66365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x08) == 0) \ 66465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 66565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x07) << 18) | ((*eptr & 0x3f) << 12) | \ 66665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \ 66765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich eptr += 3; \ 66865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 66965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x04) == 0) \ 67065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 67165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x03) << 24) | ((*eptr & 0x3f) << 18) | \ 67265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[1] & 0x3f) << 12) | ((eptr[2] & 0x3f) << 6) | \ 67365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (eptr[3] & 0x3f); \ 67465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich eptr += 4; \ 67565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 67665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else \ 67765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 67865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x01) << 30) | ((*eptr & 0x3f) << 24) | \ 67965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[1] & 0x3f) << 18) | ((eptr[2] & 0x3f) << 12) | \ 68065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[3] & 0x3f) << 6) | (eptr[4] & 0x3f); \ 68165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich eptr += 5; \ 68265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 68365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } 68465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 68565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 68665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 68765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* These macros were originally written in the form of loops that used data 68865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfrom the tables whose names start with PRIV(utf8_table). They were rewritten by 68965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevicha user so as not to use loops, because in some environments this gives a 69065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsignificant performance advantage, and it seems never to do any harm. */ 69165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 69265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Tells the biggest code point which can be encoded as a single character. */ 69365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 69465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_VALUE_FOR_SINGLE_CHAR 127 69565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 69665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Tests whether the code point needs extra characters to decode. */ 69765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 69865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HAS_EXTRALEN(c) ((c) >= 0xc0) 69965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 70065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Returns with the additional number of characters if IS_MULTICHAR(c) is TRUE. 70165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichOtherwise it has an undefined behaviour. */ 70265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 70365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET_EXTRALEN(c) (PRIV(utf8_table4)[(c) & 0x3f]) 70465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 70565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Returns TRUE, if the given character is not the first character 70665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichof a UTF sequence. */ 70765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 70865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define NOT_FIRSTCHAR(c) (((c) & 0xc0) == 0x80) 70965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 71065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-8 character, not advancing the pointer. This is called when 71165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwe know we are in UTF-8 mode. */ 71265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 71365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHAR(c, eptr) \ 71465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 71565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (c >= 0xc0) GETUTF8(c, eptr); 71665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 71765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the 71865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpointer. */ 71965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 72065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARTEST(c, eptr) \ 72165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 72265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (utf && c >= 0xc0) GETUTF8(c, eptr); 72365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 72465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-8 character, advancing the pointer. This is called when we 72565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichknow we are in UTF-8 mode. */ 72665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 72765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINC(c, eptr) \ 72865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr++; \ 72965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (c >= 0xc0) GETUTF8INC(c, eptr); 73065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 73165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next character, testing for UTF-8 mode, and advancing the pointer. 73265de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThis is called when we don't know if we are in UTF-8 mode. */ 73365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 73465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINCTEST(c, eptr) \ 73565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr++; \ 73665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (utf && c >= 0xc0) GETUTF8INC(c, eptr); 73765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 73865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Base macro to pick up the remaining bytes of a UTF-8 character, not 73965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichadvancing the pointer, incrementing the length. */ 74065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 74165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETUTF8LEN(c, eptr, len) \ 74265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 74365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if ((c & 0x20) == 0) \ 74465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 74565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \ 74665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich len++; \ 74765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 74865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x10) == 0) \ 74965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 75065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \ 75165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich len += 2; \ 75265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 75365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x08) == 0) \ 75465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich {\ 75565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \ 75665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \ 75765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich len += 3; \ 75865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 75965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else if ((c & 0x04) == 0) \ 76065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { \ 76165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \ 76265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \ 76365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (eptr[4] & 0x3f); \ 76465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich len += 4; \ 76565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 76665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich else \ 76765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich {\ 76865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \ 76965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \ 77065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \ 77165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich len += 5; \ 77265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } \ 77365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich } 77465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 77565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-8 character, not advancing the pointer, incrementing length 77665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichif there are extra bytes. This is called when we know we are in UTF-8 mode. */ 77765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 77865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARLEN(c, eptr, len) \ 77965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 78065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (c >= 0xc0) GETUTF8LEN(c, eptr, len); 78165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 78265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the 78365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpointer, incrementing length if there are extra bytes. This is called when we 78465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdo not know if we are in UTF-8 mode. */ 78565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 78665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARLENTEST(c, eptr, len) \ 78765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 78865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (utf && c >= 0xc0) GETUTF8LEN(c, eptr, len); 78965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 79065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* If the pointer is not at the start of a character, move it back until 79165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichit is. This is called only in UTF-8 mode - we don't put a test within the macro 79265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbecause almost all calls are already within a block of UTF-8 only code. */ 79365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 79465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr-- 79565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 79665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Same as above, just in the other direction. */ 79765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define FORWARDCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr++ 79865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 79965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Same as above, but it allows a fully customizable form. */ 80065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ACROSSCHAR(condition, eptr, action) \ 80165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich while((condition) && ((eptr) & 0xc0) == 0x80) action 80265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 80365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 80465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 80565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Tells the biggest code point which can be encoded as a single character. */ 80665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 80765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_VALUE_FOR_SINGLE_CHAR 65535 80865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 80965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Tests whether the code point needs extra characters to decode. */ 81065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 81165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HAS_EXTRALEN(c) (((c) & 0xfc00) == 0xd800) 81265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 81365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Returns with the additional number of characters if IS_MULTICHAR(c) is TRUE. 81465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichOtherwise it has an undefined behaviour. */ 81565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 81665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET_EXTRALEN(c) 1 81765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 81865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Returns TRUE, if the given character is not the first character 81965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichof a UTF sequence. */ 82065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 82165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define NOT_FIRSTCHAR(c) (((c) & 0xfc00) == 0xdc00) 82265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 82365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Base macro to pick up the low surrogate of a UTF-16 character, not 82465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichadvancing the pointer. */ 82565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 82665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETUTF16(c, eptr) \ 82765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { c = (((c & 0x3ff) << 10) | (eptr[1] & 0x3ff)) + 0x10000; } 82865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 82965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-16 character, not advancing the pointer. This is called when 83065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwe know we are in UTF-16 mode. */ 83165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 83265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHAR(c, eptr) \ 83365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 83465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if ((c & 0xfc00) == 0xd800) GETUTF16(c, eptr); 83565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 83665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-16 character, testing for UTF-16 mode, and not advancing the 83765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpointer. */ 83865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 83965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARTEST(c, eptr) \ 84065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 84165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (utf && (c & 0xfc00) == 0xd800) GETUTF16(c, eptr); 84265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 84365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Base macro to pick up the low surrogate of a UTF-16 character, advancing 84465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthe pointer. */ 84565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 84665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETUTF16INC(c, eptr) \ 84765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { c = (((c & 0x3ff) << 10) | (*eptr++ & 0x3ff)) + 0x10000; } 84865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 84965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-16 character, advancing the pointer. This is called when we 85065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichknow we are in UTF-16 mode. */ 85165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 85265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINC(c, eptr) \ 85365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr++; \ 85465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if ((c & 0xfc00) == 0xd800) GETUTF16INC(c, eptr); 85565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 85665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next character, testing for UTF-16 mode, and advancing the pointer. 85765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThis is called when we don't know if we are in UTF-16 mode. */ 85865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 85965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINCTEST(c, eptr) \ 86065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr++; \ 86165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (utf && (c & 0xfc00) == 0xd800) GETUTF16INC(c, eptr); 86265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 86365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Base macro to pick up the low surrogate of a UTF-16 character, not 86465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichadvancing the pointer, incrementing the length. */ 86565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 86665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETUTF16LEN(c, eptr, len) \ 86765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich { c = (((c & 0x3ff) << 10) | (eptr[1] & 0x3ff)) + 0x10000; len++; } 86865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 86965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-16 character, not advancing the pointer, incrementing 87065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichlength if there is a low surrogate. This is called when we know we are in 87165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichUTF-16 mode. */ 87265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 87365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARLEN(c, eptr, len) \ 87465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 87565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if ((c & 0xfc00) == 0xd800) GETUTF16LEN(c, eptr, len); 87665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 87765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-816character, testing for UTF-16 mode, not advancing the 87865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpointer, incrementing length if there is a low surrogate. This is called when 87965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwe do not know if we are in UTF-16 mode. */ 88065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 88165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARLENTEST(c, eptr, len) \ 88265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *eptr; \ 88365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if (utf && (c & 0xfc00) == 0xd800) GETUTF16LEN(c, eptr, len); 88465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 88565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* If the pointer is not at the start of a character, move it back until 88665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichit is. This is called only in UTF-16 mode - we don't put a test within the 88765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmacro because almost all calls are already within a block of UTF-16 only 88865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcode. */ 88965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 89065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define BACKCHAR(eptr) if ((*eptr & 0xfc00) == 0xdc00) eptr-- 89165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 89265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Same as above, just in the other direction. */ 89365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define FORWARDCHAR(eptr) if ((*eptr & 0xfc00) == 0xdc00) eptr++ 89465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 89565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Same as above, but it allows a fully customizable form. */ 89665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ACROSSCHAR(condition, eptr, action) \ 89765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich if ((condition) && ((eptr) & 0xfc00) == 0xdc00) action 89865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 89965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 90065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 90165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* These are trivial for the 32-bit library, since all UTF-32 characters fit 90265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinto one pcre_uchar unit. */ 90365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAX_VALUE_FOR_SINGLE_CHAR (0x10ffffu) 90465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HAS_EXTRALEN(c) (0) 90565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET_EXTRALEN(c) (0) 90665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define NOT_FIRSTCHAR(c) (0) 90765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 90865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-32 character, not advancing the pointer. This is called when 90965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwe know we are in UTF-32 mode. */ 91065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 91165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHAR(c, eptr) \ 91265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *(eptr); 91365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 91465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-32 character, testing for UTF-32 mode, and not advancing the 91565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpointer. */ 91665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 91765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARTEST(c, eptr) \ 91865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *(eptr); 91965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 92065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-32 character, advancing the pointer. This is called when we 92165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichknow we are in UTF-32 mode. */ 92265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 92365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINC(c, eptr) \ 92465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *((eptr)++); 92565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 92665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next character, testing for UTF-32 mode, and advancing the pointer. 92765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThis is called when we don't know if we are in UTF-32 mode. */ 92865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 92965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARINCTEST(c, eptr) \ 93065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich c = *((eptr)++); 93165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 93265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-32 character, not advancing the pointer, not incrementing 93365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichlength (since all UTF-32 is of length 1). This is called when we know we are in 93465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichUTF-32 mode. */ 93565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 93665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARLEN(c, eptr, len) \ 93765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich GETCHAR(c, eptr) 93865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 93965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Get the next UTF-32character, testing for UTF-32 mode, not advancing the 94065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpointer, not incrementing the length (since all UTF-32 is of length 1). 94165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThis is called when we do not know if we are in UTF-32 mode. */ 94265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 94365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GETCHARLENTEST(c, eptr, len) \ 94465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich GETCHARTEST(c, eptr) 94565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 94665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* If the pointer is not at the start of a character, move it back until 94765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichit is. This is called only in UTF-32 mode - we don't put a test within the 94865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmacro because almost all calls are already within a block of UTF-32 only 94965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcode. 95065de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThese are all no-ops since all UTF-32 characters fit into one pcre_uchar. */ 95165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 95265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define BACKCHAR(eptr) do { } while (0) 95365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 95465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Same as above, just in the other direction. */ 95565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define FORWARDCHAR(eptr) do { } while (0) 95665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 95765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Same as above, but it allows a fully customizable form. */ 95865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ACROSSCHAR(condition, eptr, action) do { } while (0) 95965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 96065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 96165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Unsupported compiling mode 96265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE[8|16|32] */ 96365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 96465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* SUPPORT_UTF */ 96565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 96665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Tests for Unicode horizontal and vertical whitespace characters must check a 96765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichnumber of different values. Using a switch statement for this generates the 96865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfastest code (no loop, no memory access), and there are several places in the 96965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinterpreter code where this happens. In order to ensure that all the case lists 97065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichremain in step, we use macros so that there is only one place where the lists 97165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichare defined. 97265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 97365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThese values are also required as lists in pcre_compile.c when processing \h, 97465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich\H, \v and \V in a character class. The lists are defined in pcre_tables.c, but 97565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmacros that define the values are here so that all the definitions are 97665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtogether. The lists must be in ascending character order, terminated by 97765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichNOTACHAR (which is 0xffffffff). 97865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 97965de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichAny changes should ensure that the various macros are kept in step with each 98065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichother. NOTE: The values also appear in pcre_jit_compile.c. */ 98165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 98265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* ------ ASCII/Unicode environments ------ */ 98365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 98465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef EBCDIC 98565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 98665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HSPACE_LIST \ 98765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich CHAR_HT, CHAR_SPACE, 0xa0, \ 98865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 0x1680, 0x180e, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, \ 98965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202f, 0x205f, 0x3000, \ 99065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich NOTACHAR 99165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 99265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HSPACE_MULTIBYTE_CASES \ 99365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x1680: /* OGHAM SPACE MARK */ \ 99465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ \ 99565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2000: /* EN QUAD */ \ 99665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2001: /* EM QUAD */ \ 99765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2002: /* EN SPACE */ \ 99865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2003: /* EM SPACE */ \ 99965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2004: /* THREE-PER-EM SPACE */ \ 100065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2005: /* FOUR-PER-EM SPACE */ \ 100165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2006: /* SIX-PER-EM SPACE */ \ 100265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2007: /* FIGURE SPACE */ \ 100365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2008: /* PUNCTUATION SPACE */ \ 100465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2009: /* THIN SPACE */ \ 100565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x200A: /* HAIR SPACE */ \ 100665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x202f: /* NARROW NO-BREAK SPACE */ \ 100765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ \ 100865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x3000 /* IDEOGRAPHIC SPACE */ 100965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 101065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HSPACE_BYTE_CASES \ 101165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_HT: \ 101265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_SPACE: \ 101365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0xa0 /* NBSP */ 101465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 101565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HSPACE_CASES \ 101665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich HSPACE_BYTE_CASES: \ 101765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich HSPACE_MULTIBYTE_CASES 101865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 101965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_LIST \ 102065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich CHAR_LF, CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, 0x2028, 0x2029, NOTACHAR 102165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 102265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_MULTIBYTE_CASES \ 102365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2028: /* LINE SEPARATOR */ \ 102465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case 0x2029 /* PARAGRAPH SEPARATOR */ 102565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 102665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_BYTE_CASES \ 102765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_LF: \ 102865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_VT: \ 102965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_FF: \ 103065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_CR: \ 103165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_NEL 103265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 103365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_CASES \ 103465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich VSPACE_BYTE_CASES: \ 103565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich VSPACE_MULTIBYTE_CASES 103665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 103765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* ------ EBCDIC environments ------ */ 103865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 103965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 104065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HSPACE_LIST CHAR_HT, CHAR_SPACE 104165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 104265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HSPACE_BYTE_CASES \ 104365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_HT: \ 104465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_SPACE 104565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 104665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define HSPACE_CASES HSPACE_BYTE_CASES 104765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 104865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef EBCDIC_NL25 104965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_LIST \ 105065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, CHAR_LF, NOTACHAR 105165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 105265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_LIST \ 105365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich CHAR_VT, CHAR_FF, CHAR_CR, CHAR_LF, CHAR_NEL, NOTACHAR 105465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 105565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 105665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_BYTE_CASES \ 105765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_LF: \ 105865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_VT: \ 105965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_FF: \ 106065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_CR: \ 106165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich case CHAR_NEL 106265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 106365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define VSPACE_CASES VSPACE_BYTE_CASES 106465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* EBCDIC */ 106565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 106665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* ------ End of whitespace macros ------ */ 106765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 106865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 106965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 107065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Private flags containing information about the compiled regex. They used to 107165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichlive at the top end of the options word, but that got almost full, so they were 107265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmoved to a 16-bit flags word - which got almost full, so now they are in a 107365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich32-bit flags word. From release 8.00, PCRE_NOPARTIAL is unused, as the 107465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichrestrictions on partial matching have been lifted. It remains for backwards 107565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcompatibility. */ 107665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 107765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MODE8 0x00000001 /* compiled in 8 bit mode */ 107865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MODE16 0x00000002 /* compiled in 16 bit mode */ 107965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MODE32 0x00000004 /* compiled in 32 bit mode */ 108065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_FIRSTSET 0x00000010 /* first_char is set */ 108165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_FCH_CASELESS 0x00000020 /* caseless first char */ 108265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_REQCHSET 0x00000040 /* req_byte is set */ 108365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_RCH_CASELESS 0x00000080 /* caseless requested char */ 108465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_STARTLINE 0x00000100 /* start after \n for multiline */ 108565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_NOPARTIAL 0x00000200 /* can't use partial with this regex */ 108665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_JCHANGED 0x00000400 /* j option used in regex */ 108765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_HASCRORLF 0x00000800 /* explicit \r or \n in pattern */ 108865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_HASTHEN 0x00001000 /* pattern contains (*THEN) */ 108965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MLSET 0x00002000 /* match limit set by regex */ 109065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_RLSET 0x00004000 /* recursion limit set by regex */ 109165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MATCH_EMPTY 0x00008000 /* pattern can match empty string */ 109265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 109365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 109465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MODE PCRE_MODE8 109565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 109665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MODE PCRE_MODE16 109765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 109865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MODE PCRE_MODE32 109965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 110065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_MODE_MASK (PCRE_MODE8 | PCRE_MODE16 | PCRE_MODE32) 110165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 110265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Flags for the "extra" block produced by pcre_study(). */ 110365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 110465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_STUDY_MAPPED 0x0001 /* a map of starting chars exists */ 110565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_STUDY_MINLEN 0x0002 /* a minimum length field exists */ 110665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 110765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Masks for identifying the public options that are permitted at compile 110865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtime, run time, or study time, respectively. */ 110965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 111065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PCRE_NEWLINE_BITS (PCRE_NEWLINE_CR|PCRE_NEWLINE_LF|PCRE_NEWLINE_ANY| \ 111165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_NEWLINE_ANYCRLF) 111265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 111365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBLIC_COMPILE_OPTIONS \ 111465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \ 111565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \ 111665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_NO_AUTO_CAPTURE|PCRE_NO_AUTO_POSSESS| \ 111765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \ 111865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \ 111965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_JAVASCRIPT_COMPAT|PCRE_UCP|PCRE_NO_START_OPTIMIZE|PCRE_NEVER_UTF) 112065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 112165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBLIC_EXEC_OPTIONS \ 112265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NOTEMPTY_ATSTART| \ 112365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_NO_UTF8_CHECK|PCRE_PARTIAL_HARD|PCRE_PARTIAL_SOFT|PCRE_NEWLINE_BITS| \ 112465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE|PCRE_NO_START_OPTIMIZE) 112565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 112665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBLIC_DFA_EXEC_OPTIONS \ 112765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NOTEMPTY_ATSTART| \ 112865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_NO_UTF8_CHECK|PCRE_PARTIAL_HARD|PCRE_PARTIAL_SOFT|PCRE_DFA_SHORTEST| \ 112965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_DFA_RESTART|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \ 113065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_NO_START_OPTIMIZE) 113165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 113265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBLIC_STUDY_OPTIONS \ 113365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (PCRE_STUDY_JIT_COMPILE|PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE| \ 113465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE|PCRE_STUDY_EXTRA_NEEDED) 113565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 113665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBLIC_JIT_EXEC_OPTIONS \ 113765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (PCRE_NO_UTF8_CHECK|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|\ 113865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_NOTEMPTY_ATSTART|PCRE_PARTIAL_SOFT|PCRE_PARTIAL_HARD) 113965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 114065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Magic number to provide a small check against being handed junk. */ 114165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 114265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */ 114365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 114465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This variable is used to detect a loaded regular expression 114565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichin different endianness. */ 114665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 114765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REVERSED_MAGIC_NUMBER 0x45524350UL /* 'ERCP' */ 114865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 114965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* The maximum remaining length of subject we are prepared to search for a 115065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichreq_byte match. */ 115165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 115265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REQ_BYTE_MAX 1000 115365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 115465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Miscellaneous definitions. The #ifndef is to pacify compiler warnings in 115565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichenvironments where these macros are defined elsewhere. Unfortunately, there 115665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichis no way to do the same for the typedef. */ 115765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 115865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef int BOOL; 115965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 116065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef FALSE 116165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define FALSE 0 116265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define TRUE 1 116365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 116465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 116565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* If PCRE is to support UTF-8 on EBCDIC platforms, we cannot use normal 116665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcharacter constants like '*' because the compiler would emit their EBCDIC code, 116765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwhich is different from their ASCII/UTF-8 code. Instead we define macros for 116865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthe characters so that they always use the ASCII/UTF-8 code when UTF-8 support 116965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichis enabled. When UTF-8 support is not enabled, the definitions use character 117065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichliterals. Both character and string versions of each character are needed, and 117165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthere are some longer strings as well. 117265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 117365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThis means that, on EBCDIC platforms, the PCRE library can handle either 117465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichEBCDIC, or UTF-8, but not both. To support both in the same compiled library 117565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwould need different lookups depending on whether PCRE_UTF8 was set or not. 117665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThis would make it impossible to use characters in switch/case statements, 117765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwhich would reduce performance. For a theoretical use (which nobody has asked 117865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfor) in a minority area (EBCDIC platforms), this is not sensible. Any 117965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichapplication that did need both could compile two versions of the library, using 118065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmacros to give the functions distinct names. */ 118165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 118265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef SUPPORT_UTF 118365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 118465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* UTF-8 support is not enabled; use the platform-dependent character literals 118565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichso that PCRE works in both ASCII and EBCDIC environments, but only in non-UTF 118665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichmode. Newline characters are problematic in EBCDIC. Though it has CR and LF 118765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcharacters, a common practice has been to use its NL (0x15) character as the 118865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichline terminator in C-like processing environments. However, sometimes the LF 118965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich(0x25) character is used instead, according to this Unicode document: 119065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 119165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichhttp://unicode.org/standard/reports/tr13/tr13-5.html 119265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 119365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichPCRE defaults EBCDIC NL to 0x15, but has a build-time option to select 0x25 119465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinstead. Whichever is *not* chosen is defined as NEL. 119565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 119665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichIn both ASCII and EBCDIC environments, CHAR_NL and CHAR_LF are synonyms for the 119765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsame code point. */ 119865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 119965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef EBCDIC 120065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 120165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef EBCDIC_NL25 120265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NL '\x15' 120365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NEL '\x25' 120465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NL "\x15" 120565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NEL "\x25" 120665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 120765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NL '\x25' 120865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NEL '\x15' 120965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NL "\x25" 121065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NEL "\x15" 121165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 121265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 121365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LF CHAR_NL 121465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LF STR_NL 121565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 121665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_ESC '\047' 121765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_DEL '\007' 121865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_ESC "\047" 121965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_DEL "\007" 122065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 122165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else /* Not EBCDIC */ 122265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 122365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* In ASCII/Unicode, linefeed is '\n' and we equate this to NL for 122465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcompatibility. NEL is the Unicode newline character; make sure it is 122565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevicha positive value. */ 122665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 122765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LF '\n' 122865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NL CHAR_LF 122965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NEL ((unsigned char)'\x85') 123065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_ESC '\033' 123165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_DEL '\177' 123265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 123365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LF "\n" 123465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NL STR_LF 123565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NEL "\x85" 123665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_ESC "\033" 123765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_DEL "\177" 123865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 123965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* EBCDIC */ 124065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 124165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* The remaining definitions work in both environments. */ 124265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 124365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NULL '\0' 124465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_HT '\t' 124565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_VT '\v' 124665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_FF '\f' 124765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_CR '\r' 124865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_BS '\b' 124965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_BEL '\a' 125065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 125165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_SPACE ' ' 125265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_EXCLAMATION_MARK '!' 125365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_QUOTATION_MARK '"' 125465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NUMBER_SIGN '#' 125565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_DOLLAR_SIGN '$' 125665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_PERCENT_SIGN '%' 125765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_AMPERSAND '&' 125865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_APOSTROPHE '\'' 125965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LEFT_PARENTHESIS '(' 126065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_RIGHT_PARENTHESIS ')' 126165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_ASTERISK '*' 126265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_PLUS '+' 126365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_COMMA ',' 126465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_MINUS '-' 126565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_DOT '.' 126665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_SLASH '/' 126765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_0 '0' 126865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_1 '1' 126965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_2 '2' 127065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_3 '3' 127165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_4 '4' 127265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_5 '5' 127365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_6 '6' 127465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_7 '7' 127565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_8 '8' 127665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_9 '9' 127765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_COLON ':' 127865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_SEMICOLON ';' 127965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LESS_THAN_SIGN '<' 128065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_EQUALS_SIGN '=' 128165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_GREATER_THAN_SIGN '>' 128265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_QUESTION_MARK '?' 128365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_COMMERCIAL_AT '@' 128465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_A 'A' 128565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_B 'B' 128665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_C 'C' 128765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_D 'D' 128865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_E 'E' 128965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_F 'F' 129065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_G 'G' 129165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_H 'H' 129265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_I 'I' 129365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_J 'J' 129465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_K 'K' 129565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_L 'L' 129665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_M 'M' 129765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_N 'N' 129865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_O 'O' 129965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_P 'P' 130065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_Q 'Q' 130165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_R 'R' 130265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_S 'S' 130365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_T 'T' 130465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_U 'U' 130565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_V 'V' 130665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_W 'W' 130765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_X 'X' 130865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_Y 'Y' 130965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_Z 'Z' 131065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LEFT_SQUARE_BRACKET '[' 131165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_BACKSLASH '\\' 131265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_RIGHT_SQUARE_BRACKET ']' 131365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_CIRCUMFLEX_ACCENT '^' 131465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_UNDERSCORE '_' 131565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_GRAVE_ACCENT '`' 131665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_a 'a' 131765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_b 'b' 131865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_c 'c' 131965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_d 'd' 132065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_e 'e' 132165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_f 'f' 132265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_g 'g' 132365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_h 'h' 132465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_i 'i' 132565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_j 'j' 132665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_k 'k' 132765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_l 'l' 132865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_m 'm' 132965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_n 'n' 133065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_o 'o' 133165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_p 'p' 133265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_q 'q' 133365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_r 'r' 133465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_s 's' 133565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_t 't' 133665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_u 'u' 133765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_v 'v' 133865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_w 'w' 133965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_x 'x' 134065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_y 'y' 134165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_z 'z' 134265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LEFT_CURLY_BRACKET '{' 134365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_VERTICAL_LINE '|' 134465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_RIGHT_CURLY_BRACKET '}' 134565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_TILDE '~' 134665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 134765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_HT "\t" 134865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_VT "\v" 134965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_FF "\f" 135065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_CR "\r" 135165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_BS "\b" 135265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_BEL "\a" 135365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 135465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_SPACE " " 135565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_EXCLAMATION_MARK "!" 135665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_QUOTATION_MARK "\"" 135765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NUMBER_SIGN "#" 135865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_DOLLAR_SIGN "$" 135965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_PERCENT_SIGN "%" 136065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_AMPERSAND "&" 136165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_APOSTROPHE "'" 136265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LEFT_PARENTHESIS "(" 136365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_RIGHT_PARENTHESIS ")" 136465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_ASTERISK "*" 136565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_PLUS "+" 136665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_COMMA "," 136765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_MINUS "-" 136865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_DOT "." 136965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_SLASH "/" 137065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_0 "0" 137165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_1 "1" 137265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_2 "2" 137365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_3 "3" 137465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_4 "4" 137565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_5 "5" 137665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_6 "6" 137765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_7 "7" 137865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_8 "8" 137965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_9 "9" 138065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_COLON ":" 138165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_SEMICOLON ";" 138265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LESS_THAN_SIGN "<" 138365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_EQUALS_SIGN "=" 138465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_GREATER_THAN_SIGN ">" 138565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_QUESTION_MARK "?" 138665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_COMMERCIAL_AT "@" 138765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_A "A" 138865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_B "B" 138965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_C "C" 139065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_D "D" 139165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_E "E" 139265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_F "F" 139365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_G "G" 139465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_H "H" 139565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_I "I" 139665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_J "J" 139765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_K "K" 139865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_L "L" 139965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_M "M" 140065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_N "N" 140165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_O "O" 140265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_P "P" 140365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_Q "Q" 140465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_R "R" 140565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_S "S" 140665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_T "T" 140765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_U "U" 140865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_V "V" 140965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_W "W" 141065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_X "X" 141165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_Y "Y" 141265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_Z "Z" 141365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LEFT_SQUARE_BRACKET "[" 141465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_BACKSLASH "\\" 141565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_RIGHT_SQUARE_BRACKET "]" 141665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_CIRCUMFLEX_ACCENT "^" 141765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_UNDERSCORE "_" 141865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_GRAVE_ACCENT "`" 141965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_a "a" 142065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_b "b" 142165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_c "c" 142265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_d "d" 142365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_e "e" 142465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_f "f" 142565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_g "g" 142665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_h "h" 142765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_i "i" 142865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_j "j" 142965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_k "k" 143065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_l "l" 143165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_m "m" 143265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_n "n" 143365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_o "o" 143465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_p "p" 143565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_q "q" 143665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_r "r" 143765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_s "s" 143865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_t "t" 143965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_u "u" 144065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_v "v" 144165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_w "w" 144265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_x "x" 144365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_y "y" 144465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_z "z" 144565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LEFT_CURLY_BRACKET "{" 144665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_VERTICAL_LINE "|" 144765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_RIGHT_CURLY_BRACKET "}" 144865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_TILDE "~" 144965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 145065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ACCEPT0 "ACCEPT\0" 145165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_COMMIT0 "COMMIT\0" 145265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_F0 "F\0" 145365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_FAIL0 "FAIL\0" 145465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_MARK0 "MARK\0" 145565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_PRUNE0 "PRUNE\0" 145665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_SKIP0 "SKIP\0" 145765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_THEN "THEN" 145865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 145965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_alpha0 "alpha\0" 146065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_lower0 "lower\0" 146165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_upper0 "upper\0" 146265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_alnum0 "alnum\0" 146365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ascii0 "ascii\0" 146465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_blank0 "blank\0" 146565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_cntrl0 "cntrl\0" 146665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_digit0 "digit\0" 146765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_graph0 "graph\0" 146865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_print0 "print\0" 146965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_punct0 "punct\0" 147065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_space0 "space\0" 147165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_word0 "word\0" 147265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_xdigit "xdigit" 147365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 147465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_DEFINE "DEFINE" 147565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_WEIRD_STARTWORD "[:<:]]" 147665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_WEIRD_ENDWORD "[:>:]]" 147765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 147865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_CR_RIGHTPAR "CR)" 147965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_LF_RIGHTPAR "LF)" 148065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_CRLF_RIGHTPAR "CRLF)" 148165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ANY_RIGHTPAR "ANY)" 148265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ANYCRLF_RIGHTPAR "ANYCRLF)" 148365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)" 148465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)" 148565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF8_RIGHTPAR "UTF8)" 148665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF16_RIGHTPAR "UTF16)" 148765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF32_RIGHTPAR "UTF32)" 148865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF_RIGHTPAR "UTF)" 148965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UCP_RIGHTPAR "UCP)" 149065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_NO_AUTO_POSSESS_RIGHTPAR "NO_AUTO_POSSESS)" 149165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_NO_START_OPT_RIGHTPAR "NO_START_OPT)" 149265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_LIMIT_MATCH_EQ "LIMIT_MATCH=" 149365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_LIMIT_RECURSION_EQ "LIMIT_RECURSION=" 149465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 149565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else /* SUPPORT_UTF */ 149665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 149765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This 149865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichworks in both modes non-EBCDIC platforms, and on EBCDIC platforms in UTF-8 mode 149965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichonly. */ 150065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 150165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_HT '\011' 150265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_VT '\013' 150365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_FF '\014' 150465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_CR '\015' 150565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LF '\012' 150665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NL CHAR_LF 150765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NEL ((unsigned char)'\x85') 150865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_BS '\010' 150965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_BEL '\007' 151065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_ESC '\033' 151165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_DEL '\177' 151265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 151365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NULL '\0' 151465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_SPACE '\040' 151565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_EXCLAMATION_MARK '\041' 151665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_QUOTATION_MARK '\042' 151765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_NUMBER_SIGN '\043' 151865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_DOLLAR_SIGN '\044' 151965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_PERCENT_SIGN '\045' 152065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_AMPERSAND '\046' 152165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_APOSTROPHE '\047' 152265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LEFT_PARENTHESIS '\050' 152365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_RIGHT_PARENTHESIS '\051' 152465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_ASTERISK '\052' 152565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_PLUS '\053' 152665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_COMMA '\054' 152765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_MINUS '\055' 152865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_DOT '\056' 152965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_SLASH '\057' 153065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_0 '\060' 153165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_1 '\061' 153265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_2 '\062' 153365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_3 '\063' 153465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_4 '\064' 153565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_5 '\065' 153665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_6 '\066' 153765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_7 '\067' 153865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_8 '\070' 153965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_9 '\071' 154065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_COLON '\072' 154165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_SEMICOLON '\073' 154265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LESS_THAN_SIGN '\074' 154365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_EQUALS_SIGN '\075' 154465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_GREATER_THAN_SIGN '\076' 154565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_QUESTION_MARK '\077' 154665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_COMMERCIAL_AT '\100' 154765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_A '\101' 154865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_B '\102' 154965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_C '\103' 155065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_D '\104' 155165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_E '\105' 155265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_F '\106' 155365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_G '\107' 155465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_H '\110' 155565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_I '\111' 155665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_J '\112' 155765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_K '\113' 155865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_L '\114' 155965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_M '\115' 156065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_N '\116' 156165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_O '\117' 156265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_P '\120' 156365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_Q '\121' 156465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_R '\122' 156565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_S '\123' 156665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_T '\124' 156765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_U '\125' 156865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_V '\126' 156965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_W '\127' 157065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_X '\130' 157165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_Y '\131' 157265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_Z '\132' 157365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LEFT_SQUARE_BRACKET '\133' 157465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_BACKSLASH '\134' 157565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_RIGHT_SQUARE_BRACKET '\135' 157665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_CIRCUMFLEX_ACCENT '\136' 157765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_UNDERSCORE '\137' 157865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_GRAVE_ACCENT '\140' 157965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_a '\141' 158065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_b '\142' 158165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_c '\143' 158265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_d '\144' 158365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_e '\145' 158465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_f '\146' 158565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_g '\147' 158665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_h '\150' 158765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_i '\151' 158865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_j '\152' 158965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_k '\153' 159065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_l '\154' 159165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_m '\155' 159265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_n '\156' 159365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_o '\157' 159465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_p '\160' 159565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_q '\161' 159665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_r '\162' 159765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_s '\163' 159865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_t '\164' 159965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_u '\165' 160065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_v '\166' 160165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_w '\167' 160265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_x '\170' 160365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_y '\171' 160465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_z '\172' 160565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_LEFT_CURLY_BRACKET '\173' 160665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_VERTICAL_LINE '\174' 160765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_RIGHT_CURLY_BRACKET '\175' 160865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define CHAR_TILDE '\176' 160965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 161065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_HT "\011" 161165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_VT "\013" 161265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_FF "\014" 161365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_CR "\015" 161465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NL "\012" 161565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_BS "\010" 161665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_BEL "\007" 161765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_ESC "\033" 161865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_DEL "\177" 161965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 162065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_SPACE "\040" 162165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_EXCLAMATION_MARK "\041" 162265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_QUOTATION_MARK "\042" 162365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_NUMBER_SIGN "\043" 162465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_DOLLAR_SIGN "\044" 162565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_PERCENT_SIGN "\045" 162665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_AMPERSAND "\046" 162765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_APOSTROPHE "\047" 162865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LEFT_PARENTHESIS "\050" 162965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_RIGHT_PARENTHESIS "\051" 163065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_ASTERISK "\052" 163165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_PLUS "\053" 163265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_COMMA "\054" 163365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_MINUS "\055" 163465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_DOT "\056" 163565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_SLASH "\057" 163665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_0 "\060" 163765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_1 "\061" 163865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_2 "\062" 163965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_3 "\063" 164065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_4 "\064" 164165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_5 "\065" 164265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_6 "\066" 164365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_7 "\067" 164465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_8 "\070" 164565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_9 "\071" 164665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_COLON "\072" 164765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_SEMICOLON "\073" 164865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LESS_THAN_SIGN "\074" 164965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_EQUALS_SIGN "\075" 165065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_GREATER_THAN_SIGN "\076" 165165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_QUESTION_MARK "\077" 165265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_COMMERCIAL_AT "\100" 165365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_A "\101" 165465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_B "\102" 165565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_C "\103" 165665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_D "\104" 165765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_E "\105" 165865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_F "\106" 165965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_G "\107" 166065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_H "\110" 166165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_I "\111" 166265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_J "\112" 166365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_K "\113" 166465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_L "\114" 166565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_M "\115" 166665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_N "\116" 166765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_O "\117" 166865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_P "\120" 166965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_Q "\121" 167065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_R "\122" 167165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_S "\123" 167265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_T "\124" 167365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_U "\125" 167465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_V "\126" 167565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_W "\127" 167665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_X "\130" 167765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_Y "\131" 167865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_Z "\132" 167965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LEFT_SQUARE_BRACKET "\133" 168065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_BACKSLASH "\134" 168165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_RIGHT_SQUARE_BRACKET "\135" 168265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_CIRCUMFLEX_ACCENT "\136" 168365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_UNDERSCORE "\137" 168465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_GRAVE_ACCENT "\140" 168565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_a "\141" 168665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_b "\142" 168765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_c "\143" 168865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_d "\144" 168965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_e "\145" 169065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_f "\146" 169165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_g "\147" 169265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_h "\150" 169365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_i "\151" 169465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_j "\152" 169565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_k "\153" 169665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_l "\154" 169765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_m "\155" 169865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_n "\156" 169965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_o "\157" 170065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_p "\160" 170165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_q "\161" 170265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_r "\162" 170365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_s "\163" 170465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_t "\164" 170565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_u "\165" 170665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_v "\166" 170765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_w "\167" 170865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_x "\170" 170965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_y "\171" 171065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_z "\172" 171165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_LEFT_CURLY_BRACKET "\173" 171265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_VERTICAL_LINE "\174" 171365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_RIGHT_CURLY_BRACKET "\175" 171465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STR_TILDE "\176" 171565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 171665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ACCEPT0 STR_A STR_C STR_C STR_E STR_P STR_T "\0" 171765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_COMMIT0 STR_C STR_O STR_M STR_M STR_I STR_T "\0" 171865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_F0 STR_F "\0" 171965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_FAIL0 STR_F STR_A STR_I STR_L "\0" 172065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_MARK0 STR_M STR_A STR_R STR_K "\0" 172165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_PRUNE0 STR_P STR_R STR_U STR_N STR_E "\0" 172265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_SKIP0 STR_S STR_K STR_I STR_P "\0" 172365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_THEN STR_T STR_H STR_E STR_N 172465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 172565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_alpha0 STR_a STR_l STR_p STR_h STR_a "\0" 172665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_lower0 STR_l STR_o STR_w STR_e STR_r "\0" 172765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_upper0 STR_u STR_p STR_p STR_e STR_r "\0" 172865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_alnum0 STR_a STR_l STR_n STR_u STR_m "\0" 172965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ascii0 STR_a STR_s STR_c STR_i STR_i "\0" 173065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_blank0 STR_b STR_l STR_a STR_n STR_k "\0" 173165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_cntrl0 STR_c STR_n STR_t STR_r STR_l "\0" 173265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_digit0 STR_d STR_i STR_g STR_i STR_t "\0" 173365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_graph0 STR_g STR_r STR_a STR_p STR_h "\0" 173465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_print0 STR_p STR_r STR_i STR_n STR_t "\0" 173565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_punct0 STR_p STR_u STR_n STR_c STR_t "\0" 173665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_space0 STR_s STR_p STR_a STR_c STR_e "\0" 173765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_word0 STR_w STR_o STR_r STR_d "\0" 173865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_xdigit STR_x STR_d STR_i STR_g STR_i STR_t 173965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 174065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_DEFINE STR_D STR_E STR_F STR_I STR_N STR_E 174165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_WEIRD_STARTWORD STR_LEFT_SQUARE_BRACKET STR_COLON STR_LESS_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET 174265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_WEIRD_ENDWORD STR_LEFT_SQUARE_BRACKET STR_COLON STR_GREATER_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET 174365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 174465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_CR_RIGHTPAR STR_C STR_R STR_RIGHT_PARENTHESIS 174565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_LF_RIGHTPAR STR_L STR_F STR_RIGHT_PARENTHESIS 174665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_CRLF_RIGHTPAR STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS 174765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ANY_RIGHTPAR STR_A STR_N STR_Y STR_RIGHT_PARENTHESIS 174865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_ANYCRLF_RIGHTPAR STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS 174965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_BSR_ANYCRLF_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS 175065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_BSR_UNICODE_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS 175165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF8_RIGHTPAR STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS 175265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF16_RIGHTPAR STR_U STR_T STR_F STR_1 STR_6 STR_RIGHT_PARENTHESIS 175365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF32_RIGHTPAR STR_U STR_T STR_F STR_3 STR_2 STR_RIGHT_PARENTHESIS 175465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UTF_RIGHTPAR STR_U STR_T STR_F STR_RIGHT_PARENTHESIS 175565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_UCP_RIGHTPAR STR_U STR_C STR_P STR_RIGHT_PARENTHESIS 175665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_NO_AUTO_POSSESS_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_A STR_U STR_T STR_O STR_UNDERSCORE STR_P STR_O STR_S STR_S STR_E STR_S STR_S STR_RIGHT_PARENTHESIS 175765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_NO_START_OPT_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS 175865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_LIMIT_MATCH_EQ STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_M STR_A STR_T STR_C STR_H STR_EQUALS_SIGN 175965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRING_LIMIT_RECURSION_EQ STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_R STR_E STR_C STR_U STR_R STR_S STR_I STR_O STR_N STR_EQUALS_SIGN 176065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 176165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* SUPPORT_UTF */ 176265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 176365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Escape items that are just an encoding of a particular data value. */ 176465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 176565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef ESC_e 176665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ESC_e CHAR_ESC 176765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 176865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 176965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef ESC_f 177065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ESC_f CHAR_FF 177165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 177265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 177365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef ESC_n 177465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ESC_n CHAR_LF 177565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 177665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 177765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef ESC_r 177865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ESC_r CHAR_CR 177965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 178065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 178165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* We can't officially use ESC_t because it is a POSIX reserved identifier 178265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich(presumably because of all the others like size_t). */ 178365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 178465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef ESC_tee 178565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ESC_tee CHAR_HT 178665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 178765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 178865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Codes for different types of Unicode property */ 178965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 179065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_ANY 0 /* Any property - matches all chars */ 179165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_LAMP 1 /* L& - the union of Lu, Ll, Lt */ 179265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_GC 2 /* Specified general characteristic (e.g. L) */ 179365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_PC 3 /* Specified particular characteristic (e.g. Lu) */ 179465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_SC 4 /* Script (e.g. Han) */ 179565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_ALNUM 5 /* Alphanumeric - the union of L and N */ 179665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_SPACE 6 /* Perl space - Z plus 9,10,12,13 */ 179765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_PXSPACE 7 /* POSIX space - Z plus 9,10,11,12,13 */ 179865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_WORD 8 /* Word - L plus N plus underscore */ 179965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_CLIST 9 /* Pseudo-property: match character list */ 180065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_UCNC 10 /* Universal Character nameable character */ 180165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_TABSIZE 11 /* Size of square table for autopossessify tests */ 180265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 180365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* The following special properties are used only in XCLASS items, when POSIX 180465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichclasses are specified and PCRE_UCP is set - in other words, for Unicode 180565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichhandling of these classes. They are not available via the \p or \P escapes like 180665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthose in the above list, and so they do not take part in the autopossessifying 180765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtable. */ 180865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 180965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_PXGRAPH 11 /* [:graph:] - characters that mark the paper */ 181065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_PXPRINT 12 /* [:print:] - [:graph:] plus non-control spaces */ 181165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PT_PXPUNCT 13 /* [:punct:] - punctuation characters */ 181265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 181365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Flag bits and data types for the extended class (OP_XCLASS) for classes that 181465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcontain characters with values greater than 255. */ 181565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 181665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_NOT 0x01 /* Flag: this is a negative class */ 181765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ 181865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_HASPROP 0x04 /* Flag: property checks are present. */ 181965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 182065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_END 0 /* Marks end of individual items */ 182165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ 182265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_RANGE 2 /* A range (two multibyte chars) follows */ 182365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_PROP 3 /* Unicode property (2-byte property code follows) */ 182465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ 182565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 182665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* These are escaped items that aren't just an encoding of a particular data 182765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichvalue such as \n. They must have non-zero values, as check_escape() returns 0 182865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfor a data character. Also, they must appear in the same order as in the 182965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichopcode definitions below, up to ESC_z. There's a dummy for OP_ALLANY because it 183065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcorresponds to "." in DOTALL mode rather than an escape sequence. It is also 183165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichused for [^] in JavaScript compatibility mode, and for \C in non-utf mode. In 183265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichnon-DOTALL mode, "." behaves like \N. 183365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 183465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe special values ESC_DU, ESC_du, etc. are used instead of ESC_D, ESC_d, etc. 183565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwhen PCRE_UCP is set and replacement of \d etc by \p sequences is required. 183665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThey must be contiguous, and remain in order so that the replacements can be 183765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichlooked up from a table. 183865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 183965de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichNegative numbers are used to encode a backreference (\1, \2, \3, etc.) in 184065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcheck_escape(). There are two tests in the code for an escape 184165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichgreater than ESC_b and less than ESC_Z to detect the types that may be 184265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichrepeated. These are the types that consume characters. If any new escapes are 184365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichput in between that don't consume a character, that code will have to change. 184465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*/ 184565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 184665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichenum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, 184765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ESC_W, ESC_w, ESC_N, ESC_dum, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H, 184865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z, 184965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ESC_E, ESC_Q, ESC_g, ESC_k, 185065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ESC_DU, ESC_du, ESC_SU, ESC_su, ESC_WU, ESC_wu }; 185165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 185265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 185365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/********************** Opcode definitions ******************/ 185465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 185565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/****** NOTE NOTE NOTE ****** 185665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 185765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichStarting from 1 (i.e. after OP_END), the values up to OP_EOD must correspond in 185865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichorder to the list of escapes immediately above. Furthermore, values up to 185965de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichOP_DOLLM must not be changed without adjusting the table called autoposstab in 186065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_compile.c 186165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 186265de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichWhenever this list is updated, the two macro definitions that follow must be 186365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichupdated to match. The possessification table called "opcode_possessify" in 186465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_compile.c must also be updated, and also the tables called "coptable" 186565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichand "poptable" in pcre_dfa_exec.c. 186665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 186765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich****** NOTE NOTE NOTE ******/ 186865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 186965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 187065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* The values between FIRST_AUTOTAB_OP and LAST_AUTOTAB_RIGHT_OP, inclusive, 187165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichare used in a table for deciding whether a repeated character type can be 187265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichauto-possessified. */ 187365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 187465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define FIRST_AUTOTAB_OP OP_NOT_DIGIT 187565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define LAST_AUTOTAB_LEFT_OP OP_EXTUNI 187665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define LAST_AUTOTAB_RIGHT_OP OP_DOLLM 187765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 187865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichenum { 187965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_END, /* 0 End of pattern */ 188065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 188165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Values corresponding to backslashed metacharacters */ 188265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 188365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SOD, /* 1 Start of data: \A */ 188465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SOM, /* 2 Start of match (subject + offset): \G */ 188565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SET_SOM, /* 3 Set start of match (\K) */ 188665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOT_WORD_BOUNDARY, /* 4 \B */ 188765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_WORD_BOUNDARY, /* 5 \b */ 188865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOT_DIGIT, /* 6 \D */ 188965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DIGIT, /* 7 \d */ 189065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOT_WHITESPACE, /* 8 \S */ 189165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_WHITESPACE, /* 9 \s */ 189265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOT_WORDCHAR, /* 10 \W */ 189365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_WORDCHAR, /* 11 \w */ 189465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 189565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ANY, /* 12 Match any character except newline (\N) */ 189665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ALLANY, /* 13 Match any character */ 189765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ANYBYTE, /* 14 Match any byte (\C); different to OP_ANY for UTF-8 */ 189865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPROP, /* 15 \P (not Unicode property) */ 189965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_PROP, /* 16 \p (Unicode property) */ 190065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ANYNL, /* 17 \R (any newline sequence) */ 190165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOT_HSPACE, /* 18 \H (not horizontal whitespace) */ 190265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_HSPACE, /* 19 \h (horizontal whitespace) */ 190365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOT_VSPACE, /* 20 \V (not vertical whitespace) */ 190465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_VSPACE, /* 21 \v (vertical whitespace) */ 190565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_EXTUNI, /* 22 \X (extended Unicode sequence */ 190665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_EODN, /* 23 End of data or \n at end of data (\Z) */ 190765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_EOD, /* 24 End of data (\z) */ 190865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 190965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Line end assertions */ 191065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 191165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DOLL, /* 25 End of line - not multiline */ 191265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DOLLM, /* 26 End of line - multiline */ 191365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CIRC, /* 27 Start of line - not multiline */ 191465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CIRCM, /* 28 Start of line - multiline */ 191565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 191665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Single characters; caseful must precede the caseless ones */ 191765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 191865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CHAR, /* 29 Match one character, casefully */ 191965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CHARI, /* 30 Match one character, caselessly */ 192065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOT, /* 31 Match one character, not the given one, casefully */ 192165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTI, /* 32 Match one character, not the given one, caselessly */ 192265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 192365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* The following sets of 13 opcodes must always be kept in step because 192465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich the offset from the first one is used to generate the others. */ 192565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 192665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Repeated characters; caseful must precede the caseless ones */ 192765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 192865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_STAR, /* 33 The maximizing and minimizing versions of */ 192965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINSTAR, /* 34 these six opcodes must come in pairs, with */ 193065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_PLUS, /* 35 the minimizing one second. */ 193165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINPLUS, /* 36 */ 193265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_QUERY, /* 37 */ 193365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINQUERY, /* 38 */ 193465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 193565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_UPTO, /* 39 From 0 to n matches of one character, caseful*/ 193665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINUPTO, /* 40 */ 193765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_EXACT, /* 41 Exactly n matches */ 193865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 193965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSSTAR, /* 42 Possessified star, caseful */ 194065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSPLUS, /* 43 Possessified plus, caseful */ 194165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSQUERY, /* 44 Posesssified query, caseful */ 194265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSUPTO, /* 45 Possessified upto, caseful */ 194365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 194465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Repeated characters; caseless must follow the caseful ones */ 194565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 194665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_STARI, /* 46 */ 194765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINSTARI, /* 47 */ 194865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_PLUSI, /* 48 */ 194965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINPLUSI, /* 49 */ 195065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_QUERYI, /* 50 */ 195165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINQUERYI, /* 51 */ 195265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 195365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_UPTOI, /* 52 From 0 to n matches of one character, caseless */ 195465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MINUPTOI, /* 53 */ 195565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_EXACTI, /* 54 */ 195665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 195765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSSTARI, /* 55 Possessified star, caseless */ 195865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSPLUSI, /* 56 Possessified plus, caseless */ 195965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSQUERYI, /* 57 Posesssified query, caseless */ 196065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_POSUPTOI, /* 58 Possessified upto, caseless */ 196165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 196265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* The negated ones must follow the non-negated ones, and match them */ 196365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Negated repeated character, caseful; must precede the caseless ones */ 196465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 196565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTSTAR, /* 59 The maximizing and minimizing versions of */ 196665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINSTAR, /* 60 these six opcodes must come in pairs, with */ 196765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPLUS, /* 61 the minimizing one second. They must be in */ 196865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINPLUS, /* 62 exactly the same order as those above. */ 196965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTQUERY, /* 63 */ 197065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINQUERY, /* 64 */ 197165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 197265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTUPTO, /* 65 From 0 to n matches, caseful */ 197365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINUPTO, /* 66 */ 197465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTEXACT, /* 67 Exactly n matches */ 197565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 197665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSSTAR, /* 68 Possessified versions, caseful */ 197765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSPLUS, /* 69 */ 197865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSQUERY, /* 70 */ 197965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSUPTO, /* 71 */ 198065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 198165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Negated repeated character, caseless; must follow the caseful ones */ 198265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 198365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTSTARI, /* 72 */ 198465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINSTARI, /* 73 */ 198565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPLUSI, /* 74 */ 198665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINPLUSI, /* 75 */ 198765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTQUERYI, /* 76 */ 198865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINQUERYI, /* 77 */ 198965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 199065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTUPTOI, /* 78 From 0 to n matches, caseless */ 199165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTMINUPTOI, /* 79 */ 199265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTEXACTI, /* 80 Exactly n matches */ 199365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 199465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSSTARI, /* 81 Possessified versions, caseless */ 199565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSPLUSI, /* 82 */ 199665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSQUERYI, /* 83 */ 199765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NOTPOSUPTOI, /* 84 */ 199865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 199965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Character types */ 200065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 200165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPESTAR, /* 85 The maximizing and minimizing versions of */ 200265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEMINSTAR, /* 86 these six opcodes must come in pairs, with */ 200365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEPLUS, /* 87 the minimizing one second. These codes must */ 200465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEMINPLUS, /* 88 be in exactly the same order as those above. */ 200565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEQUERY, /* 89 */ 200665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEMINQUERY, /* 90 */ 200765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 200865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEUPTO, /* 91 From 0 to n matches */ 200965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEMINUPTO, /* 92 */ 201065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEEXACT, /* 93 Exactly n matches */ 201165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 201265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEPOSSTAR, /* 94 Possessified versions */ 201365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEPOSPLUS, /* 95 */ 201465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEPOSQUERY, /* 96 */ 201565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TYPEPOSUPTO, /* 97 */ 201665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 201765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* These are used for character classes and back references; only the 201865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich first six are the same as the sets above. */ 201965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 202065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRSTAR, /* 98 The maximizing and minimizing versions of */ 202165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRMINSTAR, /* 99 all these opcodes must come in pairs, with */ 202265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRPLUS, /* 100 the minimizing one second. These codes must */ 202365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRMINPLUS, /* 101 be in exactly the same order as those above. */ 202465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRQUERY, /* 102 */ 202565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRMINQUERY, /* 103 */ 202665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 202765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRRANGE, /* 104 These are different to the three sets above. */ 202865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRMINRANGE, /* 105 */ 202965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 203065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRPOSSTAR, /* 106 Possessified versions */ 203165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRPOSPLUS, /* 107 */ 203265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRPOSQUERY, /* 108 */ 203365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CRPOSRANGE, /* 109 */ 203465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 203565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* End of quantifier opcodes */ 203665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 203765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CLASS, /* 110 Match a character class, chars < 256 only */ 203865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_NCLASS, /* 111 Same, but the bitmap was created from a negative 203965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich class - the difference is relevant only when a 204065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich character > 255 is encountered. */ 204165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_XCLASS, /* 112 Extended class for handling > 255 chars within the 204265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich class. This does both positive and negative. */ 204365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_REF, /* 113 Match a back reference, casefully */ 204465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_REFI, /* 114 Match a back reference, caselessly */ 204565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DNREF, /* 115 Match a duplicate name backref, casefully */ 204665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DNREFI, /* 116 Match a duplicate name backref, caselessly */ 204765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_RECURSE, /* 117 Match a numbered subpattern (possibly recursive) */ 204865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CALLOUT, /* 118 Call out to external function if provided */ 204965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 205065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ALT, /* 119 Start of alternation */ 205165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_KET, /* 120 End of group that doesn't have an unbounded repeat */ 205265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_KETRMAX, /* 121 These two must remain together and in this */ 205365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_KETRMIN, /* 122 order. They are for groups the repeat for ever. */ 205465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_KETRPOS, /* 123 Possessive unlimited repeat. */ 205565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 205665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* The assertions must come before BRA, CBRA, ONCE, and COND, and the four 205765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich asserts must remain in order. */ 205865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 205965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_REVERSE, /* 124 Move pointer back - used in lookbehind assertions */ 206065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ASSERT, /* 125 Positive lookahead */ 206165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ASSERT_NOT, /* 126 Negative lookahead */ 206265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ASSERTBACK, /* 127 Positive lookbehind */ 206365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ASSERTBACK_NOT, /* 128 Negative lookbehind */ 206465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 206565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* ONCE, ONCE_NC, BRA, BRAPOS, CBRA, CBRAPOS, and COND must come immediately 206665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich after the assertions, with ONCE first, as there's a test for >= ONCE for a 206765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich subpattern that isn't an assertion. The POS versions must immediately follow 206865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich the non-POS versions in each case. */ 206965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 207065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ONCE, /* 129 Atomic group, contains captures */ 207165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ONCE_NC, /* 130 Atomic group containing no captures */ 207265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_BRA, /* 131 Start of non-capturing bracket */ 207365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_BRAPOS, /* 132 Ditto, with unlimited, possessive repeat */ 207465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CBRA, /* 133 Start of capturing bracket */ 207565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CBRAPOS, /* 134 Ditto, with unlimited, possessive repeat */ 207665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_COND, /* 135 Conditional group */ 207765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 207865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* These five must follow the previous five, in the same order. There's a 207965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich check for >= SBRA to distinguish the two sets. */ 208065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 208165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SBRA, /* 136 Start of non-capturing bracket, check empty */ 208265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SBRAPOS, /* 137 Ditto, with unlimited, possessive repeat */ 208365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SCBRA, /* 138 Start of capturing bracket, check empty */ 208465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SCBRAPOS, /* 139 Ditto, with unlimited, possessive repeat */ 208565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SCOND, /* 140 Conditional group, check empty */ 208665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 208765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* The next two pairs must (respectively) be kept together. */ 208865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 208965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CREF, /* 141 Used to hold a capture number as condition */ 209065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DNCREF, /* 142 Used to point to duplicate names as a condition */ 209165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_RREF, /* 143 Used to hold a recursion number as condition */ 209265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DNRREF, /* 144 Used to point to duplicate names as a condition */ 209365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_DEF, /* 145 The DEFINE condition */ 209465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 209565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_BRAZERO, /* 146 These two must remain together and in this */ 209665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_BRAMINZERO, /* 147 order. */ 209765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_BRAPOSZERO, /* 148 */ 209865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 209965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* These are backtracking control verbs */ 210065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 210165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_MARK, /* 149 always has an argument */ 210265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_PRUNE, /* 150 */ 210365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_PRUNE_ARG, /* 151 same, but with argument */ 210465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SKIP, /* 152 */ 210565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SKIP_ARG, /* 153 same, but with argument */ 210665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_THEN, /* 154 */ 210765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_THEN_ARG, /* 155 same, but with argument */ 210865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_COMMIT, /* 156 */ 210965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 211065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* These are forced failure and success verbs */ 211165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 211265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_FAIL, /* 157 */ 211365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ACCEPT, /* 158 */ 211465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_ASSERT_ACCEPT, /* 159 Used inside assertions */ 211565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_CLOSE, /* 160 Used before OP_ACCEPT to close open captures */ 211665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 211765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* This is used to skip a subpattern with a {0} quantifier */ 211865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 211965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_SKIPZERO, /* 161 */ 212065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 212165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* This is not an opcode, but is used to check that tables indexed by opcode 212265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich are the correct length, in order to catch updating errors - there have been 212365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich some in the past. */ 212465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 212565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich OP_TABLE_LENGTH 212665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}; 212765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 212865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* *** NOTE NOTE NOTE *** Whenever the list above is updated, the two macro 212965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdefinitions that follow must also be updated to match. There are also tables 213065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcalled "opcode_possessify" in pcre_compile.c and "coptable" and "poptable" in 213165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_dfa_exec.c that must be updated. */ 213265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 213365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 213465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This macro defines textual names for all the opcodes. These are used only 213565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfor debugging, and some of them are only partial names. The macro is referenced 213665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichonly in pcre_printint.c, which fills out the full names in many cases (and in 213765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsome cases doesn't actually use these names at all). */ 213865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 213965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define OP_NAME_LIST \ 214065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "End", "\\A", "\\G", "\\K", "\\B", "\\b", "\\D", "\\d", \ 214165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "\\S", "\\s", "\\W", "\\w", "Any", "AllAny", "Anybyte", \ 214265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "notprop", "prop", "\\R", "\\H", "\\h", "\\V", "\\v", \ 214365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "extuni", "\\Z", "\\z", \ 214465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "$", "$", "^", "^", "char", "chari", "not", "noti", \ 214565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*", "*?", "+", "+?", "?", "??", \ 214665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "{", "{", "{", \ 214765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*+","++", "?+", "{", \ 214865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*", "*?", "+", "+?", "?", "??", \ 214965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "{", "{", "{", \ 215065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*+","++", "?+", "{", \ 215165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*", "*?", "+", "+?", "?", "??", \ 215265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "{", "{", "{", \ 215365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*+","++", "?+", "{", \ 215465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*", "*?", "+", "+?", "?", "??", \ 215565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "{", "{", "{", \ 215665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*+","++", "?+", "{", \ 215765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ 215865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*+","++", "?+", "{", \ 215965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*", "*?", "+", "+?", "?", "??", "{", "{", \ 216065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*+","++", "?+", "{", \ 216165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "class", "nclass", "xclass", "Ref", "Refi", "DnRef", "DnRefi", \ 216265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Recurse", "Callout", \ 216365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Alt", "Ket", "KetRmax", "KetRmin", "KetRpos", \ 216465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Reverse", "Assert", "Assert not", "AssertB", "AssertB not", \ 216565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Once", "Once_NC", \ 216665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Bra", "BraPos", "CBra", "CBraPos", \ 216765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Cond", \ 216865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "SBra", "SBraPos", "SCBra", "SCBraPos", \ 216965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "SCond", \ 217065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Cond ref", "Cond dnref", "Cond rec", "Cond dnrec", "Cond def", \ 217165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Brazero", "Braminzero", "Braposzero", \ 217265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*MARK", "*PRUNE", "*PRUNE", "*SKIP", "*SKIP", \ 217365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*THEN", "*THEN", "*COMMIT", "*FAIL", \ 217465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "*ACCEPT", "*ASSERT_ACCEPT", \ 217565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich "Close", "Skip zero" 217665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 217765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 217865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* This macro defines the length of fixed length operations in the compiled 217965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichregex. The lengths are used when searching for specific things, and also in the 218065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdebugging printing of a compiled regex. We use a macro so that it can be 218165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdefined close to the definitions of the opcodes themselves. 218265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 218365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichAs things have been extended, some of these are no longer fixed lenths, but are 218465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichminima instead. For example, the length of a single-character repeat may vary 218565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichin UTF-8 mode. The code that uses this table must know about such things. */ 218665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 218765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define OP_LENGTHS \ 218865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, /* End */ \ 218965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, 1, 1, /* \A, \G, \K, \B, \b */ \ 219065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, 1, 1, 1, /* \D, \d, \S, \s, \W, \w */ \ 219165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, /* Any, AllAny, Anybyte */ \ 219265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 3, 3, /* \P, \p */ \ 219365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, 1, 1, /* \R, \H, \h, \V, \v */ \ 219465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, /* \X */ \ 219565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, 1, 1, 1, /* \Z, \z, $, $M ^, ^M */ \ 219665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, /* Char - the minimum length */ \ 219765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, /* Chari - the minimum length */ \ 219865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, /* not */ \ 219965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, /* noti */ \ 220065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Positive single-char repeats ** These are */ \ 220165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2, 2, 2, /* *, *?, +, +?, ?, ?? ** minima in */ \ 220265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, 2+IMM2_SIZE, /* upto, minupto ** mode */ \ 220365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, /* exact */ \ 220465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2+IMM2_SIZE, /* *+, ++, ?+, upto+ */ \ 220565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2, 2, 2, /* *I, *?I, +I, +?I, ?I, ??I ** UTF-8 */ \ 220665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, 2+IMM2_SIZE, /* upto I, minupto I */ \ 220765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, /* exact I */ \ 220865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2+IMM2_SIZE, /* *+I, ++I, ?+I, upto+I */ \ 220965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Negative single-char repeats - only for chars < 256 */ \ 221065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2, 2, 2, /* NOT *, *?, +, +?, ?, ?? */ \ 221165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, 2+IMM2_SIZE, /* NOT upto, minupto */ \ 221265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, /* NOT exact */ \ 221365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2+IMM2_SIZE, /* Possessive NOT *, +, ?, upto */ \ 221465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2, 2, 2, /* NOT *I, *?I, +I, +?I, ?I, ??I */ \ 221565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, 2+IMM2_SIZE, /* NOT upto I, minupto I */ \ 221665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, /* NOT exact I */ \ 221765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2+IMM2_SIZE, /* Possessive NOT *I, +I, ?I, upto I */ \ 221865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Positive type repeats */ \ 221965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2, 2, 2, /* Type *, *?, +, +?, ?, ?? */ \ 222065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, 2+IMM2_SIZE, /* Type upto, minupto */ \ 222165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+IMM2_SIZE, /* Type exact */ \ 222265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2, 2, 2, 2+IMM2_SIZE, /* Possessive *+, ++, ?+, upto+ */ \ 222365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich /* Character class & ref repeats */ \ 222465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, 1, 1, 1, /* *, *?, +, +?, ?, ?? */ \ 222565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+2*IMM2_SIZE, 1+2*IMM2_SIZE, /* CRRANGE, CRMINRANGE */ \ 222665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, 1+2*IMM2_SIZE, /* Possessive *+, ++, ?+, CRPOSRANGE */ \ 222765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+(32/sizeof(pcre_uchar)), /* CLASS */ \ 222865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+(32/sizeof(pcre_uchar)), /* NCLASS */ \ 222965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 0, /* XCLASS - variable length */ \ 223065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+IMM2_SIZE, /* REF */ \ 223165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+IMM2_SIZE, /* REFI */ \ 223265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+2*IMM2_SIZE, /* DNREF */ \ 223365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+2*IMM2_SIZE, /* DNREFI */ \ 223465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* RECURSE */ \ 223565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 2+2*LINK_SIZE, /* CALLOUT */ \ 223665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* Alt */ \ 223765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* Ket */ \ 223865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* KetRmax */ \ 223965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* KetRmin */ \ 224065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* KetRpos */ \ 224165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* Reverse */ \ 224265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* Assert */ \ 224365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* Assert not */ \ 224465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* Assert behind */ \ 224565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* Assert behind not */ \ 224665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* ONCE */ \ 224765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* ONCE_NC */ \ 224865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* BRA */ \ 224965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* BRAPOS */ \ 225065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE+IMM2_SIZE, /* CBRA */ \ 225165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE+IMM2_SIZE, /* CBRAPOS */ \ 225265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* COND */ \ 225365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* SBRA */ \ 225465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* SBRAPOS */ \ 225565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE+IMM2_SIZE, /* SCBRA */ \ 225665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE+IMM2_SIZE, /* SCBRAPOS */ \ 225765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+LINK_SIZE, /* SCOND */ \ 225865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+IMM2_SIZE, 1+2*IMM2_SIZE, /* CREF, DNCREF */ \ 225965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+IMM2_SIZE, 1+2*IMM2_SIZE, /* RREF, DNRREF */ \ 226065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, /* DEF */ \ 226165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, /* BRAZERO, BRAMINZERO, BRAPOSZERO */ \ 226265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 3, 1, 3, /* MARK, PRUNE, PRUNE_ARG */ \ 226365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 3, /* SKIP, SKIP_ARG */ \ 226465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 3, /* THEN, THEN_ARG */ \ 226565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1, 1, 1, 1, /* COMMIT, FAIL, ACCEPT, ASSERT_ACCEPT */ \ 226665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 1+IMM2_SIZE, 1 /* CLOSE, SKIPZERO */ 226765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 226865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* A magic value for OP_RREF to indicate the "any recursion" condition. */ 226965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 227065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define RREF_ANY 0xffff 227165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 227265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Compile time error code numbers. They are given names so that they can more 227365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevicheasily be tracked. When a new number is added, the table called eint in 227465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcreposix.c must be updated. */ 227565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 227665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichenum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, 227765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR10, ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, 227865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR20, ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR28, ERR29, 227965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, 228065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49, 228165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59, 228265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, 228365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR70, ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, 228465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERRCOUNT }; 228565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 228665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* JIT compiling modes. The function list is indexed by them. */ 228765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 228865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichenum { JIT_COMPILE, JIT_PARTIAL_SOFT_COMPILE, JIT_PARTIAL_HARD_COMPILE, 228965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich JIT_NUMBER_OF_COMPILE_MODES }; 229065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 229165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* The real format of the start of the pcre block; the index of names and the 229265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcode vector run on as long as necessary after the end. We store an explicit 229365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichoffset to the name table so that if a regex is compiled on one host, saved, and 229465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthen run on another where the size of pointers is different, all might still 229565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbe well. 229665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 229765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThe size of the structure must be a multiple of 8 bytes. For the case of 229865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcompiled-on-4 and run-on-8, we include an extra pointer that is always NULL so 229965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichthat there are an even number of pointers which therefore are a multiple of 8 230065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbytes. 230165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 230265de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichIt is necessary to fork the struct for the 32 bit library, since it needs to 230365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichuse pcre_uint32 for first_char and req_char. We can't put an ifdef inside the 230465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef because pcretest needs access to the struct of the 8-, 16- and 32-bit 230565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichvariants. 230665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 230765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*** WARNING *** 230865de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichWhen new fields are added to these structures, remember to adjust the code in 230965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_byte_order.c that is concerned with swapping the byte order of the fields 231065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwhen a compiled regex is reloaded on a host with different endianness. 231165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*** WARNING *** 231265de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichThere is also similar byte-flipping code in pcretest.c, which is used for 231365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtesting the byte-flipping features. It must also be kept in step. 231465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*** WARNING *** 231565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich*/ 231665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 231765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct real_pcre8_or_16 { 231865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 magic_number; 231965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 size; /* Total that was malloced */ 232065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 options; /* Public options */ 232165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 flags; /* Private flags */ 232265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 limit_match; /* Limit set from regex */ 232365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 limit_recursion; /* Limit set from regex */ 232465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 first_char; /* Starting character */ 232565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 req_char; /* This character must be seen */ 232665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 max_lookbehind; /* Longest lookbehind (characters) */ 232765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 top_bracket; /* Highest numbered group */ 232865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 top_backref; /* Highest numbered back reference */ 232965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 name_table_offset; /* Offset to name table that follows */ 233065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 name_entry_size; /* Size of any name items */ 233165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 name_count; /* Number of name items */ 233265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 ref_count; /* Reference count */ 233365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 dummy1; /* To ensure size is a multiple of 8 */ 233465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 dummy2; /* To ensure size is a multiple of 8 */ 233565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 dummy3; /* To ensure size is a multiple of 8 */ 233665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *tables; /* Pointer to tables or NULL for std */ 233765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich void *nullpad; /* NULL padding */ 233865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} real_pcre8_or_16; 233965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 234065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct real_pcre8_or_16 real_pcre; 234165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct real_pcre8_or_16 real_pcre16; 234265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 234365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct real_pcre32 { 234465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 magic_number; 234565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 size; /* Total that was malloced */ 234665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 options; /* Public options */ 234765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 flags; /* Private flags */ 234865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 limit_match; /* Limit set from regex */ 234965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 limit_recursion; /* Limit set from regex */ 235065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 first_char; /* Starting character */ 235165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 req_char; /* This character must be seen */ 235265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 max_lookbehind; /* Longest lookbehind (characters) */ 235365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 top_bracket; /* Highest numbered group */ 235465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 top_backref; /* Highest numbered back reference */ 235565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 name_table_offset; /* Offset to name table that follows */ 235665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 name_entry_size; /* Size of any name items */ 235765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 name_count; /* Number of name items */ 235865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 ref_count; /* Reference count */ 235965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 dummy; /* To ensure size is a multiple of 8 */ 236065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *tables; /* Pointer to tables or NULL for std */ 236165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich void *nullpad; /* NULL padding */ 236265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} real_pcre32; 236365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 236465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 236565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REAL_PCRE real_pcre 236665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 236765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REAL_PCRE real_pcre16 236865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 236965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REAL_PCRE real_pcre32 237065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 237165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 237265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Assert that the size of REAL_PCRE is divisible by 8 */ 237365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef int __assert_real_pcre_size_divisible_8[(sizeof(REAL_PCRE) % 8) == 0 ? 1 : -1]; 237465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 237565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Needed in pcretest to access some fields in the real_pcre* structures 237665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich * directly. They're unified for 8/16/32 bits since the structs only differ 237765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich * after these fields; if that ever changes, need to fork those defines into 237865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich * 8/16 and 32 bit versions. */ 237965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REAL_PCRE_MAGIC(re) (((REAL_PCRE*)re)->magic_number) 238065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REAL_PCRE_SIZE(re) (((REAL_PCRE*)re)->size) 238165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REAL_PCRE_OPTIONS(re) (((REAL_PCRE*)re)->options) 238265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define REAL_PCRE_FLAGS(re) (((REAL_PCRE*)re)->flags) 238365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 238465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* The format of the block used to store data from pcre_study(). The same 238565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichremark (see NOTE above) about extending this structure applies. */ 238665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 238765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct pcre_study_data { 238865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 size; /* Total that was malloced */ 238965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 flags; /* Private flags */ 239065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint8 start_bits[32]; /* Starting char bits */ 239165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 minlength; /* Minimum subject length */ 239265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} pcre_study_data; 239365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 239465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Structure for building a chain of open capturing subpatterns during 239565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcompiling, so that instructions to close them can be compiled when (*ACCEPT) is 239665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichencountered. This is also used to identify subpatterns that contain recursive 239765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichback references to themselves, so that they can be made atomic. */ 239865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 239965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct open_capitem { 240065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich struct open_capitem *next; /* Chain link */ 240165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 number; /* Capture number */ 240265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 flag; /* Set TRUE if recursive back ref */ 240365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} open_capitem; 240465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 240565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Structure for building a list of named groups during the first pass of 240665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcompiling. */ 240765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 240865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct named_group { 240965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *name; /* Points to the name in the pattern */ 241065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int length; /* Length of the name */ 241165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 number; /* Group number */ 241265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} named_group; 241365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 241465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Structure for passing "static" information around between the functions 241565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdoing the compiling, so that they are thread-safe. */ 241665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 241765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct compile_data { 241865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *lcc; /* Points to lower casing table */ 241965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *fcc; /* Points to case-flipping table */ 242065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *cbits; /* Points to character type table */ 242165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *ctypes; /* Points to table of type maps */ 242265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *start_workspace;/* The start of working space */ 242365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *start_code; /* The start of the compiled code */ 242465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *start_pattern; /* The start of the pattern */ 242565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *end_pattern; /* The end of the pattern */ 242665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uchar *hwm; /* High watermark of workspace */ 242765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich open_capitem *open_caps; /* Chain of open capture items */ 242865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich named_group *named_groups; /* Points to vector in pre-compile */ 242965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uchar *name_table; /* The name/number table */ 243065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int names_found; /* Number of entries so far */ 243165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int name_entry_size; /* Size of each entry */ 243265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int named_group_list_size; /* Number of entries in the list */ 243365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int workspace_size; /* Size of workspace */ 243465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned int bracount; /* Count of capturing parens as we compile */ 243565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int final_bracount; /* Saved value after first pass */ 243665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int max_lookbehind; /* Maximum lookbehind (characters) */ 243765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int top_backref; /* Maximum back reference */ 243865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned int backref_map; /* Bitmap of low back refs */ 243965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned int namedrefcount; /* Number of backreferences by name */ 244065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int parens_depth; /* Depth of nested parentheses */ 244165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int assert_depth; /* Depth of nested assertions */ 244265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 external_options; /* External (initial) options */ 244365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint32 external_flags; /* External flag bits to be set */ 244465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int req_varyopt; /* "After variable item" flag for reqbyte */ 244565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL had_accept; /* (*ACCEPT) encountered */ 244665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL had_pruneorskip; /* (*PRUNE) or (*SKIP) encountered */ 244765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL check_lookbehind; /* Lookbehinds need later checking */ 244865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL dupnames; /* Duplicate names exist */ 244965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int nltype; /* Newline type */ 245065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int nllen; /* Newline string length */ 245165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uchar nl[4]; /* Newline string when fixed length */ 245265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} compile_data; 245365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 245465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Structure for maintaining a chain of pointers to the currently incomplete 245565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbranches, for testing for left recursion while compiling. */ 245665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 245765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct branch_chain { 245865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich struct branch_chain *outer; 245965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uchar *current_branch; 246065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} branch_chain; 246165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 246265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Structure for items in a linked list that represents an explicit recursive 246365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcall within the pattern; used by pcre_exec(). */ 246465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 246565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct recursion_info { 246665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich struct recursion_info *prevrec; /* Previous recursion record (or NULL) */ 246765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned int group_num; /* Number of group that was called */ 246865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int *offset_save; /* Pointer to start of saved offsets */ 246965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int saved_max; /* Number of saved offsets */ 247065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int saved_capture_last; /* Last capture number */ 247165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR subject_position; /* Position at start of recursion */ 247265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} recursion_info; 247365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 247465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* A similar structure for pcre_dfa_exec(). */ 247565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 247665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct dfa_recursion_info { 247765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich struct dfa_recursion_info *prevrec; 247865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int group_num; 247965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR subject_position; 248065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} dfa_recursion_info; 248165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 248265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Structure for building a chain of data for holding the values of the subject 248365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpointer at the start of each subpattern, so as to detect when an empty string 248465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichhas been matched by a subpattern - to break infinite loops; used by 248565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_exec(). */ 248665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 248765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct eptrblock { 248865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich struct eptrblock *epb_prev; 248965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR epb_saved_eptr; 249065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} eptrblock; 249165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 249265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 249365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Structure for passing "static" information around between the functions 249465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdoing traditional NFA matching, so that they are thread-safe. */ 249565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 249665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct match_data { 249765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned long int match_call_count; /* As it says */ 249865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned long int match_limit; /* As it says */ 249965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned long int match_limit_recursion; /* As it says */ 250065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int *offset_vector; /* Offset vector */ 250165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int offset_end; /* One past the end */ 250265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int offset_max; /* The maximum usable for return data */ 250365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int nltype; /* Newline type */ 250465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int nllen; /* Newline string length */ 250565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int name_count; /* Number of names in name table */ 250665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int name_entry_size; /* Size of entry in names table */ 250765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned int skip_arg_count; /* For counting SKIP_ARGs */ 250865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich unsigned int ignore_skip_arg; /* For re-run when SKIP arg name not found */ 250965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uchar *name_table; /* Table of names */ 251065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uchar nl[4]; /* Newline string when fixed */ 251165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *lcc; /* Points to lower casing table */ 251265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *fcc; /* Points to case-flipping table */ 251365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *ctypes; /* Points to table of type maps */ 251465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL notbol; /* NOTBOL flag */ 251565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL noteol; /* NOTEOL flag */ 251665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL utf; /* UTF-8 / UTF-16 flag */ 251765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL jscript_compat; /* JAVASCRIPT_COMPAT flag */ 251865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL use_ucp; /* PCRE_UCP flag */ 251965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL endonly; /* Dollar not before final \n */ 252065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL notempty; /* Empty string match not wanted */ 252165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL notempty_atstart; /* Empty string match at start not wanted */ 252265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL hitend; /* Hit the end of the subject at some point */ 252365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL bsr_anycrlf; /* \R is just any CRLF, not full Unicode */ 252465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich BOOL hasthen; /* Pattern contains (*THEN) */ 252565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *start_code; /* For use when recursing */ 252665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR start_subject; /* Start of the subject string */ 252765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR end_subject; /* End of the subject string */ 252865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR start_match_ptr; /* Start of matched string */ 252965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR end_match_ptr; /* Subject position at end match */ 253065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PCRE_PUCHAR start_used_ptr; /* Earliest consulted character */ 253165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int partial; /* PARTIAL options */ 253265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int end_offset_top; /* Highwater mark at end of match */ 253365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_int32 capture_last; /* Most recent capture number + overflow flag */ 253465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int start_offset; /* The start offset value */ 253565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int match_function_type; /* Set for certain special calls of MATCH() */ 253665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich eptrblock *eptrchain; /* Chain of eptrblocks for tail recursions */ 253765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int eptrn; /* Next free eptrblock */ 253865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich recursion_info *recursive; /* Linked list of recursion data */ 253965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich void *callout_data; /* To pass back to callouts */ 254065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *mark; /* Mark pointer to pass back on success */ 254165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *nomatch_mark;/* Mark pointer to pass back on failure */ 254265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *once_target; /* Where to back up to for atomic groups */ 254365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef NO_RECURSE 254465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich void *match_frames_base; /* For remembering malloc'd frames */ 254565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 254665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} match_data; 254765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 254865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* A similar structure is used for the same purpose by the DFA matching 254965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfunctions. */ 255065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 255165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct dfa_match_data { 255265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *start_code; /* Start of the compiled pattern */ 255365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *start_subject ; /* Start of the subject string */ 255465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *end_subject; /* End of subject string */ 255565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *start_used_ptr; /* Earliest consulted character */ 255665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uint8 *tables; /* Character tables */ 255765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int start_offset; /* The start offset value */ 255865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int moptions; /* Match options */ 255965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int poptions; /* Pattern options */ 256065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int nltype; /* Newline type */ 256165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int nllen; /* Newline string length */ 256265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uchar nl[4]; /* Newline string when fixed */ 256365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich void *callout_data; /* To pass back to callouts */ 256465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich dfa_recursion_info *recursive; /* Linked list of recursion data */ 256565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} dfa_match_data; 256665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 256765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Bit definitions for entries in the pcre_ctypes table. */ 256865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 256965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ctype_space 0x01 257065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ctype_letter 0x02 257165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ctype_digit 0x04 257265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ctype_xdigit 0x08 257365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ctype_word 0x10 /* alphanumeric or '_' */ 257465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */ 257565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 257665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set 257765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichof bits for a class map. Some classes are built by combining these tables. */ 257865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 257965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_space 0 /* [:space:] or \s */ 258065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_xdigit 32 /* [:xdigit:] */ 258165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_digit 64 /* [:digit:] or \d */ 258265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_upper 96 /* [:upper:] */ 258365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_lower 128 /* [:lower:] */ 258465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_word 160 /* [:word:] or \w */ 258565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_graph 192 /* [:graph:] */ 258665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_print 224 /* [:print:] */ 258765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_punct 256 /* [:punct:] */ 258865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_cntrl 288 /* [:cntrl:] */ 258965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbit_length 320 /* Length of the cbits table */ 259065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 259165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Offsets of the various tables from the base tables pointer, and 259265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtotal length. */ 259365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 259465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define lcc_offset 0 259565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define fcc_offset 256 259665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define cbits_offset 512 259765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define ctypes_offset (cbits_offset + cbit_length) 259865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define tables_length (ctypes_offset + 256) 259965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 260065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Internal function and data prefixes. */ 260165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 260265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 260365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PUBL 260465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBL(name) pcre_##name 260565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 260665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PRIV 260765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PRIV(name) _pcre_##name 260865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 260965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 261065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PUBL 261165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBL(name) pcre16_##name 261265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 261365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PRIV 261465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PRIV(name) _pcre16_##name 261565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 261665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 261765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PUBL 261865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PUBL(name) pcre32_##name 261965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 262065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifndef PRIV 262165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define PRIV(name) _pcre32_##name 262265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 262365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#else 262465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#error Unsupported compiling mode 262565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE[8|16|32] */ 262665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 262765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Layout of the UCP type table that translates property names into types and 262865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcodes. Each entry used to point directly to a name, but to reduce the number of 262965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichrelocations in shared libraries, it now has an offset into a single string 263065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichinstead. */ 263165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 263265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct { 263365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 name_offset; 263465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 type; 263565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint16 value; 263665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} ucp_type_table; 263765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 263865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 263965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Internal shared data tables. These are tables that are used by more than one 264065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichof the exported public functions. They have to be "external" in the C sense, 264165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichbut are not part of the PCRE public API. The data for these tables is in the 264265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichpcre_tables.c module. */ 264365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 264465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef COMPILE_PCRE8 264565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const int PRIV(utf8_table1)[]; 264665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const int PRIV(utf8_table1_size); 264765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const int PRIV(utf8_table2)[]; 264865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const int PRIV(utf8_table3)[]; 264965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint8 PRIV(utf8_table4)[]; 265065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE8 */ 265165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 265265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const char PRIV(utt_names)[]; 265365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const ucp_type_table PRIV(utt)[]; 265465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const int PRIV(utt_size); 265565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 265665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint8 PRIV(OP_lengths)[]; 265765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint8 PRIV(default_tables)[]; 265865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 265965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint32 PRIV(hspace_list)[]; 266065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint32 PRIV(vspace_list)[]; 266165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 266265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 266365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Internal shared functions. These are functions that are used by more than 266465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichone of the exported public functions. They have to be "external" in the C 266565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichsense, but are not part of the PCRE public API. */ 266665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 266765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* String comparison functions. */ 266865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 266965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 267065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_UC(str1, str2) \ 267165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich strcmp((char *)(str1), (char *)(str2)) 267265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_C8(str1, str2) \ 267365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich strcmp((char *)(str1), (str2)) 267465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRNCMP_UC_UC(str1, str2, num) \ 267565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich strncmp((char *)(str1), (char *)(str2), (num)) 267665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRNCMP_UC_C8(str1, str2, num) \ 267765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich strncmp((char *)(str1), (str2), (num)) 267865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRLEN_UC(str) strlen((const char *)str) 267965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 268065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE16 || defined COMPILE_PCRE32 268165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 268265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(strcmp_uc_uc)(const pcre_uchar *, 268365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *); 268465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(strcmp_uc_c8)(const pcre_uchar *, 268565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const char *); 268665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(strncmp_uc_uc)(const pcre_uchar *, 268765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *, unsigned int num); 268865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(strncmp_uc_c8)(const pcre_uchar *, 268965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const char *, unsigned int num); 269065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern unsigned int PRIV(strlen_uc)(const pcre_uchar *str); 269165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 269265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_UC(str1, str2) \ 269365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PRIV(strcmp_uc_uc)((str1), (str2)) 269465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_C8(str1, str2) \ 269565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PRIV(strcmp_uc_c8)((str1), (str2)) 269665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRNCMP_UC_UC(str1, str2, num) \ 269765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PRIV(strncmp_uc_uc)((str1), (str2), (num)) 269865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRNCMP_UC_C8(str1, str2, num) \ 269965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PRIV(strncmp_uc_c8)((str1), (str2), (num)) 270065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRLEN_UC(str) PRIV(strlen_uc)(str) 270165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 270265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE[8|16|32] */ 270365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 270465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#if defined COMPILE_PCRE8 || defined COMPILE_PCRE16 270565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 270665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_UC_TEST(str1, str2) STRCMP_UC_UC(str1, str2) 270765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_C8_TEST(str1, str2) STRCMP_UC_C8(str1, str2) 270865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 270965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#elif defined COMPILE_PCRE32 271065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 271165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(strcmp_uc_uc_utf)(const pcre_uchar *, 271265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *); 271365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(strcmp_uc_c8_utf)(const pcre_uchar *, 271465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const char *); 271565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 271665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_UC_TEST(str1, str2) \ 271765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (utf ? PRIV(strcmp_uc_uc_utf)((str1), (str2)) : PRIV(strcmp_uc_uc)((str1), (str2))) 271865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define STRCMP_UC_C8_TEST(str1, str2) \ 271965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich (utf ? PRIV(strcmp_uc_c8_utf)((str1), (str2)) : PRIV(strcmp_uc_c8)((str1), (str2))) 272065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 272165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* COMPILE_PCRE[8|16|32] */ 272265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 272365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uchar *PRIV(find_bracket)(const pcre_uchar *, BOOL, int); 272465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern BOOL PRIV(is_newline)(PCRE_PUCHAR, int, PCRE_PUCHAR, 272565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int *, BOOL); 272665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern unsigned int PRIV(ord2utf)(pcre_uint32, pcre_uchar *); 272765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(valid_utf)(PCRE_PUCHAR, int, int *); 272865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern BOOL PRIV(was_newline)(PCRE_PUCHAR, int, PCRE_PUCHAR, 272965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich int *, BOOL); 273065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern BOOL PRIV(xclass)(pcre_uint32, const pcre_uchar *, BOOL); 273165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 273265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef SUPPORT_JIT 273365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern void PRIV(jit_compile)(const REAL_PCRE *, 273465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PUBL(extra) *, int); 273565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(jit_exec)(const PUBL(extra) *, 273665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich const pcre_uchar *, int, int, int, int *, int); 273765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern void PRIV(jit_free)(void *); 273865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern int PRIV(jit_get_size)(void *); 273965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const char* PRIV(jit_get_target)(void); 274065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 274165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 274265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* Unicode character database (UCD) */ 274365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 274465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtypedef struct { 274565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint8 script; /* ucp_Arabic, etc. */ 274665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint8 chartype; /* ucp_Cc, etc. (general categories) */ 274765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint8 gbprop; /* ucp_gbControl, etc. (grapheme break property) */ 274865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_uint8 caseset; /* offset to multichar other cases or zero */ 274965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich pcre_int32 other_case; /* offset to other case, or zero if none */ 275065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich} ucd_record; 275165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 275265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint32 PRIV(ucd_caseless_sets)[]; 275365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const ucd_record PRIV(ucd_records)[]; 275465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint8 PRIV(ucd_stage1)[]; 275565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint16 PRIV(ucd_stage2)[]; 275665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint32 PRIV(ucp_gentype)[]; 275765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const pcre_uint32 PRIV(ucp_gbtable)[]; 275865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef SUPPORT_JIT 275965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichextern const int PRIV(ucp_typerange)[]; 276065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 276165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 276265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#ifdef SUPPORT_UCP 276365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* UCD access macros */ 276465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 276565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCD_BLOCK_SIZE 128 276665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define GET_UCD(ch) (PRIV(ucd_records) + \ 276765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \ 276865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE]) 276965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 277065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype 277165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCD_SCRIPT(ch) GET_UCD(ch)->script 277265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCD_CATEGORY(ch) PRIV(ucp_gentype)[UCD_CHARTYPE(ch)] 277365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCD_GRAPHBREAK(ch) GET_UCD(ch)->gbprop 277465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCD_CASESET(ch) GET_UCD(ch)->caseset 277565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#define UCD_OTHERCASE(ch) ((pcre_uint32)((int)ch + (int)(GET_UCD(ch)->other_case))) 277665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 277765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif /* SUPPORT_UCP */ 277865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 277965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#endif 278065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich 278165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich/* End of pcre_internal.h */ 2782