mirror of
https://github.com/3proxy/3proxy.git
synced 2026-03-30 18:40:10 +08:00
Use external PCRE library
This commit is contained in:
parent
5fde85f781
commit
cbab9a2fe2
@ -29,7 +29,7 @@ AFTERCLEAN = (find . -type f -name "*.o" -delete && find src/ -type f -name "Mak
|
|||||||
TYPECOMMAND = cat
|
TYPECOMMAND = cat
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.FreeBSD
|
MAKEFILE = Makefile.FreeBSD
|
||||||
PLUGINS ?= StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin
|
PLUGINS ?= StringsPlugin TrafficPlugin TransparentPlugin
|
||||||
OPENSSL_CHECK = $(shell echo "\#include <openssl/ssl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l crypto -l ssl -o testssl - 2>/dev/null && rm testssl && echo true||echo false)
|
OPENSSL_CHECK = $(shell echo "\#include <openssl/ssl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l crypto -l ssl -o testssl - 2>/dev/null && rm testssl && echo true||echo false)
|
||||||
ifeq ($(OPENSSL_CHECK), true)
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
LIBS += -l crypto -l ssl
|
LIBS += -l crypto -l ssl
|
||||||
@ -39,7 +39,10 @@ PAM_CHECK = $(shell echo "\#include <security/pam_appl.h>\\n int main(){return 0
|
|||||||
ifeq ($(PAM_CHECK), true)
|
ifeq ($(PAM_CHECK), true)
|
||||||
PLUGINS += PamAuth
|
PLUGINS += PamAuth
|
||||||
endif
|
endif
|
||||||
|
PCRE_CHECK = $(shell echo "\#include <pcre.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l pcre -o testpcre - 2>/dev/null && rm testpcre && echo true||echo false)
|
||||||
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
|
PLUGINS += PCREPlugin
|
||||||
|
endif
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
|
|||||||
@ -35,12 +35,16 @@ MAKEFILE = Makefile.Linux
|
|||||||
#LIBS = -lcrypto -lssl -ldl
|
#LIBS = -lcrypto -lssl -ldl
|
||||||
LIBS ?= -ldl
|
LIBS ?= -ldl
|
||||||
#PLUGINS = SSLPlugin StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin PamAuth
|
#PLUGINS = SSLPlugin StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin PamAuth
|
||||||
PLUGINS ?= StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin
|
PLUGINS ?= StringsPlugin TrafficPlugin TransparentPlugin
|
||||||
OPENSSL_CHECK = $(shell echo "#include <openssl/ssl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l crypto -l ssl -o testssl - 2>/dev/null && rm testssl && echo true||echo false)
|
OPENSSL_CHECK = $(shell echo "#include <openssl/ssl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l crypto -l ssl -o testssl - 2>/dev/null && rm testssl && echo true||echo false)
|
||||||
ifeq ($(OPENSSL_CHECK), true)
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
LIBS += -l crypto -l ssl
|
LIBS += -l crypto -l ssl
|
||||||
PLUGINS += SSLPlugin
|
PLUGINS += SSLPlugin
|
||||||
endif
|
endif
|
||||||
|
PCRE_CHECK = $(shell echo "#include <pcre.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l pcre -o testpcre - 2>/dev/null && rm testpcre && echo true||echo false)
|
||||||
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
|
PLUGINS += PCREPlugin
|
||||||
|
endif
|
||||||
PAM_CHECK = $(shell echo "#include <security/pam_appl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l pam -o testpam - 2>/dev/null && rm testpam && echo true||echo false)
|
PAM_CHECK = $(shell echo "#include <security/pam_appl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l pam -o testpam - 2>/dev/null && rm testpam && echo true||echo false)
|
||||||
ifeq ($(PAM_CHECK), true)
|
ifeq ($(PAM_CHECK), true)
|
||||||
PLUGINS += PamAuth
|
PLUGINS += PamAuth
|
||||||
|
|||||||
@ -29,7 +29,7 @@ AFTERCLEAN = (find . -type f -name "*.o" -delete && find src/ -type f -name "Mak
|
|||||||
TYPECOMMAND = cat
|
TYPECOMMAND = cat
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.Solaris
|
MAKEFILE = Makefile.Solaris
|
||||||
PLUGINS = StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin
|
PLUGINS = StringsPlugin TrafficPlugin
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ AFTERCLEAN = (find . -type f -name "*.o" -delete && find src/ -type f -name "Mak
|
|||||||
TYPECOMMAND = cat
|
TYPECOMMAND = cat
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.Solaris-gcc
|
MAKEFILE = Makefile.Solaris-gcc
|
||||||
PLUGINS = StringsPlugin TrafficPlugin PCREPlugin
|
PLUGINS = StringsPlugin TrafficPlugin
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
|
|||||||
@ -1,33 +0,0 @@
|
|||||||
#
|
|
||||||
# 3 proxy Makefile for Intel C compiler for Windows (for both make and nmake)
|
|
||||||
#
|
|
||||||
# You can try to remove -DWITH_STD_MALLOC to CFLAGS to use optimized malloc
|
|
||||||
# libraries
|
|
||||||
#
|
|
||||||
# Add /DSAFESQL to CFLAGS if you are using poorely written/tested ODBC driver
|
|
||||||
|
|
||||||
|
|
||||||
BUILDDIR = ../bin/
|
|
||||||
CC = icl
|
|
||||||
CFLAGS = /nologo /MD /W3 /G6 /GX /O2 /D "WITH_STD_MALLOC" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /Fp"proxy.pch" /YX /FD /c
|
|
||||||
COUT = /Fo
|
|
||||||
LN = xilink
|
|
||||||
LDFLAGS = /nologo /subsystem:console /incremental:no /machine:I386
|
|
||||||
LIBS = ws2_32.lib advapi32.lib odbc32.lib user32.lib
|
|
||||||
DLFLAGS = /DLL
|
|
||||||
DLSUFFICS = .dll
|
|
||||||
LNOUT = /out:
|
|
||||||
EXESUFFICS = .exe
|
|
||||||
OBJSUFFICS = .obj
|
|
||||||
DEFINEOPTION = /D
|
|
||||||
COMPFILES = *.pch *.idb
|
|
||||||
REMOVECOMMAND = del 2>NUL
|
|
||||||
TYPECOMMAND = type
|
|
||||||
COMPATLIBS =
|
|
||||||
MAKEFILE = Makefile.intl
|
|
||||||
PLUGINS = WindowsAuthentication TrafficPlugin PCREPlugin
|
|
||||||
|
|
||||||
include Makefile.inc
|
|
||||||
|
|
||||||
allplugins:
|
|
||||||
for /D %%i in ($(PLUGINS)) do (copy Makefile Makefile.var plugins\%%i && cd plugins\%%i && nmake && del *.obj *.idb &&cd ..\..)
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
#
|
|
||||||
# 3 proxy Makefile for GCC/windows
|
|
||||||
#
|
|
||||||
# You can try to remove -DWITH_STD_MALLOC to CFLAGS to use optimized malloc
|
|
||||||
# libraries
|
|
||||||
#
|
|
||||||
# remove -DNOODBC from CFLAGS and add -lodbc to LDFLAGS to compile with ODBC
|
|
||||||
# library support
|
|
||||||
|
|
||||||
|
|
||||||
BUILDDIR = ../bin/
|
|
||||||
CC = clang
|
|
||||||
CFLAGS = -O2 -fno-strict-aliasing -c -pthread -DWITH_STD_MALLOC -DWITH_WSAPOLL
|
|
||||||
COUT = -o
|
|
||||||
LN = $(CC)
|
|
||||||
LDFLAGS = -O2 -fno-strict-aliasing -s
|
|
||||||
DLFLAGS = -shared
|
|
||||||
DLSUFFICS = .dll
|
|
||||||
LIBS = -lws2_32 -lodbc32 -ladvapi32 -luser32 -lcrypto -lssl
|
|
||||||
LIBSPREFIX = -l
|
|
||||||
LIBSSUFFIX =
|
|
||||||
LNOUT = -o
|
|
||||||
EXESUFFICS = .exe
|
|
||||||
OBJSUFFICS = .o
|
|
||||||
DEFINEOPTION = -D
|
|
||||||
COMPFILES = *.tmp
|
|
||||||
REMOVECOMMAND = rm -f
|
|
||||||
AFTERCLEAN = find src/ -type f -name "*.o" -delete && find src/ -type f -name "Makefile.var" -delete && find bin/ -type f -executable -delete
|
|
||||||
TYPECOMMAND = cat
|
|
||||||
COMPATLIBS =
|
|
||||||
MAKEFILE = Makefile.llvm
|
|
||||||
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin SSLPlugin
|
|
||||||
VERFILE := 3proxy.res $(VERFILE)
|
|
||||||
VERSION := $(VERSION)
|
|
||||||
VERSIONDEP := 3proxy.res $(VERSIONDEP)
|
|
||||||
BUILDDATE := $(BUILDDATE)
|
|
||||||
AFTERCLEAN = (find . -type f -name "*.o" -delete && find . -type f -name "*.res" -delete && find src/ -type f -name "Makefile.var" -delete && find bin/ -type f -executable -delete) || true
|
|
||||||
|
|
||||||
include Makefile.inc
|
|
||||||
|
|
||||||
3proxy.res:
|
|
||||||
llvm-rc 3proxy.rc
|
|
||||||
|
|
||||||
allplugins:
|
|
||||||
@list='$(PLUGINS)'; for p in $$list; do cp Makefile Makefile.var plugins/$$p; cd plugins/$$p ; make ; cd ../.. ; done
|
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ REMOVECOMMAND = del
|
|||||||
TYPECOMMAND = type
|
TYPECOMMAND = type
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.msvc
|
MAKEFILE = Makefile.msvc
|
||||||
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin FilePlugin SSLPlugin
|
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin FilePlugin SSLPlugin
|
||||||
VERFILE = 3proxy.res $(VERFILE)
|
VERFILE = 3proxy.res $(VERFILE)
|
||||||
VERSION = $(VERSION)
|
VERSION = $(VERSION)
|
||||||
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
||||||
|
|||||||
@ -31,7 +31,7 @@ TYPECOMMAND = type
|
|||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
VERFILE = 3proxy.res $(VERFILE)
|
VERFILE = 3proxy.res $(VERFILE)
|
||||||
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
||||||
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin FilePlugin SSLPlugin
|
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin FilePlugin SSLPlugin
|
||||||
AFTERCLEAN = del src\*.res
|
AFTERCLEAN = del src\*.res
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|||||||
@ -28,7 +28,7 @@ REMOVECOMMAND = del 2>NUL >NUL
|
|||||||
TYPECOMMAND = type
|
TYPECOMMAND = type
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.msvcARM64
|
MAKEFILE = Makefile.msvcARM64
|
||||||
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin FilePlugin SSLPlugin
|
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin FilePlugin SSLPlugin
|
||||||
VERFILE = 3proxy.res $(VERFILE)
|
VERFILE = 3proxy.res $(VERFILE)
|
||||||
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
||||||
AFTERCLEAN = del src\*.res
|
AFTERCLEAN = del src\*.res
|
||||||
|
|||||||
@ -25,7 +25,7 @@ REMOVECOMMAND = del 2>NUL >NUL
|
|||||||
TYPECOMMAND = type
|
TYPECOMMAND = type
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.msvc
|
MAKEFILE = Makefile.msvc
|
||||||
PLUGINS = WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin
|
PLUGINS = WindowsAuthentication TrafficPlugin StringsPlugin
|
||||||
|
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|||||||
@ -10,11 +10,11 @@
|
|||||||
BUILDDIR = ../bin/
|
BUILDDIR = ../bin/
|
||||||
CC = mips-openwrt-linux-gcc
|
CC = mips-openwrt-linux-gcc
|
||||||
|
|
||||||
CFLAGS = -g -O2 -fno-strict-aliasing -c -pthread -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_NETFILTER
|
CFLAGS ?= -g -O2 -fno-strict-aliasing -c -pthread -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_NETFILTER
|
||||||
COUT = -o
|
COUT = -o
|
||||||
LN = $(CC)
|
LN = $(CC)
|
||||||
DCFLAGS = -fPIC
|
DCFLAGS = -fPIC
|
||||||
LDFLAGS = -O2 -fno-strict-aliasing -pthread -s
|
LDFLAGS ?= -O2 -fno-strict-aliasing -pthread -s
|
||||||
DLFLAGS = -shared
|
DLFLAGS = -shared
|
||||||
DLSUFFICS = .ld.so
|
DLSUFFICS = .ld.so
|
||||||
# -lpthreads may be reuqired on some platforms instead of -pthreads
|
# -lpthreads may be reuqired on some platforms instead of -pthreads
|
||||||
@ -33,9 +33,22 @@ MAKEFILE = Makefile.openwrt-mips
|
|||||||
# PamAuth requires libpam, you may require pam-devel package to be installed
|
# PamAuth requires libpam, you may require pam-devel package to be installed
|
||||||
# SSLPlugin requires -lcrypto -lssl
|
# SSLPlugin requires -lcrypto -lssl
|
||||||
#LIBS = -lcrypto -lssl -ldl
|
#LIBS = -lcrypto -lssl -ldl
|
||||||
LIBS = -ldl
|
LIBS ?= -ldl
|
||||||
#PLUGINS = SSLPlugin StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin PamAuth
|
#PLUGINS = SSLPlugin StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin PamAuth
|
||||||
PLUGINS = StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin
|
PLUGINS ?= StringsPlugin TrafficPlugin TransparentPlugin
|
||||||
|
OPENSSL_CHECK = $(shell echo "#include <openssl/ssl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l crypto -l ssl -o testssl - 2>/dev/null && rm testssl && echo true||echo false)
|
||||||
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
|
LIBS += -l crypto -l ssl
|
||||||
|
PLUGINS += SSLPlugin
|
||||||
|
endif
|
||||||
|
PCRE_CHECK = $(shell echo "#include <pcre.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l pcre -o testpcre - 2>/dev/null && rm testpcre && echo true||echo false)
|
||||||
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
|
PLUGINS += PCREPlugin
|
||||||
|
endif
|
||||||
|
PAM_CHECK = $(shell echo "#include <security/pam_appl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l pam -o testpam - 2>/dev/null && rm testpam && echo true||echo false)
|
||||||
|
ifeq ($(PAM_CHECK), true)
|
||||||
|
PLUGINS += PamAuth
|
||||||
|
endif
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
|
|||||||
@ -33,7 +33,7 @@ AFTERCLEAN = (find . -type f -name "*.o" -delete && find src/ -type f -name "Mak
|
|||||||
TYPECOMMAND = cat
|
TYPECOMMAND = cat
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.unix
|
MAKEFILE = Makefile.unix
|
||||||
PLUGINS ?= StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin
|
PLUGINS ?= StringsPlugin TrafficPlugin TransparentPlugin
|
||||||
OPENSSL_CHECK = $(shell echo "\#include <openssl/ssl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l crypto -l ssl -o testssl - 2>/dev/null && rm testssl && echo true||echo false)
|
OPENSSL_CHECK = $(shell echo "\#include <openssl/ssl.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l crypto -l ssl -o testssl - 2>/dev/null && rm testssl && echo true||echo false)
|
||||||
ifeq ($(OPENSSL_CHECK), true)
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
LIBS += -l crypto -l ssl
|
LIBS += -l crypto -l ssl
|
||||||
@ -43,7 +43,10 @@ PAM_CHECK = $(shell echo "\#include <security/pam_appl.h>\\n int main(){return 0
|
|||||||
ifeq ($(PAM_CHECK), true)
|
ifeq ($(PAM_CHECK), true)
|
||||||
PLUGINS += PamAuth
|
PLUGINS += PamAuth
|
||||||
endif
|
endif
|
||||||
|
PCRE_CHECK = $(shell echo "\#include <pcre.h>\\n int main(){return 0;}" | cc -x c $(CFLAGS) $(LDFLAGS) -l pcre -o testpcre - 2>/dev/null && rm testpcre && echo true||echo false)
|
||||||
|
ifeq ($(OPENSSL_CHECK), true)
|
||||||
|
PLUGINS += PCREPlugin
|
||||||
|
endif
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
|
|||||||
@ -28,7 +28,7 @@ REMOVECOMMAND = del 2>NUL >NUL
|
|||||||
TYPECOMMAND = type
|
TYPECOMMAND = type
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.watcom
|
MAKEFILE = Makefile.watcom
|
||||||
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin
|
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin
|
||||||
VERFILE = $(VERFILE)
|
VERFILE = $(VERFILE)
|
||||||
VERSION = $(VERSION)
|
VERSION = $(VERSION)
|
||||||
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
VERSIONDEP = 3proxy.res $(VERSIONDEP)
|
||||||
|
|||||||
@ -28,7 +28,7 @@ REMOVECOMMAND = rm -f
|
|||||||
TYPECOMMAND = cat
|
TYPECOMMAND = cat
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.win
|
MAKEFILE = Makefile.win
|
||||||
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin PCREPlugin SSLPLugin
|
PLUGINS = utf8tocp1251 WindowsAuthentication TrafficPlugin StringsPlugin SSLPLugin
|
||||||
VERFILE := 3proxyres.o $(VERFILE)
|
VERFILE := 3proxyres.o $(VERFILE)
|
||||||
VERSION := $(VERSION)
|
VERSION := $(VERSION)
|
||||||
VERSIONDEP := 3proxyres.o $(VERSIONDEP)
|
VERSIONDEP := 3proxyres.o $(VERSIONDEP)
|
||||||
|
|||||||
@ -26,7 +26,7 @@ REMOVECOMMAND = rm -f
|
|||||||
TYPECOMMAND = more
|
TYPECOMMAND = more
|
||||||
COMPATLIBS =
|
COMPATLIBS =
|
||||||
MAKEFILE = Makefile.winCE
|
MAKEFILE = Makefile.winCE
|
||||||
PLUGINS = TrafficPlugin StringsPlugin PCREPlugin
|
PLUGINS = TrafficPlugin StringsPlugin
|
||||||
|
|
||||||
include Makefile.inc
|
include Makefile.inc
|
||||||
|
|
||||||
|
|||||||
@ -1,62 +1,4 @@
|
|||||||
all: $(BUILDDIR)PCREPlugin$(DLSUFFICS)
|
all: $(BUILDDIR)PCREPlugin$(DLSUFFICS)
|
||||||
|
|
||||||
pcre_maketables$(OBJSUFFICS): pcre_maketables.c
|
$(BUILDDIR)PCREPlugin$(DLSUFFICS): pcre_plugin$(OBJSUFFICS)
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_maketables.c
|
$(LN) $(LNOUT)../../$(BUILDDIR)PCREPlugin$(DLSUFFICS) $(LDFLAGS) $(DLFLAGS) pcre_plugin$(OBJSUFFICS) $(LIBSPREFIX)pcre$(LIBSSUFFIX)
|
||||||
|
|
||||||
pcre_table$(OBJSUFFICS): pcre_table.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_table.c
|
|
||||||
|
|
||||||
pcre_ucd$(OBJSUFFICS): pcre_ucd.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_ucd.c
|
|
||||||
|
|
||||||
pcre_compile$(OBJSUFFICS): pcre_compile.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_compile.c
|
|
||||||
|
|
||||||
pcre_config$(OBJSUFFICS): pcre_config.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_config.c
|
|
||||||
|
|
||||||
pcre_dfa_exec$(OBJSUFFICS): pcre_dfa_exec.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_dfa_exec.c
|
|
||||||
|
|
||||||
pcre_exec$(OBJSUFFICS): pcre_exec.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_exec.c
|
|
||||||
|
|
||||||
pcre_fullinfo$(OBJSUFFICS): pcre_fullinfo.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_fullinfo.c
|
|
||||||
|
|
||||||
pcre_get$(OBJSUFFICS): pcre_get.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_get.c
|
|
||||||
|
|
||||||
pcre_globals$(OBJSUFFICS): pcre_globals.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_globals.c
|
|
||||||
|
|
||||||
pcre_newline$(OBJSUFFICS): pcre_newline.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_newline.c
|
|
||||||
|
|
||||||
pcre_ord2utf8$(OBJSUFFICS): pcre_ord2utf8.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_ord2utf8.c
|
|
||||||
|
|
||||||
pcre_refcount$(OBJSUFFICS): pcre_refcount.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_refcount.c
|
|
||||||
|
|
||||||
pcre_study$(OBJSUFFICS): pcre_study.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_study.c
|
|
||||||
|
|
||||||
pcre_tables$(OBJSUFFICS): pcre_tables.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_tables.c
|
|
||||||
|
|
||||||
pcre_valid_utf8$(OBJSUFFICS): pcre_valid_utf8.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_valid_utf8.c
|
|
||||||
|
|
||||||
pcre_version$(OBJSUFFICS): pcre_version.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_version.c
|
|
||||||
|
|
||||||
pcre_xclass$(OBJSUFFICS): pcre_xclass.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_xclass.c
|
|
||||||
|
|
||||||
pcre_plugin$(OBJSUFFICS): pcre_plugin.c
|
|
||||||
$(CC) $(DCFLAGS) $(CFLAGS) pcre_plugin.c
|
|
||||||
|
|
||||||
$(BUILDDIR)PCREPlugin$(DLSUFFICS): pcre_compile$(OBJSUFFICS) pcre_config$(OBJSUFFICS) pcre_dfa_exec$(OBJSUFFICS) pcre_exec$(OBJSUFFICS) pcre_fullinfo$(OBJSUFFICS) pcre_get$(OBJSUFFICS) pcre_globals$(OBJSUFFICS) pcre_newline$(OBJSUFFICS) pcre_ord2utf8$(OBJSUFFICS) pcre_refcount$(OBJSUFFICS) pcre_study$(OBJSUFFICS) pcre_tables$(OBJSUFFICS) pcre_valid_utf8$(OBJSUFFICS) pcre_version$(OBJSUFFICS) pcre_xclass$(OBJSUFFICS) pcre_plugin$(OBJSUFFICS) pcre_maketables$(OBJSUFFICS) pcre_ucd$(OBJSUFFICS) pcre_table$(OBJSUFFICS)
|
|
||||||
$(LN) $(LNOUT)../../$(BUILDDIR)PCREPlugin$(DLSUFFICS) $(LDFLAGS) $(DLFLAGS) pcre_compile$(OBJSUFFICS) pcre_config$(OBJSUFFICS) pcre_dfa_exec$(OBJSUFFICS) pcre_exec$(OBJSUFFICS) pcre_fullinfo$(OBJSUFFICS) pcre_get$(OBJSUFFICS) pcre_globals$(OBJSUFFICS) pcre_newline$(OBJSUFFICS) pcre_ord2utf8$(OBJSUFFICS) pcre_refcount$(OBJSUFFICS) pcre_study$(OBJSUFFICS) pcre_tables$(OBJSUFFICS) pcre_valid_utf8$(OBJSUFFICS) pcre_version$(OBJSUFFICS) pcre_xclass$(OBJSUFFICS) pcre_plugin$(OBJSUFFICS) pcre_maketables$(OBJSUFFICS) pcre_ucd$(OBJSUFFICS) pcre_table$(OBJSUFFICS)
|
|
||||||
|
|
||||||
|
|||||||
@ -1,352 +0,0 @@
|
|||||||
#define PCRE_STATIC
|
|
||||||
/* config.h. Generated from config.h.in by configure. */
|
|
||||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
|
||||||
|
|
||||||
/* PCRE is written in Standard C, but there are a few non-standard things it
|
|
||||||
can cope with, allowing it to run on SunOS4 and other "close to standard"
|
|
||||||
systems.
|
|
||||||
|
|
||||||
In environments that support the GNU autotools, config.h.in is converted into
|
|
||||||
config.h by the "configure" script. In environments that use CMake,
|
|
||||||
config-cmake.in is converted into config.h. If you are going to build PCRE "by
|
|
||||||
hand" without using "configure" or CMake, you should copy the distributed
|
|
||||||
config.h.generic to config.h, and edit the macro definitions to be the way you
|
|
||||||
need them. You must then add -DHAVE_CONFIG_H to all of your compile commands,
|
|
||||||
so that config.h is included at the start of every source.
|
|
||||||
|
|
||||||
Alternatively, you can avoid editing by using -D on the compiler command line
|
|
||||||
to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H,
|
|
||||||
but if you do, default values will be taken from config.h for non-boolean
|
|
||||||
macros that are not defined on the command line.
|
|
||||||
|
|
||||||
Boolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE8 should either be defined
|
|
||||||
(conventionally to 1) for TRUE, and not defined at all for FALSE. All such
|
|
||||||
macros are listed as a commented #undef in config.h.generic. Macros such as
|
|
||||||
MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are
|
|
||||||
surrounded by #ifndef/#endif lines so that the value can be overridden by -D.
|
|
||||||
|
|
||||||
PCRE uses memmove() if HAVE_MEMMOVE is defined; otherwise it uses bcopy() if
|
|
||||||
HAVE_BCOPY is defined. If your system has neither bcopy() nor memmove(), make
|
|
||||||
sure both macros are undefined; an emulation function will then be used. */
|
|
||||||
|
|
||||||
/* By default, the \R escape sequence matches any Unicode line ending
|
|
||||||
character or sequence of characters. If BSR_ANYCRLF is defined (to any
|
|
||||||
value), this is changed so that backslash-R matches only CR, LF, or CRLF.
|
|
||||||
The build-time default can be overridden by the user of PCRE at runtime. */
|
|
||||||
/* #undef BSR_ANYCRLF */
|
|
||||||
|
|
||||||
/* If you are compiling for a system that uses EBCDIC instead of ASCII
|
|
||||||
character codes, define this macro to any value. You must also edit the
|
|
||||||
NEWLINE macro below to set a suitable EBCDIC newline, commonly 21 (0x15).
|
|
||||||
On systems that can use "configure" or CMake to set EBCDIC, NEWLINE is
|
|
||||||
automatically adjusted. When EBCDIC is set, PCRE assumes that all input
|
|
||||||
strings are in EBCDIC. If you do not define this macro, PCRE will assume
|
|
||||||
input strings are ASCII or UTF-8/16/32 Unicode. It is not possible to build
|
|
||||||
a version of PCRE that supports both EBCDIC and UTF-8/16/32. */
|
|
||||||
/* #undef EBCDIC */
|
|
||||||
|
|
||||||
/* In an EBCDIC environment, define this macro to any value to arrange for the
|
|
||||||
NL character to be 0x25 instead of the default 0x15. NL plays the role that
|
|
||||||
LF does in an ASCII/Unicode environment. The value must also be set in the
|
|
||||||
NEWLINE macro below. On systems that can use "configure" or CMake to set
|
|
||||||
EBCDIC_NL25, the adjustment of NEWLINE is automatic. */
|
|
||||||
/* #undef EBCDIC_NL25 */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `bcopy' function. */
|
|
||||||
/* #undef HAVE_BCOPY */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <bits/type_traits.h> header file. */
|
|
||||||
/* #undef HAVE_BITS_TYPE_TRAITS_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <bzlib.h> header file. */
|
|
||||||
/* #undef HAVE_BZLIB_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <dirent.h> header file. */
|
|
||||||
/* #undef HAVE_DIRENT_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
|
||||||
/* #undef HAVE_DLFCN_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <editline/readline.h> header file. */
|
|
||||||
/* #undef HAVE_EDITLINE_READLINE_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <edit/readline/readline.h> header file. */
|
|
||||||
/* #undef HAVE_EDIT_READLINE_READLINE_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
|
||||||
/* #undef HAVE_INTTYPES_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <limits.h> header file. */
|
|
||||||
/* #undef HAVE_LIMITS_H */
|
|
||||||
|
|
||||||
/* Define to 1 if the system has the type `long long'. */
|
|
||||||
/* #undef HAVE_LONG_LONG */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `memmove' function. */
|
|
||||||
/* #undef HAVE_MEMMOVE */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
|
||||||
/* #undef HAVE_MEMORY_H */
|
|
||||||
|
|
||||||
/* Define if you have POSIX threads libraries and header files. */
|
|
||||||
/* #undef HAVE_PTHREAD */
|
|
||||||
|
|
||||||
/* Have PTHREAD_PRIO_INHERIT. */
|
|
||||||
/* #undef HAVE_PTHREAD_PRIO_INHERIT */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <readline/history.h> header file. */
|
|
||||||
/* #undef HAVE_READLINE_HISTORY_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <readline/readline.h> header file. */
|
|
||||||
/* #undef HAVE_READLINE_READLINE_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
|
||||||
/* #undef HAVE_STDINT_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
|
||||||
/* #undef HAVE_STDLIB_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `strerror' function. */
|
|
||||||
/* #undef HAVE_STRERROR */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <string> header file. */
|
|
||||||
/* #undef HAVE_STRING */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <strings.h> header file. */
|
|
||||||
/* #undef HAVE_STRINGS_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <string.h> header file. */
|
|
||||||
/* #undef HAVE_STRING_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have `strtoimax'. */
|
|
||||||
/* #undef HAVE_STRTOIMAX */
|
|
||||||
|
|
||||||
/* Define to 1 if you have `strtoll'. */
|
|
||||||
/* #undef HAVE_STRTOLL */
|
|
||||||
|
|
||||||
/* Define to 1 if you have `strtoq'. */
|
|
||||||
/* #undef HAVE_STRTOQ */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
||||||
/* #undef HAVE_SYS_STAT_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
||||||
/* #undef HAVE_SYS_TYPES_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <type_traits.h> header file. */
|
|
||||||
/* #undef HAVE_TYPE_TRAITS_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
|
||||||
/* #undef HAVE_UNISTD_H */
|
|
||||||
|
|
||||||
/* Define to 1 if the system has the type `unsigned long long'. */
|
|
||||||
/* #undef HAVE_UNSIGNED_LONG_LONG */
|
|
||||||
|
|
||||||
/* Define to 1 if the compiler supports simple visibility declarations. */
|
|
||||||
/* #undef HAVE_VISIBILITY */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <windows.h> header file. */
|
|
||||||
/* #undef HAVE_WINDOWS_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <zlib.h> header file. */
|
|
||||||
/* #undef HAVE_ZLIB_H */
|
|
||||||
|
|
||||||
/* Define to 1 if you have `_strtoi64'. */
|
|
||||||
/* #undef HAVE__STRTOI64 */
|
|
||||||
|
|
||||||
/* The value of LINK_SIZE determines the number of bytes used to store links
|
|
||||||
as offsets within the compiled regex. The default is 2, which allows for
|
|
||||||
compiled patterns up to 64K long. This covers the vast majority of cases.
|
|
||||||
However, PCRE can also be compiled to use 3 or 4 bytes instead. This allows
|
|
||||||
for longer patterns in extreme cases. */
|
|
||||||
#ifndef LINK_SIZE
|
|
||||||
#define LINK_SIZE 2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
|
||||||
/* This is ignored unless you are using libtool. */
|
|
||||||
#ifndef LT_OBJDIR
|
|
||||||
#define LT_OBJDIR ".libs/"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The value of MATCH_LIMIT determines the default number of times the
|
|
||||||
internal match() function can be called during a single execution of
|
|
||||||
pcre_exec(). There is a runtime interface for setting a different limit.
|
|
||||||
The limit exists in order to catch runaway regular expressions that take
|
|
||||||
for ever to determine that they do not match. The default is set very large
|
|
||||||
so that it does not accidentally catch legitimate cases. */
|
|
||||||
#ifndef MATCH_LIMIT
|
|
||||||
#define MATCH_LIMIT 10000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The above limit applies to all calls of match(), whether or not they
|
|
||||||
increase the recursion depth. In some environments it is desirable to limit
|
|
||||||
the depth of recursive calls of match() more strictly, in order to restrict
|
|
||||||
the maximum amount of stack (or heap, if NO_RECURSE is defined) that is
|
|
||||||
used. The value of MATCH_LIMIT_RECURSION applies only to recursive calls of
|
|
||||||
match(). To have any useful effect, it must be less than the value of
|
|
||||||
MATCH_LIMIT. The default is to use the same value as MATCH_LIMIT. There is
|
|
||||||
a runtime method for setting a different limit. */
|
|
||||||
#ifndef MATCH_LIMIT_RECURSION
|
|
||||||
#define MATCH_LIMIT_RECURSION MATCH_LIMIT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This limit is parameterized just in case anybody ever wants to change it.
|
|
||||||
Care must be taken if it is increased, because it guards against integer
|
|
||||||
overflow caused by enormously large patterns. */
|
|
||||||
#ifndef MAX_NAME_COUNT
|
|
||||||
#define MAX_NAME_COUNT 10000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This limit is parameterized just in case anybody ever wants to change it.
|
|
||||||
Care must be taken if it is increased, because it guards against integer
|
|
||||||
overflow caused by enormously large patterns. */
|
|
||||||
#ifndef MAX_NAME_SIZE
|
|
||||||
#define MAX_NAME_SIZE 32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The value of NEWLINE determines the default newline character sequence.
|
|
||||||
PCRE client programs can override this by selecting other values at run
|
|
||||||
time. In ASCII environments, the value can be 10 (LF), 13 (CR), or 3338
|
|
||||||
(CRLF); in EBCDIC environments the value can be 21 or 37 (LF), 13 (CR), or
|
|
||||||
3349 or 3365 (CRLF) because there are two alternative codepoints (0x15 and
|
|
||||||
0x25) that are used as the NL line terminator that is equivalent to ASCII
|
|
||||||
LF. In both ASCII and EBCDIC environments the value can also be -1 (ANY),
|
|
||||||
or -2 (ANYCRLF). */
|
|
||||||
#ifndef NEWLINE
|
|
||||||
#define NEWLINE 10
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* PCRE uses recursive function calls to handle backtracking while matching.
|
|
||||||
This can sometimes be a problem on systems that have stacks of limited
|
|
||||||
size. Define NO_RECURSE to any value to get a version that doesn't use
|
|
||||||
recursion in the match() function; instead it creates its own stack by
|
|
||||||
steam using pcre_recurse_malloc() to obtain memory from the heap. For more
|
|
||||||
detail, see the comments and other stuff just above the match() function.
|
|
||||||
*/
|
|
||||||
/* #undef NO_RECURSE */
|
|
||||||
|
|
||||||
/* Name of package */
|
|
||||||
#define PACKAGE "pcre"
|
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
|
||||||
#define PACKAGE_BUGREPORT ""
|
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
|
||||||
#define PACKAGE_NAME "PCRE"
|
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
|
||||||
#define PACKAGE_STRING "PCRE 8.39"
|
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
|
||||||
#define PACKAGE_TARNAME "pcre"
|
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#define PACKAGE_URL ""
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
|
||||||
#define PACKAGE_VERSION "8.39"
|
|
||||||
|
|
||||||
/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested
|
|
||||||
parentheses (of any kind) in a pattern. This limits the amount of system
|
|
||||||
stack that is used while compiling a pattern. */
|
|
||||||
#ifndef PARENS_NEST_LIMIT
|
|
||||||
#define PARENS_NEST_LIMIT 250
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The value of PCREGREP_BUFSIZE determines the size of buffer used by
|
|
||||||
pcregrep to hold parts of the file it is searching. This is also the
|
|
||||||
minimum value. The actual amount of memory used by pcregrep is three times
|
|
||||||
this number, because it allows for the buffering of "before" and "after"
|
|
||||||
lines. */
|
|
||||||
#ifndef PCREGREP_BUFSIZE
|
|
||||||
#define PCREGREP_BUFSIZE 20480
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If you are compiling for a system other than a Unix-like system or
|
|
||||||
Win32, and it needs some magic to be inserted before the definition
|
|
||||||
of a function that is exported by the library, define this macro to
|
|
||||||
contain the relevant magic. If you do not define this macro, a suitable
|
|
||||||
__declspec value is used for Windows systems; in other environments
|
|
||||||
"extern" is used for a C compiler and "extern C" for a C++ compiler.
|
|
||||||
This macro apears at the start of every exported function that is part
|
|
||||||
of the external API. It does not appear on functions that are "external"
|
|
||||||
in the C sense, but which are internal to the library. */
|
|
||||||
/* #undef PCRE_EXP_DEFN */
|
|
||||||
|
|
||||||
/* Define to any value if linking statically (TODO: make nice with Libtool) */
|
|
||||||
/* #undef PCRE_STATIC */
|
|
||||||
|
|
||||||
/* When calling PCRE via the POSIX interface, additional working storage is
|
|
||||||
required for holding the pointers to capturing substrings because PCRE
|
|
||||||
requires three integers per substring, whereas the POSIX interface provides
|
|
||||||
only two. If the number of expected substrings is small, the wrapper
|
|
||||||
function uses space on the stack, because this is faster than using
|
|
||||||
malloc() for each call. The threshold above which the stack is no longer
|
|
||||||
used is defined by POSIX_MALLOC_THRESHOLD. */
|
|
||||||
#ifndef POSIX_MALLOC_THRESHOLD
|
|
||||||
#define POSIX_MALLOC_THRESHOLD 10
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to necessary symbol if this constant uses a non-standard name on
|
|
||||||
your system. */
|
|
||||||
/* #undef PTHREAD_CREATE_JOINABLE */
|
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
|
||||||
/* #undef STDC_HEADERS */
|
|
||||||
|
|
||||||
/* Define to any value to enable support for Just-In-Time compiling. */
|
|
||||||
/* #undef SUPPORT_JIT */
|
|
||||||
|
|
||||||
/* Define to any value to allow pcregrep to be linked with libbz2, so that it
|
|
||||||
is able to handle .bz2 files. */
|
|
||||||
/* #undef SUPPORT_LIBBZ2 */
|
|
||||||
|
|
||||||
/* Define to any value to allow pcretest to be linked with libedit. */
|
|
||||||
/* #undef SUPPORT_LIBEDIT */
|
|
||||||
|
|
||||||
/* Define to any value to allow pcretest to be linked with libreadline. */
|
|
||||||
/* #undef SUPPORT_LIBREADLINE */
|
|
||||||
|
|
||||||
/* Define to any value to allow pcregrep to be linked with libz, so that it is
|
|
||||||
able to handle .gz files. */
|
|
||||||
/* #undef SUPPORT_LIBZ */
|
|
||||||
|
|
||||||
/* Define to any value to enable the 16 bit PCRE library. */
|
|
||||||
/* #undef SUPPORT_PCRE16 */
|
|
||||||
|
|
||||||
/* Define to any value to enable the 32 bit PCRE library. */
|
|
||||||
/* #undef SUPPORT_PCRE32 */
|
|
||||||
|
|
||||||
/* Define to any value to enable the 8 bit PCRE library. */
|
|
||||||
/* #undef SUPPORT_PCRE8 */
|
|
||||||
|
|
||||||
/* Define to any value to enable JIT support in pcregrep. */
|
|
||||||
/* #undef SUPPORT_PCREGREP_JIT */
|
|
||||||
|
|
||||||
/* Define to any value to enable support for Unicode properties. */
|
|
||||||
/* #undef SUPPORT_UCP */
|
|
||||||
|
|
||||||
/* Define to any value to enable support for the UTF-8/16/32 Unicode encoding.
|
|
||||||
This will work even in an EBCDIC environment, but it is incompatible with
|
|
||||||
the EBCDIC macro. That is, PCRE can support *either* EBCDIC code *or*
|
|
||||||
ASCII/UTF-8/16/32, but not both at once. */
|
|
||||||
/* #undef SUPPORT_UTF */
|
|
||||||
|
|
||||||
/* Define to any value for valgrind support to find invalid memory reads. */
|
|
||||||
/* #undef SUPPORT_VALGRIND */
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#ifndef VERSION
|
|
||||||
#define VERSION "8.39"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to empty if `const' does not conform to ANSI C. */
|
|
||||||
/* #undef const */
|
|
||||||
|
|
||||||
/* Define to the type of a signed integer type of width exactly 64 bits if
|
|
||||||
such a type exists and the standard includes do not define it. */
|
|
||||||
/* #undef int64_t */
|
|
||||||
|
|
||||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
|
||||||
/* #undef size_t */
|
|
||||||
@ -1,677 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This is the public header file for the PCRE library, to be #included by
|
|
||||||
applications that call the PCRE functions.
|
|
||||||
|
|
||||||
Copyright (c) 1997-2014 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _PCRE_H
|
|
||||||
#define _PCRE_H
|
|
||||||
|
|
||||||
/* The current PCRE version information. */
|
|
||||||
|
|
||||||
#define PCRE_MAJOR 8
|
|
||||||
#define PCRE_MINOR 39
|
|
||||||
#define PCRE_PRERELEASE
|
|
||||||
#define PCRE_DATE 2016-06-14
|
|
||||||
|
|
||||||
/* When an application links to a PCRE DLL in Windows, the symbols that are
|
|
||||||
imported have to be identified as such. When building PCRE, the appropriate
|
|
||||||
export setting is defined in pcre_internal.h, which includes this file. So we
|
|
||||||
don't change existing definitions of PCRE_EXP_DECL and PCRECPP_EXP_DECL. */
|
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(PCRE_STATIC)
|
|
||||||
# ifndef PCRE_EXP_DECL
|
|
||||||
# define PCRE_EXP_DECL extern __declspec(dllimport)
|
|
||||||
# endif
|
|
||||||
# ifdef __cplusplus
|
|
||||||
# ifndef PCRECPP_EXP_DECL
|
|
||||||
# define PCRECPP_EXP_DECL extern __declspec(dllimport)
|
|
||||||
# endif
|
|
||||||
# ifndef PCRECPP_EXP_DEFN
|
|
||||||
# define PCRECPP_EXP_DEFN __declspec(dllimport)
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* By default, we use the standard "extern" declarations. */
|
|
||||||
|
|
||||||
#ifndef PCRE_EXP_DECL
|
|
||||||
# ifdef __cplusplus
|
|
||||||
# define PCRE_EXP_DECL extern "C"
|
|
||||||
# else
|
|
||||||
# define PCRE_EXP_DECL extern
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
# ifndef PCRECPP_EXP_DECL
|
|
||||||
# define PCRECPP_EXP_DECL extern
|
|
||||||
# endif
|
|
||||||
# ifndef PCRECPP_EXP_DEFN
|
|
||||||
# define PCRECPP_EXP_DEFN
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Have to include stdlib.h in order to ensure that size_t is defined;
|
|
||||||
it is needed here for malloc. */
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
/* Allow for C++ users */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Public options. Some are compile-time only, some are run-time only, and some
|
|
||||||
are both. Most of the compile-time options are saved with the compiled regex so
|
|
||||||
that they can be inspected during studying (and therefore JIT compiling). Note
|
|
||||||
that pcre_study() has its own set of options. Originally, all the options
|
|
||||||
defined here used distinct bits. However, almost all the bits in a 32-bit word
|
|
||||||
are now used, so in order to conserve them, option bits that were previously
|
|
||||||
only recognized at matching time (i.e. by pcre_exec() or pcre_dfa_exec()) may
|
|
||||||
also be used for compile-time options that affect only compiling and are not
|
|
||||||
relevant for studying or JIT compiling.
|
|
||||||
|
|
||||||
Some options for pcre_compile() change its behaviour but do not affect the
|
|
||||||
behaviour of the execution functions. Other options are passed through to the
|
|
||||||
execution functions and affect their behaviour, with or without affecting the
|
|
||||||
behaviour of pcre_compile().
|
|
||||||
|
|
||||||
Options that can be passed to pcre_compile() are tagged Cx below, with these
|
|
||||||
variants:
|
|
||||||
|
|
||||||
C1 Affects compile only
|
|
||||||
C2 Does not affect compile; affects exec, dfa_exec
|
|
||||||
C3 Affects compile, exec, dfa_exec
|
|
||||||
C4 Affects compile, exec, dfa_exec, study
|
|
||||||
C5 Affects compile, exec, study
|
|
||||||
|
|
||||||
Options that can be set for pcre_exec() and/or pcre_dfa_exec() are flagged with
|
|
||||||
E and D, respectively. They take precedence over C3, C4, and C5 settings passed
|
|
||||||
from pcre_compile(). Those that are compatible with JIT execution are flagged
|
|
||||||
with J. */
|
|
||||||
|
|
||||||
#define PCRE_CASELESS 0x00000001 /* C1 */
|
|
||||||
#define PCRE_MULTILINE 0x00000002 /* C1 */
|
|
||||||
#define PCRE_DOTALL 0x00000004 /* C1 */
|
|
||||||
#define PCRE_EXTENDED 0x00000008 /* C1 */
|
|
||||||
#define PCRE_ANCHORED 0x00000010 /* C4 E D */
|
|
||||||
#define PCRE_DOLLAR_ENDONLY 0x00000020 /* C2 */
|
|
||||||
#define PCRE_EXTRA 0x00000040 /* C1 */
|
|
||||||
#define PCRE_NOTBOL 0x00000080 /* E D J */
|
|
||||||
#define PCRE_NOTEOL 0x00000100 /* E D J */
|
|
||||||
#define PCRE_UNGREEDY 0x00000200 /* C1 */
|
|
||||||
#define PCRE_NOTEMPTY 0x00000400 /* E D J */
|
|
||||||
#define PCRE_UTF8 0x00000800 /* C4 ) */
|
|
||||||
#define PCRE_UTF16 0x00000800 /* C4 ) Synonyms */
|
|
||||||
#define PCRE_UTF32 0x00000800 /* C4 ) */
|
|
||||||
#define PCRE_NO_AUTO_CAPTURE 0x00001000 /* C1 */
|
|
||||||
#define PCRE_NO_UTF8_CHECK 0x00002000 /* C1 E D J ) */
|
|
||||||
#define PCRE_NO_UTF16_CHECK 0x00002000 /* C1 E D J ) Synonyms */
|
|
||||||
#define PCRE_NO_UTF32_CHECK 0x00002000 /* C1 E D J ) */
|
|
||||||
#define PCRE_AUTO_CALLOUT 0x00004000 /* C1 */
|
|
||||||
#define PCRE_PARTIAL_SOFT 0x00008000 /* E D J ) Synonyms */
|
|
||||||
#define PCRE_PARTIAL 0x00008000 /* E D J ) */
|
|
||||||
|
|
||||||
/* This pair use the same bit. */
|
|
||||||
#define PCRE_NEVER_UTF 0x00010000 /* C1 ) Overlaid */
|
|
||||||
#define PCRE_DFA_SHORTEST 0x00010000 /* D ) Overlaid */
|
|
||||||
|
|
||||||
/* This pair use the same bit. */
|
|
||||||
#define PCRE_NO_AUTO_POSSESS 0x00020000 /* C1 ) Overlaid */
|
|
||||||
#define PCRE_DFA_RESTART 0x00020000 /* D ) Overlaid */
|
|
||||||
|
|
||||||
#define PCRE_FIRSTLINE 0x00040000 /* C3 */
|
|
||||||
#define PCRE_DUPNAMES 0x00080000 /* C1 */
|
|
||||||
#define PCRE_NEWLINE_CR 0x00100000 /* C3 E D */
|
|
||||||
#define PCRE_NEWLINE_LF 0x00200000 /* C3 E D */
|
|
||||||
#define PCRE_NEWLINE_CRLF 0x00300000 /* C3 E D */
|
|
||||||
#define PCRE_NEWLINE_ANY 0x00400000 /* C3 E D */
|
|
||||||
#define PCRE_NEWLINE_ANYCRLF 0x00500000 /* C3 E D */
|
|
||||||
#define PCRE_BSR_ANYCRLF 0x00800000 /* C3 E D */
|
|
||||||
#define PCRE_BSR_UNICODE 0x01000000 /* C3 E D */
|
|
||||||
#define PCRE_JAVASCRIPT_COMPAT 0x02000000 /* C5 */
|
|
||||||
#define PCRE_NO_START_OPTIMIZE 0x04000000 /* C2 E D ) Synonyms */
|
|
||||||
#define PCRE_NO_START_OPTIMISE 0x04000000 /* C2 E D ) */
|
|
||||||
#define PCRE_PARTIAL_HARD 0x08000000 /* E D J */
|
|
||||||
#define PCRE_NOTEMPTY_ATSTART 0x10000000 /* E D J */
|
|
||||||
#define PCRE_UCP 0x20000000 /* C3 */
|
|
||||||
|
|
||||||
/* Exec-time and get/set-time error codes */
|
|
||||||
|
|
||||||
#define PCRE_ERROR_NOMATCH (-1)
|
|
||||||
#define PCRE_ERROR_NULL (-2)
|
|
||||||
#define PCRE_ERROR_BADOPTION (-3)
|
|
||||||
#define PCRE_ERROR_BADMAGIC (-4)
|
|
||||||
#define PCRE_ERROR_UNKNOWN_OPCODE (-5)
|
|
||||||
#define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */
|
|
||||||
#define PCRE_ERROR_NOMEMORY (-6)
|
|
||||||
#define PCRE_ERROR_NOSUBSTRING (-7)
|
|
||||||
#define PCRE_ERROR_MATCHLIMIT (-8)
|
|
||||||
#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */
|
|
||||||
#define PCRE_ERROR_BADUTF8 (-10) /* Same for 8/16/32 */
|
|
||||||
#define PCRE_ERROR_BADUTF16 (-10) /* Same for 8/16/32 */
|
|
||||||
#define PCRE_ERROR_BADUTF32 (-10) /* Same for 8/16/32 */
|
|
||||||
#define PCRE_ERROR_BADUTF8_OFFSET (-11) /* Same for 8/16 */
|
|
||||||
#define PCRE_ERROR_BADUTF16_OFFSET (-11) /* Same for 8/16 */
|
|
||||||
#define PCRE_ERROR_PARTIAL (-12)
|
|
||||||
#define PCRE_ERROR_BADPARTIAL (-13)
|
|
||||||
#define PCRE_ERROR_INTERNAL (-14)
|
|
||||||
#define PCRE_ERROR_BADCOUNT (-15)
|
|
||||||
#define PCRE_ERROR_DFA_UITEM (-16)
|
|
||||||
#define PCRE_ERROR_DFA_UCOND (-17)
|
|
||||||
#define PCRE_ERROR_DFA_UMLIMIT (-18)
|
|
||||||
#define PCRE_ERROR_DFA_WSSIZE (-19)
|
|
||||||
#define PCRE_ERROR_DFA_RECURSE (-20)
|
|
||||||
#define PCRE_ERROR_RECURSIONLIMIT (-21)
|
|
||||||
#define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */
|
|
||||||
#define PCRE_ERROR_BADNEWLINE (-23)
|
|
||||||
#define PCRE_ERROR_BADOFFSET (-24)
|
|
||||||
#define PCRE_ERROR_SHORTUTF8 (-25)
|
|
||||||
#define PCRE_ERROR_SHORTUTF16 (-25) /* Same for 8/16 */
|
|
||||||
#define PCRE_ERROR_RECURSELOOP (-26)
|
|
||||||
#define PCRE_ERROR_JIT_STACKLIMIT (-27)
|
|
||||||
#define PCRE_ERROR_BADMODE (-28)
|
|
||||||
#define PCRE_ERROR_BADENDIANNESS (-29)
|
|
||||||
#define PCRE_ERROR_DFA_BADRESTART (-30)
|
|
||||||
#define PCRE_ERROR_JIT_BADOPTION (-31)
|
|
||||||
#define PCRE_ERROR_BADLENGTH (-32)
|
|
||||||
#define PCRE_ERROR_UNSET (-33)
|
|
||||||
|
|
||||||
/* Specific error codes for UTF-8 validity checks */
|
|
||||||
|
|
||||||
#define PCRE_UTF8_ERR0 0
|
|
||||||
#define PCRE_UTF8_ERR1 1
|
|
||||||
#define PCRE_UTF8_ERR2 2
|
|
||||||
#define PCRE_UTF8_ERR3 3
|
|
||||||
#define PCRE_UTF8_ERR4 4
|
|
||||||
#define PCRE_UTF8_ERR5 5
|
|
||||||
#define PCRE_UTF8_ERR6 6
|
|
||||||
#define PCRE_UTF8_ERR7 7
|
|
||||||
#define PCRE_UTF8_ERR8 8
|
|
||||||
#define PCRE_UTF8_ERR9 9
|
|
||||||
#define PCRE_UTF8_ERR10 10
|
|
||||||
#define PCRE_UTF8_ERR11 11
|
|
||||||
#define PCRE_UTF8_ERR12 12
|
|
||||||
#define PCRE_UTF8_ERR13 13
|
|
||||||
#define PCRE_UTF8_ERR14 14
|
|
||||||
#define PCRE_UTF8_ERR15 15
|
|
||||||
#define PCRE_UTF8_ERR16 16
|
|
||||||
#define PCRE_UTF8_ERR17 17
|
|
||||||
#define PCRE_UTF8_ERR18 18
|
|
||||||
#define PCRE_UTF8_ERR19 19
|
|
||||||
#define PCRE_UTF8_ERR20 20
|
|
||||||
#define PCRE_UTF8_ERR21 21
|
|
||||||
#define PCRE_UTF8_ERR22 22 /* Unused (was non-character) */
|
|
||||||
|
|
||||||
/* Specific error codes for UTF-16 validity checks */
|
|
||||||
|
|
||||||
#define PCRE_UTF16_ERR0 0
|
|
||||||
#define PCRE_UTF16_ERR1 1
|
|
||||||
#define PCRE_UTF16_ERR2 2
|
|
||||||
#define PCRE_UTF16_ERR3 3
|
|
||||||
#define PCRE_UTF16_ERR4 4 /* Unused (was non-character) */
|
|
||||||
|
|
||||||
/* Specific error codes for UTF-32 validity checks */
|
|
||||||
|
|
||||||
#define PCRE_UTF32_ERR0 0
|
|
||||||
#define PCRE_UTF32_ERR1 1
|
|
||||||
#define PCRE_UTF32_ERR2 2 /* Unused (was non-character) */
|
|
||||||
#define PCRE_UTF32_ERR3 3
|
|
||||||
|
|
||||||
/* Request types for pcre_fullinfo() */
|
|
||||||
|
|
||||||
#define PCRE_INFO_OPTIONS 0
|
|
||||||
#define PCRE_INFO_SIZE 1
|
|
||||||
#define PCRE_INFO_CAPTURECOUNT 2
|
|
||||||
#define PCRE_INFO_BACKREFMAX 3
|
|
||||||
#define PCRE_INFO_FIRSTBYTE 4
|
|
||||||
#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */
|
|
||||||
#define PCRE_INFO_FIRSTTABLE 5
|
|
||||||
#define PCRE_INFO_LASTLITERAL 6
|
|
||||||
#define PCRE_INFO_NAMEENTRYSIZE 7
|
|
||||||
#define PCRE_INFO_NAMECOUNT 8
|
|
||||||
#define PCRE_INFO_NAMETABLE 9
|
|
||||||
#define PCRE_INFO_STUDYSIZE 10
|
|
||||||
#define PCRE_INFO_DEFAULT_TABLES 11
|
|
||||||
#define PCRE_INFO_OKPARTIAL 12
|
|
||||||
#define PCRE_INFO_JCHANGED 13
|
|
||||||
#define PCRE_INFO_HASCRORLF 14
|
|
||||||
#define PCRE_INFO_MINLENGTH 15
|
|
||||||
#define PCRE_INFO_JIT 16
|
|
||||||
#define PCRE_INFO_JITSIZE 17
|
|
||||||
#define PCRE_INFO_MAXLOOKBEHIND 18
|
|
||||||
#define PCRE_INFO_FIRSTCHARACTER 19
|
|
||||||
#define PCRE_INFO_FIRSTCHARACTERFLAGS 20
|
|
||||||
#define PCRE_INFO_REQUIREDCHAR 21
|
|
||||||
#define PCRE_INFO_REQUIREDCHARFLAGS 22
|
|
||||||
#define PCRE_INFO_MATCHLIMIT 23
|
|
||||||
#define PCRE_INFO_RECURSIONLIMIT 24
|
|
||||||
#define PCRE_INFO_MATCH_EMPTY 25
|
|
||||||
|
|
||||||
/* Request types for pcre_config(). Do not re-arrange, in order to remain
|
|
||||||
compatible. */
|
|
||||||
|
|
||||||
#define PCRE_CONFIG_UTF8 0
|
|
||||||
#define PCRE_CONFIG_NEWLINE 1
|
|
||||||
#define PCRE_CONFIG_LINK_SIZE 2
|
|
||||||
#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3
|
|
||||||
#define PCRE_CONFIG_MATCH_LIMIT 4
|
|
||||||
#define PCRE_CONFIG_STACKRECURSE 5
|
|
||||||
#define PCRE_CONFIG_UNICODE_PROPERTIES 6
|
|
||||||
#define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7
|
|
||||||
#define PCRE_CONFIG_BSR 8
|
|
||||||
#define PCRE_CONFIG_JIT 9
|
|
||||||
#define PCRE_CONFIG_UTF16 10
|
|
||||||
#define PCRE_CONFIG_JITTARGET 11
|
|
||||||
#define PCRE_CONFIG_UTF32 12
|
|
||||||
#define PCRE_CONFIG_PARENS_LIMIT 13
|
|
||||||
|
|
||||||
/* Request types for pcre_study(). Do not re-arrange, in order to remain
|
|
||||||
compatible. */
|
|
||||||
|
|
||||||
#define PCRE_STUDY_JIT_COMPILE 0x0001
|
|
||||||
#define PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE 0x0002
|
|
||||||
#define PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE 0x0004
|
|
||||||
#define PCRE_STUDY_EXTRA_NEEDED 0x0008
|
|
||||||
|
|
||||||
/* Bit flags for the pcre[16|32]_extra structure. Do not re-arrange or redefine
|
|
||||||
these bits, just add new ones on the end, in order to remain compatible. */
|
|
||||||
|
|
||||||
#define PCRE_EXTRA_STUDY_DATA 0x0001
|
|
||||||
#define PCRE_EXTRA_MATCH_LIMIT 0x0002
|
|
||||||
#define PCRE_EXTRA_CALLOUT_DATA 0x0004
|
|
||||||
#define PCRE_EXTRA_TABLES 0x0008
|
|
||||||
#define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010
|
|
||||||
#define PCRE_EXTRA_MARK 0x0020
|
|
||||||
#define PCRE_EXTRA_EXECUTABLE_JIT 0x0040
|
|
||||||
|
|
||||||
/* Types */
|
|
||||||
|
|
||||||
struct real_pcre; /* declaration; the definition is private */
|
|
||||||
typedef struct real_pcre pcre;
|
|
||||||
|
|
||||||
struct real_pcre16; /* declaration; the definition is private */
|
|
||||||
typedef struct real_pcre16 pcre16;
|
|
||||||
|
|
||||||
struct real_pcre32; /* declaration; the definition is private */
|
|
||||||
typedef struct real_pcre32 pcre32;
|
|
||||||
|
|
||||||
struct real_pcre_jit_stack; /* declaration; the definition is private */
|
|
||||||
typedef struct real_pcre_jit_stack pcre_jit_stack;
|
|
||||||
|
|
||||||
struct real_pcre16_jit_stack; /* declaration; the definition is private */
|
|
||||||
typedef struct real_pcre16_jit_stack pcre16_jit_stack;
|
|
||||||
|
|
||||||
struct real_pcre32_jit_stack; /* declaration; the definition is private */
|
|
||||||
typedef struct real_pcre32_jit_stack pcre32_jit_stack;
|
|
||||||
|
|
||||||
/* If PCRE is compiled with 16 bit character support, PCRE_UCHAR16 must contain
|
|
||||||
a 16 bit wide signed data type. Otherwise it can be a dummy data type since
|
|
||||||
pcre16 functions are not implemented. There is a check for this in pcre_internal.h. */
|
|
||||||
#ifndef PCRE_UCHAR16
|
|
||||||
#define PCRE_UCHAR16 unsigned short
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PCRE_SPTR16
|
|
||||||
#define PCRE_SPTR16 const PCRE_UCHAR16 *
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If PCRE is compiled with 32 bit character support, PCRE_UCHAR32 must contain
|
|
||||||
a 32 bit wide signed data type. Otherwise it can be a dummy data type since
|
|
||||||
pcre32 functions are not implemented. There is a check for this in pcre_internal.h. */
|
|
||||||
#ifndef PCRE_UCHAR32
|
|
||||||
#define PCRE_UCHAR32 unsigned int
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef PCRE_SPTR32
|
|
||||||
#define PCRE_SPTR32 const PCRE_UCHAR32 *
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* When PCRE is compiled as a C++ library, the subject pointer type can be
|
|
||||||
replaced with a custom type. For conventional use, the public interface is a
|
|
||||||
const char *. */
|
|
||||||
|
|
||||||
#ifndef PCRE_SPTR
|
|
||||||
#define PCRE_SPTR const char *
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The structure for passing additional data to pcre_exec(). This is defined in
|
|
||||||
such as way as to be extensible. Always add new fields at the end, in order to
|
|
||||||
remain compatible. */
|
|
||||||
|
|
||||||
typedef struct pcre_extra {
|
|
||||||
unsigned long int flags; /* Bits for which fields are set */
|
|
||||||
void *study_data; /* Opaque data from pcre_study() */
|
|
||||||
unsigned long int match_limit; /* Maximum number of calls to match() */
|
|
||||||
void *callout_data; /* Data passed back in callouts */
|
|
||||||
const unsigned char *tables; /* Pointer to character tables */
|
|
||||||
unsigned long int match_limit_recursion; /* Max recursive calls to match() */
|
|
||||||
unsigned char **mark; /* For passing back a mark pointer */
|
|
||||||
void *executable_jit; /* Contains a pointer to a compiled jit code */
|
|
||||||
} pcre_extra;
|
|
||||||
|
|
||||||
/* Same structure as above, but with 16 bit char pointers. */
|
|
||||||
|
|
||||||
typedef struct pcre16_extra {
|
|
||||||
unsigned long int flags; /* Bits for which fields are set */
|
|
||||||
void *study_data; /* Opaque data from pcre_study() */
|
|
||||||
unsigned long int match_limit; /* Maximum number of calls to match() */
|
|
||||||
void *callout_data; /* Data passed back in callouts */
|
|
||||||
const unsigned char *tables; /* Pointer to character tables */
|
|
||||||
unsigned long int match_limit_recursion; /* Max recursive calls to match() */
|
|
||||||
PCRE_UCHAR16 **mark; /* For passing back a mark pointer */
|
|
||||||
void *executable_jit; /* Contains a pointer to a compiled jit code */
|
|
||||||
} pcre16_extra;
|
|
||||||
|
|
||||||
/* Same structure as above, but with 32 bit char pointers. */
|
|
||||||
|
|
||||||
typedef struct pcre32_extra {
|
|
||||||
unsigned long int flags; /* Bits for which fields are set */
|
|
||||||
void *study_data; /* Opaque data from pcre_study() */
|
|
||||||
unsigned long int match_limit; /* Maximum number of calls to match() */
|
|
||||||
void *callout_data; /* Data passed back in callouts */
|
|
||||||
const unsigned char *tables; /* Pointer to character tables */
|
|
||||||
unsigned long int match_limit_recursion; /* Max recursive calls to match() */
|
|
||||||
PCRE_UCHAR32 **mark; /* For passing back a mark pointer */
|
|
||||||
void *executable_jit; /* Contains a pointer to a compiled jit code */
|
|
||||||
} pcre32_extra;
|
|
||||||
|
|
||||||
/* The structure for passing out data via the pcre_callout_function. We use a
|
|
||||||
structure so that new fields can be added on the end in future versions,
|
|
||||||
without changing the API of the function, thereby allowing old clients to work
|
|
||||||
without modification. */
|
|
||||||
|
|
||||||
typedef struct pcre_callout_block {
|
|
||||||
int version; /* Identifies version of block */
|
|
||||||
/* ------------------------ Version 0 ------------------------------- */
|
|
||||||
int callout_number; /* Number compiled into pattern */
|
|
||||||
int *offset_vector; /* The offset vector */
|
|
||||||
PCRE_SPTR subject; /* The subject being matched */
|
|
||||||
int subject_length; /* The length of the subject */
|
|
||||||
int start_match; /* Offset to start of this match attempt */
|
|
||||||
int current_position; /* Where we currently are in the subject */
|
|
||||||
int capture_top; /* Max current capture */
|
|
||||||
int capture_last; /* Most recently closed capture */
|
|
||||||
void *callout_data; /* Data passed in with the call */
|
|
||||||
/* ------------------- Added for Version 1 -------------------------- */
|
|
||||||
int pattern_position; /* Offset to next item in the pattern */
|
|
||||||
int next_item_length; /* Length of next item in the pattern */
|
|
||||||
/* ------------------- Added for Version 2 -------------------------- */
|
|
||||||
const unsigned char *mark; /* Pointer to current mark or NULL */
|
|
||||||
/* ------------------------------------------------------------------ */
|
|
||||||
} pcre_callout_block;
|
|
||||||
|
|
||||||
/* Same structure as above, but with 16 bit char pointers. */
|
|
||||||
|
|
||||||
typedef struct pcre16_callout_block {
|
|
||||||
int version; /* Identifies version of block */
|
|
||||||
/* ------------------------ Version 0 ------------------------------- */
|
|
||||||
int callout_number; /* Number compiled into pattern */
|
|
||||||
int *offset_vector; /* The offset vector */
|
|
||||||
PCRE_SPTR16 subject; /* The subject being matched */
|
|
||||||
int subject_length; /* The length of the subject */
|
|
||||||
int start_match; /* Offset to start of this match attempt */
|
|
||||||
int current_position; /* Where we currently are in the subject */
|
|
||||||
int capture_top; /* Max current capture */
|
|
||||||
int capture_last; /* Most recently closed capture */
|
|
||||||
void *callout_data; /* Data passed in with the call */
|
|
||||||
/* ------------------- Added for Version 1 -------------------------- */
|
|
||||||
int pattern_position; /* Offset to next item in the pattern */
|
|
||||||
int next_item_length; /* Length of next item in the pattern */
|
|
||||||
/* ------------------- Added for Version 2 -------------------------- */
|
|
||||||
const PCRE_UCHAR16 *mark; /* Pointer to current mark or NULL */
|
|
||||||
/* ------------------------------------------------------------------ */
|
|
||||||
} pcre16_callout_block;
|
|
||||||
|
|
||||||
/* Same structure as above, but with 32 bit char pointers. */
|
|
||||||
|
|
||||||
typedef struct pcre32_callout_block {
|
|
||||||
int version; /* Identifies version of block */
|
|
||||||
/* ------------------------ Version 0 ------------------------------- */
|
|
||||||
int callout_number; /* Number compiled into pattern */
|
|
||||||
int *offset_vector; /* The offset vector */
|
|
||||||
PCRE_SPTR32 subject; /* The subject being matched */
|
|
||||||
int subject_length; /* The length of the subject */
|
|
||||||
int start_match; /* Offset to start of this match attempt */
|
|
||||||
int current_position; /* Where we currently are in the subject */
|
|
||||||
int capture_top; /* Max current capture */
|
|
||||||
int capture_last; /* Most recently closed capture */
|
|
||||||
void *callout_data; /* Data passed in with the call */
|
|
||||||
/* ------------------- Added for Version 1 -------------------------- */
|
|
||||||
int pattern_position; /* Offset to next item in the pattern */
|
|
||||||
int next_item_length; /* Length of next item in the pattern */
|
|
||||||
/* ------------------- Added for Version 2 -------------------------- */
|
|
||||||
const PCRE_UCHAR32 *mark; /* Pointer to current mark or NULL */
|
|
||||||
/* ------------------------------------------------------------------ */
|
|
||||||
} pcre32_callout_block;
|
|
||||||
|
|
||||||
/* Indirection for store get and free functions. These can be set to
|
|
||||||
alternative malloc/free functions if required. Special ones are used in the
|
|
||||||
non-recursive case for "frames". There is also an optional callout function
|
|
||||||
that is triggered by the (?) regex item. For Virtual Pascal, these definitions
|
|
||||||
have to take another form. */
|
|
||||||
|
|
||||||
#ifndef VPCOMPAT
|
|
||||||
PCRE_EXP_DECL void *(*pcre_malloc)(size_t);
|
|
||||||
PCRE_EXP_DECL void (*pcre_free)(void *);
|
|
||||||
PCRE_EXP_DECL void *(*pcre_stack_malloc)(size_t);
|
|
||||||
PCRE_EXP_DECL void (*pcre_stack_free)(void *);
|
|
||||||
PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *);
|
|
||||||
PCRE_EXP_DECL int (*pcre_stack_guard)(void);
|
|
||||||
|
|
||||||
PCRE_EXP_DECL void *(*pcre16_malloc)(size_t);
|
|
||||||
PCRE_EXP_DECL void (*pcre16_free)(void *);
|
|
||||||
PCRE_EXP_DECL void *(*pcre16_stack_malloc)(size_t);
|
|
||||||
PCRE_EXP_DECL void (*pcre16_stack_free)(void *);
|
|
||||||
PCRE_EXP_DECL int (*pcre16_callout)(pcre16_callout_block *);
|
|
||||||
PCRE_EXP_DECL int (*pcre16_stack_guard)(void);
|
|
||||||
|
|
||||||
PCRE_EXP_DECL void *(*pcre32_malloc)(size_t);
|
|
||||||
PCRE_EXP_DECL void (*pcre32_free)(void *);
|
|
||||||
PCRE_EXP_DECL void *(*pcre32_stack_malloc)(size_t);
|
|
||||||
PCRE_EXP_DECL void (*pcre32_stack_free)(void *);
|
|
||||||
PCRE_EXP_DECL int (*pcre32_callout)(pcre32_callout_block *);
|
|
||||||
PCRE_EXP_DECL int (*pcre32_stack_guard)(void);
|
|
||||||
#else /* VPCOMPAT */
|
|
||||||
PCRE_EXP_DECL void *pcre_malloc(size_t);
|
|
||||||
PCRE_EXP_DECL void pcre_free(void *);
|
|
||||||
PCRE_EXP_DECL void *pcre_stack_malloc(size_t);
|
|
||||||
PCRE_EXP_DECL void pcre_stack_free(void *);
|
|
||||||
PCRE_EXP_DECL int pcre_callout(pcre_callout_block *);
|
|
||||||
PCRE_EXP_DECL int pcre_stack_guard(void);
|
|
||||||
|
|
||||||
PCRE_EXP_DECL void *pcre16_malloc(size_t);
|
|
||||||
PCRE_EXP_DECL void pcre16_free(void *);
|
|
||||||
PCRE_EXP_DECL void *pcre16_stack_malloc(size_t);
|
|
||||||
PCRE_EXP_DECL void pcre16_stack_free(void *);
|
|
||||||
PCRE_EXP_DECL int pcre16_callout(pcre16_callout_block *);
|
|
||||||
PCRE_EXP_DECL int pcre16_stack_guard(void);
|
|
||||||
|
|
||||||
PCRE_EXP_DECL void *pcre32_malloc(size_t);
|
|
||||||
PCRE_EXP_DECL void pcre32_free(void *);
|
|
||||||
PCRE_EXP_DECL void *pcre32_stack_malloc(size_t);
|
|
||||||
PCRE_EXP_DECL void pcre32_stack_free(void *);
|
|
||||||
PCRE_EXP_DECL int pcre32_callout(pcre32_callout_block *);
|
|
||||||
PCRE_EXP_DECL int pcre32_stack_guard(void);
|
|
||||||
#endif /* VPCOMPAT */
|
|
||||||
|
|
||||||
/* User defined callback which provides a stack just before the match starts. */
|
|
||||||
|
|
||||||
typedef pcre_jit_stack *(*pcre_jit_callback)(void *);
|
|
||||||
typedef pcre16_jit_stack *(*pcre16_jit_callback)(void *);
|
|
||||||
typedef pcre32_jit_stack *(*pcre32_jit_callback)(void *);
|
|
||||||
|
|
||||||
/* Exported PCRE functions */
|
|
||||||
|
|
||||||
PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *,
|
|
||||||
const unsigned char *);
|
|
||||||
PCRE_EXP_DECL pcre16 *pcre16_compile(PCRE_SPTR16, int, const char **, int *,
|
|
||||||
const unsigned char *);
|
|
||||||
PCRE_EXP_DECL pcre32 *pcre32_compile(PCRE_SPTR32, int, const char **, int *,
|
|
||||||
const unsigned char *);
|
|
||||||
PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **,
|
|
||||||
int *, const unsigned char *);
|
|
||||||
PCRE_EXP_DECL pcre16 *pcre16_compile2(PCRE_SPTR16, int, int *, const char **,
|
|
||||||
int *, const unsigned char *);
|
|
||||||
PCRE_EXP_DECL pcre32 *pcre32_compile2(PCRE_SPTR32, int, int *, const char **,
|
|
||||||
int *, const unsigned char *);
|
|
||||||
PCRE_EXP_DECL int pcre_config(int, void *);
|
|
||||||
PCRE_EXP_DECL int pcre16_config(int, void *);
|
|
||||||
PCRE_EXP_DECL int pcre32_config(int, void *);
|
|
||||||
PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *,
|
|
||||||
int *, int, const char *, char *, int);
|
|
||||||
PCRE_EXP_DECL int pcre16_copy_named_substring(const pcre16 *, PCRE_SPTR16,
|
|
||||||
int *, int, PCRE_SPTR16, PCRE_UCHAR16 *, int);
|
|
||||||
PCRE_EXP_DECL int pcre32_copy_named_substring(const pcre32 *, PCRE_SPTR32,
|
|
||||||
int *, int, PCRE_SPTR32, PCRE_UCHAR32 *, int);
|
|
||||||
PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int,
|
|
||||||
char *, int);
|
|
||||||
PCRE_EXP_DECL int pcre16_copy_substring(PCRE_SPTR16, int *, int, int,
|
|
||||||
PCRE_UCHAR16 *, int);
|
|
||||||
PCRE_EXP_DECL int pcre32_copy_substring(PCRE_SPTR32, int *, int, int,
|
|
||||||
PCRE_UCHAR32 *, int);
|
|
||||||
PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *,
|
|
||||||
const char *, int, int, int, int *, int , int *, int);
|
|
||||||
PCRE_EXP_DECL int pcre16_dfa_exec(const pcre16 *, const pcre16_extra *,
|
|
||||||
PCRE_SPTR16, int, int, int, int *, int , int *, int);
|
|
||||||
PCRE_EXP_DECL int pcre32_dfa_exec(const pcre32 *, const pcre32_extra *,
|
|
||||||
PCRE_SPTR32, int, int, int, int *, int , int *, int);
|
|
||||||
PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR,
|
|
||||||
int, int, int, int *, int);
|
|
||||||
PCRE_EXP_DECL int pcre16_exec(const pcre16 *, const pcre16_extra *,
|
|
||||||
PCRE_SPTR16, int, int, int, int *, int);
|
|
||||||
PCRE_EXP_DECL int pcre32_exec(const pcre32 *, const pcre32_extra *,
|
|
||||||
PCRE_SPTR32, int, int, int, int *, int);
|
|
||||||
PCRE_EXP_DECL int pcre_jit_exec(const pcre *, const pcre_extra *,
|
|
||||||
PCRE_SPTR, int, int, int, int *, int,
|
|
||||||
pcre_jit_stack *);
|
|
||||||
PCRE_EXP_DECL int pcre16_jit_exec(const pcre16 *, const pcre16_extra *,
|
|
||||||
PCRE_SPTR16, int, int, int, int *, int,
|
|
||||||
pcre16_jit_stack *);
|
|
||||||
PCRE_EXP_DECL int pcre32_jit_exec(const pcre32 *, const pcre32_extra *,
|
|
||||||
PCRE_SPTR32, int, int, int, int *, int,
|
|
||||||
pcre32_jit_stack *);
|
|
||||||
PCRE_EXP_DECL void pcre_free_substring(const char *);
|
|
||||||
PCRE_EXP_DECL void pcre16_free_substring(PCRE_SPTR16);
|
|
||||||
PCRE_EXP_DECL void pcre32_free_substring(PCRE_SPTR32);
|
|
||||||
PCRE_EXP_DECL void pcre_free_substring_list(const char **);
|
|
||||||
PCRE_EXP_DECL void pcre16_free_substring_list(PCRE_SPTR16 *);
|
|
||||||
PCRE_EXP_DECL void pcre32_free_substring_list(PCRE_SPTR32 *);
|
|
||||||
PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int,
|
|
||||||
void *);
|
|
||||||
PCRE_EXP_DECL int pcre16_fullinfo(const pcre16 *, const pcre16_extra *, int,
|
|
||||||
void *);
|
|
||||||
PCRE_EXP_DECL int pcre32_fullinfo(const pcre32 *, const pcre32_extra *, int,
|
|
||||||
void *);
|
|
||||||
PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *,
|
|
||||||
int *, int, const char *, const char **);
|
|
||||||
PCRE_EXP_DECL int pcre16_get_named_substring(const pcre16 *, PCRE_SPTR16,
|
|
||||||
int *, int, PCRE_SPTR16, PCRE_SPTR16 *);
|
|
||||||
PCRE_EXP_DECL int pcre32_get_named_substring(const pcre32 *, PCRE_SPTR32,
|
|
||||||
int *, int, PCRE_SPTR32, PCRE_SPTR32 *);
|
|
||||||
PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *);
|
|
||||||
PCRE_EXP_DECL int pcre16_get_stringnumber(const pcre16 *, PCRE_SPTR16);
|
|
||||||
PCRE_EXP_DECL int pcre32_get_stringnumber(const pcre32 *, PCRE_SPTR32);
|
|
||||||
PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *,
|
|
||||||
char **, char **);
|
|
||||||
PCRE_EXP_DECL int pcre16_get_stringtable_entries(const pcre16 *, PCRE_SPTR16,
|
|
||||||
PCRE_UCHAR16 **, PCRE_UCHAR16 **);
|
|
||||||
PCRE_EXP_DECL int pcre32_get_stringtable_entries(const pcre32 *, PCRE_SPTR32,
|
|
||||||
PCRE_UCHAR32 **, PCRE_UCHAR32 **);
|
|
||||||
PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int,
|
|
||||||
const char **);
|
|
||||||
PCRE_EXP_DECL int pcre16_get_substring(PCRE_SPTR16, int *, int, int,
|
|
||||||
PCRE_SPTR16 *);
|
|
||||||
PCRE_EXP_DECL int pcre32_get_substring(PCRE_SPTR32, int *, int, int,
|
|
||||||
PCRE_SPTR32 *);
|
|
||||||
PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int,
|
|
||||||
const char ***);
|
|
||||||
PCRE_EXP_DECL int pcre16_get_substring_list(PCRE_SPTR16, int *, int,
|
|
||||||
PCRE_SPTR16 **);
|
|
||||||
PCRE_EXP_DECL int pcre32_get_substring_list(PCRE_SPTR32, int *, int,
|
|
||||||
PCRE_SPTR32 **);
|
|
||||||
PCRE_EXP_DECL const unsigned char *pcre_maketables(void);
|
|
||||||
PCRE_EXP_DECL const unsigned char *pcre16_maketables(void);
|
|
||||||
PCRE_EXP_DECL const unsigned char *pcre32_maketables(void);
|
|
||||||
PCRE_EXP_DECL int pcre_refcount(pcre *, int);
|
|
||||||
PCRE_EXP_DECL int pcre16_refcount(pcre16 *, int);
|
|
||||||
PCRE_EXP_DECL int pcre32_refcount(pcre32 *, int);
|
|
||||||
PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **);
|
|
||||||
PCRE_EXP_DECL pcre16_extra *pcre16_study(const pcre16 *, int, const char **);
|
|
||||||
PCRE_EXP_DECL pcre32_extra *pcre32_study(const pcre32 *, int, const char **);
|
|
||||||
PCRE_EXP_DECL void pcre_free_study(pcre_extra *);
|
|
||||||
PCRE_EXP_DECL void pcre16_free_study(pcre16_extra *);
|
|
||||||
PCRE_EXP_DECL void pcre32_free_study(pcre32_extra *);
|
|
||||||
PCRE_EXP_DECL const char *pcre_version(void);
|
|
||||||
PCRE_EXP_DECL const char *pcre16_version(void);
|
|
||||||
PCRE_EXP_DECL const char *pcre32_version(void);
|
|
||||||
|
|
||||||
/* Utility functions for byte order swaps. */
|
|
||||||
PCRE_EXP_DECL int pcre_pattern_to_host_byte_order(pcre *, pcre_extra *,
|
|
||||||
const unsigned char *);
|
|
||||||
PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre16 *, pcre16_extra *,
|
|
||||||
const unsigned char *);
|
|
||||||
PCRE_EXP_DECL int pcre32_pattern_to_host_byte_order(pcre32 *, pcre32_extra *,
|
|
||||||
const unsigned char *);
|
|
||||||
PCRE_EXP_DECL int pcre16_utf16_to_host_byte_order(PCRE_UCHAR16 *,
|
|
||||||
PCRE_SPTR16, int, int *, int);
|
|
||||||
PCRE_EXP_DECL int pcre32_utf32_to_host_byte_order(PCRE_UCHAR32 *,
|
|
||||||
PCRE_SPTR32, int, int *, int);
|
|
||||||
|
|
||||||
/* JIT compiler related functions. */
|
|
||||||
|
|
||||||
PCRE_EXP_DECL pcre_jit_stack *pcre_jit_stack_alloc(int, int);
|
|
||||||
PCRE_EXP_DECL pcre16_jit_stack *pcre16_jit_stack_alloc(int, int);
|
|
||||||
PCRE_EXP_DECL pcre32_jit_stack *pcre32_jit_stack_alloc(int, int);
|
|
||||||
PCRE_EXP_DECL void pcre_jit_stack_free(pcre_jit_stack *);
|
|
||||||
PCRE_EXP_DECL void pcre16_jit_stack_free(pcre16_jit_stack *);
|
|
||||||
PCRE_EXP_DECL void pcre32_jit_stack_free(pcre32_jit_stack *);
|
|
||||||
PCRE_EXP_DECL void pcre_assign_jit_stack(pcre_extra *,
|
|
||||||
pcre_jit_callback, void *);
|
|
||||||
PCRE_EXP_DECL void pcre16_assign_jit_stack(pcre16_extra *,
|
|
||||||
pcre16_jit_callback, void *);
|
|
||||||
PCRE_EXP_DECL void pcre32_assign_jit_stack(pcre32_extra *,
|
|
||||||
pcre32_jit_callback, void *);
|
|
||||||
PCRE_EXP_DECL void pcre_jit_free_unused_memory(void);
|
|
||||||
PCRE_EXP_DECL void pcre16_jit_free_unused_memory(void);
|
|
||||||
PCRE_EXP_DECL void pcre32_jit_free_unused_memory(void);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /* extern "C" */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* End of pcre.h */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,191 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2012 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains the external function pcre_config(). */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Keep the original link size. */
|
|
||||||
static int real_link_size = LINK_SIZE;
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Return info about what features are configured *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function has an extensible interface so that additional items can be
|
|
||||||
added compatibly.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
what what information is required
|
|
||||||
where where to put the information
|
|
||||||
|
|
||||||
Returns: 0 if data returned, negative on error
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_config(int what, void *where)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_config(int what, void *where)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_config(int what, void *where)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
switch (what)
|
|
||||||
{
|
|
||||||
case PCRE_CONFIG_UTF8:
|
|
||||||
#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32
|
|
||||||
*((int *)where) = 0;
|
|
||||||
return PCRE_ERROR_BADOPTION;
|
|
||||||
#else
|
|
||||||
#if defined SUPPORT_UTF
|
|
||||||
*((int *)where) = 1;
|
|
||||||
#else
|
|
||||||
*((int *)where) = 0;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case PCRE_CONFIG_UTF16:
|
|
||||||
#if defined COMPILE_PCRE8 || defined COMPILE_PCRE32
|
|
||||||
*((int *)where) = 0;
|
|
||||||
return PCRE_ERROR_BADOPTION;
|
|
||||||
#else
|
|
||||||
#if defined SUPPORT_UTF
|
|
||||||
*((int *)where) = 1;
|
|
||||||
#else
|
|
||||||
*((int *)where) = 0;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case PCRE_CONFIG_UTF32:
|
|
||||||
#if defined COMPILE_PCRE8 || defined COMPILE_PCRE16
|
|
||||||
*((int *)where) = 0;
|
|
||||||
return PCRE_ERROR_BADOPTION;
|
|
||||||
#else
|
|
||||||
#if defined SUPPORT_UTF
|
|
||||||
*((int *)where) = 1;
|
|
||||||
#else
|
|
||||||
*((int *)where) = 0;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case PCRE_CONFIG_UNICODE_PROPERTIES:
|
|
||||||
#ifdef SUPPORT_UCP
|
|
||||||
*((int *)where) = 1;
|
|
||||||
#else
|
|
||||||
*((int *)where) = 0;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_JIT:
|
|
||||||
#ifdef SUPPORT_JIT
|
|
||||||
*((int *)where) = 1;
|
|
||||||
#else
|
|
||||||
*((int *)where) = 0;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_JITTARGET:
|
|
||||||
#ifdef SUPPORT_JIT
|
|
||||||
*((const char **)where) = PRIV(jit_get_target)();
|
|
||||||
#else
|
|
||||||
*((const char **)where) = NULL;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_NEWLINE:
|
|
||||||
*((int *)where) = NEWLINE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_BSR:
|
|
||||||
#ifdef BSR_ANYCRLF
|
|
||||||
*((int *)where) = 1;
|
|
||||||
#else
|
|
||||||
*((int *)where) = 0;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_LINK_SIZE:
|
|
||||||
*((int *)where) = real_link_size;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD:
|
|
||||||
*((int *)where) = POSIX_MALLOC_THRESHOLD;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_PARENS_LIMIT:
|
|
||||||
*((unsigned long int *)where) = PARENS_NEST_LIMIT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_MATCH_LIMIT:
|
|
||||||
*((unsigned long int *)where) = MATCH_LIMIT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_MATCH_LIMIT_RECURSION:
|
|
||||||
*((unsigned long int *)where) = MATCH_LIMIT_RECURSION;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_CONFIG_STACKRECURSE:
|
|
||||||
#ifdef NO_RECURSE
|
|
||||||
*((int *)where) = 0;
|
|
||||||
#else
|
|
||||||
*((int *)where) = 1;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
default: return PCRE_ERROR_BADOPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_config.c */
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,246 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2013 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains the external function pcre_fullinfo(), which returns
|
|
||||||
information about a compiled pattern. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Return info about compiled pattern *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This is a newer "info" function which has an extensible interface so
|
|
||||||
that additional items can be added compatibly.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
argument_re points to compiled code
|
|
||||||
extra_data points extra data, or NULL
|
|
||||||
what what information is required
|
|
||||||
where where to put the information
|
|
||||||
|
|
||||||
Returns: 0 if data returned, negative on error
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data,
|
|
||||||
int what, void *where)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_fullinfo(const pcre16 *argument_re, const pcre16_extra *extra_data,
|
|
||||||
int what, void *where)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_fullinfo(const pcre32 *argument_re, const pcre32_extra *extra_data,
|
|
||||||
int what, void *where)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
const REAL_PCRE *re = (const REAL_PCRE *)argument_re;
|
|
||||||
const pcre_study_data *study = NULL;
|
|
||||||
|
|
||||||
if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
|
|
||||||
|
|
||||||
if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0)
|
|
||||||
study = (const pcre_study_data *)extra_data->study_data;
|
|
||||||
|
|
||||||
/* Check that the first field in the block is the magic number. If it is not,
|
|
||||||
return with PCRE_ERROR_BADMAGIC. However, if the magic number is equal to
|
|
||||||
REVERSED_MAGIC_NUMBER we return with PCRE_ERROR_BADENDIANNESS, which
|
|
||||||
means that the pattern is likely compiled with different endianness. */
|
|
||||||
|
|
||||||
if (re->magic_number != MAGIC_NUMBER)
|
|
||||||
return re->magic_number == REVERSED_MAGIC_NUMBER?
|
|
||||||
PCRE_ERROR_BADENDIANNESS:PCRE_ERROR_BADMAGIC;
|
|
||||||
|
|
||||||
/* Check that this pattern was compiled in the correct bit mode */
|
|
||||||
|
|
||||||
if ((re->flags & PCRE_MODE) == 0) return PCRE_ERROR_BADMODE;
|
|
||||||
|
|
||||||
switch (what)
|
|
||||||
{
|
|
||||||
case PCRE_INFO_OPTIONS:
|
|
||||||
*((unsigned long int *)where) = re->options & PUBLIC_COMPILE_OPTIONS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_SIZE:
|
|
||||||
*((size_t *)where) = re->size;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_STUDYSIZE:
|
|
||||||
*((size_t *)where) = (study == NULL)? 0 : study->size;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_JITSIZE:
|
|
||||||
#ifdef SUPPORT_JIT
|
|
||||||
*((size_t *)where) =
|
|
||||||
(extra_data != NULL &&
|
|
||||||
(extra_data->flags & PCRE_EXTRA_EXECUTABLE_JIT) != 0 &&
|
|
||||||
extra_data->executable_jit != NULL)?
|
|
||||||
PRIV(jit_get_size)(extra_data->executable_jit) : 0;
|
|
||||||
#else
|
|
||||||
*((size_t *)where) = 0;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_CAPTURECOUNT:
|
|
||||||
*((int *)where) = re->top_bracket;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_BACKREFMAX:
|
|
||||||
*((int *)where) = re->top_backref;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_FIRSTBYTE:
|
|
||||||
*((int *)where) =
|
|
||||||
((re->flags & PCRE_FIRSTSET) != 0)? (int)re->first_char :
|
|
||||||
((re->flags & PCRE_STARTLINE) != 0)? -1 : -2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_FIRSTCHARACTER:
|
|
||||||
*((pcre_uint32 *)where) =
|
|
||||||
(re->flags & PCRE_FIRSTSET) != 0 ? re->first_char : 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_FIRSTCHARACTERFLAGS:
|
|
||||||
*((int *)where) =
|
|
||||||
((re->flags & PCRE_FIRSTSET) != 0) ? 1 :
|
|
||||||
((re->flags & PCRE_STARTLINE) != 0) ? 2 : 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Make sure we pass back the pointer to the bit vector in the external
|
|
||||||
block, not the internal copy (with flipped integer fields). */
|
|
||||||
|
|
||||||
case PCRE_INFO_FIRSTTABLE:
|
|
||||||
*((const pcre_uint8 **)where) =
|
|
||||||
(study != NULL && (study->flags & PCRE_STUDY_MAPPED) != 0)?
|
|
||||||
((const pcre_study_data *)extra_data->study_data)->start_bits : NULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_MINLENGTH:
|
|
||||||
*((int *)where) =
|
|
||||||
(study != NULL && (study->flags & PCRE_STUDY_MINLEN) != 0)?
|
|
||||||
(int)(study->minlength) : -1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_JIT:
|
|
||||||
*((int *)where) = extra_data != NULL &&
|
|
||||||
(extra_data->flags & PCRE_EXTRA_EXECUTABLE_JIT) != 0 &&
|
|
||||||
extra_data->executable_jit != NULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_LASTLITERAL:
|
|
||||||
*((int *)where) =
|
|
||||||
((re->flags & PCRE_REQCHSET) != 0)? (int)re->req_char : -1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_REQUIREDCHAR:
|
|
||||||
*((pcre_uint32 *)where) =
|
|
||||||
((re->flags & PCRE_REQCHSET) != 0) ? re->req_char : 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_REQUIREDCHARFLAGS:
|
|
||||||
*((int *)where) =
|
|
||||||
((re->flags & PCRE_REQCHSET) != 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_NAMEENTRYSIZE:
|
|
||||||
*((int *)where) = re->name_entry_size;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_NAMECOUNT:
|
|
||||||
*((int *)where) = re->name_count;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_NAMETABLE:
|
|
||||||
*((const pcre_uchar **)where) = (const pcre_uchar *)re + re->name_table_offset;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_DEFAULT_TABLES:
|
|
||||||
*((const pcre_uint8 **)where) = (const pcre_uint8 *)(PRIV(default_tables));
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* From release 8.00 this will always return TRUE because NOPARTIAL is
|
|
||||||
no longer ever set (the restrictions have been removed). */
|
|
||||||
|
|
||||||
case PCRE_INFO_OKPARTIAL:
|
|
||||||
*((int *)where) = (re->flags & PCRE_NOPARTIAL) == 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_JCHANGED:
|
|
||||||
*((int *)where) = (re->flags & PCRE_JCHANGED) != 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_HASCRORLF:
|
|
||||||
*((int *)where) = (re->flags & PCRE_HASCRORLF) != 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_MAXLOOKBEHIND:
|
|
||||||
*((int *)where) = re->max_lookbehind;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_MATCHLIMIT:
|
|
||||||
if ((re->flags & PCRE_MLSET) == 0) return PCRE_ERROR_UNSET;
|
|
||||||
*((pcre_uint32 *)where) = re->limit_match;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_RECURSIONLIMIT:
|
|
||||||
if ((re->flags & PCRE_RLSET) == 0) return PCRE_ERROR_UNSET;
|
|
||||||
*((pcre_uint32 *)where) = re->limit_recursion;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PCRE_INFO_MATCH_EMPTY:
|
|
||||||
*((int *)where) = (re->flags & PCRE_MATCH_EMPTY) != 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default: return PCRE_ERROR_BADOPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_fullinfo.c */
|
|
||||||
@ -1,670 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2012 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains some convenience functions for extracting substrings
|
|
||||||
from the subject string after a regex match has succeeded. The original idea
|
|
||||||
for these functions came from Scott Wimer. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Find number for named string *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function is used by the get_first_set() function below, as well
|
|
||||||
as being generally available. It assumes that names are unique.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
code the compiled regex
|
|
||||||
stringname the name whose number is required
|
|
||||||
|
|
||||||
Returns: the number of the named parentheses, or a negative number
|
|
||||||
(PCRE_ERROR_NOSUBSTRING) if not found
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_get_stringnumber(const pcre *code, const char *stringname)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_get_stringnumber(const pcre16 *code, PCRE_SPTR16 stringname)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_get_stringnumber(const pcre32 *code, PCRE_SPTR32 stringname)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
int entrysize;
|
|
||||||
int top, bot;
|
|
||||||
pcre_uchar *nametable;
|
|
||||||
|
|
||||||
#ifdef COMPILE_PCRE8
|
|
||||||
if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
|
|
||||||
return rc;
|
|
||||||
if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
|
|
||||||
if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
|
|
||||||
return rc;
|
|
||||||
if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
|
|
||||||
return rc;
|
|
||||||
#endif
|
|
||||||
#ifdef COMPILE_PCRE16
|
|
||||||
if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
|
|
||||||
return rc;
|
|
||||||
if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
|
|
||||||
if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
|
|
||||||
return rc;
|
|
||||||
if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
|
|
||||||
return rc;
|
|
||||||
#endif
|
|
||||||
#ifdef COMPILE_PCRE32
|
|
||||||
if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
|
|
||||||
return rc;
|
|
||||||
if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
|
|
||||||
if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
|
|
||||||
return rc;
|
|
||||||
if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
|
|
||||||
return rc;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bot = 0;
|
|
||||||
while (top > bot)
|
|
||||||
{
|
|
||||||
int mid = (top + bot) / 2;
|
|
||||||
pcre_uchar *entry = nametable + entrysize*mid;
|
|
||||||
int c = STRCMP_UC_UC((pcre_uchar *)stringname,
|
|
||||||
(pcre_uchar *)(entry + IMM2_SIZE));
|
|
||||||
if (c == 0) return GET2(entry, 0);
|
|
||||||
if (c > 0) bot = mid + 1; else top = mid;
|
|
||||||
}
|
|
||||||
|
|
||||||
return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Find (multiple) entries for named string *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This is used by the get_first_set() function below, as well as being
|
|
||||||
generally available. It is used when duplicated names are permitted.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
code the compiled regex
|
|
||||||
stringname the name whose entries required
|
|
||||||
firstptr where to put the pointer to the first entry
|
|
||||||
lastptr where to put the pointer to the last entry
|
|
||||||
|
|
||||||
Returns: the length of each entry, or a negative number
|
|
||||||
(PCRE_ERROR_NOSUBSTRING) if not found
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_get_stringtable_entries(const pcre *code, const char *stringname,
|
|
||||||
char **firstptr, char **lastptr)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_get_stringtable_entries(const pcre16 *code, PCRE_SPTR16 stringname,
|
|
||||||
PCRE_UCHAR16 **firstptr, PCRE_UCHAR16 **lastptr)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_get_stringtable_entries(const pcre32 *code, PCRE_SPTR32 stringname,
|
|
||||||
PCRE_UCHAR32 **firstptr, PCRE_UCHAR32 **lastptr)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
int entrysize;
|
|
||||||
int top, bot;
|
|
||||||
pcre_uchar *nametable, *lastentry;
|
|
||||||
|
|
||||||
#ifdef COMPILE_PCRE8
|
|
||||||
if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
|
|
||||||
return rc;
|
|
||||||
if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
|
|
||||||
if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
|
|
||||||
return rc;
|
|
||||||
if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
|
|
||||||
return rc;
|
|
||||||
#endif
|
|
||||||
#ifdef COMPILE_PCRE16
|
|
||||||
if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
|
|
||||||
return rc;
|
|
||||||
if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
|
|
||||||
if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
|
|
||||||
return rc;
|
|
||||||
if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
|
|
||||||
return rc;
|
|
||||||
#endif
|
|
||||||
#ifdef COMPILE_PCRE32
|
|
||||||
if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
|
|
||||||
return rc;
|
|
||||||
if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
|
|
||||||
if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
|
|
||||||
return rc;
|
|
||||||
if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
|
|
||||||
return rc;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
lastentry = nametable + entrysize * (top - 1);
|
|
||||||
bot = 0;
|
|
||||||
while (top > bot)
|
|
||||||
{
|
|
||||||
int mid = (top + bot) / 2;
|
|
||||||
pcre_uchar *entry = nametable + entrysize*mid;
|
|
||||||
int c = STRCMP_UC_UC((pcre_uchar *)stringname,
|
|
||||||
(pcre_uchar *)(entry + IMM2_SIZE));
|
|
||||||
if (c == 0)
|
|
||||||
{
|
|
||||||
pcre_uchar *first = entry;
|
|
||||||
pcre_uchar *last = entry;
|
|
||||||
while (first > nametable)
|
|
||||||
{
|
|
||||||
if (STRCMP_UC_UC((pcre_uchar *)stringname,
|
|
||||||
(pcre_uchar *)(first - entrysize + IMM2_SIZE)) != 0) break;
|
|
||||||
first -= entrysize;
|
|
||||||
}
|
|
||||||
while (last < lastentry)
|
|
||||||
{
|
|
||||||
if (STRCMP_UC_UC((pcre_uchar *)stringname,
|
|
||||||
(pcre_uchar *)(last + entrysize + IMM2_SIZE)) != 0) break;
|
|
||||||
last += entrysize;
|
|
||||||
}
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
*firstptr = (char *)first;
|
|
||||||
*lastptr = (char *)last;
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
*firstptr = (PCRE_UCHAR16 *)first;
|
|
||||||
*lastptr = (PCRE_UCHAR16 *)last;
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
*firstptr = (PCRE_UCHAR32 *)first;
|
|
||||||
*lastptr = (PCRE_UCHAR32 *)last;
|
|
||||||
#endif
|
|
||||||
return entrysize;
|
|
||||||
}
|
|
||||||
if (c > 0) bot = mid + 1; else top = mid;
|
|
||||||
}
|
|
||||||
|
|
||||||
return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Find first set of multiple named strings *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function allows for duplicate names in the table of named substrings.
|
|
||||||
It returns the number of the first one that was set in a pattern match.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
code the compiled regex
|
|
||||||
stringname the name of the capturing substring
|
|
||||||
ovector the vector of matched substrings
|
|
||||||
stringcount number of captured substrings
|
|
||||||
|
|
||||||
Returns: the number of the first that is set,
|
|
||||||
or the number of the last one if none are set,
|
|
||||||
or a negative number on error
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
static int
|
|
||||||
get_first_set(const pcre *code, const char *stringname, int *ovector,
|
|
||||||
int stringcount)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
static int
|
|
||||||
get_first_set(const pcre16 *code, PCRE_SPTR16 stringname, int *ovector,
|
|
||||||
int stringcount)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
static int
|
|
||||||
get_first_set(const pcre32 *code, PCRE_SPTR32 stringname, int *ovector,
|
|
||||||
int stringcount)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
const REAL_PCRE *re = (const REAL_PCRE *)code;
|
|
||||||
int entrysize;
|
|
||||||
pcre_uchar *entry;
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
char *first, *last;
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_UCHAR16 *first, *last;
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_UCHAR32 *first, *last;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)
|
|
||||||
return pcre_get_stringnumber(code, stringname);
|
|
||||||
entrysize = pcre_get_stringtable_entries(code, stringname, &first, &last);
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)
|
|
||||||
return pcre16_get_stringnumber(code, stringname);
|
|
||||||
entrysize = pcre16_get_stringtable_entries(code, stringname, &first, &last);
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)
|
|
||||||
return pcre32_get_stringnumber(code, stringname);
|
|
||||||
entrysize = pcre32_get_stringtable_entries(code, stringname, &first, &last);
|
|
||||||
#endif
|
|
||||||
if (entrysize <= 0) return entrysize;
|
|
||||||
for (entry = (pcre_uchar *)first; entry <= (pcre_uchar *)last; entry += entrysize)
|
|
||||||
{
|
|
||||||
int n = GET2(entry, 0);
|
|
||||||
if (n < stringcount && ovector[n*2] >= 0) return n;
|
|
||||||
}
|
|
||||||
return GET2(entry, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Copy captured string to given buffer *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function copies a single captured substring into a given buffer.
|
|
||||||
Note that we use memcpy() rather than strncpy() in case there are binary zeros
|
|
||||||
in the string.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
subject the subject string that was matched
|
|
||||||
ovector pointer to the offsets table
|
|
||||||
stringcount the number of substrings that were captured
|
|
||||||
(i.e. the yield of the pcre_exec call, unless
|
|
||||||
that was zero, in which case it should be 1/3
|
|
||||||
of the offset table size)
|
|
||||||
stringnumber the number of the required substring
|
|
||||||
buffer where to put the substring
|
|
||||||
size the size of the buffer
|
|
||||||
|
|
||||||
Returns: if successful:
|
|
||||||
the length of the copied string, not including the zero
|
|
||||||
that is put on the end; can be zero
|
|
||||||
if not successful:
|
|
||||||
PCRE_ERROR_NOMEMORY (-6) buffer too small
|
|
||||||
PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_copy_substring(const char *subject, int *ovector, int stringcount,
|
|
||||||
int stringnumber, char *buffer, int size)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_copy_substring(PCRE_SPTR16 subject, int *ovector, int stringcount,
|
|
||||||
int stringnumber, PCRE_UCHAR16 *buffer, int size)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_copy_substring(PCRE_SPTR32 subject, int *ovector, int stringcount,
|
|
||||||
int stringnumber, PCRE_UCHAR32 *buffer, int size)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int yield;
|
|
||||||
if (stringnumber < 0 || stringnumber >= stringcount)
|
|
||||||
return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
stringnumber *= 2;
|
|
||||||
yield = ovector[stringnumber+1] - ovector[stringnumber];
|
|
||||||
if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
|
|
||||||
memcpy(buffer, subject + ovector[stringnumber], IN_UCHARS(yield));
|
|
||||||
buffer[yield] = 0;
|
|
||||||
return yield;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Copy named captured string to given buffer *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function copies a single captured substring into a given buffer,
|
|
||||||
identifying it by name. If the regex permits duplicate names, the first
|
|
||||||
substring that is set is chosen.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
code the compiled regex
|
|
||||||
subject the subject string that was matched
|
|
||||||
ovector pointer to the offsets table
|
|
||||||
stringcount the number of substrings that were captured
|
|
||||||
(i.e. the yield of the pcre_exec call, unless
|
|
||||||
that was zero, in which case it should be 1/3
|
|
||||||
of the offset table size)
|
|
||||||
stringname the name of the required substring
|
|
||||||
buffer where to put the substring
|
|
||||||
size the size of the buffer
|
|
||||||
|
|
||||||
Returns: if successful:
|
|
||||||
the length of the copied string, not including the zero
|
|
||||||
that is put on the end; can be zero
|
|
||||||
if not successful:
|
|
||||||
PCRE_ERROR_NOMEMORY (-6) buffer too small
|
|
||||||
PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_copy_named_substring(const pcre *code, const char *subject,
|
|
||||||
int *ovector, int stringcount, const char *stringname,
|
|
||||||
char *buffer, int size)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_copy_named_substring(const pcre16 *code, PCRE_SPTR16 subject,
|
|
||||||
int *ovector, int stringcount, PCRE_SPTR16 stringname,
|
|
||||||
PCRE_UCHAR16 *buffer, int size)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_copy_named_substring(const pcre32 *code, PCRE_SPTR32 subject,
|
|
||||||
int *ovector, int stringcount, PCRE_SPTR32 stringname,
|
|
||||||
PCRE_UCHAR32 *buffer, int size)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int n = get_first_set(code, stringname, ovector, stringcount);
|
|
||||||
if (n <= 0) return n;
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size);
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
return pcre16_copy_substring(subject, ovector, stringcount, n, buffer, size);
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
return pcre32_copy_substring(subject, ovector, stringcount, n, buffer, size);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Copy all captured strings to new store *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function gets one chunk of store and builds a list of pointers and all
|
|
||||||
of the captured substrings in it. A NULL pointer is put on the end of the list.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
subject the subject string that was matched
|
|
||||||
ovector pointer to the offsets table
|
|
||||||
stringcount the number of substrings that were captured
|
|
||||||
(i.e. the yield of the pcre_exec call, unless
|
|
||||||
that was zero, in which case it should be 1/3
|
|
||||||
of the offset table size)
|
|
||||||
listptr set to point to the list of pointers
|
|
||||||
|
|
||||||
Returns: if successful: 0
|
|
||||||
if not successful:
|
|
||||||
PCRE_ERROR_NOMEMORY (-6) failed to get store
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
|
|
||||||
const char ***listptr)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_get_substring_list(PCRE_SPTR16 subject, int *ovector, int stringcount,
|
|
||||||
PCRE_SPTR16 **listptr)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_get_substring_list(PCRE_SPTR32 subject, int *ovector, int stringcount,
|
|
||||||
PCRE_SPTR32 **listptr)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int size = sizeof(pcre_uchar *);
|
|
||||||
int double_count = stringcount * 2;
|
|
||||||
pcre_uchar **stringlist;
|
|
||||||
pcre_uchar *p;
|
|
||||||
|
|
||||||
for (i = 0; i < double_count; i += 2)
|
|
||||||
{
|
|
||||||
size += sizeof(pcre_uchar *) + IN_UCHARS(1);
|
|
||||||
if (ovector[i+1] > ovector[i]) size += IN_UCHARS(ovector[i+1] - ovector[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
stringlist = (pcre_uchar **)(PUBL(malloc))(size);
|
|
||||||
if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
*listptr = (const char **)stringlist;
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
*listptr = (PCRE_SPTR16 *)stringlist;
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
*listptr = (PCRE_SPTR32 *)stringlist;
|
|
||||||
#endif
|
|
||||||
p = (pcre_uchar *)(stringlist + stringcount + 1);
|
|
||||||
|
|
||||||
for (i = 0; i < double_count; i += 2)
|
|
||||||
{
|
|
||||||
int len = (ovector[i+1] > ovector[i])? (ovector[i+1] - ovector[i]) : 0;
|
|
||||||
memcpy(p, subject + ovector[i], IN_UCHARS(len));
|
|
||||||
*stringlist++ = p;
|
|
||||||
p += len;
|
|
||||||
*p++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
*stringlist = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Free store obtained by get_substring_list *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function exists for the benefit of people calling PCRE from non-C
|
|
||||||
programs that can call its functions, but not free() or (PUBL(free))()
|
|
||||||
directly.
|
|
||||||
|
|
||||||
Argument: the result of a previous pcre_get_substring_list()
|
|
||||||
Returns: nothing
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
|
|
||||||
pcre_free_substring_list(const char **pointer)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
|
|
||||||
pcre16_free_substring_list(PCRE_SPTR16 *pointer)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
|
|
||||||
pcre32_free_substring_list(PCRE_SPTR32 *pointer)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
(PUBL(free))((void *)pointer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Copy captured string to new store *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function copies a single captured substring into a piece of new
|
|
||||||
store
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
subject the subject string that was matched
|
|
||||||
ovector pointer to the offsets table
|
|
||||||
stringcount the number of substrings that were captured
|
|
||||||
(i.e. the yield of the pcre_exec call, unless
|
|
||||||
that was zero, in which case it should be 1/3
|
|
||||||
of the offset table size)
|
|
||||||
stringnumber the number of the required substring
|
|
||||||
stringptr where to put a pointer to the substring
|
|
||||||
|
|
||||||
Returns: if successful:
|
|
||||||
the length of the string, not including the zero that
|
|
||||||
is put on the end; can be zero
|
|
||||||
if not successful:
|
|
||||||
PCRE_ERROR_NOMEMORY (-6) failed to get store
|
|
||||||
PCRE_ERROR_NOSUBSTRING (-7) substring not present
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_get_substring(const char *subject, int *ovector, int stringcount,
|
|
||||||
int stringnumber, const char **stringptr)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_get_substring(PCRE_SPTR16 subject, int *ovector, int stringcount,
|
|
||||||
int stringnumber, PCRE_SPTR16 *stringptr)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_get_substring(PCRE_SPTR32 subject, int *ovector, int stringcount,
|
|
||||||
int stringnumber, PCRE_SPTR32 *stringptr)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int yield;
|
|
||||||
pcre_uchar *substring;
|
|
||||||
if (stringnumber < 0 || stringnumber >= stringcount)
|
|
||||||
return PCRE_ERROR_NOSUBSTRING;
|
|
||||||
stringnumber *= 2;
|
|
||||||
yield = ovector[stringnumber+1] - ovector[stringnumber];
|
|
||||||
substring = (pcre_uchar *)(PUBL(malloc))(IN_UCHARS(yield + 1));
|
|
||||||
if (substring == NULL) return PCRE_ERROR_NOMEMORY;
|
|
||||||
memcpy(substring, subject + ovector[stringnumber], IN_UCHARS(yield));
|
|
||||||
substring[yield] = 0;
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
*stringptr = (const char *)substring;
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
*stringptr = (PCRE_SPTR16)substring;
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
*stringptr = (PCRE_SPTR32)substring;
|
|
||||||
#endif
|
|
||||||
return yield;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Copy named captured string to new store *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function copies a single captured substring, identified by name, into
|
|
||||||
new store. If the regex permits duplicate names, the first substring that is
|
|
||||||
set is chosen.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
code the compiled regex
|
|
||||||
subject the subject string that was matched
|
|
||||||
ovector pointer to the offsets table
|
|
||||||
stringcount the number of substrings that were captured
|
|
||||||
(i.e. the yield of the pcre_exec call, unless
|
|
||||||
that was zero, in which case it should be 1/3
|
|
||||||
of the offset table size)
|
|
||||||
stringname the name of the required substring
|
|
||||||
stringptr where to put the pointer
|
|
||||||
|
|
||||||
Returns: if successful:
|
|
||||||
the length of the copied string, not including the zero
|
|
||||||
that is put on the end; can be zero
|
|
||||||
if not successful:
|
|
||||||
PCRE_ERROR_NOMEMORY (-6) couldn't get memory
|
|
||||||
PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_get_named_substring(const pcre *code, const char *subject,
|
|
||||||
int *ovector, int stringcount, const char *stringname,
|
|
||||||
const char **stringptr)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_get_named_substring(const pcre16 *code, PCRE_SPTR16 subject,
|
|
||||||
int *ovector, int stringcount, PCRE_SPTR16 stringname,
|
|
||||||
PCRE_SPTR16 *stringptr)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_get_named_substring(const pcre32 *code, PCRE_SPTR32 subject,
|
|
||||||
int *ovector, int stringcount, PCRE_SPTR32 stringname,
|
|
||||||
PCRE_SPTR32 *stringptr)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int n = get_first_set(code, stringname, ovector, stringcount);
|
|
||||||
if (n <= 0) return n;
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
return pcre_get_substring(subject, ovector, stringcount, n, stringptr);
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
return pcre16_get_substring(subject, ovector, stringcount, n, stringptr);
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
return pcre32_get_substring(subject, ovector, stringcount, n, stringptr);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Free store obtained by get_substring *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function exists for the benefit of people calling PCRE from non-C
|
|
||||||
programs that can call its functions, but not free() or (PUBL(free))()
|
|
||||||
directly.
|
|
||||||
|
|
||||||
Argument: the result of a previous pcre_get_substring()
|
|
||||||
Returns: nothing
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
|
|
||||||
pcre_free_substring(const char *pointer)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
|
|
||||||
pcre16_free_substring(PCRE_SPTR16 pointer)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
|
|
||||||
pcre32_free_substring(PCRE_SPTR32 pointer)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
(PUBL(free))((void *)pointer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_get.c */
|
|
||||||
@ -1,87 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2014 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains global variables that are exported by the PCRE library.
|
|
||||||
PCRE is thread-clean and doesn't use any global variables in the normal sense.
|
|
||||||
However, it calls memory allocation and freeing functions via the four
|
|
||||||
indirections below, and it can optionally do callouts, using the fifth
|
|
||||||
indirection. These values can be changed by the caller, but are shared between
|
|
||||||
all threads.
|
|
||||||
|
|
||||||
For MS Visual Studio and Symbian OS, there are problems in initializing these
|
|
||||||
variables to non-local functions. In these cases, therefore, an indirection via
|
|
||||||
a local function is used.
|
|
||||||
|
|
||||||
Also, when compiling for Virtual Pascal, things are done differently, and
|
|
||||||
global variables are not used. */
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
#if defined _MSC_VER || defined __SYMBIAN32__
|
|
||||||
static void* LocalPcreMalloc(size_t aSize)
|
|
||||||
{
|
|
||||||
return malloc(aSize);
|
|
||||||
}
|
|
||||||
static void LocalPcreFree(void* aPtr)
|
|
||||||
{
|
|
||||||
free(aPtr);
|
|
||||||
}
|
|
||||||
PCRE_EXP_DATA_DEFN void *(*PUBL(malloc))(size_t) = LocalPcreMalloc;
|
|
||||||
PCRE_EXP_DATA_DEFN void (*PUBL(free))(void *) = LocalPcreFree;
|
|
||||||
PCRE_EXP_DATA_DEFN void *(*PUBL(stack_malloc))(size_t) = LocalPcreMalloc;
|
|
||||||
PCRE_EXP_DATA_DEFN void (*PUBL(stack_free))(void *) = LocalPcreFree;
|
|
||||||
PCRE_EXP_DATA_DEFN int (*PUBL(callout))(PUBL(callout_block) *) = NULL;
|
|
||||||
PCRE_EXP_DATA_DEFN int (*PUBL(stack_guard))(void) = NULL;
|
|
||||||
|
|
||||||
#elif !defined VPCOMPAT
|
|
||||||
PCRE_EXP_DATA_DEFN void *(*PUBL(malloc))(size_t) = malloc;
|
|
||||||
PCRE_EXP_DATA_DEFN void (*PUBL(free))(void *) = free;
|
|
||||||
PCRE_EXP_DATA_DEFN void *(*PUBL(stack_malloc))(size_t) = malloc;
|
|
||||||
PCRE_EXP_DATA_DEFN void (*PUBL(stack_free))(void *) = free;
|
|
||||||
PCRE_EXP_DATA_DEFN int (*PUBL(callout))(PUBL(callout_block) *) = NULL;
|
|
||||||
PCRE_EXP_DATA_DEFN int (*PUBL(stack_guard))(void) = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* End of pcre_globals.c */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,144 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2007 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains the external function pcre_maketables(), which builds
|
|
||||||
character tables for PCRE in the current locale. The file is compiled on its
|
|
||||||
own as part of the PCRE library. However, it is also included in the
|
|
||||||
compilation of dftables.c, in which case the macro DFTABLES is defined. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef DFTABLES
|
|
||||||
# ifdef HAVE_CONFIG_H
|
|
||||||
# include "config.h"
|
|
||||||
# endif
|
|
||||||
# include "pcre_internal.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Create PCRE character tables *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function builds a set of character tables for use by PCRE and returns
|
|
||||||
a pointer to them. They are build using the ctype functions, and consequently
|
|
||||||
their contents will depend upon the current locale setting. When compiled as
|
|
||||||
part of the library, the store is obtained via pcre_malloc(), but when compiled
|
|
||||||
inside dftables, use malloc().
|
|
||||||
|
|
||||||
Arguments: none
|
|
||||||
Returns: pointer to the contiguous block of data
|
|
||||||
*/
|
|
||||||
|
|
||||||
const unsigned char *
|
|
||||||
pcre_maketables(void)
|
|
||||||
{
|
|
||||||
unsigned char *yield, *p;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
#ifndef DFTABLES
|
|
||||||
yield = (unsigned char*)(pcre_malloc)(tables_length);
|
|
||||||
#else
|
|
||||||
yield = (unsigned char*)malloc(tables_length);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (yield == NULL) return NULL;
|
|
||||||
p = yield;
|
|
||||||
|
|
||||||
/* First comes the lower casing table */
|
|
||||||
|
|
||||||
for (i = 0; i < 256; i++) *p++ = tolower(i);
|
|
||||||
|
|
||||||
/* Next the case-flipping table */
|
|
||||||
|
|
||||||
for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
|
|
||||||
|
|
||||||
/* Then the character class tables. Don't try to be clever and save effort on
|
|
||||||
exclusive ones - in some locales things may be different. Note that the table
|
|
||||||
for "space" includes everything "isspace" gives, including VT in the default
|
|
||||||
locale. This makes it work for the POSIX class [:space:]. Note also that it is
|
|
||||||
possible for a character to be alnum or alpha without being lower or upper,
|
|
||||||
such as "male and female ordinals" (\xAA and \xBA) in the fr_FR locale (at
|
|
||||||
least under Debian Linux's locales as of 12/2005). So we must test for alnum
|
|
||||||
specially. */
|
|
||||||
|
|
||||||
memset(p, 0, cbit_length);
|
|
||||||
for (i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
if (isdigit(i)) p[cbit_digit + i/8] |= 1 << (i&7);
|
|
||||||
if (isupper(i)) p[cbit_upper + i/8] |= 1 << (i&7);
|
|
||||||
if (islower(i)) p[cbit_lower + i/8] |= 1 << (i&7);
|
|
||||||
if (isalnum(i)) p[cbit_word + i/8] |= 1 << (i&7);
|
|
||||||
if (i == '_') p[cbit_word + i/8] |= 1 << (i&7);
|
|
||||||
if (isspace(i)) p[cbit_space + i/8] |= 1 << (i&7);
|
|
||||||
if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
|
|
||||||
if (isgraph(i)) p[cbit_graph + i/8] |= 1 << (i&7);
|
|
||||||
if (isprint(i)) p[cbit_print + i/8] |= 1 << (i&7);
|
|
||||||
if (ispunct(i)) p[cbit_punct + i/8] |= 1 << (i&7);
|
|
||||||
if (iscntrl(i)) p[cbit_cntrl + i/8] |= 1 << (i&7);
|
|
||||||
}
|
|
||||||
p += cbit_length;
|
|
||||||
|
|
||||||
/* Finally, the character type table. In this, we exclude VT from the white
|
|
||||||
space chars, because Perl doesn't recognize it as such for \s and for comments
|
|
||||||
within regexes. */
|
|
||||||
|
|
||||||
for (i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
int x = 0;
|
|
||||||
if (i != 0x0b && isspace(i)) x += ctype_space;
|
|
||||||
if (isalpha(i)) x += ctype_letter;
|
|
||||||
if (isdigit(i)) x += ctype_digit;
|
|
||||||
if (isxdigit(i)) x += ctype_xdigit;
|
|
||||||
if (isalnum(i) || i == '_') x += ctype_word;
|
|
||||||
|
|
||||||
/* Note: strchr includes the terminating zero in the characters it considers.
|
|
||||||
In this instance, that is ok because we want binary zero to be flagged as a
|
|
||||||
meta-character, which in this sense is any character that terminates a run
|
|
||||||
of data characters. */
|
|
||||||
|
|
||||||
if (strchr("\\*+?{^.$|()[", i) != 0) x += ctype_meta;
|
|
||||||
*p++ = x;
|
|
||||||
}
|
|
||||||
|
|
||||||
return yield;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_maketables.c */
|
|
||||||
@ -1,211 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2012 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains internal functions for testing newlines when more than
|
|
||||||
one kind of newline is to be recognized. When a newline is found, its length is
|
|
||||||
returned. In principle, we could implement several newline "types", each
|
|
||||||
referring to a different set of newline characters. At present, PCRE supports
|
|
||||||
only NLTYPE_FIXED, which gets handled without these functions, NLTYPE_ANYCRLF,
|
|
||||||
and NLTYPE_ANY. The full list of Unicode newline characters is taken from
|
|
||||||
http://unicode.org/unicode/reports/tr18/. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Check for newline at given position *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* It is guaranteed that the initial value of ptr is less than the end of the
|
|
||||||
string that is being processed.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
ptr pointer to possible newline
|
|
||||||
type the newline type
|
|
||||||
endptr pointer to the end of the string
|
|
||||||
lenptr where to return the length
|
|
||||||
utf TRUE if in utf mode
|
|
||||||
|
|
||||||
Returns: TRUE or FALSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
BOOL
|
|
||||||
PRIV(is_newline)(PCRE_PUCHAR ptr, int type, PCRE_PUCHAR endptr, int *lenptr,
|
|
||||||
BOOL utf)
|
|
||||||
{
|
|
||||||
pcre_uint32 c;
|
|
||||||
(void)utf;
|
|
||||||
#ifdef SUPPORT_UTF
|
|
||||||
if (utf)
|
|
||||||
{
|
|
||||||
GETCHAR(c, ptr);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif /* SUPPORT_UTF */
|
|
||||||
c = *ptr;
|
|
||||||
|
|
||||||
/* Note that this function is called only for ANY or ANYCRLF. */
|
|
||||||
|
|
||||||
if (type == NLTYPE_ANYCRLF) switch(c)
|
|
||||||
{
|
|
||||||
case CHAR_LF: *lenptr = 1; return TRUE;
|
|
||||||
case CHAR_CR: *lenptr = (ptr < endptr - 1 && ptr[1] == CHAR_LF)? 2 : 1;
|
|
||||||
return TRUE;
|
|
||||||
default: return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* NLTYPE_ANY */
|
|
||||||
|
|
||||||
else switch(c)
|
|
||||||
{
|
|
||||||
#ifdef EBCDIC
|
|
||||||
case CHAR_NEL:
|
|
||||||
#endif
|
|
||||||
case CHAR_LF:
|
|
||||||
case CHAR_VT:
|
|
||||||
case CHAR_FF: *lenptr = 1; return TRUE;
|
|
||||||
|
|
||||||
case CHAR_CR:
|
|
||||||
*lenptr = (ptr < endptr - 1 && ptr[1] == CHAR_LF)? 2 : 1;
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
#ifndef EBCDIC
|
|
||||||
#ifdef COMPILE_PCRE8
|
|
||||||
case CHAR_NEL: *lenptr = utf? 2 : 1; return TRUE;
|
|
||||||
case 0x2028: /* LS */
|
|
||||||
case 0x2029: *lenptr = 3; return TRUE; /* PS */
|
|
||||||
#else /* COMPILE_PCRE16 || COMPILE_PCRE32 */
|
|
||||||
case CHAR_NEL:
|
|
||||||
case 0x2028: /* LS */
|
|
||||||
case 0x2029: *lenptr = 1; return TRUE; /* PS */
|
|
||||||
#endif /* COMPILE_PCRE8 */
|
|
||||||
#endif /* Not EBCDIC */
|
|
||||||
|
|
||||||
default: return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Check for newline at previous position *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* It is guaranteed that the initial value of ptr is greater than the start of
|
|
||||||
the string that is being processed.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
ptr pointer to possible newline
|
|
||||||
type the newline type
|
|
||||||
startptr pointer to the start of the string
|
|
||||||
lenptr where to return the length
|
|
||||||
utf TRUE if in utf mode
|
|
||||||
|
|
||||||
Returns: TRUE or FALSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
BOOL
|
|
||||||
PRIV(was_newline)(PCRE_PUCHAR ptr, int type, PCRE_PUCHAR startptr, int *lenptr,
|
|
||||||
BOOL utf)
|
|
||||||
{
|
|
||||||
pcre_uint32 c;
|
|
||||||
(void)utf;
|
|
||||||
ptr--;
|
|
||||||
#ifdef SUPPORT_UTF
|
|
||||||
if (utf)
|
|
||||||
{
|
|
||||||
BACKCHAR(ptr);
|
|
||||||
GETCHAR(c, ptr);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif /* SUPPORT_UTF */
|
|
||||||
c = *ptr;
|
|
||||||
|
|
||||||
/* Note that this function is called only for ANY or ANYCRLF. */
|
|
||||||
|
|
||||||
if (type == NLTYPE_ANYCRLF) switch(c)
|
|
||||||
{
|
|
||||||
case CHAR_LF:
|
|
||||||
*lenptr = (ptr > startptr && ptr[-1] == CHAR_CR)? 2 : 1;
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
case CHAR_CR: *lenptr = 1; return TRUE;
|
|
||||||
default: return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* NLTYPE_ANY */
|
|
||||||
|
|
||||||
else switch(c)
|
|
||||||
{
|
|
||||||
case CHAR_LF:
|
|
||||||
*lenptr = (ptr > startptr && ptr[-1] == CHAR_CR)? 2 : 1;
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
#ifdef EBCDIC
|
|
||||||
case CHAR_NEL:
|
|
||||||
#endif
|
|
||||||
case CHAR_VT:
|
|
||||||
case CHAR_FF:
|
|
||||||
case CHAR_CR: *lenptr = 1; return TRUE;
|
|
||||||
|
|
||||||
#ifndef EBCDIC
|
|
||||||
#ifdef COMPILE_PCRE8
|
|
||||||
case CHAR_NEL: *lenptr = utf? 2 : 1; return TRUE;
|
|
||||||
case 0x2028: /* LS */
|
|
||||||
case 0x2029: *lenptr = 3; return TRUE; /* PS */
|
|
||||||
#else /* COMPILE_PCRE16 || COMPILE_PCRE32 */
|
|
||||||
case CHAR_NEL:
|
|
||||||
case 0x2028: /* LS */
|
|
||||||
case 0x2029: *lenptr = 1; return TRUE; /* PS */
|
|
||||||
#endif /* COMPILE_PCRE8 */
|
|
||||||
#endif /* NotEBCDIC */
|
|
||||||
|
|
||||||
default: return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_newline.c */
|
|
||||||
@ -1,95 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2012 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This file contains a private PCRE function that converts an ordinal
|
|
||||||
character value into a UTF8 string. */
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define COMPILE_PCRE8
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Convert character value to UTF-8 *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function takes an integer value in the range 0 - 0x10ffff
|
|
||||||
and encodes it as a UTF-8 character in 1 to 4 pcre_uchars.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
cvalue the character value
|
|
||||||
buffer pointer to buffer for result - at least 6 pcre_uchars long
|
|
||||||
|
|
||||||
Returns: number of characters placed in the buffer
|
|
||||||
*/
|
|
||||||
|
|
||||||
unsigned
|
|
||||||
int
|
|
||||||
PRIV(ord2utf)(pcre_uint32 cvalue, pcre_uchar *buffer)
|
|
||||||
{
|
|
||||||
#ifdef SUPPORT_UTF
|
|
||||||
|
|
||||||
register int i, j;
|
|
||||||
|
|
||||||
for (i = 0; i < PRIV(utf8_table1_size); i++)
|
|
||||||
if ((int)cvalue <= PRIV(utf8_table1)[i]) break;
|
|
||||||
buffer += i;
|
|
||||||
for (j = i; j > 0; j--)
|
|
||||||
{
|
|
||||||
*buffer-- = 0x80 | (cvalue & 0x3f);
|
|
||||||
cvalue >>= 6;
|
|
||||||
}
|
|
||||||
*buffer = PRIV(utf8_table2)[i] | cvalue;
|
|
||||||
return i + 1;
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
(void)(cvalue); /* Keep compiler happy; this function won't ever be */
|
|
||||||
(void)(buffer); /* called when SUPPORT_UTF is not defined. */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_ord2utf8.c */
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2012 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains the external function pcre_refcount(), which is an
|
|
||||||
auxiliary function that can be used to maintain a reference count in a compiled
|
|
||||||
pattern data block. This might be helpful in applications where the block is
|
|
||||||
shared by different users. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Maintain reference count *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* The reference count is a 16-bit field, initialized to zero. It is not
|
|
||||||
possible to transfer a non-zero count from one host to a different host that
|
|
||||||
has a different byte order - though I can't see why anyone in their right mind
|
|
||||||
would ever want to do that!
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
argument_re points to compiled code
|
|
||||||
adjust value to add to the count
|
|
||||||
|
|
||||||
Returns: the (possibly updated) count value (a non-negative number), or
|
|
||||||
a negative error number
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre_refcount(pcre *argument_re, int adjust)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre16_refcount(pcre16 *argument_re, int adjust)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
|
|
||||||
pcre32_refcount(pcre32 *argument_re, int adjust)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
REAL_PCRE *re = (REAL_PCRE *)argument_re;
|
|
||||||
if (re == NULL) return PCRE_ERROR_NULL;
|
|
||||||
if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
|
|
||||||
if ((re->flags & PCRE_MODE) == 0) return PCRE_ERROR_BADMODE;
|
|
||||||
re->ref_count = (-adjust > re->ref_count)? 0 :
|
|
||||||
(adjust + re->ref_count > 65535)? 65535 :
|
|
||||||
re->ref_count + adjust;
|
|
||||||
return re->ref_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_refcount.c */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,194 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This file was automatically written by the dftables auxiliary
|
|
||||||
program. It contains character tables that are used when no external
|
|
||||||
tables are passed to PCRE by the application that calls it. The tables
|
|
||||||
are used only for characters whose code values are less than 256.
|
|
||||||
|
|
||||||
The following #includes are present because without them gcc 4.x may remove
|
|
||||||
the array definition from the final binary if PCRE is built into a static
|
|
||||||
library and dead code stripping is activated. This leads to link errors.
|
|
||||||
Pulling in the header ensures that the array gets flagged as "someone
|
|
||||||
outside this compilation unit might reference this" and so it will always
|
|
||||||
be supplied to the linker. */
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
const pcre_uint8 PRIV(default_tables)[] = {
|
|
||||||
|
|
||||||
/* This table is a lower casing table. */
|
|
||||||
|
|
||||||
0, 1, 2, 3, 4, 5, 6, 7,
|
|
||||||
8, 9, 10, 11, 12, 13, 14, 15,
|
|
||||||
16, 17, 18, 19, 20, 21, 22, 23,
|
|
||||||
24, 25, 26, 27, 28, 29, 30, 31,
|
|
||||||
32, 33, 34, 35, 36, 37, 38, 39,
|
|
||||||
40, 41, 42, 43, 44, 45, 46, 47,
|
|
||||||
48, 49, 50, 51, 52, 53, 54, 55,
|
|
||||||
56, 57, 58, 59, 60, 61, 62, 63,
|
|
||||||
64, 97, 98, 99,100,101,102,103,
|
|
||||||
104,105,106,107,108,109,110,111,
|
|
||||||
112,113,114,115,116,117,118,119,
|
|
||||||
120,121,122, 91, 92, 93, 94, 95,
|
|
||||||
96, 97, 98, 99,100,101,102,103,
|
|
||||||
104,105,106,107,108,109,110,111,
|
|
||||||
112,113,114,115,116,117,118,119,
|
|
||||||
120,121,122,123,124,125,126,127,
|
|
||||||
128,129,130,131,132,133,134,135,
|
|
||||||
136,137,138,139,140,141,142,143,
|
|
||||||
144,145,146,147,148,149,150,151,
|
|
||||||
152,153,154,155,156,157,158,159,
|
|
||||||
160,161,162,163,164,165,166,167,
|
|
||||||
168,169,170,171,172,173,174,175,
|
|
||||||
176,177,178,179,180,181,182,183,
|
|
||||||
184,185,186,187,188,189,190,191,
|
|
||||||
192,193,194,195,196,197,198,199,
|
|
||||||
200,201,202,203,204,205,206,207,
|
|
||||||
208,209,210,211,212,213,214,215,
|
|
||||||
216,217,218,219,220,221,222,223,
|
|
||||||
224,225,226,227,228,229,230,231,
|
|
||||||
232,233,234,235,236,237,238,239,
|
|
||||||
240,241,242,243,244,245,246,247,
|
|
||||||
248,249,250,251,252,253,254,255,
|
|
||||||
|
|
||||||
/* This table is a case flipping table. */
|
|
||||||
|
|
||||||
0, 1, 2, 3, 4, 5, 6, 7,
|
|
||||||
8, 9, 10, 11, 12, 13, 14, 15,
|
|
||||||
16, 17, 18, 19, 20, 21, 22, 23,
|
|
||||||
24, 25, 26, 27, 28, 29, 30, 31,
|
|
||||||
32, 33, 34, 35, 36, 37, 38, 39,
|
|
||||||
40, 41, 42, 43, 44, 45, 46, 47,
|
|
||||||
48, 49, 50, 51, 52, 53, 54, 55,
|
|
||||||
56, 57, 58, 59, 60, 61, 62, 63,
|
|
||||||
64, 97, 98, 99,100,101,102,103,
|
|
||||||
104,105,106,107,108,109,110,111,
|
|
||||||
112,113,114,115,116,117,118,119,
|
|
||||||
120,121,122, 91, 92, 93, 94, 95,
|
|
||||||
96, 65, 66, 67, 68, 69, 70, 71,
|
|
||||||
72, 73, 74, 75, 76, 77, 78, 79,
|
|
||||||
80, 81, 82, 83, 84, 85, 86, 87,
|
|
||||||
88, 89, 90,123,124,125,126,127,
|
|
||||||
128,129,130,131,132,133,134,135,
|
|
||||||
136,137,138,139,140,141,142,143,
|
|
||||||
144,145,146,147,148,149,150,151,
|
|
||||||
152,153,154,155,156,157,158,159,
|
|
||||||
160,161,162,163,164,165,166,167,
|
|
||||||
168,169,170,171,172,173,174,175,
|
|
||||||
176,177,178,179,180,181,182,183,
|
|
||||||
184,185,186,187,188,189,190,191,
|
|
||||||
192,193,194,195,196,197,198,199,
|
|
||||||
200,201,202,203,204,205,206,207,
|
|
||||||
208,209,210,211,212,213,214,215,
|
|
||||||
216,217,218,219,220,221,222,223,
|
|
||||||
224,225,226,227,228,229,230,231,
|
|
||||||
232,233,234,235,236,237,238,239,
|
|
||||||
240,241,242,243,244,245,246,247,
|
|
||||||
248,249,250,251,252,253,254,255,
|
|
||||||
|
|
||||||
/* This table contains bit maps for various character classes.
|
|
||||||
Each map is 32 bytes long and the bits run from the least
|
|
||||||
significant end of each byte. The classes that have their own
|
|
||||||
maps are: space, xdigit, digit, upper, lower, word, graph
|
|
||||||
print, punct, and cntrl. Other classes are built from combinations. */
|
|
||||||
|
|
||||||
0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
|
|
||||||
0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
|
|
||||||
0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,
|
|
||||||
0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
|
|
||||||
/* This table identifies various classes of character by individual bits:
|
|
||||||
0x01 white space character
|
|
||||||
0x02 letter
|
|
||||||
0x04 decimal digit
|
|
||||||
0x08 hexadecimal digit
|
|
||||||
0x10 alphanumeric or '_'
|
|
||||||
0x80 regular expression metacharacter or binary zero
|
|
||||||
*/
|
|
||||||
|
|
||||||
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0- 7 */
|
|
||||||
0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00, /* 8- 15 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */
|
|
||||||
0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /* - ' */
|
|
||||||
0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /* ( - / */
|
|
||||||
0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /* 0 - 7 */
|
|
||||||
0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /* 8 - ? */
|
|
||||||
0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* @ - G */
|
|
||||||
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* H - O */
|
|
||||||
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* P - W */
|
|
||||||
0x12,0x12,0x12,0x80,0x80,0x00,0x80,0x10, /* X - _ */
|
|
||||||
0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* ` - g */
|
|
||||||
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* h - o */
|
|
||||||
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* p - w */
|
|
||||||
0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /* x -127 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
|
|
||||||
|
|
||||||
/* End of pcre_chartables.c */
|
|
||||||
@ -1,728 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2012 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PCRE_INCLUDED
|
|
||||||
|
|
||||||
/* This module contains some fixed tables that are used by more than one of the
|
|
||||||
PCRE code modules. The tables are also #included by the pcretest program, which
|
|
||||||
uses macros to change their names from _pcre_xxx to xxxx, thereby avoiding name
|
|
||||||
clashes with the library. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
#endif /* PCRE_INCLUDED */
|
|
||||||
|
|
||||||
/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that
|
|
||||||
the definition is next to the definition of the opcodes in pcre_internal.h. */
|
|
||||||
|
|
||||||
const pcre_uint8 PRIV(OP_lengths)[] = { OP_LENGTHS };
|
|
||||||
|
|
||||||
/* Tables of horizontal and vertical whitespace characters, suitable for
|
|
||||||
adding to classes. */
|
|
||||||
|
|
||||||
const pcre_uint32 PRIV(hspace_list)[] = { HSPACE_LIST };
|
|
||||||
const pcre_uint32 PRIV(vspace_list)[] = { VSPACE_LIST };
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Tables for UTF-8 support *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* These are the breakpoints for different numbers of bytes in a UTF-8
|
|
||||||
character. */
|
|
||||||
|
|
||||||
#if (defined SUPPORT_UTF && defined COMPILE_PCRE8) \
|
|
||||||
|| (defined PCRE_INCLUDED && (defined SUPPORT_PCRE16 || defined SUPPORT_PCRE32))
|
|
||||||
|
|
||||||
/* These tables are also required by pcretest in 16- or 32-bit mode. */
|
|
||||||
|
|
||||||
const int PRIV(utf8_table1)[] =
|
|
||||||
{ 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
|
|
||||||
|
|
||||||
const int PRIV(utf8_table1_size) = sizeof(PRIV(utf8_table1)) / sizeof(int);
|
|
||||||
|
|
||||||
/* These are the indicator bits and the mask for the data bits to set in the
|
|
||||||
first byte of a character, indexed by the number of additional bytes. */
|
|
||||||
|
|
||||||
const int PRIV(utf8_table2)[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
|
|
||||||
const int PRIV(utf8_table3)[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
|
|
||||||
|
|
||||||
/* Table of the number of extra bytes, indexed by the first byte masked with
|
|
||||||
0x3f. The highest number for a valid UTF-8 first byte is in fact 0x3d. */
|
|
||||||
|
|
||||||
const pcre_uint8 PRIV(utf8_table4)[] = {
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
|
||||||
3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
|
|
||||||
|
|
||||||
#endif /* (SUPPORT_UTF && COMPILE_PCRE8) || (PCRE_INCLUDED && SUPPORT_PCRE[16|32])*/
|
|
||||||
|
|
||||||
#ifdef SUPPORT_UTF
|
|
||||||
|
|
||||||
/* Table to translate from particular type value to the general value. */
|
|
||||||
|
|
||||||
const pcre_uint32 PRIV(ucp_gentype)[] = {
|
|
||||||
ucp_C, ucp_C, ucp_C, ucp_C, ucp_C, /* Cc, Cf, Cn, Co, Cs */
|
|
||||||
ucp_L, ucp_L, ucp_L, ucp_L, ucp_L, /* Ll, Lu, Lm, Lo, Lt */
|
|
||||||
ucp_M, ucp_M, ucp_M, /* Mc, Me, Mn */
|
|
||||||
ucp_N, ucp_N, ucp_N, /* Nd, Nl, No */
|
|
||||||
ucp_P, ucp_P, ucp_P, ucp_P, ucp_P, /* Pc, Pd, Pe, Pf, Pi */
|
|
||||||
ucp_P, ucp_P, /* Ps, Po */
|
|
||||||
ucp_S, ucp_S, ucp_S, ucp_S, /* Sc, Sk, Sm, So */
|
|
||||||
ucp_Z, ucp_Z, ucp_Z /* Zl, Zp, Zs */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This table encodes the rules for finding the end of an extended grapheme
|
|
||||||
cluster. Every code point has a grapheme break property which is one of the
|
|
||||||
ucp_gbXX values defined in ucp.h. The 2-dimensional table is indexed by the
|
|
||||||
properties of two adjacent code points. The left property selects a word from
|
|
||||||
the table, and the right property selects a bit from that word like this:
|
|
||||||
|
|
||||||
ucp_gbtable[left-property] & (1 << right-property)
|
|
||||||
|
|
||||||
The value is non-zero if a grapheme break is NOT permitted between the relevant
|
|
||||||
two code points. The breaking rules are as follows:
|
|
||||||
|
|
||||||
1. Break at the start and end of text (pretty obviously).
|
|
||||||
|
|
||||||
2. Do not break between a CR and LF; otherwise, break before and after
|
|
||||||
controls.
|
|
||||||
|
|
||||||
3. Do not break Hangul syllable sequences, the rules for which are:
|
|
||||||
|
|
||||||
L may be followed by L, V, LV or LVT
|
|
||||||
LV or V may be followed by V or T
|
|
||||||
LVT or T may be followed by T
|
|
||||||
|
|
||||||
4. Do not break before extending characters.
|
|
||||||
|
|
||||||
The next two rules are only for extended grapheme clusters (but that's what we
|
|
||||||
are implementing).
|
|
||||||
|
|
||||||
5. Do not break before SpacingMarks.
|
|
||||||
|
|
||||||
6. Do not break after Prepend characters.
|
|
||||||
|
|
||||||
7. Otherwise, break everywhere.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const pcre_uint32 PRIV(ucp_gbtable[]) = {
|
|
||||||
(1<<ucp_gbLF), /* 0 CR */
|
|
||||||
0, /* 1 LF */
|
|
||||||
0, /* 2 Control */
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark), /* 3 Extend */
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbPrepend)| /* 4 Prepend */
|
|
||||||
(1<<ucp_gbSpacingMark)|(1<<ucp_gbL)|
|
|
||||||
(1<<ucp_gbV)|(1<<ucp_gbT)|(1<<ucp_gbLV)|
|
|
||||||
(1<<ucp_gbLVT)|(1<<ucp_gbOther),
|
|
||||||
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark), /* 5 SpacingMark */
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark)|(1<<ucp_gbL)| /* 6 L */
|
|
||||||
(1<<ucp_gbL)|(1<<ucp_gbV)|(1<<ucp_gbLV)|(1<<ucp_gbLVT),
|
|
||||||
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark)|(1<<ucp_gbV)| /* 7 V */
|
|
||||||
(1<<ucp_gbT),
|
|
||||||
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark)|(1<<ucp_gbT), /* 8 T */
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark)|(1<<ucp_gbV)| /* 9 LV */
|
|
||||||
(1<<ucp_gbT),
|
|
||||||
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark)|(1<<ucp_gbT), /* 10 LVT */
|
|
||||||
(1<<ucp_gbRegionalIndicator), /* 11 RegionalIndicator */
|
|
||||||
(1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark) /* 12 Other */
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef SUPPORT_JIT
|
|
||||||
/* This table reverses PRIV(ucp_gentype). We can save the cost
|
|
||||||
of a memory load. */
|
|
||||||
|
|
||||||
const int PRIV(ucp_typerange)[] = {
|
|
||||||
ucp_Cc, ucp_Cs,
|
|
||||||
ucp_Ll, ucp_Lu,
|
|
||||||
ucp_Mc, ucp_Mn,
|
|
||||||
ucp_Nd, ucp_No,
|
|
||||||
ucp_Pc, ucp_Ps,
|
|
||||||
ucp_Sc, ucp_So,
|
|
||||||
ucp_Zl, ucp_Zs,
|
|
||||||
};
|
|
||||||
#endif /* SUPPORT_JIT */
|
|
||||||
|
|
||||||
/* The pcre_utt[] table below translates Unicode property names into type and
|
|
||||||
code values. It is searched by binary chop, so must be in collating sequence of
|
|
||||||
name. Originally, the table contained pointers to the name strings in the first
|
|
||||||
field of each entry. However, that leads to a large number of relocations when
|
|
||||||
a shared library is dynamically loaded. A significant reduction is made by
|
|
||||||
putting all the names into a single, large string and then using offsets in the
|
|
||||||
table itself. Maintenance is more error-prone, but frequent changes to this
|
|
||||||
data are unlikely.
|
|
||||||
|
|
||||||
July 2008: There is now a script called maint/GenerateUtt.py that can be used
|
|
||||||
to generate this data automatically instead of maintaining it by hand.
|
|
||||||
|
|
||||||
The script was updated in March 2009 to generate a new EBCDIC-compliant
|
|
||||||
version. Like all other character and string literals that are compared against
|
|
||||||
the regular expression pattern, we must use STR_ macros instead of literal
|
|
||||||
strings to make sure that UTF-8 support works on EBCDIC platforms. */
|
|
||||||
|
|
||||||
#define STRING_Any0 STR_A STR_n STR_y "\0"
|
|
||||||
#define STRING_Arabic0 STR_A STR_r STR_a STR_b STR_i STR_c "\0"
|
|
||||||
#define STRING_Armenian0 STR_A STR_r STR_m STR_e STR_n STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Avestan0 STR_A STR_v STR_e STR_s STR_t STR_a STR_n "\0"
|
|
||||||
#define STRING_Balinese0 STR_B STR_a STR_l STR_i STR_n STR_e STR_s STR_e "\0"
|
|
||||||
#define STRING_Bamum0 STR_B STR_a STR_m STR_u STR_m "\0"
|
|
||||||
#define STRING_Bassa_Vah0 STR_B STR_a STR_s STR_s STR_a STR_UNDERSCORE STR_V STR_a STR_h "\0"
|
|
||||||
#define STRING_Batak0 STR_B STR_a STR_t STR_a STR_k "\0"
|
|
||||||
#define STRING_Bengali0 STR_B STR_e STR_n STR_g STR_a STR_l STR_i "\0"
|
|
||||||
#define STRING_Bopomofo0 STR_B STR_o STR_p STR_o STR_m STR_o STR_f STR_o "\0"
|
|
||||||
#define STRING_Brahmi0 STR_B STR_r STR_a STR_h STR_m STR_i "\0"
|
|
||||||
#define STRING_Braille0 STR_B STR_r STR_a STR_i STR_l STR_l STR_e "\0"
|
|
||||||
#define STRING_Buginese0 STR_B STR_u STR_g STR_i STR_n STR_e STR_s STR_e "\0"
|
|
||||||
#define STRING_Buhid0 STR_B STR_u STR_h STR_i STR_d "\0"
|
|
||||||
#define STRING_C0 STR_C "\0"
|
|
||||||
#define STRING_Canadian_Aboriginal0 STR_C STR_a STR_n STR_a STR_d STR_i STR_a STR_n STR_UNDERSCORE STR_A STR_b STR_o STR_r STR_i STR_g STR_i STR_n STR_a STR_l "\0"
|
|
||||||
#define STRING_Carian0 STR_C STR_a STR_r STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Caucasian_Albanian0 STR_C STR_a STR_u STR_c STR_a STR_s STR_i STR_a STR_n STR_UNDERSCORE STR_A STR_l STR_b STR_a STR_n STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Cc0 STR_C STR_c "\0"
|
|
||||||
#define STRING_Cf0 STR_C STR_f "\0"
|
|
||||||
#define STRING_Chakma0 STR_C STR_h STR_a STR_k STR_m STR_a "\0"
|
|
||||||
#define STRING_Cham0 STR_C STR_h STR_a STR_m "\0"
|
|
||||||
#define STRING_Cherokee0 STR_C STR_h STR_e STR_r STR_o STR_k STR_e STR_e "\0"
|
|
||||||
#define STRING_Cn0 STR_C STR_n "\0"
|
|
||||||
#define STRING_Co0 STR_C STR_o "\0"
|
|
||||||
#define STRING_Common0 STR_C STR_o STR_m STR_m STR_o STR_n "\0"
|
|
||||||
#define STRING_Coptic0 STR_C STR_o STR_p STR_t STR_i STR_c "\0"
|
|
||||||
#define STRING_Cs0 STR_C STR_s "\0"
|
|
||||||
#define STRING_Cuneiform0 STR_C STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0"
|
|
||||||
#define STRING_Cypriot0 STR_C STR_y STR_p STR_r STR_i STR_o STR_t "\0"
|
|
||||||
#define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0"
|
|
||||||
#define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0"
|
|
||||||
#define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0"
|
|
||||||
#define STRING_Duployan0 STR_D STR_u STR_p STR_l STR_o STR_y STR_a STR_n "\0"
|
|
||||||
#define STRING_Egyptian_Hieroglyphs0 STR_E STR_g STR_y STR_p STR_t STR_i STR_a STR_n STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0"
|
|
||||||
#define STRING_Elbasan0 STR_E STR_l STR_b STR_a STR_s STR_a STR_n "\0"
|
|
||||||
#define STRING_Ethiopic0 STR_E STR_t STR_h STR_i STR_o STR_p STR_i STR_c "\0"
|
|
||||||
#define STRING_Georgian0 STR_G STR_e STR_o STR_r STR_g STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Glagolitic0 STR_G STR_l STR_a STR_g STR_o STR_l STR_i STR_t STR_i STR_c "\0"
|
|
||||||
#define STRING_Gothic0 STR_G STR_o STR_t STR_h STR_i STR_c "\0"
|
|
||||||
#define STRING_Grantha0 STR_G STR_r STR_a STR_n STR_t STR_h STR_a "\0"
|
|
||||||
#define STRING_Greek0 STR_G STR_r STR_e STR_e STR_k "\0"
|
|
||||||
#define STRING_Gujarati0 STR_G STR_u STR_j STR_a STR_r STR_a STR_t STR_i "\0"
|
|
||||||
#define STRING_Gurmukhi0 STR_G STR_u STR_r STR_m STR_u STR_k STR_h STR_i "\0"
|
|
||||||
#define STRING_Han0 STR_H STR_a STR_n "\0"
|
|
||||||
#define STRING_Hangul0 STR_H STR_a STR_n STR_g STR_u STR_l "\0"
|
|
||||||
#define STRING_Hanunoo0 STR_H STR_a STR_n STR_u STR_n STR_o STR_o "\0"
|
|
||||||
#define STRING_Hebrew0 STR_H STR_e STR_b STR_r STR_e STR_w "\0"
|
|
||||||
#define STRING_Hiragana0 STR_H STR_i STR_r STR_a STR_g STR_a STR_n STR_a "\0"
|
|
||||||
#define STRING_Imperial_Aramaic0 STR_I STR_m STR_p STR_e STR_r STR_i STR_a STR_l STR_UNDERSCORE STR_A STR_r STR_a STR_m STR_a STR_i STR_c "\0"
|
|
||||||
#define STRING_Inherited0 STR_I STR_n STR_h STR_e STR_r STR_i STR_t STR_e STR_d "\0"
|
|
||||||
#define STRING_Inscriptional_Pahlavi0 STR_I STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_UNDERSCORE STR_P STR_a STR_h STR_l STR_a STR_v STR_i "\0"
|
|
||||||
#define STRING_Inscriptional_Parthian0 STR_I STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_UNDERSCORE STR_P STR_a STR_r STR_t STR_h STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Javanese0 STR_J STR_a STR_v STR_a STR_n STR_e STR_s STR_e "\0"
|
|
||||||
#define STRING_Kaithi0 STR_K STR_a STR_i STR_t STR_h STR_i "\0"
|
|
||||||
#define STRING_Kannada0 STR_K STR_a STR_n STR_n STR_a STR_d STR_a "\0"
|
|
||||||
#define STRING_Katakana0 STR_K STR_a STR_t STR_a STR_k STR_a STR_n STR_a "\0"
|
|
||||||
#define STRING_Kayah_Li0 STR_K STR_a STR_y STR_a STR_h STR_UNDERSCORE STR_L STR_i "\0"
|
|
||||||
#define STRING_Kharoshthi0 STR_K STR_h STR_a STR_r STR_o STR_s STR_h STR_t STR_h STR_i "\0"
|
|
||||||
#define STRING_Khmer0 STR_K STR_h STR_m STR_e STR_r "\0"
|
|
||||||
#define STRING_Khojki0 STR_K STR_h STR_o STR_j STR_k STR_i "\0"
|
|
||||||
#define STRING_Khudawadi0 STR_K STR_h STR_u STR_d STR_a STR_w STR_a STR_d STR_i "\0"
|
|
||||||
#define STRING_L0 STR_L "\0"
|
|
||||||
#define STRING_L_AMPERSAND0 STR_L STR_AMPERSAND "\0"
|
|
||||||
#define STRING_Lao0 STR_L STR_a STR_o "\0"
|
|
||||||
#define STRING_Latin0 STR_L STR_a STR_t STR_i STR_n "\0"
|
|
||||||
#define STRING_Lepcha0 STR_L STR_e STR_p STR_c STR_h STR_a "\0"
|
|
||||||
#define STRING_Limbu0 STR_L STR_i STR_m STR_b STR_u "\0"
|
|
||||||
#define STRING_Linear_A0 STR_L STR_i STR_n STR_e STR_a STR_r STR_UNDERSCORE STR_A "\0"
|
|
||||||
#define STRING_Linear_B0 STR_L STR_i STR_n STR_e STR_a STR_r STR_UNDERSCORE STR_B "\0"
|
|
||||||
#define STRING_Lisu0 STR_L STR_i STR_s STR_u "\0"
|
|
||||||
#define STRING_Ll0 STR_L STR_l "\0"
|
|
||||||
#define STRING_Lm0 STR_L STR_m "\0"
|
|
||||||
#define STRING_Lo0 STR_L STR_o "\0"
|
|
||||||
#define STRING_Lt0 STR_L STR_t "\0"
|
|
||||||
#define STRING_Lu0 STR_L STR_u "\0"
|
|
||||||
#define STRING_Lycian0 STR_L STR_y STR_c STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Lydian0 STR_L STR_y STR_d STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_M0 STR_M "\0"
|
|
||||||
#define STRING_Mahajani0 STR_M STR_a STR_h STR_a STR_j STR_a STR_n STR_i "\0"
|
|
||||||
#define STRING_Malayalam0 STR_M STR_a STR_l STR_a STR_y STR_a STR_l STR_a STR_m "\0"
|
|
||||||
#define STRING_Mandaic0 STR_M STR_a STR_n STR_d STR_a STR_i STR_c "\0"
|
|
||||||
#define STRING_Manichaean0 STR_M STR_a STR_n STR_i STR_c STR_h STR_a STR_e STR_a STR_n "\0"
|
|
||||||
#define STRING_Mc0 STR_M STR_c "\0"
|
|
||||||
#define STRING_Me0 STR_M STR_e "\0"
|
|
||||||
#define STRING_Meetei_Mayek0 STR_M STR_e STR_e STR_t STR_e STR_i STR_UNDERSCORE STR_M STR_a STR_y STR_e STR_k "\0"
|
|
||||||
#define STRING_Mende_Kikakui0 STR_M STR_e STR_n STR_d STR_e STR_UNDERSCORE STR_K STR_i STR_k STR_a STR_k STR_u STR_i "\0"
|
|
||||||
#define STRING_Meroitic_Cursive0 STR_M STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_UNDERSCORE STR_C STR_u STR_r STR_s STR_i STR_v STR_e "\0"
|
|
||||||
#define STRING_Meroitic_Hieroglyphs0 STR_M STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0"
|
|
||||||
#define STRING_Miao0 STR_M STR_i STR_a STR_o "\0"
|
|
||||||
#define STRING_Mn0 STR_M STR_n "\0"
|
|
||||||
#define STRING_Modi0 STR_M STR_o STR_d STR_i "\0"
|
|
||||||
#define STRING_Mongolian0 STR_M STR_o STR_n STR_g STR_o STR_l STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Mro0 STR_M STR_r STR_o "\0"
|
|
||||||
#define STRING_Myanmar0 STR_M STR_y STR_a STR_n STR_m STR_a STR_r "\0"
|
|
||||||
#define STRING_N0 STR_N "\0"
|
|
||||||
#define STRING_Nabataean0 STR_N STR_a STR_b STR_a STR_t STR_a STR_e STR_a STR_n "\0"
|
|
||||||
#define STRING_Nd0 STR_N STR_d "\0"
|
|
||||||
#define STRING_New_Tai_Lue0 STR_N STR_e STR_w STR_UNDERSCORE STR_T STR_a STR_i STR_UNDERSCORE STR_L STR_u STR_e "\0"
|
|
||||||
#define STRING_Nko0 STR_N STR_k STR_o "\0"
|
|
||||||
#define STRING_Nl0 STR_N STR_l "\0"
|
|
||||||
#define STRING_No0 STR_N STR_o "\0"
|
|
||||||
#define STRING_Ogham0 STR_O STR_g STR_h STR_a STR_m "\0"
|
|
||||||
#define STRING_Ol_Chiki0 STR_O STR_l STR_UNDERSCORE STR_C STR_h STR_i STR_k STR_i "\0"
|
|
||||||
#define STRING_Old_Italic0 STR_O STR_l STR_d STR_UNDERSCORE STR_I STR_t STR_a STR_l STR_i STR_c "\0"
|
|
||||||
#define STRING_Old_North_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_N STR_o STR_r STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Old_Permic0 STR_O STR_l STR_d STR_UNDERSCORE STR_P STR_e STR_r STR_m STR_i STR_c "\0"
|
|
||||||
#define STRING_Old_Persian0 STR_O STR_l STR_d STR_UNDERSCORE STR_P STR_e STR_r STR_s STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Old_South_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_u STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Old_Turkic0 STR_O STR_l STR_d STR_UNDERSCORE STR_T STR_u STR_r STR_k STR_i STR_c "\0"
|
|
||||||
#define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0"
|
|
||||||
#define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0"
|
|
||||||
#define STRING_P0 STR_P "\0"
|
|
||||||
#define STRING_Pahawh_Hmong0 STR_P STR_a STR_h STR_a STR_w STR_h STR_UNDERSCORE STR_H STR_m STR_o STR_n STR_g "\0"
|
|
||||||
#define STRING_Palmyrene0 STR_P STR_a STR_l STR_m STR_y STR_r STR_e STR_n STR_e "\0"
|
|
||||||
#define STRING_Pau_Cin_Hau0 STR_P STR_a STR_u STR_UNDERSCORE STR_C STR_i STR_n STR_UNDERSCORE STR_H STR_a STR_u "\0"
|
|
||||||
#define STRING_Pc0 STR_P STR_c "\0"
|
|
||||||
#define STRING_Pd0 STR_P STR_d "\0"
|
|
||||||
#define STRING_Pe0 STR_P STR_e "\0"
|
|
||||||
#define STRING_Pf0 STR_P STR_f "\0"
|
|
||||||
#define STRING_Phags_Pa0 STR_P STR_h STR_a STR_g STR_s STR_UNDERSCORE STR_P STR_a "\0"
|
|
||||||
#define STRING_Phoenician0 STR_P STR_h STR_o STR_e STR_n STR_i STR_c STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Pi0 STR_P STR_i "\0"
|
|
||||||
#define STRING_Po0 STR_P STR_o "\0"
|
|
||||||
#define STRING_Ps0 STR_P STR_s "\0"
|
|
||||||
#define STRING_Psalter_Pahlavi0 STR_P STR_s STR_a STR_l STR_t STR_e STR_r STR_UNDERSCORE STR_P STR_a STR_h STR_l STR_a STR_v STR_i "\0"
|
|
||||||
#define STRING_Rejang0 STR_R STR_e STR_j STR_a STR_n STR_g "\0"
|
|
||||||
#define STRING_Runic0 STR_R STR_u STR_n STR_i STR_c "\0"
|
|
||||||
#define STRING_S0 STR_S "\0"
|
|
||||||
#define STRING_Samaritan0 STR_S STR_a STR_m STR_a STR_r STR_i STR_t STR_a STR_n "\0"
|
|
||||||
#define STRING_Saurashtra0 STR_S STR_a STR_u STR_r STR_a STR_s STR_h STR_t STR_r STR_a "\0"
|
|
||||||
#define STRING_Sc0 STR_S STR_c "\0"
|
|
||||||
#define STRING_Sharada0 STR_S STR_h STR_a STR_r STR_a STR_d STR_a "\0"
|
|
||||||
#define STRING_Shavian0 STR_S STR_h STR_a STR_v STR_i STR_a STR_n "\0"
|
|
||||||
#define STRING_Siddham0 STR_S STR_i STR_d STR_d STR_h STR_a STR_m "\0"
|
|
||||||
#define STRING_Sinhala0 STR_S STR_i STR_n STR_h STR_a STR_l STR_a "\0"
|
|
||||||
#define STRING_Sk0 STR_S STR_k "\0"
|
|
||||||
#define STRING_Sm0 STR_S STR_m "\0"
|
|
||||||
#define STRING_So0 STR_S STR_o "\0"
|
|
||||||
#define STRING_Sora_Sompeng0 STR_S STR_o STR_r STR_a STR_UNDERSCORE STR_S STR_o STR_m STR_p STR_e STR_n STR_g "\0"
|
|
||||||
#define STRING_Sundanese0 STR_S STR_u STR_n STR_d STR_a STR_n STR_e STR_s STR_e "\0"
|
|
||||||
#define STRING_Syloti_Nagri0 STR_S STR_y STR_l STR_o STR_t STR_i STR_UNDERSCORE STR_N STR_a STR_g STR_r STR_i "\0"
|
|
||||||
#define STRING_Syriac0 STR_S STR_y STR_r STR_i STR_a STR_c "\0"
|
|
||||||
#define STRING_Tagalog0 STR_T STR_a STR_g STR_a STR_l STR_o STR_g "\0"
|
|
||||||
#define STRING_Tagbanwa0 STR_T STR_a STR_g STR_b STR_a STR_n STR_w STR_a "\0"
|
|
||||||
#define STRING_Tai_Le0 STR_T STR_a STR_i STR_UNDERSCORE STR_L STR_e "\0"
|
|
||||||
#define STRING_Tai_Tham0 STR_T STR_a STR_i STR_UNDERSCORE STR_T STR_h STR_a STR_m "\0"
|
|
||||||
#define STRING_Tai_Viet0 STR_T STR_a STR_i STR_UNDERSCORE STR_V STR_i STR_e STR_t "\0"
|
|
||||||
#define STRING_Takri0 STR_T STR_a STR_k STR_r STR_i "\0"
|
|
||||||
#define STRING_Tamil0 STR_T STR_a STR_m STR_i STR_l "\0"
|
|
||||||
#define STRING_Telugu0 STR_T STR_e STR_l STR_u STR_g STR_u "\0"
|
|
||||||
#define STRING_Thaana0 STR_T STR_h STR_a STR_a STR_n STR_a "\0"
|
|
||||||
#define STRING_Thai0 STR_T STR_h STR_a STR_i "\0"
|
|
||||||
#define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0"
|
|
||||||
#define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0"
|
|
||||||
#define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0"
|
|
||||||
#define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0"
|
|
||||||
#define STRING_Vai0 STR_V STR_a STR_i "\0"
|
|
||||||
#define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0"
|
|
||||||
#define STRING_Xan0 STR_X STR_a STR_n "\0"
|
|
||||||
#define STRING_Xps0 STR_X STR_p STR_s "\0"
|
|
||||||
#define STRING_Xsp0 STR_X STR_s STR_p "\0"
|
|
||||||
#define STRING_Xuc0 STR_X STR_u STR_c "\0"
|
|
||||||
#define STRING_Xwd0 STR_X STR_w STR_d "\0"
|
|
||||||
#define STRING_Yi0 STR_Y STR_i "\0"
|
|
||||||
#define STRING_Z0 STR_Z "\0"
|
|
||||||
#define STRING_Zl0 STR_Z STR_l "\0"
|
|
||||||
#define STRING_Zp0 STR_Z STR_p "\0"
|
|
||||||
#define STRING_Zs0 STR_Z STR_s "\0"
|
|
||||||
|
|
||||||
const char PRIV(utt_names)[] =
|
|
||||||
STRING_Any0
|
|
||||||
STRING_Arabic0
|
|
||||||
STRING_Armenian0
|
|
||||||
STRING_Avestan0
|
|
||||||
STRING_Balinese0
|
|
||||||
STRING_Bamum0
|
|
||||||
STRING_Bassa_Vah0
|
|
||||||
STRING_Batak0
|
|
||||||
STRING_Bengali0
|
|
||||||
STRING_Bopomofo0
|
|
||||||
STRING_Brahmi0
|
|
||||||
STRING_Braille0
|
|
||||||
STRING_Buginese0
|
|
||||||
STRING_Buhid0
|
|
||||||
STRING_C0
|
|
||||||
STRING_Canadian_Aboriginal0
|
|
||||||
STRING_Carian0
|
|
||||||
STRING_Caucasian_Albanian0
|
|
||||||
STRING_Cc0
|
|
||||||
STRING_Cf0
|
|
||||||
STRING_Chakma0
|
|
||||||
STRING_Cham0
|
|
||||||
STRING_Cherokee0
|
|
||||||
STRING_Cn0
|
|
||||||
STRING_Co0
|
|
||||||
STRING_Common0
|
|
||||||
STRING_Coptic0
|
|
||||||
STRING_Cs0
|
|
||||||
STRING_Cuneiform0
|
|
||||||
STRING_Cypriot0
|
|
||||||
STRING_Cyrillic0
|
|
||||||
STRING_Deseret0
|
|
||||||
STRING_Devanagari0
|
|
||||||
STRING_Duployan0
|
|
||||||
STRING_Egyptian_Hieroglyphs0
|
|
||||||
STRING_Elbasan0
|
|
||||||
STRING_Ethiopic0
|
|
||||||
STRING_Georgian0
|
|
||||||
STRING_Glagolitic0
|
|
||||||
STRING_Gothic0
|
|
||||||
STRING_Grantha0
|
|
||||||
STRING_Greek0
|
|
||||||
STRING_Gujarati0
|
|
||||||
STRING_Gurmukhi0
|
|
||||||
STRING_Han0
|
|
||||||
STRING_Hangul0
|
|
||||||
STRING_Hanunoo0
|
|
||||||
STRING_Hebrew0
|
|
||||||
STRING_Hiragana0
|
|
||||||
STRING_Imperial_Aramaic0
|
|
||||||
STRING_Inherited0
|
|
||||||
STRING_Inscriptional_Pahlavi0
|
|
||||||
STRING_Inscriptional_Parthian0
|
|
||||||
STRING_Javanese0
|
|
||||||
STRING_Kaithi0
|
|
||||||
STRING_Kannada0
|
|
||||||
STRING_Katakana0
|
|
||||||
STRING_Kayah_Li0
|
|
||||||
STRING_Kharoshthi0
|
|
||||||
STRING_Khmer0
|
|
||||||
STRING_Khojki0
|
|
||||||
STRING_Khudawadi0
|
|
||||||
STRING_L0
|
|
||||||
STRING_L_AMPERSAND0
|
|
||||||
STRING_Lao0
|
|
||||||
STRING_Latin0
|
|
||||||
STRING_Lepcha0
|
|
||||||
STRING_Limbu0
|
|
||||||
STRING_Linear_A0
|
|
||||||
STRING_Linear_B0
|
|
||||||
STRING_Lisu0
|
|
||||||
STRING_Ll0
|
|
||||||
STRING_Lm0
|
|
||||||
STRING_Lo0
|
|
||||||
STRING_Lt0
|
|
||||||
STRING_Lu0
|
|
||||||
STRING_Lycian0
|
|
||||||
STRING_Lydian0
|
|
||||||
STRING_M0
|
|
||||||
STRING_Mahajani0
|
|
||||||
STRING_Malayalam0
|
|
||||||
STRING_Mandaic0
|
|
||||||
STRING_Manichaean0
|
|
||||||
STRING_Mc0
|
|
||||||
STRING_Me0
|
|
||||||
STRING_Meetei_Mayek0
|
|
||||||
STRING_Mende_Kikakui0
|
|
||||||
STRING_Meroitic_Cursive0
|
|
||||||
STRING_Meroitic_Hieroglyphs0
|
|
||||||
STRING_Miao0
|
|
||||||
STRING_Mn0
|
|
||||||
STRING_Modi0
|
|
||||||
STRING_Mongolian0
|
|
||||||
STRING_Mro0
|
|
||||||
STRING_Myanmar0
|
|
||||||
STRING_N0
|
|
||||||
STRING_Nabataean0
|
|
||||||
STRING_Nd0
|
|
||||||
STRING_New_Tai_Lue0
|
|
||||||
STRING_Nko0
|
|
||||||
STRING_Nl0
|
|
||||||
STRING_No0
|
|
||||||
STRING_Ogham0
|
|
||||||
STRING_Ol_Chiki0
|
|
||||||
STRING_Old_Italic0
|
|
||||||
STRING_Old_North_Arabian0
|
|
||||||
STRING_Old_Permic0
|
|
||||||
STRING_Old_Persian0
|
|
||||||
STRING_Old_South_Arabian0
|
|
||||||
STRING_Old_Turkic0
|
|
||||||
STRING_Oriya0
|
|
||||||
STRING_Osmanya0
|
|
||||||
STRING_P0
|
|
||||||
STRING_Pahawh_Hmong0
|
|
||||||
STRING_Palmyrene0
|
|
||||||
STRING_Pau_Cin_Hau0
|
|
||||||
STRING_Pc0
|
|
||||||
STRING_Pd0
|
|
||||||
STRING_Pe0
|
|
||||||
STRING_Pf0
|
|
||||||
STRING_Phags_Pa0
|
|
||||||
STRING_Phoenician0
|
|
||||||
STRING_Pi0
|
|
||||||
STRING_Po0
|
|
||||||
STRING_Ps0
|
|
||||||
STRING_Psalter_Pahlavi0
|
|
||||||
STRING_Rejang0
|
|
||||||
STRING_Runic0
|
|
||||||
STRING_S0
|
|
||||||
STRING_Samaritan0
|
|
||||||
STRING_Saurashtra0
|
|
||||||
STRING_Sc0
|
|
||||||
STRING_Sharada0
|
|
||||||
STRING_Shavian0
|
|
||||||
STRING_Siddham0
|
|
||||||
STRING_Sinhala0
|
|
||||||
STRING_Sk0
|
|
||||||
STRING_Sm0
|
|
||||||
STRING_So0
|
|
||||||
STRING_Sora_Sompeng0
|
|
||||||
STRING_Sundanese0
|
|
||||||
STRING_Syloti_Nagri0
|
|
||||||
STRING_Syriac0
|
|
||||||
STRING_Tagalog0
|
|
||||||
STRING_Tagbanwa0
|
|
||||||
STRING_Tai_Le0
|
|
||||||
STRING_Tai_Tham0
|
|
||||||
STRING_Tai_Viet0
|
|
||||||
STRING_Takri0
|
|
||||||
STRING_Tamil0
|
|
||||||
STRING_Telugu0
|
|
||||||
STRING_Thaana0
|
|
||||||
STRING_Thai0
|
|
||||||
STRING_Tibetan0
|
|
||||||
STRING_Tifinagh0
|
|
||||||
STRING_Tirhuta0
|
|
||||||
STRING_Ugaritic0
|
|
||||||
STRING_Vai0
|
|
||||||
STRING_Warang_Citi0
|
|
||||||
STRING_Xan0
|
|
||||||
STRING_Xps0
|
|
||||||
STRING_Xsp0
|
|
||||||
STRING_Xuc0
|
|
||||||
STRING_Xwd0
|
|
||||||
STRING_Yi0
|
|
||||||
STRING_Z0
|
|
||||||
STRING_Zl0
|
|
||||||
STRING_Zp0
|
|
||||||
STRING_Zs0;
|
|
||||||
|
|
||||||
const ucp_type_table PRIV(utt)[] = {
|
|
||||||
{ 0, PT_ANY, 0 },
|
|
||||||
{ 4, PT_SC, ucp_Arabic },
|
|
||||||
{ 11, PT_SC, ucp_Armenian },
|
|
||||||
{ 20, PT_SC, ucp_Avestan },
|
|
||||||
{ 28, PT_SC, ucp_Balinese },
|
|
||||||
{ 37, PT_SC, ucp_Bamum },
|
|
||||||
{ 43, PT_SC, ucp_Bassa_Vah },
|
|
||||||
{ 53, PT_SC, ucp_Batak },
|
|
||||||
{ 59, PT_SC, ucp_Bengali },
|
|
||||||
{ 67, PT_SC, ucp_Bopomofo },
|
|
||||||
{ 76, PT_SC, ucp_Brahmi },
|
|
||||||
{ 83, PT_SC, ucp_Braille },
|
|
||||||
{ 91, PT_SC, ucp_Buginese },
|
|
||||||
{ 100, PT_SC, ucp_Buhid },
|
|
||||||
{ 106, PT_GC, ucp_C },
|
|
||||||
{ 108, PT_SC, ucp_Canadian_Aboriginal },
|
|
||||||
{ 128, PT_SC, ucp_Carian },
|
|
||||||
{ 135, PT_SC, ucp_Caucasian_Albanian },
|
|
||||||
{ 154, PT_PC, ucp_Cc },
|
|
||||||
{ 157, PT_PC, ucp_Cf },
|
|
||||||
{ 160, PT_SC, ucp_Chakma },
|
|
||||||
{ 167, PT_SC, ucp_Cham },
|
|
||||||
{ 172, PT_SC, ucp_Cherokee },
|
|
||||||
{ 181, PT_PC, ucp_Cn },
|
|
||||||
{ 184, PT_PC, ucp_Co },
|
|
||||||
{ 187, PT_SC, ucp_Common },
|
|
||||||
{ 194, PT_SC, ucp_Coptic },
|
|
||||||
{ 201, PT_PC, ucp_Cs },
|
|
||||||
{ 204, PT_SC, ucp_Cuneiform },
|
|
||||||
{ 214, PT_SC, ucp_Cypriot },
|
|
||||||
{ 222, PT_SC, ucp_Cyrillic },
|
|
||||||
{ 231, PT_SC, ucp_Deseret },
|
|
||||||
{ 239, PT_SC, ucp_Devanagari },
|
|
||||||
{ 250, PT_SC, ucp_Duployan },
|
|
||||||
{ 259, PT_SC, ucp_Egyptian_Hieroglyphs },
|
|
||||||
{ 280, PT_SC, ucp_Elbasan },
|
|
||||||
{ 288, PT_SC, ucp_Ethiopic },
|
|
||||||
{ 297, PT_SC, ucp_Georgian },
|
|
||||||
{ 306, PT_SC, ucp_Glagolitic },
|
|
||||||
{ 317, PT_SC, ucp_Gothic },
|
|
||||||
{ 324, PT_SC, ucp_Grantha },
|
|
||||||
{ 332, PT_SC, ucp_Greek },
|
|
||||||
{ 338, PT_SC, ucp_Gujarati },
|
|
||||||
{ 347, PT_SC, ucp_Gurmukhi },
|
|
||||||
{ 356, PT_SC, ucp_Han },
|
|
||||||
{ 360, PT_SC, ucp_Hangul },
|
|
||||||
{ 367, PT_SC, ucp_Hanunoo },
|
|
||||||
{ 375, PT_SC, ucp_Hebrew },
|
|
||||||
{ 382, PT_SC, ucp_Hiragana },
|
|
||||||
{ 391, PT_SC, ucp_Imperial_Aramaic },
|
|
||||||
{ 408, PT_SC, ucp_Inherited },
|
|
||||||
{ 418, PT_SC, ucp_Inscriptional_Pahlavi },
|
|
||||||
{ 440, PT_SC, ucp_Inscriptional_Parthian },
|
|
||||||
{ 463, PT_SC, ucp_Javanese },
|
|
||||||
{ 472, PT_SC, ucp_Kaithi },
|
|
||||||
{ 479, PT_SC, ucp_Kannada },
|
|
||||||
{ 487, PT_SC, ucp_Katakana },
|
|
||||||
{ 496, PT_SC, ucp_Kayah_Li },
|
|
||||||
{ 505, PT_SC, ucp_Kharoshthi },
|
|
||||||
{ 516, PT_SC, ucp_Khmer },
|
|
||||||
{ 522, PT_SC, ucp_Khojki },
|
|
||||||
{ 529, PT_SC, ucp_Khudawadi },
|
|
||||||
{ 539, PT_GC, ucp_L },
|
|
||||||
{ 541, PT_LAMP, 0 },
|
|
||||||
{ 544, PT_SC, ucp_Lao },
|
|
||||||
{ 548, PT_SC, ucp_Latin },
|
|
||||||
{ 554, PT_SC, ucp_Lepcha },
|
|
||||||
{ 561, PT_SC, ucp_Limbu },
|
|
||||||
{ 567, PT_SC, ucp_Linear_A },
|
|
||||||
{ 576, PT_SC, ucp_Linear_B },
|
|
||||||
{ 585, PT_SC, ucp_Lisu },
|
|
||||||
{ 590, PT_PC, ucp_Ll },
|
|
||||||
{ 593, PT_PC, ucp_Lm },
|
|
||||||
{ 596, PT_PC, ucp_Lo },
|
|
||||||
{ 599, PT_PC, ucp_Lt },
|
|
||||||
{ 602, PT_PC, ucp_Lu },
|
|
||||||
{ 605, PT_SC, ucp_Lycian },
|
|
||||||
{ 612, PT_SC, ucp_Lydian },
|
|
||||||
{ 619, PT_GC, ucp_M },
|
|
||||||
{ 621, PT_SC, ucp_Mahajani },
|
|
||||||
{ 630, PT_SC, ucp_Malayalam },
|
|
||||||
{ 640, PT_SC, ucp_Mandaic },
|
|
||||||
{ 648, PT_SC, ucp_Manichaean },
|
|
||||||
{ 659, PT_PC, ucp_Mc },
|
|
||||||
{ 662, PT_PC, ucp_Me },
|
|
||||||
{ 665, PT_SC, ucp_Meetei_Mayek },
|
|
||||||
{ 678, PT_SC, ucp_Mende_Kikakui },
|
|
||||||
{ 692, PT_SC, ucp_Meroitic_Cursive },
|
|
||||||
{ 709, PT_SC, ucp_Meroitic_Hieroglyphs },
|
|
||||||
{ 730, PT_SC, ucp_Miao },
|
|
||||||
{ 735, PT_PC, ucp_Mn },
|
|
||||||
{ 738, PT_SC, ucp_Modi },
|
|
||||||
{ 743, PT_SC, ucp_Mongolian },
|
|
||||||
{ 753, PT_SC, ucp_Mro },
|
|
||||||
{ 757, PT_SC, ucp_Myanmar },
|
|
||||||
{ 765, PT_GC, ucp_N },
|
|
||||||
{ 767, PT_SC, ucp_Nabataean },
|
|
||||||
{ 777, PT_PC, ucp_Nd },
|
|
||||||
{ 780, PT_SC, ucp_New_Tai_Lue },
|
|
||||||
{ 792, PT_SC, ucp_Nko },
|
|
||||||
{ 796, PT_PC, ucp_Nl },
|
|
||||||
{ 799, PT_PC, ucp_No },
|
|
||||||
{ 802, PT_SC, ucp_Ogham },
|
|
||||||
{ 808, PT_SC, ucp_Ol_Chiki },
|
|
||||||
{ 817, PT_SC, ucp_Old_Italic },
|
|
||||||
{ 828, PT_SC, ucp_Old_North_Arabian },
|
|
||||||
{ 846, PT_SC, ucp_Old_Permic },
|
|
||||||
{ 857, PT_SC, ucp_Old_Persian },
|
|
||||||
{ 869, PT_SC, ucp_Old_South_Arabian },
|
|
||||||
{ 887, PT_SC, ucp_Old_Turkic },
|
|
||||||
{ 898, PT_SC, ucp_Oriya },
|
|
||||||
{ 904, PT_SC, ucp_Osmanya },
|
|
||||||
{ 912, PT_GC, ucp_P },
|
|
||||||
{ 914, PT_SC, ucp_Pahawh_Hmong },
|
|
||||||
{ 927, PT_SC, ucp_Palmyrene },
|
|
||||||
{ 937, PT_SC, ucp_Pau_Cin_Hau },
|
|
||||||
{ 949, PT_PC, ucp_Pc },
|
|
||||||
{ 952, PT_PC, ucp_Pd },
|
|
||||||
{ 955, PT_PC, ucp_Pe },
|
|
||||||
{ 958, PT_PC, ucp_Pf },
|
|
||||||
{ 961, PT_SC, ucp_Phags_Pa },
|
|
||||||
{ 970, PT_SC, ucp_Phoenician },
|
|
||||||
{ 981, PT_PC, ucp_Pi },
|
|
||||||
{ 984, PT_PC, ucp_Po },
|
|
||||||
{ 987, PT_PC, ucp_Ps },
|
|
||||||
{ 990, PT_SC, ucp_Psalter_Pahlavi },
|
|
||||||
{ 1006, PT_SC, ucp_Rejang },
|
|
||||||
{ 1013, PT_SC, ucp_Runic },
|
|
||||||
{ 1019, PT_GC, ucp_S },
|
|
||||||
{ 1021, PT_SC, ucp_Samaritan },
|
|
||||||
{ 1031, PT_SC, ucp_Saurashtra },
|
|
||||||
{ 1042, PT_PC, ucp_Sc },
|
|
||||||
{ 1045, PT_SC, ucp_Sharada },
|
|
||||||
{ 1053, PT_SC, ucp_Shavian },
|
|
||||||
{ 1061, PT_SC, ucp_Siddham },
|
|
||||||
{ 1069, PT_SC, ucp_Sinhala },
|
|
||||||
{ 1077, PT_PC, ucp_Sk },
|
|
||||||
{ 1080, PT_PC, ucp_Sm },
|
|
||||||
{ 1083, PT_PC, ucp_So },
|
|
||||||
{ 1086, PT_SC, ucp_Sora_Sompeng },
|
|
||||||
{ 1099, PT_SC, ucp_Sundanese },
|
|
||||||
{ 1109, PT_SC, ucp_Syloti_Nagri },
|
|
||||||
{ 1122, PT_SC, ucp_Syriac },
|
|
||||||
{ 1129, PT_SC, ucp_Tagalog },
|
|
||||||
{ 1137, PT_SC, ucp_Tagbanwa },
|
|
||||||
{ 1146, PT_SC, ucp_Tai_Le },
|
|
||||||
{ 1153, PT_SC, ucp_Tai_Tham },
|
|
||||||
{ 1162, PT_SC, ucp_Tai_Viet },
|
|
||||||
{ 1171, PT_SC, ucp_Takri },
|
|
||||||
{ 1177, PT_SC, ucp_Tamil },
|
|
||||||
{ 1183, PT_SC, ucp_Telugu },
|
|
||||||
{ 1190, PT_SC, ucp_Thaana },
|
|
||||||
{ 1197, PT_SC, ucp_Thai },
|
|
||||||
{ 1202, PT_SC, ucp_Tibetan },
|
|
||||||
{ 1210, PT_SC, ucp_Tifinagh },
|
|
||||||
{ 1219, PT_SC, ucp_Tirhuta },
|
|
||||||
{ 1227, PT_SC, ucp_Ugaritic },
|
|
||||||
{ 1236, PT_SC, ucp_Vai },
|
|
||||||
{ 1240, PT_SC, ucp_Warang_Citi },
|
|
||||||
{ 1252, PT_ALNUM, 0 },
|
|
||||||
{ 1256, PT_PXSPACE, 0 },
|
|
||||||
{ 1260, PT_SPACE, 0 },
|
|
||||||
{ 1264, PT_UCNC, 0 },
|
|
||||||
{ 1268, PT_WORD, 0 },
|
|
||||||
{ 1272, PT_SC, ucp_Yi },
|
|
||||||
{ 1275, PT_GC, ucp_Z },
|
|
||||||
{ 1277, PT_PC, ucp_Zl },
|
|
||||||
{ 1280, PT_PC, ucp_Zp },
|
|
||||||
{ 1283, PT_PC, ucp_Zs }
|
|
||||||
};
|
|
||||||
|
|
||||||
const int PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);
|
|
||||||
|
|
||||||
#endif /* SUPPORT_UTF */
|
|
||||||
|
|
||||||
/* End of pcre_tables.c */
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,302 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2013 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains an internal function for validating UTF-8 character
|
|
||||||
strings. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Validate a UTF-8 string *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function is called (optionally) at the start of compile or match, to
|
|
||||||
check that a supposed UTF-8 string is actually valid. The early check means
|
|
||||||
that subsequent code can assume it is dealing with a valid string. The check
|
|
||||||
can be turned off for maximum performance, but the consequences of supplying an
|
|
||||||
invalid string are then undefined.
|
|
||||||
|
|
||||||
Originally, this function checked according to RFC 2279, allowing for values in
|
|
||||||
the range 0 to 0x7fffffff, up to 6 bytes long, but ensuring that they were in
|
|
||||||
the canonical format. Once somebody had pointed out RFC 3629 to me (it
|
|
||||||
obsoletes 2279), additional restrictions were applied. The values are now
|
|
||||||
limited to be between 0 and 0x0010ffff, no more than 4 bytes long, and the
|
|
||||||
subrange 0xd000 to 0xdfff is excluded. However, the format of 5-byte and 6-byte
|
|
||||||
characters is still checked.
|
|
||||||
|
|
||||||
From release 8.13 more information about the details of the error are passed
|
|
||||||
back in the returned value:
|
|
||||||
|
|
||||||
PCRE_UTF8_ERR0 No error
|
|
||||||
PCRE_UTF8_ERR1 Missing 1 byte at the end of the string
|
|
||||||
PCRE_UTF8_ERR2 Missing 2 bytes at the end of the string
|
|
||||||
PCRE_UTF8_ERR3 Missing 3 bytes at the end of the string
|
|
||||||
PCRE_UTF8_ERR4 Missing 4 bytes at the end of the string
|
|
||||||
PCRE_UTF8_ERR5 Missing 5 bytes at the end of the string
|
|
||||||
PCRE_UTF8_ERR6 2nd-byte's two top bits are not 0x80
|
|
||||||
PCRE_UTF8_ERR7 3rd-byte's two top bits are not 0x80
|
|
||||||
PCRE_UTF8_ERR8 4th-byte's two top bits are not 0x80
|
|
||||||
PCRE_UTF8_ERR9 5th-byte's two top bits are not 0x80
|
|
||||||
PCRE_UTF8_ERR10 6th-byte's two top bits are not 0x80
|
|
||||||
PCRE_UTF8_ERR11 5-byte character is not permitted by RFC 3629
|
|
||||||
PCRE_UTF8_ERR12 6-byte character is not permitted by RFC 3629
|
|
||||||
PCRE_UTF8_ERR13 4-byte character with value > 0x10ffff is not permitted
|
|
||||||
PCRE_UTF8_ERR14 3-byte character with value 0xd000-0xdfff is not permitted
|
|
||||||
PCRE_UTF8_ERR15 Overlong 2-byte sequence
|
|
||||||
PCRE_UTF8_ERR16 Overlong 3-byte sequence
|
|
||||||
PCRE_UTF8_ERR17 Overlong 4-byte sequence
|
|
||||||
PCRE_UTF8_ERR18 Overlong 5-byte sequence (won't ever occur)
|
|
||||||
PCRE_UTF8_ERR19 Overlong 6-byte sequence (won't ever occur)
|
|
||||||
PCRE_UTF8_ERR20 Isolated 0x80 byte (not within UTF-8 character)
|
|
||||||
PCRE_UTF8_ERR21 Byte with the illegal value 0xfe or 0xff
|
|
||||||
PCRE_UTF8_ERR22 Unused (was non-character)
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
string points to the string
|
|
||||||
length length of string, or -1 if the string is zero-terminated
|
|
||||||
errp pointer to an error position offset variable
|
|
||||||
|
|
||||||
Returns: = 0 if the string is a valid UTF-8 string
|
|
||||||
> 0 otherwise, setting the offset of the bad character
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
PRIV(valid_utf)(PCRE_PUCHAR string, int length, int *erroroffset)
|
|
||||||
{
|
|
||||||
#ifdef SUPPORT_UTF
|
|
||||||
register PCRE_PUCHAR p;
|
|
||||||
|
|
||||||
if (length < 0)
|
|
||||||
{
|
|
||||||
for (p = string; *p != 0; p++);
|
|
||||||
length = (int)(p - string);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (p = string; length-- > 0; p++)
|
|
||||||
{
|
|
||||||
register pcre_uchar ab, c, d;
|
|
||||||
|
|
||||||
c = *p;
|
|
||||||
if (c < 128) continue; /* ASCII character */
|
|
||||||
|
|
||||||
if (c < 0xc0) /* Isolated 10xx xxxx byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string);
|
|
||||||
return PCRE_UTF8_ERR20;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c >= 0xfe) /* Invalid 0xfe or 0xff bytes */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string);
|
|
||||||
return PCRE_UTF8_ERR21;
|
|
||||||
}
|
|
||||||
|
|
||||||
ab = PRIV(utf8_table4)[c & 0x3f]; /* Number of additional bytes */
|
|
||||||
if (length < ab)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string); /* Missing bytes */
|
|
||||||
return ab - length; /* Codes ERR1 to ERR5 */
|
|
||||||
}
|
|
||||||
length -= ab; /* Length remaining */
|
|
||||||
|
|
||||||
/* Check top bits in the second byte */
|
|
||||||
|
|
||||||
if (((d = *(++p)) & 0xc0) != 0x80)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 1;
|
|
||||||
return PCRE_UTF8_ERR6;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For each length, check that the remaining bytes start with the 0x80 bit
|
|
||||||
set and not the 0x40 bit. Then check for an overlong sequence, and for the
|
|
||||||
excluded range 0xd800 to 0xdfff. */
|
|
||||||
|
|
||||||
switch (ab)
|
|
||||||
{
|
|
||||||
/* 2-byte character. No further bytes to check for 0x80. Check first byte
|
|
||||||
for for xx00 000x (overlong sequence). */
|
|
||||||
|
|
||||||
case 1: if ((c & 0x3e) == 0)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 1;
|
|
||||||
return PCRE_UTF8_ERR15;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* 3-byte character. Check third byte for 0x80. Then check first 2 bytes
|
|
||||||
for 1110 0000, xx0x xxxx (overlong sequence) or
|
|
||||||
1110 1101, 1010 xxxx (0xd800 - 0xdfff) */
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Third byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 2;
|
|
||||||
return PCRE_UTF8_ERR7;
|
|
||||||
}
|
|
||||||
if (c == 0xe0 && (d & 0x20) == 0)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 2;
|
|
||||||
return PCRE_UTF8_ERR16;
|
|
||||||
}
|
|
||||||
if (c == 0xed && d >= 0xa0)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 2;
|
|
||||||
return PCRE_UTF8_ERR14;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* 4-byte character. Check 3rd and 4th bytes for 0x80. Then check first 2
|
|
||||||
bytes for for 1111 0000, xx00 xxxx (overlong sequence), then check for a
|
|
||||||
character greater than 0x0010ffff (f4 8f bf bf) */
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Third byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 2;
|
|
||||||
return PCRE_UTF8_ERR7;
|
|
||||||
}
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Fourth byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 3;
|
|
||||||
return PCRE_UTF8_ERR8;
|
|
||||||
}
|
|
||||||
if (c == 0xf0 && (d & 0x30) == 0)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 3;
|
|
||||||
return PCRE_UTF8_ERR17;
|
|
||||||
}
|
|
||||||
if (c > 0xf4 || (c == 0xf4 && d > 0x8f))
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 3;
|
|
||||||
return PCRE_UTF8_ERR13;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* 5-byte and 6-byte characters are not allowed by RFC 3629, and will be
|
|
||||||
rejected by the length test below. However, we do the appropriate tests
|
|
||||||
here so that overlong sequences get diagnosed, and also in case there is
|
|
||||||
ever an option for handling these larger code points. */
|
|
||||||
|
|
||||||
/* 5-byte character. Check 3rd, 4th, and 5th bytes for 0x80. Then check for
|
|
||||||
1111 1000, xx00 0xxx */
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Third byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 2;
|
|
||||||
return PCRE_UTF8_ERR7;
|
|
||||||
}
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Fourth byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 3;
|
|
||||||
return PCRE_UTF8_ERR8;
|
|
||||||
}
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Fifth byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 4;
|
|
||||||
return PCRE_UTF8_ERR9;
|
|
||||||
}
|
|
||||||
if (c == 0xf8 && (d & 0x38) == 0)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 4;
|
|
||||||
return PCRE_UTF8_ERR18;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* 6-byte character. Check 3rd-6th bytes for 0x80. Then check for
|
|
||||||
1111 1100, xx00 00xx. */
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Third byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 2;
|
|
||||||
return PCRE_UTF8_ERR7;
|
|
||||||
}
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Fourth byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 3;
|
|
||||||
return PCRE_UTF8_ERR8;
|
|
||||||
}
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Fifth byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 4;
|
|
||||||
return PCRE_UTF8_ERR9;
|
|
||||||
}
|
|
||||||
if ((*(++p) & 0xc0) != 0x80) /* Sixth byte */
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 5;
|
|
||||||
return PCRE_UTF8_ERR10;
|
|
||||||
}
|
|
||||||
if (c == 0xfc && (d & 0x3c) == 0)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - 5;
|
|
||||||
return PCRE_UTF8_ERR19;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Character is valid under RFC 2279, but 4-byte and 5-byte characters are
|
|
||||||
excluded by RFC 3629. The pointer p is currently at the last byte of the
|
|
||||||
character. */
|
|
||||||
|
|
||||||
if (ab > 3)
|
|
||||||
{
|
|
||||||
*erroroffset = (int)(p - string) - ab;
|
|
||||||
return (ab == 4)? PCRE_UTF8_ERR11 : PCRE_UTF8_ERR12;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* Not SUPPORT_UTF */
|
|
||||||
(void)(string); /* Keep picky compilers happy */
|
|
||||||
(void)(length);
|
|
||||||
(void)(erroroffset);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return PCRE_UTF8_ERR0; /* This indicates success */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_valid_utf8.c */
|
|
||||||
@ -1,99 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2012 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains the external function pcre_version(), which returns a
|
|
||||||
string that identifies the PCRE version that is in use. */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Return version string *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* These macros are the standard way of turning unquoted text into C strings.
|
|
||||||
They allow macros like PCRE_MAJOR to be defined without quotes, which is
|
|
||||||
convenient for user programs that want to test its value. */
|
|
||||||
|
|
||||||
#define STRING(a) # a
|
|
||||||
#define XSTRING(s) STRING(s)
|
|
||||||
|
|
||||||
/* A problem turned up with PCRE_PRERELEASE, which is defined empty for
|
|
||||||
production releases. Originally, it was used naively in this code:
|
|
||||||
|
|
||||||
return XSTRING(PCRE_MAJOR)
|
|
||||||
"." XSTRING(PCRE_MINOR)
|
|
||||||
XSTRING(PCRE_PRERELEASE)
|
|
||||||
" " XSTRING(PCRE_DATE);
|
|
||||||
|
|
||||||
However, when PCRE_PRERELEASE is empty, this leads to an attempted expansion of
|
|
||||||
STRING(). The C standard states: "If (before argument substitution) any
|
|
||||||
argument consists of no preprocessing tokens, the behavior is undefined." It
|
|
||||||
turns out the gcc treats this case as a single empty string - which is what we
|
|
||||||
really want - but Visual C grumbles about the lack of an argument for the
|
|
||||||
macro. Unfortunately, both are within their rights. To cope with both ways of
|
|
||||||
handling this, I had resort to some messy hackery that does a test at run time.
|
|
||||||
I could find no way of detecting that a macro is defined as an empty string at
|
|
||||||
pre-processor time. This hack uses a standard trick for avoiding calling
|
|
||||||
the STRING macro with an empty argument when doing the test. */
|
|
||||||
|
|
||||||
#if defined COMPILE_PCRE8
|
|
||||||
PCRE_EXP_DEFN const char * PCRE_CALL_CONVENTION
|
|
||||||
pcre_version(void)
|
|
||||||
#elif defined COMPILE_PCRE16
|
|
||||||
PCRE_EXP_DEFN const char * PCRE_CALL_CONVENTION
|
|
||||||
pcre16_version(void)
|
|
||||||
#elif defined COMPILE_PCRE32
|
|
||||||
PCRE_EXP_DEFN const char * PCRE_CALL_CONVENTION
|
|
||||||
pcre32_version(void)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
return (XSTRING(Z PCRE_PRERELEASE)[1] == 0)?
|
|
||||||
XSTRING(PCRE_MAJOR.PCRE_MINOR PCRE_DATE) :
|
|
||||||
XSTRING(PCRE_MAJOR.PCRE_MINOR) XSTRING(PCRE_PRERELEASE PCRE_DATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_version.c */
|
|
||||||
@ -1,269 +0,0 @@
|
|||||||
#define HAVE_CONFIG_H
|
|
||||||
/*************************************************
|
|
||||||
* Perl-Compatible Regular Expressions *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* PCRE is a library of functions to support regular expressions whose syntax
|
|
||||||
and semantics are as close as possible to those of the Perl 5 language.
|
|
||||||
|
|
||||||
Written by Philip Hazel
|
|
||||||
Copyright (c) 1997-2013 University of Cambridge
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the University of Cambridge nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* This module contains an internal function that is used to match an extended
|
|
||||||
class. It is used by both pcre_exec() and pcre_def_exec(). */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pcre_internal.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************
|
|
||||||
* Match character against an XCLASS *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
/* This function is called to match a character against an extended class that
|
|
||||||
might contain values > 255 and/or Unicode properties.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
c the character
|
|
||||||
data points to the flag byte of the XCLASS data
|
|
||||||
|
|
||||||
Returns: TRUE if character matches, else FALSE
|
|
||||||
*/
|
|
||||||
|
|
||||||
BOOL
|
|
||||||
PRIV(xclass)(pcre_uint32 c, const pcre_uchar *data, BOOL utf)
|
|
||||||
{
|
|
||||||
pcre_uchar t;
|
|
||||||
BOOL negated = (*data & XCL_NOT) != 0;
|
|
||||||
|
|
||||||
(void)utf;
|
|
||||||
#ifdef COMPILE_PCRE8
|
|
||||||
/* In 8 bit mode, this must always be TRUE. Help the compiler to know that. */
|
|
||||||
utf = TRUE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Character values < 256 are matched against a bitmap, if one is present. If
|
|
||||||
not, we still carry on, because there may be ranges that start below 256 in the
|
|
||||||
additional data. */
|
|
||||||
|
|
||||||
if (c < 256)
|
|
||||||
{
|
|
||||||
if ((*data & XCL_HASPROP) == 0)
|
|
||||||
{
|
|
||||||
if ((*data & XCL_MAP) == 0) return negated;
|
|
||||||
return (((pcre_uint8 *)(data + 1))[c/8] & (1 << (c&7))) != 0;
|
|
||||||
}
|
|
||||||
if ((*data & XCL_MAP) != 0 &&
|
|
||||||
(((pcre_uint8 *)(data + 1))[c/8] & (1 << (c&7))) != 0)
|
|
||||||
return !negated; /* char found */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* First skip the bit map if present. Then match against the list of Unicode
|
|
||||||
properties or large chars or ranges that end with a large char. We won't ever
|
|
||||||
encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */
|
|
||||||
|
|
||||||
if ((*data++ & XCL_MAP) != 0) data += 32 / sizeof(pcre_uchar);
|
|
||||||
|
|
||||||
while ((t = *data++) != XCL_END)
|
|
||||||
{
|
|
||||||
pcre_uint32 x, y;
|
|
||||||
if (t == XCL_SINGLE)
|
|
||||||
{
|
|
||||||
#ifdef SUPPORT_UTF
|
|
||||||
if (utf)
|
|
||||||
{
|
|
||||||
GETCHARINC(x, data); /* macro generates multiple statements */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
x = *data++;
|
|
||||||
if (c == x) return !negated;
|
|
||||||
}
|
|
||||||
else if (t == XCL_RANGE)
|
|
||||||
{
|
|
||||||
#ifdef SUPPORT_UTF
|
|
||||||
if (utf)
|
|
||||||
{
|
|
||||||
GETCHARINC(x, data); /* macro generates multiple statements */
|
|
||||||
GETCHARINC(y, data); /* macro generates multiple statements */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
x = *data++;
|
|
||||||
y = *data++;
|
|
||||||
}
|
|
||||||
if (c >= x && c <= y) return !negated;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SUPPORT_UCP
|
|
||||||
else /* XCL_PROP & XCL_NOTPROP */
|
|
||||||
{
|
|
||||||
const ucd_record *prop = GET_UCD(c);
|
|
||||||
BOOL isprop = t == XCL_PROP;
|
|
||||||
|
|
||||||
switch(*data)
|
|
||||||
{
|
|
||||||
case PT_ANY:
|
|
||||||
if (isprop) return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PT_LAMP:
|
|
||||||
if ((prop->chartype == ucp_Lu || prop->chartype == ucp_Ll ||
|
|
||||||
prop->chartype == ucp_Lt) == isprop) return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PT_GC:
|
|
||||||
if ((data[1] == PRIV(ucp_gentype)[prop->chartype]) == isprop)
|
|
||||||
return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PT_PC:
|
|
||||||
if ((data[1] == prop->chartype) == isprop) return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PT_SC:
|
|
||||||
if ((data[1] == prop->script) == isprop) return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PT_ALNUM:
|
|
||||||
if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L ||
|
|
||||||
PRIV(ucp_gentype)[prop->chartype] == ucp_N) == isprop)
|
|
||||||
return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Perl space used to exclude VT, but from Perl 5.18 it is included,
|
|
||||||
which means that Perl space and POSIX space are now identical. PCRE
|
|
||||||
was changed at release 8.34. */
|
|
||||||
|
|
||||||
case PT_SPACE: /* Perl space */
|
|
||||||
case PT_PXSPACE: /* POSIX space */
|
|
||||||
switch(c)
|
|
||||||
{
|
|
||||||
HSPACE_CASES:
|
|
||||||
VSPACE_CASES:
|
|
||||||
if (isprop) return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if ((PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == isprop)
|
|
||||||
return !negated;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PT_WORD:
|
|
||||||
if ((PRIV(ucp_gentype)[prop->chartype] == ucp_L ||
|
|
||||||
PRIV(ucp_gentype)[prop->chartype] == ucp_N || c == CHAR_UNDERSCORE)
|
|
||||||
== isprop)
|
|
||||||
return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PT_UCNC:
|
|
||||||
if (c < 0xa0)
|
|
||||||
{
|
|
||||||
if ((c == CHAR_DOLLAR_SIGN || c == CHAR_COMMERCIAL_AT ||
|
|
||||||
c == CHAR_GRAVE_ACCENT) == isprop)
|
|
||||||
return !negated;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((c < 0xd800 || c > 0xdfff) == isprop)
|
|
||||||
return !negated;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* The following three properties can occur only in an XCLASS, as there
|
|
||||||
is no \p or \P coding for them. */
|
|
||||||
|
|
||||||
/* Graphic character. Implement this as not Z (space or separator) and
|
|
||||||
not C (other), except for Cf (format) with a few exceptions. This seems
|
|
||||||
to be what Perl does. The exceptional characters are:
|
|
||||||
|
|
||||||
U+061C Arabic Letter Mark
|
|
||||||
U+180E Mongolian Vowel Separator
|
|
||||||
U+2066 - U+2069 Various "isolate"s
|
|
||||||
*/
|
|
||||||
|
|
||||||
case PT_PXGRAPH:
|
|
||||||
if ((PRIV(ucp_gentype)[prop->chartype] != ucp_Z &&
|
|
||||||
(PRIV(ucp_gentype)[prop->chartype] != ucp_C ||
|
|
||||||
(prop->chartype == ucp_Cf &&
|
|
||||||
c != 0x061c && c != 0x180e && (c < 0x2066 || c > 0x2069))
|
|
||||||
)) == isprop)
|
|
||||||
return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Printable character: same as graphic, with the addition of Zs, i.e.
|
|
||||||
not Zl and not Zp, and U+180E. */
|
|
||||||
|
|
||||||
case PT_PXPRINT:
|
|
||||||
if ((prop->chartype != ucp_Zl &&
|
|
||||||
prop->chartype != ucp_Zp &&
|
|
||||||
(PRIV(ucp_gentype)[prop->chartype] != ucp_C ||
|
|
||||||
(prop->chartype == ucp_Cf &&
|
|
||||||
c != 0x061c && (c < 0x2066 || c > 0x2069))
|
|
||||||
)) == isprop)
|
|
||||||
return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Punctuation: all Unicode punctuation, plus ASCII characters that
|
|
||||||
Unicode treats as symbols rather than punctuation, for Perl
|
|
||||||
compatibility (these are $+<=>^`|~). */
|
|
||||||
|
|
||||||
case PT_PXPUNCT:
|
|
||||||
if ((PRIV(ucp_gentype)[prop->chartype] == ucp_P ||
|
|
||||||
(c < 128 && PRIV(ucp_gentype)[prop->chartype] == ucp_S)) == isprop)
|
|
||||||
return !negated;
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* This should never occur, but compilers may mutter if there is no
|
|
||||||
default. */
|
|
||||||
|
|
||||||
default:
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
data += 2;
|
|
||||||
}
|
|
||||||
#endif /* SUPPORT_UCP */
|
|
||||||
}
|
|
||||||
|
|
||||||
return negated; /* char did not match */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* End of pcre_xclass.c */
|
|
||||||
@ -1,224 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Unicode Property Table handler *
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
#ifndef _UCP_H
|
|
||||||
#define _UCP_H
|
|
||||||
|
|
||||||
/* This file contains definitions of the property values that are returned by
|
|
||||||
the UCD access macros. New values that are added for new releases of Unicode
|
|
||||||
should always be at the end of each enum, for backwards compatibility.
|
|
||||||
|
|
||||||
IMPORTANT: Note also that the specific numeric values of the enums have to be
|
|
||||||
the same as the values that are generated by the maint/MultiStage2.py script,
|
|
||||||
where the equivalent property descriptive names are listed in vectors.
|
|
||||||
|
|
||||||
ALSO: The specific values of the first two enums are assumed for the table
|
|
||||||
called catposstab in pcre_compile.c. */
|
|
||||||
|
|
||||||
/* These are the general character categories. */
|
|
||||||
|
|
||||||
enum {
|
|
||||||
ucp_C, /* Other */
|
|
||||||
ucp_L, /* Letter */
|
|
||||||
ucp_M, /* Mark */
|
|
||||||
ucp_N, /* Number */
|
|
||||||
ucp_P, /* Punctuation */
|
|
||||||
ucp_S, /* Symbol */
|
|
||||||
ucp_Z /* Separator */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* These are the particular character categories. */
|
|
||||||
|
|
||||||
enum {
|
|
||||||
ucp_Cc, /* Control */
|
|
||||||
ucp_Cf, /* Format */
|
|
||||||
ucp_Cn, /* Unassigned */
|
|
||||||
ucp_Co, /* Private use */
|
|
||||||
ucp_Cs, /* Surrogate */
|
|
||||||
ucp_Ll, /* Lower case letter */
|
|
||||||
ucp_Lm, /* Modifier letter */
|
|
||||||
ucp_Lo, /* Other letter */
|
|
||||||
ucp_Lt, /* Title case letter */
|
|
||||||
ucp_Lu, /* Upper case letter */
|
|
||||||
ucp_Mc, /* Spacing mark */
|
|
||||||
ucp_Me, /* Enclosing mark */
|
|
||||||
ucp_Mn, /* Non-spacing mark */
|
|
||||||
ucp_Nd, /* Decimal number */
|
|
||||||
ucp_Nl, /* Letter number */
|
|
||||||
ucp_No, /* Other number */
|
|
||||||
ucp_Pc, /* Connector punctuation */
|
|
||||||
ucp_Pd, /* Dash punctuation */
|
|
||||||
ucp_Pe, /* Close punctuation */
|
|
||||||
ucp_Pf, /* Final punctuation */
|
|
||||||
ucp_Pi, /* Initial punctuation */
|
|
||||||
ucp_Po, /* Other punctuation */
|
|
||||||
ucp_Ps, /* Open punctuation */
|
|
||||||
ucp_Sc, /* Currency symbol */
|
|
||||||
ucp_Sk, /* Modifier symbol */
|
|
||||||
ucp_Sm, /* Mathematical symbol */
|
|
||||||
ucp_So, /* Other symbol */
|
|
||||||
ucp_Zl, /* Line separator */
|
|
||||||
ucp_Zp, /* Paragraph separator */
|
|
||||||
ucp_Zs /* Space separator */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* These are grapheme break properties. Note that the code for processing them
|
|
||||||
assumes that the values are less than 16. If more values are added that take
|
|
||||||
the number to 16 or more, the code will have to be rewritten. */
|
|
||||||
|
|
||||||
enum {
|
|
||||||
ucp_gbCR, /* 0 */
|
|
||||||
ucp_gbLF, /* 1 */
|
|
||||||
ucp_gbControl, /* 2 */
|
|
||||||
ucp_gbExtend, /* 3 */
|
|
||||||
ucp_gbPrepend, /* 4 */
|
|
||||||
ucp_gbSpacingMark, /* 5 */
|
|
||||||
ucp_gbL, /* 6 Hangul syllable type L */
|
|
||||||
ucp_gbV, /* 7 Hangul syllable type V */
|
|
||||||
ucp_gbT, /* 8 Hangul syllable type T */
|
|
||||||
ucp_gbLV, /* 9 Hangul syllable type LV */
|
|
||||||
ucp_gbLVT, /* 10 Hangul syllable type LVT */
|
|
||||||
ucp_gbRegionalIndicator, /* 11 */
|
|
||||||
ucp_gbOther /* 12 */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* These are the script identifications. */
|
|
||||||
|
|
||||||
enum {
|
|
||||||
ucp_Arabic,
|
|
||||||
ucp_Armenian,
|
|
||||||
ucp_Bengali,
|
|
||||||
ucp_Bopomofo,
|
|
||||||
ucp_Braille,
|
|
||||||
ucp_Buginese,
|
|
||||||
ucp_Buhid,
|
|
||||||
ucp_Canadian_Aboriginal,
|
|
||||||
ucp_Cherokee,
|
|
||||||
ucp_Common,
|
|
||||||
ucp_Coptic,
|
|
||||||
ucp_Cypriot,
|
|
||||||
ucp_Cyrillic,
|
|
||||||
ucp_Deseret,
|
|
||||||
ucp_Devanagari,
|
|
||||||
ucp_Ethiopic,
|
|
||||||
ucp_Georgian,
|
|
||||||
ucp_Glagolitic,
|
|
||||||
ucp_Gothic,
|
|
||||||
ucp_Greek,
|
|
||||||
ucp_Gujarati,
|
|
||||||
ucp_Gurmukhi,
|
|
||||||
ucp_Han,
|
|
||||||
ucp_Hangul,
|
|
||||||
ucp_Hanunoo,
|
|
||||||
ucp_Hebrew,
|
|
||||||
ucp_Hiragana,
|
|
||||||
ucp_Inherited,
|
|
||||||
ucp_Kannada,
|
|
||||||
ucp_Katakana,
|
|
||||||
ucp_Kharoshthi,
|
|
||||||
ucp_Khmer,
|
|
||||||
ucp_Lao,
|
|
||||||
ucp_Latin,
|
|
||||||
ucp_Limbu,
|
|
||||||
ucp_Linear_B,
|
|
||||||
ucp_Malayalam,
|
|
||||||
ucp_Mongolian,
|
|
||||||
ucp_Myanmar,
|
|
||||||
ucp_New_Tai_Lue,
|
|
||||||
ucp_Ogham,
|
|
||||||
ucp_Old_Italic,
|
|
||||||
ucp_Old_Persian,
|
|
||||||
ucp_Oriya,
|
|
||||||
ucp_Osmanya,
|
|
||||||
ucp_Runic,
|
|
||||||
ucp_Shavian,
|
|
||||||
ucp_Sinhala,
|
|
||||||
ucp_Syloti_Nagri,
|
|
||||||
ucp_Syriac,
|
|
||||||
ucp_Tagalog,
|
|
||||||
ucp_Tagbanwa,
|
|
||||||
ucp_Tai_Le,
|
|
||||||
ucp_Tamil,
|
|
||||||
ucp_Telugu,
|
|
||||||
ucp_Thaana,
|
|
||||||
ucp_Thai,
|
|
||||||
ucp_Tibetan,
|
|
||||||
ucp_Tifinagh,
|
|
||||||
ucp_Ugaritic,
|
|
||||||
ucp_Yi,
|
|
||||||
/* New for Unicode 5.0: */
|
|
||||||
ucp_Balinese,
|
|
||||||
ucp_Cuneiform,
|
|
||||||
ucp_Nko,
|
|
||||||
ucp_Phags_Pa,
|
|
||||||
ucp_Phoenician,
|
|
||||||
/* New for Unicode 5.1: */
|
|
||||||
ucp_Carian,
|
|
||||||
ucp_Cham,
|
|
||||||
ucp_Kayah_Li,
|
|
||||||
ucp_Lepcha,
|
|
||||||
ucp_Lycian,
|
|
||||||
ucp_Lydian,
|
|
||||||
ucp_Ol_Chiki,
|
|
||||||
ucp_Rejang,
|
|
||||||
ucp_Saurashtra,
|
|
||||||
ucp_Sundanese,
|
|
||||||
ucp_Vai,
|
|
||||||
/* New for Unicode 5.2: */
|
|
||||||
ucp_Avestan,
|
|
||||||
ucp_Bamum,
|
|
||||||
ucp_Egyptian_Hieroglyphs,
|
|
||||||
ucp_Imperial_Aramaic,
|
|
||||||
ucp_Inscriptional_Pahlavi,
|
|
||||||
ucp_Inscriptional_Parthian,
|
|
||||||
ucp_Javanese,
|
|
||||||
ucp_Kaithi,
|
|
||||||
ucp_Lisu,
|
|
||||||
ucp_Meetei_Mayek,
|
|
||||||
ucp_Old_South_Arabian,
|
|
||||||
ucp_Old_Turkic,
|
|
||||||
ucp_Samaritan,
|
|
||||||
ucp_Tai_Tham,
|
|
||||||
ucp_Tai_Viet,
|
|
||||||
/* New for Unicode 6.0.0: */
|
|
||||||
ucp_Batak,
|
|
||||||
ucp_Brahmi,
|
|
||||||
ucp_Mandaic,
|
|
||||||
/* New for Unicode 6.1.0: */
|
|
||||||
ucp_Chakma,
|
|
||||||
ucp_Meroitic_Cursive,
|
|
||||||
ucp_Meroitic_Hieroglyphs,
|
|
||||||
ucp_Miao,
|
|
||||||
ucp_Sharada,
|
|
||||||
ucp_Sora_Sompeng,
|
|
||||||
ucp_Takri,
|
|
||||||
/* New for Unicode 7.0.0: */
|
|
||||||
ucp_Bassa_Vah,
|
|
||||||
ucp_Caucasian_Albanian,
|
|
||||||
ucp_Duployan,
|
|
||||||
ucp_Elbasan,
|
|
||||||
ucp_Grantha,
|
|
||||||
ucp_Khojki,
|
|
||||||
ucp_Khudawadi,
|
|
||||||
ucp_Linear_A,
|
|
||||||
ucp_Mahajani,
|
|
||||||
ucp_Manichaean,
|
|
||||||
ucp_Mende_Kikakui,
|
|
||||||
ucp_Modi,
|
|
||||||
ucp_Mro,
|
|
||||||
ucp_Nabataean,
|
|
||||||
ucp_Old_North_Arabian,
|
|
||||||
ucp_Old_Permic,
|
|
||||||
ucp_Pahawh_Hmong,
|
|
||||||
ucp_Palmyrene,
|
|
||||||
ucp_Psalter_Pahlavi,
|
|
||||||
ucp_Pau_Cin_Hau,
|
|
||||||
ucp_Siddham,
|
|
||||||
ucp_Tirhuta,
|
|
||||||
ucp_Warang_Citi
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* End of ucp.h */
|
|
||||||
Loading…
Reference in New Issue
Block a user