summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2018-03-06 14:15:14 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2018-03-10 01:07:00 +0100
commitd48b233991c6ae916ca2b7e8d7c965fbc7eb00b7 (patch)
tree5277df17db6fa4a69b40f1a7b4152fd56bb910cb
parent4095f63a902ae211accab2663515dd1c689a0de2 (diff)
downloadphp-git-d48b233991c6ae916ca2b7e8d7c965fbc7eb00b7.tar.gz
Update to Oniguruma 6.7.1
We also apply the still relevant parts of `oniguruma.patch` and update the patch accordingly.
-rw-r--r--NEWS1
-rw-r--r--ext/mbstring/config.w322
-rw-r--r--ext/mbstring/oniguruma.patch81
-rw-r--r--ext/mbstring/oniguruma/HISTORY70
-rw-r--r--ext/mbstring/oniguruma/INSTALL320
-rw-r--r--ext/mbstring/oniguruma/README40
-rw-r--r--ext/mbstring/oniguruma/README.md77
-rw-r--r--ext/mbstring/oniguruma/README_japanese (renamed from ext/mbstring/oniguruma/README.ja)14
-rw-r--r--ext/mbstring/oniguruma/doc/API15
-rw-r--r--ext/mbstring/oniguruma/doc/API.ja578
-rw-r--r--ext/mbstring/oniguruma/doc/FAQ6
-rw-r--r--ext/mbstring/oniguruma/doc/FAQ.ja14
-rw-r--r--ext/mbstring/oniguruma/doc/RE111
-rw-r--r--ext/mbstring/oniguruma/doc/RE.ja572
-rw-r--r--ext/mbstring/oniguruma/doc/UNICODE_PROPERTIES1390
-rwxr-xr-xext/mbstring/oniguruma/index.html8
-rw-r--r--ext/mbstring/oniguruma/index_ja.html8
-rw-r--r--ext/mbstring/oniguruma/src/big5.c2
-rw-r--r--ext/mbstring/oniguruma/src/euc_jp.c10
-rw-r--r--ext/mbstring/oniguruma/src/onigposix.h7
-rw-r--r--ext/mbstring/oniguruma/src/oniguruma.h53
-rw-r--r--ext/mbstring/oniguruma/src/regcomp.c5287
-rw-r--r--ext/mbstring/oniguruma/src/regenc.c20
-rw-r--r--ext/mbstring/oniguruma/src/regenc.h19
-rw-r--r--ext/mbstring/oniguruma/src/regerror.c108
-rw-r--r--ext/mbstring/oniguruma/src/regexec.c2164
-rw-r--r--ext/mbstring/oniguruma/src/regext.c10
-rw-r--r--ext/mbstring/oniguruma/src/reggnu.c4
-rw-r--r--ext/mbstring/oniguruma/src/regint.h463
-rw-r--r--ext/mbstring/oniguruma/src/regparse.c2568
-rw-r--r--ext/mbstring/oniguruma/src/regparse.h448
-rw-r--r--ext/mbstring/oniguruma/src/regposix.c8
-rw-r--r--ext/mbstring/oniguruma/src/regsyntax.c25
-rw-r--r--ext/mbstring/oniguruma/src/regversion.c4
-rw-r--r--ext/mbstring/oniguruma/src/sjis.c10
-rw-r--r--ext/mbstring/oniguruma/src/st.c484
-rw-r--r--ext/mbstring/oniguruma/src/unicode.c567
-rw-r--r--ext/mbstring/oniguruma/src/unicode_egcb_data.c1406
-rw-r--r--ext/mbstring/oniguruma/src/unicode_fold1_key.c2
-rw-r--r--ext/mbstring/oniguruma/src/unicode_fold2_key.c2
-rw-r--r--ext/mbstring/oniguruma/src/unicode_fold3_key.c2
-rw-r--r--ext/mbstring/oniguruma/src/unicode_property_data.c22244
-rw-r--r--ext/mbstring/oniguruma/src/unicode_property_data_posix.c100
-rw-r--r--ext/mbstring/oniguruma/src/utf8.c47
44 files changed, 22554 insertions, 16817 deletions
diff --git a/NEWS b/NEWS
index a342d75048..6ab58e57ff 100644
--- a/NEWS
+++ b/NEWS
@@ -98,6 +98,7 @@ PHP NEWS
. Fixed bug #73528 (Crash in zif_mb_send_mail). (Nikita)
. Fixed bug #74929 (mbstring functions version 7.1.1 are slow compared to 5.3
on Windows). (Nikita)
+ . Update to Oniguruma 6.7.1. (cmb)
- ODBC:
. Removed support for ODBCRouter. (Kalle)
diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32
index 11fc88ebee..13e1e12605 100644
--- a/ext/mbstring/config.w32
+++ b/ext/mbstring/config.w32
@@ -17,7 +17,7 @@ if (PHP_MBSTRING != "no") {
ADD_FLAG("CFLAGS_MBSTRING", "-Iext/mbstring/libmbfl -Iext/mbstring/libmbfl/mbfl \
-Iext/mbstring/oniguruma /D NOT_RUBY=1 /D LIBMBFL_EXPORTS=1 \
/D HAVE_STDARG_PROTOTYPES=1 /D HAVE_CONFIG_H /D HAVE_STDLIB_H \
- /D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /D EXPORT /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1")
+ /D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /D ONIGURUMA_EXPORT /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1")
FSO.CopyFile("ext\\mbstring\\libmbfl\\config.h.w32",
"ext\\mbstring\\libmbfl\\config.h", true);
diff --git a/ext/mbstring/oniguruma.patch b/ext/mbstring/oniguruma.patch
index 7c21f622fb..aa248839cf 100644
--- a/ext/mbstring/oniguruma.patch
+++ b/ext/mbstring/oniguruma.patch
@@ -1,61 +1,28 @@
-diff -wur oniguruma.orig/src/config.h.win32 oniguruma/src/config.h.win32
---- oniguruma.orig/src/config.h.win32 2017-07-13 17:12:45.228068900 +0200
-+++ oniguruma/src/config.h.win32 2017-07-13 16:11:19.955226200 +0200
+ ext/mbstring/oniguruma/src/config.h.win32 | 1 +
+ ext/mbstring/oniguruma/src/config.h.win64 | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/ext/mbstring/oniguruma/src/config.h.win32 b/ext/mbstring/oniguruma/src/config.h.win32
+index bdbdaf25c1..9a9c43f26d 100644
+--- a/ext/mbstring/oniguruma/src/config.h.win32
++++ b/ext/mbstring/oniguruma/src/config.h.win32
@@ -15,6 +15,7 @@
- #define SIZEOF_VOIDP 4
- #define SIZEOF_FLOAT 4
- #define SIZEOF_DOUBLE 8
+ #define SIZEOF_VOIDP 4
+ #define SIZEOF_FLOAT 4
+ #define SIZEOF_DOUBLE 8
+#define SIZEOF_SIZE_T 4
- #define HAVE_PROTOTYPES 1
- #define TOKEN_PASTE(x,y) x##y
- #define HAVE_STDARG_PROTOTYPES 1
-diff -wur oniguruma.orig/src/config.h.win64 oniguruma/src/config.h.win64
---- oniguruma.orig/src/config.h.win64 2017-07-13 17:12:45.273605000 +0200
-+++ oniguruma/src/config.h.win64 2017-07-13 16:11:19.957231300 +0200
+ #define HAVE_PROTOTYPES 1
+ #define TOKEN_PASTE(x,y) x##y
+ #define HAVE_STDARG_PROTOTYPES 1
+diff --git a/ext/mbstring/oniguruma/src/config.h.win64 b/ext/mbstring/oniguruma/src/config.h.win64
+index 01a86c7bb9..dec7b75773 100644
+--- a/ext/mbstring/oniguruma/src/config.h.win64
++++ b/ext/mbstring/oniguruma/src/config.h.win64
@@ -15,6 +15,7 @@
- #define SIZEOF_VOIDP 8
- #define SIZEOF_FLOAT 4
- #define SIZEOF_DOUBLE 8
+ #define SIZEOF_VOIDP 8
+ #define SIZEOF_FLOAT 4
+ #define SIZEOF_DOUBLE 8
+#define SIZEOF_SIZE_T 8
- #define HAVE_PROTOTYPES 1
- #define TOKEN_PASTE(x,y) x##y
- #define HAVE_STDARG_PROTOTYPES 1
-diff -wur oniguruma.orig/src/regint.h oniguruma/src/regint.h
---- oniguruma.orig/src/regint.h 2017-07-13 17:12:48.686073300 +0200
-+++ oniguruma/src/regint.h 2017-07-13 17:13:28.032286100 +0200
-@@ -201,17 +201,21 @@
- } while(0)
-
- /* sizeof(OnigCodePoint) */
-+#ifdef SIZEOF_SIZE_T
-+# define WORD_ALIGNMENT_SIZE SIZEOF_SIZE_T
-+#else
- #define WORD_ALIGNMENT_SIZE SIZEOF_LONG
-+#endif
-
- #define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\
- (pad_size) = WORD_ALIGNMENT_SIZE \
-- - ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\
-+ - ((size_t)(addr) % WORD_ALIGNMENT_SIZE);\
- if ((pad_size) == WORD_ALIGNMENT_SIZE) (pad_size) = 0;\
- } while (0)
-
- #define ALIGNMENT_RIGHT(addr) do {\
- (addr) += (WORD_ALIGNMENT_SIZE - 1);\
-- (addr) -= ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\
-+ (addr) -= ((size_t)(addr) % WORD_ALIGNMENT_SIZE);\
- } while (0)
-
- #endif /* PLATFORM_UNALIGNED_WORD_ACCESS */
-@@ -662,7 +666,11 @@
- BBuf* mbuf; /* multi-byte info or NULL */
- } CClassNode;
-
-+#ifdef _WIN64
-+typedef __int64 OnigStackIndex;
-+#else
- typedef long OnigStackIndex;
-+#endif
-
- typedef struct _OnigStackType {
- unsigned int type;
+ #define HAVE_PROTOTYPES 1
+ #define TOKEN_PASTE(x,y) x##y
+ #define HAVE_STDARG_PROTOTYPES 1
diff --git a/ext/mbstring/oniguruma/HISTORY b/ext/mbstring/oniguruma/HISTORY
index 74004e9743..4eee81ce7b 100644
--- a/ext/mbstring/oniguruma/HISTORY
+++ b/ext/mbstring/oniguruma/HISTORY
@@ -1,5 +1,75 @@
History
+2018/01/26: Version 6.7.1
+
+2018/01/25: disable USE_TRY_IN_MATCH_LIMIT by default
+2018/01/24: implement mechanism of try-in-match-limit
+2018/01/24: #76: rename EXPORT to ONIGURUMA_EXPORT
+2018/01/15: #73: update for automake 1.15.1
+2018/01/14: #74: update description of README
+2018/01/10: #72: Correct spelling and grammar in FAQ (English)
+2017/12/25: remove USE_COMBINATION_EXPLOSION_CHECK codes
+
+2017/12/11: Version 6.7.0
+
+2017/12/08: Disable \N and \O on ONIG_SYNTAX_RUBY
+2017/12/08: add ONIG_SYNTAX_ONIGURUMA (default syntax)
+2017/12/05: restructure StackType
+2017/11/13: implement subexp calls (?R), (?&name), (?-n), (?+n) for Perl syntax
+2017/09/25: use string pool of gperf for Unicode Property lookup function
+2017/09/16: fix #70: an empty greedy regex and a word boundary (.*\b) fails
+2017/09/13: remove a stack type STK_POS
+2017/09/08: fix #69: add a declaration of onig_end()
+2017/09/07: fix #68: Compilation failure in out-of-source build
+2017/09/03: [new] hexadecimal codepoint \uHHHH
+
+2017/08/30: Version 6.6.1
+
+2017/08/29: fix definition of \X to (?>\O(?:\Y\O)*)
+
+2017/08/28: Version 6.6.0
+
+2017/08/26: fix #67: can't compile with Visual Studio 2005
+2017/08/24: rename Absent clear to Range clear
+2017/08/21: [new] Extended Grapheme Cluster \X and boundary \y, \Y
+2017/08/17: fix: invalid index(ctype) value assigned to Unicode Block properties
+2017/08/16: --enable-crnl-as-line-terminator to be deprecated
+2017/08/15: [new] ASCII only mode options (?WDSP)
+2017/08/14: [new] ONIG_OPTION_XXXX_IS_ASCII options
+2017/08/11: disable OP_CCLASS_NODE
+2017/08/11: [spec] Absent clear restore previous range value at backtrack
+2017/08/07: optimize for simple one char repetition in Absent expression
+2017/08/07: fix: invalid impl. for reluctant repetition in Absent expression
+2017/08/04: remove compile switch USE_NAMED_GROUP
+
+2017/08/03: Version 6.5.0
+
+2017/07/30: [new] support Absent clear (Absent functions)
+2017/07/25: abolish configure option: --enable-combination-explosion-check
+2017/07/23: [new] support Absent functions (?~...)
+2017/07/14: fix #65: SIZEOF_SIZE_T doesn't exist on certain architecutres
+2017/07/11: [new] support \O (true anychar)
+2017/07/10: [new] support \K (keep)
+2017/07/10: add new node type: NODE_GIMMICK
+2017/07/07: [new] support \N (no newline)
+2017/07/05: [new] support \R (general newline)
+2017/07/05: [new] support if-then-else syntax
+2017/07/04: [new] support backref validity checker
+
+2017/07/03: Version 6.4.0
+
+2017/06/30: fix memory leaks
+2017/06/29: fix memory leaks
+2017/06/28: change encoding of doc/XXXX.ja from EUC-JP to UTF-8
+2017/06/28: update doc/RE, and doc/RE.ja
+2017/06/26: fix fatal bug of endless repeat check on Windows
+2017/06/26: PR #62 : add check for return values
+2017/06/23: [new] support call zero (\g{0})
+2017/06/23: [new] support relative call by positive number
+2017/06/23: [new] support relative back-reference by positive number
+2017/06/15: fix #60 : check value type
+2017/06/02: change output format for ONIG_DEBUG_COMPILE and ONIG_DEBUG_MATCH
+
2017/05/29: Version 6.3.0
2017/05/24: fix #60 : invalid state(CCS_VALUE) in parse_char_class()
diff --git a/ext/mbstring/oniguruma/INSTALL b/ext/mbstring/oniguruma/INSTALL
index 2099840756..8865734f81 100644
--- a/ext/mbstring/oniguruma/INSTALL
+++ b/ext/mbstring/oniguruma/INSTALL
@@ -1,8 +1,8 @@
Installation Instructions
*************************
-Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
-Inc.
+ Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
+Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
@@ -12,97 +12,96 @@ without warranty of any kind.
Basic Installation
==================
- Briefly, the shell command `./configure && make && make install'
+ Briefly, the shell command './configure && make && make install'
should configure, build, and install this package. The following
-more-detailed instructions are generic; see the `README' file for
+more-detailed instructions are generic; see the 'README' file for
instructions specific to this package. Some packages provide this
-`INSTALL' file but do not implement all of the features documented
+'INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
- The `configure' shell script attempts to guess correct values for
+ The 'configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
+those values to create a 'Makefile' in each directory of the package.
+It may also create one or more '.h' files containing system-dependent
+definitions. Finally, it creates a shell script 'config.status' that
you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
+file 'config.log' containing compiler output (useful mainly for
+debugging 'configure').
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
+ It can also use an optional file (typically called 'config.cache' and
+enabled with '--cache-file=config.cache' or simply '-C') that saves the
+results of its tests to speed up reconfiguring. Caching is disabled by
+default to prevent problems with accidental use of stale cache files.
If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
+to figure out how 'configure' could check whether to do them, and mail
+diffs or instructions to the address given in the 'README' so they can
be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
+some point 'config.cache' contains results you don't want to keep, you
may remove or edit it.
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
+ The file 'configure.ac' (or 'configure.in') is used to create
+'configure' by a program called 'autoconf'. You need 'configure.ac' if
+you want to change it or regenerate 'configure' using a newer version of
+'autoconf'.
The simplest way to compile this package is:
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system.
+ 1. 'cd' to the directory containing the package's source code and type
+ './configure' to configure the package for your system.
- Running `configure' might take a while. While running, it prints
+ Running 'configure' might take a while. While running, it prints
some messages telling which features it is checking for.
- 2. Type `make' to compile the package.
+ 2. Type 'make' to compile the package.
- 3. Optionally, type `make check' to run any self-tests that come with
+ 3. Optionally, type 'make check' to run any self-tests that come with
the package, generally using the just-built uninstalled binaries.
- 4. Type `make install' to install the programs and any data files and
+ 4. Type 'make install' to install the programs and any data files and
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
- user, and only the `make install' phase executed with root
+ user, and only the 'make install' phase executed with root
privileges.
- 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ 5. Optionally, type 'make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
- regular user, particularly if the prior `make install' required
+ regular user, particularly if the prior 'make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
+ source code directory by typing 'make clean'. To also remove the
+ files that 'configure' created (so you can compile the package for
+ a different kind of computer), type 'make distclean'. There is
+ also a 'make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
- 7. Often, you can also type `make uninstall' to remove the installed
+ 7. Often, you can also type 'make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
- 8. Some packages, particularly those that use Automake, provide `make
+ 8. Some packages, particularly those that use Automake, provide 'make
distcheck', which can by used by developers to test that all other
- targets like `make install' and `make uninstall' work correctly.
+ targets like 'make install' and 'make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. Run `./configure --help'
+the 'configure' script does not know about. Run './configure --help'
for details on some of the pertinent environment variables.
- You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here
-is an example:
+ You can give 'configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here is
+an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
@@ -113,21 +112,21 @@ Compiling For Multiple Architectures
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
-own directory. To do this, you can use GNU `make'. `cd' to the
+own directory. To do this, you can use GNU 'make'. 'cd' to the
directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'. This
-is known as a "VPATH" build.
+the 'configure' script. 'configure' automatically checks for the source
+code in the directory that 'configure' is in and in '..'. This is known
+as a "VPATH" build.
- With a non-GNU `make', it is safer to compile the package for one
+ With a non-GNU 'make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
-installed the package for one architecture, use `make distclean' before
+installed the package for one architecture, use 'make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
-"universal" binaries--by specifying multiple `-arch' options to the
-compiler but only a single `-arch' option to the preprocessor. Like
+"universal" binaries--by specifying multiple '-arch' options to the
+compiler but only a single '-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
@@ -136,105 +135,104 @@ this:
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
-using the `lipo' tool if you have problems.
+using the 'lipo' tool if you have problems.
Installation Names
==================
- By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc. You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX', where PREFIX must be an
+ By default, 'make install' installs the package's commands under
+'/usr/local/bin', include files under '/usr/local/include', etc. You
+can specify an installation prefix other than '/usr/local' by giving
+'configure' the option '--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them. In general, the
-default for these options is expressed in terms of `${prefix}', so that
-specifying just `--prefix' will affect all of the other directory
+options like '--bindir=DIR' to specify different values for particular
+kinds of files. Run 'configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the default
+for these options is expressed in terms of '${prefix}', so that
+specifying just '--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
-correct locations to `configure'; however, many packages provide one or
+correct locations to 'configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
-`make install' command line to change installation locations without
+'make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
-affected directory. For example, `make install
+affected directory. For example, 'make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
-`${prefix}'. Any directories that were specified during `configure',
-but not in terms of `${prefix}', must each be overridden at install
-time for the entire installation to be relocated. The approach of
-makefile variable overrides for each directory variable is required by
-the GNU Coding Standards, and ideally causes no recompilation.
-However, some platforms have known limitations with the semantics of
-shared libraries that end up requiring recompilation when using this
-method, particularly noticeable in packages that use GNU Libtool.
-
- The second method involves providing the `DESTDIR' variable. For
-example, `make install DESTDIR=/alternate/directory' will prepend
-`/alternate/directory' before all installation names. The approach of
-`DESTDIR' overrides is not required by the GNU Coding Standards, and
+'${prefix}'. Any directories that were specified during 'configure',
+but not in terms of '${prefix}', must each be overridden at install time
+for the entire installation to be relocated. The approach of makefile
+variable overrides for each directory variable is required by the GNU
+Coding Standards, and ideally causes no recompilation. However, some
+platforms have known limitations with the semantics of shared libraries
+that end up requiring recompilation when using this method, particularly
+noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the 'DESTDIR' variable. For
+example, 'make install DESTDIR=/alternate/directory' will prepend
+'/alternate/directory' before all installation names. The approach of
+'DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of `${prefix}'
-at `configure' time.
+when some directory options were not specified in terms of '${prefix}'
+at 'configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
+with an extra prefix or suffix on their names by giving 'configure' the
+option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
+
+ Some packages pay attention to '--enable-FEATURE' options to
+'configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to '--with-PACKAGE' options, where PACKAGE
+is something like 'gnu-as' or 'x' (for the X Window System). The
+'README' should mention any '--enable-' and '--with-' options that the
package recognizes.
- For packages that use the X Window System, `configure' can usually
+ For packages that use the X Window System, 'configure' can usually
find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
+you can use the 'configure' options '--x-includes=DIR' and
+'--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
-execution of `make' will be. For these packages, running `./configure
+execution of 'make' will be. For these packages, running './configure
--enable-silent-rules' sets the default to minimal output, which can be
-overridden with `make V=1'; while running `./configure
+overridden with 'make V=1'; while running './configure
--disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
+overridden with 'make V=0'.
Particular systems
==================
- On HP-UX, the default C compiler is not ANSI C compatible. If GNU
-CC is not installed, it is recommended to use the following options in
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
+is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
- HP-UX `make' updates targets which have the same time stamps as
-their prerequisites, which makes it generally unusable when shipped
-generated files such as `configure' are involved. Use GNU `make'
-instead.
+ HP-UX 'make' updates targets which have the same time stamps as their
+prerequisites, which makes it generally unusable when shipped generated
+files such as 'configure' are involved. Use GNU 'make' instead.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
-parse its `<wchar.h>' header file. The option `-nodtk' can be used as
-a workaround. If GNU CC is not installed, it is therefore recommended
-to try
+parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
+workaround. If GNU CC is not installed, it is therefore recommended to
+try
./configure CC="cc"
@@ -242,26 +240,26 @@ and if that doesn't work, try
./configure CC="cc -nodtk"
- On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+ On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
directory contains several dysfunctional programs; working variants of
-these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
-in your `PATH', put it _after_ `/usr/bin'.
+these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
+in your 'PATH', put it _after_ '/usr/bin'.
- On Haiku, software installed for all users goes in `/boot/common',
-not `/usr/local'. It is recommended to use the following options:
+ On Haiku, software installed for all users goes in '/boot/common',
+not '/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
- There may be some features `configure' cannot figure out
+ There may be some features 'configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
+_same_ architectures, 'configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
+'--build=TYPE' option. TYPE can either be a short name for the system
+type, such as 'sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
@@ -270,101 +268,101 @@ where SYSTEM can have one of these forms:
OS
KERNEL-OS
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
+ See the file 'config.sub' for the possible values of each field. If
+'config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
+use the option '--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
+eventually be run) with '--host=TYPE'.
Sharing Defaults
================
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
+ If you want to set default values for 'configure' scripts to share,
+you can create a site shell script called 'config.site' that gives
+default values for variables like 'CC', 'cache_file', and 'prefix'.
+'configure' looks for 'PREFIX/share/config.site' if it exists, then
+'PREFIX/etc/config.site' if it exists. Or, you can set the
+'CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all 'configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
+environment passed to 'configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
+them in the 'configure' command line, using 'VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
-causes the specified `gcc' to be used as the C compiler (unless it is
+causes the specified 'gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf limitation. Until the limitation is lifted, you can use
-this workaround:
+Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
+Autoconf limitation. Until the limitation is lifted, you can use this
+workaround:
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
-`configure' Invocation
+'configure' Invocation
======================
- `configure' recognizes the following options to control how it
+ 'configure' recognizes the following options to control how it
operates.
-`--help'
-`-h'
- Print a summary of all of the options to `configure', and exit.
+'--help'
+'-h'
+ Print a summary of all of the options to 'configure', and exit.
-`--help=short'
-`--help=recursive'
+'--help=short'
+'--help=recursive'
Print a summary of the options unique to this package's
- `configure', and exit. The `short' variant lists options used
- only in the top level, while the `recursive' variant lists options
- also present in any nested packages.
+ 'configure', and exit. The 'short' variant lists options used only
+ in the top level, while the 'recursive' variant lists options also
+ present in any nested packages.
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
+'--version'
+'-V'
+ Print the version of Autoconf used to generate the 'configure'
script, and exit.
-`--cache-file=FILE'
+'--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
+ traditionally 'config.cache'. FILE defaults to '/dev/null' to
disable caching.
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
+'--config-cache'
+'-C'
+ Alias for '--cache-file=config.cache'.
-`--quiet'
-`--silent'
-`-q'
+'--quiet'
+'--silent'
+'-q'
Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
+ suppress all normal output, redirect it to '/dev/null' (any error
messages will still be shown).
-`--srcdir=DIR'
+'--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
+ 'configure' can determine that directory automatically.
-`--prefix=DIR'
- Use DIR as the installation prefix. *note Installation Names::
- for more details, including other options available for fine-tuning
- the installation locations.
+'--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names:: for
+ more details, including other options available for fine-tuning the
+ installation locations.
-`--no-create'
-`-n'
+'--no-create'
+'-n'
Run the configure checks, but stop before creating any output
files.
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
+'configure' also accepts some other, not widely useful, options. Run
+'configure --help' for more details.
diff --git a/ext/mbstring/oniguruma/README b/ext/mbstring/oniguruma/README
index a3d3ab487a..e4d9e1a1dd 100644
--- a/ext/mbstring/oniguruma/README
+++ b/ext/mbstring/oniguruma/README
@@ -1,12 +1,30 @@
-README 2016/05/06
+README 2018/01/14
-Oniguruma ---- (C) K.Kosako <kkosako0@gmail.com>
+Oniguruma ---- (C) K.Kosako
https://github.com/kkos/oniguruma
-Oniguruma is a regular expressions library.
-The characteristics of this library is that different character encoding
-for every regular expression object can be specified.
+FIXED Security Issues:
+ CVE-2017-9224, CVE-2017-9225, CVE-2017-9226
+ CVE-2017-9227, CVE-2017-9228, CVE-2017-9229
+
+---
+Oniguruma is a modern and flexible regular expressions library. It
+encompasses features from different regular expression implementations
+that traditionally exist in different languages. It comes close to
+being a complete superset of all regular expression features found
+in other regular expression implementations.
+
+Its features include:
+* Character encoding can be specified per regular expression object.
+* Several regular expression types are supported:
+ * POSIX
+ * Grep
+ * GNU Regex
+ * Perl
+ * Java
+ * Ruby
+ * Emacs
Supported character encodings:
@@ -174,16 +192,4 @@ Source Files
win32/config.h config.h for Win32
-
-ToDo
-
- ? case fold flag: Katakana <-> Hiragana.
- ? add ONIG_OPTION_NOTBOS/NOTEOS. (\A, \z, \Z)
- ?? \X (== \PM\pM*)
- ?? implement syntax behavior ONIG_SYN_CONTEXT_INDEP_ANCHORS.
- ?? transmission stopper. (return ONIG_STOP from match_at())
-
and I'm thankful to Akinori MUSHA.
-
-
-Mail Address: K.Kosako <kkosako0@gmail.com>
diff --git a/ext/mbstring/oniguruma/README.md b/ext/mbstring/oniguruma/README.md
index a3abc750ac..da997a6ae4 100644
--- a/ext/mbstring/oniguruma/README.md
+++ b/ext/mbstring/oniguruma/README.md
@@ -3,9 +3,27 @@ Oniguruma
https://github.com/kkos/oniguruma
-Oniguruma is a regular expressions library.
-The characteristics of this library is that different character encoding
-for every regular expression object can be specified.
+FIXED Security Issues:
+--------------------------
+ **CVE-2017-9224, CVE-2017-9225, CVE-2017-9226**
+ **CVE-2017-9227, CVE-2017-9228, CVE-2017-9229**
+
+Oniguruma is a modern and flexible regular expressions library. It
+encompasses features from different regular expression implementations
+that traditionally exist in different languages. It comes close to
+being a complete superset of all regular expression features found
+in other regular expression implementations.
+
+Its features include:
+* Character encoding can be specified per regular expression object.
+* Several regular expression types are supported:
+ * POSIX
+ * Grep
+ * GNU Regex
+ * Perl
+ * Java
+ * Ruby
+ * Emacs
Supported character encodings:
@@ -20,10 +38,61 @@ Supported character encodings:
* CP1251: contributed by Byte
+New feature of version 6.7.1
+--------------------------
+
+* NEW: Mechanism of try-in-match-limit (* disabled by default)
+
+
+New feature of version 6.7.0
+--------------------------
+
+* NEW: hexadecimal codepoint \uHHHH
+* NEW: add ONIG_SYNTAX_ONIGURUMA (== ONIG_SYNTAX_DEFAULT)
+* Disabled \N and \O on ONIG_SYNTAX_RUBY
+* Reduced object size
+
+
+New feature of version 6.6.1
+--------------------------
+
+* Fix definition of \X
+
+
+New feature of version 6.6.0
+--------------------------
+
+* NEW: ASCII only mode options for character type/property (?WDSP)
+* NEW: Extended Grapheme Cluster boundary \y, \Y (*original)
+* NEW: Extended Grapheme Cluster \X
+* Range-clear (Absent-clear) operator restores previous range in backtrack.
+
+
+New feature of version 6.5.0
+--------------------------
+
+* NEW: \K (keep)
+* NEW: \R (general newline) \N (no newline)
+* NEW: \O (true anychar)
+* NEW: if-then-else syntax (?(...)...\|...)
+* NEW: Backreference validity checker (?(xxx)) (*original)
+* NEW: Absent repeater (?~absent)
+* NEW: Absent expression (?~|absent|expr) (*original)
+* NEW: Absent stopper (?~|absent) (*original)
+
+
+New feature of version 6.4.0
+--------------------------
+
+* Fix fatal problem of endless repeat on Windows
+* NEW: call zero (call the total regexp) \g<0>
+* NEW: relative backref/call by positive number \k<+n>, \g<+n>
+
+
New feature of version 6.3.0
--------------------------
-* NEW SYNTAX: escape-o-brace for octal codepoint.
+* NEW: octal codepoint \o{.....}
New feature of version 6.1.2
diff --git a/ext/mbstring/oniguruma/README.ja b/ext/mbstring/oniguruma/README_japanese
index 826a8e74df..28da31b4aa 100644
--- a/ext/mbstring/oniguruma/README.ja
+++ b/ext/mbstring/oniguruma/README_japanese
@@ -1,4 +1,4 @@
-README.ja 2016/05/06
+README.ja 2017/08/25
µ´¼Ö ---- (C) K.Kosako <kkosako0@gmail.com>
@@ -180,16 +180,4 @@ https://github.com/kkos/oniguruma
win32/config.h Win32ÍÑ config.h
-
-»Ä·ï
-
- ? case fold flag: Katakana <-> Hiragana
- ? ONIG_OPTION_NOTBOS/NOTEOSÄɲà (\A, \z, \Z)
- ?? \X (== \PM\pM*)
- ?? ʸˡÍ×ÁÇ ONIG_SYN_CONTEXT_INDEP_ANCHORS¤Î¼ÂÁõ
- ?? ¸¡º÷°ÌÃÖ°ÜÆ°Ää»ß±é»»»Ò (match_at()¤«¤éONIG_STOP¤òÊÖ¤¹)
-
and I'm thankful to Akinori MUSHA.
-
-
-¥¢¥É¥ì¥¹: K.Kosako <kkosako0@gmail.com>
diff --git a/ext/mbstring/oniguruma/doc/API b/ext/mbstring/oniguruma/doc/API
index d12a46b997..801e2ac5c3 100644
--- a/ext/mbstring/oniguruma/doc/API
+++ b/ext/mbstring/oniguruma/doc/API
@@ -1,4 +1,4 @@
-Oniguruma API Version 6.1.0 2016/08/22
+Oniguruma API Version 6.7.0 2017/12/08
#include <oniguruma.h>
@@ -83,6 +83,16 @@ Oniguruma API Version 6.1.0 2016/08/22
ONIG_OPTION_DONT_CAPTURE_GROUP only named group captured.
ONIG_OPTION_CAPTURE_GROUP named and no-named group captured.
+ ONIG_OPTION_WORD_IS_ASCII ASCII only word (\w, \p{Word}, [[:word:]])
+ ASCII only word bound (\b)
+ ONIG_OPTION_DIGIT_IS_ASCII ASCII only digit (\d, \p{Digit}, [[:digit:]])
+ ONIG_OPTION_SPACE_IS_ASCII ASCII only space (\s, \p{Space}, [[:space:]])
+ ONIG_OPTION_POSIX_IS_ASCII ASCII only POSIX properties
+ (includes word, digit, space)
+ (alnum, alpha, blank, cntrl, digit, graph,
+ lower, print, punct, space, upper, xdigit,
+ word)
+
5 enc: character encoding.
ONIG_ENCODING_ASCII ASCII
@@ -130,7 +140,8 @@ Oniguruma API Version 6.1.0 2016/08/22
ONIG_SYNTAX_PERL Perl
ONIG_SYNTAX_PERL_NG Perl + named group
ONIG_SYNTAX_RUBY Ruby
- ONIG_SYNTAX_DEFAULT default (== Ruby)
+ ONIG_SYNTAX_ONIGURUMA Oniguruma
+ ONIG_SYNTAX_DEFAULT default (== ONIG_SYNTAX_ONIGURUMA)
onig_set_default_syntax()
or any OnigSyntaxType data address defined by user.
diff --git a/ext/mbstring/oniguruma/doc/API.ja b/ext/mbstring/oniguruma/doc/API.ja
index dcc7317b0a..d73186c0f6 100644
--- a/ext/mbstring/oniguruma/doc/API.ja
+++ b/ext/mbstring/oniguruma/doc/API.ja
@@ -1,89 +1,98 @@
-µ´¼Ö¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ Version 6.1.0 2016/08/22
+鬼車インターフェース Version 6.7.0 2017/12/08
#include <oniguruma.h>
# int onig_initialize(OnigEncoding use_encodings[], int num_encodings)
- ¥é¥¤¥Ö¥é¥ê¤Î½é´ü²½
- ºÇ½é¤Ë¸Æ¤Ó½Ð¤¹É¬Íפ¬¤¢¤ë¡£
+ ライブラリã®åˆæœŸåŒ–
+ 最åˆã«å‘¼ã³å‡ºã™å¿…è¦ãŒã‚る。
- * onig_init() ¤ÏÇÑ»ß
+ * onig_init() ã¯å»ƒæ­¢
- °ú¿ô
- 1 use_encodings: »ÈÍѤ¹¤ëʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÇÛÎó
- 2 num_encodings: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¿ô
+ 引数
+ 1 use_encodings: 使用ã™ã‚‹æ–‡å­—エンコーディングã®é…列
+ 2 num_encodings: æ–‡å­—ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®æ•°
# int onig_error_code_to_str(UChar* err_buf, int err_code, ...)
- ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò¼èÆÀ¤¹¤ë¡£
+ エラーメッセージをå–å¾—ã™ã‚‹ã€‚
- ¤³¤Î´Ø¿ô¤ò¡¢onig_new()¤Î·ë²Ì¤ËÂФ·¤Æ¸Æ¤Ó½Ð¤¹¾ì¹ç¤Ë¤Ï¡¢onig_new()¤Îpattern°ú¿ô¤ò
- ¥á¥â¥ê²òÊü¤¹¤ë¤è¤ê¤âÁ°¤Ë¸Æ¤Ó½Ð¤µ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+ ã“ã®é–¢æ•°ã‚’ã€onig_new()ã®çµæžœã«å¯¾ã—ã¦å‘¼ã³å‡ºã™å ´åˆã«ã¯ã€onig_new()ã®pattern引数を
+ メモリ解放ã™ã‚‹ã‚ˆã‚Šã‚‚å‰ã«å‘¼ã³å‡ºã•ãªã‘れã°ãªã‚‰ãªã„。
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸Ê¸»úÎó¤Î¥Ð¥¤¥ÈĹ
+ 正常終了戻り値: エラーメッセージ文字列ã®ãƒã‚¤ãƒˆé•·
- °ú¿ô
- 1 err_buf: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò³ÊǼ¤¹¤ëÎΰè
- (ɬÍפʥµ¥¤¥º: ONIG_MAX_ERROR_MESSAGE_LEN)
- 2 err_code: ¥¨¥é¡¼¥³¡¼¥É
- 3 err_info (optional): onig_new()¤Îerr_info
+ 引数
+ 1 err_buf: エラーメッセージを格ç´ã™ã‚‹é ˜åŸŸ
+ (å¿…è¦ãªã‚µã‚¤ã‚º: ONIG_MAX_ERROR_MESSAGE_LEN)
+ 2 err_code: エラーコード
+ 3 err_info (optional): onig_new()ã®err_info
# void onig_set_warn_func(OnigWarnFunc func)
- ·Ù¹ðÄÌÃδؿô¤ò¥»¥Ã¥È¤¹¤ë¡£
+ 警告通知関数をセットã™ã‚‹ã€‚
- ·Ù¹ð:
+ 警告:
'[', '-', ']' in character class without escape.
']' in pattern without escape.
- °ú¿ô
- 1 func: ·Ù¹ð´Ø¿ô void (*func)(char* warning_message)
+ 引数
+ 1 func: 警告関数 void (*func)(char* warning_message)
# void onig_set_verb_warn_func(OnigWarnFunc func)
- ¾ÜºÙ·Ù¹ðÄÌÃδؿô¤ò¥»¥Ã¥È¤¹¤ë¡£
+ 詳細警告通知関数をセットã™ã‚‹ã€‚
- ¾ÜºÙ·Ù¹ð:
+ 詳細警告:
redundant nested repeat operator.
- °ú¿ô
- 1 func: ¾ÜºÙ·Ù¹ð´Ø¿ô void (*func)(char* warning_message)
+ 引数
+ 1 func: 詳細警告関数 void (*func)(char* warning_message)
# int onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
OnigErrorInfo* err_info)
- Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È(regex)¤òºîÀ®¤¹¤ë¡£
+ æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト(regex)を作æˆã™ã‚‹ã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
- °ú¿ô
- 1 reg: ºîÀ®¤µ¤ì¤¿Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¥¢¥É¥ì¥¹
- 2 pattern: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó
- 3 pattern_end: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹(pattern + pattern length)
- 4 option: Àµµ¬É½¸½¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó
+ 引数
+ 1 reg: 作æˆã•ã‚ŒãŸæ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクトを返ã™ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 2 pattern: æ­£è¦è¡¨ç¾ãƒ‘ターン文字列
+ 3 pattern_end: æ­£è¦è¡¨ç¾ãƒ‘ターン文字列ã®çµ‚端アドレス(pattern + pattern length)
+ 4 option: æ­£è¦è¡¨ç¾ã‚³ãƒ³ãƒ‘イル時オプション
- ONIG_OPTION_NONE ¥ª¥×¥·¥ç¥ó¤Ê¤·
+ ONIG_OPTION_NONE オプションãªã—
ONIG_OPTION_SINGLELINE '^' -> '\A', '$' -> '\Z'
- ONIG_OPTION_MULTILINE '.'¤¬²þ¹Ô¤Ë¥Þ¥Ã¥Á¤¹¤ë
- ONIG_OPTION_IGNORECASE Û£Ëæ¥Þ¥Ã¥Á ¥ª¥ó
- ONIG_OPTION_EXTEND ¥Ñ¥¿¡¼¥ó³ÈÄ¥·Á¼°
- ONIG_OPTION_FIND_LONGEST ºÇĹ¥Þ¥Ã¥Á
- ONIG_OPTION_FIND_NOT_EMPTY ¶õ¥Þ¥Ã¥Á¤ò̵»ë
+ ONIG_OPTION_MULTILINE '.'ãŒæ”¹è¡Œã«ãƒžãƒƒãƒã™ã‚‹
+ ONIG_OPTION_IGNORECASE 曖昧マッムオン
+ ONIG_OPTION_EXTEND パターン拡張形å¼
+ ONIG_OPTION_FIND_LONGEST 最長マッãƒ
+ ONIG_OPTION_FIND_NOT_EMPTY 空マッãƒã‚’無視
ONIG_OPTION_NEGATE_SINGLELINE
ONIG_SYNTAX_POSIX_BASIC, ONIG_SYNTAX_POSIX_EXTENDED,
- ONIG_SYNTAX_PERL, ONIG_SYNTAX_PERL_NG, ONIG_SYNTAX_JAVA¤Ç
- ¥Ç¥Õ¥©¥ë¥È¤ÇÍ­¸ú¤ÊONIG_OPTION_SINGLELINE¤ò¥¯¥ê¥¢¤¹¤ë¡£
-
- ONIG_OPTION_DONT_CAPTURE_GROUP ̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤Î¤ßÊá³Í
- ONIG_OPTION_CAPTURE_GROUP ̾Á°Ìµ¤·Êá³Í¼°½¸¹ç¤âÊá³Í
-
- 5 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
+ ONIG_SYNTAX_PERL, ONIG_SYNTAX_PERL_NG, ONIG_SYNTAX_JAVAã§
+ ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйãªONIG_OPTION_SINGLELINEをクリアã™ã‚‹ã€‚
+
+ ONIG_OPTION_DONT_CAPTURE_GROUP åå‰ä»˜ãæ•ç²å¼é›†åˆã®ã¿æ•ç²
+ ONIG_OPTION_CAPTURE_GROUP åå‰ç„¡ã—æ•ç²å¼é›†åˆã‚‚æ•ç²
+ ONIG_OPTION_WORD_IS_ASCII wordãŒASCIIã®ã¿ (\w, \p{Word}, [[:word:]])
+ word boundãŒASCIIã®ã¿ (\b)
+ ONIG_OPTION_DIGIT_IS_ASCII digitãŒASCIIã®ã¿ (\d, \p{Digit}, [[:digit:]])
+ ONIG_OPTION_SPACE_IS_ASCII spaceãŒASCIIã®ã¿ (\s, \p{Space}, [[:space:]])
+ ONIG_OPTION_POSIX_IS_ASCII POSIXプロパティãŒASCIIã®ã¿
+ (word, digit, spaceã‚’å…¨ã¦å«ã‚“ã§ã„ã‚‹)
+ (alnum, alpha, blank, cntrl, digit, graph,
+ lower, print, punct, space, upper, xdigit,
+ word)
+
+ 5 enc: 文字エンコーディング
ONIG_ENCODING_ASCII ASCII
ONIG_ENCODING_ISO_8859_1 ISO 8859-1
@@ -116,9 +125,9 @@
ONIG_ENCODING_BIG5 Big5
ONIG_ENCODING_GB18030 GB18030
- ¤Þ¤¿¤Ï¡¢¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿OnigEncodingType¥Ç¡¼¥¿¤Î¥¢¥É¥ì¥¹
+ ã¾ãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒå®šç¾©ã—ãŸOnigEncodingTypeデータã®ã‚¢ãƒ‰ãƒ¬ã‚¹
- 6 syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡÄêµÁ
+ 6 syntax: æ­£è¦è¡¨ç¾ãƒ‘ターン文法定義
ONIG_SYNTAX_ASIS plain text
ONIG_SYNTAX_POSIX_BASIC POSIX Basic RE
@@ -128,15 +137,16 @@
ONIG_SYNTAX_GNU_REGEX GNU regex
ONIG_SYNTAX_JAVA Java (Sun java.util.regex)
ONIG_SYNTAX_PERL Perl
- ONIG_SYNTAX_PERL_NG Perl + ̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç
+ ONIG_SYNTAX_PERL_NG Perl + åå‰ä»˜ãæ•ç²å¼é›†åˆ
ONIG_SYNTAX_RUBY Ruby
- ONIG_SYNTAX_DEFAULT default (== Ruby)
+ ONIG_SYNTAX_ONIGURUMA Oniguruma
+ ONIG_SYNTAX_DEFAULT default (== ONIG_SYNTAX_ONIGURUMA)
onig_set_default_syntax()
- ¤Þ¤¿¤Ï¡¢¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿OnigSyntaxType¥Ç¡¼¥¿¤Î¥¢¥É¥ì¥¹
+ ã¾ãŸã¯ã€ãƒ¦ãƒ¼ã‚¶ãŒå®šç¾©ã—ãŸOnigSyntaxTypeデータã®ã‚¢ãƒ‰ãƒ¬ã‚¹
- 7 err_info: ¥¨¥é¡¼¾ðÊó¤òÊÖ¤¹¤¿¤á¤Î¥¢¥É¥ì¥¹
- onig_error_code_to_str()¤Î»°ÈÖÌܤΰú¿ô¤È¤·¤Æ»ÈÍѤ¹¤ë
+ 7 err_info: エラー情報を返ã™ãŸã‚ã®ã‚¢ãƒ‰ãƒ¬ã‚¹
+ onig_error_code_to_str()ã®ä¸‰ç•ªç›®ã®å¼•æ•°ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹
@@ -145,44 +155,44 @@
OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
OnigErrorInfo* err_info)
- Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È(regex)¤òºîÀ®¤¹¤ë¡£
- reg¤ÎÎΰè¤òÆâÉô¤Ç³ä¤êÅö¤Æ¤Ê¤¤¡£
+ æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト(regex)を作æˆã™ã‚‹ã€‚
+ regã®é ˜åŸŸã‚’内部ã§å‰²ã‚Šå½“ã¦ãªã„。
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
# int onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
OnigCompileInfo* ci, OnigErrorInfo* einfo)
- Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È(regex)¤òºîÀ®¤¹¤ë¡£
- ¤³¤Î´Ø¿ô¤Ï¡¢onig_new()¤Î¥Ç¥é¥Ã¥¯¥¹ÈÇ¡£
+ æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト(regex)を作æˆã™ã‚‹ã€‚
+ ã“ã®é–¢æ•°ã¯ã€onig_new()ã®ãƒ‡ãƒ©ãƒƒã‚¯ã‚¹ç‰ˆã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
- °ú¿ô
- 1 reg: ºîÀ®¤µ¤ì¤¿Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¥¢¥É¥ì¥¹
- 2 pattern: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó
- 3 pattern_end: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹(pattern + pattern length)
- 4 ci: ¥³¥ó¥Ñ¥¤¥ë¾ðÊó
+ 引数
+ 1 reg: 作æˆã•ã‚ŒãŸæ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクトを返ã™ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 2 pattern: æ­£è¦è¡¨ç¾ãƒ‘ターン文字列
+ 3 pattern_end: æ­£è¦è¡¨ç¾ãƒ‘ターン文字列ã®çµ‚端アドレス(pattern + pattern length)
+ 4 ci: コンパイル情報
- ci->num_of_elements: ci¤ÎÍ×ÁÇ¿ô (¸½ºß¤ÎÈǤǤÏ: 5)
- ci->pattern_enc: ¥Ñ¥¿¡¼¥óʸ»úÎó¤Îʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
- ci->target_enc: ÂоÝʸ»úÎó¤Îʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
- ci->syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡÄêµÁ
- ci->option: Àµµ¬É½¸½¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó
- ci->case_fold_flag: ONIG_OPTION_IGNORECASE¥â¡¼¥É¤Ç¤Î
- ʸ»úÛ£Ëæ¥Þ¥Ã¥Á»ØÄê¥Ó¥Ã¥È¥Õ¥é¥°
+ ci->num_of_elements: ciã®è¦ç´ æ•° (ç¾åœ¨ã®ç‰ˆã§ã¯: 5)
+ ci->pattern_enc: ãƒ‘ã‚¿ãƒ¼ãƒ³æ–‡å­—åˆ—ã®æ–‡å­—エンコーディング
+ ci->target_enc: å¯¾è±¡æ–‡å­—åˆ—ã®æ–‡å­—エンコーディング
+ ci->syntax: æ­£è¦è¡¨ç¾ãƒ‘ターン文法定義
+ ci->option: æ­£è¦è¡¨ç¾ã‚³ãƒ³ãƒ‘イル時オプション
+ ci->case_fold_flag: ONIG_OPTION_IGNORECASEモードã§ã®
+ æ–‡å­—æ›–æ˜§ãƒžãƒƒãƒæŒ‡å®šãƒ“ットフラグ
- ONIGENC_CASE_FOLD_MIN: ºÇ¾®
- ONIGENC_CASE_FOLD_DEFAULT: ºÇ¾®
+ ONIGENC_CASE_FOLD_MIN: 最å°
+ ONIGENC_CASE_FOLD_DEFAULT: 最å°
onig_set_default_case_fold_flag()
- 5 err_info: ¥¨¥é¡¼¾ðÊó¤òÊÖ¤¹¤¿¤á¤Î¥¢¥É¥ì¥¹
- onig_error_code_to_str()¤Î»°ÈÖÌܤΰú¿ô¤È¤·¤Æ»ÈÍѤ¹¤ë
+ 5 err_info: エラー情報を返ã™ãŸã‚ã®ã‚¢ãƒ‰ãƒ¬ã‚¹
+ onig_error_code_to_str()ã®ä¸‰ç•ªç›®ã®å¼•æ•°ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹
- °Û¤Ê¤ëʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÁȤ߹ç¤ï¤»¤Ï¡¢°Ê²¼¤Î¾ì¹ç¤Ë¤Î¤ßµö¤µ¤ì¤ë¡£
+ ç•°ãªã‚‹æ–‡å­—エンコーディングã®çµ„ã¿åˆã‚ã›ã¯ã€ä»¥ä¸‹ã®å ´åˆã«ã®ã¿è¨±ã•れる。
pattern_enc: ASCII, ISO_8859_1
target_enc: UTF16_BE, UTF16_LE, UTF32_BE, UTF32_LE
@@ -196,64 +206,64 @@
# void onig_free(regex_t* reg)
- Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤Î¥á¥â¥ê¤ò²òÊü¤¹¤ë¡£
+ æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクトã®ãƒ¡ãƒ¢ãƒªã‚’解放ã™ã‚‹ã€‚
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
# void onig_free_body(regex_t* reg)
- Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤Î¥á¥â¥ê¤ò²òÊü¤¹¤ë¡£(reg¼«¿È¤ÎÎΰè¤ò½ü¤¤¤Æ)
+ æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクトã®ãƒ¡ãƒ¢ãƒªã‚’解放ã™ã‚‹ã€‚(reg自身ã®é ˜åŸŸã‚’除ã„ã¦)
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
# int onig_search(regex_t* reg, const UChar* str, const UChar* end, const UChar* start,
const UChar* range, OnigRegion* region, OnigOptionType option)
- Àµµ¬É½¸½¤Çʸ»úÎó¤ò¸¡º÷¤·¡¢¸¡º÷·ë²Ì¤È¥Þ¥Ã¥ÁÎΰè¤òÊÖ¤¹¡£
+ æ­£è¦è¡¨ç¾ã§æ–‡å­—列を検索ã—ã€æ¤œç´¢çµæžœã¨ãƒžãƒƒãƒé ˜åŸŸã‚’è¿”ã™ã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ¥Þ¥Ã¥Á°ÌÃÖ (p - str >= 0)
- ¸¡º÷¼ºÇÔ: ONIG_MISMATCH (< 0)
+ 正常終了戻り値: マッãƒä½ç½® (p - str >= 0)
+ 検索失敗: ONIG_MISMATCH (< 0)
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
- 2 str: ¸¡º÷ÂоÝʸ»úÎó
- 3 end: ¸¡º÷ÂоÝʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹
- 4 start: ¸¡º÷ÂоÝʸ»úÎó¤Î¸¡º÷ÀèÆ¬°ÌÃÖ¥¢¥É¥ì¥¹
- 5 range: ¸¡º÷ÂоÝʸ»úÎó¤Î¸¡º÷½ªÎ»°ÌÃÖ¥¢¥É¥ì¥¹
- Á°Êýõº÷ (start <= õº÷¤µ¤ì¤ëʸ»úÎó < range)
- ¸åÊýõº÷ (range <= õº÷¤µ¤ì¤ëʸ»úÎó <= start)
- 6 region: ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region) (NULL¤âµö¤µ¤ì¤ë)
- 7 option: ¸¡º÷»þ¥ª¥×¥·¥ç¥ó
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
+ 2 str: 検索対象文字列
+ 3 end: 検索対象文字列ã®çµ‚端アドレス
+ 4 start: æ¤œç´¢å¯¾è±¡æ–‡å­—åˆ—ã®æ¤œç´¢å…ˆé ­ä½ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 5 range: æ¤œç´¢å¯¾è±¡æ–‡å­—åˆ—ã®æ¤œç´¢çµ‚了ä½ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 剿–¹æŽ¢ç´¢ (start <= 探索ã•れる文字列 < range)
+ 後方探索 (range <= 探索ã•れる文字列 <= start)
+ 6 region: マッãƒé ˜åŸŸæƒ…å ±(region) (NULLも許ã•れる)
+ 7 option: 検索時オプション
- ONIG_OPTION_NOTBOL ʸ»úÎó¤ÎÀèÆ¬(str)¤ò¹ÔƬ¤È´ÇÐö¤µ¤Ê¤¤
- ONIG_OPTION_NOTEOL ʸ»úÎó¤Î½ªÃ¼(end)¤ò¹ÔËö¤È´ÇÐö¤µ¤Ê¤¤
- ONIG_OPTION_POSIX_REGION region°ú¿ô¤òPOSIX API¤Îregmatch_t[]¤Ë¤¹¤ë
+ ONIG_OPTION_NOTBOL 文字列ã®å…ˆé ­(str)を行頭ã¨çœ‹åšã•ãªã„
+ ONIG_OPTION_NOTEOL 文字列ã®çµ‚端(end)を行末ã¨çœ‹åšã•ãªã„
+ ONIG_OPTION_POSIX_REGION region引数をPOSIX APIã®regmatch_t[]ã«ã™ã‚‹
# int onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,
OnigRegion* region, OnigOptionType option)
- ʸ»úÎó¤Î»ØÄê°ÌÃ֤ǥޥåÁ¥ó¥°¤ò¹Ô¤¤¡¢·ë²Ì¤È¥Þ¥Ã¥ÁÎΰè¤òÊÖ¤¹¡£
+ æ–‡å­—åˆ—ã®æŒ‡å®šä½ç½®ã§ãƒžãƒƒãƒãƒ³ã‚°ã‚’行ã„ã€çµæžœã¨ãƒžãƒƒãƒé ˜åŸŸã‚’è¿”ã™ã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ¥Þ¥Ã¥Á¤·¤¿¥Ð¥¤¥ÈĹ (>= 0)
+ 正常終了戻り値: マッãƒã—ãŸãƒã‚¤ãƒˆé•· (>= 0)
not match: ONIG_MISMATCH ( < 0)
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
- 2 str: ¸¡º÷ÂоÝʸ»úÎó
- 3 end: ¸¡º÷ÂоÝʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹
- 4 at: ¸¡º÷ÂоÝʸ»úÎó¤Î¸¡º÷¥¢¥É¥ì¥¹
- 5 region: ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region) (NULL¤âµö¤µ¤ì¤ë)
- 6 option: ¸¡º÷»þ¥ª¥×¥·¥ç¥ó
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
+ 2 str: 検索対象文字列
+ 3 end: 検索対象文字列ã®çµ‚端アドレス
+ 4 at: æ¤œç´¢å¯¾è±¡æ–‡å­—åˆ—ã®æ¤œç´¢ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 5 region: マッãƒé ˜åŸŸæƒ…å ±(region) (NULLも許ã•れる)
+ 6 option: 検索時オプション
- ONIG_OPTION_NOTBOL ʸ»úÎó¤ÎÀèÆ¬(str)¤ò¹ÔƬ¤È´ÇÐö¤µ¤Ê¤¤
- ONIG_OPTION_NOTEOL ʸ»úÎó¤Î½ªÃ¼(end)¤ò¹ÔËö¤È´ÇÐö¤µ¤Ê¤¤
- ONIG_OPTION_POSIX_REGION region°ú¿ô¤òPOSIX API¤Îregmatch_t[]¤Ë¤¹¤ë
+ ONIG_OPTION_NOTBOL 文字列ã®å…ˆé ­(str)を行頭ã¨çœ‹åšã•ãªã„
+ ONIG_OPTION_NOTEOL 文字列ã®çµ‚端(end)を行末ã¨çœ‹åšã•ãªã„
+ ONIG_OPTION_POSIX_REGION region引数をPOSIX APIã®regmatch_t[]ã«ã™ã‚‹
# int onig_scan(regex_t* reg, const UChar* str, const UChar* end,
@@ -261,127 +271,127 @@
int (*scan_callback)(int, int, OnigRegion*, void*),
void* callback_arg)
- Àµµ¬É½¸½¤Çʸ»úÎó¤ò¥¹¥­¥ã¥ó¤·¤Æ¡¢¥Þ¥Ã¥Á¥ó¥°¤¹¤ëËè¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¡£
+ æ­£è¦è¡¨ç¾ã§æ–‡å­—列をスキャンã—ã¦ã€ãƒžãƒƒãƒãƒ³ã‚°ã™ã‚‹æ¯Žã«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°ã‚’呼ã³å‡ºã™ã€‚
- Àµ¾ï½ªÎ»: ¥Þ¥Ã¥Á²ó¿ô (0²ó¤â´Þ¤á¤ë)
- ¥¨¥é¡¼: ¥¨¥é¡¼¥³¡¼¥É (< 0)
- ÃæÃÇ: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤¬£°°Ê³°¤ÎÌá¤êÃͤòÊÖ¤·¤¿¤È¤­¡¢¤½¤ÎÃͤòÌá¤êÃͤȤ·¤ÆÃæÃÇ
+ 正常終了: マッãƒå›žæ•° (0回もå«ã‚ã‚‹)
+ エラー: エラーコード (< 0)
+ 中断: コールãƒãƒƒã‚¯é–¢æ•°ãŒï¼ä»¥å¤–ã®æˆ»ã‚Šå€¤ã‚’è¿”ã—ãŸã¨ãã€ãã®å€¤ã‚’戻り値ã¨ã—ã¦ä¸­æ–­
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
- 2 str: ¸¡º÷ÂоÝʸ»úÎó
- 3 end: ¸¡º÷ÂоÝʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹
- 4 region: ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region) (NULL¤âµö¤µ¤ì¤ë)
- 5 option: ¸¡º÷»þ¥ª¥×¥·¥ç¥ó
- 6 scan_callback: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô
- 7 callback_arg: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ËÅϤµ¤ì¤ëÉղðú¿ôÃÍ
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
+ 2 str: 検索対象文字列
+ 3 end: 検索対象文字列ã®çµ‚端アドレス
+ 4 region: マッãƒé ˜åŸŸæƒ…å ±(region) (NULLも許ã•れる)
+ 5 option: 検索時オプション
+ 6 scan_callback: コールãƒãƒƒã‚¯é–¢æ•°
+ 7 callback_arg: コールãƒãƒƒã‚¯é–¢æ•°ã«æ¸¡ã•れる付加引数値
# OnigRegion* onig_region_new(void)
- ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤òºîÀ®¤¹¤ë¡£
+ マッãƒé ˜åŸŸæƒ…å ±(region)を作æˆã™ã‚‹ã€‚
# void onig_region_free(OnigRegion* region, int free_self)
- ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤Ç»ÈÍѤµ¤ì¤Æ¤¤¤ë¥á¥â¥ê¤ò²òÊü¤¹¤ë¡£
+ マッãƒé ˜åŸŸæƒ…å ±(region)ã§ä½¿ç”¨ã•れã¦ã„るメモリを解放ã™ã‚‹ã€‚
- °ú¿ô
- 1 region: ¥Þ¥Ã¥ÁÎΰè¾ðÊ󥪥֥¸¥§¥¯¥È
- 2 free_self: [1: region¼«¿È¤ò´Þ¤á¤ÆÁ´¤Æ²òÊü, 0: region¼«¿È¤Ï²òÊü¤·¤Ê¤¤]
+ 引数
+ 1 region: マッãƒé ˜åŸŸæƒ…報オブジェクト
+ 2 free_self: [1: region自身をå«ã‚ã¦å…¨ã¦è§£æ”¾, 0: region自身ã¯è§£æ”¾ã—ãªã„]
# void onig_region_copy(OnigRegion* to, OnigRegion* from)
- ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤òÊ£À½¤¹¤ë¡£
+ マッãƒé ˜åŸŸæƒ…å ±(region)を複製ã™ã‚‹ã€‚
- °ú¿ô
- 1 to: ÂоÝÎΰè
- 2 from: ¸µÎΰè
+ 引数
+ 1 to: 対象領域
+ 2 from: 元領域
# void onig_region_clear(OnigRegion* region)
- ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤ÎÃæÌ£¤ò¥¯¥ê¥¢¤¹¤ë¡£
+ マッãƒé ˜åŸŸæƒ…å ±(region)ã®ä¸­å‘³ã‚’クリアã™ã‚‹ã€‚
- °ú¿ô
- 1 region: ÂоÝÎΰè
+ 引数
+ 1 region: 対象領域
# int onig_region_resize(OnigRegion* region, int n)
- ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤ÎÊá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)¿ô¤òÊѹ¹¤¹¤ë¡£
+ マッãƒé ˜åŸŸæƒ…å ±(region)ã®æ•ç²å¼é›†åˆ(グループ)数を変更ã™ã‚‹ã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
- °ú¿ô
- 1 region: ÂоÝÎΰè
- 2 n: ¿·¤·¤¤¥µ¥¤¥º
+ 引数
+ 1 region: 対象領域
+ 2 n: æ–°ã—ã„サイズ
# int onig_name_to_group_numbers(regex_t* reg, const UChar* name, const UChar* name_end,
int** num_list)
- »ØÄꤷ¤¿Ì¾Á°¤ËÂФ¹¤ë̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)¤Î
- ¥°¥ë¡¼¥×ÈÖ¹æ¥ê¥¹¥È¤òÊÖ¤¹¡£
- ̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤Ï¡¢(?<name>....)¤Ë¤è¤Ã¤ÆÄêµÁ¤Ç¤­¤ë¡£
+ 指定ã—ãŸåå‰ã«å¯¾ã™ã‚‹åå‰ä»˜ãæ•ç²å¼é›†åˆ(グループ)ã®
+ グループ番å·ãƒªã‚¹ãƒˆã‚’è¿”ã™ã€‚
+ åå‰ä»˜ãæ•ç²å¼é›†åˆã¯ã€(?<name>....)ã«ã‚ˆã£ã¦å®šç¾©ã§ãる。
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: »ØÄꤵ¤ì¤¿Ì¾Á°¤ËÂФ¹¤ë¥°¥ë¡¼¥×¿ô
- (Îã /(?<x>..)(?<x>..)/ ==> 2)
- ̾Á°¤ËÂФ¹¤ë¥°¥ë¡¼¥×¤¬Â¸ºß¤·¤Ê¤¤: -1
+ 正常終了戻り値: 指定ã•れãŸåå‰ã«å¯¾ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—æ•°
+ (例 /(?<x>..)(?<x>..)/ ==> 2)
+ åå‰ã«å¯¾ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ãŒå­˜åœ¨ã—ãªã„: -1
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
- 2 name: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾
- 3 name_end: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾¤Î½ªÃ¼¥¢¥É¥ì¥¹
- 4 num_list: ÈÖ¹æ¥ê¥¹¥È¤òÊÖ¤¹¥¢¥É¥ì¥¹
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
+ 2 name: æ•ç²å¼é›†åˆ(グループ)å
+ 3 name_end: æ•ç²å¼é›†åˆ(グループ)åã®çµ‚端アドレス
+ 4 num_list: 番å·ãƒªã‚¹ãƒˆã‚’è¿”ã™ã‚¢ãƒ‰ãƒ¬ã‚¹
# int onig_name_to_backref_number(regex_t* reg, const UChar* name, const UChar* name_end,
OnigRegion *region)
- »ØÄꤵ¤ì¤¿Ì¾Á°¤Î¸åÊý»²¾È(\k<name>)¤ËÂФ¹¤ëÊá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)¤ÎÈÖ¹æ¤òÊÖ¤¹¡£
- ̾Á°¤ËÂФ·¤Æ¡¢Ê£¿ô¤Î¥Þ¥Ã¥ÁÎΰ褬ͭ¸ú¤Ç¤¢¤ì¤Ð¡¢¤½¤ÎÃæ¤ÎºÇÂç¤ÎÈÖ¹æ¤òÊÖ¤¹¡£
- ̾Á°¤ËÂФ¹¤ëÊá³Í¼°½¸¹ç¤¬°ì¸Ä¤·¤«¤Ê¤¤¤È¤­¤Ë¤Ï¡¢Âбþ¤¹¤ë¥Þ¥Ã¥ÁÎΰ褬ͭ¸ú¤«
- ¤É¤¦¤«¤Ë´Ø·¸¤Ê¤¯¡¢¤½¤ÎÈÖ¹æ¤òÊÖ¤¹¡£(½¾¤Ã¤Æ¡¢region¤Ë¤ÏNULL¤òÅϤ·¤Æ¤â¤è¤¤¡£)
+ 指定ã•れãŸåå‰ã®å¾Œæ–¹å‚ç…§(\k<name>)ã«å¯¾ã™ã‚‹æ•ç²å¼é›†åˆ(グループ)ã®ç•ªå·ã‚’è¿”ã™ã€‚
+ åå‰ã«å¯¾ã—ã¦ã€è¤‡æ•°ã®ãƒžãƒƒãƒé ˜åŸŸãŒæœ‰åйã§ã‚れã°ã€ãã®ä¸­ã®æœ€å¤§ã®ç•ªå·ã‚’è¿”ã™ã€‚
+ åå‰ã«å¯¾ã™ã‚‹æ•ç²å¼é›†åˆãŒä¸€å€‹ã—ã‹ãªã„ã¨ãã«ã¯ã€å¯¾å¿œã™ã‚‹ãƒžãƒƒãƒé ˜åŸŸãŒæœ‰åйã‹
+ ã©ã†ã‹ã«é–¢ä¿‚ãªãã€ãã®ç•ªå·ã‚’è¿”ã™ã€‚(従ã£ã¦ã€regionã«ã¯NULLを渡ã—ã¦ã‚‚よã„。)
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ÈÖ¹æ
+ 正常終了戻り値: 番å·
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
- 2 name: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾
- 3 name_end: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾¤Î½ªÃ¼¥¢¥É¥ì¥¹
- 4 region: search/match·ë²Ì¤Î¥Þ¥Ã¥ÁÎΰè
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
+ 2 name: æ•ç²å¼é›†åˆ(グループ)å
+ 3 name_end: æ•ç²å¼é›†åˆ(グループ)åã®çµ‚端アドレス
+ 4 region: search/matchçµæžœã®ãƒžãƒƒãƒé ˜åŸŸ
# int onig_foreach_name(regex_t* reg,
int (*func)(const UChar*, const UChar*, int,int*,regex_t*,void*),
void* arg)
- Á´¤Æ¤Î̾Á°¤ËÂФ·¤Æ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¸Æ¤Ó½Ð¤·¤ò¼Â¹Ô¤¹¤ë¡£
+ å…¨ã¦ã®åå‰ã«å¯¾ã—ã¦ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°å‘¼ã³å‡ºã—を実行ã™ã‚‹ã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: 0
- ¥¨¥é¡¼: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ÎÌá¤êÃÍ
+ 正常終了戻り値: 0
+ エラー: コールãƒãƒƒã‚¯é–¢æ•°ã®æˆ»ã‚Šå€¤
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
- 2 func: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
+ 2 func: コールãƒãƒƒã‚¯é–¢æ•°
func(name, name_end, <number of groups>, <group number's list>,
reg, arg);
- func¤¬0°Ê³°¤ÎÃͤòÊÖ¤¹¤È¡¢¤½¤ì°Ê¹ß¤Î¥³¡¼¥ë¥Ð¥Ã¥¯¤Ï¹Ô¤Ê¤ï¤º¤Ë
- ½ªÎ»¤¹¤ë¡£
+ funcãŒ0以外ã®å€¤ã‚’è¿”ã™ã¨ã€ãれ以é™ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯è¡Œãªã‚ãšã«
+ 終了ã™ã‚‹ã€‚
- 3 arg: func¤ËÂФ¹¤ëÄɲðú¿ô
+ 3 arg: funcã«å¯¾ã™ã‚‹è¿½åŠ å¼•æ•°
# int onig_number_of_names(regex_t* reg)
- ¥Ñ¥¿¡¼¥óÃæ¤ÇÄêµÁ¤µ¤ì¤¿Ì¾Á°¤Î¿ô¤òÊÖ¤¹¡£
- °ì¸Ä¤Î̾Á°¤Î¿½ÅÄêµÁ¤Ï°ì¸Ä¤È´ÇÐö¤¹¡£
+ パターン中ã§å®šç¾©ã•れãŸåå‰ã®æ•°ã‚’è¿”ã™ã€‚
+ 一個ã®åå‰ã®å¤šé‡å®šç¾©ã¯ä¸€å€‹ã¨çœ‹åšã™ã€‚
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
# OnigEncoding onig_get_encoding(regex_t* reg)
@@ -389,157 +399,157 @@
# OnigCaseFoldType onig_get_case_fold_flag(regex_t* reg)
# OnigSyntaxType* onig_get_syntax(regex_t* reg)
- Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ¡¢Âбþ¤¹¤ëÃͤòÊÖ¤¹¡£
+ æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦ã€å¯¾å¿œã™ã‚‹å€¤ã‚’è¿”ã™ã€‚
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
# int onig_number_of_captures(regex_t* reg)
- ¥Ñ¥¿¡¼¥óÃæ¤ÇÄêµÁ¤µ¤ì¤¿Êá³Í¥°¥ë¡¼¥×¤Î¿ô¤òÊÖ¤¹¡£
+ パターン中ã§å®šç¾©ã•ã‚ŒãŸæ•ç²ã‚°ãƒ«ãƒ¼ãƒ—ã®æ•°ã‚’è¿”ã™ã€‚
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
# int onig_number_of_capture_histories(regex_t* reg)
- ¥Ñ¥¿¡¼¥óÃæ¤ÇÄêµÁ¤µ¤ì¤¿Êá³ÍÍúÎò(?@...)¤Î¿ô¤òÊÖ¤¹¡£
+ パターン中ã§å®šç¾©ã•ã‚ŒãŸæ•ç²å±¥æ­´(?@...)ã®æ•°ã‚’è¿”ã™ã€‚
- »ÈÍѤ¹¤ëʸˡ¤ÇÊá³ÍÍúÎòµ¡Ç½¤¬Í­¸ú(ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)
- ¤Ç¤Ê¤±¤ì¤Ð¡¢Êá³ÍÍúÎòµ¡Ç½¤Ï»ÈÍѤǤ­¤Ê¤¤¡£
+ 使用ã™ã‚‹æ–‡æ³•ã§æ•ç²å±¥æ­´æ©Ÿèƒ½ãŒæœ‰åй(ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)
+ ã§ãªã‘れã°ã€æ•ç²å±¥æ­´æ©Ÿèƒ½ã¯ä½¿ç”¨ã§ããªã„。
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
# OnigCaptureTreeNode* onig_get_capture_tree(OnigRegion* region)
- Êá³ÍÍúÎò¥Ç¡¼¥¿¤Î¥ë¡¼¥È¥Î¡¼¥É¤òÊÖ¤¹¡£
+ æ•ç²å±¥æ­´ãƒ‡ãƒ¼ã‚¿ã®ãƒ«ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ã‚’è¿”ã™ã€‚
- ¥Þ¥Ã¥Á¤¬¼ºÇÔ¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤³¤ÎÃͤÏÉÔÄê¤Ç¤¢¤ë¡£
+ マッãƒãŒå¤±æ•—ã—ã¦ã„ã‚‹å ´åˆã«ã¯ã€ã“ã®å€¤ã¯ä¸å®šã§ã‚る。
- °ú¿ô
- 1 region: ¥Þ¥Ã¥ÁÎΰè
+ 引数
+ 1 region: マッãƒé ˜åŸŸ
# int onig_capture_tree_traverse(OnigRegion* region, int at,
int(*func)(int,int,int,int,int,void*), void* arg)
- Êá³ÍÍúÎò¥Ç¡¼¥¿ÌÚ¤ò½ä²ó¤·¤Æ¥³¡¼¥ë¥Ð¥Ã¥¯¤¹¤ë¡£
+ æ•ç²å±¥æ­´ãƒ‡ãƒ¼ã‚¿æœ¨ã‚’巡回ã—ã¦ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹ã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: 0
- ¥¨¥é¡¼: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ÎÌá¤êÃÍ
+ 正常終了戻り値: 0
+ エラー: コールãƒãƒƒã‚¯é–¢æ•°ã®æˆ»ã‚Šå€¤
- °ú¿ô
- 1 region: ¥Þ¥Ã¥ÁÎΰè
- 2 at: ¥³¡¼¥ë¥Ð¥Ã¥¯¤ò¹Ô¤Ê¤¦¥¿¥¤¥ß¥ó¥°
+ 引数
+ 1 region: マッãƒé ˜åŸŸ
+ 2 at: コールãƒãƒƒã‚¯ã‚’行ãªã†ã‚¿ã‚¤ãƒŸãƒ³ã‚°
ONIG_TRAVERSE_CALLBACK_AT_FIRST:
- ºÇ½é¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤·¤Æ¡¢»Ò¥Î¡¼¥É¤ò½ä²ó
+ 最åˆã«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¦ã€å­ãƒŽãƒ¼ãƒ‰ã‚’巡回
ONIG_TRAVERSE_CALLBACK_AT_LAST:
- »Ò¥Î¡¼¥É¤ò½ä²ó¤·¤Æ¡¢¥³¡¼¥ë¥Ð¥Ã¥¯
+ å­ãƒŽãƒ¼ãƒ‰ã‚’巡回ã—ã¦ã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯
ONIG_TRAVERSE_CALLBACK_AT_BOTH:
- ºÇ½é¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤·¤Æ¡¢»Ò¥Î¡¼¥É¤ò½ä²ó¡¢ºÇ¸å¤Ë¤â¤¦°ìÅÙ¥³¡¼¥ë¥Ð¥Ã¥¯
+ 最åˆã«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¦ã€å­ãƒŽãƒ¼ãƒ‰ã‚’å·¡å›žã€æœ€å¾Œã«ã‚‚ã†ä¸€åº¦ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯
- 3 func: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô
- func¤¬0°Ê³°¤ÎÃͤòÊÖ¤¹¤È¡¢¤½¤ì°Ê¹ß¤Î½ä²ó¤Ï¹Ô¤Ê¤ï¤º¤Ë
- ½ªÎ»¤¹¤ë¡£
+ 3 func: コールãƒãƒƒã‚¯é–¢æ•°
+ funcãŒ0以外ã®å€¤ã‚’è¿”ã™ã¨ã€ãれ以é™ã®å·¡å›žã¯è¡Œãªã‚ãšã«
+ 終了ã™ã‚‹ã€‚
int func(int group, int beg, int end, int level, int at,
void* arg)
- group: ¥°¥ë¡¼¥×ÈÖ¹æ
- beg: ¥Þ¥Ã¥Á³«»Ï°ÌÃÖ
- end ¥Þ¥Ã¥Á½ªÎ»°ÌÃÖ
- level: ¥Í¥¹¥È¥ì¥Ù¥ë (0¤«¤é)
- at: ¥³¡¼¥ë¥Ð¥Ã¥¯¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¥¿¥¤¥ß¥ó¥°
+ group: グループ番å·
+ beg: マッãƒé–‹å§‹ä½ç½®
+ end マッãƒçµ‚了ä½ç½®
+ level: ãƒã‚¹ãƒˆãƒ¬ãƒ™ãƒ« (0ã‹ã‚‰)
+ at: コールãƒãƒƒã‚¯ãŒå‘¼ã³å‡ºã•れãŸã‚¿ã‚¤ãƒŸãƒ³ã‚°
ONIG_TRAVERSE_CALLBACK_AT_FIRST
ONIG_TRAVERSE_CALLBACK_AT_LAST
- arg: Äɲðú¿ô
+ arg: 追加引数
- 4 arg; func¤ËÂФ¹¤ëÄɲðú¿ô
+ 4 arg; funcã«å¯¾ã™ã‚‹è¿½åŠ å¼•æ•°
# int onig_noname_group_capture_is_active(regex_t* reg)
- ̾Á°¤Ê¤·¼°½¸¹ç¤ÎÊá³Íµ¡Ç½¤¬Í­¸ú¤«¤É¤¦¤«¤òÊÖ¤¹¡£
+ åå‰ãªã—å¼é›†åˆã®æ•ç²æ©Ÿèƒ½ãŒæœ‰åйã‹ã©ã†ã‹ã‚’è¿”ã™ã€‚
- Í­¸ú: 1
- ̵¸ú: 0
+ 有効: 1
+ 無効: 0
- °ú¿ô
- 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
+ 引数
+ 1 reg: æ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
- ¥ª¥×¥·¥ç¥ó¤ÎONIG_OPTION_DONT_CAPTURE_GROUP¤¬ON --> ̵¸ú
+ オプションã®ONIG_OPTION_DONT_CAPTURE_GROUPãŒON --> 無効
- ¥Ñ¥¿¡¼¥ó¤¬Ì¾Á°¤Ä¤­¼°½¸¹ç¤ò»ÈÍѤ·¤Æ¤¤¤ë
- AND »ÈÍÑʸˡ¤Ç¡¢ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP¤¬ON
- AND ¥ª¥×¥·¥ç¥ó¤ÎONIG_OPTION_CAPTURE_GROUP¤¬OFF
- --> ̵¸ú
+ パターンãŒåå‰ã¤ãå¼é›†åˆã‚’使用ã—ã¦ã„ã‚‹
+ AND 使用文法ã§ã€ONIG_SYN_CAPTURE_ONLY_NAMED_GROUPãŒON
+ AND オプションã®ONIG_OPTION_CAPTURE_GROUPãŒOFF
+ --> 無効
- ¾åµ­°Ê³°¤Î¾ì¹ç --> Í­¸ú
+ 上記以外ã®å ´åˆ --> 有効
# UChar* onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
- ʸ»ú°ì¸ÄʬÁ°¤Îʸ»úÎó°ÌÃÖ¤òÊÖ¤¹¡£
+ 文字一個分å‰ã®æ–‡å­—列ä½ç½®ã‚’è¿”ã™ã€‚
- °ú¿ô
- 1 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
- 2 start: ʸ»úÎó¤ÎÀèÆ¬¥¢¥É¥ì¥¹
- 3 s: ʸ»úÎóÃæ¤Î°ÌÃÖ
+ 引数
+ 1 enc: 文字エンコーディング
+ 2 start: 文字列ã®å…ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 3 s: 文字列中ã®ä½ç½®
# UChar* onigenc_get_left_adjust_char_head(OnigEncoding enc,
const UChar* start, const UChar* s)
- ʸ»ú¤ÎÀèÆ¬¥Ð¥¤¥È°ÌÃ֤ˤʤë¤è¤¦¤Ëº¸Â¦¤ËÄ´À°¤·¤¿¥¢¥É¥ì¥¹¤òÊÖ¤¹¡£
+ 文字ã®å…ˆé ­ãƒã‚¤ãƒˆä½ç½®ã«ãªã‚‹ã‚ˆã†ã«å·¦å´ã«èª¿æ•´ã—ãŸã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’è¿”ã™ã€‚
- °ú¿ô
- 1 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
- 2 start: ʸ»úÎó¤ÎÀèÆ¬¥¢¥É¥ì¥¹
- 3 s: ʸ»úÎóÃæ¤Î°ÌÃÖ
+ 引数
+ 1 enc: 文字エンコーディング
+ 2 start: 文字列ã®å…ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 3 s: 文字列中ã®ä½ç½®
# UChar* onigenc_get_right_adjust_char_head(OnigEncoding enc,
const UChar* start, const UChar* s)
- ʸ»ú¤ÎÀèÆ¬¥Ð¥¤¥È°ÌÃ֤ˤʤë¤è¤¦¤Ë±¦Â¦¤ËÄ´À°¤·¤¿¥¢¥É¥ì¥¹¤òÊÖ¤¹¡£
+ 文字ã®å…ˆé ­ãƒã‚¤ãƒˆä½ç½®ã«ãªã‚‹ã‚ˆã†ã«å³å´ã«èª¿æ•´ã—ãŸã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’è¿”ã™ã€‚
- °ú¿ô
- 1 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
- 2 start: ʸ»úÎó¤ÎÀèÆ¬¥¢¥É¥ì¥¹
- 3 s: ʸ»úÎóÃæ¤Î°ÌÃÖ
+ 引数
+ 1 enc: 文字エンコーディング
+ 2 start: 文字列ã®å…ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
+ 3 s: 文字列中ã®ä½ç½®
# int onigenc_strlen(OnigEncoding enc, const UChar* s, const UChar* end)
# int onigenc_strlen_null(OnigEncoding enc, const UChar* s)
- ʸ»úÎó¤Îʸ»ú¿ô¤òÊÖ¤¹¡£
+ æ–‡å­—åˆ—ã®æ–‡å­—æ•°ã‚’è¿”ã™ã€‚
# int onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s)
- ʸ»úÎó¤Î¥Ð¥¤¥È¿ô¤òÊÖ¤¹¡£
+ 文字列ã®ãƒã‚¤ãƒˆæ•°ã‚’è¿”ã™ã€‚
# int onig_set_default_syntax(OnigSyntaxType* syntax)
- ¥Ç¥Õ¥©¥ë¥È¤ÎÀµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤ò¥»¥Ã¥È¤¹¤ë¡£
+ ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ­£è¦è¡¨ç¾ãƒ‘ターン文法をセットã™ã‚‹ã€‚
- °ú¿ô
- 1 syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ
+ 引数
+ 1 syntax: æ­£è¦è¡¨ç¾ãƒ‘ターン文法
# void onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from)
- Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤ò¥³¥Ô¡¼¤¹¤ë¡£
+ æ­£è¦è¡¨ç¾ãƒ‘ターン文法をコピーã™ã‚‹ã€‚
- °ú¿ô
- 1 to: ÂоÝ
- 2 from: ¸µ
+ 引数
+ 1 to: 対象
+ 2 from: å…ƒ
# unsigned int onig_get_syntax_op(OnigSyntaxType* syntax)
@@ -552,35 +562,35 @@
# void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior)
# void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options)
- Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤ÎÍ×ÁǤò»²¾È/¼èÆÀ¤¹¤ë¡£
+ æ­£è¦è¡¨ç¾ãƒ‘ターン文法ã®è¦ç´ ã‚’å‚ç…§/å–å¾—ã™ã‚‹ã€‚
- °ú¿ô
- 1 syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ
- 2 op, op2, behavior, options: Í×ÁǤÎÃÍ
+ 引数
+ 1 syntax: æ­£è¦è¡¨ç¾ãƒ‘ターン文法
+ 2 op, op2, behavior, options: è¦ç´ ã®å€¤
# void onig_copy_encoding(OnigEncoding to, OnigEncoding from)
- ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò¥³¥Ô¡¼¤¹¤ë¡£
+ 文字エンコーディングをコピーã™ã‚‹ã€‚
- °ú¿ô
- 1 to: ÂоÝ
- 2 from: ¸µ
+ 引数
+ 1 to: 対象
+ 2 from: å…ƒ
# int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what,
OnigCodePoint code)
- ¥á¥¿Ê¸»ú¤ò»ØÄꤷ¤¿¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃͤ˥»¥Ã¥È¤¹¤ë¡£
- ONIG_SYN_OP_VARIABLE_META_CHARACTERS¤¬Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤ÇÍ­¸ú¤Ë
- ¤Ê¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¥¨¥¹¥±¡¼¥×ʸ»ú¤ò½ü¤¤¤Æ¡¢¤³¤³¤Ç»ØÄꤷ¤¿¥á¥¿Ê¸»ú¤Ï
- µ¡Ç½¤·¤Ê¤¤¡£(Áȹþ¤ß¤Îʸˡ¤Ç¤ÏÍ­¸ú¤Ë¤·¤Æ¤¤¤Ê¤¤¡£)
+ メタ文字を指定ã—ãŸã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆå€¤ã«ã‚»ãƒƒãƒˆã™ã‚‹ã€‚
+ ONIG_SYN_OP_VARIABLE_META_CHARACTERSãŒæ­£è¦è¡¨ç¾ãƒ‘ã‚¿ãƒ¼ãƒ³æ–‡æ³•ã§æœ‰åйã«
+ ãªã£ã¦ã„ãªã„å ´åˆã«ã¯ã€ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—文字を除ã„ã¦ã€ã“ã“ã§æŒ‡å®šã—ãŸãƒ¡ã‚¿æ–‡å­—ã¯
+ 機能ã—ãªã„。(組込ã¿ã®æ–‡æ³•ã§ã¯æœ‰åйã«ã—ã¦ã„ãªã„。)
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
- °ú¿ô
- 1 syntax: ÂоÝʸˡ
- 2 what: ¥á¥¿Ê¸»úµ¡Ç½¤Î»ØÄê
+ 引数
+ 1 syntax: 対象文法
+ 2 what: ãƒ¡ã‚¿æ–‡å­—æ©Ÿèƒ½ã®æŒ‡å®š
ONIG_META_CHAR_ESCAPE
ONIG_META_CHAR_ANYCHAR
@@ -589,79 +599,79 @@
ONIG_META_CHAR_ONE_OR_MORE_TIME
ONIG_META_CHAR_ANYCHAR_ANYTIME
- 3 code: ¥á¥¿Ê¸»ú¤Î¥³¡¼¥É¥Ý¥¤¥ó¥È ¤Þ¤¿¤Ï ONIG_INEFFECTIVE_META_CHAR.
+ 3 code: メタ文字ã®ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆ ã¾ãŸã¯ ONIG_INEFFECTIVE_META_CHAR.
# OnigCaseFoldType onig_get_default_case_fold_flag()
- ¥Ç¥Õ¥©¥ë¥È¤Îcase fold¥Õ¥é¥°¤ò¼èÆÀ¤¹¤ë¡£
+ デフォルトã®case foldフラグをå–å¾—ã™ã‚‹ã€‚
# int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag)
- ¥Ç¥Õ¥©¥ë¥È¤Îcase fold¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
+ デフォルトã®case foldフラグをセットã™ã‚‹ã€‚
- °ú¿ô
- 1 case_fold_flag: case fold¥Õ¥é¥°
+ 引数
+ 1 case_fold_flag: case foldフラグ
# unsigned int onig_get_match_stack_limit_size(void)
- ¥Þ¥Ã¥Á¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤ÎºÇÂçÃͤòÊÖ¤¹¡£
- (¥Ç¥Õ¥©¥ë¥È: 0 == ̵À©¸Â)
+ マッãƒã‚¹ã‚¿ãƒƒã‚¯ã‚µã‚¤ã‚ºã®æœ€å¤§å€¤ã‚’è¿”ã™ã€‚
+ (デフォルト: 0 == 無制é™)
# int onig_set_match_stack_limit_size(unsigned int size)
- ¥Þ¥Ã¥Á¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤ÎºÇÂçÃͤò»ØÄꤹ¤ë¡£
- (size = 0: ̵À©¸Â)
+ マッãƒã‚¹ã‚¿ãƒƒã‚¯ã‚µã‚¤ã‚ºã®æœ€å¤§å€¤ã‚’指定ã™ã‚‹ã€‚
+ (size = 0: 無制é™)
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
# int onig_unicode_define_user_property(const char* name, OnigCodePoint* ranges))
- ¿·¤·¤¤Unicode¥×¥í¥Ñ¥Æ¥£¤òÄêµÁ¤¹¤ë¡£
- (¤³¤Î´Ø¿ô¤Ï¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ç¤Ï¤Ê¤¤)
+ æ–°ã—ã„Unicodeプロパティを定義ã™ã‚‹ã€‚
+ (ã“ã®é–¢æ•°ã¯ã‚¹ãƒ¬ãƒƒãƒ‰ã‚»ãƒ¼ãƒ•ã§ã¯ãªã„)
- °ú¿ô
- 1 name: ¥×¥í¥Ñ¥Æ¥£Ì¾ (ASCII¥³¡¼¥É¤Î¤ß¡£ ʸ»ú ' ', '-', '_' ¤Ï̵»ë¤µ¤ì¤ë¡£)
- 2 ranges: ¥×¥í¥Ñ¥Æ¥£¥³¡¼¥É¥Ý¥¤¥ó¥ÈÈϰÏ
- (ºÇ½é¤ÎÍ×ÁǤÏÈϰϤοô)
+ 引数
+ 1 name: プロパティå (ASCIIコードã®ã¿ã€‚ 文字 ' ', '-', '_' ã¯ç„¡è¦–ã•れる。)
+ 2 ranges: プロパティコードãƒã‚¤ãƒ³ãƒˆç¯„囲
+ (最åˆã®è¦ç´ ã¯ç¯„å›²ã®æ•°)
[num-of-ranges, 1st-range-start, 1st-range-end, 2nd-range-start... ]
- * ¤³¤Î´Ø¿ô¤ò¸Æ¤ó¤À¸å¤Ç¡¢ranges¤òÊѹ¹/Ç˲õ¤·¤Ê¤¤¤³¤È
+ * ã“ã®é–¢æ•°ã‚’呼んã å¾Œã§ã€rangesを変更/破壊ã—ãªã„ã“ã¨
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
# unsigned int onig_get_parse_depth_limit(void)
- ºÆµ¢¥Ñ¡¼¥¹½èÍý¤ÎºÇÂ翼¤µ¤òÊÖ¤¹¡£
- (¥Ç¥Õ¥©¥ë¥È: regint.h ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë DEFAULT_PARSE_DEPTH_LIMIT¡£¸½ºß¤Ï 4096)
+ å†å¸°ãƒ‘ース処ç†ã®æœ€å¤§æ·±ã•ã‚’è¿”ã™ã€‚
+ (デフォルト: regint.h ã§å®šç¾©ã•れã¦ã„ã‚‹ DEFAULT_PARSE_DEPTH_LIMIT。ç¾åœ¨ã¯ 4096)
# int onig_set_parse_depth_limit(unsigned int depth)
- ºÆµ¢¥Ñ¡¼¥¹½èÍý¤ÎºÇÂ翼¤µ¤ò»ØÄꤹ¤ë¡£
- (depth = 0: regint.h ¤ÇÄêµÁ¤µ¤ì¤¿¥Ç¥Õ¥©¥ë¥ÈÃͤËÀßÄꤹ¤ë¡£)
+ å†å¸°ãƒ‘ース処ç†ã®æœ€å¤§æ·±ã•を指定ã™ã‚‹ã€‚
+ (depth = 0: regint.h ã§å®šç¾©ã•れãŸãƒ‡ãƒ•ォルト値ã«è¨­å®šã™ã‚‹ã€‚)
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
# int onig_end(void)
- ¥é¥¤¥Ö¥é¥ê¤Î»ÈÍѤò½ªÎ»¤¹¤ë¡£
+ ライブラリã®ä½¿ç”¨ã‚’終了ã™ã‚‹ã€‚
- Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL
+ 正常終了戻り値: ONIG_NORMAL
- onig_init()¤òºÆÅٸƤӽФ·¤Æ¤â¡¢°ÊÁ°¤ËºîÀ®¤·¤¿Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È
- ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£
+ onig_init()ã‚’å†åº¦å‘¼ã³å‡ºã—ã¦ã‚‚ã€ä»¥å‰ã«ä½œæˆã—ãŸæ­£è¦è¡¨ç¾ã‚ªãƒ–ジェクト
+ を使用ã™ã‚‹ã“ã¨ã¯ã§ããªã„。
# const char* onig_version(void)
- ¥Ð¡¼¥¸¥ç¥óʸ»úÎó¤òÊÖ¤¹¡£(Îã "5.0.3")
+ ãƒãƒ¼ã‚¸ãƒ§ãƒ³æ–‡å­—列を返ã™ã€‚(例 "5.0.3")
// END
diff --git a/ext/mbstring/oniguruma/doc/FAQ b/ext/mbstring/oniguruma/doc/FAQ
index c00f030453..dfbd7fac79 100644
--- a/ext/mbstring/oniguruma/doc/FAQ
+++ b/ext/mbstring/oniguruma/doc/FAQ
@@ -1,12 +1,12 @@
FAQ 2006/11/14
-1. Lognest match
+1. Longest match
- You can execute longest match by using ONIG_OPTION_FIND_LONGEST option
+ You can execute the longest match by using ONIG_OPTION_FIND_LONGEST option
in onig_new().
2. Mailing list
- There is no mailing list about Oniguruma.
+ There is no mailing list for Oniguruma.
// END
diff --git a/ext/mbstring/oniguruma/doc/FAQ.ja b/ext/mbstring/oniguruma/doc/FAQ.ja
index b8f4aa92d8..ffb25f4a6c 100644
--- a/ext/mbstring/oniguruma/doc/FAQ.ja
+++ b/ext/mbstring/oniguruma/doc/FAQ.ja
@@ -1,22 +1,22 @@
FAQ 2016/04/06
-1. ºÇĹ¥Þ¥Ã¥Á
+1. 最長マッãƒ
- onig_new()¤ÎÃæ¤Ç¡¢ONIG_OPTION_FIND_LONGEST¥ª¥×¥·¥ç¥ó
- ¤ò»ÈÍѤ¹¤ì¤ÐºÇĹ¥Þ¥Ã¥Á¤Ë¤Ê¤ë¡£
+ onig_new()ã®ä¸­ã§ã€ONIG_OPTION_FIND_LONGESTオプション
+ を使用ã™ã‚Œã°æœ€é•·ãƒžãƒƒãƒã«ãªã‚‹ã€‚
2. CR + LF
- DOS¤Î²þ¹Ô(CR(0x0c) + LF(0x0a)¤ÎϢ³)
+ DOSã®æ”¹è¡Œ(CR(0x0c) + LF(0x0a)ã®é€£ç¶š)
- regenc.h¤ÎÃæ¤Î¡¢°Ê²¼¤ÎÉôʬ¤òÍ­¸ú¤Ë¤¹¤ë¡£
+ regenc.hã®ä¸­ã®ã€ä»¥ä¸‹ã®éƒ¨åˆ†ã‚’有効ã«ã™ã‚‹ã€‚
/* #define USE_CRNL_AS_LINE_TERMINATOR */
-3. ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È
+3. メーリングリスト
- µ´¼Ö¤Ë´Ø¤¹¤ë¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ï¸ºß¤·¤Ê¤¤¡£
+ 鬼車ã«é–¢ã™ã‚‹ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¯å­˜åœ¨ã—ãªã„。
//END
diff --git a/ext/mbstring/oniguruma/doc/RE b/ext/mbstring/oniguruma/doc/RE
index 168541597c..64f9bb241c 100644
--- a/ext/mbstring/oniguruma/doc/RE
+++ b/ext/mbstring/oniguruma/doc/RE
@@ -1,6 +1,6 @@
-Oniguruma Regular Expressions Version 6.3.0 2017/05/19
+Oniguruma Regular Expressions Version 6.7.0 2017/12/08
-syntax: ONIG_SYNTAX_RUBY (default)
+syntax: ONIG_SYNTAX_ONIGURUMA (default)
1. Syntax elements
@@ -23,6 +23,7 @@ syntax: ONIG_SYNTAX_RUBY (default)
\e escape (0x1B)
\nnn octal char (encoded byte value)
\o{17777777777} wide octal char (character code point value)
+ \uHHHH wide hexadecimal char (character code point value)
\xHH hexadecimal char (encoded byte value)
\x{7HHHHHHH} wide hexadecimal char (character code point value)
\cx control char (character code point value)
@@ -52,8 +53,8 @@ syntax: ONIG_SYNTAX_RUBY (default)
Not Unicode:
\t, \n, \v, \f, \r, \x20
- Unicode:
- 0009, 000A, 000B, 000C, 000D, 0085(NEL),
+ Unicode case:
+ U+0009, U+000A, U+000B, U+000C, U+000D, U+0085(NEL),
General_Category -- Line_Separator
-- Paragraph_Separator
-- Space_Separator
@@ -70,6 +71,26 @@ syntax: ONIG_SYNTAX_RUBY (default)
\H non-hexdigit char
+ \R general newline (* can't be used in character-class)
+ "\r\n" or \n,\v,\f,\r (* but doesn't backtrack from \r\n to \r)
+
+ Unicode case:
+ "\r\n" or \n,\v,\f,\r or U+0085, U+2028, U+2029
+
+ \N negative newline (?-m:.)
+
+ \O true anychar (?m:.) (* original function)
+
+ \X Extended Grapheme Cluster (?>\O(?:\Y\O)*)
+
+ \X doesn't check whether matching start position is boundary.
+ Write as \y\X if you want to ensure it.
+
+ Unicode case:
+ See [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+ Not Unicode: (?>\r\n|\O)
+
Character Property
@@ -129,10 +150,15 @@ syntax: ONIG_SYNTAX_RUBY (default)
$ end of the line
\b word boundary
\B non-word boundary
+ \y Extended Grapheme Cluster boundary
+ \Y Extended Grapheme Cluster non-boundary
+
\A beginning of string
\Z end of string, or before newline at the end
\z end of string
\G where the current search attempt begins
+ \K keep (keep start position of the result string)
+
6. Character class
@@ -183,9 +209,9 @@ syntax: ONIG_SYNTAX_RUBY (default)
Final_Punctuation | Initial_Punctuation | Other_Punctuation |
Open_Punctuation
space Space_Separator | Line_Separator | Paragraph_Separator |
- 0009 | 000A | 000B | 000C | 000D | 0085
+ U+0009 | U+000A | U+000B | U+000C | U+000D | U+0085
upper Uppercase_Letter
- xdigit 0030 - 0039 | 0041 - 0046 | 0061 - 0066
+ xdigit U+0030 - U+0039 | U+0041 - U+0046 | U+0061 - U+0066
(0-9, a-f, A-F)
word Letter | Mark | Decimal_Number | Connector_Punctuation
@@ -195,11 +221,19 @@ syntax: ONIG_SYNTAX_RUBY (default)
(?#...) comment
- (?imx-imx) option on/off
- i: ignore case
- m: multi-line (dot (.) also matches newline)
- x: extended form
- (?imx-imx:subexp) option on/off for subexp
+ (?imxWDSP-imxWDSP) option on/off
+ i: ignore case
+ m: multi-line (dot (.) also matches newline)
+ x: extended form
+ W: ASCII only word (\w, \p{Word}, [[:word:]])
+ ASCII only word bound (\b)
+ D: ASCII only digit (\d, \p{Digit}, [[:digit:]])
+ S: ASCII only space (\s, \p{Space}, [[:space:]])
+ P: ASCII only POSIX properties (includes W,D,S)
+ (alnum, alpha, blank, cntrl, digit, graph,
+ lower, print, punct, space, upper, xdigit, word)
+
+ (?imxWDSP-imxWDSP:subexp) option on/off for subexp
(?:subexp) non-capturing group
(subexp) capturing group
@@ -228,6 +262,49 @@ syntax: ONIG_SYNTAX_RUBY (default)
Assigning the same name to two or more subexps is allowed.
+ <Absent functions>
+
+ (?~absent) Absent repeater (* proposed by Tanaka Akira)
+ This works like .* (more precisely \O*), but it is
+ limited by the range that does not include the string
+ match with <absent>.
+ This is a written abbreviation of (?~|absent|\O*).
+ \O* is used as a repeater.
+
+ (?~|absent|exp) Absent expression (* original)
+ This works like "exp", but it is limited by the range
+ that does not include the string match with <absent>.
+
+ ex. (?~|345|\d*) "12345678" ==> "12", "1", ""
+
+ (?~|absent) Absent stopper (* original)
+ After passed this operator, string right range is limited
+ at the point that does not include the string match whth
+ <absent>.
+
+ (?~|) Range clear
+ Clear the effects caused by Absent stoppers.
+
+ * Nested Absent functions are not supported and the behavior
+ is undefined.
+
+
+ (?(condition_exp)then_exp|else_exp) if-then-else
+ (?(condition_exp)then_exp) if-then
+
+ condition_exp can be a backreference number/name or a normal
+ regular expression.
+ When condition_exp is a backreference number/name, both then_exp and
+ else_exp can be omitted.
+ Then it works as a backreference validity checker.
+
+ [ backreference validity checker ] (* original)
+
+ (?(n)), (?(-n)), (?(+n)), (?(n+level)) ...
+ (?(<n>)), (?('-n')), (?(<+n>)) ...
+ (?(<name>)), (?('name')), (?(<name+level>)) ...
+
+
8. Backreferences
@@ -237,6 +314,8 @@ syntax: ONIG_SYNTAX_RUBY (default)
\n \k<n> \k'n' (n >= 1) backreference the nth group in the regexp
\k<-n> \k'-n' (n >= 1) backreference the nth group counting
backwards from the referring position
+ \k<+n> \k'+n' (n >= 1) backreference the nth group counting
+ forwards from the referring position
\k<name> \k'name' backreference a group with the specified name
When backreferencing with a name that is assigned to more than one groups,
@@ -280,14 +359,17 @@ syntax: ONIG_SYNTAX_RUBY (default)
p r.match("<foo>f<bar>bbb</bar>f</foo>").captures
-9. Subexp calls ("Tanaka Akira special")
+9. Subexp calls ("Tanaka Akira special") (* original function)
When we say "call a group," it actually means, "re-execute the subexp in
that group."
\g<n> \g'n' (n >= 1) call the nth group
+ \g<0> \g'0' call zero (call the total regexp)
\g<-n> \g'-n' (n >= 1) call the nth group counting backwards from
the calling position
+ \g<+n> \g'+n' (n >= 1) call the nth group counting forwards from
+ the calling position
\g<name> \g'name' call the group with the specified name
* Left-most recursive calls are not allowed.
@@ -340,7 +422,7 @@ syntax: ONIG_SYNTAX_RUBY (default)
-----------------------------
A-1. Syntax-dependent options
- + ONIG_SYNTAX_RUBY
+ + ONIG_SYNTAX_ONIGURUMA
(?m): dot (.) also matches newline
+ ONIG_SYNTAX_PERL and ONIG_SYNTAX_JAVA
@@ -359,10 +441,9 @@ A-2. Original extensions
A-3. Missing features compared with perl 5.8.0
+ \N{name}
- + \l,\u,\L,\U, \X, \C
+ + \l,\u,\L,\U,\C
+ (?{code})
+ (??{code})
- + (?(condition)yes-pat|no-pat)
* \Q...\E
This is effective on ONIG_SYNTAX_PERL and ONIG_SYNTAX_JAVA.
diff --git a/ext/mbstring/oniguruma/doc/RE.ja b/ext/mbstring/oniguruma/doc/RE.ja
index 5c09100400..4679818ac2 100644
--- a/ext/mbstring/oniguruma/doc/RE.ja
+++ b/ext/mbstring/oniguruma/doc/RE.ja
@@ -1,74 +1,95 @@
-µ´¼Ö Àµµ¬É½¸½ Version 6.3.0 2017/05/19
+鬼車 æ­£è¦è¡¨ç¾ Version 6.7.0 2017/12/08
-»ÈÍÑʸˡ: ONIG_SYNTAX_RUBY (´ûÄêÃÍ)
+使用文法: ONIG_SYNTAX_ONIGURUMA (既定値)
-1. ´ðËÜÍ×ÁÇ
+1. 基本è¦ç´ 
- \ ÂàÈò½¤¾þ (¥¨¥¹¥±¡¼¥×) Àµµ¬É½¸½µ­¹æ¤ÎÍ­¸ú/̵¸ú¤ÎÀ©¸æ
- | ÁªÂò»Ò
- (...) ¼°½¸¹ç (¥°¥ë¡¼¥×)
- [...] ʸ»ú½¸¹ç (ʸ»ú¥¯¥é¥¹)
+ \ 退é¿ä¿®é£¾ (エスケープ) æ­£è¦è¡¨ç¾è¨˜å·ã®æœ‰åй/無効ã®åˆ¶å¾¡
+ | é¸æŠžå­
+ (...) å¼é›†åˆ (グループ)
+ [...] æ–‡å­—é›†åˆ (文字クラス)
-2. ʸ»ú
+2. 文字
- \t ¿åÊ¿¥¿¥Ö (0x09)
- \v ¿âľ¥¿¥Ö (0x0B)
- \n ²þ¹Ô (0x0A)
- \r Éüµ¢ (0x0D)
- \b ¸åÂà¶õÇò (0x08)
- \f ²þÊÇ (0x0C)
- \a ¾â (0x07)
- \e ÂàÈò½¤¾þ (0x1B)
- \nnn Ȭ¿Ê¿ôɽ¸½ É乿²½¥Ð¥¤¥ÈÃÍ(¤Î°ìÉô)
- \o{17777777777} ³ÈĥȬ¿Ê¿ôɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ
- \xHH ½½Ï»¿Ê¿ôɽ¸½ É乿²½¥Ð¥¤¥ÈÃÍ(¤Î°ìÉô)
- \x{7HHHHHHH} ³ÈÄ¥½½Ï»¿Ê¿ôɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ
- \cx À©¸æÊ¸»úɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ
- \C-x À©¸æÊ¸»úɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ
- \M-x Ķ (x|0x80) ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ
- \M-\C-x Ķ + À©¸æÊ¸»úɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ
+ \t 水平タブ (0x09)
+ \v 垂直タブ (0x0B)
+ \n 改行 (0x0A)
+ \r 復帰 (0x0D)
+ \b 後退空白 (0x08)
+ \f æ”¹é  (0x0C)
+ \a é˜ (0x07)
+ \e 退é¿ä¿®é£¾ (0x1B)
+ \nnn å…«é€²æ•°è¡¨ç¾ ç¬¦å·åŒ–ãƒã‚¤ãƒˆå€¤(ã®ä¸€éƒ¨)
+ \o{17777777777} æ‹¡å¼µå…«é€²æ•°è¡¨ç¾ ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆå€¤
+ \uHHHH æ‹¡å¼µåå…­é€²æ•°è¡¨ç¾ ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆå€¤
+ \xHH åå…­é€²æ•°è¡¨ç¾ ç¬¦å·åŒ–ãƒã‚¤ãƒˆå€¤(ã®ä¸€éƒ¨)
+ \x{7HHHHHHH} æ‹¡å¼µåå…­é€²æ•°è¡¨ç¾ ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆå€¤
+ \cx åˆ¶å¾¡æ–‡å­—è¡¨ç¾ ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆå€¤
+ \C-x åˆ¶å¾¡æ–‡å­—è¡¨ç¾ ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆå€¤
+ \M-x è¶… (x|0x80) コードãƒã‚¤ãƒ³ãƒˆå€¤
+ \M-\C-x è¶… + åˆ¶å¾¡æ–‡å­—è¡¨ç¾ ã‚³ãƒ¼ãƒ‰ãƒã‚¤ãƒ³ãƒˆå€¤
- ¢¨ \b¤Ï¡¢Ê¸»ú½¸¹çÆâ¤Ç¤Î¤ßÍ­¸ú
+ ※ \bã¯ã€æ–‡å­—集åˆå†…ã§ã®ã¿æœ‰åй
-3. ʸ»ú¼ï
+3. 文字種
- . Ǥ°Õʸ»ú (²þ¹Ô¤ò½ü¤¯)
+ . ä»»æ„æ–‡å­— (改行を除ã: オプションã«ä¾å­˜)
- \w ñ¸ì¹½À®Ê¸»ú
+ \w å˜èªžæ§‹æˆæ–‡å­—
- Unicode°Ê³°¤Î¾ì¹ç:
- ±Ñ¿ô»ú, "_" ¤ª¤è¤Ó ¿¥Ð¥¤¥Èʸ»ú¡£
+ Unicode以外ã®å ´åˆ:
+ 英数字, "_" ãŠã‚ˆã³ 多ãƒã‚¤ãƒˆæ–‡å­—。
- Unicode¤Î¾ì¹ç:
+ Unicodeã®å ´åˆ:
General_Category -- (Letter|Mark|Number|Connector_Punctuation)
- \W Èóñ¸ì¹½À®Ê¸»ú
+ \W éžå˜èªžæ§‹æˆæ–‡å­—
- \s ¶õÇòʸ»ú
+ \s 空白文字
- Unicode°Ê³°¤Î¾ì¹ç:
+ Unicode以外ã®å ´åˆ:
\t, \n, \v, \f, \r, \x20
- Unicode¤Î¾ì¹ç:
- 0009, 000A, 000B, 000C, 000D, 0085(NEL),
+ Unicodeã®å ´åˆ:
+ U+0009, U+000A, U+000B, U+000C, U+000D, U+0085(NEL),
General_Category -- Line_Separator
-- Paragraph_Separator
-- Space_Separator
- \S Èó¶õÇòʸ»ú
+ \S éžç©ºç™½æ–‡å­—
- \d 10¿Ê¿ô»ú
+ \d 10進数字
- Unicode¤Î¾ì¹ç: General_Category -- Decimal_Number
+ Unicodeã®å ´åˆ: General_Category -- Decimal_Number
- \D Èó10¿Ê¿ô»ú
+ \D éž10進数字
- \h 16¿Ê¿ô»ú [0-9a-fA-F]
+ \h 16進数字 [0-9a-fA-F]
- \H Èó16¿Ê¿ô»ú
+ \H éž16進数字
+
+ \R 汎改行 (* 文字集åˆã®ä¸­ã§ã¯ä½¿ç”¨ã§ããªã„)
+ "\r\n" or \n,\v,\f,\r (* 但㗠\r\nã‹ã‚‰\rã«ã¯ãƒãƒƒã‚¯ãƒˆãƒ©ãƒƒã‚¯ã—ãªã„)
+
+ Unicodeã®å ´åˆ:
+ "\r\n" or \n,\v,\f,\r or U+0085, U+2028, U+2029
+
+ \N éžæ”¹è¡Œæ–‡å­— (?-m:.)
+
+ \O çœŸä»»æ„æ–‡å­— (?m:.) (* 原作)
+
+ \X 拡張書記素房 (?>\O(?:\Y\O)*)
+
+ \Xã¯ç…§åˆã®é–‹å§‹ä½ç½®ãŒæ‹¡å¼µæ›¸è¨˜ç´ æˆ¿ã®å¢ƒç•Œã‹ã©ã†ã‹ã‚’確èªã—ãªã„。
+ ãれを確実ã«ã—ãŸã‘れã°ã€\y\Xã¨æ›¸ã‘ã°è‰¯ã„。
+
+ Unicodeã®å ´åˆ:
+ å‚ç…§ [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+ Unicode以外ã®å ´åˆ: (?>\r\n|\O)
Character Property
@@ -79,95 +100,100 @@
property-name:
- + Á´¤Æ¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÇÍ­¸ú
+ + å…¨ã¦ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã§æœ‰åй
Alnum, Alpha, Blank, Cntrl, Digit, Graph, Lower,
Print, Punct, Space, Upper, XDigit, Word, ASCII,
- + EUC-JP, Shift_JIS¤ÇÍ­¸ú
+ + EUC-JP, Shift_JISã§æœ‰åй
Hiragana, Katakana
- + UTF8, UTF16, UTF32¤ÇÍ­¸ú
- doc/UNICODE_PROPERTIES»²¾È
+ + UTF8, UTF16, UTF32ã§æœ‰åй
+ doc/UNICODE_PROPERTIESå‚ç…§
+
+
+4. 釿Œ‡å®šå­
+ 欲張り
-4. ÎÌ»ØÄê»Ò
+ ? 一回ã¾ãŸã¯é›¶å›ž
+ * 零回以上
+ + 一回以上
+ {n,m} n回以上m回以下
+ {n,} n回以上
+ {,n} 零回以上n回以下 ({0,n})
+ {n} n回
- ÍßÄ¥¤ê
+ 無欲
- ? °ì²ó¤Þ¤¿¤ÏÎí²ó
- * Îí²ó°Ê¾å
- + °ì²ó°Ê¾å
- {n,m} n²ó°Ê¾åm²ó°Ê²¼
- {n,} n²ó°Ê¾å
- {,n} Îí²ó°Ê¾ån²ó°Ê²¼ ({0,n})
- {n} n²ó
+ ?? 一回ã¾ãŸã¯é›¶å›ž
+ *? 零回以上
+ +? 一回以上
+ {n,m}? n回以上m回以下
+ {n,}? n回以上
+ {,n}? 零回以上n回以下 (== {0,n}?)
- ̵Íß
+ 強欲 (欲張りã§ã€ç¹°ã‚Šè¿”ã—ã«æˆåŠŸã—ãŸå¾Œã¯å›žæ•°ã‚’減らã™ã‚ˆã†ãªå¾Œé€€å†è©¦è¡Œã‚’ã—ãªã„)
- ?? °ì²ó¤Þ¤¿¤ÏÎí²ó
- *? Îí²ó°Ê¾å
- +? °ì²ó°Ê¾å
- {n,m}? n²ó°Ê¾åm²ó°Ê²¼
- {n,}? n²ó°Ê¾å
- {,n}? Îí²ó°Ê¾ån²ó°Ê²¼ (== {0,n}?)
+ ?+ 一回ã¾ãŸã¯é›¶å›ž
+ *+ 零回以上
+ ++ 一回以上
- ¶¯Íß (ÍßÄ¥¤ê¤Ç¡¢·«¤êÊÖ¤·¤ËÀ®¸ù¤·¤¿¸å¤Ï²ó¿ô¤ò¸º¤é¤¹¤è¤¦¤Ê¸åÂàºÆ»î¹Ô¤ò¤·¤Ê¤¤)
+ ({n,m}+, {n,}+, {n}+ ã¯ã€ONIG_SYNTAX_JAVAã§ã®ã¿å¼·æ¬²ãªæŒ‡å®šå­)
- ?+ °ì²ó¤Þ¤¿¤ÏÎí²ó
- *+ Îí²ó°Ê¾å
- ++ °ì²ó°Ê¾å
+ 例. /a*+/ === /(?>a*)/
- ({n,m}+, {n,}+, {n}+ ¤Ï¡¢ONIG_SYNTAX_JAVA¤Ç¤Î¤ß¶¯ÍߤʻØÄê»Ò)
- Îã. /a*+/ === /(?>a*)/
+5. 錨
+ ^ 行頭
+ $ 行末
+ \b å˜èªžå¢ƒç•Œ
+ \B éžå˜èªžå¢ƒç•Œ
+ \y 拡張書記素房 境界
+ \Y 拡張書記素房 éžå¢ƒç•Œ
-5. ÉÅ
+ \A 文字列先頭
+ \Z 文字列末尾ã€ã¾ãŸã¯æ–‡å­—åˆ—æœ«å°¾ã®æ”¹è¡Œã®ç›´å‰
+ \z 文字列末尾
+ \G 探索開始ä½ç½®
+ \K ä¿æŒ (çµæžœã®é–‹å§‹ä½ç½®ã‚’ã“ã®ä½ç½®ã«ä¿ã¤)
- ^ ¹ÔƬ
- $ ¹ÔËö
- \b ñ¸ì¶­³¦
- \B Èóñ¸ì¶­³¦
- \A ʸ»úÎóÀèÆ¬
- \Z ʸ»úÎóËöÈø¡¢¤Þ¤¿¤Ïʸ»úÎóËöÈø¤Î²þ¹Ô¤ÎľÁ°
- \z ʸ»úÎóËöÈø
- \G ¾È¹ç³«»Ï°ÌÃÖ
-6. ʸ»ú½¸¹ç
+6. 文字集åˆ
- ^... ÈÝÄê (ºÇÄãÍ¥ÀèÅٱ黻»Ò)
- x-y ÈÏ°Ï (x¤«¤éy¤Þ¤Ç)
- [...] ½¸¹ç (ʸ»ú½¸¹çÆâʸ»ú½¸¹ç)
- ..&&.. Àѱ黻 (^¤Î¼¡¤ËÍ¥ÀèÅÙ¤¬Ä㤤±é»»»Ò)
+ ^... å¦å®š (最低優先度演算å­)
+ x-y 範囲 (xã‹ã‚‰yã¾ã§)
+ [...] é›†åˆ (文字集åˆå†…文字集åˆ)
+ ..&&.. ç©æ¼”ç®— (^ã®æ¬¡ã«å„ªå…ˆåº¦ãŒä½Žã„演算å­)
- Îã. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w]
+ 例. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w]
- ¢¨ '[', '-', ']'¤ò¡¢Ê¸»ú½¸¹çÆâ¤ÇÄ̾ïʸ»ú¤Î°ÕÌ£¤Ç»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢
- ¤³¤ì¤é¤Îʸ»ú¤ò'\'¤ÇÂàÈò½¤¾þ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+ ※ '[', '-', ']'ã‚’ã€æ–‡å­—集åˆå†…ã§é€šå¸¸æ–‡å­—ã®æ„味ã§ä½¿ç”¨ã—ãŸã„å ´åˆã«ã¯ã€
+ ã“ã‚Œã‚‰ã®æ–‡å­—ã‚’'\'ã§é€€é¿ä¿®é£¾ã—ãªã‘れã°ãªã‚‰ãªã„。
- POSIX¥Ö¥é¥±¥Ã¥È ([:xxxxx:], ÈÝÄê [:^xxxxx:])
+ POSIXブラケット ([:xxxxx:], å¦å®š [:^xxxxx:])
- Unicode°Ê³°¤Î¾ì¹ç:
+ Unicode以外ã®å ´åˆ:
- alnum ±Ñ¿ô»ú
- alpha 񥯣
+ alnum 英数字
+ alpha 英字
ascii 0 - 127
blank \t, \x20
cntrl
digit 0-9
- graph ¿¥Ð¥¤¥Èʸ»úÁ´Éô¤ò´Þ¤à
+ graph 多ãƒã‚¤ãƒˆæ–‡å­—全部をå«ã‚€
lower
- print ¿¥Ð¥¤¥Èʸ»úÁ´Éô¤ò´Þ¤à
+ print 多ãƒã‚¤ãƒˆæ–‡å­—全部をå«ã‚€
punct
space \t, \n, \v, \f, \r, \x20
upper
xdigit 0-9, a-f, A-F
- word ±Ñ¿ô»ú, "_" ¤ª¤è¤Ó ¿¥Ð¥¤¥Èʸ»ú
+ word 英数字, "_" ãŠã‚ˆã³ 多ãƒã‚¤ãƒˆæ–‡å­—
- Unicode¤Î¾ì¹ç:
+ Unicodeã®å ´åˆ:
alnum Letter | Mark | Decimal_Number
alpha Letter | Mark
@@ -182,75 +208,130 @@
Final_Punctuation | Initial_Punctuation | Other_Punctuation |
Open_Punctuation
space Space_Separator | Line_Separator | Paragraph_Separator |
- 0009 | 000A | 000B | 000C | 000D | 0085
+ U+0009 | U+000A | U+000B | U+000C | U+000D | U+0085
upper Uppercase_Letter
- xdigit 0030 - 0039 | 0041 - 0046 | 0061 - 0066
+ xdigit U+0030 - U+0039 | U+0041 - U+0046 | U+0061 - U+0066
(0-9, a-f, A-F)
word Letter | Mark | Decimal_Number | Connector_Punctuation
-7. ³ÈÄ¥¼°½¸¹ç
+7. æ‹¡å¼µå¼é›†åˆ
+
+ (?#...) 注釈
+ (?imxWDSP-imxWDSP) 孤立オプション
+ i: å¤§æ–‡å­—å°æ–‡å­—ç…§åˆ
+ m: 複数行
+ x: 拡張形å¼
+ W: wordãŒASCIIã®ã¿ (\w, \p{Word}, [[:word:]])
+ word境界ãŒASCIIã®ã¿ (\b)
+ D: digitãŒASCIIã®ã¿ (\d, \p{Digit}, [[:digit:]])
+ S: spaceãŒASCIIã®ã¿ (\s, \p{Space}, [[:space:]])
+ P: POSIXプロパティãŒASCIIã®ã¿ (W,D,Sã‚’å…¨ã¦å«ã‚“ã§ã„ã‚‹)
+ (alnum, alpha, blank, cntrl, digit, graph,
+ lower, print, punct, space, upper, xdigit, word)
+
+ (?imxWDSP-imxWDSP:å¼) å¼ã‚ªãƒ—ション
+
+ (å¼) æ•ç²å¼é›†åˆ
+ (?:å¼) éžæ•ç²å¼é›†åˆ
+
+ (?=å¼) 先読ã¿
+ (?!å¼) å¦å®šå…ˆèª­ã¿
+ (?<=å¼) 戻り読ã¿
+ (?<!å¼) å¦å®šæˆ»ã‚Šèª­ã¿
+
+ 戻り読ã¿ã®å¼ã¯å›ºå®šæ–‡å­—é•·ã§ãªã‘れã°ãªã‚‰ãªã„。
+ ã—ã‹ã—ã€æœ€ä¸Šä½ã®é¸æŠžå­ã ã‘ã¯ç•°ãªã£ãŸæ–‡å­—é•·ãŒè¨±ã•れる。
+ 例. (?<=a|bc) ã¯è¨±å¯. (?<=aaa(?:b|cd)) ã¯ä¸è¨±å¯
+
+ å¦å®šæˆ»ã‚Šèª­ã¿ã§ã¯ã€æ•ç²å¼é›†åˆã¯è¨±ã•れãªã„ãŒã€
+ éžæ•ç²å¼é›†åˆã¯è¨±ã•れる。
+
+ (?>å¼) 原å­çš„å¼é›†åˆ
+ å¼å…¨ä½“を通éŽã—ãŸã¨ãã€å¼ã®ä¸­ã§ã®å¾Œé€€å†è©¦è¡Œã‚’行ãªã‚ãªã„
+
+ (?<name>å¼), (?'name'å¼)
+ åå‰ä»˜ãæ•ç²å¼é›†åˆ
+ å¼é›†åˆã«åå‰ã‚’割り当ã¦ã‚‹(定義ã™ã‚‹)。
+ (åå‰ã¯å˜èªžæ§‹æˆæ–‡å­—ã§ãªã‘れã°ãªã‚‰ãªã„。)
+
+ åå‰ã ã‘ã§ãªãã€æ•ç²å¼é›†åˆã¨åŒæ§˜ã«ç•ªå·ã‚‚割り当ã¦ã‚‰ã‚Œã‚‹ã€‚
+ ç•ªå·æŒ‡å®šãŒç¦æ­¢ã•れã¦ã„ãªã„状態 (10. æ•ç²å¼é›†åˆ ã‚’å‚ç…§)
+ ã®ã¨ãã¯ã€åå‰ã‚’使ã‚ãªã„ã§ç•ªå·ã§ã‚‚å‚ç…§ã§ãる。
+
+ 複数ã®å¼é›†åˆã«åŒã˜åå‰ã‚’与ãˆã‚‹ã“ã¨ã¯è¨±ã•れã¦ã„る。
+ ã“ã®å ´åˆã«ã¯ã€ã“ã®åå‰ã‚’使用ã—ãŸå¾Œæ–¹å‚ç…§ã¯å¯èƒ½ã§ã‚ã‚‹ãŒã€
+ 部分å¼å‘¼å‡ºã—ã¯ã§ããªã„。
+
+ <ä¸åœ¨æ©Ÿèƒ½ç¾¤>
+
+ (?~ä¸åœ¨å¼) ä¸åœ¨ç¹°ã‚Šè¿”ã— (*原案 田中哲)
+ ã“れã¯.*(より正確ã«ã¯\O*)ã®ã‚ˆã†ã«å‹•作ã™ã‚‹ãŒã€<ä¸åœ¨å¼>ã«
+ é©åˆã™ã‚‹æ–‡å­—列をå«ã¾ãªã„範囲ã«åˆ¶é™ã•れる。
+ ã“れã¯(?~|ä¸åœ¨å¼|\O*)ã®çœç•¥è¡¨è¨˜ã§ã‚る。
+
+ (?~|ä¸åœ¨å¼|å¼) ä¸åœ¨å¼ (* 原作)
+ ã“れã¯<å¼>ã®ã‚ˆã†ã«å‹•作ã™ã‚‹ãŒã€<ä¸åœ¨å¼>ã«é©åˆã™ã‚‹æ–‡å­—列を
+ å«ã¾ãªã„範囲ã«åˆ¶é™ã•れる。
+
+ 例 (?~|345|\d*) "12345678" ==> "12", "1", ""
+
+ (?~|ä¸åœ¨å¼) ä¸åœ¨åœæ­¢ (* 原作)
+ ã“ã®æ¼”ç®—å­ã‚’通éŽã—ãŸå¾Œã¯ã€å¯¾è±¡æ–‡å­—列ã®é©åˆç¯„å›²ã®æœ€å¾ŒãŒ
+ <ä¸åœ¨å¼>ã«é©åˆã™ã‚‹æ–‡å­—列をå«ã¾ãªã„範囲ã«åˆ¶é™ã•れる。
- (?#...) Ãí¼á
- (?imx-imx) ¸ÉΩ¥ª¥×¥·¥ç¥ó
- i: Âçʸ»ú¾®Ê¸»ú¾È¹ç
- m: Ê£¿ô¹Ô
- x: ³ÈÄ¥·Á¼°
- (?imx-imx:¼°) ¼°¥ª¥×¥·¥ç¥ó
+ (?~|) 範囲消去
+ ä¸åœ¨åœæ­¢ã®åŠ¹æžœã‚’æ¶ˆã—ã¦ã€åˆæœŸçŠ¶æ…‹ã«ã™ã‚‹ã€‚
- (¼°) Êá³Í¼°½¸¹ç
- (?:¼°) ÈóÊá³Í¼°½¸¹ç
+ * ä¸åœ¨æ©Ÿèƒ½ã®å…¥ã‚Œå­ã«ã¯å¯¾å¿œã—ã¦ãŠã‚‰ãšã€æŒ™å‹•ã¯ä¸å®šã¨ã™ã‚‹ã€‚
- (?=¼°) ÀèÆÉ¤ß
- (?!¼°) ÈÝÄêÀèÆÉ¤ß
- (?<=¼°) Ìá¤êÆÉ¤ß
- (?<!¼°) ÈÝÄêÌá¤êÆÉ¤ß
- Ìá¤êÆÉ¤ß¤Î¼°¤Ï¸ÇÄêʸ»úĹ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
- ¤·¤«¤·¡¢ºÇ¾å°Ì¤ÎÁªÂò»Ò¤À¤±¤Ï°Û¤Ê¤Ã¤¿Ê¸»úŤ¬µö¤µ¤ì¤ë¡£
- Îã. (?<=a|bc) ¤Ïµö²Ä. (?<=aaa(?:b|cd)) ¤ÏÉÔµö²Ä
+ (?(æ¡ä»¶å¼)æˆåŠŸå¼|失敗å¼) æ¡ä»¶å¼ãŒæˆåŠŸã™ã‚Œã°æˆåŠŸå¼ã€å¤±æ•—ã™ã‚Œã°å¤±æ•—å¼ã‚’実行ã™ã‚‹
+ ã“ã®æ©Ÿèƒ½ã®å­˜åœ¨ç†ç”±ã¯ã€æˆåŠŸå¼ãŒå¤±æ•—ã—ã¦ã‚‚失敗å¼ã«ã¯
+ 行ã‹ãªã„ã“ã¨ã€‚ã“れã¯ä»–ã®æ­£è¦è¡¨ç¾ã§æ›¸ãã“ã¨ãŒã§ããªã„。
+ ã‚‚ã†ã²ã¨ã¤ã¯ã€æ¡ä»¶å¼ãŒå¾Œæ–¹å‚ç…§ã®ç•ªå·/åå‰ã®ã¨ãã€
+ 後方å‚ç…§å€¤ã®æœ‰åŠ¹æ€§ã‚’èª¿ã¹ã‚‹(文字列ã¨ç…§åˆã¯ã—ãªã„)
+ æ„味ã«ãªã‚‹ã€‚
- ÈÝÄêÌá¤êÆÉ¤ß¤Ç¤Ï¡¢Êá³Í¼°½¸¹ç¤Ïµö¤µ¤ì¤Ê¤¤¤¬¡¢
- ÈóÊá³Í¼°½¸¹ç¤Ïµö¤µ¤ì¤ë¡£
+ (?(æ¡ä»¶å¼)æˆåŠŸå¼) æ¡ä»¶å¼ãŒæˆåŠŸã™ã‚Œã°æˆåŠŸå¼ã‚’実行ã™ã‚‹
+ (æ¡ä»¶å¼ãŒé€šå¸¸ã®å¼ã®ã¨ãã«ã¯ã€ã“ã®æ§‹æ–‡ã¯ä¸å¿…è¦ã ãŒ
+ 今ã®ã¨ã“ã‚エラーã«ã¯ã—ãªã„。)
- (?>¼°) ¸¶»ÒŪ¼°½¸¹ç
- ¼°Á´ÂΤòÄ̲ᤷ¤¿¤È¤­¡¢¼°¤ÎÃæ¤Ç¤Î¸åÂàºÆ»î¹Ô¤ò¹Ô¤Ê¤ï¤Ê¤¤
- (?<name>¼°), (?'name'¼°)
- ̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç
- ¼°½¸¹ç¤Ë̾Á°¤ò³ä¤êÅö¤Æ¤ë(ÄêµÁ¤¹¤ë)¡£
- (̾Á°¤Ïñ¸ì¹½À®Ê¸»ú¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£)
+ æ¡ä»¶å¼ã¯å¾Œæ–¹å‚ç…§ã®ç•ªå·/åå‰ã¾ãŸã¯æ™®é€šã®å¼ã‚’使用ã§ãる。
+ æ¡ä»¶å¼ãŒå¾Œæ–¹å‚ç…§ã®å ´åˆã€æˆåŠŸå¼ã¨å¤±æ•—å¼ã®ä¸¡æ–¹ã‚’çœç•¥å¯èƒ½ã§ã‚りã€
+ ã“ã®å ´åˆã€å¾Œæ–¹å‚照値有効性を調ã¹ã‚‹(æˆåŠŸ/失敗)機能ã®ã¿ã«ãªã‚‹ã€‚
- ̾Á°¤À¤±¤Ç¤Ê¤¯¡¢Êá³Í¼°½¸¹ç¤ÈƱÍͤËÈÖ¹æ¤â³ä¤êÅö¤Æ¤é¤ì¤ë¡£
- ÈÖ¹æ»ØÄ꤬¶Ø»ß¤µ¤ì¤Æ¤¤¤Ê¤¤¾õÂÖ (10. Êá³Í¼°½¸¹ç ¤ò»²¾È)
- ¤Î¤È¤­¤Ï¡¢Ì¾Á°¤ò»È¤ï¤Ê¤¤¤ÇÈÖ¹æ¤Ç¤â»²¾È¤Ç¤­¤ë¡£
+ [後方å‚照値有効性確èªå™¨] (* 原作)
+ (?(n)), (?(-n)), (?(+n)), (?(n+level)) ...
+ (?(<n>)), (?('-n')), (?(<+n>)) ...
+ (?(<name>)), (?('name')), (?(<name+level>)) ...
- Ê£¿ô¤Î¼°½¸¹ç¤ËƱ¤¸Ì¾Á°¤òÍ¿¤¨¤ë¤³¤È¤Ïµö¤µ¤ì¤Æ¤¤¤ë¡£
- ¤³¤Î¾ì¹ç¤Ë¤Ï¡¢¤³¤Î̾Á°¤ò»ÈÍѤ·¤¿¸åÊý»²¾È¤Ï²Äǽ¤Ç¤¢¤ë¤¬¡¢
- Éôʬ¼°¸Æ½Ð¤·¤Ï¤Ç¤­¤Ê¤¤¡£
-8. ¸åÊý»²¾È
+8. 後方å‚ç…§
- \n ÈÖ¹æ»ØÄ껲¾È (n >= 1)
- \k<n> ÈÖ¹æ»ØÄ껲¾È (n >= 1)
- \k'n' ÈÖ¹æ»ØÄ껲¾È (n >= 1)
- \k<-n> ÁêÂÐÈÖ¹æ»ØÄ껲¾È (n >= 1)
- \k'-n' ÁêÂÐÈÖ¹æ»ØÄ껲¾È (n >= 1)
- \k<name> ̾Á°»ØÄ껲¾È
- \k'name' ̾Á°»ØÄ껲¾È
+ \n ç•ªå·æŒ‡å®šå‚ç…§ (n >= 1)
+ \k<n> ç•ªå·æŒ‡å®šå‚ç…§ (n >= 1)
+ \k'n' ç•ªå·æŒ‡å®šå‚ç…§ (n >= 1)
+ \k<-n> ç›¸å¯¾ç•ªå·æŒ‡å®šå‚ç…§ (n >= 1)
+ \k'-n' ç›¸å¯¾ç•ªå·æŒ‡å®šå‚ç…§ (n >= 1)
+ \k<+n> ç›¸å¯¾ç•ªå·æŒ‡å®šå‚ç…§ (n >= 1)
+ \k'+n' ç›¸å¯¾ç•ªå·æŒ‡å®šå‚ç…§ (n >= 1)
+ \k<name> å剿Œ‡å®šå‚ç…§
+ \k'name' å剿Œ‡å®šå‚ç…§
- ̾Á°»ØÄ껲¾È¤Ç¡¢¤½¤Î̾Á°¤¬Ê£¿ô¤Î¼°½¸¹ç¤Ç¿½ÅÄêµÁ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢
- ÈÖ¹æ¤ÎÂ礭¤¤¼°½¸¹ç¤«¤éÍ¥ÀèŪ¤Ë»²¾È¤µ¤ì¤ë¡£
- (¥Þ¥Ã¥Á¤·¤Ê¤¤¤È¤­¤Ë¤ÏÈÖ¹æ¤Î¾®¤µ¤¤¼°½¸¹ç¤¬»²¾È¤µ¤ì¤ë)
+ å剿Œ‡å®šå‚ç…§ã§ã€ãã®åå‰ãŒè¤‡æ•°ã®å¼é›†åˆã§å¤šé‡å®šç¾©ã•れã¦ã„ã‚‹å ´åˆã«ã¯ã€
+ 番å·ã®å¤§ãã„å¼é›†åˆã‹ã‚‰å„ªå…ˆçš„ã«å‚ç…§ã•れる。
+ (マッãƒã—ãªã„ã¨ãã«ã¯ç•ªå·ã®å°ã•ã„å¼é›†åˆãŒå‚ç…§ã•れる)
- ¢¨ ÈÖ¹æ»ØÄ껲¾È¤Ï¡¢Ì¾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤¬ÄêµÁ¤µ¤ì¡¢
- ¤«¤Ä ONIG_OPTION_CAPTURE_GROUP¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢
- ¶Ø»ß¤µ¤ì¤ë¡£(10. Êá³Í¼°½¸¹ç ¤ò»²¾È)
+ ※ ç•ªå·æŒ‡å®šå‚ç…§ã¯ã€åå‰ä»˜ãæ•ç²å¼é›†åˆãŒå®šç¾©ã•れã€
+ ã‹ã¤ ONIG_OPTION_CAPTURE_GROUPãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã«ã¯ã€
+ ç¦æ­¢ã•れる。(10. æ•ç²å¼é›†åˆ ã‚’å‚ç…§)
- ¥Í¥¹¥È¥ì¥Ù¥ëÉÕ¤­¸åÊý»²¾È
+ ãƒã‚¹ãƒˆãƒ¬ãƒ™ãƒ«ä»˜ã後方å‚ç…§
level: 0, 1, 2, ...
@@ -264,14 +345,14 @@
\k'name+level'
\k'name-level'
- ¸åÊý»²¾È¤Î°ÌÃÖ¤«¤éÁêÂÐŪ¤ÊÉôʬ¼°¸Æ½Ð¤·¥Í¥¹¥È¥ì¥Ù¥ë¤ò»ØÄꤷ¤Æ¡¢¤½¤Î¥ì¥Ù¥ë¤Ç¤Î
- Êá³ÍÃͤò»²¾È¤¹¤ë¡£
+ 後方å‚ç…§ã®ä½ç½®ã‹ã‚‰ç›¸å¯¾çš„ãªéƒ¨åˆ†å¼å‘¼å‡ºã—ãƒã‚¹ãƒˆãƒ¬ãƒ™ãƒ«ã‚’指定ã—ã¦ã€ãã®ãƒ¬ãƒ™ãƒ«ã§ã®
+ æ•ç²å€¤ã‚’å‚ç…§ã™ã‚‹ã€‚
- Îã-1.
+ 例-1.
/\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/.match("reer")
- Îã-2.
+ 例-2.
r = Regexp.compile(<<'__REGEXP__'.strip, Regexp::EXTENDED)
(?<element> \g<stag> \g<content>* \g<etag> ){0}
@@ -286,164 +367,167 @@
-9. Éôʬ¼°¸Æ½Ð¤· ("ÅÄÃæÅ¯¥¹¥Ú¥·¥ã¥ë")
+9. 部分å¼å‘¼å‡ºã— ("田中哲スペシャル") (* 原作)
- \g<name> ̾Á°»ØÄê¸Æ½Ð¤·
- \g'name' ̾Á°»ØÄê¸Æ½Ð¤·
- \g<n> ÈÖ¹æ»ØÄê¸Æ½Ð¤· (n >= 1)
- \g'n' ÈÖ¹æ»ØÄê¸Æ½Ð¤· (n >= 1)
- \g<-n> ÁêÂÐÈÖ¹æ»ØÄê¸Æ½Ð¤· (n >= 1)
- \g'-n' ÁêÂÐÈÖ¹æ»ØÄê¸Æ½Ð¤· (n >= 1)
+ \g<name> å剿Œ‡å®šå‘¼å‡ºã—
+ \g'name' å剿Œ‡å®šå‘¼å‡ºã—
+ \g<n> ç•ªå·æŒ‡å®šå‘¼å‡ºã— (n >= 1)
+ \g'n' ç•ªå·æŒ‡å®šå‘¼å‡ºã— (n >= 1)
+ \g<0> ç•ªå·æŒ‡å®šå‘¼å‡ºã—(全体呼ã³å‡ºã—)
+ \g'0' ç•ªå·æŒ‡å®šå‘¼å‡ºã—(全体呼ã³å‡ºã—)
+ \g<-n> ç›¸å¯¾ç•ªå·æŒ‡å®šå‘¼å‡ºã— (n >= 1)
+ \g'-n' ç›¸å¯¾ç•ªå·æŒ‡å®šå‘¼å‡ºã— (n >= 1)
+ \g<+n> ç›¸å¯¾ç•ªå·æŒ‡å®šå‘¼å‡ºã— (n >= 1)
+ \g'+n' ç›¸å¯¾ç•ªå·æŒ‡å®šå‘¼å‡ºã— (n >= 1)
- ¢¨ ºÇº¸°ÌÃ֤ǤκƵ¢¸Æ½Ð¤·¤Ï¶Ø»ß¤µ¤ì¤ë¡£
- Îã. (?<name>a|\g<name>b) => error
+ ※ 最左ä½ç½®ã§ã®å†å¸°å‘¼å‡ºã—ã¯ç¦æ­¢ã•れる。
+ 例. (?<name>a|\g<name>b) => error
(?<name>a|b\g<name>c) => OK
- ¢¨ ÈÖ¹æ»ØÄê¸Æ½Ð¤·¤Ï¡¢Ì¾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤¬ÄêµÁ¤µ¤ì¡¢
- ¤«¤Ä ONIG_OPTION_CAPTURE_GROUP¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢
- ¶Ø»ß¤µ¤ì¤ë¡£ (10. Êá³Í¼°½¸¹ç ¤ò»²¾È)
+ ※ ç•ªå·æŒ‡å®šå‘¼å‡ºã—ã¯ã€åå‰ä»˜ãæ•ç²å¼é›†åˆãŒå®šç¾©ã•れã€
+ ã‹ã¤ ONIG_OPTION_CAPTURE_GROUPãŒæŒ‡å®šã•れã¦ã„ãªã„å ´åˆã«ã¯ã€
+ ç¦æ­¢ã•れる。 (10. æ•ç²å¼é›†åˆ ã‚’å‚ç…§)
- ¢¨ ¸Æ¤Ó½Ð¤µ¤ì¤¿¼°½¸¹ç¤Î¥ª¥×¥·¥ç¥ó¾õÂÖ¤¬¸Æ½Ð¤·Â¦¤Î¥ª¥×¥·¥ç¥ó¾õÂ֤ȰۤʤäƤ¤¤ë
- ¤È¤­¡¢¸Æ¤Ó½Ð¤µ¤ì¤¿Â¦¤Î¥ª¥×¥·¥ç¥ó¾õÂÖ¤¬Í­¸ú¤Ç¤¢¤ë¡£
+ ※ 呼ã³å‡ºã•れãŸå¼é›†åˆã®ã‚ªãƒ—ション状態ãŒå‘¼å‡ºã—å´ã®ã‚ªãƒ—ション状態ã¨ç•°ãªã£ã¦ã„ã‚‹
+ ã¨ãã€å‘¼ã³å‡ºã•れãŸå´ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³çŠ¶æ…‹ãŒæœ‰åйã§ã‚る。
- Îã. (?-i:\g<name>)(?i:(?<name>a)){0} ¤Ï "A" ¤Ë¾È¹çÀ®¸ù¤¹¤ë¡£
+ 例. (?-i:\g<name>)(?i:(?<name>a)){0} 㯠"A" ã«ç…§åˆæˆåŠŸã™ã‚‹ã€‚
-10. Êá³Í¼°½¸¹ç
+10. æ•ç²å¼é›†åˆ
- Êá³Í¼°½¸¹ç(...)¤Ï¡¢°Ê²¼¤Î¾ò·ï¤Ë±þ¤¸¤Æ¿¶Éñ¤¬ÊѲ½¤¹¤ë¡£
- (̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤ÏÊѲ½¤·¤Ê¤¤)
+ æ•ç²å¼é›†åˆ(...)ã¯ã€ä»¥ä¸‹ã®æ¡ä»¶ã«å¿œã˜ã¦æŒ¯èˆžãŒå¤‰åŒ–ã™ã‚‹ã€‚
+ (åå‰ä»˜ãæ•ç²å¼é›†åˆã¯å¤‰åŒ–ã—ãªã„)
- case 1. /.../ (̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤ÏÉÔ»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó¤Ê¤·)
+ case 1. /.../ (åå‰ä»˜ãæ•ç²å¼é›†åˆã¯ä¸ä½¿ç”¨ã€ã‚ªãƒ—ションãªã—)
- (...) ¤Ï¡¢Êá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£
+ (...) ã¯ã€æ•ç²å¼é›†åˆã¨ã—ã¦æ‰±ã‚れる。
- case 2. /.../g (̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤ÏÉÔ»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó 'g'¤ò»ØÄê)
+ case 2. /.../g (åå‰ä»˜ãæ•ç²å¼é›†åˆã¯ä¸ä½¿ç”¨ã€ã‚ªãƒ—ション 'g'を指定)
- (...) ¤Ï¡¢ÈóÊá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£
+ (...) ã¯ã€éžæ•ç²å¼é›†åˆã¨ã—ã¦æ‰±ã‚れる。
- case 3. /..(?<name>..)../ (̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤Ï»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó¤Ê¤·)
+ case 3. /..(?<name>..)../ (åå‰ä»˜ãæ•ç²å¼é›†åˆã¯ä½¿ç”¨ã€ã‚ªãƒ—ションãªã—)
- (...) ¤Ï¡¢ÈóÊá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£
- ÈÖ¹æ»ØÄ껲¾È/¸Æ¤Ó½Ð¤·¤ÏÉÔµö²Ä¡£
+ (...) ã¯ã€éžæ•ç²å¼é›†åˆã¨ã—ã¦æ‰±ã‚れる。
+ ç•ªå·æŒ‡å®šå‚ç…§/呼ã³å‡ºã—ã¯ä¸è¨±å¯ã€‚
- case 4. /..(?<name>..)../G (̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤Ï»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó 'G'¤ò»ØÄê)
+ case 4. /..(?<name>..)../G (åå‰ä»˜ãæ•ç²å¼é›†åˆã¯ä½¿ç”¨ã€ã‚ªãƒ—ション 'G'を指定)
- (...) ¤Ï¡¢Êá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£
- ÈÖ¹æ»ØÄ껲¾È/¸Æ¤Ó½Ð¤·¤Ïµö²Ä¡£
+ (...) ã¯ã€æ•ç²å¼é›†åˆã¨ã—ã¦æ‰±ã‚れる。
+ ç•ªå·æŒ‡å®šå‚ç…§/呼ã³å‡ºã—ã¯è¨±å¯ã€‚
- ⤷
+ 但ã—
g: ONIG_OPTION_DONT_CAPTURE_GROUP
G: ONIG_OPTION_CAPTURE_GROUP
- ('g'¤È'G'¥ª¥×¥·¥ç¥ó¤Ï¡¢ruby-dev ML¤ÇµÄÏÀ¤µ¤ì¤¿¡£)
+ ('g'ã¨'G'オプションã¯ã€ruby-dev MLã§è­°è«–ã•れãŸã€‚)
- ¤³¤ì¤é¤Î¿¶Éñ¤Î°ÕÌ£¤Ï¡¢
- ̾Á°ÉÕ¤­Êá³Í¤È̾Á°Ìµ¤·Êá³Í¤òƱ»þ¤Ë»ÈÍѤ¹¤ëɬÁ³À­¤Î¤¢¤ë¾ìÌ̤Ͼ¯¤Ê¤¤¤Ç¤¢¤í¤¦
- ¤È¤¤¤¦Íýͳ¤«¤é¹Í¤¨¤é¤ì¤¿¤â¤Î¤Ç¤¢¤ë¡£
+ ã“ã‚Œã‚‰ã®æŒ¯èˆžã®æ„味ã¯ã€
+ åå‰ä»˜ãæ•ç²ã¨åå‰ç„¡ã—æ•ç²ã‚’åŒæ™‚ã«ä½¿ç”¨ã™ã‚‹å¿…然性ã®ã‚ã‚‹å ´é¢ã¯å°‘ãªã„ã§ã‚ã‚ã†
+ ã¨ã„ã†ç†ç”±ã‹ã‚‰è€ƒãˆã‚‰ã‚ŒãŸã‚‚ã®ã§ã‚る。
-----------------------------
-Êäµ­ 1. ʸˡ°Í¸¥ª¥×¥·¥ç¥ó
+補記 1. 文法ä¾å­˜ã‚ªãƒ—ション
- + ONIG_SYNTAX_RUBY
- (?m): ½ª»ßÉäµ­¹æ(.)¤Ï²þ¹Ô¤È¾È¹çÀ®¸ù
+ + ONIG_SYNTAX_ONIGURUMA
+ (?m): 終止符記å·(.)ã¯æ”¹è¡Œã¨ç…§åˆæˆåŠŸ
- + ONIG_SYNTAX_PERL ¤È ONIG_SYNTAX_JAVA
- (?s): ½ª»ßÉäµ­¹æ(.)¤Ï²þ¹Ô¤È¾È¹çÀ®¸ù
- (?m): ^ ¤Ï²þ¹Ô¤Îľ¸å¤Ë¾È¹ç¤¹¤ë¡¢$ ¤Ï²þ¹Ô¤ÎľÁ°¤Ë¾È¹ç¤¹¤ë
+ + ONIG_SYNTAX_PERL 㨠ONIG_SYNTAX_JAVA
+ (?s): 終止符記å·(.)ã¯æ”¹è¡Œã¨ç…§åˆæˆåŠŸ
+ (?m): ^ ã¯æ”¹è¡Œã®ç›´å¾Œã«ç…§åˆã™ã‚‹ã€$ ã¯æ”¹è¡Œã®ç›´å‰ã«ç…§åˆã™ã‚‹
-Êäµ­ 2. ÆÈ¼«³ÈÄ¥µ¡Ç½
+補記 2. 独自拡張機能
- + 16¿Ê¿ô¿ô»ú¡¢Èó16¿Ê¿ô»ú \h, \H
- + ̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç (?<name>...), (?'name'...)
- + ̾Á°»ØÄê¸åÊý»²¾È \k<name>
- + Éôʬ¼°¸Æ½Ð¤· \g<name>, \g<group-num>
+ + 16進数数字ã€éž16進数字 \h, \H
+ + åå‰ä»˜ãæ•ç²å¼é›†åˆ (?<name>...), (?'name'...)
+ + å剿Œ‡å®šå¾Œæ–¹å‚ç…§ \k<name>
+ + 部分å¼å‘¼å‡ºã— \g<name>, \g<group-num>
-Êäµ­ 3. Perl 5.8.0¤ÈÈæ³Ó¤·¤ÆÂ¸ºß¤·¤Ê¤¤µ¡Ç½
+補記 3. Perl 5.8.0ã¨æ¯”較ã—ã¦å­˜åœ¨ã—ãªã„機能
+ \N{name}
- + \l,\u,\L,\U, \X, \C
+ + \l,\u,\L,\U,\C
+ (?{code})
+ (??{code})
- + (?(condition)yes-pat|no-pat)
* \Q...\E
- ⤷ONIG_SYNTAX_PERL¤ÈONIG_SYNTAX_JAVA¤Ç¤ÏÍ­¸ú
-
-
-Êäµ­ 4. Ruby 1.8 ¤ÎÆüËܸ첽 GNU regex(version 0.12)¤È¤Î°ã¤¤
-
- + ʸ»úPropertyµ¡Ç½Äɲà (\p{property}, \P{Property})
- + 16¿Ê¿ô»ú¥¿¥¤¥×Äɲà (\h, \H)
- + Ìá¤êÆÉ¤ßµ¡Ç½¤òÄɲÃ
- + ¶¯Íߤʷ«¤êÊÖ¤·»ØÄê»Ò¤òÄɲà (?+, *+, ++)
- + ʸ»ú½¸¹ç¤ÎÃæ¤Î±é»»»Ò¤òÄɲà ([...], &&)
- ('[' ¤Ï¡¢Ê¸»ú½¸¹ç¤ÎÃæ¤ÇÄ̾ï¤Îʸ»ú¤È¤·¤Æ»ÈÍѤ¹¤ë¤È¤­¤Ë¤Ï
- ÂàÈò½¤¾þ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤)
- + ̾Á°ÉÕ¤­Êá³Í¼°½¸¹ç¤È¡¢Éôʬ¼°¸Æ½Ð¤·µ¡Ç½ÄɲÃ
- + ¿¥Ð¥¤¥Èʸ»ú¥³¡¼¥É¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¤È¤­¡¢
- ʸ»ú½¸¹ç¤ÎÃæ¤ÇȬ¿Ê¿ô¤Þ¤¿¤Ï½½Ï»¿Ê¿ôɽ¸½¤ÎϢ³¤Ï¡¢Â¿¥Ð¥¤¥ÈÉ乿¤Çɽ¸½¤µ¤ì¤¿
- °ì¸Ä¤Îʸ»ú¤È²ò¼á¤µ¤ì¤ë
- (Îã. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
- + ʸ»ú½¸¹ç¤ÎÃæ¤Ç¡¢°ì¥Ð¥¤¥Èʸ»ú¤È¿¥Ð¥¤¥Èʸ»ú¤ÎÈϰϻØÄê¤Ïµö¤µ¤ì¤ë¡£
- ex. /[a-¤¢]/
- + ¸ÉΩ¥ª¥×¥·¥ç¥ó¤ÎÍ­¸úÈϰϤϡ¢¤½¤Î¸ÉΩ¥ª¥×¥·¥ç¥ó¤ò´Þ¤ó¤Ç¤¤¤ë¼°½¸¹ç¤Î
- ½ª¤ï¤ê¤Þ¤Ç¤Ç¤¢¤ë
- Îã. (?:(?i)a|b) ¤Ï (?:(?i:a|b)) ¤È²ò¼á¤µ¤ì¤ë¡¢(?:(?i:a)|b)¤Ç¤Ï¤Ê¤¤
- + ¸ÉΩ¥ª¥×¥·¥ç¥ó¤Ï¤½¤ÎÁ°¤Î¼°¤ËÂФ·¤ÆÆ©²áŪ¤Ç¤Ï¤Ê¤¤
- Îã. /a(?i)*/ ¤Ïʸˡ¥¨¥é¡¼¤È¤Ê¤ë
- + ÉÔ´°Á´¤Ê·«¤êÊÖ¤·ÈϰϻØÄê»Ò¤ÏÄ̾ï¤Îʸ»úÎó¤È¤·¤Æµö²Ä¤µ¤ì¤ë
- Îã. /{/, /({)/, /a{2,3/
- + ÈÝÄêŪPOSIX¥Ö¥é¥±¥Ã¥È [:^xxxx:] ¤òÄɲÃ
- + POSIX¥Ö¥é¥±¥Ã¥È [:ascii:] ¤òÄɲÃ
- + ÀèÆÉ¤ß¤Î·«¤êÊÖ¤·¤ÏÉÔµö²Ä
- Îã. /(?=a)*/, /(?!b){5}/
- + ¿ôÃͤǻØÄꤵ¤ì¤¿Ê¸»ú¤ËÂФ·¤Æ¤â¡¢Âçʸ»ú¾®Ê¸»ú¾È¹ç¥ª¥×¥·¥ç¥ó¤ÏÍ­¸ú
- Îã. /\x61/i =~ "A"
- + ·«¤êÊÖ¤·²ó¿ô»ØÄê¤Ç¡¢ºÇÄã²ó¿ô¤Î¾Êά(0²ó)¤¬¤Ç¤­¤ë
+ 但ã—ONIG_SYNTAX_PERLã¨ONIG_SYNTAX_JAVAã§ã¯æœ‰åй
+
+
+補記 4. Ruby 1.8 ã®æ—¥æœ¬èªžåŒ– GNU regex(version 0.12)ã¨ã®é•ã„
+
+ + 文字Property機能追加 (\p{property}, \P{Property})
+ + 16進数字タイプ追加 (\h, \H)
+ + æˆ»ã‚Šèª­ã¿æ©Ÿèƒ½ã‚’追加
+ + 強欲ãªç¹°ã‚Šè¿”ã—æŒ‡å®šå­ã‚’追加 (?+, *+, ++)
+ + 文字集åˆã®ä¸­ã®æ¼”ç®—å­ã‚’追加 ([...], &&)
+ ('[' ã¯ã€æ–‡å­—集åˆã®ä¸­ã§é€šå¸¸ã®æ–‡å­—ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã¨ãã«ã¯
+ 退é¿ä¿®é£¾ã—ãªã‘れã°ãªã‚‰ãªã„)
+ + åå‰ä»˜ãæ•ç²å¼é›†åˆã¨ã€éƒ¨åˆ†å¼å‘¼å‡ºã—機能追加
+ + 多ãƒã‚¤ãƒˆæ–‡å­—ã‚³ãƒ¼ãƒ‰ãŒæŒ‡å®šã•れã¦ã„ã‚‹ã¨ãã€
+ 文字集åˆã®ä¸­ã§å…«é€²æ•°ã¾ãŸã¯å六進数表ç¾ã®é€£ç¶šã¯ã€å¤šãƒã‚¤ãƒˆç¬¦å·ã§è¡¨ç¾ã•れãŸ
+ ä¸€å€‹ã®æ–‡å­—ã¨è§£é‡ˆã•れる
+ (例. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
+ + 文字集åˆã®ä¸­ã§ã€ä¸€ãƒã‚¤ãƒˆæ–‡å­—ã¨å¤šãƒã‚¤ãƒˆæ–‡å­—ã®ç¯„囲指定ã¯è¨±ã•れる。
+ ex. /[a-ã‚]/
+ + å­¤ç«‹ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®æœ‰åŠ¹ç¯„å›²ã¯ã€ãã®å­¤ç«‹ã‚ªãƒ—ションをå«ã‚“ã§ã„ã‚‹å¼é›†åˆã®
+ 終ã‚りã¾ã§ã§ã‚ã‚‹
+ 例. (?:(?i)a|b) 㯠(?:(?i:a|b)) ã¨è§£é‡ˆã•れるã€(?:(?i:a)|b)ã§ã¯ãªã„
+ + 孤立オプションã¯ãã®å‰ã®å¼ã«å¯¾ã—ã¦é€éŽçš„ã§ã¯ãªã„
+ 例. /a(?i)*/ ã¯æ–‡æ³•エラーã¨ãªã‚‹
+ + ä¸å®Œå…¨ãªç¹°ã‚Šè¿”ã—範囲指定å­ã¯é€šå¸¸ã®æ–‡å­—列ã¨ã—ã¦è¨±å¯ã•れる
+ 例. /{/, /({)/, /a{2,3/
+ + å¦å®šçš„POSIXブラケット [:^xxxx:] を追加
+ + POSIXブラケット [:ascii:] を追加
+ + 先読ã¿ã®ç¹°ã‚Šè¿”ã—ã¯ä¸è¨±å¯
+ 例. /(?=a)*/, /(?!b){5}/
+ + æ•°å€¤ã§æŒ‡å®šã•ã‚ŒãŸæ–‡å­—ã«å¯¾ã—ã¦ã‚‚ã€å¤§æ–‡å­—å°æ–‡å­—ç…§åˆã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æœ‰åй
+ 例. /\x61/i =~ "A"
+ + 繰り返ã—回数指定ã§ã€æœ€ä½Žå›žæ•°ã®çœç•¥(0回)ãŒã§ãã‚‹
/a{,n}/ == /a{0,n}/
- ºÇÄã²ó¿ô¤ÈºÇÂç²ó¿ô¤ÎƱ»þ¾Êά¤Ïµö¤µ¤ì¤Ê¤¤¡£(/a{,}/)
- + /a{n}?/¤Ï̵Íߤʱ黻»Ò¤Ç¤Ï¤Ê¤¤¡£
+ æœ€ä½Žå›žæ•°ã¨æœ€å¤§å›žæ•°ã®åŒæ™‚çœç•¥ã¯è¨±ã•れãªã„。(/a{,}/)
+ + /a{n}?/ã¯ç„¡æ¬²ãªæ¼”ç®—å­ã§ã¯ãªã„。
/a{n}?/ == /(?:a{n})?/
- + ̵¸ú¤Ê¸åÊý»²¾È¤ò¥Á¥§¥Ã¥¯¤·¤Æ¥¨¥é¡¼¤Ë¤¹¤ë¡£
+ + 無効ãªå¾Œæ–¹å‚ç…§ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹ã€‚
/\1/, /(a)\2/
- + ̵¸Â·«¤êÊÖ¤·¤ÎÃæ¤Ç¡¢Ä¹¤µÎí¤Ç¤Î¾È¹çÀ®¸ù¤Ï·«¤êÊÖ¤·¤òÃæÃǤµ¤»¤ë¤¬¡¢
- ¤³¤Î¤È¤­¡¢ÃæÃǤ¹¤Ù¤­¤«¤É¤¦¤«¤ÎȽÄê¤È¤·¤Æ¡¢Êá³Í¼°½¸¹ç¤ÎÊá³Í¾õÂÖ¤Î
- ÊѲ½¤Þ¤Ç¹Íθ¤·¤Æ¤¤¤ë
+ + ç„¡é™ç¹°ã‚Šè¿”ã—ã®ä¸­ã§ã€é•·ã•é›¶ã§ã®ç…§åˆæˆåŠŸã¯ç¹°ã‚Šè¿”ã—を中断ã•ã›ã‚‹ãŒã€
+ ã“ã®ã¨ãã€ä¸­æ–­ã™ã¹ãã‹ã©ã†ã‹ã®åˆ¤å®šã¨ã—ã¦ã€æ•ç²å¼é›†åˆã®æ•ç²çŠ¶æ…‹ã®
+ 変化ã¾ã§è€ƒæ…®ã—ã¦ã„ã‚‹
/(?:()|())*\1\2/ =~ ""
/(?:\1a|())*/ =~ "a"
-Êäµ­ 5. ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤¬¡¢´ûÄêÃͤǤÏÍ­¸ú¤Ë¤·¤Æ¤¤¤Ê¤¤µ¡Ç½
+補記 5. 実装ã•れã¦ã„ã‚‹ãŒã€æ—¢å®šå€¤ã§ã¯æœ‰åйã«ã—ã¦ã„ãªã„機能
- + Êá³ÍÍúÎò»²¾È
+ + æ•ç²å±¥æ­´å‚ç…§
- (?@...) ¤È (?@<name>...)
+ (?@...) 㨠(?@<name>...)
- Îã. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
+ 例. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
- »ÈÍÑÊýË¡¤Ï¡¢sample/listcap.c¤ò»²¾È
+ 使用方法ã¯ã€sample/listcap.cã‚’å‚ç…§
- Í­¸ú¤Ë¤·¤Æ¤¤¤Ê¤¤Íýͳ¤Ï¡¢¤É¤ÎÄøÅÙÌò¤ËΩ¤Ä¤«¤Ï¤Ã¤­¤ê¤·¤Ê¤¤¤¿¤á¡£
+ 有効ã«ã—ã¦ã„ãªã„ç†ç”±ã¯ã€ã©ã®ç¨‹åº¦å½¹ã«ç«‹ã¤ã‹ã¯ã£ãりã—ãªã„ãŸã‚。
-Êäµ­ 6. ÌäÂêÅÀ
+補記 6. å•題点
- + ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¥Ð¥¤¥ÈÃͤ¬Å¬Àµ¤Ê²Á¤«¤É¤¦¤«¤Î¥Á¥§¥Ã¥¯¤Ï¹Ô¤Ê¤Ã¤Æ¤¤¤Ê¤¤¡£
+ + エンコーディングãƒã‚¤ãƒˆå€¤ãŒé©æ­£ãªä¾¡ã‹ã©ã†ã‹ã®ãƒã‚§ãƒƒã‚¯ã¯è¡Œãªã£ã¦ã„ãªã„。
- Îã: UTF-8
+ 例: UTF-8
- * ÀèÆ¬¥Ð¥¤¥È¤È¤·¤ÆÉÔÀµ¤Ê¥Ð¥¤¥È¤ò°ìʸ»ú¤È¤ß¤Ê¤¹
+ * 先頭ãƒã‚¤ãƒˆã¨ã—ã¦ä¸æ­£ãªãƒã‚¤ãƒˆã‚’一文字ã¨ã¿ãªã™
/./u =~ "\xa3"
- * ÉÔ´°Á´¤Ê¥Ð¥¤¥È¥·¡¼¥±¥ó¥¹¤Î¥Á¥§¥Ã¥¯¤ò¤·¤Ê¤¤
+ * ä¸å®Œå…¨ãªãƒã‚¤ãƒˆã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®ãƒã‚§ãƒƒã‚¯ã‚’ã—ãªã„
/\w+/u =~ "a\xf3\x8ec"
- ¤³¤ì¤òÄ´¤Ù¤ë¤³¤È¤Ï²Äǽ¤Ç¤Ï¤¢¤ë¤¬¡¢ÃÙ¤¯¤Ê¤ë¤Î¤Ç¹Ô¤Ê¤ï¤Ê¤¤¡£
+ ã“れを調ã¹ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã¯ã‚ã‚‹ãŒã€é…ããªã‚‹ã®ã§è¡Œãªã‚ãªã„。
- ʸ»úÎó¤È¤·¤Æ¡¢¤½¤Î¤è¤¦¤Ê¥Ð¥¤¥ÈÎó¤ò»ØÄꤷ¤¿¾ì¹ç¤Îưºî¤ÏÊݾڤ·¤Ê¤¤¡£
+ 文字列ã¨ã—ã¦ã€ãã®ã‚ˆã†ãªãƒã‚¤ãƒˆåˆ—を指定ã—ãŸå ´åˆã®å‹•作ã¯ä¿è¨¼ã—ãªã„。
-½ª¤ê
+終り
diff --git a/ext/mbstring/oniguruma/doc/UNICODE_PROPERTIES b/ext/mbstring/oniguruma/doc/UNICODE_PROPERTIES
index dedc6587c8..8521f0c72c 100644
--- a/ext/mbstring/oniguruma/doc/UNICODE_PROPERTIES
+++ b/ext/mbstring/oniguruma/doc/UNICODE_PROPERTIES
@@ -1,698 +1,698 @@
Unicode Properties (from Unicode Version: 8.0.0)
- 1: Any
- 2: Assigned
- 3: C
- 4: Cc
- 5: Cf
- 6: Cn
- 7: Co
- 8: Cs
- 9: L
- 10: LC
- 11: Ll
- 12: Lm
- 13: Lo
- 14: Lt
- 15: Lu
- 16: M
- 17: Mc
- 18: Me
- 19: Mn
- 20: N
- 21: Nd
- 22: Nl
- 23: No
- 24: P
- 25: Pc
- 26: Pd
- 27: Pe
- 28: Pf
- 29: Pi
- 30: Po
- 31: Ps
- 32: S
- 33: Sc
- 34: Sk
- 35: Sm
- 36: So
- 37: Z
- 38: Zl
- 39: Zp
- 40: Zs
- 41: Math
- 42: Alphabetic
- 43: Lowercase
- 44: Uppercase
- 45: Cased
- 46: Case_Ignorable
+ 15: ASCII_Hex_Digit
+ 16: Ahom
+ 17: Alphabetic
+ 18: Anatolian_Hieroglyphs
+ 19: Any
+ 20: Arabic
+ 21: Armenian
+ 22: Assigned
+ 23: Avestan
+ 24: Balinese
+ 25: Bamum
+ 26: Bassa_Vah
+ 27: Batak
+ 28: Bengali
+ 29: Bidi_Control
+ 30: Bopomofo
+ 31: Brahmi
+ 32: Braille
+ 33: Buginese
+ 34: Buhid
+ 35: C
+ 36: Canadian_Aboriginal
+ 37: Carian
+ 38: Case_Ignorable
+ 39: Cased
+ 40: Caucasian_Albanian
+ 41: Cc
+ 42: Cf
+ 43: Chakma
+ 44: Cham
+ 45: Changes_When_Casefolded
+ 46: Changes_When_Casemapped
47: Changes_When_Lowercased
- 48: Changes_When_Uppercased
- 49: Changes_When_Titlecased
- 50: Changes_When_Casefolded
- 51: Changes_When_Casemapped
- 52: ID_Start
- 53: ID_Continue
- 54: XID_Start
- 55: XID_Continue
- 56: Default_Ignorable_Code_Point
- 57: Grapheme_Extend
- 58: Grapheme_Base
- 59: Grapheme_Link
- 60: Common
- 61: Latin
- 62: Greek
- 63: Cyrillic
- 64: Armenian
- 65: Hebrew
- 66: Arabic
- 67: Syriac
- 68: Thaana
- 69: Devanagari
- 70: Bengali
- 71: Gurmukhi
- 72: Gujarati
- 73: Oriya
- 74: Tamil
- 75: Telugu
- 76: Kannada
- 77: Malayalam
- 78: Sinhala
- 79: Thai
- 80: Lao
- 81: Tibetan
- 82: Myanmar
- 83: Georgian
- 84: Hangul
- 85: Ethiopic
- 86: Cherokee
- 87: Canadian_Aboriginal
- 88: Ogham
- 89: Runic
- 90: Khmer
- 91: Mongolian
- 92: Hiragana
- 93: Katakana
- 94: Bopomofo
- 95: Han
- 96: Yi
- 97: Old_Italic
- 98: Gothic
- 99: Deseret
-100: Inherited
-101: Tagalog
-102: Hanunoo
-103: Buhid
-104: Tagbanwa
-105: Limbu
-106: Tai_Le
-107: Linear_B
-108: Ugaritic
-109: Shavian
-110: Osmanya
-111: Cypriot
-112: Braille
-113: Buginese
-114: Coptic
-115: New_Tai_Lue
-116: Glagolitic
-117: Tifinagh
-118: Syloti_Nagri
-119: Old_Persian
-120: Kharoshthi
-121: Balinese
-122: Cuneiform
-123: Phoenician
-124: Phags_Pa
-125: Nko
-126: Sundanese
-127: Lepcha
-128: Ol_Chiki
-129: Vai
-130: Saurashtra
-131: Kayah_Li
-132: Rejang
-133: Lycian
-134: Carian
-135: Lydian
-136: Cham
-137: Tai_Tham
-138: Tai_Viet
-139: Avestan
-140: Egyptian_Hieroglyphs
-141: Samaritan
-142: Lisu
-143: Bamum
-144: Javanese
-145: Meetei_Mayek
-146: Imperial_Aramaic
-147: Old_South_Arabian
-148: Inscriptional_Parthian
-149: Inscriptional_Pahlavi
-150: Old_Turkic
-151: Kaithi
-152: Batak
-153: Brahmi
-154: Mandaic
-155: Chakma
-156: Meroitic_Cursive
-157: Meroitic_Hieroglyphs
-158: Miao
-159: Sharada
-160: Sora_Sompeng
-161: Takri
-162: Caucasian_Albanian
-163: Bassa_Vah
-164: Duployan
-165: Elbasan
-166: Grantha
-167: Pahawh_Hmong
-168: Khojki
-169: Linear_A
-170: Mahajani
-171: Manichaean
-172: Mende_Kikakui
-173: Modi
-174: Mro
-175: Old_North_Arabian
-176: Nabataean
-177: Palmyrene
-178: Pau_Cin_Hau
-179: Old_Permic
-180: Psalter_Pahlavi
-181: Siddham
-182: Khudawadi
-183: Tirhuta
-184: Warang_Citi
-185: Ahom
-186: Anatolian_Hieroglyphs
-187: Hatran
-188: Multani
-189: Old_Hungarian
-190: SignWriting
-191: White_Space
-192: Bidi_Control
-193: Join_Control
-194: Dash
-195: Hyphen
-196: Quotation_Mark
-197: Terminal_Punctuation
-198: Other_Math
-199: Hex_Digit
-200: ASCII_Hex_Digit
-201: Other_Alphabetic
-202: Ideographic
-203: Diacritic
-204: Extender
-205: Other_Lowercase
-206: Other_Uppercase
-207: Noncharacter_Code_Point
-208: Other_Grapheme_Extend
-209: IDS_Binary_Operator
-210: IDS_Trinary_Operator
-211: Radical
-212: Unified_Ideograph
-213: Other_Default_Ignorable_Code_Point
-214: Deprecated
-215: Soft_Dotted
-216: Logical_Order_Exception
-217: Other_ID_Start
-218: Other_ID_Continue
-219: STerm
-220: Variation_Selector
-221: Pattern_White_Space
-222: Pattern_Syntax
-223: Unknown
-224: Aghb
-225: AHex
-226: Arab
-227: Armi
-228: Armn
-229: Avst
-230: Bali
-231: Bamu
-232: Bass
-233: Batk
-234: Beng
-235: Bidi_C
-236: Bopo
-237: Brah
-238: Brai
-239: Bugi
-240: Buhd
-241: Cakm
-242: Cans
-243: Cari
-244: Cased_Letter
-245: Cher
-246: CI
-247: Close_Punctuation
-248: Combining_Mark
-249: Connector_Punctuation
-250: Control
-251: Copt
-252: Cprt
-253: Currency_Symbol
-254: CWCF
-255: CWCM
-256: CWL
-257: CWT
-258: CWU
-259: Cyrl
-260: Dash_Punctuation
-261: Decimal_Number
-262: Dep
-263: Deva
-264: DI
-265: Dia
-266: Dsrt
-267: Dupl
-268: Egyp
-269: Elba
-270: Enclosing_Mark
-271: Ethi
-272: Ext
-273: Final_Punctuation
-274: Format
-275: Geor
-276: Glag
-277: Goth
-278: Gran
-279: Gr_Base
-280: Grek
-281: Gr_Ext
-282: Gr_Link
-283: Gujr
-284: Guru
-285: Hang
-286: Hani
-287: Hano
-288: Hatr
-289: Hebr
-290: Hex
-291: Hira
-292: Hluw
-293: Hmng
-294: Hung
-295: IDC
-296: Ideo
-297: IDS
-298: IDSB
-299: IDST
-300: Initial_Punctuation
-301: Ital
-302: Java
-303: Join_C
-304: Kali
-305: Kana
-306: Khar
-307: Khmr
-308: Khoj
-309: Knda
-310: Kthi
-311: Lana
-312: Laoo
-313: Latn
-314: Lepc
-315: Letter
-316: Letter_Number
-317: Limb
-318: Lina
-319: Linb
-320: Line_Separator
-321: LOE
-322: Lowercase_Letter
-323: Lyci
-324: Lydi
-325: Mahj
-326: Mand
-327: Mani
-328: Mark
-329: Math_Symbol
-330: Mend
-331: Merc
-332: Mero
-333: Mlym
-334: Modifier_Letter
-335: Modifier_Symbol
-336: Mong
-337: Mroo
-338: Mtei
-339: Mult
-340: Mymr
-341: Narb
-342: Nbat
-343: NChar
-344: Nkoo
-345: Nonspacing_Mark
-346: Number
-347: OAlpha
-348: ODI
-349: Ogam
-350: OGr_Ext
-351: OIDC
-352: OIDS
-353: Olck
-354: OLower
-355: OMath
-356: Open_Punctuation
-357: Orkh
-358: Orya
-359: Osma
-360: Other
-361: Other_Letter
-362: Other_Number
-363: Other_Punctuation
-364: Other_Symbol
-365: OUpper
-366: Palm
-367: Paragraph_Separator
-368: Pat_Syn
-369: Pat_WS
-370: Pauc
-371: Perm
-372: Phag
-373: Phli
-374: Phlp
-375: Phnx
-376: Plrd
-377: Private_Use
-378: Prti
-379: Punctuation
-380: Qaac
-381: Qaai
-382: QMark
-383: Rjng
-384: Runr
-385: Samr
-386: Sarb
-387: Saur
-388: SD
-389: Separator
-390: Sgnw
-391: Shaw
-392: Shrd
-393: Sidd
-394: Sind
-395: Sinh
-396: Sora
-397: Space_Separator
-398: Spacing_Mark
-399: Sund
-400: Surrogate
-401: Sylo
-402: Symbol
-403: Syrc
-404: Tagb
-405: Takr
-406: Tale
-407: Talu
-408: Taml
-409: Tavt
-410: Telu
-411: Term
-412: Tfng
-413: Tglg
-414: Thaa
-415: Tibt
-416: Tirh
-417: Titlecase_Letter
-418: Ugar
-419: UIdeo
-420: Unassigned
-421: Uppercase_Letter
-422: Vaii
-423: VS
-424: Wara
-425: WSpace
-426: XIDC
-427: XIDS
-428: Xpeo
-429: Xsux
-430: Yiii
-431: Zinh
-432: Zyyy
-433: Zzzz
-434: In_Basic_Latin
-435: In_Latin_1_Supplement
-436: In_Latin_Extended_A
-437: In_Latin_Extended_B
-438: In_IPA_Extensions
-439: In_Spacing_Modifier_Letters
-440: In_Combining_Diacritical_Marks
-441: In_Greek_and_Coptic
-442: In_Cyrillic
-443: In_Cyrillic_Supplement
-444: In_Armenian
-445: In_Hebrew
-446: In_Arabic
-447: In_Syriac
-448: In_Arabic_Supplement
-449: In_Thaana
-450: In_NKo
-451: In_Samaritan
-452: In_Mandaic
-453: In_Arabic_Extended_A
-454: In_Devanagari
-455: In_Bengali
-456: In_Gurmukhi
-457: In_Gujarati
-458: In_Oriya
-459: In_Tamil
-460: In_Telugu
-461: In_Kannada
-462: In_Malayalam
-463: In_Sinhala
-464: In_Thai
-465: In_Lao
-466: In_Tibetan
-467: In_Myanmar
-468: In_Georgian
-469: In_Hangul_Jamo
-470: In_Ethiopic
-471: In_Ethiopic_Supplement
-472: In_Cherokee
-473: In_Unified_Canadian_Aboriginal_Syllabics
-474: In_Ogham
-475: In_Runic
-476: In_Tagalog
-477: In_Hanunoo
-478: In_Buhid
-479: In_Tagbanwa
-480: In_Khmer
-481: In_Mongolian
-482: In_Unified_Canadian_Aboriginal_Syllabics_Extended
-483: In_Limbu
-484: In_Tai_Le
-485: In_New_Tai_Lue
-486: In_Khmer_Symbols
-487: In_Buginese
-488: In_Tai_Tham
-489: In_Combining_Diacritical_Marks_Extended
-490: In_Balinese
-491: In_Sundanese
-492: In_Batak
-493: In_Lepcha
-494: In_Ol_Chiki
-495: In_Sundanese_Supplement
-496: In_Vedic_Extensions
-497: In_Phonetic_Extensions
-498: In_Phonetic_Extensions_Supplement
-499: In_Combining_Diacritical_Marks_Supplement
-500: In_Latin_Extended_Additional
-501: In_Greek_Extended
-502: In_General_Punctuation
-503: In_Superscripts_and_Subscripts
-504: In_Currency_Symbols
-505: In_Combining_Diacritical_Marks_for_Symbols
-506: In_Letterlike_Symbols
-507: In_Number_Forms
-508: In_Arrows
-509: In_Mathematical_Operators
-510: In_Miscellaneous_Technical
-511: In_Control_Pictures
-512: In_Optical_Character_Recognition
-513: In_Enclosed_Alphanumerics
-514: In_Box_Drawing
-515: In_Block_Elements
-516: In_Geometric_Shapes
-517: In_Miscellaneous_Symbols
-518: In_Dingbats
-519: In_Miscellaneous_Mathematical_Symbols_A
-520: In_Supplemental_Arrows_A
-521: In_Braille_Patterns
-522: In_Supplemental_Arrows_B
-523: In_Miscellaneous_Mathematical_Symbols_B
-524: In_Supplemental_Mathematical_Operators
-525: In_Miscellaneous_Symbols_and_Arrows
-526: In_Glagolitic
-527: In_Latin_Extended_C
-528: In_Coptic
-529: In_Georgian_Supplement
-530: In_Tifinagh
-531: In_Ethiopic_Extended
-532: In_Cyrillic_Extended_A
-533: In_Supplemental_Punctuation
-534: In_CJK_Radicals_Supplement
-535: In_Kangxi_Radicals
-536: In_Ideographic_Description_Characters
-537: In_CJK_Symbols_and_Punctuation
-538: In_Hiragana
-539: In_Katakana
-540: In_Bopomofo
-541: In_Hangul_Compatibility_Jamo
-542: In_Kanbun
-543: In_Bopomofo_Extended
-544: In_CJK_Strokes
-545: In_Katakana_Phonetic_Extensions
-546: In_Enclosed_CJK_Letters_and_Months
-547: In_CJK_Compatibility
-548: In_CJK_Unified_Ideographs_Extension_A
-549: In_Yijing_Hexagram_Symbols
-550: In_CJK_Unified_Ideographs
-551: In_Yi_Syllables
-552: In_Yi_Radicals
-553: In_Lisu
-554: In_Vai
-555: In_Cyrillic_Extended_B
-556: In_Bamum
-557: In_Modifier_Tone_Letters
-558: In_Latin_Extended_D
-559: In_Syloti_Nagri
-560: In_Common_Indic_Number_Forms
-561: In_Phags_pa
-562: In_Saurashtra
-563: In_Devanagari_Extended
-564: In_Kayah_Li
-565: In_Rejang
-566: In_Hangul_Jamo_Extended_A
-567: In_Javanese
-568: In_Myanmar_Extended_B
-569: In_Cham
-570: In_Myanmar_Extended_A
-571: In_Tai_Viet
-572: In_Meetei_Mayek_Extensions
-573: In_Ethiopic_Extended_A
-574: In_Latin_Extended_E
-575: In_Cherokee_Supplement
-576: In_Meetei_Mayek
-577: In_Hangul_Syllables
-578: In_Hangul_Jamo_Extended_B
-579: In_High_Surrogates
-580: In_High_Private_Use_Surrogates
-581: In_Low_Surrogates
-582: In_Private_Use_Area
-583: In_CJK_Compatibility_Ideographs
-584: In_Alphabetic_Presentation_Forms
-585: In_Arabic_Presentation_Forms_A
-586: In_Variation_Selectors
-587: In_Vertical_Forms
-588: In_Combining_Half_Marks
-589: In_CJK_Compatibility_Forms
-590: In_Small_Form_Variants
-591: In_Arabic_Presentation_Forms_B
-592: In_Halfwidth_and_Fullwidth_Forms
-593: In_Specials
-594: In_Linear_B_Syllabary
-595: In_Linear_B_Ideograms
-596: In_Aegean_Numbers
-597: In_Ancient_Greek_Numbers
-598: In_Ancient_Symbols
-599: In_Phaistos_Disc
-600: In_Lycian
-601: In_Carian
-602: In_Coptic_Epact_Numbers
-603: In_Old_Italic
-604: In_Gothic
-605: In_Old_Permic
-606: In_Ugaritic
-607: In_Old_Persian
-608: In_Deseret
-609: In_Shavian
-610: In_Osmanya
-611: In_Elbasan
-612: In_Caucasian_Albanian
-613: In_Linear_A
-614: In_Cypriot_Syllabary
-615: In_Imperial_Aramaic
-616: In_Palmyrene
-617: In_Nabataean
-618: In_Hatran
-619: In_Phoenician
-620: In_Lydian
-621: In_Meroitic_Hieroglyphs
-622: In_Meroitic_Cursive
-623: In_Kharoshthi
-624: In_Old_South_Arabian
-625: In_Old_North_Arabian
-626: In_Manichaean
-627: In_Avestan
-628: In_Inscriptional_Parthian
-629: In_Inscriptional_Pahlavi
-630: In_Psalter_Pahlavi
-631: In_Old_Turkic
-632: In_Old_Hungarian
-633: In_Rumi_Numeral_Symbols
-634: In_Brahmi
-635: In_Kaithi
-636: In_Sora_Sompeng
-637: In_Chakma
-638: In_Mahajani
-639: In_Sharada
-640: In_Sinhala_Archaic_Numbers
-641: In_Khojki
-642: In_Multani
-643: In_Khudawadi
-644: In_Grantha
-645: In_Tirhuta
-646: In_Siddham
-647: In_Modi
-648: In_Takri
-649: In_Ahom
-650: In_Warang_Citi
-651: In_Pau_Cin_Hau
-652: In_Cuneiform
-653: In_Cuneiform_Numbers_and_Punctuation
-654: In_Early_Dynastic_Cuneiform
-655: In_Egyptian_Hieroglyphs
-656: In_Anatolian_Hieroglyphs
-657: In_Bamum_Supplement
-658: In_Mro
-659: In_Bassa_Vah
-660: In_Pahawh_Hmong
-661: In_Miao
-662: In_Kana_Supplement
-663: In_Duployan
-664: In_Shorthand_Format_Controls
-665: In_Byzantine_Musical_Symbols
-666: In_Musical_Symbols
-667: In_Ancient_Greek_Musical_Notation
-668: In_Tai_Xuan_Jing_Symbols
-669: In_Counting_Rod_Numerals
-670: In_Mathematical_Alphanumeric_Symbols
-671: In_Sutton_SignWriting
-672: In_Mende_Kikakui
-673: In_Arabic_Mathematical_Alphabetic_Symbols
-674: In_Mahjong_Tiles
-675: In_Domino_Tiles
-676: In_Playing_Cards
-677: In_Enclosed_Alphanumeric_Supplement
-678: In_Enclosed_Ideographic_Supplement
-679: In_Miscellaneous_Symbols_and_Pictographs
-680: In_Emoticons
-681: In_Ornamental_Dingbats
-682: In_Transport_and_Map_Symbols
-683: In_Alchemical_Symbols
-684: In_Geometric_Shapes_Extended
-685: In_Supplemental_Arrows_C
-686: In_Supplemental_Symbols_and_Pictographs
-687: In_CJK_Unified_Ideographs_Extension_B
-688: In_CJK_Unified_Ideographs_Extension_C
-689: In_CJK_Unified_Ideographs_Extension_D
-690: In_CJK_Unified_Ideographs_Extension_E
-691: In_CJK_Compatibility_Ideographs_Supplement
-692: In_Tags
-693: In_Variation_Selectors_Supplement
-694: In_Supplementary_Private_Use_Area_A
-695: In_Supplementary_Private_Use_Area_B
-696: In_No_Block
+ 48: Changes_When_Titlecased
+ 49: Changes_When_Uppercased
+ 50: Cherokee
+ 51: Cn
+ 52: Co
+ 53: Common
+ 54: Coptic
+ 55: Cs
+ 56: Cuneiform
+ 57: Cypriot
+ 58: Cyrillic
+ 59: Dash
+ 60: Default_Ignorable_Code_Point
+ 61: Deprecated
+ 62: Deseret
+ 63: Devanagari
+ 64: Diacritic
+ 65: Duployan
+ 66: Egyptian_Hieroglyphs
+ 67: Elbasan
+ 68: Ethiopic
+ 69: Extender
+ 70: Georgian
+ 71: Glagolitic
+ 72: Gothic
+ 73: Grantha
+ 74: Grapheme_Base
+ 75: Grapheme_Extend
+ 76: Grapheme_Link
+ 77: Greek
+ 78: Gujarati
+ 79: Gurmukhi
+ 80: Han
+ 81: Hangul
+ 82: Hanunoo
+ 83: Hatran
+ 84: Hebrew
+ 85: Hex_Digit
+ 86: Hiragana
+ 87: Hyphen
+ 88: IDS_Binary_Operator
+ 89: IDS_Trinary_Operator
+ 90: ID_Continue
+ 91: ID_Start
+ 92: Ideographic
+ 93: Imperial_Aramaic
+ 94: Inherited
+ 95: Inscriptional_Pahlavi
+ 96: Inscriptional_Parthian
+ 97: Javanese
+ 98: Join_Control
+ 99: Kaithi
+100: Kannada
+101: Katakana
+102: Kayah_Li
+103: Kharoshthi
+104: Khmer
+105: Khojki
+106: Khudawadi
+107: L
+108: LC
+109: Lao
+110: Latin
+111: Lepcha
+112: Limbu
+113: Linear_A
+114: Linear_B
+115: Lisu
+116: Ll
+117: Lm
+118: Lo
+119: Logical_Order_Exception
+120: Lowercase
+121: Lt
+122: Lu
+123: Lycian
+124: Lydian
+125: M
+126: Mahajani
+127: Malayalam
+128: Mandaic
+129: Manichaean
+130: Math
+131: Mc
+132: Me
+133: Meetei_Mayek
+134: Mende_Kikakui
+135: Meroitic_Cursive
+136: Meroitic_Hieroglyphs
+137: Miao
+138: Mn
+139: Modi
+140: Mongolian
+141: Mro
+142: Multani
+143: Myanmar
+144: N
+145: Nabataean
+146: Nd
+147: New_Tai_Lue
+148: Nko
+149: Nl
+150: No
+151: Noncharacter_Code_Point
+152: Ogham
+153: Ol_Chiki
+154: Old_Hungarian
+155: Old_Italic
+156: Old_North_Arabian
+157: Old_Permic
+158: Old_Persian
+159: Old_South_Arabian
+160: Old_Turkic
+161: Oriya
+162: Osmanya
+163: Other_Alphabetic
+164: Other_Default_Ignorable_Code_Point
+165: Other_Grapheme_Extend
+166: Other_ID_Continue
+167: Other_ID_Start
+168: Other_Lowercase
+169: Other_Math
+170: Other_Uppercase
+171: P
+172: Pahawh_Hmong
+173: Palmyrene
+174: Pattern_Syntax
+175: Pattern_White_Space
+176: Pau_Cin_Hau
+177: Pc
+178: Pd
+179: Pe
+180: Pf
+181: Phags_Pa
+182: Phoenician
+183: Pi
+184: Po
+185: Ps
+186: Psalter_Pahlavi
+187: Quotation_Mark
+188: Radical
+189: Rejang
+190: Runic
+191: S
+192: STerm
+193: Samaritan
+194: Saurashtra
+195: Sc
+196: Sharada
+197: Shavian
+198: Siddham
+199: SignWriting
+200: Sinhala
+201: Sk
+202: Sm
+203: So
+204: Soft_Dotted
+205: Sora_Sompeng
+206: Sundanese
+207: Syloti_Nagri
+208: Syriac
+209: Tagalog
+210: Tagbanwa
+211: Tai_Le
+212: Tai_Tham
+213: Tai_Viet
+214: Takri
+215: Tamil
+216: Telugu
+217: Terminal_Punctuation
+218: Thaana
+219: Thai
+220: Tibetan
+221: Tifinagh
+222: Tirhuta
+223: Ugaritic
+224: Unified_Ideograph
+225: Unknown
+226: Uppercase
+227: Vai
+228: Variation_Selector
+229: Warang_Citi
+230: White_Space
+231: XID_Continue
+232: XID_Start
+233: Yi
+234: Z
+235: Zl
+236: Zp
+237: Zs
+ 40: Aghb
+ 15: AHex
+ 20: Arab
+ 93: Armi
+ 21: Armn
+ 23: Avst
+ 24: Bali
+ 25: Bamu
+ 26: Bass
+ 27: Batk
+ 28: Beng
+ 29: Bidi_C
+ 30: Bopo
+ 31: Brah
+ 32: Brai
+ 33: Bugi
+ 34: Buhd
+ 43: Cakm
+ 36: Cans
+ 37: Cari
+108: Cased_Letter
+ 50: Cher
+ 38: CI
+179: Close_Punctuation
+125: Combining_Mark
+177: Connector_Punctuation
+ 41: Control
+ 54: Copt
+ 57: Cprt
+195: Currency_Symbol
+ 45: CWCF
+ 46: CWCM
+ 47: CWL
+ 48: CWT
+ 49: CWU
+ 58: Cyrl
+178: Dash_Punctuation
+146: Decimal_Number
+ 61: Dep
+ 63: Deva
+ 60: DI
+ 64: Dia
+ 62: Dsrt
+ 65: Dupl
+ 66: Egyp
+ 67: Elba
+132: Enclosing_Mark
+ 68: Ethi
+ 69: Ext
+180: Final_Punctuation
+ 42: Format
+ 70: Geor
+ 71: Glag
+ 72: Goth
+ 73: Gran
+ 74: Gr_Base
+ 77: Grek
+ 75: Gr_Ext
+ 76: Gr_Link
+ 78: Gujr
+ 79: Guru
+ 81: Hang
+ 80: Hani
+ 82: Hano
+ 83: Hatr
+ 84: Hebr
+ 85: Hex
+ 86: Hira
+ 18: Hluw
+172: Hmng
+154: Hung
+ 90: IDC
+ 92: Ideo
+ 91: IDS
+ 88: IDSB
+ 89: IDST
+183: Initial_Punctuation
+155: Ital
+ 97: Java
+ 98: Join_C
+102: Kali
+101: Kana
+103: Khar
+104: Khmr
+105: Khoj
+100: Knda
+ 99: Kthi
+212: Lana
+109: Laoo
+110: Latn
+111: Lepc
+107: Letter
+149: Letter_Number
+112: Limb
+113: Lina
+114: Linb
+235: Line_Separator
+119: LOE
+116: Lowercase_Letter
+123: Lyci
+124: Lydi
+126: Mahj
+128: Mand
+129: Mani
+125: Mark
+202: Math_Symbol
+134: Mend
+135: Merc
+136: Mero
+127: Mlym
+117: Modifier_Letter
+201: Modifier_Symbol
+140: Mong
+141: Mroo
+133: Mtei
+142: Mult
+143: Mymr
+156: Narb
+145: Nbat
+151: NChar
+148: Nkoo
+138: Nonspacing_Mark
+144: Number
+163: OAlpha
+164: ODI
+152: Ogam
+165: OGr_Ext
+166: OIDC
+167: OIDS
+153: Olck
+168: OLower
+169: OMath
+185: Open_Punctuation
+160: Orkh
+161: Orya
+162: Osma
+ 35: Other
+118: Other_Letter
+150: Other_Number
+184: Other_Punctuation
+203: Other_Symbol
+170: OUpper
+173: Palm
+236: Paragraph_Separator
+174: Pat_Syn
+175: Pat_WS
+176: Pauc
+157: Perm
+181: Phag
+ 95: Phli
+186: Phlp
+182: Phnx
+137: Plrd
+ 52: Private_Use
+ 96: Prti
+171: Punctuation
+ 54: Qaac
+ 94: Qaai
+187: QMark
+189: Rjng
+190: Runr
+193: Samr
+159: Sarb
+194: Saur
+204: SD
+234: Separator
+199: Sgnw
+197: Shaw
+196: Shrd
+198: Sidd
+106: Sind
+200: Sinh
+205: Sora
+237: Space_Separator
+131: Spacing_Mark
+206: Sund
+ 55: Surrogate
+207: Sylo
+191: Symbol
+208: Syrc
+210: Tagb
+214: Takr
+211: Tale
+147: Talu
+215: Taml
+213: Tavt
+216: Telu
+217: Term
+221: Tfng
+209: Tglg
+218: Thaa
+220: Tibt
+222: Tirh
+121: Titlecase_Letter
+223: Ugar
+224: UIdeo
+ 51: Unassigned
+122: Uppercase_Letter
+227: Vaii
+228: VS
+229: Wara
+230: WSpace
+231: XIDC
+232: XIDS
+158: Xpeo
+ 56: Xsux
+233: Yiii
+ 94: Zinh
+ 53: Zyyy
+225: Zzzz
+238: In_Basic_Latin
+239: In_Latin_1_Supplement
+240: In_Latin_Extended_A
+241: In_Latin_Extended_B
+242: In_IPA_Extensions
+243: In_Spacing_Modifier_Letters
+244: In_Combining_Diacritical_Marks
+245: In_Greek_and_Coptic
+246: In_Cyrillic
+247: In_Cyrillic_Supplement
+248: In_Armenian
+249: In_Hebrew
+250: In_Arabic
+251: In_Syriac
+252: In_Arabic_Supplement
+253: In_Thaana
+254: In_NKo
+255: In_Samaritan
+256: In_Mandaic
+257: In_Arabic_Extended_A
+258: In_Devanagari
+259: In_Bengali
+260: In_Gurmukhi
+261: In_Gujarati
+262: In_Oriya
+263: In_Tamil
+264: In_Telugu
+265: In_Kannada
+266: In_Malayalam
+267: In_Sinhala
+268: In_Thai
+269: In_Lao
+270: In_Tibetan
+271: In_Myanmar
+272: In_Georgian
+273: In_Hangul_Jamo
+274: In_Ethiopic
+275: In_Ethiopic_Supplement
+276: In_Cherokee
+277: In_Unified_Canadian_Aboriginal_Syllabics
+278: In_Ogham
+279: In_Runic
+280: In_Tagalog
+281: In_Hanunoo
+282: In_Buhid
+283: In_Tagbanwa
+284: In_Khmer
+285: In_Mongolian
+286: In_Unified_Canadian_Aboriginal_Syllabics_Extended
+287: In_Limbu
+288: In_Tai_Le
+289: In_New_Tai_Lue
+290: In_Khmer_Symbols
+291: In_Buginese
+292: In_Tai_Tham
+293: In_Combining_Diacritical_Marks_Extended
+294: In_Balinese
+295: In_Sundanese
+296: In_Batak
+297: In_Lepcha
+298: In_Ol_Chiki
+299: In_Sundanese_Supplement
+300: In_Vedic_Extensions
+301: In_Phonetic_Extensions
+302: In_Phonetic_Extensions_Supplement
+303: In_Combining_Diacritical_Marks_Supplement
+304: In_Latin_Extended_Additional
+305: In_Greek_Extended
+306: In_General_Punctuation
+307: In_Superscripts_and_Subscripts
+308: In_Currency_Symbols
+309: In_Combining_Diacritical_Marks_for_Symbols
+310: In_Letterlike_Symbols
+311: In_Number_Forms
+312: In_Arrows
+313: In_Mathematical_Operators
+314: In_Miscellaneous_Technical
+315: In_Control_Pictures
+316: In_Optical_Character_Recognition
+317: In_Enclosed_Alphanumerics
+318: In_Box_Drawing
+319: In_Block_Elements
+320: In_Geometric_Shapes
+321: In_Miscellaneous_Symbols
+322: In_Dingbats
+323: In_Miscellaneous_Mathematical_Symbols_A
+324: In_Supplemental_Arrows_A
+325: In_Braille_Patterns
+326: In_Supplemental_Arrows_B
+327: In_Miscellaneous_Mathematical_Symbols_B
+328: In_Supplemental_Mathematical_Operators
+329: In_Miscellaneous_Symbols_and_Arrows
+330: In_Glagolitic
+331: In_Latin_Extended_C
+332: In_Coptic
+333: In_Georgian_Supplement
+334: In_Tifinagh
+335: In_Ethiopic_Extended
+336: In_Cyrillic_Extended_A
+337: In_Supplemental_Punctuation
+338: In_CJK_Radicals_Supplement
+339: In_Kangxi_Radicals
+340: In_Ideographic_Description_Characters
+341: In_CJK_Symbols_and_Punctuation
+342: In_Hiragana
+343: In_Katakana
+344: In_Bopomofo
+345: In_Hangul_Compatibility_Jamo
+346: In_Kanbun
+347: In_Bopomofo_Extended
+348: In_CJK_Strokes
+349: In_Katakana_Phonetic_Extensions
+350: In_Enclosed_CJK_Letters_and_Months
+351: In_CJK_Compatibility
+352: In_CJK_Unified_Ideographs_Extension_A
+353: In_Yijing_Hexagram_Symbols
+354: In_CJK_Unified_Ideographs
+355: In_Yi_Syllables
+356: In_Yi_Radicals
+357: In_Lisu
+358: In_Vai
+359: In_Cyrillic_Extended_B
+360: In_Bamum
+361: In_Modifier_Tone_Letters
+362: In_Latin_Extended_D
+363: In_Syloti_Nagri
+364: In_Common_Indic_Number_Forms
+365: In_Phags_pa
+366: In_Saurashtra
+367: In_Devanagari_Extended
+368: In_Kayah_Li
+369: In_Rejang
+370: In_Hangul_Jamo_Extended_A
+371: In_Javanese
+372: In_Myanmar_Extended_B
+373: In_Cham
+374: In_Myanmar_Extended_A
+375: In_Tai_Viet
+376: In_Meetei_Mayek_Extensions
+377: In_Ethiopic_Extended_A
+378: In_Latin_Extended_E
+379: In_Cherokee_Supplement
+380: In_Meetei_Mayek
+381: In_Hangul_Syllables
+382: In_Hangul_Jamo_Extended_B
+383: In_High_Surrogates
+384: In_High_Private_Use_Surrogates
+385: In_Low_Surrogates
+386: In_Private_Use_Area
+387: In_CJK_Compatibility_Ideographs
+388: In_Alphabetic_Presentation_Forms
+389: In_Arabic_Presentation_Forms_A
+390: In_Variation_Selectors
+391: In_Vertical_Forms
+392: In_Combining_Half_Marks
+393: In_CJK_Compatibility_Forms
+394: In_Small_Form_Variants
+395: In_Arabic_Presentation_Forms_B
+396: In_Halfwidth_and_Fullwidth_Forms
+397: In_Specials
+398: In_Linear_B_Syllabary
+399: In_Linear_B_Ideograms
+400: In_Aegean_Numbers
+401: In_Ancient_Greek_Numbers
+402: In_Ancient_Symbols
+403: In_Phaistos_Disc
+404: In_Lycian
+405: In_Carian
+406: In_Coptic_Epact_Numbers
+407: In_Old_Italic
+408: In_Gothic
+409: In_Old_Permic
+410: In_Ugaritic
+411: In_Old_Persian
+412: In_Deseret
+413: In_Shavian
+414: In_Osmanya
+415: In_Elbasan
+416: In_Caucasian_Albanian
+417: In_Linear_A
+418: In_Cypriot_Syllabary
+419: In_Imperial_Aramaic
+420: In_Palmyrene
+421: In_Nabataean
+422: In_Hatran
+423: In_Phoenician
+424: In_Lydian
+425: In_Meroitic_Hieroglyphs
+426: In_Meroitic_Cursive
+427: In_Kharoshthi
+428: In_Old_South_Arabian
+429: In_Old_North_Arabian
+430: In_Manichaean
+431: In_Avestan
+432: In_Inscriptional_Parthian
+433: In_Inscriptional_Pahlavi
+434: In_Psalter_Pahlavi
+435: In_Old_Turkic
+436: In_Old_Hungarian
+437: In_Rumi_Numeral_Symbols
+438: In_Brahmi
+439: In_Kaithi
+440: In_Sora_Sompeng
+441: In_Chakma
+442: In_Mahajani
+443: In_Sharada
+444: In_Sinhala_Archaic_Numbers
+445: In_Khojki
+446: In_Multani
+447: In_Khudawadi
+448: In_Grantha
+449: In_Tirhuta
+450: In_Siddham
+451: In_Modi
+452: In_Takri
+453: In_Ahom
+454: In_Warang_Citi
+455: In_Pau_Cin_Hau
+456: In_Cuneiform
+457: In_Cuneiform_Numbers_and_Punctuation
+458: In_Early_Dynastic_Cuneiform
+459: In_Egyptian_Hieroglyphs
+460: In_Anatolian_Hieroglyphs
+461: In_Bamum_Supplement
+462: In_Mro
+463: In_Bassa_Vah
+464: In_Pahawh_Hmong
+465: In_Miao
+466: In_Kana_Supplement
+467: In_Duployan
+468: In_Shorthand_Format_Controls
+469: In_Byzantine_Musical_Symbols
+470: In_Musical_Symbols
+471: In_Ancient_Greek_Musical_Notation
+472: In_Tai_Xuan_Jing_Symbols
+473: In_Counting_Rod_Numerals
+474: In_Mathematical_Alphanumeric_Symbols
+475: In_Sutton_SignWriting
+476: In_Mende_Kikakui
+477: In_Arabic_Mathematical_Alphabetic_Symbols
+478: In_Mahjong_Tiles
+479: In_Domino_Tiles
+480: In_Playing_Cards
+481: In_Enclosed_Alphanumeric_Supplement
+482: In_Enclosed_Ideographic_Supplement
+483: In_Miscellaneous_Symbols_and_Pictographs
+484: In_Emoticons
+485: In_Ornamental_Dingbats
+486: In_Transport_and_Map_Symbols
+487: In_Alchemical_Symbols
+488: In_Geometric_Shapes_Extended
+489: In_Supplemental_Arrows_C
+490: In_Supplemental_Symbols_and_Pictographs
+491: In_CJK_Unified_Ideographs_Extension_B
+492: In_CJK_Unified_Ideographs_Extension_C
+493: In_CJK_Unified_Ideographs_Extension_D
+494: In_CJK_Unified_Ideographs_Extension_E
+495: In_CJK_Compatibility_Ideographs_Supplement
+496: In_Tags
+497: In_Variation_Selectors_Supplement
+498: In_Supplementary_Private_Use_Area_A
+499: In_Supplementary_Private_Use_Area_B
+500: In_No_Block
diff --git a/ext/mbstring/oniguruma/index.html b/ext/mbstring/oniguruma/index.html
index 79e4de0e0f..f2c81768f9 100755
--- a/ext/mbstring/oniguruma/index.html
+++ b/ext/mbstring/oniguruma/index.html
@@ -8,7 +8,7 @@
<h1>Oniguruma</h1> (<a href="index_ja.html">Japanese</a>)
<p>
-(c) K.Kosako, updated at: 2017/05/26
+(c) K.Kosako, updated at: 2018/01/25
</p>
<dl>
@@ -16,6 +16,12 @@
<dt><b>What's new</b>
</font>
<ul>
+<li>2018/01/26: Version 6.7.1 released.</li>
+<li>2017/12/11: Version 6.7.0 released.</li>
+<li>2017/08/30: Version 6.6.1 released.</li>
+<li>2017/08/28: Version 6.6.0 released.</li>
+<li>2017/08/03: Version 6.5.0 released.</li>
+<li>2017/07/03: Version 6.4.0 released.</li>
<li>2017/05/29: Version 6.3.0 released.</li>
<li>2017/04/08: Version 6.2.0 released.</li>
<li>2016/12/11: Version 6.1.3 released.</li>
diff --git a/ext/mbstring/oniguruma/index_ja.html b/ext/mbstring/oniguruma/index_ja.html
index 7070dfe243..8beadd814b 100644
--- a/ext/mbstring/oniguruma/index_ja.html
+++ b/ext/mbstring/oniguruma/index_ja.html
@@ -8,7 +8,7 @@
<h1>鬼車</h1>
<p>
-(c) K.Kosako, 最終更新: 2017/05/26
+(c) K.Kosako, 最終更新: 2018/01/26
</p>
<dl>
@@ -16,6 +16,12 @@
<dt><b>更新情報</b>
</font>
<ul>
+<li>2018/01/26: Version 6.7.1 リリース</li>
+<li>2017/12/11: Version 6.7.0 リリース</li>
+<li>2017/08/30: Version 6.6.1 リリース</li>
+<li>2017/08/28: Version 6.6.0 リリース</li>
+<li>2017/08/03: Version 6.5.0 リリース</li>
+<li>2017/07/03: Version 6.4.0 リリース</li>
<li>2017/05/29: Version 6.3.0 リリース</li>
<li>2017/04/08: Version 6.2.0 リリース</li>
<li>2016/12/11: Version 6.1.3 リリース</li>
diff --git a/ext/mbstring/oniguruma/src/big5.c b/ext/mbstring/oniguruma/src/big5.c
index 8a6bc1f02f..bc713abdd3 100644
--- a/ext/mbstring/oniguruma/src/big5.c
+++ b/ext/mbstring/oniguruma/src/big5.c
@@ -151,7 +151,7 @@ big5_left_adjust_char_head(const UChar* start, const UChar* s)
p++;
break;
}
- }
+ }
}
len = enclen(ONIG_ENCODING_BIG5, p);
if (p + len > s) return (UChar* )p;
diff --git a/ext/mbstring/oniguruma/src/euc_jp.c b/ext/mbstring/oniguruma/src/euc_jp.c
index 6626f14497..42c3bcea43 100644
--- a/ext/mbstring/oniguruma/src/euc_jp.c
+++ b/ext/mbstring/oniguruma/src/euc_jp.c
@@ -2,7 +2,7 @@
euc_jp.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -151,8 +151,8 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
#if 1
if (enclen(ONIG_ENCODING_EUC_JP, buf) != (p - buf))
return ONIGERR_INVALID_CODE_POINT_VALUE;
-#endif
- return p - buf;
+#endif
+ return (int )(p - buf);
}
static int
@@ -230,7 +230,7 @@ static int
property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)
{
struct PropertyNameCtype* pc;
- int len = end - p;
+ int len = (int )(end - p);
char q[32];
if (len < sizeof(q) - 1) {
@@ -252,7 +252,7 @@ is_code_ctype(OnigCodePoint code, unsigned int ctype)
return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
else {
if (CTYPE_IS_WORD_GRAPH_PRINT(ctype)) {
- return (code_to_mbclen(code) > 1 ? TRUE : FALSE);
+ return (code_to_mbclen(code) > 1 ? TRUE : FALSE);
}
}
}
diff --git a/ext/mbstring/oniguruma/src/onigposix.h b/ext/mbstring/oniguruma/src/onigposix.h
index 2af371751c..da0f9195cb 100644
--- a/ext/mbstring/oniguruma/src/onigposix.h
+++ b/ext/mbstring/oniguruma/src/onigposix.h
@@ -4,7 +4,7 @@
onigposix.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -97,7 +97,7 @@ typedef struct {
#ifndef ONIG_EXTERN
#if defined(_WIN32) && !defined(__GNUC__)
-#if defined(EXPORT)
+#if defined(ONIGURUMA_EXPORT)
#define ONIG_EXTERN extern __declspec(dllexport)
#else
#define ONIG_EXTERN extern __declspec(dllimport)
@@ -128,6 +128,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;
ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;
ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;
ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
+ONIG_EXTERN OnigSyntaxType OnigSyntaxOniguruma;
/* predefined syntaxes (see regsyntax.c) */
#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)
@@ -138,6 +139,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)
#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
+#define ONIG_SYNTAX_ONIGURUMA (&OnigSyntaxOniguruma)
/* default syntax */
#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax
@@ -147,6 +149,7 @@ ONIG_EXTERN int onig_set_default_syntax P_((OnigSyntaxType* syntax));
ONIG_EXTERN void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));
ONIG_EXTERN const char* onig_version P_((void));
ONIG_EXTERN const char* onig_copyright P_((void));
+ONIG_EXTERN int onig_end P_((void));
#endif /* ONIGURUMA_H */
diff --git a/ext/mbstring/oniguruma/src/oniguruma.h b/ext/mbstring/oniguruma/src/oniguruma.h
index 7e5b3dfacb..946b20c74a 100644
--- a/ext/mbstring/oniguruma/src/oniguruma.h
+++ b/ext/mbstring/oniguruma/src/oniguruma.h
@@ -4,7 +4,7 @@
oniguruma.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -35,8 +35,8 @@ extern "C" {
#define ONIGURUMA
#define ONIGURUMA_VERSION_MAJOR 6
-#define ONIGURUMA_VERSION_MINOR 3
-#define ONIGURUMA_VERSION_TEENY 0
+#define ONIGURUMA_VERSION_MINOR 7
+#define ONIGURUMA_VERSION_TEENY 1
#ifdef __cplusplus
# ifndef HAVE_PROTOTYPES
@@ -78,7 +78,7 @@ extern "C" {
#ifndef ONIG_EXTERN
#if defined(_WIN32) && !defined(__GNUC__)
-#if defined(EXPORT) || defined(RUBY_EXPORT)
+#if defined(ONIGURUMA_EXPORT)
#define ONIG_EXTERN extern __declspec(dllexport)
#else
#define ONIG_EXTERN extern __declspec(dllimport)
@@ -143,7 +143,7 @@ typedef struct {
OnigCodePoint one_or_more_time;
OnigCodePoint anychar_anytime;
} OnigMetaCharTableType;
-
+
typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
typedef struct OnigEncodingTypeST {
@@ -270,7 +270,7 @@ ONIG_EXTERN OnigEncodingType OnigEncodingGB18030;
#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)
#define ONIGENC_IS_MBC_WORD(enc,s,end) \
ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
-
+#define ONIGENC_IS_MBC_WORD_ASCII(enc,s,end) onigenc_is_mbc_word_ascii(enc,s,end)
#define ONIGENC_NAME(enc) ((enc)->name)
@@ -385,6 +385,7 @@ typedef unsigned int OnigOptionType;
/* options */
#define ONIG_OPTION_NONE 0U
+/* options (compile time) */
#define ONIG_OPTION_IGNORECASE 1U
#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)
#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)
@@ -395,11 +396,18 @@ typedef unsigned int OnigOptionType;
#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)
#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
/* options (search time) */
-#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
-#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
-#define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1)
-#define ONIG_OPTION_CHECK_VALIDITY_OF_STRING (ONIG_OPTION_POSIX_REGION << 1)
-#define ONIG_OPTION_MAXBIT ONIG_OPTION_CHECK_VALIDITY_OF_STRING /* limit */
+#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)
+#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)
+#define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1)
+#define ONIG_OPTION_CHECK_VALIDITY_OF_STRING (ONIG_OPTION_POSIX_REGION << 1)
+/* #define ONIG_OPTION_CRLF_AS_LINE_SEPARATOR (ONIG_OPTION_CHECK_VALIDITY_OF_STRING << 1) */
+/* options (compile time) */
+#define ONIG_OPTION_WORD_IS_ASCII (ONIG_OPTION_CHECK_VALIDITY_OF_STRING << 4)
+#define ONIG_OPTION_DIGIT_IS_ASCII (ONIG_OPTION_WORD_IS_ASCII << 1)
+#define ONIG_OPTION_SPACE_IS_ASCII (ONIG_OPTION_DIGIT_IS_ASCII << 1)
+#define ONIG_OPTION_POSIX_IS_ASCII (ONIG_OPTION_SPACE_IS_ASCII << 1)
+
+#define ONIG_OPTION_MAXBIT ONIG_OPTION_POSIX_IS_ASCII /* limit */
#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))
#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))
@@ -424,6 +432,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;
ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;
ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl_NG;
ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
+ONIG_EXTERN OnigSyntaxType OnigSyntaxOniguruma;
/* predefined syntaxes (see regsyntax.c) */
#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)
@@ -436,6 +445,7 @@ ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)
#define ONIG_SYNTAX_PERL_NG (&OnigSyntaxPerl_NG)
#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
+#define ONIG_SYNTAX_ONIGURUMA (&OnigSyntaxOniguruma)
/* default syntax */
ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
@@ -496,6 +506,13 @@ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */
#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19) /* \h, \H */
#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20) /* \ */
+#define ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE (1U<<21) /* (?(n)) (?(...)...|...) */
+#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<22) /* \K */
+#define ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE (1U<<23) /* \R \r\n else [\x0a-\x0d] */
+#define ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT (1U<<24) /* \N (?-m:.), \O (?m:.) */
+#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP (1U<<25) /* (?~...) */
+#define ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER (1U<<26) /* \X \y \Y */
+#define ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL (1U<<27) /* (?R), (?&name)... */
/* syntax (behavior) */
#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31) /* not implemented */
@@ -545,11 +562,12 @@ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
#define ONIGERR_UNEXPECTED_BYTECODE -14
#define ONIGERR_MATCH_STACK_LIMIT_OVER -15
#define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16
+#define ONIGERR_TRY_IN_MATCH_LIMIT_OVER -17
#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED -21
#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22
#define ONIGERR_FAIL_TO_INITIALIZE -23
/* general error */
-#define ONIGERR_INVALID_ARGUMENT -30
+#define ONIGERR_INVALID_ARGUMENT -30
/* syntax error */
#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100
#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101
@@ -596,6 +614,9 @@ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
#define ONIGERR_NEVER_ENDING_RECURSION -221
#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
+#define ONIGERR_INVALID_IF_ELSE_SYNTAX -224
+#define ONIGERR_INVALID_ABSENT_GROUP_PATTERN -225
+#define ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN -226
#define ONIGERR_INVALID_CODE_POINT_VALUE -400
#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
@@ -609,7 +630,7 @@ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;
/* #define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001 */
-/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */
+/* must be smaller than MEM_STATUS_BITS_NUM (unsigned int * 8) */
#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31
#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \
((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
@@ -669,7 +690,7 @@ typedef struct re_pattern_buffer {
int num_mem; /* used memory(...) num counted from 1 */
int num_repeat; /* OP_REPEAT/OP_REPEAT_NG id-counter */
- int num_null_check; /* OP_NULL_CHECK_START/END id counter */
+ int num_null_check; /* OP_EMPTY_CHECK_START/END id counter */
int num_comb_exp_check; /* combination explosion check */
int num_call; /* number of subexp call */
unsigned int capture_history; /* (?@...) flag (1-31) */
@@ -823,6 +844,10 @@ unsigned int onig_get_match_stack_limit_size P_((void));
ONIG_EXTERN
int onig_set_match_stack_limit_size P_((unsigned int size));
ONIG_EXTERN
+unsigned long onig_get_try_in_match_limit P_((void));
+ONIG_EXTERN
+int onig_set_try_in_match_limit P_((unsigned long n));
+ONIG_EXTERN
unsigned int onig_get_parse_depth_limit P_((void));
ONIG_EXTERN
int onig_set_capture_num_limit P_((int num));
diff --git a/ext/mbstring/oniguruma/src/regcomp.c b/ext/mbstring/oniguruma/src/regcomp.c
index 69a5b96f87..7217432f6e 100644
--- a/ext/mbstring/oniguruma/src/regcomp.c
+++ b/ext/mbstring/oniguruma/src/regcomp.c
@@ -2,7 +2,7 @@
regcomp.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -31,6 +31,83 @@
OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;
+#if 0
+typedef struct {
+ int n;
+ int alloc;
+ int* v;
+} int_stack;
+
+static int
+make_int_stack(int_stack** rs, int init_size)
+{
+ int_stack* s;
+ int* v;
+
+ *rs = 0;
+
+ s = xmalloc(sizeof(*s));
+ if (IS_NULL(s)) return ONIGERR_MEMORY;
+
+ v = (int* )xmalloc(sizeof(int) * init_size);
+ if (IS_NULL(v)) {
+ xfree(s);
+ return ONIGERR_MEMORY;
+ }
+
+ s->n = 0;
+ s->alloc = init_size;
+ s->v = v;
+
+ *rs = s;
+ return ONIG_NORMAL;
+}
+
+static void
+free_int_stack(int_stack* s)
+{
+ if (IS_NOT_NULL(s)) {
+ if (IS_NOT_NULL(s->v))
+ xfree(s->v);
+ xfree(s);
+ }
+}
+
+static int
+int_stack_push(int_stack* s, int v)
+{
+ if (s->n >= s->alloc) {
+ int new_size = s->alloc * 2;
+ int* nv = (int* )xrealloc(s->v, new_size);
+ if (IS_NULL(nv)) return ONIGERR_MEMORY;
+
+ s->alloc = new_size;
+ s->v = nv;
+ }
+
+ s->v[s->n] = v;
+ s->n++;
+ return ONIG_NORMAL;
+}
+
+static int
+int_stack_pop(int_stack* s)
+{
+ int v;
+
+#ifdef ONIG_DEBUG
+ if (s->n <= 0) {
+ fprintf(stderr, "int_stack_pop: fail empty. %p\n", s);
+ return 0;
+ }
+#endif
+
+ v = s->v[s->n];
+ s->n--;
+ return v;
+}
+#endif
+
extern OnigCaseFoldType
onig_get_default_case_fold_flag(void)
{
@@ -44,6 +121,23 @@ onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag)
return 0;
}
+static int
+int_multiply_cmp(int x, int y, int v)
+{
+ if (x == 0 || y == 0) return -1;
+
+ if (x < INT_MAX / y) {
+ int xy = x * y;
+ if (xy > v) return 1;
+ else {
+ if (xy == v) return 0;
+ else return -1;
+ }
+ }
+ else
+ return 1;
+}
+
#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];
@@ -52,7 +146,7 @@ static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];
static UChar*
str_dup(UChar* s, UChar* end)
{
- int len = end - s;
+ int len = (int )(end - s);
if (len > 0) {
UChar* r = (UChar* )xmalloc(len + 1);
@@ -68,21 +162,22 @@ static void
swap_node(Node* a, Node* b)
{
Node c;
+
c = *a; *a = *b; *b = c;
- if (NTYPE(a) == NT_STR) {
- StrNode* sn = NSTR(a);
+ if (NODE_TYPE(a) == NODE_STRING) {
+ StrNode* sn = STR_(a);
if (sn->capa == 0) {
- int len = sn->end - sn->s;
+ int len = (int )(sn->end - sn->s);
sn->s = sn->buf;
sn->end = sn->s + len;
}
}
- if (NTYPE(b) == NT_STR) {
- StrNode* sn = NSTR(b);
+ if (NODE_TYPE(b) == NODE_STRING) {
+ StrNode* sn = STR_(b);
if (sn->capa == 0) {
- int len = sn->end - sn->s;
+ int len = (int )(sn->end - sn->s);
sn->s = sn->buf;
sn->end = sn->s + len;
}
@@ -92,11 +187,11 @@ swap_node(Node* a, Node* b)
static OnigLen
distance_add(OnigLen d1, OnigLen d2)
{
- if (d1 == ONIG_INFINITE_DISTANCE || d2 == ONIG_INFINITE_DISTANCE)
- return ONIG_INFINITE_DISTANCE;
+ if (d1 == INFINITE_LEN || d2 == INFINITE_LEN)
+ return INFINITE_LEN;
else {
- if (d1 <= ONIG_INFINITE_DISTANCE - d2) return d1 + d2;
- else return ONIG_INFINITE_DISTANCE;
+ if (d1 <= INFINITE_LEN - d2) return d1 + d2;
+ else return INFINITE_LEN;
}
}
@@ -105,36 +200,23 @@ distance_multiply(OnigLen d, int m)
{
if (m == 0) return 0;
- if (d < ONIG_INFINITE_DISTANCE / m)
+ if (d < INFINITE_LEN / m)
return d * m;
else
- return ONIG_INFINITE_DISTANCE;
+ return INFINITE_LEN;
}
static int
bitset_is_empty(BitSetRef bs)
{
int i;
+
for (i = 0; i < (int )BITSET_SIZE; i++) {
if (bs[i] != 0) return 0;
}
return 1;
}
-#ifdef ONIG_DEBUG
-static int
-bitset_on_num(BitSetRef bs)
-{
- int i, n;
-
- n = 0;
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (BITSET_AT(bs, i)) n++;
- }
- return n;
-}
-#endif
-
extern int
onig_bbuf_init(BBuf* buf, int size)
{
@@ -153,74 +235,62 @@ onig_bbuf_init(BBuf* buf, int size)
}
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
static int
-unset_addr_list_init(UnsetAddrList* uslist, int size)
+unset_addr_list_init(UnsetAddrList* list, int size)
{
- UnsetAddr* p;
-
- p = (UnsetAddr* )xmalloc(sizeof(UnsetAddr)* size);
+ UnsetAddr* p = (UnsetAddr* )xmalloc(sizeof(UnsetAddr)* size);
CHECK_NULL_RETURN_MEMERR(p);
- uslist->num = 0;
- uslist->alloc = size;
- uslist->us = p;
+
+ list->num = 0;
+ list->alloc = size;
+ list->us = p;
return 0;
}
static void
-unset_addr_list_end(UnsetAddrList* uslist)
+unset_addr_list_end(UnsetAddrList* list)
{
- if (IS_NOT_NULL(uslist->us))
- xfree(uslist->us);
+ if (IS_NOT_NULL(list->us))
+ xfree(list->us);
}
static int
-unset_addr_list_add(UnsetAddrList* uslist, int offset, struct _Node* node)
+unset_addr_list_add(UnsetAddrList* list, int offset, struct _Node* node)
{
UnsetAddr* p;
int size;
- if (uslist->num >= uslist->alloc) {
- size = uslist->alloc * 2;
- p = (UnsetAddr* )xrealloc(uslist->us, sizeof(UnsetAddr) * size);
+ if (list->num >= list->alloc) {
+ size = list->alloc * 2;
+ p = (UnsetAddr* )xrealloc(list->us, sizeof(UnsetAddr) * size);
CHECK_NULL_RETURN_MEMERR(p);
- uslist->alloc = size;
- uslist->us = p;
+ list->alloc = size;
+ list->us = p;
}
- uslist->us[uslist->num].offset = offset;
- uslist->us[uslist->num].target = node;
- uslist->num++;
+ list->us[list->num].offset = offset;
+ list->us[list->num].target = node;
+ list->num++;
return 0;
}
-#endif /* USE_SUBEXP_CALL */
+#endif /* USE_CALL */
static int
add_opcode(regex_t* reg, int opcode)
{
- BBUF_ADD1(reg, opcode);
- return 0;
-}
-
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
-static int
-add_state_check_num(regex_t* reg, int num)
-{
- StateCheckNumType n = (StateCheckNumType )num;
-
- BBUF_ADD(reg, &n, SIZE_STATE_CHECK_NUM);
+ BB_ADD1(reg, opcode);
return 0;
}
-#endif
static int
add_rel_addr(regex_t* reg, int addr)
{
RelAddrType ra = (RelAddrType )addr;
- BBUF_ADD(reg, &ra, SIZE_RELADDR);
+ BB_ADD(reg, &ra, SIZE_RELADDR);
return 0;
}
@@ -229,7 +299,7 @@ add_abs_addr(regex_t* reg, int addr)
{
AbsAddrType ra = (AbsAddrType )addr;
- BBUF_ADD(reg, &ra, SIZE_ABSADDR);
+ BB_ADD(reg, &ra, SIZE_ABSADDR);
return 0;
}
@@ -238,7 +308,7 @@ add_length(regex_t* reg, int len)
{
LengthType l = (LengthType )len;
- BBUF_ADD(reg, &l, SIZE_LENGTH);
+ BB_ADD(reg, &l, SIZE_LENGTH);
return 0;
}
@@ -247,23 +317,50 @@ add_mem_num(regex_t* reg, int num)
{
MemNumType n = (MemNumType )num;
- BBUF_ADD(reg, &n, SIZE_MEMNUM);
+ BB_ADD(reg, &n, SIZE_MEMNUM);
return 0;
}
+#if 0
static int
add_pointer(regex_t* reg, void* addr)
{
PointerType ptr = (PointerType )addr;
- BBUF_ADD(reg, &ptr, SIZE_POINTER);
+ BB_ADD(reg, &ptr, SIZE_POINTER);
return 0;
}
+#endif
static int
add_option(regex_t* reg, OnigOptionType option)
{
- BBUF_ADD(reg, &option, SIZE_OPTION);
+ BB_ADD(reg, &option, SIZE_OPTION);
+ return 0;
+}
+
+static int
+add_save_type(regex_t* reg, enum SaveType type)
+{
+ SaveType t = (SaveType )type;
+
+ BB_ADD(reg, &t, SIZE_SAVE_TYPE);
+ return 0;
+}
+
+static int
+add_update_var_type(regex_t* reg, enum UpdateVarType type)
+{
+ UpdateVarType t = (UpdateVarType )type;
+
+ BB_ADD(reg, &t, SIZE_UPDATE_VAR_TYPE);
+ return 0;
+}
+
+static int
+add_mode(regex_t* reg, ModeType mode)
+{
+ BB_ADD(reg, &mode, SIZE_MODE);
return 0;
}
@@ -273,7 +370,7 @@ add_opcode_rel_addr(regex_t* reg, int opcode, int addr)
int r;
r = add_opcode(reg, opcode);
- if (r) return r;
+ if (r != 0) return r;
r = add_rel_addr(reg, addr);
return r;
}
@@ -281,14 +378,14 @@ add_opcode_rel_addr(regex_t* reg, int opcode, int addr)
static int
add_bytes(regex_t* reg, UChar* bytes, int len)
{
- BBUF_ADD(reg, bytes, len);
+ BB_ADD(reg, bytes, len);
return 0;
}
static int
add_bitset(regex_t* reg, BitSetRef bs)
{
- BBUF_ADD(reg, bs, SIZE_BITSET);
+ BB_ADD(reg, bs, SIZE_BITSET);
return 0;
}
@@ -298,13 +395,13 @@ add_opcode_option(regex_t* reg, int opcode, OnigOptionType option)
int r;
r = add_opcode(reg, opcode);
- if (r) return r;
+ if (r != 0) return r;
r = add_option(reg, option);
return r;
}
static int compile_length_tree(Node* node, regex_t* reg);
-static int compile_tree(Node* node, regex_t* reg);
+static int compile_tree(Node* node, regex_t* reg, ScanEnv* env);
#define IS_NEED_STR_LEN_OP_EXACT(op) \
@@ -357,60 +454,60 @@ select_str_opcode(int mb_len, int str_len, int ignore_case)
}
static int
-compile_tree_empty_check(Node* node, regex_t* reg, int empty_info)
+compile_tree_empty_check(Node* node, regex_t* reg, int empty_info, ScanEnv* env)
{
int r;
int saved_num_null_check = reg->num_null_check;
- if (empty_info != 0) {
- r = add_opcode(reg, OP_NULL_CHECK_START);
- if (r) return r;
+ if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {
+ r = add_opcode(reg, OP_EMPTY_CHECK_START);
+ if (r != 0) return r;
r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
- if (r) return r;
+ if (r != 0) return r;
reg->num_null_check++;
}
- r = compile_tree(node, reg);
- if (r) return r;
+ r = compile_tree(node, reg, env);
+ if (r != 0) return r;
- if (empty_info != 0) {
- if (empty_info == NQ_TARGET_IS_EMPTY)
- r = add_opcode(reg, OP_NULL_CHECK_END);
- else if (empty_info == NQ_TARGET_IS_EMPTY_MEM)
- r = add_opcode(reg, OP_NULL_CHECK_END_MEMST);
- else if (empty_info == NQ_TARGET_IS_EMPTY_REC)
- r = add_opcode(reg, OP_NULL_CHECK_END_MEMST_PUSH);
+ if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {
+ if (empty_info == QUANT_BODY_IS_EMPTY)
+ r = add_opcode(reg, OP_EMPTY_CHECK_END);
+ else if (empty_info == QUANT_BODY_IS_EMPTY_MEM)
+ r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST);
+ else if (empty_info == QUANT_BODY_IS_EMPTY_REC)
+ r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST_PUSH);
- if (r) return r;
+ if (r != 0) return r;
r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */
}
return r;
}
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
static int
-compile_call(CallNode* node, regex_t* reg)
+compile_call(CallNode* node, regex_t* reg, ScanEnv* env)
{
int r;
r = add_opcode(reg, OP_CALL);
- if (r) return r;
- r = unset_addr_list_add(node->unset_addr_list, BBUF_GET_OFFSET_POS(reg),
- node->target);
- if (r) return r;
+ if (r != 0) return r;
+ r = unset_addr_list_add(env->unset_addr_list, BB_GET_OFFSET_POS(reg),
+ NODE_CALL_BODY(node));
+ if (r != 0) return r;
r = add_abs_addr(reg, 0 /*dummy addr.*/);
return r;
}
#endif
static int
-compile_tree_n_times(Node* node, int n, regex_t* reg)
+compile_tree_n_times(Node* node, int n, regex_t* reg, ScanEnv* env)
{
int i, r;
for (i = 0; i < n; i++) {
- r = compile_tree(node, reg);
- if (r) return r;
+ r = compile_tree(node, reg, env);
+ if (r != 0) return r;
}
return 0;
}
@@ -458,15 +555,15 @@ static int
compile_length_string_node(Node* node, regex_t* reg)
{
int rlen, r, len, prev_len, slen, ambig;
- OnigEncoding enc = reg->enc;
UChar *p, *prev;
StrNode* sn;
+ OnigEncoding enc = reg->enc;
- sn = NSTR(node);
+ sn = STR_(node);
if (sn->end <= sn->s)
return 0;
- ambig = NSTRING_IS_AMBIG(node);
+ ambig = NODE_STRING_IS_AMBIG(node);
p = prev = sn->s;
prev_len = enclen(enc, p);
@@ -488,6 +585,7 @@ compile_length_string_node(Node* node, regex_t* reg)
}
p += len;
}
+
r = add_compile_string_length(prev, prev_len, slen, reg, ambig);
rlen += r;
return rlen;
@@ -499,23 +597,24 @@ compile_length_string_raw_node(StrNode* sn, regex_t* reg)
if (sn->end <= sn->s)
return 0;
- return add_compile_string_length(sn->s, 1 /* sb */, sn->end - sn->s, reg, 0);
+ return add_compile_string_length(sn->s, 1 /* sb */, (int )(sn->end - sn->s),
+ reg, 0);
}
static int
compile_string_node(Node* node, regex_t* reg)
{
int r, len, prev_len, slen, ambig;
- OnigEncoding enc = reg->enc;
UChar *p, *prev, *end;
StrNode* sn;
+ OnigEncoding enc = reg->enc;
- sn = NSTR(node);
+ sn = STR_(node);
if (sn->end <= sn->s)
return 0;
end = sn->end;
- ambig = NSTRING_IS_AMBIG(node);
+ ambig = NODE_STRING_IS_AMBIG(node);
p = prev = sn->s;
prev_len = enclen(enc, p);
@@ -529,7 +628,7 @@ compile_string_node(Node* node, regex_t* reg)
}
else {
r = add_compile_string(prev, prev_len, slen, reg, ambig);
- if (r) return r;
+ if (r != 0) return r;
prev = p;
slen = 1;
@@ -538,6 +637,7 @@ compile_string_node(Node* node, regex_t* reg)
p += len;
}
+
return add_compile_string(prev, prev_len, slen, reg, ambig);
}
@@ -547,7 +647,7 @@ compile_string_raw_node(StrNode* sn, regex_t* reg)
if (sn->end <= sn->s)
return 0;
- return add_compile_string(sn->s, 1 /* sb */, sn->end - sn->s, reg, 0);
+ return add_compile_string(sn->s, 1 /* sb */, (int )(sn->end - sn->s), reg, 0);
}
static int
@@ -558,7 +658,7 @@ add_multi_byte_cclass(BBuf* mbuf, regex_t* reg)
return add_bytes(reg, mbuf->p, mbuf->used);
#else
int r, pad_size;
- UChar* p = BBUF_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;
+ UChar* p = BB_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;
GET_ALIGNMENT_PAD_SIZE(p, pad_size);
add_length(reg, mbuf->used + (WORD_ALIGNMENT_SIZE - 1));
@@ -578,11 +678,6 @@ compile_length_cclass_node(CClassNode* cc, regex_t* reg)
{
int len;
- if (IS_NCCLASS_SHARE(cc)) {
- len = SIZE_OPCODE + SIZE_POINTER;
- return len;
- }
-
if (IS_NULL(cc->mbuf)) {
len = SIZE_OPCODE + SIZE_BITSET;
}
@@ -608,12 +703,6 @@ compile_cclass_node(CClassNode* cc, regex_t* reg)
{
int r;
- if (IS_NCCLASS_SHARE(cc)) {
- add_opcode(reg, OP_CCLASS_NODE);
- r = add_pointer(reg, cc);
- return r;
- }
-
if (IS_NULL(cc->mbuf)) {
if (IS_NCCLASS_NOT(cc))
add_opcode(reg, OP_CCLASS_NOT);
@@ -638,7 +727,7 @@ compile_cclass_node(CClassNode* cc, regex_t* reg)
add_opcode(reg, OP_CCLASS_MIX);
r = add_bitset(reg, cc->bs);
- if (r) return r;
+ if (r != 0) return r;
r = add_multi_byte_cclass(cc->mbuf, reg);
}
}
@@ -678,46 +767,46 @@ entry_repeat_range(regex_t* reg, int id, int lower, int upper)
}
static int
-compile_range_repeat_node(QtfrNode* qn, int target_len, int empty_info,
- regex_t* reg)
+compile_range_repeat_node(QuantNode* qn, int target_len, int empty_info,
+ regex_t* reg, ScanEnv* env)
{
int r;
int num_repeat = reg->num_repeat;
r = add_opcode(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);
- if (r) return r;
+ if (r != 0) return r;
r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
reg->num_repeat++;
- if (r) return r;
+ if (r != 0) return r;
r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);
- if (r) return r;
+ if (r != 0) return r;
r = entry_repeat_range(reg, num_repeat, qn->lower, qn->upper);
- if (r) return r;
+ if (r != 0) return r;
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
+ r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+ if (r != 0) return r;
if (
-#ifdef USE_SUBEXP_CALL
- reg->num_call > 0 ||
+#ifdef USE_CALL
+ NODE_IS_IN_MULTI_ENTRY(qn) ||
#endif
- IS_QUANTIFIER_IN_REPEAT(qn)) {
+ NODE_IS_IN_REAL_REPEAT(qn)) {
r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);
}
else {
r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
}
- if (r) return r;
+ if (r != 0) return r;
r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
return r;
}
static int
-is_anychar_star_quantifier(QtfrNode* qn)
+is_anychar_infinite_greedy(QuantNode* qn)
{
if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) &&
- NTYPE(qn->target) == NT_CANY)
+ NODE_IS_ANYCHAR(NODE_QUANT_BODY(qn)))
return 1;
else
return 0;
@@ -726,255 +815,21 @@ is_anychar_star_quantifier(QtfrNode* qn)
#define QUANTIFIER_EXPAND_LIMIT_SIZE 50
#define CKN_ON (ckn > 0)
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
-
-static int
-compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
-{
- int len, mod_tlen, cklen;
- int ckn;
- int infinite = IS_REPEAT_INFINITE(qn->upper);
- int empty_info = qn->target_empty_info;
- int tlen = compile_length_tree(qn->target, reg);
-
- if (tlen < 0) return tlen;
-
- ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0);
-
- cklen = (CKN_ON ? SIZE_STATE_CHECK_NUM: 0);
-
- /* anychar repeat */
- if (NTYPE(qn->target) == NT_CANY) {
- if (qn->greedy && infinite) {
- if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON)
- return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower + cklen;
- else
- return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower + cklen;
- }
- }
-
- if (empty_info != 0)
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
- else
- mod_tlen = tlen;
-
- if (infinite && qn->lower <= 1) {
- if (qn->greedy) {
- if (qn->lower == 1)
- len = SIZE_OP_JUMP;
- else
- len = 0;
-
- len += SIZE_OP_PUSH + cklen + mod_tlen + SIZE_OP_JUMP;
- }
- else {
- if (qn->lower == 0)
- len = SIZE_OP_JUMP;
- else
- len = 0;
-
- len += mod_tlen + SIZE_OP_PUSH + cklen;
- }
- }
- else if (qn->upper == 0) {
- if (qn->is_refered != 0) /* /(?<n>..){0}/ */
- len = SIZE_OP_JUMP + tlen;
- else
- len = 0;
- }
- else if (qn->upper == 1 && qn->greedy) {
- if (qn->lower == 0) {
- if (CKN_ON) {
- len = SIZE_OP_STATE_CHECK_PUSH + tlen;
- }
- else {
- len = SIZE_OP_PUSH + tlen;
- }
- }
- else {
- len = tlen;
- }
- }
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
- len = SIZE_OP_PUSH + cklen + SIZE_OP_JUMP + tlen;
- }
- else {
- len = SIZE_OP_REPEAT_INC
- + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;
- if (CKN_ON)
- len += SIZE_OP_STATE_CHECK;
- }
-
- return len;
-}
-
-static int
-compile_quantifier_node(QtfrNode* qn, regex_t* reg)
-{
- int r, mod_tlen;
- int ckn;
- int infinite = IS_REPEAT_INFINITE(qn->upper);
- int empty_info = qn->target_empty_info;
- int tlen = compile_length_tree(qn->target, reg);
-
- if (tlen < 0) return tlen;
-
- ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0);
-
- if (is_anychar_star_quantifier(qn)) {
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
- if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON) {
- if (IS_MULTILINE(reg->options))
- r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);
- else
- r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);
- if (r) return r;
- if (CKN_ON) {
- r = add_state_check_num(reg, ckn);
- if (r) return r;
- }
-
- return add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);
- }
- else {
- if (IS_MULTILINE(reg->options)) {
- r = add_opcode(reg, (CKN_ON ?
- OP_STATE_CHECK_ANYCHAR_ML_STAR
- : OP_ANYCHAR_ML_STAR));
- }
- else {
- r = add_opcode(reg, (CKN_ON ?
- OP_STATE_CHECK_ANYCHAR_STAR
- : OP_ANYCHAR_STAR));
- }
- if (r) return r;
- if (CKN_ON)
- r = add_state_check_num(reg, ckn);
-
- return r;
- }
- }
-
- if (empty_info != 0)
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
- else
- mod_tlen = tlen;
-
- if (infinite && qn->lower <= 1) {
- if (qn->greedy) {
- if (qn->lower == 1) {
- r = add_opcode_rel_addr(reg, OP_JUMP,
- (CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH));
- if (r) return r;
- }
-
- if (CKN_ON) {
- r = add_opcode(reg, OP_STATE_CHECK_PUSH);
- if (r) return r;
- r = add_state_check_num(reg, ckn);
- if (r) return r;
- r = add_rel_addr(reg, mod_tlen + SIZE_OP_JUMP);
- }
- else {
- r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);
- }
- if (r) return r;
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_JUMP,
- -(mod_tlen + (int )SIZE_OP_JUMP
- + (int )(CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH)));
- }
- else {
- if (qn->lower == 0) {
- r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);
- if (r) return r;
- }
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
- if (CKN_ON) {
- r = add_opcode(reg, OP_STATE_CHECK_PUSH_OR_JUMP);
- if (r) return r;
- r = add_state_check_num(reg, ckn);
- if (r) return r;
- r = add_rel_addr(reg,
- -(mod_tlen + (int )SIZE_OP_STATE_CHECK_PUSH_OR_JUMP));
- }
- else
- r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));
- }
- }
- else if (qn->upper == 0) {
- if (qn->is_refered != 0) { /* /(?<n>..){0}/ */
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- }
- else
- r = 0;
- }
- else if (qn->upper == 1 && qn->greedy) {
- if (qn->lower == 0) {
- if (CKN_ON) {
- r = add_opcode(reg, OP_STATE_CHECK_PUSH);
- if (r) return r;
- r = add_state_check_num(reg, ckn);
- if (r) return r;
- r = add_rel_addr(reg, tlen);
- }
- else {
- r = add_opcode_rel_addr(reg, OP_PUSH, tlen);
- }
- if (r) return r;
- }
-
- r = compile_tree(qn->target, reg);
- }
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
- if (CKN_ON) {
- r = add_opcode(reg, OP_STATE_CHECK_PUSH);
- if (r) return r;
- r = add_state_check_num(reg, ckn);
- if (r) return r;
- r = add_rel_addr(reg, SIZE_OP_JUMP);
- }
- else {
- r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);
- }
-
- if (r) return r;
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- }
- else {
- r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);
- if (CKN_ON) {
- if (r) return r;
- r = add_opcode(reg, OP_STATE_CHECK);
- if (r) return r;
- r = add_state_check_num(reg, ckn);
- }
- }
- return r;
-}
-
-#else /* USE_COMBINATION_EXPLOSION_CHECK */
-
static int
-compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
+compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
{
int len, mod_tlen;
int infinite = IS_REPEAT_INFINITE(qn->upper);
- int empty_info = qn->target_empty_info;
- int tlen = compile_length_tree(qn->target, reg);
+ enum QuantBodyEmpty empty_info = qn->body_empty_info;
+ int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
if (tlen < 0) return tlen;
+ if (tlen == 0) return 0;
/* anychar repeat */
- if (NTYPE(qn->target) == NT_CANY) {
- if (qn->greedy && infinite) {
+ if (is_anychar_infinite_greedy(qn)) {
+ if (qn->lower <= 1 ||
+ int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0) {
if (IS_NOT_NULL(qn->next_head_exact))
return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower;
else
@@ -982,13 +837,14 @@ compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
}
}
- if (empty_info != 0)
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
- else
+ if (empty_info == QUANT_BODY_IS_NOT_EMPTY)
mod_tlen = tlen;
+ else
+ mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);
if (infinite &&
- (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
+ (qn->lower <= 1 ||
+ int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {
if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {
len = SIZE_OP_JUMP;
}
@@ -1011,8 +867,9 @@ compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
len = SIZE_OP_JUMP + tlen;
}
else if (!infinite && qn->greedy &&
- (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper
- <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
+ (qn->upper == 1 ||
+ int_multiply_cmp(tlen + SIZE_OP_PUSH, qn->upper,
+ QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {
len = tlen * qn->lower;
len += (SIZE_OP_PUSH + tlen) * (qn->upper - qn->lower);
}
@@ -1028,41 +885,45 @@ compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)
}
static int
-compile_quantifier_node(QtfrNode* qn, regex_t* reg)
+compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
{
int i, r, mod_tlen;
int infinite = IS_REPEAT_INFINITE(qn->upper);
- int empty_info = qn->target_empty_info;
- int tlen = compile_length_tree(qn->target, reg);
+ enum QuantBodyEmpty empty_info = qn->body_empty_info;
+ int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
if (tlen < 0) return tlen;
+ if (tlen == 0) return 0;
- if (is_anychar_star_quantifier(qn)) {
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
+ if (is_anychar_infinite_greedy(qn) &&
+ (qn->lower <= 1 ||
+ int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {
+ r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
+ if (r != 0) return r;
if (IS_NOT_NULL(qn->next_head_exact)) {
- if (IS_MULTILINE(reg->options))
+ if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))
r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);
else
r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);
- if (r) return r;
- return add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);
+ if (r != 0) return r;
+ return add_bytes(reg, STR_(qn->next_head_exact)->s, 1);
}
else {
- if (IS_MULTILINE(reg->options))
+ if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))
return add_opcode(reg, OP_ANYCHAR_ML_STAR);
else
return add_opcode(reg, OP_ANYCHAR_STAR);
}
}
- if (empty_info != 0)
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);
- else
+ if (empty_info == QUANT_BODY_IS_NOT_EMPTY)
mod_tlen = tlen;
+ else
+ mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);
if (infinite &&
- (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
+ (qn->lower <= 1 ||
+ int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {
if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {
if (qn->greedy) {
if (IS_NOT_NULL(qn->head_exact))
@@ -1075,94 +936,94 @@ compile_quantifier_node(QtfrNode* qn, regex_t* reg)
else {
r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);
}
- if (r) return r;
+ if (r != 0) return r;
}
else {
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
+ r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
+ if (r != 0) return r;
}
if (qn->greedy) {
if (IS_NOT_NULL(qn->head_exact)) {
r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,
mod_tlen + SIZE_OP_JUMP);
- if (r) return r;
- add_bytes(reg, NSTR(qn->head_exact)->s, 1);
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
+ if (r != 0) return r;
+ add_bytes(reg, STR_(qn->head_exact)->s, 1);
+ r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+ if (r != 0) return r;
r = add_opcode_rel_addr(reg, OP_JUMP,
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));
+ -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));
}
else if (IS_NOT_NULL(qn->next_head_exact)) {
r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,
mod_tlen + SIZE_OP_JUMP);
- if (r) return r;
- add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
+ if (r != 0) return r;
+ add_bytes(reg, STR_(qn->next_head_exact)->s, 1);
+ r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+ if (r != 0) return r;
r = add_opcode_rel_addr(reg, OP_JUMP,
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));
+ -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));
}
else {
r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);
- if (r) return r;
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
+ if (r != 0) return r;
+ r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+ if (r != 0) return r;
r = add_opcode_rel_addr(reg, OP_JUMP,
-(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));
}
}
else {
r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);
- if (r) return r;
- r = compile_tree_empty_check(qn->target, reg, empty_info);
- if (r) return r;
+ if (r != 0) return r;
+ r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+ if (r != 0) return r;
r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));
}
}
else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */
r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
- if (r) return r;
- r = compile_tree(qn->target, reg);
+ if (r != 0) return r;
+ r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
}
- else if (!infinite && qn->greedy &&
- (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper
- <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {
+ else if (! infinite && qn->greedy &&
+ (qn->upper == 1 ||
+ int_multiply_cmp(tlen + SIZE_OP_PUSH, qn->upper,
+ QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {
int n = qn->upper - qn->lower;
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
+ r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
+ if (r != 0) return r;
for (i = 0; i < n; i++) {
r = add_opcode_rel_addr(reg, OP_PUSH,
- (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- if (r) return r;
+ (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);
+ if (r != 0) return r;
+ r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
+ if (r != 0) return r;
}
}
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
+ else if (! qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);
- if (r) return r;
+ if (r != 0) return r;
r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
- if (r) return r;
- r = compile_tree(qn->target, reg);
+ if (r != 0) return r;
+ r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
}
else {
- r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);
+ r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg, env);
}
return r;
}
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */
static int
-compile_length_option_node(EncloseNode* node, regex_t* reg)
+compile_length_option_node(EnclosureNode* node, regex_t* reg)
{
int tlen;
OnigOptionType prev = reg->options;
- reg->options = node->option;
- tlen = compile_length_tree(node->target, reg);
+ reg->options = node->o.options;
+ tlen = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
reg->options = prev;
if (tlen < 0) return tlen;
@@ -1176,89 +1037,121 @@ compile_length_option_node(EncloseNode* node, regex_t* reg)
}
static int
-compile_option_node(EncloseNode* node, regex_t* reg)
+compile_option_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
{
int r;
OnigOptionType prev = reg->options;
- if (IS_DYNAMIC_OPTION(prev ^ node->option)) {
- r = add_opcode_option(reg, OP_SET_OPTION_PUSH, node->option);
- if (r) return r;
+ if (IS_DYNAMIC_OPTION(prev ^ node->o.options)) {
+ r = add_opcode_option(reg, OP_SET_OPTION_PUSH, node->o.options);
+ if (r != 0) return r;
r = add_opcode_option(reg, OP_SET_OPTION, prev);
- if (r) return r;
+ if (r != 0) return r;
r = add_opcode(reg, OP_FAIL);
- if (r) return r;
+ if (r != 0) return r;
}
- reg->options = node->option;
- r = compile_tree(node->target, reg);
+ reg->options = node->o.options;
+ r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
reg->options = prev;
- if (IS_DYNAMIC_OPTION(prev ^ node->option)) {
- if (r) return r;
+ if (IS_DYNAMIC_OPTION(prev ^ node->o.options)) {
+ if (r != 0) return r;
r = add_opcode_option(reg, OP_SET_OPTION, prev);
}
return r;
}
static int
-compile_length_enclose_node(EncloseNode* node, regex_t* reg)
+compile_length_enclosure_node(EnclosureNode* node, regex_t* reg)
{
int len;
int tlen;
- if (node->type == ENCLOSE_OPTION)
+ if (node->type == ENCLOSURE_OPTION)
return compile_length_option_node(node, reg);
- if (node->target) {
- tlen = compile_length_tree(node->target, reg);
+ if (NODE_ENCLOSURE_BODY(node)) {
+ tlen = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
if (tlen < 0) return tlen;
}
else
tlen = 0;
switch (node->type) {
- case ENCLOSE_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_ENCLOSE_CALLED(node)) {
+ case ENCLOSURE_MEMORY:
+#ifdef USE_CALL
+
+ if (node->m.regnum == 0 && NODE_IS_CALLED(node)) {
+ len = tlen + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;
+ return len;
+ }
+
+ if (NODE_IS_CALLED(node)) {
len = SIZE_OP_MEMORY_START_PUSH + tlen
+ SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- len += (IS_ENCLOSE_RECURSION(node)
+ if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
+ len += (NODE_IS_RECURSION(node)
? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
else
- len += (IS_ENCLOSE_RECURSION(node)
+ len += (NODE_IS_RECURSION(node)
? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
}
- else if (IS_ENCLOSE_RECURSION(node)) {
+ else if (NODE_IS_RECURSION(node)) {
len = SIZE_OP_MEMORY_START_PUSH;
- len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)
+ len += tlen + (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum)
? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_REC);
}
else
#endif
{
- if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))
+ if (MEM_STATUS_AT0(reg->bt_mem_start, node->m.regnum))
len = SIZE_OP_MEMORY_START_PUSH;
else
len = SIZE_OP_MEMORY_START;
- len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)
- ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);
+ len += tlen + (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum)
+ ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);
}
break;
- case ENCLOSE_STOP_BACKTRACK:
- if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {
- QtfrNode* qn = NQTFR(node->target);
- tlen = compile_length_tree(qn->target, reg);
+ case ENCLOSURE_STOP_BACKTRACK:
+ if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {
+ QuantNode* qn = QUANT_(NODE_ENCLOSURE_BODY(node));
+ tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
if (tlen < 0) return tlen;
len = tlen * qn->lower
+ SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP;
}
else {
- len = SIZE_OP_PUSH_STOP_BT + tlen + SIZE_OP_POP_STOP_BT;
+ len = SIZE_OP_ATOMIC_START + tlen + SIZE_OP_ATOMIC_END;
+ }
+ break;
+
+ case ENCLOSURE_IF_ELSE:
+ {
+ Node* cond = NODE_ENCLOSURE_BODY(node);
+ Node* Then = node->te.Then;
+ Node* Else = node->te.Else;
+
+ len = compile_length_tree(cond, reg);
+ if (len < 0) return len;
+ len += SIZE_OP_PUSH;
+ len += SIZE_OP_ATOMIC_START + SIZE_OP_ATOMIC_END;
+
+ if (IS_NOT_NULL(Then)) {
+ tlen = compile_length_tree(Then, reg);
+ if (tlen < 0) return tlen;
+ len += tlen;
+ }
+
+ if (IS_NOT_NULL(Else)) {
+ len += SIZE_OP_JUMP;
+ tlen = compile_length_tree(Else, reg);
+ if (tlen < 0) return tlen;
+ len += tlen;
+ }
}
break;
@@ -1273,103 +1166,167 @@ compile_length_enclose_node(EncloseNode* node, regex_t* reg)
static int get_char_length_tree(Node* node, regex_t* reg, int* len);
static int
-compile_enclose_node(EncloseNode* node, regex_t* reg)
+compile_enclosure_memory_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
{
- int r, len;
+ int r;
+ int len;
- if (node->type == ENCLOSE_OPTION)
- return compile_option_node(node, reg);
+#ifdef USE_CALL
+ if (node->m.regnum == 0 && NODE_IS_CALLED(node)) {
+ r = add_opcode(reg, OP_CALL);
+ if (r != 0) return r;
+ node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
+ NODE_STATUS_ADD(node, NST_ADDR_FIXED);
+ r = add_abs_addr(reg, (int )node->m.called_addr);
+ if (r != 0) return r;
+ len = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
+ len += SIZE_OP_RETURN;
+ r = add_opcode_rel_addr(reg, OP_JUMP, len);
+ if (r != 0) return r;
+
+ r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
+ if (r != 0) return r;
+ r = add_opcode(reg, OP_RETURN);
+ return r;
+ }
- switch (node->type) {
- case ENCLOSE_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_ENCLOSE_CALLED(node)) {
- r = add_opcode(reg, OP_CALL);
- if (r) return r;
- node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
- node->state |= NST_ADDR_FIXED;
- r = add_abs_addr(reg, (int )node->call_addr);
- if (r) return r;
- len = compile_length_tree(node->target, reg);
- len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- len += (IS_ENCLOSE_RECURSION(node)
- ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
- else
- len += (IS_ENCLOSE_RECURSION(node)
- ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
+ if (NODE_IS_CALLED(node)) {
+ r = add_opcode(reg, OP_CALL);
+ if (r != 0) return r;
+ node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
+ NODE_STATUS_ADD(node, NST_ADDR_FIXED);
+ r = add_abs_addr(reg, (int )node->m.called_addr);
+ if (r != 0) return r;
+ len = compile_length_tree(NODE_ENCLOSURE_BODY(node), reg);
+ len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
+ if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
+ len += (NODE_IS_RECURSION(node)
+ ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
+ else
+ len += (NODE_IS_RECURSION(node)
+ ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
- r = add_opcode_rel_addr(reg, OP_JUMP, len);
- if (r) return r;
- }
+ r = add_opcode_rel_addr(reg, OP_JUMP, len);
+ if (r != 0) return r;
+ }
#endif
- if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))
- r = add_opcode(reg, OP_MEMORY_START_PUSH);
- else
- r = add_opcode(reg, OP_MEMORY_START);
- if (r) return r;
- r = add_mem_num(reg, node->regnum);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
-#ifdef USE_SUBEXP_CALL
- if (IS_ENCLOSE_CALLED(node)) {
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)
- ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
- else
- r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)
- ? OP_MEMORY_END_REC : OP_MEMORY_END));
- if (r) return r;
- r = add_mem_num(reg, node->regnum);
- if (r) return r;
- r = add_opcode(reg, OP_RETURN);
- }
- else if (IS_ENCLOSE_RECURSION(node)) {
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- r = add_opcode(reg, OP_MEMORY_END_PUSH_REC);
- else
- r = add_opcode(reg, OP_MEMORY_END_REC);
- if (r) return r;
- r = add_mem_num(reg, node->regnum);
- }
- else
+ if (MEM_STATUS_AT0(reg->bt_mem_start, node->m.regnum))
+ r = add_opcode(reg, OP_MEMORY_START_PUSH);
+ else
+ r = add_opcode(reg, OP_MEMORY_START);
+ if (r != 0) return r;
+ r = add_mem_num(reg, node->m.regnum);
+ if (r != 0) return r;
+ r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
+ if (r != 0) return r;
+
+#ifdef USE_CALL
+ if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
+ r = add_opcode(reg, (NODE_IS_RECURSION(node)
+ ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
+ else
+ r = add_opcode(reg, (NODE_IS_RECURSION(node)
+ ? OP_MEMORY_END_REC : OP_MEMORY_END));
+ if (r != 0) return r;
+ r = add_mem_num(reg, node->m.regnum);
+ if (NODE_IS_CALLED(node)) {
+ if (r != 0) return r;
+ r = add_opcode(reg, OP_RETURN);
+ }
+#else
+ if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
+ r = add_opcode(reg, OP_MEMORY_END_PUSH);
+ else
+ r = add_opcode(reg, OP_MEMORY_END);
+ if (r != 0) return r;
+ r = add_mem_num(reg, node->m.regnum);
#endif
- {
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
- r = add_opcode(reg, OP_MEMORY_END_PUSH);
- else
- r = add_opcode(reg, OP_MEMORY_END);
- if (r) return r;
- r = add_mem_num(reg, node->regnum);
- }
+
+ return r;
+}
+
+static int
+compile_enclosure_node(EnclosureNode* node, regex_t* reg, ScanEnv* env)
+{
+ int r, len;
+
+ switch (node->type) {
+ case ENCLOSURE_MEMORY:
+ r = compile_enclosure_memory_node(node, reg, env);
break;
- case ENCLOSE_STOP_BACKTRACK:
- if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {
- QtfrNode* qn = NQTFR(node->target);
- r = compile_tree_n_times(qn->target, qn->lower, reg);
- if (r) return r;
+ case ENCLOSURE_OPTION:
+ r = compile_option_node(node, reg, env);
+ break;
- len = compile_length_tree(qn->target, reg);
+ case ENCLOSURE_STOP_BACKTRACK:
+ if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {
+ QuantNode* qn = QUANT_(NODE_ENCLOSURE_BODY(node));
+ r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
+ if (r != 0) return r;
+
+ len = compile_length_tree(NODE_QUANT_BODY(qn), reg);
if (len < 0) return len;
r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP + SIZE_OP_JUMP);
- if (r) return r;
- r = compile_tree(qn->target, reg);
- if (r) return r;
+ if (r != 0) return r;
+ r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
+ if (r != 0) return r;
r = add_opcode(reg, OP_POP);
- if (r) return r;
+ if (r != 0) return r;
r = add_opcode_rel_addr(reg, OP_JUMP,
-((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP));
}
else {
- r = add_opcode(reg, OP_PUSH_STOP_BT);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_POP_STOP_BT);
+ r = add_opcode(reg, OP_ATOMIC_START);
+ if (r != 0) return r;
+ r = compile_tree(NODE_ENCLOSURE_BODY(node), reg, env);
+ if (r != 0) return r;
+ r = add_opcode(reg, OP_ATOMIC_END);
+ }
+ break;
+
+ case ENCLOSURE_IF_ELSE:
+ {
+ int cond_len, then_len, jump_len;
+ Node* cond = NODE_ENCLOSURE_BODY(node);
+ Node* Then = node->te.Then;
+ Node* Else = node->te.Else;
+
+ r = add_opcode(reg, OP_ATOMIC_START);
+ if (r != 0) return r;
+
+ cond_len = compile_length_tree(cond, reg);
+ if (cond_len < 0) return cond_len;
+ if (IS_NOT_NULL(Then)) {
+ then_len = compile_length_tree(Then, reg);
+ if (then_len < 0) return then_len;
+ }
+ else
+ then_len = 0;
+
+ jump_len = cond_len + then_len + SIZE_OP_ATOMIC_END;
+ if (IS_NOT_NULL(Else)) jump_len += SIZE_OP_JUMP;
+
+ r = add_opcode_rel_addr(reg, OP_PUSH, jump_len);
+ if (r != 0) return r;
+ r = compile_tree(cond, reg, env);
+ if (r != 0) return r;
+ r = add_opcode(reg, OP_ATOMIC_END);
+ if (r != 0) return r;
+
+ if (IS_NOT_NULL(Then)) {
+ r = compile_tree(Then, reg, env);
+ if (r != 0) return r;
+ }
+
+ if (IS_NOT_NULL(Else)) {
+ int else_len = compile_length_tree(Else, reg);
+ r = add_opcode_rel_addr(reg, OP_JUMP, else_len);
+ if (r != 0) return r;
+ r = compile_tree(Else, reg, env);
+ }
}
break;
@@ -1387,23 +1344,37 @@ compile_length_anchor_node(AnchorNode* node, regex_t* reg)
int len;
int tlen = 0;
- if (node->target) {
- tlen = compile_length_tree(node->target, reg);
+ if (IS_NOT_NULL(NODE_ANCHOR_BODY(node))) {
+ tlen = compile_length_tree(NODE_ANCHOR_BODY(node), reg);
if (tlen < 0) return tlen;
}
switch (node->type) {
case ANCHOR_PREC_READ:
- len = SIZE_OP_PUSH_POS + tlen + SIZE_OP_POP_POS;
+ len = SIZE_OP_PREC_READ_START + tlen + SIZE_OP_PREC_READ_END;
break;
case ANCHOR_PREC_READ_NOT:
- len = SIZE_OP_PUSH_POS_NOT + tlen + SIZE_OP_FAIL_POS;
+ len = SIZE_OP_PREC_READ_NOT_START + tlen + SIZE_OP_PREC_READ_NOT_END;
break;
case ANCHOR_LOOK_BEHIND:
len = SIZE_OP_LOOK_BEHIND + tlen;
break;
case ANCHOR_LOOK_BEHIND_NOT:
- len = SIZE_OP_PUSH_LOOK_BEHIND_NOT + tlen + SIZE_OP_FAIL_LOOK_BEHIND_NOT;
+ len = SIZE_OP_LOOK_BEHIND_NOT_START + tlen + SIZE_OP_LOOK_BEHIND_NOT_END;
+ break;
+
+ case ANCHOR_WORD_BOUNDARY:
+ case ANCHOR_NO_WORD_BOUNDARY:
+#ifdef USE_WORD_BEGIN_END
+ case ANCHOR_WORD_BEGIN:
+ case ANCHOR_WORD_END:
+#endif
+ len = SIZE_OP_WORD_BOUNDARY;
+ break;
+
+ case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ len = SIZE_OPCODE;
break;
default:
@@ -1415,9 +1386,10 @@ compile_length_anchor_node(AnchorNode* node, regex_t* reg)
}
static int
-compile_anchor_node(AnchorNode* node, regex_t* reg)
+compile_anchor_node(AnchorNode* node, regex_t* reg, ScanEnv* env)
{
int r, len;
+ enum OpCode op;
switch (node->type) {
case ANCHOR_BEGIN_BUF: r = add_opcode(reg, OP_BEGIN_BUF); break;
@@ -1427,67 +1399,89 @@ compile_anchor_node(AnchorNode* node, regex_t* reg)
case ANCHOR_SEMI_END_BUF: r = add_opcode(reg, OP_SEMI_END_BUF); break;
case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;
- case ANCHOR_WORD_BOUND: r = add_opcode(reg, OP_WORD_BOUND); break;
- case ANCHOR_NOT_WORD_BOUND: r = add_opcode(reg, OP_NOT_WORD_BOUND); break;
+ case ANCHOR_WORD_BOUNDARY:
+ op = OP_WORD_BOUNDARY;
+ word:
+ r = add_opcode(reg, op);
+ if (r != 0) return r;
+ r = add_mode(reg, (ModeType )node->ascii_mode);
+ break;
+
+ case ANCHOR_NO_WORD_BOUNDARY:
+ op = OP_NO_WORD_BOUNDARY; goto word;
+ break;
#ifdef USE_WORD_BEGIN_END
- case ANCHOR_WORD_BEGIN: r = add_opcode(reg, OP_WORD_BEGIN); break;
- case ANCHOR_WORD_END: r = add_opcode(reg, OP_WORD_END); break;
+ case ANCHOR_WORD_BEGIN:
+ op = OP_WORD_BEGIN; goto word;
+ break;
+ case ANCHOR_WORD_END:
+ op = OP_WORD_END; goto word;
+ break;
#endif
+ case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ r = add_opcode(reg, OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
+ break;
+
+ case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ r = add_opcode(reg, OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
+ break;
+
case ANCHOR_PREC_READ:
- r = add_opcode(reg, OP_PUSH_POS);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_POP_POS);
+ r = add_opcode(reg, OP_PREC_READ_START);
+ if (r != 0) return r;
+ r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
+ if (r != 0) return r;
+ r = add_opcode(reg, OP_PREC_READ_END);
break;
case ANCHOR_PREC_READ_NOT:
- len = compile_length_tree(node->target, reg);
+ len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);
if (len < 0) return len;
- r = add_opcode_rel_addr(reg, OP_PUSH_POS_NOT, len + SIZE_OP_FAIL_POS);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_FAIL_POS);
+ r = add_opcode_rel_addr(reg, OP_PREC_READ_NOT_START, len + SIZE_OP_PREC_READ_NOT_END);
+ if (r != 0) return r;
+ r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
+ if (r != 0) return r;
+ r = add_opcode(reg, OP_PREC_READ_NOT_END);
break;
case ANCHOR_LOOK_BEHIND:
{
int n;
r = add_opcode(reg, OP_LOOK_BEHIND);
- if (r) return r;
+ if (r != 0) return r;
if (node->char_len < 0) {
- r = get_char_length_tree(node->target, reg, &n);
- if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
+ r = get_char_length_tree(NODE_ANCHOR_BODY(node), reg, &n);
+ if (r != 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
}
else
n = node->char_len;
r = add_length(reg, n);
- if (r) return r;
- r = compile_tree(node->target, reg);
+ if (r != 0) return r;
+ r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
}
break;
case ANCHOR_LOOK_BEHIND_NOT:
{
int n;
- len = compile_length_tree(node->target, reg);
- r = add_opcode_rel_addr(reg, OP_PUSH_LOOK_BEHIND_NOT,
- len + SIZE_OP_FAIL_LOOK_BEHIND_NOT);
- if (r) return r;
+
+ len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);
+ r = add_opcode_rel_addr(reg, OP_LOOK_BEHIND_NOT_START,
+ len + SIZE_OP_LOOK_BEHIND_NOT_END);
+ if (r != 0) return r;
if (node->char_len < 0) {
- r = get_char_length_tree(node->target, reg, &n);
- if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
+ r = get_char_length_tree(NODE_ANCHOR_BODY(node), reg, &n);
+ if (r != 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
}
else
n = node->char_len;
r = add_length(reg, n);
- if (r) return r;
- r = compile_tree(node->target, reg);
- if (r) return r;
- r = add_opcode(reg, OP_FAIL_LOOK_BEHIND_NOT);
+ if (r != 0) return r;
+ r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
+ if (r != 0) return r;
+ r = add_opcode(reg, OP_LOOK_BEHIND_NOT_END);
}
break;
@@ -1500,88 +1494,162 @@ compile_anchor_node(AnchorNode* node, regex_t* reg)
}
static int
+compile_gimmick_node(GimmickNode* node, regex_t* reg)
+{
+ int r;
+
+ switch (node->type) {
+ case GIMMICK_FAIL:
+ r = add_opcode(reg, OP_FAIL);
+ break;
+
+ case GIMMICK_KEEP:
+ r = add_opcode(reg, OP_PUSH_SAVE_VAL);
+ if (r != 0) return r;
+ r = add_save_type(reg, SAVE_KEEP);
+ if (r != 0) return r;
+ r = add_mem_num(reg, node->id);
+ break;
+
+ case GIMMICK_SAVE:
+ r = add_opcode(reg, OP_PUSH_SAVE_VAL);
+ if (r != 0) return r;
+ r = add_save_type(reg, node->detail_type);
+ if (r != 0) return r;
+ r = add_mem_num(reg, node->id);
+ break;
+
+ case GIMMICK_UPDATE_VAR:
+ r = add_opcode(reg, OP_UPDATE_VAR);
+ if (r != 0) return r;
+ r = add_update_var_type(reg, node->detail_type);
+ if (r != 0) return r;
+ r = add_mem_num(reg, node->id);
+ break;
+ }
+
+ return r;
+}
+
+static int
+compile_length_gimmick_node(GimmickNode* node, regex_t* reg)
+{
+ int len;
+
+ switch (node->type) {
+ case GIMMICK_FAIL:
+ len = SIZE_OP_FAIL;
+ break;
+
+ case GIMMICK_KEEP:
+ case GIMMICK_SAVE:
+ len = SIZE_OP_PUSH_SAVE_VAL;
+ break;
+
+ case GIMMICK_UPDATE_VAR:
+ len = SIZE_OP_UPDATE_VAR;
+ break;
+ }
+
+ return len;
+}
+
+static int
compile_length_tree(Node* node, regex_t* reg)
{
- int len, type, r;
+ int len, r;
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
len = 0;
do {
- r = compile_length_tree(NCAR(node), reg);
+ r = compile_length_tree(NODE_CAR(node), reg);
if (r < 0) return r;
len += r;
- } while (IS_NOT_NULL(node = NCDR(node)));
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
r = len;
break;
- case NT_ALT:
+ case NODE_ALT:
{
int n;
n = r = 0;
do {
- r += compile_length_tree(NCAR(node), reg);
+ r += compile_length_tree(NODE_CAR(node), reg);
n++;
- } while (IS_NOT_NULL(node = NCDR(node)));
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
r += (SIZE_OP_PUSH + SIZE_OP_JUMP) * (n - 1);
}
break;
- case NT_STR:
- if (NSTRING_IS_RAW(node))
- r = compile_length_string_raw_node(NSTR(node), reg);
+ case NODE_STRING:
+ if (NODE_STRING_IS_RAW(node))
+ r = compile_length_string_raw_node(STR_(node), reg);
else
r = compile_length_string_node(node, reg);
break;
- case NT_CCLASS:
- r = compile_length_cclass_node(NCCLASS(node), reg);
+ case NODE_CCLASS:
+ r = compile_length_cclass_node(CCLASS_(node), reg);
break;
- case NT_CTYPE:
- case NT_CANY:
+ case NODE_CTYPE:
r = SIZE_OPCODE;
break;
- case NT_BREF:
+ case NODE_BACKREF:
{
- BRefNode* br = NBREF(node);
+ BackRefNode* br = BACKREF_(node);
+ if (NODE_IS_CHECKER(node)) {
#ifdef USE_BACKREF_WITH_LEVEL
- if (IS_BACKREF_NEST_LEVEL(br)) {
- r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
- SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
- }
- else
+ if (NODE_IS_NEST_LEVEL(node)) {
+ r = SIZE_OPCODE + SIZE_LENGTH + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
+ }
+ else
#endif
- if (br->back_num == 1) {
- r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)
- ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
+ r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
}
else {
- r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
+#ifdef USE_BACKREF_WITH_LEVEL
+ if (NODE_IS_NEST_LEVEL(node)) {
+ r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
+ SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
+ }
+ else
+#endif
+ if (br->back_num == 1) {
+ r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)
+ ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
+ }
+ else {
+ r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
+ }
}
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
+#ifdef USE_CALL
+ case NODE_CALL:
r = SIZE_OP_CALL;
break;
#endif
- case NT_QTFR:
- r = compile_length_quantifier_node(NQTFR(node), reg);
+ case NODE_QUANT:
+ r = compile_length_quantifier_node(QUANT_(node), reg);
+ break;
+
+ case NODE_ENCLOSURE:
+ r = compile_length_enclosure_node(ENCLOSURE_(node), reg);
break;
- case NT_ENCLOSE:
- r = compile_length_enclose_node(NENCLOSE(node), reg);
+ case NODE_ANCHOR:
+ r = compile_length_anchor_node(ANCHOR_(node), reg);
break;
- case NT_ANCHOR:
- r = compile_length_anchor_node(NANCHOR(node), reg);
+ case NODE_GIMMICK:
+ r = compile_length_gimmick_node(GIMMICK_(node), reg);
break;
default:
@@ -1593,165 +1661,191 @@ compile_length_tree(Node* node, regex_t* reg)
}
static int
-compile_tree(Node* node, regex_t* reg)
+compile_tree(Node* node, regex_t* reg, ScanEnv* env)
{
- int n, type, len, pos, r = 0;
+ int n, len, pos, r = 0;
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
do {
- r = compile_tree(NCAR(node), reg);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ r = compile_tree(NODE_CAR(node), reg, env);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_ALT:
+ case NODE_ALT:
{
Node* x = node;
len = 0;
do {
- len += compile_length_tree(NCAR(x), reg);
- if (NCDR(x) != NULL) {
+ len += compile_length_tree(NODE_CAR(x), reg);
+ if (IS_NOT_NULL(NODE_CDR(x))) {
len += SIZE_OP_PUSH + SIZE_OP_JUMP;
}
- } while (IS_NOT_NULL(x = NCDR(x)));
+ } while (IS_NOT_NULL(x = NODE_CDR(x)));
pos = reg->used + len; /* goal position */
do {
- len = compile_length_tree(NCAR(node), reg);
- if (IS_NOT_NULL(NCDR(node))) {
- r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_JUMP);
- if (r) break;
+ len = compile_length_tree(NODE_CAR(node), reg);
+ if (IS_NOT_NULL(NODE_CDR(node))) {
+ enum OpCode push = NODE_IS_SUPER(node) ? OP_PUSH_SUPER : OP_PUSH;
+ r = add_opcode_rel_addr(reg, push, len + SIZE_OP_JUMP);
+ if (r != 0) break;
}
- r = compile_tree(NCAR(node), reg);
- if (r) break;
- if (IS_NOT_NULL(NCDR(node))) {
+ r = compile_tree(NODE_CAR(node), reg, env);
+ if (r != 0) break;
+ if (IS_NOT_NULL(NODE_CDR(node))) {
len = pos - (reg->used + SIZE_OP_JUMP);
r = add_opcode_rel_addr(reg, OP_JUMP, len);
- if (r) break;
+ if (r != 0) break;
}
- } while (IS_NOT_NULL(node = NCDR(node)));
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
}
break;
- case NT_STR:
- if (NSTRING_IS_RAW(node))
- r = compile_string_raw_node(NSTR(node), reg);
+ case NODE_STRING:
+ if (NODE_STRING_IS_RAW(node))
+ r = compile_string_raw_node(STR_(node), reg);
else
r = compile_string_node(node, reg);
break;
- case NT_CCLASS:
- r = compile_cclass_node(NCCLASS(node), reg);
+ case NODE_CCLASS:
+ r = compile_cclass_node(CCLASS_(node), reg);
break;
- case NT_CTYPE:
+ case NODE_CTYPE:
{
int op;
- switch (NCTYPE(node)->ctype) {
+ switch (CTYPE_(node)->ctype) {
+ case CTYPE_ANYCHAR:
+ if (IS_MULTILINE(CTYPE_OPTION(node, reg)))
+ r = add_opcode(reg, OP_ANYCHAR_ML);
+ else
+ r = add_opcode(reg, OP_ANYCHAR);
+ break;
+
case ONIGENC_CTYPE_WORD:
- if (NCTYPE(node)->not != 0) op = OP_NOT_WORD;
- else op = OP_WORD;
+ if (CTYPE_(node)->ascii_mode == 0) {
+ op = CTYPE_(node)->not != 0 ? OP_NO_WORD : OP_WORD;
+ }
+ else {
+ op = CTYPE_(node)->not != 0 ? OP_NO_WORD_ASCII : OP_WORD_ASCII;
+ }
+ r = add_opcode(reg, op);
break;
+
default:
return ONIGERR_TYPE_BUG;
break;
}
- r = add_opcode(reg, op);
}
break;
- case NT_CANY:
- if (IS_MULTILINE(reg->options))
- r = add_opcode(reg, OP_ANYCHAR_ML);
- else
- r = add_opcode(reg, OP_ANYCHAR);
- break;
-
- case NT_BREF:
+ case NODE_BACKREF:
{
- BRefNode* br = NBREF(node);
+ BackRefNode* br = BACKREF_(node);
+ if (NODE_IS_CHECKER(node)) {
#ifdef USE_BACKREF_WITH_LEVEL
- if (IS_BACKREF_NEST_LEVEL(br)) {
- r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);
- if (r) return r;
- r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));
- if (r) return r;
- r = add_length(reg, br->nest_level);
- if (r) return r;
+ if (NODE_IS_NEST_LEVEL(node)) {
+ r = add_opcode(reg, OP_BACKREF_CHECK_WITH_LEVEL);
+ if (r != 0) return r;
+ r = add_length(reg, br->nest_level);
+ if (r != 0) return r;
+ }
+ else
+#endif
+ {
+ r = add_opcode(reg, OP_BACKREF_CHECK);
+ if (r != 0) return r;
+ }
goto add_bacref_mems;
}
- else
-#endif
- if (br->back_num == 1) {
- n = br->back_static[0];
- if (IS_IGNORECASE(reg->options)) {
- r = add_opcode(reg, OP_BACKREFN_IC);
- if (r) return r;
- r = add_mem_num(reg, n);
+ else {
+#ifdef USE_BACKREF_WITH_LEVEL
+ if (NODE_IS_NEST_LEVEL(node)) {
+ r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);
+ if (r != 0) return r;
+ r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));
+ if (r != 0) return r;
+ r = add_length(reg, br->nest_level);
+ if (r != 0) return r;
+
+ goto add_bacref_mems;
}
- else {
- switch (n) {
- case 1: r = add_opcode(reg, OP_BACKREF1); break;
- case 2: r = add_opcode(reg, OP_BACKREF2); break;
- default:
- r = add_opcode(reg, OP_BACKREFN);
- if (r) return r;
+ else
+#endif
+ if (br->back_num == 1) {
+ n = br->back_static[0];
+ if (IS_IGNORECASE(reg->options)) {
+ r = add_opcode(reg, OP_BACKREF_N_IC);
+ if (r != 0) return r;
r = add_mem_num(reg, n);
- break;
}
- }
- }
- else {
- int i;
- int* p;
-
- if (IS_IGNORECASE(reg->options)) {
- r = add_opcode(reg, OP_BACKREF_MULTI_IC);
+ else {
+ switch (n) {
+ case 1: r = add_opcode(reg, OP_BACKREF1); break;
+ case 2: r = add_opcode(reg, OP_BACKREF2); break;
+ default:
+ r = add_opcode(reg, OP_BACKREF_N);
+ if (r != 0) return r;
+ r = add_mem_num(reg, n);
+ break;
+ }
+ }
}
else {
- r = add_opcode(reg, OP_BACKREF_MULTI);
- }
- if (r) return r;
+ int i;
+ int* p;
-#ifdef USE_BACKREF_WITH_LEVEL
- add_bacref_mems:
-#endif
- r = add_length(reg, br->back_num);
- if (r) return r;
- p = BACKREFS_P(br);
- for (i = br->back_num - 1; i >= 0; i--) {
- r = add_mem_num(reg, p[i]);
- if (r) return r;
+ if (IS_IGNORECASE(reg->options)) {
+ r = add_opcode(reg, OP_BACKREF_MULTI_IC);
+ }
+ else {
+ r = add_opcode(reg, OP_BACKREF_MULTI);
+ }
+ if (r != 0) return r;
+
+ add_bacref_mems:
+ r = add_length(reg, br->back_num);
+ if (r != 0) return r;
+ p = BACKREFS_P(br);
+ for (i = br->back_num - 1; i >= 0; i--) {
+ r = add_mem_num(reg, p[i]);
+ if (r != 0) return r;
+ }
}
}
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- r = compile_call(NCALL(node), reg);
+#ifdef USE_CALL
+ case NODE_CALL:
+ r = compile_call(CALL_(node), reg, env);
break;
#endif
- case NT_QTFR:
- r = compile_quantifier_node(NQTFR(node), reg);
+ case NODE_QUANT:
+ r = compile_quantifier_node(QUANT_(node), reg, env);
break;
- case NT_ENCLOSE:
- r = compile_enclose_node(NENCLOSE(node), reg);
+ case NODE_ENCLOSURE:
+ r = compile_enclosure_node(ENCLOSURE_(node), reg, env);
break;
- case NT_ANCHOR:
- r = compile_anchor_node(NANCHOR(node), reg);
+ case NODE_ANCHOR:
+ r = compile_anchor_node(ANCHOR_(node), reg, env);
+ break;
+
+ case NODE_GIMMICK:
+ r = compile_gimmick_node(GIMMICK_(node), reg);
break;
default:
#ifdef ONIG_DEBUG
- fprintf(stderr, "compile_tree: undefined node type %d\n", NTYPE(node));
+ fprintf(stderr, "compile_tree: undefined node type %d\n", NODE_TYPE(node));
#endif
break;
}
@@ -1759,58 +1853,68 @@ compile_tree(Node* node, regex_t* reg)
return r;
}
-#ifdef USE_NAMED_GROUP
-
static int
noname_disable_map(Node** plink, GroupNumRemap* map, int* counter)
{
int r = 0;
Node* node = *plink;
- switch (NTYPE(node)) {
- case NT_LIST:
- case NT_ALT:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
do {
- r = noname_disable_map(&(NCAR(node)), map, counter);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ r = noname_disable_map(&(NODE_CAR(node)), map, counter);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_QTFR:
+ case NODE_QUANT:
{
- Node** ptarget = &(NQTFR(node)->target);
+ Node** ptarget = &(NODE_BODY(node));
Node* old = *ptarget;
r = noname_disable_map(ptarget, map, counter);
- if (*ptarget != old && NTYPE(*ptarget) == NT_QTFR) {
+ if (*ptarget != old && NODE_TYPE(*ptarget) == NODE_QUANT) {
onig_reduce_nested_quantifier(node, *ptarget);
}
}
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
- if (en->type == ENCLOSE_MEMORY) {
- if (IS_ENCLOSE_NAMED_GROUP(en)) {
+ EnclosureNode* en = ENCLOSURE_(node);
+ if (en->type == ENCLOSURE_MEMORY) {
+ if (NODE_IS_NAMED_GROUP(node)) {
(*counter)++;
- map[en->regnum].new_val = *counter;
- en->regnum = *counter;
- r = noname_disable_map(&(en->target), map, counter);
+ map[en->m.regnum].new_val = *counter;
+ en->m.regnum = *counter;
+ r = noname_disable_map(&(NODE_BODY(node)), map, counter);
}
else {
- *plink = en->target;
- en->target = NULL_NODE;
+ *plink = NODE_BODY(node);
+ NODE_BODY(node) = NULL_NODE;
onig_node_free(node);
r = noname_disable_map(plink, map, counter);
}
}
+ else if (en->type == ENCLOSURE_IF_ELSE) {
+ r = noname_disable_map(&(NODE_ENCLOSURE_BODY(en)), map, counter);
+ if (r != 0) return r;
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = noname_disable_map(&(en->te.Then), map, counter);
+ if (r != 0) return r;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = noname_disable_map(&(en->te.Else), map, counter);
+ if (r != 0) return r;
+ }
+ }
else
- r = noname_disable_map(&(en->target), map, counter);
+ r = noname_disable_map(&(NODE_BODY(node)), map, counter);
}
break;
- case NT_ANCHOR:
- if (NANCHOR(node)->target)
- r = noname_disable_map(&(NANCHOR(node)->target), map, counter);
+ case NODE_ANCHOR:
+ if (IS_NOT_NULL(NODE_BODY(node)))
+ r = noname_disable_map(&(NODE_BODY(node)), map, counter);
break;
default:
@@ -1825,9 +1929,9 @@ renumber_node_backref(Node* node, GroupNumRemap* map)
{
int i, pos, n, old_num;
int *backs;
- BRefNode* bn = NBREF(node);
+ BackRefNode* bn = BACKREF_(node);
- if (! IS_BACKREF_NAME_REF(bn))
+ if (! NODE_IS_BY_NAME(node))
return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
old_num = bn->back_num;
@@ -1853,27 +1957,45 @@ renumber_by_map(Node* node, GroupNumRemap* map)
{
int r = 0;
- switch (NTYPE(node)) {
- case NT_LIST:
- case NT_ALT:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
do {
- r = renumber_by_map(NCAR(node), map);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ r = renumber_by_map(NODE_CAR(node), map);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_QTFR:
- r = renumber_by_map(NQTFR(node)->target, map);
+
+ case NODE_QUANT:
+ r = renumber_by_map(NODE_BODY(node), map);
break;
- case NT_ENCLOSE:
- r = renumber_by_map(NENCLOSE(node)->target, map);
+
+ case NODE_ENCLOSURE:
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ r = renumber_by_map(NODE_BODY(node), map);
+ if (r != 0) return r;
+
+ if (en->type == ENCLOSURE_IF_ELSE) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = renumber_by_map(en->te.Then, map);
+ if (r != 0) return r;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = renumber_by_map(en->te.Else, map);
+ if (r != 0) return r;
+ }
+ }
+ }
break;
- case NT_BREF:
+ case NODE_BACKREF:
r = renumber_node_backref(node, map);
break;
- case NT_ANCHOR:
- if (NANCHOR(node)->target)
- r = renumber_by_map(NANCHOR(node)->target, map);
+ case NODE_ANCHOR:
+ if (IS_NOT_NULL(NODE_BODY(node)))
+ r = renumber_by_map(NODE_BODY(node), map);
break;
default:
@@ -1888,28 +2010,46 @@ numbered_ref_check(Node* node)
{
int r = 0;
- switch (NTYPE(node)) {
- case NT_LIST:
- case NT_ALT:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
do {
- r = numbered_ref_check(NCAR(node));
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ r = numbered_ref_check(NODE_CAR(node));
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_QTFR:
- r = numbered_ref_check(NQTFR(node)->target);
- break;
- case NT_ENCLOSE:
- r = numbered_ref_check(NENCLOSE(node)->target);
+
+ case NODE_ANCHOR:
+ if (IS_NULL(NODE_BODY(node)))
+ break;
+ /* fall */
+ case NODE_QUANT:
+ r = numbered_ref_check(NODE_BODY(node));
break;
- case NT_BREF:
- if (! IS_BACKREF_NAME_REF(NBREF(node)))
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
+ case NODE_ENCLOSURE:
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ r = numbered_ref_check(NODE_BODY(node));
+ if (r != 0) return r;
+
+ if (en->type == ENCLOSURE_IF_ELSE) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = numbered_ref_check(en->te.Then);
+ if (r != 0) return r;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = numbered_ref_check(en->te.Else);
+ if (r != 0) return r;
+ }
+ }
+ }
+
break;
- case NT_ANCHOR:
- if (NANCHOR(node)->target)
- r = numbered_ref_check(NANCHOR(node)->target);
+ case NODE_BACKREF:
+ if (! NODE_IS_BY_NAME(node))
+ return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
break;
default:
@@ -1923,7 +2063,7 @@ static int
disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)
{
int r, i, pos, counter;
- BitStatusType loc;
+ MemStatusType loc;
GroupNumRemap* map;
map = (GroupNumRemap* )xalloca(sizeof(GroupNumRemap) * (env->num_mem + 1));
@@ -1940,16 +2080,16 @@ disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)
for (i = 1, pos = 1; i <= env->num_mem; i++) {
if (map[i].new_val > 0) {
- SCANENV_MEM_NODES(env)[pos] = SCANENV_MEM_NODES(env)[i];
+ SCANENV_MEMENV(env)[pos] = SCANENV_MEMENV(env)[i];
pos++;
}
}
loc = env->capture_history;
- BIT_STATUS_CLEAR(env->capture_history);
+ MEM_STATUS_CLEAR(env->capture_history);
for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {
- if (BIT_STATUS_AT(loc, i)) {
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, map[i].new_val);
+ if (MEM_STATUS_AT(loc, i)) {
+ MEM_STATUS_ON_SIMPLE(env->capture_history, map[i].new_val);
}
}
@@ -1958,97 +2098,29 @@ disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)
return onig_renumber_name_table(reg, map);
}
-#endif /* USE_NAMED_GROUP */
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
static int
unset_addr_list_fix(UnsetAddrList* uslist, regex_t* reg)
{
int i, offset;
- EncloseNode* en;
+ EnclosureNode* en;
AbsAddrType addr;
for (i = 0; i < uslist->num; i++) {
- en = NENCLOSE(uslist->us[i].target);
- if (! IS_ENCLOSE_ADDR_FIXED(en)) return ONIGERR_PARSER_BUG;
- addr = en->call_addr;
+ if (! NODE_IS_ADDR_FIXED(uslist->us[i].target))
+ return ONIGERR_PARSER_BUG;
+
+ en = ENCLOSURE_(uslist->us[i].target);
+ addr = en->m.called_addr;
offset = uslist->us[i].offset;
- BBUF_WRITE(reg, offset, &addr, SIZE_ABSADDR);
+ BB_WRITE(reg, offset, &addr, SIZE_ABSADDR);
}
return 0;
}
#endif
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
-static int
-quantifiers_memory_node_info(Node* node)
-{
- int r = 0;
-
- switch (NTYPE(node)) {
- case NT_LIST:
- case NT_ALT:
- {
- int v;
- do {
- v = quantifiers_memory_node_info(NCAR(node));
- if (v > r) r = v;
- } while (v >= 0 && IS_NOT_NULL(node = NCDR(node)));
- }
- break;
-
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- if (IS_CALL_RECURSION(NCALL(node))) {
- return NQ_TARGET_IS_EMPTY_REC; /* tiny version */
- }
- else
- r = quantifiers_memory_node_info(NCALL(node)->target);
- break;
-#endif
-
- case NT_QTFR:
- {
- QtfrNode* qn = NQTFR(node);
- if (qn->upper != 0) {
- r = quantifiers_memory_node_info(qn->target);
- }
- }
- break;
-
- case NT_ENCLOSE:
- {
- EncloseNode* en = NENCLOSE(node);
- switch (en->type) {
- case ENCLOSE_MEMORY:
- return NQ_TARGET_IS_EMPTY_MEM;
- break;
-
- case ENCLOSE_OPTION:
- case ENCLOSE_STOP_BACKTRACK:
- r = quantifiers_memory_node_info(en->target);
- break;
- default:
- break;
- }
- }
- break;
-
- case NT_BREF:
- case NT_STR:
- case NT_CTYPE:
- case NT_CCLASS:
- case NT_CANY:
- case NT_ANCHOR:
- default:
- break;
- }
-
- return r;
-}
-#endif /* USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT */
-
#define GET_CHAR_LEN_VARLEN -1
#define GET_CHAR_LEN_TOP_ALT_VARLEN -2
@@ -2062,23 +2134,23 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
level++;
*len = 0;
- switch (NTYPE(node)) {
- case NT_LIST:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
do {
- r = get_char_length_tree1(NCAR(node), reg, &tlen, level);
+ r = get_char_length_tree1(NODE_CAR(node), reg, &tlen, level);
if (r == 0)
*len = distance_add(*len, tlen);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_ALT:
+ case NODE_ALT:
{
int tlen2;
int varlen = 0;
- r = get_char_length_tree1(NCAR(node), reg, &tlen, level);
- while (r == 0 && IS_NOT_NULL(node = NCDR(node))) {
- r = get_char_length_tree1(NCAR(node), reg, &tlen2, level);
+ r = get_char_length_tree1(NODE_CAR(node), reg, &tlen, level);
+ while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node))) {
+ r = get_char_length_tree1(NODE_CAR(node), reg, &tlen2, level);
if (r == 0) {
if (tlen != tlen2)
varlen = 1;
@@ -2097,10 +2169,11 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
}
break;
- case NT_STR:
+ case NODE_STRING:
{
- StrNode* sn = NSTR(node);
+ StrNode* sn = STR_(node);
UChar *s = sn->s;
+
while (s < sn->end) {
s += enclen(reg->enc, s);
(*len)++;
@@ -2108,67 +2181,102 @@ get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)
}
break;
- case NT_QTFR:
+ case NODE_QUANT:
{
- QtfrNode* qn = NQTFR(node);
+ QuantNode* qn = QUANT_(node);
+
if (qn->lower == qn->upper) {
- r = get_char_length_tree1(qn->target, reg, &tlen, level);
- if (r == 0)
- *len = distance_multiply(tlen, qn->lower);
+ if (qn->upper == 0) {
+ *len = 0;
+ }
+ else {
+ r = get_char_length_tree1(NODE_BODY(node), reg, &tlen, level);
+ if (r == 0)
+ *len = distance_multiply(tlen, qn->lower);
+ }
}
else
r = GET_CHAR_LEN_VARLEN;
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- if (! IS_CALL_RECURSION(NCALL(node)))
- r = get_char_length_tree1(NCALL(node)->target, reg, len, level);
+#ifdef USE_CALL
+ case NODE_CALL:
+ if (! NODE_IS_RECURSION(node))
+ r = get_char_length_tree1(NODE_BODY(node), reg, len, level);
else
r = GET_CHAR_LEN_VARLEN;
break;
#endif
- case NT_CTYPE:
- *len = 1;
- break;
-
- case NT_CCLASS:
- case NT_CANY:
+ case NODE_CTYPE:
+ case NODE_CCLASS:
*len = 1;
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
+ EnclosureNode* en = ENCLOSURE_(node);
+
switch (en->type) {
- case ENCLOSE_MEMORY:
-#ifdef USE_SUBEXP_CALL
- if (IS_ENCLOSE_CLEN_FIXED(en))
+ case ENCLOSURE_MEMORY:
+#ifdef USE_CALL
+ if (NODE_IS_CLEN_FIXED(node))
*len = en->char_len;
else {
- r = get_char_length_tree1(en->target, reg, len, level);
+ r = get_char_length_tree1(NODE_BODY(node), reg, len, level);
if (r == 0) {
en->char_len = *len;
- SET_ENCLOSE_STATUS(node, NST_CLEN_FIXED);
+ NODE_STATUS_ADD(node, NST_CLEN_FIXED);
}
}
break;
#endif
- case ENCLOSE_OPTION:
- case ENCLOSE_STOP_BACKTRACK:
- r = get_char_length_tree1(en->target, reg, len, level);
+ case ENCLOSURE_OPTION:
+ case ENCLOSURE_STOP_BACKTRACK:
+ r = get_char_length_tree1(NODE_BODY(node), reg, len, level);
break;
+ case ENCLOSURE_IF_ELSE:
+ {
+ int clen, elen;
+
+ r = get_char_length_tree1(NODE_BODY(node), reg, &clen, level);
+ if (r == 0) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = get_char_length_tree1(en->te.Then, reg, &tlen, level);
+ if (r != 0) break;
+ }
+ else tlen = 0;
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = get_char_length_tree1(en->te.Else, reg, &elen, level);
+ if (r != 0) break;
+ }
+ else elen = 0;
+
+ if (clen + tlen != elen) {
+ r = GET_CHAR_LEN_VARLEN;
+ }
+ else {
+ *len = elen;
+ }
+ }
+ }
+ break;
+
default:
break;
}
}
break;
- case NT_ANCHOR:
+ case NODE_ANCHOR:
+ case NODE_GIMMICK:
break;
+ case NODE_BACKREF:
+ if (NODE_IS_CHECKER(node))
+ break;
+ /* fall */
default:
r = GET_CHAR_LEN_VARLEN;
break;
@@ -2185,28 +2293,33 @@ get_char_length_tree(Node* node, regex_t* reg, int* len)
/* x is not included y ==> 1 : 0 */
static int
-is_not_included(Node* x, Node* y, regex_t* reg)
+is_exclusive(Node* x, Node* y, regex_t* reg)
{
int i, len;
OnigCodePoint code;
UChar *p;
- int ytype;
+ NodeType ytype;
retry:
- ytype = NTYPE(y);
- switch (NTYPE(x)) {
- case NT_CTYPE:
+ ytype = NODE_TYPE(y);
+ switch (NODE_TYPE(x)) {
+ case NODE_CTYPE:
{
+ if (CTYPE_(x)->ctype == CTYPE_ANYCHAR ||
+ CTYPE_(y)->ctype == CTYPE_ANYCHAR)
+ break;
+
switch (ytype) {
- case NT_CTYPE:
- if (NCTYPE(y)->ctype == NCTYPE(x)->ctype &&
- NCTYPE(y)->not != NCTYPE(x)->not)
+ case NODE_CTYPE:
+ if (CTYPE_(y)->ctype == CTYPE_(x)->ctype &&
+ CTYPE_(y)->not != CTYPE_(x)->not &&
+ CTYPE_(y)->ascii_mode == CTYPE_(x)->ascii_mode)
return 1;
else
return 0;
break;
- case NT_CCLASS:
+ case NODE_CCLASS:
swap:
{
Node* tmp;
@@ -2215,7 +2328,7 @@ is_not_included(Node* x, Node* y, regex_t* reg)
}
break;
- case NT_STR:
+ case NODE_STRING:
goto swap;
break;
@@ -2225,18 +2338,25 @@ is_not_included(Node* x, Node* y, regex_t* reg)
}
break;
- case NT_CCLASS:
+ case NODE_CCLASS:
{
- CClassNode* xc = NCCLASS(x);
+ int range;
+ CClassNode* xc = CCLASS_(x);
+
switch (ytype) {
- case NT_CTYPE:
- switch (NCTYPE(y)->ctype) {
+ case NODE_CTYPE:
+ switch (CTYPE_(y)->ctype) {
+ case CTYPE_ANYCHAR:
+ return 0;
+ break;
+
case ONIGENC_CTYPE_WORD:
- if (NCTYPE(y)->not == 0) {
+ if (CTYPE_(y)->not == 0) {
if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
+ range = CTYPE_(y)->ascii_mode != 0 ? 128 : SINGLE_BYTE_SIZE;
+ for (i = 0; i < range; i++) {
if (BITSET_AT(xc->bs, i)) {
- if (IS_CODE_SB_WORD(reg->enc, i)) return 0;
+ if (ONIGENC_IS_CODE_WORD(reg->enc, i)) return 0;
}
}
return 1;
@@ -2245,18 +2365,18 @@ is_not_included(Node* x, Node* y, regex_t* reg)
}
else {
if (IS_NOT_NULL(xc->mbuf)) return 0;
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (! IS_CODE_SB_WORD(reg->enc, i)) {
- if (!IS_NCCLASS_NOT(xc)) {
- if (BITSET_AT(xc->bs, i))
- return 0;
- }
- else {
- if (! BITSET_AT(xc->bs, i))
- return 0;
- }
+ if (IS_NCCLASS_NOT(xc)) return 0;
+
+ range = CTYPE_(y)->ascii_mode != 0 ? 128 : SINGLE_BYTE_SIZE;
+ for (i = 0; i < range; i++) {
+ if (! ONIGENC_IS_CODE_WORD(reg->enc, i)) {
+ if (BITSET_AT(xc->bs, i))
+ return 0;
}
}
+ for (i = range; i < SINGLE_BYTE_SIZE; i++) {
+ if (BITSET_AT(xc->bs, i)) return 0;
+ }
return 1;
}
break;
@@ -2266,15 +2386,14 @@ is_not_included(Node* x, Node* y, regex_t* reg)
}
break;
- case NT_CCLASS:
+ case NODE_CCLASS:
{
int v;
- CClassNode* yc = NCCLASS(y);
+ CClassNode* yc = CCLASS_(y);
for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
v = BITSET_AT(xc->bs, i);
- if ((v != 0 && !IS_NCCLASS_NOT(xc)) ||
- (v == 0 && IS_NCCLASS_NOT(xc))) {
+ if ((v != 0 && !IS_NCCLASS_NOT(xc)) || (v == 0 && IS_NCCLASS_NOT(xc))) {
v = BITSET_AT(yc->bs, i);
if ((v != 0 && !IS_NCCLASS_NOT(yc)) ||
(v == 0 && IS_NCCLASS_NOT(yc)))
@@ -2288,7 +2407,7 @@ is_not_included(Node* x, Node* y, regex_t* reg)
}
break;
- case NT_STR:
+ case NODE_STRING:
goto swap;
break;
@@ -2298,30 +2417,42 @@ is_not_included(Node* x, Node* y, regex_t* reg)
}
break;
- case NT_STR:
+ case NODE_STRING:
{
- StrNode* xs = NSTR(x);
- if (NSTRING_LEN(x) == 0)
+ StrNode* xs = STR_(x);
+
+ if (NODE_STRING_LEN(x) == 0)
break;
//c = *(xs->s);
switch (ytype) {
- case NT_CTYPE:
- switch (NCTYPE(y)->ctype) {
+ case NODE_CTYPE:
+ switch (CTYPE_(y)->ctype) {
+ case CTYPE_ANYCHAR:
+ break;
+
case ONIGENC_CTYPE_WORD:
- if (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end))
- return NCTYPE(y)->not;
- else
- return !(NCTYPE(y)->not);
+ if (CTYPE_(y)->ascii_mode == 0) {
+ if (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end))
+ return CTYPE_(y)->not;
+ else
+ return !(CTYPE_(y)->not);
+ }
+ else {
+ if (ONIGENC_IS_MBC_WORD_ASCII(reg->enc, xs->s, xs->end))
+ return CTYPE_(y)->not;
+ else
+ return !(CTYPE_(y)->not);
+ }
break;
default:
break;
}
break;
- case NT_CCLASS:
+ case NODE_CCLASS:
{
- CClassNode* cc = NCCLASS(y);
+ CClassNode* cc = CCLASS_(y);
code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
xs->s + ONIGENC_MBC_MAXLEN(reg->enc));
@@ -2329,13 +2460,14 @@ is_not_included(Node* x, Node* y, regex_t* reg)
}
break;
- case NT_STR:
+ case NODE_STRING:
{
UChar *q;
- StrNode* ys = NSTR(y);
- len = NSTRING_LEN(x);
- if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
- if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {
+ StrNode* ys = STR_(y);
+
+ len = NODE_STRING_LEN(x);
+ if (len > NODE_STRING_LEN(y)) len = NODE_STRING_LEN(y);
+ if (NODE_STRING_IS_AMBIG(x) || NODE_STRING_IS_AMBIG(y)) {
/* tiny version */
return 0;
}
@@ -2365,35 +2497,37 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
{
Node* n = NULL_NODE;
- switch (NTYPE(node)) {
- case NT_BREF:
- case NT_ALT:
- case NT_CANY:
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
+ switch (NODE_TYPE(node)) {
+ case NODE_BACKREF:
+ case NODE_ALT:
+#ifdef USE_CALL
+ case NODE_CALL:
#endif
break;
- case NT_CTYPE:
- case NT_CCLASS:
+ case NODE_CTYPE:
+ if (CTYPE_(node)->ctype == CTYPE_ANYCHAR)
+ break;
+ /* fall */
+ case NODE_CCLASS:
if (exact == 0) {
n = node;
}
break;
- case NT_LIST:
- n = get_head_value_node(NCAR(node), exact, reg);
+ case NODE_LIST:
+ n = get_head_value_node(NODE_CAR(node), exact, reg);
break;
- case NT_STR:
+ case NODE_STRING:
{
- StrNode* sn = NSTR(node);
+ StrNode* sn = STR_(node);
if (sn->end <= sn->s)
break;
if (exact != 0 &&
- !NSTRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {
+ !NODE_STRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {
}
else {
n = node;
@@ -2401,45 +2535,47 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
}
break;
- case NT_QTFR:
+ case NODE_QUANT:
{
- QtfrNode* qn = NQTFR(node);
+ QuantNode* qn = QUANT_(node);
if (qn->lower > 0) {
if (IS_NOT_NULL(qn->head_exact))
n = qn->head_exact;
else
- n = get_head_value_node(qn->target, exact, reg);
+ n = get_head_value_node(NODE_BODY(node), exact, reg);
}
}
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
+ EnclosureNode* en = ENCLOSURE_(node);
switch (en->type) {
- case ENCLOSE_OPTION:
+ case ENCLOSURE_OPTION:
{
OnigOptionType options = reg->options;
- reg->options = NENCLOSE(node)->option;
- n = get_head_value_node(NENCLOSE(node)->target, exact, reg);
+ reg->options = ENCLOSURE_(node)->o.options;
+ n = get_head_value_node(NODE_BODY(node), exact, reg);
reg->options = options;
}
break;
- case ENCLOSE_MEMORY:
- case ENCLOSE_STOP_BACKTRACK:
- n = get_head_value_node(en->target, exact, reg);
+ case ENCLOSURE_MEMORY:
+ case ENCLOSURE_STOP_BACKTRACK:
+ case ENCLOSURE_IF_ELSE:
+ n = get_head_value_node(NODE_BODY(node), exact, reg);
break;
}
}
break;
- case NT_ANCHOR:
- if (NANCHOR(node)->type == ANCHOR_PREC_READ)
- n = get_head_value_node(NANCHOR(node)->target, exact, reg);
+ case NODE_ANCHOR:
+ if (ANCHOR_(node)->type == ANCHOR_PREC_READ)
+ n = get_head_value_node(NODE_BODY(node), exact, reg);
break;
+ case NODE_GIMMICK:
default:
break;
}
@@ -2448,298 +2584,396 @@ get_head_value_node(Node* node, int exact, regex_t* reg)
}
static int
-check_type_tree(Node* node, int type_mask, int enclose_mask, int anchor_mask)
+check_type_tree(Node* node, int type_mask, int enclosure_mask, int anchor_mask)
{
- int type, r = 0;
+ NodeType type;
+ int r = 0;
- type = NTYPE(node);
- if ((NTYPE2BIT(type) & type_mask) == 0)
+ type = NODE_TYPE(node);
+ if ((NODE_TYPE2BIT(type) & type_mask) == 0)
return 1;
switch (type) {
- case NT_LIST:
- case NT_ALT:
+ case NODE_LIST:
+ case NODE_ALT:
do {
- r = check_type_tree(NCAR(node), type_mask, enclose_mask,
+ r = check_type_tree(NODE_CAR(node), type_mask, enclosure_mask,
anchor_mask);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_QTFR:
- r = check_type_tree(NQTFR(node)->target, type_mask, enclose_mask,
- anchor_mask);
+ case NODE_QUANT:
+ r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
- if ((en->type & enclose_mask) == 0)
+ EnclosureNode* en = ENCLOSURE_(node);
+ if (((1<<en->type) & enclosure_mask) == 0)
return 1;
- r = check_type_tree(en->target, type_mask, enclose_mask, anchor_mask);
+ r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);
+ if (r == 0 && en->type == ENCLOSURE_IF_ELSE) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = check_type_tree(en->te.Then, type_mask, enclosure_mask, anchor_mask);
+ if (r != 0) break;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = check_type_tree(en->te.Else, type_mask, enclosure_mask, anchor_mask);
+ }
+ }
}
break;
- case NT_ANCHOR:
- type = NANCHOR(node)->type;
+ case NODE_ANCHOR:
+ type = ANCHOR_(node)->type;
if ((type & anchor_mask) == 0)
return 1;
- if (NANCHOR(node)->target)
- r = check_type_tree(NANCHOR(node)->target,
- type_mask, enclose_mask, anchor_mask);
+ if (IS_NOT_NULL(NODE_BODY(node)))
+ r = check_type_tree(NODE_BODY(node), type_mask, enclosure_mask, anchor_mask);
break;
+ case NODE_GIMMICK:
default:
break;
}
return r;
}
-static int
-get_min_len(Node* node, OnigLen *min, ScanEnv* env)
+static OnigLen
+tree_min_len(Node* node, ScanEnv* env)
{
+ OnigLen len;
OnigLen tmin;
- int r = 0;
- *min = 0;
- switch (NTYPE(node)) {
- case NT_BREF:
- {
+ len = 0;
+ switch (NODE_TYPE(node)) {
+ case NODE_BACKREF:
+ if (! NODE_IS_CHECKER(node)) {
int i;
int* backs;
- Node** nodes = SCANENV_MEM_NODES(env);
- BRefNode* br = NBREF(node);
- if (br->state & NST_RECURSION) break;
+ MemEnv* mem_env = SCANENV_MEMENV(env);
+ BackRefNode* br = BACKREF_(node);
+ if (NODE_IS_RECURSION(node)) break;
backs = BACKREFS_P(br);
- if (backs[0] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- r = get_min_len(nodes[backs[0]], min, env);
- if (r != 0) break;
+ len = tree_min_len(mem_env[backs[0]].node, env);
for (i = 1; i < br->back_num; i++) {
- if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- r = get_min_len(nodes[backs[i]], &tmin, env);
- if (r != 0) break;
- if (*min > tmin) *min = tmin;
+ tmin = tree_min_len(mem_env[backs[i]].node, env);
+ if (len > tmin) len = tmin;
}
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- if (IS_CALL_RECURSION(NCALL(node))) {
- EncloseNode* en = NENCLOSE(NCALL(node)->target);
- if (IS_ENCLOSE_MIN_FIXED(en))
- *min = en->min_len;
+#ifdef USE_CALL
+ case NODE_CALL:
+ {
+ Node* t = NODE_BODY(node);
+ if (NODE_IS_RECURSION(node)) {
+ if (NODE_IS_MIN_FIXED(t))
+ len = ENCLOSURE_(t)->min_len;
+ }
+ else
+ len = tree_min_len(t, env);
}
- else
- r = get_min_len(NCALL(node)->target, min, env);
break;
#endif
- case NT_LIST:
+ case NODE_LIST:
do {
- r = get_min_len(NCAR(node), &tmin, env);
- if (r == 0) *min += tmin;
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ tmin = tree_min_len(NODE_CAR(node), env);
+ len = distance_add(len, tmin);
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_ALT:
+ case NODE_ALT:
{
Node *x, *y;
y = node;
do {
- x = NCAR(y);
- r = get_min_len(x, &tmin, env);
- if (r != 0) break;
- if (y == node) *min = tmin;
- else if (*min > tmin) *min = tmin;
- } while (r == 0 && IS_NOT_NULL(y = NCDR(y)));
+ x = NODE_CAR(y);
+ tmin = tree_min_len(x, env);
+ if (y == node) len = tmin;
+ else if (len > tmin) len = tmin;
+ } while (IS_NOT_NULL(y = NODE_CDR(y)));
}
break;
- case NT_STR:
+ case NODE_STRING:
{
- StrNode* sn = NSTR(node);
- *min = sn->end - sn->s;
+ StrNode* sn = STR_(node);
+ len = (int )(sn->end - sn->s);
}
break;
- case NT_CTYPE:
- *min = 1;
- break;
-
- case NT_CCLASS:
- case NT_CANY:
- *min = 1;
+ case NODE_CTYPE:
+ case NODE_CCLASS:
+ len = ONIGENC_MBC_MINLEN(env->enc);
break;
- case NT_QTFR:
+ case NODE_QUANT:
{
- QtfrNode* qn = NQTFR(node);
+ QuantNode* qn = QUANT_(node);
if (qn->lower > 0) {
- r = get_min_len(qn->target, min, env);
- if (r == 0)
- *min = distance_multiply(*min, qn->lower);
+ len = tree_min_len(NODE_BODY(node), env);
+ len = distance_multiply(len, qn->lower);
}
}
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
+ EnclosureNode* en = ENCLOSURE_(node);
switch (en->type) {
- case ENCLOSE_MEMORY:
- if (IS_ENCLOSE_MIN_FIXED(en))
- *min = en->min_len;
+ case ENCLOSURE_MEMORY:
+ if (NODE_IS_MIN_FIXED(node))
+ len = en->min_len;
else {
- if (IS_ENCLOSE_MARK1(NENCLOSE(node)))
- *min = 0; // recursive
+ if (NODE_IS_MARK1(node))
+ len = 0; // recursive
else {
- SET_ENCLOSE_STATUS(node, NST_MARK1);
- r = get_min_len(en->target, min, env);
- CLEAR_ENCLOSE_STATUS(node, NST_MARK1);
- if (r == 0) {
- en->min_len = *min;
- SET_ENCLOSE_STATUS(node, NST_MIN_FIXED);
- }
+ NODE_STATUS_ADD(node, NST_MARK1);
+ len = tree_min_len(NODE_BODY(node), env);
+ NODE_STATUS_REMOVE(node, NST_MARK1);
+
+ en->min_len = len;
+ NODE_STATUS_ADD(node, NST_MIN_FIXED);
}
}
break;
- case ENCLOSE_OPTION:
- case ENCLOSE_STOP_BACKTRACK:
- r = get_min_len(en->target, min, env);
+ case ENCLOSURE_OPTION:
+ case ENCLOSURE_STOP_BACKTRACK:
+ len = tree_min_len(NODE_BODY(node), env);
+ break;
+ case ENCLOSURE_IF_ELSE:
+ {
+ OnigLen elen;
+
+ len = tree_min_len(NODE_BODY(node), env);
+ if (IS_NOT_NULL(en->te.Then))
+ len += tree_min_len(en->te.Then, env);
+ if (IS_NOT_NULL(en->te.Else))
+ elen = tree_min_len(en->te.Else, env);
+ else elen = 0;
+
+ if (elen < len) len = elen;
+ }
break;
}
}
break;
- case NT_ANCHOR:
+ case NODE_GIMMICK:
+ {
+ GimmickNode* g = GIMMICK_(node);
+ if (g->type == GIMMICK_FAIL) {
+ len = INFINITE_LEN;
+ break;
+ }
+ }
+ /* fall */
+ case NODE_ANCHOR:
default:
break;
}
- return r;
+ return len;
}
-static int
-get_max_len(Node* node, OnigLen *max, ScanEnv* env)
+static OnigLen
+tree_max_len(Node* node, ScanEnv* env)
{
+ OnigLen len;
OnigLen tmax;
- int r = 0;
- *max = 0;
- switch (NTYPE(node)) {
- case NT_LIST:
+ len = 0;
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
do {
- r = get_max_len(NCAR(node), &tmax, env);
- if (r == 0)
- *max = distance_add(*max, tmax);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ tmax = tree_max_len(NODE_CAR(node), env);
+ len = distance_add(len, tmax);
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_ALT:
+ case NODE_ALT:
do {
- r = get_max_len(NCAR(node), &tmax, env);
- if (r == 0 && *max < tmax) *max = tmax;
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ tmax = tree_max_len(NODE_CAR(node), env);
+ if (len < tmax) len = tmax;
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_STR:
+ case NODE_STRING:
{
- StrNode* sn = NSTR(node);
- *max = sn->end - sn->s;
+ StrNode* sn = STR_(node);
+ len = (OnigLen )(sn->end - sn->s);
}
break;
- case NT_CTYPE:
- *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
- break;
-
- case NT_CCLASS:
- case NT_CANY:
- *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
+ case NODE_CTYPE:
+ case NODE_CCLASS:
+ len = ONIGENC_MBC_MAXLEN_DIST(env->enc);
break;
- case NT_BREF:
- {
+ case NODE_BACKREF:
+ if (! NODE_IS_CHECKER(node)) {
int i;
int* backs;
- Node** nodes = SCANENV_MEM_NODES(env);
- BRefNode* br = NBREF(node);
- if (br->state & NST_RECURSION) {
- *max = ONIG_INFINITE_DISTANCE;
+ MemEnv* mem_env = SCANENV_MEMENV(env);
+ BackRefNode* br = BACKREF_(node);
+ if (NODE_IS_RECURSION(node)) {
+ len = INFINITE_LEN;
break;
}
backs = BACKREFS_P(br);
for (i = 0; i < br->back_num; i++) {
- if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- r = get_max_len(nodes[backs[i]], &tmax, env);
- if (r != 0) break;
- if (*max < tmax) *max = tmax;
+ tmax = tree_max_len(mem_env[backs[i]].node, env);
+ if (len < tmax) len = tmax;
}
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- if (! IS_CALL_RECURSION(NCALL(node)))
- r = get_max_len(NCALL(node)->target, max, env);
+#ifdef USE_CALL
+ case NODE_CALL:
+ if (! NODE_IS_RECURSION(node))
+ len = tree_max_len(NODE_BODY(node), env);
else
- *max = ONIG_INFINITE_DISTANCE;
+ len = INFINITE_LEN;
break;
#endif
- case NT_QTFR:
+ case NODE_QUANT:
{
- QtfrNode* qn = NQTFR(node);
+ QuantNode* qn = QUANT_(node);
if (qn->upper != 0) {
- r = get_max_len(qn->target, max, env);
- if (r == 0 && *max != 0) {
+ len = tree_max_len(NODE_BODY(node), env);
+ if (len != 0) {
if (! IS_REPEAT_INFINITE(qn->upper))
- *max = distance_multiply(*max, qn->upper);
+ len = distance_multiply(len, qn->upper);
else
- *max = ONIG_INFINITE_DISTANCE;
+ len = INFINITE_LEN;
}
}
}
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
+ EnclosureNode* en = ENCLOSURE_(node);
switch (en->type) {
- case ENCLOSE_MEMORY:
- if (IS_ENCLOSE_MAX_FIXED(en))
- *max = en->max_len;
+ case ENCLOSURE_MEMORY:
+ if (NODE_IS_MAX_FIXED(node))
+ len = en->max_len;
else {
- if (IS_ENCLOSE_MARK1(NENCLOSE(node)))
- *max = ONIG_INFINITE_DISTANCE;
+ if (NODE_IS_MARK1(node))
+ len = INFINITE_LEN;
else {
- SET_ENCLOSE_STATUS(node, NST_MARK1);
- r = get_max_len(en->target, max, env);
- CLEAR_ENCLOSE_STATUS(node, NST_MARK1);
- if (r == 0) {
- en->max_len = *max;
- SET_ENCLOSE_STATUS(node, NST_MAX_FIXED);
- }
+ NODE_STATUS_ADD(node, NST_MARK1);
+ len = tree_max_len(NODE_BODY(node), env);
+ NODE_STATUS_REMOVE(node, NST_MARK1);
+
+ en->max_len = len;
+ NODE_STATUS_ADD(node, NST_MAX_FIXED);
}
}
break;
- case ENCLOSE_OPTION:
- case ENCLOSE_STOP_BACKTRACK:
- r = get_max_len(en->target, max, env);
+ case ENCLOSURE_OPTION:
+ case ENCLOSURE_STOP_BACKTRACK:
+ len = tree_max_len(NODE_BODY(node), env);
+ break;
+ case ENCLOSURE_IF_ELSE:
+ {
+ OnigLen tlen, elen;
+
+ len = tree_max_len(NODE_BODY(node), env);
+ if (IS_NOT_NULL(en->te.Then)) {
+ tlen = tree_max_len(en->te.Then, env);
+ len = distance_add(len, tlen);
+ }
+ if (IS_NOT_NULL(en->te.Else))
+ elen = tree_max_len(en->te.Else, env);
+ else elen = 0;
+
+ if (elen > len) len = elen;
+ }
break;
}
}
break;
- case NT_ANCHOR:
+ case NODE_ANCHOR:
+ case NODE_GIMMICK:
+ default:
+ break;
+ }
+
+ return len;
+}
+
+static int
+check_backrefs(Node* node, ScanEnv* env)
+{
+ int r;
+
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
+ do {
+ r = check_backrefs(NODE_CAR(node), env);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
+ break;
+
+ case NODE_ANCHOR:
+ if (! ANCHOR_HAS_BODY(ANCHOR_(node))) {
+ r = 0;
+ break;
+ }
+ /* fall */
+ case NODE_QUANT:
+ r = check_backrefs(NODE_BODY(node), env);
+ break;
+
+ case NODE_ENCLOSURE:
+ r = check_backrefs(NODE_BODY(node), env);
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ if (en->type == ENCLOSURE_IF_ELSE) {
+ if (r != 0) return r;
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = check_backrefs(en->te.Then, env);
+ if (r != 0) return r;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = check_backrefs(en->te.Else, env);
+ }
+ }
+ }
+ break;
+
+ case NODE_BACKREF:
+ {
+ int i;
+ BackRefNode* br = BACKREF_(node);
+ int* backs = BACKREFS_P(br);
+ MemEnv* mem_env = SCANENV_MEMENV(env);
+
+ for (i = 0; i < br->back_num; i++) {
+ if (backs[i] > env->num_mem)
+ return ONIGERR_INVALID_BACKREF;
+
+ NODE_STATUS_ADD(mem_env[backs[i]].node, NST_BACKREF);
+ }
+ r = 0;
+ }
+ break;
+
default:
+ r = 0;
break;
}
@@ -2747,85 +2981,114 @@ get_max_len(Node* node, OnigLen *max, ScanEnv* env)
}
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
-#define RECURSION_EXIST 1
-#define RECURSION_INFINITE 2
+#define RECURSION_EXIST (1<<0)
+#define RECURSION_MUST (1<<1)
+#define RECURSION_INFINITE (1<<2)
static int
-subexp_inf_recursive_check(Node* node, ScanEnv* env, int head)
+infinite_recursive_call_check(Node* node, ScanEnv* env, int head)
{
- int type;
+ int ret;
int r = 0;
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
{
Node *x;
OnigLen min;
- int ret;
x = node;
do {
- ret = subexp_inf_recursive_check(NCAR(x), env, head);
- if (ret < 0 || ret == RECURSION_INFINITE) return ret;
+ ret = infinite_recursive_call_check(NODE_CAR(x), env, head);
+ if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;
r |= ret;
- if (head) {
- ret = get_min_len(NCAR(x), &min, env);
- if (ret != 0) return ret;
+ if (head != 0) {
+ min = tree_min_len(NODE_CAR(x), env);
if (min != 0) head = 0;
}
- } while (IS_NOT_NULL(x = NCDR(x)));
+ } while (IS_NOT_NULL(x = NODE_CDR(x)));
}
break;
- case NT_ALT:
+ case NODE_ALT:
{
- int ret;
- r = RECURSION_EXIST;
+ int must;
+
+ must = RECURSION_MUST;
do {
- ret = subexp_inf_recursive_check(NCAR(node), env, head);
- if (ret < 0 || ret == RECURSION_INFINITE) return ret;
- r &= ret;
- } while (IS_NOT_NULL(node = NCDR(node)));
+ ret = infinite_recursive_call_check(NODE_CAR(node), env, head);
+ if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;
+
+ r |= (ret & RECURSION_EXIST);
+ must &= ret;
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
+ r |= must;
}
break;
- case NT_QTFR:
- r = subexp_inf_recursive_check(NQTFR(node)->target, env, head);
- if (r == RECURSION_EXIST) {
- if (NQTFR(node)->lower == 0) r = 0;
+ case NODE_QUANT:
+ r = infinite_recursive_call_check(NODE_BODY(node), env, head);
+ if (r < 0) return r;
+ if ((r & RECURSION_MUST) != 0) {
+ if (QUANT_(node)->lower == 0)
+ r &= ~RECURSION_MUST;
}
break;
- case NT_ANCHOR:
+ case NODE_ANCHOR:
+ if (! ANCHOR_HAS_BODY(ANCHOR_(node)))
+ break;
+ /* fall */
+ case NODE_CALL:
+ r = infinite_recursive_call_check(NODE_BODY(node), env, head);
+ break;
+
+ case NODE_ENCLOSURE:
{
- AnchorNode* an = NANCHOR(node);
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_inf_recursive_check(an->target, env, head);
- break;
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ if (en->type == ENCLOSURE_MEMORY) {
+ if (NODE_IS_MARK2(node))
+ return 0;
+ else if (NODE_IS_MARK1(node))
+ return (head == 0 ? RECURSION_EXIST | RECURSION_MUST
+ : RECURSION_EXIST | RECURSION_MUST | RECURSION_INFINITE);
+ else {
+ NODE_STATUS_ADD(node, NST_MARK2);
+ r = infinite_recursive_call_check(NODE_BODY(node), env, head);
+ NODE_STATUS_REMOVE(node, NST_MARK2);
+ }
}
- }
- break;
+ else if (en->type == ENCLOSURE_IF_ELSE) {
+ int eret;
- case NT_CALL:
- r = subexp_inf_recursive_check(NCALL(node)->target, env, head);
- break;
+ ret = infinite_recursive_call_check(NODE_BODY(node), env, head);
+ if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;
+ r |= ret;
+ if (IS_NOT_NULL(en->te.Then)) {
+ OnigLen min;
+ if (head != 0) {
+ min = tree_min_len(NODE_BODY(node), env);
+ }
+ else min = 0;
- case NT_ENCLOSE:
- if (IS_ENCLOSE_MARK2(NENCLOSE(node)))
- return 0;
- else if (IS_ENCLOSE_MARK1(NENCLOSE(node)))
- return (head == 0 ? RECURSION_EXIST : RECURSION_INFINITE);
- else {
- SET_ENCLOSE_STATUS(node, NST_MARK2);
- r = subexp_inf_recursive_check(NENCLOSE(node)->target, env, head);
- CLEAR_ENCLOSE_STATUS(node, NST_MARK2);
+ ret = infinite_recursive_call_check(en->te.Then, env, min != 0 ? 0:head);
+ if (ret < 0 || (ret & RECURSION_INFINITE) != 0) return ret;
+ r |= ret;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ eret = infinite_recursive_call_check(en->te.Else, env, head);
+ if (eret < 0 || (eret & RECURSION_INFINITE) != 0) return eret;
+ r |= (eret & RECURSION_EXIST);
+ if ((eret & RECURSION_MUST) == 0)
+ r &= ~RECURSION_MUST;
+ }
+ }
+ else {
+ r = infinite_recursive_call_check(NODE_BODY(node), env, head);
+ }
}
break;
@@ -2837,53 +3100,63 @@ subexp_inf_recursive_check(Node* node, ScanEnv* env, int head)
}
static int
-subexp_inf_recursive_check_trav(Node* node, ScanEnv* env)
+infinite_recursive_call_check_trav(Node* node, ScanEnv* env)
{
- int type;
- int r = 0;
+ int r;
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
- case NT_ALT:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
do {
- r = subexp_inf_recursive_check_trav(NCAR(node), env);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
- break;
-
- case NT_QTFR:
- r = subexp_inf_recursive_check_trav(NQTFR(node)->target, env);
+ r = infinite_recursive_call_check_trav(NODE_CAR(node), env);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_ANCHOR:
- {
- AnchorNode* an = NANCHOR(node);
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_inf_recursive_check_trav(an->target, env);
- break;
- }
+ case NODE_ANCHOR:
+ if (! ANCHOR_HAS_BODY(ANCHOR_(node))) {
+ r = 0;
+ break;
}
+ /* fall */
+ case NODE_QUANT:
+ r = infinite_recursive_call_check_trav(NODE_BODY(node), env);
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
+ EnclosureNode* en = ENCLOSURE_(node);
- if (IS_ENCLOSE_RECURSION(en)) {
- SET_ENCLOSE_STATUS(node, NST_MARK1);
- r = subexp_inf_recursive_check(en->target, env, 1);
- if (r > 0) return ONIGERR_NEVER_ENDING_RECURSION;
- CLEAR_ENCLOSE_STATUS(node, NST_MARK1);
+ if (en->type == ENCLOSURE_MEMORY) {
+ if (NODE_IS_RECURSION(node) && NODE_IS_CALLED(node)) {
+ int ret;
+
+ NODE_STATUS_ADD(node, NST_MARK1);
+
+ ret = infinite_recursive_call_check(NODE_BODY(node), env, 1);
+ if (ret < 0) return ret;
+ else if ((ret & (RECURSION_MUST | RECURSION_INFINITE)) != 0)
+ return ONIGERR_NEVER_ENDING_RECURSION;
+
+ NODE_STATUS_REMOVE(node, NST_MARK1);
+ }
+ }
+ else if (en->type == ENCLOSURE_IF_ELSE) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = infinite_recursive_call_check_trav(en->te.Then, env);
+ if (r != 0) return r;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = infinite_recursive_call_check_trav(en->te.Else, env);
+ if (r != 0) return r;
+ }
}
- r = subexp_inf_recursive_check_trav(en->target, env);
}
+
+ r = infinite_recursive_call_check_trav(NODE_BODY(node), env);
break;
default:
+ r = 0;
break;
}
@@ -2891,227 +3164,153 @@ subexp_inf_recursive_check_trav(Node* node, ScanEnv* env)
}
static int
-subexp_recursive_check(Node* node)
+recursive_call_check(Node* node)
{
- int r = 0;
+ int r;
- switch (NTYPE(node)) {
- case NT_LIST:
- case NT_ALT:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
+ r = 0;
do {
- r |= subexp_recursive_check(NCAR(node));
- } while (IS_NOT_NULL(node = NCDR(node)));
+ r |= recursive_call_check(NODE_CAR(node));
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_QTFR:
- r = subexp_recursive_check(NQTFR(node)->target);
+ case NODE_ANCHOR:
+ if (! ANCHOR_HAS_BODY(ANCHOR_(node))) {
+ r = 0;
+ break;
+ }
+ /* fall */
+ case NODE_QUANT:
+ r = recursive_call_check(NODE_BODY(node));
break;
- case NT_ANCHOR:
- {
- AnchorNode* an = NANCHOR(node);
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_recursive_check(an->target);
- break;
- }
+ case NODE_CALL:
+ r = recursive_call_check(NODE_BODY(node));
+ if (r != 0) {
+ if (NODE_IS_MARK1(NODE_BODY(node)))
+ NODE_STATUS_ADD(node, NST_RECURSION);
}
break;
- case NT_CALL:
- r = subexp_recursive_check(NCALL(node)->target);
- if (r != 0) SET_CALL_RECURSION(node);
- break;
+ case NODE_ENCLOSURE:
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
- case NT_ENCLOSE:
- if (IS_ENCLOSE_MARK2(NENCLOSE(node)))
- return 0;
- else if (IS_ENCLOSE_MARK1(NENCLOSE(node)))
- return 1; /* recursion */
- else {
- SET_ENCLOSE_STATUS(node, NST_MARK2);
- r = subexp_recursive_check(NENCLOSE(node)->target);
- CLEAR_ENCLOSE_STATUS(node, NST_MARK2);
+ if (en->type == ENCLOSURE_MEMORY) {
+ if (NODE_IS_MARK2(node))
+ return 0;
+ else if (NODE_IS_MARK1(node))
+ return 1; /* recursion */
+ else {
+ NODE_STATUS_ADD(node, NST_MARK2);
+ r = recursive_call_check(NODE_BODY(node));
+ NODE_STATUS_REMOVE(node, NST_MARK2);
+ }
+ }
+ else if (en->type == ENCLOSURE_IF_ELSE) {
+ r = 0;
+ if (IS_NOT_NULL(en->te.Then)) {
+ r |= recursive_call_check(en->te.Then);
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ r |= recursive_call_check(en->te.Else);
+ }
+ r |= recursive_call_check(NODE_BODY(node));
+ }
+ else {
+ r = recursive_call_check(NODE_BODY(node));
+ }
}
break;
default:
+ r = 0;
break;
}
return r;
}
+#define IN_RECURSION (1<<0)
+#define FOUND_CALLED_NODE 1
static int
-subexp_recursive_check_trav(Node* node, ScanEnv* env)
+recursive_call_check_trav(Node* node, ScanEnv* env, int state)
{
-#define FOUND_CALLED_NODE 1
-
- int type;
int r = 0;
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
- case NT_ALT:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
{
int ret;
do {
- ret = subexp_recursive_check_trav(NCAR(node), env);
+ ret = recursive_call_check_trav(NODE_CAR(node), env, state);
if (ret == FOUND_CALLED_NODE) r = FOUND_CALLED_NODE;
else if (ret < 0) return ret;
- } while (IS_NOT_NULL(node = NCDR(node)));
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
}
break;
- case NT_QTFR:
- r = subexp_recursive_check_trav(NQTFR(node)->target, env);
- if (NQTFR(node)->upper == 0) {
+ case NODE_QUANT:
+ r = recursive_call_check_trav(NODE_BODY(node), env, state);
+ if (QUANT_(node)->upper == 0) {
if (r == FOUND_CALLED_NODE)
- NQTFR(node)->is_refered = 1;
+ QUANT_(node)->is_refered = 1;
}
break;
- case NT_ANCHOR:
+ case NODE_ANCHOR:
{
- AnchorNode* an = NANCHOR(node);
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = subexp_recursive_check_trav(an->target, env);
- break;
- }
+ AnchorNode* an = ANCHOR_(node);
+ if (ANCHOR_HAS_BODY(an))
+ r = recursive_call_check_trav(NODE_ANCHOR_BODY(an), env, state);
}
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
-
- if (! IS_ENCLOSE_RECURSION(en)) {
- if (IS_ENCLOSE_CALLED(en)) {
- SET_ENCLOSE_STATUS(node, NST_MARK1);
- r = subexp_recursive_check(en->target);
- if (r != 0) SET_ENCLOSE_STATUS(node, NST_RECURSION);
- CLEAR_ENCLOSE_STATUS(node, NST_MARK1);
+ int ret;
+ int state1;
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ if (en->type == ENCLOSURE_MEMORY) {
+ if (NODE_IS_CALLED(node) || (state & IN_RECURSION) != 0) {
+ if (! NODE_IS_RECURSION(node)) {
+ NODE_STATUS_ADD(node, NST_MARK1);
+ r = recursive_call_check(NODE_BODY(node));
+ if (r != 0)
+ NODE_STATUS_ADD(node, NST_RECURSION);
+ NODE_STATUS_REMOVE(node, NST_MARK1);
+ }
+
+ if (NODE_IS_CALLED(node))
+ r = FOUND_CALLED_NODE;
}
}
- r = subexp_recursive_check_trav(en->target, env);
- if (IS_ENCLOSE_CALLED(en))
- r |= FOUND_CALLED_NODE;
- }
- break;
- default:
- break;
- }
+ state1 = state;
+ if (NODE_IS_RECURSION(node))
+ state1 |= IN_RECURSION;
- return r;
-}
+ ret = recursive_call_check_trav(NODE_BODY(node), env, state1);
+ if (ret == FOUND_CALLED_NODE)
+ r = FOUND_CALLED_NODE;
-static int
-setup_subexp_call(Node* node, ScanEnv* env)
-{
- int type;
- int r = 0;
-
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
- do {
- r = setup_subexp_call(NCAR(node), env);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
- break;
-
- case NT_ALT:
- do {
- r = setup_subexp_call(NCAR(node), env);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
- break;
-
- case NT_QTFR:
- r = setup_subexp_call(NQTFR(node)->target, env);
- break;
- case NT_ENCLOSE:
- r = setup_subexp_call(NENCLOSE(node)->target, env);
- break;
-
- case NT_CALL:
- {
- CallNode* cn = NCALL(node);
- Node** nodes = SCANENV_MEM_NODES(env);
-
- if (cn->group_num != 0) {
- int gnum = cn->group_num;
-
-#ifdef USE_NAMED_GROUP
- if (env->num_named > 0 &&
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
- !ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_CAPTURE_GROUP)) {
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
- }
-#endif
- if (gnum > env->num_mem) {
- onig_scan_env_set_error_string(env,
- ONIGERR_UNDEFINED_GROUP_REFERENCE, cn->name, cn->name_end);
- return ONIGERR_UNDEFINED_GROUP_REFERENCE;
+ if (en->type == ENCLOSURE_IF_ELSE) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ ret = recursive_call_check_trav(en->te.Then, env, state1);
+ if (ret == FOUND_CALLED_NODE)
+ r = FOUND_CALLED_NODE;
}
-
-#ifdef USE_NAMED_GROUP
- set_call_attr:
-#endif
- cn->target = nodes[cn->group_num];
- if (IS_NULL(cn->target)) {
- onig_scan_env_set_error_string(env,
- ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);
- return ONIGERR_UNDEFINED_NAME_REFERENCE;
- }
- SET_ENCLOSE_STATUS(cn->target, NST_CALLED);
- BIT_STATUS_ON_AT(env->bt_mem_start, cn->group_num);
- cn->unset_addr_list = env->unset_addr_list;
- }
-#ifdef USE_NAMED_GROUP
- else {
- int *refs;
-
- int n = onig_name_to_group_numbers(env->reg, cn->name, cn->name_end,
- &refs);
- if (n <= 0) {
- onig_scan_env_set_error_string(env,
- ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);
- return ONIGERR_UNDEFINED_NAME_REFERENCE;
+ if (IS_NOT_NULL(en->te.Else)) {
+ ret = recursive_call_check_trav(en->te.Else, env, state1);
+ if (ret == FOUND_CALLED_NODE)
+ r = FOUND_CALLED_NODE;
}
- else if (n > 1) {
- onig_scan_env_set_error_string(env,
- ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, cn->name, cn->name_end);
- return ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL;
- }
- else {
- cn->group_num = refs[0];
- goto set_call_attr;
- }
- }
-#endif
- }
- break;
-
- case NT_ANCHOR:
- {
- AnchorNode* an = NANCHOR(node);
-
- switch (an->type) {
- case ANCHOR_PREC_READ:
- case ANCHOR_PREC_READ_NOT:
- case ANCHOR_LOOK_BEHIND:
- case ANCHOR_LOOK_BEHIND_NOT:
- r = setup_subexp_call(an->target, env);
- break;
}
}
break;
@@ -3122,6 +3321,7 @@ setup_subexp_call(Node* node, ScanEnv* env)
return r;
}
+
#endif
/* divide different length alternatives in look-behind.
@@ -3132,30 +3332,28 @@ static int
divide_look_behind_alternatives(Node* node)
{
Node *head, *np, *insert_node;
- AnchorNode* an = NANCHOR(node);
+ AnchorNode* an = ANCHOR_(node);
int anc_type = an->type;
- /* fprintf(stderr, "divide_look_behind: %d\n", (int )node); */
-
- head = an->target;
- np = NCAR(head);
+ head = NODE_ANCHOR_BODY(an);
+ np = NODE_CAR(head);
swap_node(node, head);
- NCAR(node) = head;
- NANCHOR(head)->target = np;
+ NODE_CAR(node) = head;
+ NODE_BODY(head) = np;
np = node;
- while ((np = NCDR(np)) != NULL_NODE) {
- insert_node = onig_node_new_anchor(anc_type);
+ while (IS_NOT_NULL(np = NODE_CDR(np))) {
+ insert_node = onig_node_new_anchor(anc_type, an->ascii_mode);
CHECK_NULL_RETURN_MEMERR(insert_node);
- NANCHOR(insert_node)->target = NCAR(np);
- NCAR(np) = insert_node;
+ NODE_BODY(insert_node) = NODE_CAR(np);
+ NODE_CAR(np) = insert_node;
}
if (anc_type == ANCHOR_LOOK_BEHIND_NOT) {
np = node;
do {
- SET_NTYPE(np, NT_LIST); /* alt -> list */
- } while ((np = NCDR(np)) != NULL_NODE);
+ NODE_SET_TYPE(np, NODE_LIST); /* alt -> list */
+ } while (IS_NOT_NULL(np = NODE_CDR(np)));
}
return 0;
}
@@ -3164,11 +3362,9 @@ static int
setup_look_behind(Node* node, regex_t* reg, ScanEnv* env)
{
int r, len;
- AnchorNode* an = NANCHOR(node);
-
- /* fprintf(stderr, "setup_look_behind: %x\n", (int )node); */
+ AnchorNode* an = ANCHOR_(node);
- r = get_char_length_tree(an->target, reg, &len);
+ r = get_char_length_tree(NODE_ANCHOR_BODY(an), reg, &len);
if (r == 0)
an->char_len = len;
else if (r == GET_CHAR_LEN_VARLEN)
@@ -3186,44 +3382,43 @@ setup_look_behind(Node* node, regex_t* reg, ScanEnv* env)
static int
next_setup(Node* node, Node* next_node, regex_t* reg)
{
- int type;
+ NodeType type;
retry:
- type = NTYPE(node);
- if (type == NT_QTFR) {
- QtfrNode* qn = NQTFR(node);
+ type = NODE_TYPE(node);
+ if (type == NODE_QUANT) {
+ QuantNode* qn = QUANT_(node);
if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {
-#ifdef USE_QTFR_PEEK_NEXT
+#ifdef USE_QUANT_PEEK_NEXT
Node* n = get_head_value_node(next_node, 1, reg);
/* '\0': for UTF-16BE etc... */
- if (IS_NOT_NULL(n) && NSTR(n)->s[0] != '\0') {
+ if (IS_NOT_NULL(n) && STR_(n)->s[0] != '\0') {
qn->next_head_exact = n;
}
#endif
/* automatic posseivation a*b ==> (?>a*)b */
if (qn->lower <= 1) {
- int ttype = NTYPE(qn->target);
- if (IS_NODE_TYPE_SIMPLE(ttype)) {
+ if (NODE_IS_SIMPLE_TYPE(NODE_BODY(node))) {
Node *x, *y;
- x = get_head_value_node(qn->target, 0, reg);
+ x = get_head_value_node(NODE_BODY(node), 0, reg);
if (IS_NOT_NULL(x)) {
y = get_head_value_node(next_node, 0, reg);
- if (IS_NOT_NULL(y) && is_not_included(x, y, reg)) {
- Node* en = onig_node_new_enclose(ENCLOSE_STOP_BACKTRACK);
+ if (IS_NOT_NULL(y) && is_exclusive(x, y, reg)) {
+ Node* en = onig_node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
CHECK_NULL_RETURN_MEMERR(en);
- SET_ENCLOSE_STATUS(en, NST_STOP_BT_SIMPLE_REPEAT);
+ NODE_STATUS_ADD(en, NST_STOP_BT_SIMPLE_REPEAT);
swap_node(node, en);
- NENCLOSE(node)->target = en;
+ NODE_BODY(node) = en;
}
}
}
}
}
}
- else if (type == NT_ENCLOSE) {
- EncloseNode* en = NENCLOSE(node);
- if (en->type == ENCLOSE_MEMORY) {
- node = en->target;
+ else if (type == NODE_ENCLOSURE) {
+ EnclosureNode* en = ENCLOSURE_(node);
+ if (en->type == ENCLOSURE_MEMORY) {
+ node = NODE_BODY(node);
goto retry;
}
}
@@ -3237,10 +3432,10 @@ update_string_node_case_fold(regex_t* reg, Node *node)
UChar *p, *end, buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
UChar *sbuf, *ebuf, *sp;
int r, i, len, sbuf_size;
- StrNode* sn = NSTR(node);
+ StrNode* sn = STR_(node);
end = sn->end;
- sbuf_size = (end - sn->s) * 2;
+ sbuf_size = (int )(end - sn->s) * 2;
sbuf = (UChar* )xmalloc(sbuf_size);
CHECK_NULL_RETURN_MEMERR(sbuf);
ebuf = sbuf + sbuf_size;
@@ -3273,8 +3468,7 @@ update_string_node_case_fold(regex_t* reg, Node *node)
}
static int
-expand_case_fold_make_rem_string(Node** rnode, UChar *s, UChar *end,
- regex_t* reg)
+expand_case_fold_make_rem_string(Node** rnode, UChar *s, UChar *end, regex_t* reg)
{
int r;
Node *node;
@@ -3288,16 +3482,16 @@ expand_case_fold_make_rem_string(Node** rnode, UChar *s, UChar *end,
return r;
}
- NSTRING_SET_AMBIG(node);
- NSTRING_SET_DONT_GET_OPT_INFO(node);
+ NODE_STRING_SET_AMBIG(node);
+ NODE_STRING_SET_DONT_GET_OPT_INFO(node);
*rnode = node;
return 0;
}
static int
expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
- UChar *p, int slen, UChar *end,
- regex_t* reg, Node **rnode)
+ UChar *p, int slen, UChar *end, regex_t* reg,
+ Node **rnode)
{
int r, i, j, len, varlen;
Node *anode, *var_anode, *snode, *xnode, *an;
@@ -3319,11 +3513,11 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
xnode = onig_node_new_list(NULL, NULL);
if (IS_NULL(xnode)) goto mem_err;
- NCAR(var_anode) = xnode;
+ NODE_CAR(var_anode) = xnode;
anode = onig_node_new_alt(NULL_NODE, NULL_NODE);
if (IS_NULL(anode)) goto mem_err;
- NCAR(xnode) = anode;
+ NODE_CAR(xnode) = anode;
}
else {
*rnode = anode = onig_node_new_alt(NULL_NODE, NULL_NODE);
@@ -3333,12 +3527,12 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
snode = onig_node_new_str(p, p + slen);
if (IS_NULL(snode)) goto mem_err;
- NCAR(anode) = snode;
+ NODE_CAR(anode) = snode;
for (i = 0; i < item_num; i++) {
snode = onig_node_new_str(NULL, NULL);
if (IS_NULL(snode)) goto mem_err;
-
+
for (j = 0; j < items[i].code_len; j++) {
len = ONIGENC_CODE_TO_MBC(reg->enc, items[i].code[j], buf);
if (len < 0) {
@@ -3379,18 +3573,18 @@ expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],
goto mem_err;
}
- NCAR(an) = xnode;
+ NODE_CAR(an) = xnode;
}
else {
- NCAR(an) = snode;
+ NODE_CAR(an) = snode;
}
- NCDR(var_anode) = an;
+ NODE_CDR(var_anode) = an;
var_anode = an;
}
else {
- NCAR(an) = snode;
- NCDR(anode) = an;
+ NODE_CAR(an) = snode;
+ NODE_CDR(anode) = an;
anode = an;
}
}
@@ -3415,9 +3609,9 @@ expand_case_fold_string(Node* node, regex_t* reg)
UChar *start, *end, *p;
Node *top_root, *root, *snode, *prev_node;
OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
- StrNode* sn = NSTR(node);
+ StrNode* sn = STR_(node);
- if (NSTRING_IS_AMBIG(node)) return 0;
+ if (NODE_STRING_IS_AMBIG(node)) return 0;
start = sn->s;
end = sn->end;
@@ -3428,8 +3622,8 @@ expand_case_fold_string(Node* node, regex_t* reg)
alt_num = 1;
p = start;
while (p < end) {
- n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(reg->enc, reg->case_fold_flag,
- p, end, items);
+ n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(reg->enc, reg->case_fold_flag, p, end,
+ items);
if (n < 0) {
r = n;
goto err;
@@ -3485,7 +3679,7 @@ expand_case_fold_string(Node* node, regex_t* reg)
}
}
- root = NCAR(prev_node);
+ root = NODE_CAR(prev_node);
}
else { /* r == 0 */
if (IS_NOT_NULL(root)) {
@@ -3542,156 +3736,681 @@ expand_case_fold_string(Node* node, regex_t* reg)
return r;
}
-
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
-
-#define CEC_THRES_NUM_BIG_REPEAT 512
-#define CEC_INFINITE_NUM 0x7fffffff
-
-#define CEC_IN_INFINITE_REPEAT (1<<0)
-#define CEC_IN_FINITE_REPEAT (1<<1)
-#define CEC_CONT_BIG_REPEAT (1<<2)
-
-static int
-setup_comb_exp_check(Node* node, int state, ScanEnv* env)
+#ifdef USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT
+static enum QuantBodyEmpty
+quantifiers_memory_node_info(Node* node)
{
- int type;
- int r = state;
+ int r = QUANT_BODY_IS_EMPTY;
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
{
- Node* prev = NULL_NODE;
+ int v;
do {
- r = setup_comb_exp_check(NCAR(node), r, env);
- prev = NCAR(node);
- } while (r >= 0 && IS_NOT_NULL(node = NCDR(node)));
+ v = quantifiers_memory_node_info(NODE_CAR(node));
+ if (v > r) r = v;
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
+ }
+ break;
+
+#ifdef USE_CALL
+ case NODE_CALL:
+ if (NODE_IS_RECURSION(node)) {
+ return QUANT_BODY_IS_EMPTY_REC; /* tiny version */
}
+ else
+ r = quantifiers_memory_node_info(NODE_BODY(node));
break;
+#endif
- case NT_ALT:
+ case NODE_QUANT:
{
- int ret;
- do {
- ret = setup_comb_exp_check(NCAR(node), state, env);
- r |= ret;
- } while (ret >= 0 && IS_NOT_NULL(node = NCDR(node)));
+ QuantNode* qn = QUANT_(node);
+ if (qn->upper != 0) {
+ r = quantifiers_memory_node_info(NODE_BODY(node));
+ }
}
break;
- case NT_QTFR:
+ case NODE_ENCLOSURE:
{
- int child_state = state;
- int add_state = 0;
- QtfrNode* qn = NQTFR(node);
- Node* target = qn->target;
- int var_num;
-
- if (! IS_REPEAT_INFINITE(qn->upper)) {
- if (qn->upper > 1) {
- /* {0,1}, {1,1} are allowed */
- child_state |= CEC_IN_FINITE_REPEAT;
-
- /* check (a*){n,m}, (a+){n,m} => (a*){n,n}, (a+){n,n} */
- if (env->backrefed_mem == 0) {
- if (NTYPE(qn->target) == NT_ENCLOSE) {
- EncloseNode* en = NENCLOSE(qn->target);
- if (en->type == ENCLOSE_MEMORY) {
- if (NTYPE(en->target) == NT_QTFR) {
- QtfrNode* q = NQTFR(en->target);
- if (IS_REPEAT_INFINITE(q->upper)
- && q->greedy == qn->greedy) {
- qn->upper = (qn->lower == 0 ? 1 : qn->lower);
- if (qn->upper == 1)
- child_state = state;
- }
- }
- }
- }
+ EnclosureNode* en = ENCLOSURE_(node);
+ switch (en->type) {
+ case ENCLOSURE_MEMORY:
+ if (NODE_IS_RECURSION(node)) {
+ return QUANT_BODY_IS_EMPTY_REC;
+ }
+ return QUANT_BODY_IS_EMPTY_MEM;
+ break;
+
+ case ENCLOSURE_OPTION:
+ case ENCLOSURE_STOP_BACKTRACK:
+ r = quantifiers_memory_node_info(NODE_BODY(node));
+ break;
+ case ENCLOSURE_IF_ELSE:
+ {
+ int v;
+ r = quantifiers_memory_node_info(NODE_BODY(node));
+ if (IS_NOT_NULL(en->te.Then)) {
+ v = quantifiers_memory_node_info(en->te.Then);
+ if (v > r) r = v;
+ }
+ if (IS_NOT_NULL(en->te.Else)) {
+ v = quantifiers_memory_node_info(en->te.Else);
+ if (v > r) r = v;
}
}
+ break;
+ default:
+ break;
}
+ }
+ break;
+
+ case NODE_BACKREF:
+ case NODE_STRING:
+ case NODE_CTYPE:
+ case NODE_CCLASS:
+ case NODE_ANCHOR:
+ case NODE_GIMMICK:
+ default:
+ break;
+ }
+
+ return r;
+}
+#endif /* USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT */
+
+
+#define IN_ALT (1<<0)
+#define IN_NOT (1<<1)
+#define IN_REAL_REPEAT (1<<2)
+#define IN_VAR_REPEAT (1<<3)
+#define IN_ZERO_REPEAT (1<<4)
+#define IN_MULTI_ENTRY (1<<5)
+
+#ifdef USE_CALL
+
+#ifdef __GNUC__
+__inline
+#endif
+static int
+setup_call_node_call(CallNode* cn, ScanEnv* env, int state)
+{
+ MemEnv* mem_env = SCANENV_MEMENV(env);
+
+ if (cn->by_number != 0) {
+ int gnum = cn->group_num;
+
+ if (env->num_named > 0 &&
+ IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
+ ! ONIG_IS_OPTION_ON(env->options, ONIG_OPTION_CAPTURE_GROUP)) {
+ return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
+ }
- if (state & CEC_IN_FINITE_REPEAT) {
- qn->comb_exp_check_num = -1;
+ if (gnum > env->num_mem) {
+ onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_GROUP_REFERENCE,
+ cn->name, cn->name_end);
+ return ONIGERR_UNDEFINED_GROUP_REFERENCE;
+ }
+
+ set_call_attr:
+ NODE_CALL_BODY(cn) = mem_env[cn->group_num].node;
+ if (IS_NULL(NODE_CALL_BODY(cn))) {
+ onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE,
+ cn->name, cn->name_end);
+ return ONIGERR_UNDEFINED_NAME_REFERENCE;
+ }
+ }
+ else {
+ int *refs;
+
+ int n = onig_name_to_group_numbers(env->reg, cn->name, cn->name_end, &refs);
+ if (n <= 0) {
+ onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE,
+ cn->name, cn->name_end);
+ return ONIGERR_UNDEFINED_NAME_REFERENCE;
+ }
+ else if (n > 1) {
+ onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL,
+ cn->name, cn->name_end);
+ return ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL;
+ }
+ else {
+ cn->group_num = refs[0];
+ goto set_call_attr;
+ }
+ }
+
+ return 0;
+}
+
+static void
+setup_call2_call(Node* node)
+{
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
+ do {
+ setup_call2_call(NODE_CAR(node));
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
+ break;
+
+ case NODE_QUANT:
+ setup_call2_call(NODE_BODY(node));
+ break;
+
+ case NODE_ANCHOR:
+ if (ANCHOR_HAS_BODY(ANCHOR_(node)))
+ setup_call2_call(NODE_BODY(node));
+ break;
+
+ case NODE_ENCLOSURE:
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ if (en->type == ENCLOSURE_MEMORY) {
+ if (! NODE_IS_MARK1(node)) {
+ NODE_STATUS_ADD(node, NST_MARK1);
+ setup_call2_call(NODE_BODY(node));
+ NODE_STATUS_REMOVE(node, NST_MARK1);
+ }
+ }
+ else if (en->type == ENCLOSURE_IF_ELSE) {
+ setup_call2_call(NODE_BODY(node));
+ if (IS_NOT_NULL(en->te.Then))
+ setup_call2_call(en->te.Then);
+ if (IS_NOT_NULL(en->te.Else))
+ setup_call2_call(en->te.Else);
}
else {
- if (IS_REPEAT_INFINITE(qn->upper)) {
- var_num = CEC_INFINITE_NUM;
- child_state |= CEC_IN_INFINITE_REPEAT;
+ setup_call2_call(NODE_BODY(node));
+ }
+ }
+ break;
+
+ case NODE_CALL:
+ if (! NODE_IS_MARK1(node)) {
+ NODE_STATUS_ADD(node, NST_MARK1);
+ {
+ CallNode* cn = CALL_(node);
+ Node* called = NODE_CALL_BODY(cn);
+
+ cn->entry_count++;
+
+ NODE_STATUS_ADD(called, NST_CALLED);
+ ENCLOSURE_(called)->m.entry_count++;
+ setup_call2_call(called);
+ }
+ NODE_STATUS_REMOVE(node, NST_MARK1);
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+static int
+setup_call(Node* node, ScanEnv* env, int state)
+{
+ int r;
+
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
+ do {
+ r = setup_call(NODE_CAR(node), env, state);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
+ break;
+
+ case NODE_QUANT:
+ if (QUANT_(node)->upper == 0)
+ state |= IN_ZERO_REPEAT;
+
+ r = setup_call(NODE_BODY(node), env, state);
+ break;
+
+ case NODE_ANCHOR:
+ if (ANCHOR_HAS_BODY(ANCHOR_(node)))
+ r = setup_call(NODE_BODY(node), env, state);
+ else
+ r = 0;
+ break;
+
+ case NODE_ENCLOSURE:
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ if (en->type == ENCLOSURE_MEMORY) {
+ if ((state & IN_ZERO_REPEAT) != 0) {
+ NODE_STATUS_ADD(node, NST_IN_ZERO_REPEAT);
+ ENCLOSURE_(node)->m.entry_count--;
}
- else {
- var_num = qn->upper - qn->lower;
+ r = setup_call(NODE_BODY(node), env, state);
+ }
+ else if (en->type == ENCLOSURE_IF_ELSE) {
+ r = setup_call(NODE_BODY(node), env, state);
+ if (r != 0) return r;
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = setup_call(en->te.Then, env, state);
+ if (r != 0) return r;
}
+ if (IS_NOT_NULL(en->te.Else))
+ r = setup_call(en->te.Else, env, state);
+ }
+ else
+ r = setup_call(NODE_BODY(node), env, state);
+ }
+ break;
- if (var_num >= CEC_THRES_NUM_BIG_REPEAT)
- add_state |= CEC_CONT_BIG_REPEAT;
-
- if (((state & CEC_IN_INFINITE_REPEAT) != 0 && var_num != 0) ||
- ((state & CEC_CONT_BIG_REPEAT) != 0 &&
- var_num >= CEC_THRES_NUM_BIG_REPEAT)) {
- if (qn->comb_exp_check_num == 0) {
- env->num_comb_exp_check++;
- qn->comb_exp_check_num = env->num_comb_exp_check;
- if (env->curr_max_regnum > env->comb_exp_max_regnum)
- env->comb_exp_max_regnum = env->curr_max_regnum;
- }
+ case NODE_CALL:
+ if ((state & IN_ZERO_REPEAT) != 0) {
+ NODE_STATUS_ADD(node, NST_IN_ZERO_REPEAT);
+ CALL_(node)->entry_count--;
+ }
+
+ r = setup_call_node_call(CALL_(node), env, state);
+ break;
+
+ default:
+ r = 0;
+ break;
+ }
+
+ return r;
+}
+
+static int
+setup_call2(Node* node)
+{
+ int r = 0;
+
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
+ case NODE_ALT:
+ do {
+ r = setup_call2(NODE_CAR(node));
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
+ break;
+
+ case NODE_QUANT:
+ if (QUANT_(node)->upper != 0)
+ r = setup_call2(NODE_BODY(node));
+ break;
+
+ case NODE_ANCHOR:
+ if (ANCHOR_HAS_BODY(ANCHOR_(node)))
+ r = setup_call2(NODE_BODY(node));
+ break;
+
+ case NODE_ENCLOSURE:
+ if (! NODE_IS_IN_ZERO_REPEAT(node))
+ r = setup_call2(NODE_BODY(node));
+
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ if (r != 0) return r;
+ if (en->type == ENCLOSURE_IF_ELSE) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = setup_call2(en->te.Then);
+ if (r != 0) return r;
}
+ if (IS_NOT_NULL(en->te.Else))
+ r = setup_call2(en->te.Else);
}
+ }
+ break;
+
+ case NODE_CALL:
+ if (! NODE_IS_IN_ZERO_REPEAT(node)) {
+ setup_call2_call(node);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return r;
+}
- r = setup_comb_exp_check(target, child_state, env);
- r |= add_state;
+
+static void
+setup_called_state_call(Node* node, int state)
+{
+ switch (NODE_TYPE(node)) {
+ case NODE_ALT:
+ state |= IN_ALT;
+ /* fall */
+ case NODE_LIST:
+ do {
+ setup_called_state_call(NODE_CAR(node), state);
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
+ break;
+
+ case NODE_QUANT:
+ {
+ QuantNode* qn = QUANT_(node);
+
+ if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+ state |= IN_REAL_REPEAT;
+ if (qn->lower != qn->upper)
+ state |= IN_VAR_REPEAT;
+
+ setup_called_state_call(NODE_QUANT_BODY(qn), state);
}
break;
- case NT_ENCLOSE:
+ case NODE_ANCHOR:
{
- EncloseNode* en = NENCLOSE(node);
+ AnchorNode* an = ANCHOR_(node);
- switch (en->type) {
- case ENCLOSE_MEMORY:
- {
- if (env->curr_max_regnum < en->regnum)
- env->curr_max_regnum = en->regnum;
+ switch (an->type) {
+ case ANCHOR_PREC_READ_NOT:
+ case ANCHOR_LOOK_BEHIND_NOT:
+ state |= IN_NOT;
+ /* fall */
+ case ANCHOR_PREC_READ:
+ case ANCHOR_LOOK_BEHIND:
+ setup_called_state_call(NODE_ANCHOR_BODY(an), state);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
- r = setup_comb_exp_check(en->target, state, env);
+ case NODE_ENCLOSURE:
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ if (en->type == ENCLOSURE_MEMORY) {
+ if (NODE_IS_MARK1(node)) {
+ if ((~en->m.called_state & state) != 0) {
+ en->m.called_state |= state;
+ setup_called_state_call(NODE_BODY(node), state);
+ }
}
+ else {
+ NODE_STATUS_ADD(node, NST_MARK1);
+ en->m.called_state |= state;
+ setup_called_state_call(NODE_BODY(node), state);
+ NODE_STATUS_REMOVE(node, NST_MARK1);
+ }
+ }
+ else if (en->type == ENCLOSURE_IF_ELSE) {
+ if (IS_NOT_NULL(en->te.Then)) {
+ setup_called_state_call(en->te.Then, state);
+ }
+ if (IS_NOT_NULL(en->te.Else))
+ setup_called_state_call(en->te.Else, state);
+ }
+ else {
+ setup_called_state_call(NODE_BODY(node), state);
+ }
+ }
+ break;
+
+ case NODE_CALL:
+ setup_called_state_call(NODE_BODY(node), state);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
+setup_called_state(Node* node, int state)
+{
+ switch (NODE_TYPE(node)) {
+ case NODE_ALT:
+ state |= IN_ALT;
+ /* fall */
+ case NODE_LIST:
+ do {
+ setup_called_state(NODE_CAR(node), state);
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
+ break;
+
+#ifdef USE_CALL
+ case NODE_CALL:
+ setup_called_state_call(node, state);
+ break;
+#endif
+
+ case NODE_ENCLOSURE:
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+
+ switch (en->type) {
+ case ENCLOSURE_MEMORY:
+ if (en->m.entry_count > 1)
+ state |= IN_MULTI_ENTRY;
+
+ en->m.called_state |= state;
+ /* fall */
+ case ENCLOSURE_OPTION:
+ case ENCLOSURE_STOP_BACKTRACK:
+ setup_called_state(NODE_BODY(node), state);
+ break;
+ case ENCLOSURE_IF_ELSE:
+ setup_called_state(NODE_BODY(node), state);
+ if (IS_NOT_NULL(en->te.Then))
+ setup_called_state(en->te.Then, state);
+ if (IS_NOT_NULL(en->te.Else))
+ setup_called_state(en->te.Else, state);
break;
+ }
+ }
+ break;
+
+ case NODE_QUANT:
+ {
+ QuantNode* qn = QUANT_(node);
+
+ if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+ state |= IN_REAL_REPEAT;
+ if (qn->lower != qn->upper)
+ state |= IN_VAR_REPEAT;
+ setup_called_state(NODE_QUANT_BODY(qn), state);
+ }
+ break;
+
+ case NODE_ANCHOR:
+ {
+ AnchorNode* an = ANCHOR_(node);
+
+ switch (an->type) {
+ case ANCHOR_PREC_READ_NOT:
+ case ANCHOR_LOOK_BEHIND_NOT:
+ state |= IN_NOT;
+ /* fall */
+ case ANCHOR_PREC_READ:
+ case ANCHOR_LOOK_BEHIND:
+ setup_called_state(NODE_ANCHOR_BODY(an), state);
+ break;
default:
- r = setup_comb_exp_check(en->target, state, env);
break;
}
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- if (IS_CALL_RECURSION(NCALL(node)))
- env->has_recursion = 1;
- else
- r = setup_comb_exp_check(NCALL(node)->target, state, env);
+ case NODE_BACKREF:
+ case NODE_STRING:
+ case NODE_CTYPE:
+ case NODE_CCLASS:
+ case NODE_GIMMICK:
+ default:
break;
+ }
+}
+
+#endif /* USE_CALL */
+
+
+static int setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env);
+
+#ifdef __GNUC__
+__inline
#endif
+static int
+setup_anchor(Node* node, regex_t* reg, int state, ScanEnv* env)
+{
+/* allowed node types in look-behind */
+#define ALLOWED_TYPE_IN_LB \
+ ( BIT_NODE_LIST | BIT_NODE_ALT | BIT_NODE_STRING | BIT_NODE_CCLASS \
+ | BIT_NODE_CTYPE | BIT_NODE_ANCHOR | BIT_NODE_ENCLOSURE | BIT_NODE_QUANT \
+ | BIT_NODE_CALL )
+
+#define ALLOWED_ENCLOSURE_IN_LB ( 1<<ENCLOSURE_MEMORY | 1<<ENCLOSURE_OPTION )
+#define ALLOWED_ENCLOSURE_IN_LB_NOT (1<<ENCLOSURE_OPTION)
+
+#define ALLOWED_ANCHOR_IN_LB \
+ ( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF \
+ | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUNDARY | ANCHOR_NO_WORD_BOUNDARY \
+ | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END \
+ | ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \
+ | ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )
+
+#define ALLOWED_ANCHOR_IN_LB_NOT \
+ ( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE \
+ | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUNDARY \
+ | ANCHOR_NO_WORD_BOUNDARY | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END \
+ | ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \
+ | ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )
+
+ int r;
+ AnchorNode* an = ANCHOR_(node);
+
+ switch (an->type) {
+ case ANCHOR_PREC_READ:
+ r = setup_tree(NODE_ANCHOR_BODY(an), reg, state, env);
+ break;
+ case ANCHOR_PREC_READ_NOT:
+ r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state | IN_NOT), env);
+ break;
+
+ case ANCHOR_LOOK_BEHIND:
+ {
+ r = check_type_tree(NODE_ANCHOR_BODY(an), ALLOWED_TYPE_IN_LB,
+ ALLOWED_ENCLOSURE_IN_LB, ALLOWED_ANCHOR_IN_LB);
+ if (r < 0) return r;
+ if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
+ r = setup_tree(NODE_ANCHOR_BODY(an), reg, state, env);
+ if (r != 0) return r;
+ r = setup_look_behind(node, reg, env);
+ }
+ break;
+
+ case ANCHOR_LOOK_BEHIND_NOT:
+ {
+ r = check_type_tree(NODE_ANCHOR_BODY(an), ALLOWED_TYPE_IN_LB,
+ ALLOWED_ENCLOSURE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);
+ if (r < 0) return r;
+ if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
+ r = setup_tree(NODE_ANCHOR_BODY(an), reg, (state | IN_NOT), env);
+ if (r != 0) return r;
+ r = setup_look_behind(node, reg, env);
+ }
+ break;
default:
+ r = 0;
break;
}
return r;
}
+
+#ifdef __GNUC__
+__inline
+#endif
+static int
+setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
+{
+ int r;
+ OnigLen d;
+ QuantNode* qn = QUANT_(node);
+ Node* body = NODE_BODY(node);
+
+ if ((state & IN_REAL_REPEAT) != 0) {
+ NODE_STATUS_ADD(node, NST_IN_REAL_REPEAT);
+ }
+ if ((state & IN_MULTI_ENTRY) != 0) {
+ NODE_STATUS_ADD(node, NST_IN_MULTI_ENTRY);
+ }
+
+ if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {
+ d = tree_min_len(body, env);
+ if (d == 0) {
+#ifdef USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT
+ qn->body_empty_info = quantifiers_memory_node_info(body);
+ if (qn->body_empty_info == QUANT_BODY_IS_EMPTY_REC) {
+ if (NODE_TYPE(body) == NODE_ENCLOSURE &&
+ ENCLOSURE_(body)->type == ENCLOSURE_MEMORY) {
+ MEM_STATUS_ON(env->bt_mem_end, ENCLOSURE_(body)->m.regnum);
+ }
+ }
+#else
+ qn->body_empty_info = QUANT_BODY_IS_EMPTY;
#endif
+ }
+ }
-#define IN_ALT (1<<0)
-#define IN_NOT (1<<1)
-#define IN_REPEAT (1<<2)
-#define IN_VAR_REPEAT (1<<3)
-#define IN_CALL (1<<4)
-#define IN_RECCALL (1<<5)
+ if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+ state |= IN_REAL_REPEAT;
+ if (qn->lower != qn->upper)
+ state |= IN_VAR_REPEAT;
+
+ r = setup_tree(body, reg, state, env);
+ if (r != 0) return r;
+
+ /* expand string */
+#define EXPAND_STRING_MAX_LENGTH 100
+ if (NODE_TYPE(body) == NODE_STRING) {
+ if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&
+ qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {
+ int len = NODE_STRING_LEN(body);
+ StrNode* sn = STR_(body);
+
+ if (len * qn->lower <= EXPAND_STRING_MAX_LENGTH) {
+ int i, n = qn->lower;
+ onig_node_conv_to_str_node(node, STR_(body)->flag);
+ for (i = 0; i < n; i++) {
+ r = onig_node_str_cat(node, sn->s, sn->end);
+ if (r != 0) return r;
+ }
+ onig_node_free(body);
+ return r;
+ }
+ }
+ }
+
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+ if (qn->greedy && (qn->body_empty_info != QUANT_BODY_IS_NOT_EMPTY)) {
+ if (NODE_TYPE(body) == NODE_QUANT) {
+ QuantNode* tqn = QUANT_(body);
+ if (IS_NOT_NULL(tqn->head_exact)) {
+ qn->head_exact = tqn->head_exact;
+ tqn->head_exact = NULL;
+ }
+ }
+ else {
+ qn->head_exact = get_head_value_node(NODE_BODY(node), 1, reg);
+ }
+ }
+#endif
+
+ return r;
+}
/* setup_tree does the following work.
- 1. check empty loop. (set qn->target_empty_info)
+ 1. check empty loop. (set qn->body_empty_info)
2. expand ignore-case in char class.
3. set memory status bit flags. (reg->mem_stats)
4. set qn->head_exact for [push, exact] -> [push_or_jump_exact1, exact].
@@ -3701,249 +4420,122 @@ setup_comb_exp_check(Node* node, int state, ScanEnv* env)
static int
setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
{
- int type;
int r = 0;
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
{
Node* prev = NULL_NODE;
do {
- r = setup_tree(NCAR(node), reg, state, env);
+ r = setup_tree(NODE_CAR(node), reg, state, env);
if (IS_NOT_NULL(prev) && r == 0) {
- r = next_setup(prev, NCAR(node), reg);
+ r = next_setup(prev, NODE_CAR(node), reg);
}
- prev = NCAR(node);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ prev = NODE_CAR(node);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
}
break;
- case NT_ALT:
+ case NODE_ALT:
do {
- r = setup_tree(NCAR(node), reg, (state | IN_ALT), env);
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+ r = setup_tree(NODE_CAR(node), reg, (state | IN_ALT), env);
+ } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
break;
- case NT_CCLASS:
- break;
-
- case NT_STR:
- if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {
+ case NODE_STRING:
+ if (IS_IGNORECASE(reg->options) && !NODE_STRING_IS_RAW(node)) {
r = expand_case_fold_string(node, reg);
}
break;
- case NT_CTYPE:
- case NT_CANY:
- break;
-
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- break;
-#endif
-
- case NT_BREF:
+ case NODE_BACKREF:
{
int i;
int* p;
- Node** nodes = SCANENV_MEM_NODES(env);
- BRefNode* br = NBREF(node);
+ BackRefNode* br = BACKREF_(node);
p = BACKREFS_P(br);
for (i = 0; i < br->back_num; i++) {
if (p[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;
- BIT_STATUS_ON_AT(env->backrefed_mem, p[i]);
- BIT_STATUS_ON_AT(env->bt_mem_start, p[i]);
+ MEM_STATUS_ON(env->backrefed_mem, p[i]);
+ MEM_STATUS_ON(env->bt_mem_start, p[i]);
#ifdef USE_BACKREF_WITH_LEVEL
- if (IS_BACKREF_NEST_LEVEL(br)) {
- BIT_STATUS_ON_AT(env->bt_mem_end, p[i]);
+ if (NODE_IS_NEST_LEVEL(node)) {
+ MEM_STATUS_ON(env->bt_mem_end, p[i]);
}
#endif
- SET_ENCLOSE_STATUS(nodes[p[i]], NST_MEM_BACKREFED);
- }
- }
- break;
-
- case NT_QTFR:
- {
- OnigLen d;
- QtfrNode* qn = NQTFR(node);
- Node* target = qn->target;
-
- if ((state & IN_REPEAT) != 0) {
- qn->state |= NST_IN_REPEAT;
- }
-
- if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {
- r = get_min_len(target, &d, env);
- if (r) break;
- if (d == 0) {
- qn->target_empty_info = NQ_TARGET_IS_EMPTY;
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
- r = quantifiers_memory_node_info(target);
- if (r < 0) break;
- if (r > 0) {
- qn->target_empty_info = r;
- }
-#endif
-#if 0
- r = get_max_len(target, &d, env);
- if (r == 0 && d == 0) {
- /* ()* ==> ()?, ()+ ==> () */
- qn->upper = 1;
- if (qn->lower > 1) qn->lower = 1;
- if (NTYPE(target) == NT_STR) {
- qn->upper = qn->lower = 0; /* /(?:)+/ ==> // */
- }
- }
-#endif
- }
- }
-
- state |= IN_REPEAT;
- if (qn->lower != qn->upper)
- state |= IN_VAR_REPEAT;
- r = setup_tree(target, reg, state, env);
- if (r) break;
-
- /* expand string */
-#define EXPAND_STRING_MAX_LENGTH 100
- if (NTYPE(target) == NT_STR) {
- if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&
- qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {
- int len = NSTRING_LEN(target);
- StrNode* sn = NSTR(target);
-
- if (len * qn->lower <= EXPAND_STRING_MAX_LENGTH) {
- int i, n = qn->lower;
- onig_node_conv_to_str_node(node, NSTR(target)->flag);
- for (i = 0; i < n; i++) {
- r = onig_node_str_cat(node, sn->s, sn->end);
- if (r) break;
- }
- onig_node_free(target);
- break; /* break case NT_QTFR: */
- }
- }
}
-
-#ifdef USE_OP_PUSH_OR_JUMP_EXACT
- if (qn->greedy && (qn->target_empty_info != 0)) {
- if (NTYPE(target) == NT_QTFR) {
- QtfrNode* tqn = NQTFR(target);
- if (IS_NOT_NULL(tqn->head_exact)) {
- qn->head_exact = tqn->head_exact;
- tqn->head_exact = NULL;
- }
- }
- else {
- qn->head_exact = get_head_value_node(qn->target, 1, reg);
- }
- }
-#endif
}
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
+ EnclosureNode* en = ENCLOSURE_(node);
switch (en->type) {
- case ENCLOSE_OPTION:
+ case ENCLOSURE_OPTION:
{
OnigOptionType options = reg->options;
- reg->options = NENCLOSE(node)->option;
- r = setup_tree(NENCLOSE(node)->target, reg, state, env);
+ reg->options = ENCLOSURE_(node)->o.options;
+ r = setup_tree(NODE_BODY(node), reg, state, env);
reg->options = options;
}
break;
- case ENCLOSE_MEMORY:
- if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_CALL)) != 0) {
- BIT_STATUS_ON_AT(env->bt_mem_start, en->regnum);
- /* SET_ENCLOSE_STATUS(node, NST_MEM_IN_ALT_NOT); */
+ case ENCLOSURE_MEMORY:
+#ifdef USE_CALL
+ state |= en->m.called_state;
+#endif
+
+ if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_MULTI_ENTRY)) != 0
+ || NODE_IS_RECURSION(node)) {
+ MEM_STATUS_ON(env->bt_mem_start, en->m.regnum);
}
- if (IS_ENCLOSE_CALLED(en))
- state |= IN_CALL;
- if (IS_ENCLOSE_RECURSION(en))
- state |= IN_RECCALL;
- else if ((state & IN_RECCALL) != 0)
- SET_CALL_RECURSION(node);
- r = setup_tree(en->target, reg, state, env);
+ r = setup_tree(NODE_BODY(node), reg, state, env);
break;
- case ENCLOSE_STOP_BACKTRACK:
+ case ENCLOSURE_STOP_BACKTRACK:
{
- Node* target = en->target;
+ Node* target = NODE_BODY(node);
r = setup_tree(target, reg, state, env);
- if (NTYPE(target) == NT_QTFR) {
- QtfrNode* tqn = NQTFR(target);
+ if (NODE_TYPE(target) == NODE_QUANT) {
+ QuantNode* tqn = QUANT_(target);
if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&
tqn->greedy != 0) { /* (?>a*), a*+ etc... */
- int qtype = NTYPE(tqn->target);
- if (IS_NODE_TYPE_SIMPLE(qtype))
- SET_ENCLOSE_STATUS(node, NST_STOP_BT_SIMPLE_REPEAT);
+ if (NODE_IS_SIMPLE_TYPE(NODE_BODY(target)))
+ NODE_STATUS_ADD(node, NST_STOP_BT_SIMPLE_REPEAT);
}
}
}
break;
- }
- }
- break;
-
- case NT_ANCHOR:
- {
- AnchorNode* an = NANCHOR(node);
-
- switch (an->type) {
- case ANCHOR_PREC_READ:
- r = setup_tree(an->target, reg, state, env);
- break;
- case ANCHOR_PREC_READ_NOT:
- r = setup_tree(an->target, reg, (state | IN_NOT), env);
- break;
-
-/* allowed node types in look-behind */
-#define ALLOWED_TYPE_IN_LB \
- ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \
- BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )
-
-#define ALLOWED_ENCLOSE_IN_LB ( ENCLOSE_MEMORY | ENCLOSE_OPTION )
-#define ALLOWED_ENCLOSE_IN_LB_NOT ENCLOSE_OPTION
-
-#define ALLOWED_ANCHOR_IN_LB \
-( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
-
-#define ALLOWED_ANCHOR_IN_LB_NOT \
-( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION | ANCHOR_WORD_BOUND | ANCHOR_NOT_WORD_BOUND | ANCHOR_WORD_BEGIN | ANCHOR_WORD_END )
-
- case ANCHOR_LOOK_BEHIND:
- {
- r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,
- ALLOWED_ENCLOSE_IN_LB, ALLOWED_ANCHOR_IN_LB);
- if (r < 0) return r;
- if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- r = setup_tree(an->target, reg, state, env);
- if (r != 0) return r;
- r = setup_look_behind(node, reg, env);
- }
- break;
- case ANCHOR_LOOK_BEHIND_NOT:
- {
- r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,
- ALLOWED_ENCLOSE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);
- if (r < 0) return r;
- if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
- r = setup_tree(an->target, reg, (state | IN_NOT), env);
+ case ENCLOSURE_IF_ELSE:
+ r = setup_tree(NODE_BODY(node), reg, (state | IN_ALT), env);
+ if (r != 0) return r;
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = setup_tree(en->te.Then, reg, (state | IN_ALT), env);
if (r != 0) return r;
- r = setup_look_behind(node, reg, env);
}
+ if (IS_NOT_NULL(en->te.Else))
+ r = setup_tree(en->te.Else, reg, (state | IN_ALT), env);
break;
}
}
break;
+ case NODE_QUANT:
+ r = setup_quant(node, reg, state, env);
+ break;
+
+ case NODE_ANCHOR:
+ r = setup_anchor(node, reg, state, env);
+ break;
+
+#ifdef USE_CALL
+ case NODE_CALL:
+#endif
+ case NODE_CTYPE:
+ case NODE_CCLASS:
+ case NODE_GIMMICK:
default:
break;
}
@@ -3954,11 +4546,11 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
/* set skip map for Boyer-Moore search */
static int
set_bm_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
- UChar skip[], int** int_skip)
+ UChar skip[], int** int_skip)
{
int i, len;
- len = end - s;
+ len = (int )(end - s);
if (len < ONIG_CHAR_TABLE_SIZE) {
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = len;
@@ -3994,38 +4586,34 @@ typedef struct {
} OptEnv;
typedef struct {
- int left_anchor;
- int right_anchor;
-} OptAncInfo;
+ int left;
+ int right;
+} OptAnc;
typedef struct {
- MinMaxLen mmd; /* info position */
- OptAncInfo anc;
-
+ MinMaxLen mmd; /* info position */
+ OptAnc anc;
int reach_end;
int ignore_case;
int len;
UChar s[OPT_EXACT_MAXLEN];
-} OptExactInfo;
+} OptExact;
typedef struct {
- MinMaxLen mmd; /* info position */
- OptAncInfo anc;
-
+ MinMaxLen mmd; /* info position */
+ OptAnc anc;
int value; /* weighted value */
UChar map[ONIG_CHAR_TABLE_SIZE];
-} OptMapInfo;
+} OptMap;
typedef struct {
- MinMaxLen len;
-
- OptAncInfo anc;
- OptExactInfo exb; /* boundary */
- OptExactInfo exm; /* middle */
- OptExactInfo expr; /* prec read (?=...) */
-
- OptMapInfo map; /* boundary */
-} NodeOptInfo;
+ MinMaxLen len;
+ OptAnc anc;
+ OptExact exb; /* boundary */
+ OptExact exm; /* middle */
+ OptExact expr; /* prec read (?=...) */
+ OptMap map; /* boundary */
+} NodeOpt;
static int
@@ -4057,21 +4645,21 @@ distance_value(MinMaxLen* mm)
{
/* 1000 / (min-max-dist + 1) */
static const short int dist_vals[] = {
- 1000, 500, 333, 250, 200, 167, 143, 125, 111, 100,
- 91, 83, 77, 71, 67, 63, 59, 56, 53, 50,
- 48, 45, 43, 42, 40, 38, 37, 36, 34, 33,
- 32, 31, 30, 29, 29, 28, 27, 26, 26, 25,
- 24, 24, 23, 23, 22, 22, 21, 21, 20, 20,
- 20, 19, 19, 19, 18, 18, 18, 17, 17, 17,
- 16, 16, 16, 16, 15, 15, 15, 15, 14, 14,
- 14, 14, 14, 14, 13, 13, 13, 13, 13, 13,
- 12, 12, 12, 12, 12, 12, 11, 11, 11, 11,
+ 1000, 500, 333, 250, 200, 167, 143, 125, 111, 100,
+ 91, 83, 77, 71, 67, 63, 59, 56, 53, 50,
+ 48, 45, 43, 42, 40, 38, 37, 36, 34, 33,
+ 32, 31, 30, 29, 29, 28, 27, 26, 26, 25,
+ 24, 24, 23, 23, 22, 22, 21, 21, 20, 20,
+ 20, 19, 19, 19, 18, 18, 18, 17, 17, 17,
+ 16, 16, 16, 16, 15, 15, 15, 15, 14, 14,
+ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13,
+ 12, 12, 12, 12, 12, 12, 11, 11, 11, 11,
11, 11, 11, 11, 11, 10, 10, 10, 10, 10
};
OnigLen d;
- if (mm->max == ONIG_INFINITE_DISTANCE) return 0;
+ if (mm->max == INFINITE_LEN) return 0;
d = mm->max - mm->min;
if (d < (OnigLen )(sizeof(dist_vals)/sizeof(dist_vals[0])))
@@ -4104,7 +4692,6 @@ is_equal_mml(MinMaxLen* a, MinMaxLen* b)
return (a->min == b->min && a->max == b->max) ? 1 : 0;
}
-
static void
set_mml(MinMaxLen* mml, OnigLen min, OnigLen max)
{
@@ -4132,15 +4719,6 @@ add_mml(MinMaxLen* to, MinMaxLen* from)
to->max = distance_add(to->max, from->max);
}
-#if 0
-static void
-add_len_mml(MinMaxLen* to, OnigLen len)
-{
- to->min = distance_add(to->min, len);
- to->max = distance_add(to->max, len);
-}
-#endif
-
static void
alt_merge_mml(MinMaxLen* to, MinMaxLen* from)
{
@@ -4155,42 +4733,42 @@ copy_opt_env(OptEnv* to, OptEnv* from)
}
static void
-clear_opt_anc_info(OptAncInfo* anc)
+clear_opt_anc_info(OptAnc* anc)
{
- anc->left_anchor = 0;
- anc->right_anchor = 0;
+ anc->left = 0;
+ anc->right = 0;
}
static void
-copy_opt_anc_info(OptAncInfo* to, OptAncInfo* from)
+copy_opt_anc_info(OptAnc* to, OptAnc* from)
{
*to = *from;
}
static void
-concat_opt_anc_info(OptAncInfo* to, OptAncInfo* left, OptAncInfo* right,
- OnigLen left_len, OnigLen right_len)
+concat_opt_anc_info(OptAnc* to, OptAnc* left, OptAnc* right,
+ OnigLen left_len, OnigLen right_len)
{
clear_opt_anc_info(to);
- to->left_anchor = left->left_anchor;
+ to->left = left->left;
if (left_len == 0) {
- to->left_anchor |= right->left_anchor;
+ to->left |= right->left;
}
- to->right_anchor = right->right_anchor;
+ to->right = right->right;
if (right_len == 0) {
- to->right_anchor |= left->right_anchor;
+ to->right |= left->right;
}
else {
- to->right_anchor |= (left->right_anchor & ANCHOR_PREC_READ_NOT);
+ to->right |= (left->right & ANCHOR_PREC_READ_NOT);
}
}
static int
-is_left_anchor(int anc)
+is_left(int anc)
{
- if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF ||
+ if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF ||
anc == ANCHOR_END_LINE || anc == ANCHOR_PREC_READ ||
anc == ANCHOR_PREC_READ_NOT)
return 0;
@@ -4199,46 +4777,46 @@ is_left_anchor(int anc)
}
static int
-is_set_opt_anc_info(OptAncInfo* to, int anc)
+is_set_opt_anc_info(OptAnc* to, int anc)
{
- if ((to->left_anchor & anc) != 0) return 1;
+ if ((to->left & anc) != 0) return 1;
- return ((to->right_anchor & anc) != 0 ? 1 : 0);
+ return ((to->right & anc) != 0 ? 1 : 0);
}
static void
-add_opt_anc_info(OptAncInfo* to, int anc)
+add_opt_anc_info(OptAnc* to, int anc)
{
- if (is_left_anchor(anc))
- to->left_anchor |= anc;
+ if (is_left(anc))
+ to->left |= anc;
else
- to->right_anchor |= anc;
+ to->right |= anc;
}
static void
-remove_opt_anc_info(OptAncInfo* to, int anc)
+remove_opt_anc_info(OptAnc* to, int anc)
{
- if (is_left_anchor(anc))
- to->left_anchor &= ~anc;
+ if (is_left(anc))
+ to->left &= ~anc;
else
- to->right_anchor &= ~anc;
+ to->right &= ~anc;
}
static void
-alt_merge_opt_anc_info(OptAncInfo* to, OptAncInfo* add)
+alt_merge_opt_anc_info(OptAnc* to, OptAnc* add)
{
- to->left_anchor &= add->left_anchor;
- to->right_anchor &= add->right_anchor;
+ to->left &= add->left;
+ to->right &= add->right;
}
static int
-is_full_opt_exact_info(OptExactInfo* ex)
+is_full_opt_exact(OptExact* ex)
{
return (ex->len >= OPT_EXACT_MAXLEN ? 1 : 0);
}
static void
-clear_opt_exact_info(OptExactInfo* ex)
+clear_opt_exact(OptExact* ex)
{
clear_mml(&ex->mmd);
clear_opt_anc_info(&ex->anc);
@@ -4249,29 +4827,33 @@ clear_opt_exact_info(OptExactInfo* ex)
}
static void
-copy_opt_exact_info(OptExactInfo* to, OptExactInfo* from)
+copy_opt_exact(OptExact* to, OptExact* from)
{
*to = *from;
}
-static void
-concat_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OnigEncoding enc)
+static int
+concat_opt_exact(OptExact* to, OptExact* add, OnigEncoding enc)
{
- int i, j, len;
+ int i, j, len, r;
UChar *p, *end;
- OptAncInfo tanc;
+ OptAnc tanc;
if (! to->ignore_case && add->ignore_case) {
- if (to->len >= add->len) return ; /* avoid */
+ if (to->len >= add->len) return 0; /* avoid */
to->ignore_case = 1;
}
+ r = 0;
p = add->s;
end = p + add->len;
for (i = to->len; p < end; ) {
len = enclen(enc, p);
- if (i + len > OPT_EXACT_MAXLEN) break;
+ if (i + len > OPT_EXACT_MAXLEN) {
+ r = 1; /* 1:full */
+ break;
+ }
for (j = 0; j < len && p < end; j++)
to->s[i++] = *p++;
}
@@ -4280,13 +4862,15 @@ concat_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OnigEncoding enc)
to->reach_end = (p == end ? add->reach_end : 0);
concat_opt_anc_info(&tanc, &to->anc, &add->anc, 1, 1);
- if (! to->reach_end) tanc.right_anchor = 0;
+ if (! to->reach_end) tanc.right = 0;
copy_opt_anc_info(&to->anc, &tanc);
+
+ return r;
}
static void
-concat_opt_exact_info_str(OptExactInfo* to, UChar* s, UChar* end,
- int raw ARG_UNUSED, OnigEncoding enc)
+concat_opt_exact_str(OptExact* to, UChar* s, UChar* end,
+ int raw ARG_UNUSED, OnigEncoding enc)
{
int i, j, len;
UChar *p;
@@ -4302,17 +4886,17 @@ concat_opt_exact_info_str(OptExactInfo* to, UChar* s, UChar* end,
}
static void
-alt_merge_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OptEnv* env)
+alt_merge_opt_exact(OptExact* to, OptExact* add, OptEnv* env)
{
int i, j, len;
if (add->len == 0 || to->len == 0) {
- clear_opt_exact_info(to);
+ clear_opt_exact(to);
return ;
}
if (! is_equal_mml(&to->mmd, &add->mmd)) {
- clear_opt_exact_info(to);
+ clear_opt_exact(to);
return ;
}
@@ -4334,11 +4918,11 @@ alt_merge_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OptEnv* env)
to->ignore_case |= add->ignore_case;
alt_merge_opt_anc_info(&to->anc, &add->anc);
- if (! to->reach_end) to->anc.right_anchor = 0;
+ if (! to->reach_end) to->anc.right = 0;
}
static void
-select_opt_exact_info(OnigEncoding enc, OptExactInfo* now, OptExactInfo* alt)
+select_opt_exact(OnigEncoding enc, OptExact* now, OptExact* alt)
{
int v1, v2;
@@ -4349,7 +4933,7 @@ select_opt_exact_info(OnigEncoding enc, OptExactInfo* now, OptExactInfo* alt)
return ;
}
else if (v1 == 0) {
- copy_opt_exact_info(now, alt);
+ copy_opt_exact(now, alt);
return ;
}
else if (v1 <= 2 && v2 <= 2) {
@@ -4365,13 +4949,13 @@ select_opt_exact_info(OnigEncoding enc, OptExactInfo* now, OptExactInfo* alt)
if (alt->ignore_case == 0) v2 *= 2;
if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)
- copy_opt_exact_info(now, alt);
+ copy_opt_exact(now, alt);
}
static void
-clear_opt_map_info(OptMapInfo* map)
+clear_opt_map(OptMap* map)
{
- static const OptMapInfo clean_info = {
+ static const OptMap clean_info = {
{0, 0}, {0, 0}, 0,
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -4393,17 +4977,17 @@ clear_opt_map_info(OptMapInfo* map)
}
};
- xmemcpy(map, &clean_info, sizeof(OptMapInfo));
+ xmemcpy(map, &clean_info, sizeof(OptMap));
}
static void
-copy_opt_map_info(OptMapInfo* to, OptMapInfo* from)
+copy_opt_map(OptMap* to, OptMap* from)
{
*to = *from;
}
static void
-add_char_opt_map_info(OptMapInfo* map, UChar c, OnigEncoding enc)
+add_char_opt_map(OptMap* map, UChar c, OnigEncoding enc)
{
if (map->map[c] == 0) {
map->map[c] = 1;
@@ -4412,14 +4996,14 @@ add_char_opt_map_info(OptMapInfo* map, UChar c, OnigEncoding enc)
}
static int
-add_char_amb_opt_map_info(OptMapInfo* map, UChar* p, UChar* end,
- OnigEncoding enc, OnigCaseFoldType case_fold_flag)
+add_char_amb_opt_map(OptMap* map, UChar* p, UChar* end,
+ OnigEncoding enc, OnigCaseFoldType case_fold_flag)
{
OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];
UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
int i, n;
- add_char_opt_map_info(map, p[0], enc);
+ add_char_opt_map(map, p[0], enc);
case_fold_flag = DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag);
n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, case_fold_flag, p, end, items);
@@ -4427,14 +5011,14 @@ add_char_amb_opt_map_info(OptMapInfo* map, UChar* p, UChar* end,
for (i = 0; i < n; i++) {
ONIGENC_CODE_TO_MBC(enc, items[i].code[0], buf);
- add_char_opt_map_info(map, buf[0], enc);
+ add_char_opt_map(map, buf[0], enc);
}
return 0;
}
static void
-select_opt_map_info(OptMapInfo* now, OptMapInfo* alt)
+select_opt_map(OptMap* now, OptMap* alt)
{
static int z = 1<<15; /* 32768: something big value */
@@ -4442,18 +5026,18 @@ select_opt_map_info(OptMapInfo* now, OptMapInfo* alt)
if (alt->value == 0) return ;
if (now->value == 0) {
- copy_opt_map_info(now, alt);
+ copy_opt_map(now, alt);
return ;
}
v1 = z / now->value;
v2 = z / alt->value;
if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)
- copy_opt_map_info(now, alt);
+ copy_opt_map(now, alt);
}
static int
-comp_opt_exact_or_map_info(OptExactInfo* e, OptMapInfo* m)
+comp_opt_exact_or_map(OptExact* e, OptMap* m)
{
#define COMP_EM_BASE 20
int ve, vm;
@@ -4466,14 +5050,14 @@ comp_opt_exact_or_map_info(OptExactInfo* e, OptMapInfo* m)
}
static void
-alt_merge_opt_map_info(OnigEncoding enc, OptMapInfo* to, OptMapInfo* add)
+alt_merge_opt_map(OnigEncoding enc, OptMap* to, OptMap* add)
{
int i, val;
/* if (! is_equal_mml(&to->mmd, &add->mmd)) return ; */
if (to->value == 0) return ;
if (add->value == 0 || to->mmd.max < add->mmd.min) {
- clear_opt_map_info(to);
+ clear_opt_map(to);
return ;
}
@@ -4493,7 +5077,7 @@ alt_merge_opt_map_info(OnigEncoding enc, OptMapInfo* to, OptMapInfo* add)
}
static void
-set_bound_node_opt_info(NodeOptInfo* opt, MinMaxLen* mmd)
+set_bound_node_opt_info(NodeOpt* opt, MinMaxLen* mmd)
{
copy_mml(&(opt->exb.mmd), mmd);
copy_mml(&(opt->expr.mmd), mmd);
@@ -4501,40 +5085,39 @@ set_bound_node_opt_info(NodeOptInfo* opt, MinMaxLen* mmd)
}
static void
-clear_node_opt_info(NodeOptInfo* opt)
+clear_node_opt_info(NodeOpt* opt)
{
clear_mml(&opt->len);
clear_opt_anc_info(&opt->anc);
- clear_opt_exact_info(&opt->exb);
- clear_opt_exact_info(&opt->exm);
- clear_opt_exact_info(&opt->expr);
- clear_opt_map_info(&opt->map);
+ clear_opt_exact(&opt->exb);
+ clear_opt_exact(&opt->exm);
+ clear_opt_exact(&opt->expr);
+ clear_opt_map(&opt->map);
}
static void
-copy_node_opt_info(NodeOptInfo* to, NodeOptInfo* from)
+copy_node_opt_info(NodeOpt* to, NodeOpt* from)
{
*to = *from;
}
static void
-concat_left_node_opt_info(OnigEncoding enc, NodeOptInfo* to, NodeOptInfo* add)
+concat_left_node_opt_info(OnigEncoding enc, NodeOpt* to, NodeOpt* add)
{
int exb_reach, exm_reach;
- OptAncInfo tanc;
+ OptAnc tanc;
concat_opt_anc_info(&tanc, &to->anc, &add->anc, to->len.max, add->len.max);
copy_opt_anc_info(&to->anc, &tanc);
if (add->exb.len > 0 && to->len.max == 0) {
- concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc,
- to->len.max, add->len.max);
+ concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc, to->len.max, add->len.max);
copy_opt_anc_info(&add->exb.anc, &tanc);
}
if (add->map.value > 0 && to->len.max == 0) {
if (add->map.mmd.max == 0)
- add->map.anc.left_anchor |= to->anc.left_anchor;
+ add->map.anc.left |= to->anc.left;
}
exb_reach = to->exb.reach_end;
@@ -4545,16 +5128,16 @@ concat_left_node_opt_info(OnigEncoding enc, NodeOptInfo* to, NodeOptInfo* add)
if (add->exb.len > 0) {
if (exb_reach) {
- concat_opt_exact_info(&to->exb, &add->exb, enc);
- clear_opt_exact_info(&add->exb);
+ concat_opt_exact(&to->exb, &add->exb, enc);
+ clear_opt_exact(&add->exb);
}
else if (exm_reach) {
- concat_opt_exact_info(&to->exm, &add->exb, enc);
- clear_opt_exact_info(&add->exb);
+ concat_opt_exact(&to->exm, &add->exb, enc);
+ clear_opt_exact(&add->exb);
}
}
- select_opt_exact_info(enc, &to->exm, &add->exb);
- select_opt_exact_info(enc, &to->exm, &add->exm);
+ select_opt_exact(enc, &to->exm, &add->exb);
+ select_opt_exact(enc, &to->exm, &add->exm);
if (to->expr.len > 0) {
if (add->len.max > 0) {
@@ -4562,28 +5145,27 @@ concat_left_node_opt_info(OnigEncoding enc, NodeOptInfo* to, NodeOptInfo* add)
to->expr.len = add->len.max;
if (to->expr.mmd.max == 0)
- select_opt_exact_info(enc, &to->exb, &to->expr);
+ select_opt_exact(enc, &to->exb, &to->expr);
else
- select_opt_exact_info(enc, &to->exm, &to->expr);
+ select_opt_exact(enc, &to->exm, &to->expr);
}
}
else if (add->expr.len > 0) {
- copy_opt_exact_info(&to->expr, &add->expr);
+ copy_opt_exact(&to->expr, &add->expr);
}
- select_opt_map_info(&to->map, &add->map);
-
+ select_opt_map(&to->map, &add->map);
add_mml(&to->len, &add->len);
}
static void
-alt_merge_node_opt_info(NodeOptInfo* to, NodeOptInfo* add, OptEnv* env)
+alt_merge_node_opt_info(NodeOpt* to, NodeOpt* add, OptEnv* env)
{
- alt_merge_opt_anc_info (&to->anc, &add->anc);
- alt_merge_opt_exact_info(&to->exb, &add->exb, env);
- alt_merge_opt_exact_info(&to->exm, &add->exm, env);
- alt_merge_opt_exact_info(&to->expr, &add->expr, env);
- alt_merge_opt_map_info(env->enc, &to->map, &add->map);
+ alt_merge_opt_anc_info(&to->anc, &add->anc);
+ alt_merge_opt_exact(&to->exb, &add->exb, env);
+ alt_merge_opt_exact(&to->exm, &add->exm, env);
+ alt_merge_opt_exact(&to->expr, &add->expr, env);
+ alt_merge_opt_map(env->enc, &to->map, &add->map);
alt_merge_mml(&to->len, &add->len);
}
@@ -4592,77 +5174,77 @@ alt_merge_node_opt_info(NodeOptInfo* to, NodeOptInfo* add, OptEnv* env)
#define MAX_NODE_OPT_INFO_REF_COUNT 5
static int
-optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
+optimize_nodes(Node* node, NodeOpt* opt, OptEnv* env)
{
- int type;
+ OnigEncoding enc;
+ int i;
int r = 0;
+ enc = env->enc;
clear_node_opt_info(opt);
set_bound_node_opt_info(opt, &env->mmd);
- type = NTYPE(node);
- switch (type) {
- case NT_LIST:
+ switch (NODE_TYPE(node)) {
+ case NODE_LIST:
{
OptEnv nenv;
- NodeOptInfo nopt;
+ NodeOpt nopt;
Node* nd = node;
copy_opt_env(&nenv, env);
do {
- r = optimize_node_left(NCAR(nd), &nopt, &nenv);
+ r = optimize_nodes(NODE_CAR(nd), &nopt, &nenv);
if (r == 0) {
add_mml(&nenv.mmd, &nopt.len);
- concat_left_node_opt_info(env->enc, opt, &nopt);
+ concat_left_node_opt_info(enc, opt, &nopt);
}
- } while (r == 0 && IS_NOT_NULL(nd = NCDR(nd)));
+ } while (r == 0 && IS_NOT_NULL(nd = NODE_CDR(nd)));
}
break;
- case NT_ALT:
+ case NODE_ALT:
{
- NodeOptInfo nopt;
+ NodeOpt nopt;
Node* nd = node;
do {
- r = optimize_node_left(NCAR(nd), &nopt, env);
+ r = optimize_nodes(NODE_CAR(nd), &nopt, env);
if (r == 0) {
if (nd == node) copy_node_opt_info(opt, &nopt);
else alt_merge_node_opt_info(opt, &nopt, env);
}
- } while ((r == 0) && IS_NOT_NULL(nd = NCDR(nd)));
+ } while ((r == 0) && IS_NOT_NULL(nd = NODE_CDR(nd)));
}
break;
- case NT_STR:
+ case NODE_STRING:
{
- StrNode* sn = NSTR(node);
- int slen = sn->end - sn->s;
- int is_raw = NSTRING_IS_RAW(node);
+ StrNode* sn = STR_(node);
+ int slen = (int )(sn->end - sn->s);
+ int is_raw = NODE_STRING_IS_RAW(node);
- if (! NSTRING_IS_AMBIG(node)) {
- concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,
- NSTRING_IS_RAW(node), env->enc);
+ if (! NODE_STRING_IS_AMBIG(node)) {
+ concat_opt_exact_str(&opt->exb, sn->s, sn->end,
+ NODE_STRING_IS_RAW(node), enc);
if (slen > 0) {
- add_char_opt_map_info(&opt->map, *(sn->s), env->enc);
+ add_char_opt_map(&opt->map, *(sn->s), enc);
}
set_mml(&opt->len, slen, slen);
}
else {
int max;
- if (NSTRING_IS_DONT_GET_OPT_INFO(node)) {
- int n = onigenc_strlen(env->enc, sn->s, sn->end);
- max = ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;
+ if (NODE_STRING_IS_DONT_GET_OPT_INFO(node)) {
+ int n = onigenc_strlen(enc, sn->s, sn->end);
+ max = ONIGENC_MBC_MAXLEN_DIST(enc) * n;
}
else {
- concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,
- is_raw, env->enc);
+ concat_opt_exact_str(&opt->exb, sn->s, sn->end, is_raw, enc);
opt->exb.ignore_case = 1;
if (slen > 0) {
- r = add_char_amb_opt_map_info(&opt->map, sn->s, sn->end,
- env->enc, env->case_fold_flag);
+ r = add_char_amb_opt_map(&opt->map, sn->s, sn->end,
+ enc, env->case_fold_flag);
if (r != 0) break;
}
@@ -4677,24 +5259,24 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
}
break;
- case NT_CCLASS:
+ case NODE_CCLASS:
{
- int i, z;
- CClassNode* cc = NCCLASS(node);
+ int z;
+ CClassNode* cc = CCLASS_(node);
/* no need to check ignore case. (set in setup_tree()) */
if (IS_NOT_NULL(cc->mbuf) || IS_NCCLASS_NOT(cc)) {
- OnigLen min = ONIGENC_MBC_MINLEN(env->enc);
- OnigLen max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
+ OnigLen min = ONIGENC_MBC_MINLEN(enc);
+ OnigLen max = ONIGENC_MBC_MAXLEN_DIST(enc);
set_mml(&opt->len, min, max);
}
else {
for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
z = BITSET_AT(cc->bs, i);
- if ((z && !IS_NCCLASS_NOT(cc)) || (!z && IS_NCCLASS_NOT(cc))) {
- add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
+ if ((z && ! IS_NCCLASS_NOT(cc)) || (! z && IS_NCCLASS_NOT(cc))) {
+ add_char_opt_map(&opt->map, (UChar )i, enc);
}
}
set_mml(&opt->len, 1, 1);
@@ -4702,28 +5284,36 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
}
break;
- case NT_CTYPE:
+ case NODE_CTYPE:
{
- int i, min, max;
+ int min, max;
+ int range;
- max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
+ max = ONIGENC_MBC_MAXLEN_DIST(enc);
if (max == 1) {
min = 1;
- switch (NCTYPE(node)->ctype) {
+ switch (CTYPE_(node)->ctype) {
+ case CTYPE_ANYCHAR:
+ break;
+
case ONIGENC_CTYPE_WORD:
- if (NCTYPE(node)->not != 0) {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (! ONIGENC_IS_CODE_WORD(env->enc, i)) {
- add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
+ range = CTYPE_(node)->ascii_mode != 0 ? 128 : SINGLE_BYTE_SIZE;
+ if (CTYPE_(node)->not != 0) {
+ for (i = 0; i < range; i++) {
+ if (! ONIGENC_IS_CODE_WORD(enc, i)) {
+ add_char_opt_map(&opt->map, (UChar )i, enc);
}
}
+ for (i = range; i < SINGLE_BYTE_SIZE; i++) {
+ add_char_opt_map(&opt->map, (UChar )i, enc);
+ }
}
else {
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
- if (ONIGENC_IS_CODE_WORD(env->enc, i)) {
- add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
+ for (i = 0; i < range; i++) {
+ if (ONIGENC_IS_CODE_WORD(enc, i)) {
+ add_char_opt_map(&opt->map, (UChar )i, enc);
}
}
}
@@ -4731,22 +5321,14 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
}
}
else {
- min = ONIGENC_MBC_MINLEN(env->enc);
+ min = ONIGENC_MBC_MINLEN(enc);
}
set_mml(&opt->len, min, max);
}
break;
- case NT_CANY:
- {
- OnigLen min = ONIGENC_MBC_MINLEN(env->enc);
- OnigLen max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
- set_mml(&opt->len, min, max);
- }
- break;
-
- case NT_ANCHOR:
- switch (NANCHOR(node)->type) {
+ case NODE_ANCHOR:
+ switch (ANCHOR_(node)->type) {
case ANCHOR_BEGIN_BUF:
case ANCHOR_BEGIN_POSITION:
case ANCHOR_BEGIN_LINE:
@@ -4755,24 +5337,24 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
case ANCHOR_END_LINE:
case ANCHOR_PREC_READ_NOT:
case ANCHOR_LOOK_BEHIND:
- add_opt_anc_info(&opt->anc, NANCHOR(node)->type);
+ add_opt_anc_info(&opt->anc, ANCHOR_(node)->type);
break;
case ANCHOR_PREC_READ:
{
- NodeOptInfo nopt;
+ NodeOpt nopt;
- r = optimize_node_left(NANCHOR(node)->target, &nopt, env);
+ r = optimize_nodes(NODE_BODY(node), &nopt, env);
if (r == 0) {
if (nopt.exb.len > 0)
- copy_opt_exact_info(&opt->expr, &nopt.exb);
+ copy_opt_exact(&opt->expr, &nopt.exb);
else if (nopt.exm.len > 0)
- copy_opt_exact_info(&opt->expr, &nopt.exm);
+ copy_opt_exact(&opt->expr, &nopt.exm);
opt->expr.reach_end = 0;
if (nopt.map.value > 0)
- copy_opt_map_info(&opt->map, &nopt.map);
+ copy_opt_map(&opt->map, &nopt.map);
}
}
break;
@@ -4782,62 +5364,56 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
}
break;
- case NT_BREF:
- {
- int i;
+ case NODE_BACKREF:
+ if (! NODE_IS_CHECKER(node)) {
int* backs;
OnigLen min, max, tmin, tmax;
- Node** nodes = SCANENV_MEM_NODES(env->scan_env);
- BRefNode* br = NBREF(node);
+ MemEnv* mem_env = SCANENV_MEMENV(env->scan_env);
+ BackRefNode* br = BACKREF_(node);
- if (br->state & NST_RECURSION) {
- set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
+ if (NODE_IS_RECURSION(node)) {
+ set_mml(&opt->len, 0, INFINITE_LEN);
break;
}
backs = BACKREFS_P(br);
- r = get_min_len(nodes[backs[0]], &min, env->scan_env);
- if (r != 0) break;
- r = get_max_len(nodes[backs[0]], &max, env->scan_env);
- if (r != 0) break;
+ min = tree_min_len(mem_env[backs[0]].node, env->scan_env);
+ max = tree_max_len(mem_env[backs[0]].node, env->scan_env);
for (i = 1; i < br->back_num; i++) {
- r = get_min_len(nodes[backs[i]], &tmin, env->scan_env);
- if (r != 0) break;
- r = get_max_len(nodes[backs[i]], &tmax, env->scan_env);
- if (r != 0) break;
+ tmin = tree_min_len(mem_env[backs[i]].node, env->scan_env);
+ tmax = tree_max_len(mem_env[backs[i]].node, env->scan_env);
if (min > tmin) min = tmin;
if (max < tmax) max = tmax;
}
- if (r == 0) set_mml(&opt->len, min, max);
+ set_mml(&opt->len, min, max);
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
- if (IS_CALL_RECURSION(NCALL(node)))
- set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
+#ifdef USE_CALL
+ case NODE_CALL:
+ if (NODE_IS_RECURSION(node))
+ set_mml(&opt->len, 0, INFINITE_LEN);
else {
OnigOptionType save = env->options;
- env->options = NENCLOSE(NCALL(node)->target)->option;
- r = optimize_node_left(NCALL(node)->target, opt, env);
+ env->options = ENCLOSURE_(NODE_BODY(node))->o.options;
+ r = optimize_nodes(NODE_BODY(node), opt, env);
env->options = save;
}
break;
#endif
- case NT_QTFR:
+ case NODE_QUANT:
{
- int i;
OnigLen min, max;
- NodeOptInfo nopt;
- QtfrNode* qn = NQTFR(node);
+ NodeOpt nopt;
+ QuantNode* qn = QUANT_(node);
- r = optimize_node_left(qn->target, &nopt, env);
- if (r) break;
+ r = optimize_nodes(NODE_BODY(node), &nopt, env);
+ if (r != 0) break;
if (qn->lower == 0 && IS_REPEAT_INFINITE(qn->upper)) {
if (env->mmd.max == 0 &&
- NTYPE(qn->target) == NT_CANY && qn->greedy) {
- if (IS_MULTILINE(env->options))
+ NODE_IS_ANYCHAR(NODE_BODY(node)) && qn->greedy != 0) {
+ if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), env)))
add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_ML);
else
add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR);
@@ -4848,13 +5424,11 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
copy_node_opt_info(opt, &nopt);
if (nopt.exb.len > 0) {
if (nopt.exb.reach_end) {
- for (i = 2; i <= qn->lower &&
- ! is_full_opt_exact_info(&opt->exb); i++) {
- concat_opt_exact_info(&opt->exb, &nopt.exb, env->enc);
- }
- if (i < qn->lower) {
- opt->exb.reach_end = 0;
+ for (i = 2; i <= qn->lower && ! is_full_opt_exact(&opt->exb); i++) {
+ int rc = concat_opt_exact(&opt->exb, &nopt.exb, enc);
+ if (rc > 0) break;
}
+ if (i < qn->lower) opt->exb.reach_end = 0;
}
}
@@ -4869,7 +5443,7 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
min = distance_multiply(nopt.len.min, qn->lower);
if (IS_REPEAT_INFINITE(qn->upper))
- max = (nopt.len.max > 0 ? ONIG_INFINITE_DISTANCE : 0);
+ max = (nopt.len.max > 0 ? INFINITE_LEN : 0);
else
max = distance_multiply(nopt.len.max, qn->upper);
@@ -4877,56 +5451,83 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
}
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
{
- EncloseNode* en = NENCLOSE(node);
+ EnclosureNode* en = ENCLOSURE_(node);
switch (en->type) {
- case ENCLOSE_OPTION:
+ case ENCLOSURE_OPTION:
{
OnigOptionType save = env->options;
- env->options = en->option;
- r = optimize_node_left(en->target, opt, env);
+ env->options = en->o.options;
+ r = optimize_nodes(NODE_BODY(node), opt, env);
env->options = save;
}
break;
- case ENCLOSE_MEMORY:
-#ifdef USE_SUBEXP_CALL
+ case ENCLOSURE_MEMORY:
+#ifdef USE_CALL
en->opt_count++;
if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) {
OnigLen min, max;
min = 0;
- max = ONIG_INFINITE_DISTANCE;
- if (IS_ENCLOSE_MIN_FIXED(en)) min = en->min_len;
- if (IS_ENCLOSE_MAX_FIXED(en)) max = en->max_len;
+ max = INFINITE_LEN;
+ if (NODE_IS_MIN_FIXED(node)) min = en->min_len;
+ if (NODE_IS_MAX_FIXED(node)) max = en->max_len;
set_mml(&opt->len, min, max);
}
else
#endif
{
- r = optimize_node_left(en->target, opt, env);
-
+ r = optimize_nodes(NODE_BODY(node), opt, env);
if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK)) {
- if (BIT_STATUS_AT(env->scan_env->backrefed_mem, en->regnum))
+ if (MEM_STATUS_AT0(env->scan_env->backrefed_mem, en->m.regnum))
remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK);
}
}
break;
- case ENCLOSE_STOP_BACKTRACK:
- r = optimize_node_left(en->target, opt, env);
+ case ENCLOSURE_STOP_BACKTRACK:
+ r = optimize_nodes(NODE_BODY(node), opt, env);
+ break;
+
+ case ENCLOSURE_IF_ELSE:
+ {
+ OptEnv nenv;
+ NodeOpt nopt;
+
+ copy_opt_env(&nenv, env);
+ r = optimize_nodes(NODE_ENCLOSURE_BODY(en), &nopt, &nenv);
+ if (r == 0) {
+ add_mml(&nenv.mmd, &nopt.len);
+ concat_left_node_opt_info(enc, opt, &nopt);
+ if (IS_NOT_NULL(en->te.Then)) {
+ r = optimize_nodes(en->te.Then, &nopt, &nenv);
+ if (r == 0) {
+ concat_left_node_opt_info(enc, opt, &nopt);
+ }
+ }
+
+ if (IS_NOT_NULL(en->te.Else)) {
+ r = optimize_nodes(en->te.Else, &nopt, env);
+ if (r == 0)
+ alt_merge_node_opt_info(opt, &nopt, env);
+ }
+ }
+ }
break;
}
}
break;
+ case NODE_GIMMICK:
+ break;
+
default:
#ifdef ONIG_DEBUG
- fprintf(stderr, "optimize_node_left: undefined node type %d\n",
- NTYPE(node));
+ fprintf(stderr, "optimize_nodes: undefined node type %d\n", NODE_TYPE(node));
#endif
r = ONIGERR_TYPE_BUG;
break;
@@ -4936,7 +5537,7 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
}
static int
-set_optimize_exact_info(regex_t* reg, OptExactInfo* e)
+set_optimize_exact(regex_t* reg, OptExact* e)
{
int r;
@@ -4947,7 +5548,7 @@ set_optimize_exact_info(regex_t* reg, OptExactInfo* e)
CHECK_NULL_RETURN_MEMERR(reg->exact);
xmemcpy(reg->exact, e->s, e->len);
reg->exact_end = reg->exact + e->len;
- reg->optimize = ONIG_OPTIMIZE_EXACT_IC;
+ reg->optimize = OPTIMIZE_EXACT_IC;
}
else {
int allow_reverse;
@@ -4955,86 +5556,85 @@ set_optimize_exact_info(regex_t* reg, OptExactInfo* e)
reg->exact = str_dup(e->s, e->s + e->len);
CHECK_NULL_RETURN_MEMERR(reg->exact);
reg->exact_end = reg->exact + e->len;
-
+
allow_reverse =
ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end);
if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
r = set_bm_skip(reg->exact, reg->exact_end, reg->enc,
- reg->map, &(reg->int_map));
- if (r) return r;
+ reg->map, &(reg->int_map));
+ if (r != 0) return r;
reg->optimize = (allow_reverse != 0
- ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);
+ ? OPTIMIZE_EXACT_BM : OPTIMIZE_EXACT_BM_NO_REV);
}
else {
- reg->optimize = ONIG_OPTIMIZE_EXACT;
+ reg->optimize = OPTIMIZE_EXACT;
}
}
reg->dmin = e->mmd.min;
reg->dmax = e->mmd.max;
- if (reg->dmin != ONIG_INFINITE_DISTANCE) {
- reg->threshold_len = reg->dmin + (reg->exact_end - reg->exact);
+ if (reg->dmin != INFINITE_LEN) {
+ reg->threshold_len = reg->dmin + (int )(reg->exact_end - reg->exact);
}
return 0;
}
static void
-set_optimize_map_info(regex_t* reg, OptMapInfo* m)
+set_optimize_map(regex_t* reg, OptMap* m)
{
int i;
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
reg->map[i] = m->map[i];
- reg->optimize = ONIG_OPTIMIZE_MAP;
+ reg->optimize = OPTIMIZE_MAP;
reg->dmin = m->mmd.min;
reg->dmax = m->mmd.max;
- if (reg->dmin != ONIG_INFINITE_DISTANCE) {
+ if (reg->dmin != INFINITE_LEN) {
reg->threshold_len = reg->dmin + 1;
}
}
static void
-set_sub_anchor(regex_t* reg, OptAncInfo* anc)
+set_sub_anchor(regex_t* reg, OptAnc* anc)
{
- reg->sub_anchor |= anc->left_anchor & ANCHOR_BEGIN_LINE;
- reg->sub_anchor |= anc->right_anchor & ANCHOR_END_LINE;
+ reg->sub_anchor |= anc->left & ANCHOR_BEGIN_LINE;
+ reg->sub_anchor |= anc->right & ANCHOR_END_LINE;
}
-#ifdef ONIG_DEBUG
+#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
static void print_optimize_info(FILE* f, regex_t* reg);
#endif
static int
set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
{
-
int r;
- NodeOptInfo opt;
+ NodeOpt opt;
OptEnv env;
env.enc = reg->enc;
env.options = reg->options;
env.case_fold_flag = reg->case_fold_flag;
- env.scan_env = scan_env;
+ env.scan_env = scan_env;
clear_mml(&env.mmd);
- r = optimize_node_left(node, &opt, &env);
- if (r) return r;
+ r = optimize_nodes(node, &opt, &env);
+ if (r != 0) return r;
- reg->anchor = opt.anc.left_anchor & (ANCHOR_BEGIN_BUF |
+ reg->anchor = opt.anc.left & (ANCHOR_BEGIN_BUF |
ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML |
ANCHOR_LOOK_BEHIND);
- if ((opt.anc.left_anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)
+ if ((opt.anc.left & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)
reg->anchor &= ~ANCHOR_ANYCHAR_STAR_ML;
- reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |
+ reg->anchor |= opt.anc.right & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |
ANCHOR_PREC_READ_NOT);
if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {
@@ -5043,25 +5643,24 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
}
if (opt.exb.len > 0 || opt.exm.len > 0) {
- select_opt_exact_info(reg->enc, &opt.exb, &opt.exm);
- if (opt.map.value > 0 &&
- comp_opt_exact_or_map_info(&opt.exb, &opt.map) > 0) {
+ select_opt_exact(reg->enc, &opt.exb, &opt.exm);
+ if (opt.map.value > 0 && comp_opt_exact_or_map(&opt.exb, &opt.map) > 0) {
goto set_map;
}
else {
- r = set_optimize_exact_info(reg, &opt.exb);
+ r = set_optimize_exact(reg, &opt.exb);
set_sub_anchor(reg, &opt.exb.anc);
}
}
else if (opt.map.value > 0) {
set_map:
- set_optimize_map_info(reg, &opt.map);
+ set_optimize_map(reg, &opt.map);
set_sub_anchor(reg, &opt.map.anc);
}
else {
- reg->sub_anchor |= opt.anc.left_anchor & ANCHOR_BEGIN_LINE;
+ reg->sub_anchor |= opt.anc.left & ANCHOR_BEGIN_LINE;
if (opt.len.max == 0)
- reg->sub_anchor |= opt.anc.right_anchor & ANCHOR_END_LINE;
+ reg->sub_anchor |= opt.anc.right & ANCHOR_END_LINE;
}
#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
@@ -5073,7 +5672,7 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
static void
clear_optimize_info(regex_t* reg)
{
- reg->optimize = ONIG_OPTIMIZE_NONE;
+ reg->optimize = OPTIMIZE_NONE;
reg->anchor = 0;
reg->anchor_dmin = 0;
reg->anchor_dmax = 0;
@@ -5089,7 +5688,7 @@ clear_optimize_info(regex_t* reg)
#ifdef ONIG_DEBUG
static void print_enc_string(FILE* fp, OnigEncoding enc,
- const UChar *s, const UChar *end)
+ const UChar *s, const UChar *end)
{
fprintf(fp, "\nPATTERN: /");
@@ -5120,17 +5719,21 @@ static void print_enc_string(FILE* fp, OnigEncoding enc,
fprintf(fp, "/\n");
}
+#endif /* ONIG_DEBUG */
+
+#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)
+
static void
print_distance_range(FILE* f, OnigLen a, OnigLen b)
{
- if (a == ONIG_INFINITE_DISTANCE)
+ if (a == INFINITE_LEN)
fputs("inf", f);
else
fprintf(f, "(%u)", a);
fputs("-", f);
- if (b == ONIG_INFINITE_DISTANCE)
+ if (b == INFINITE_LEN)
fputs("inf", f);
else
fprintf(f, "(%u)", b);
@@ -5211,7 +5814,7 @@ print_optimize_info(FILE* f, regex_t* reg)
}
fprintf(f, "]: length: %ld\n", (reg->exact_end - reg->exact));
}
- else if (reg->optimize & ONIG_OPTIMIZE_MAP) {
+ else if (reg->optimize & OPTIMIZE_MAP) {
int c, i, n = 0;
for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)
@@ -5236,7 +5839,7 @@ print_optimize_info(FILE* f, regex_t* reg)
}
}
}
-#endif /* ONIG_DEBUG */
+#endif
extern void
@@ -5248,11 +5851,9 @@ onig_free_body(regex_t* reg)
if (IS_NOT_NULL(reg->int_map)) xfree(reg->int_map);
if (IS_NOT_NULL(reg->int_map_backward)) xfree(reg->int_map_backward);
if (IS_NOT_NULL(reg->repeat_range)) xfree(reg->repeat_range);
- if (IS_NOT_NULL(reg->chain)) onig_free(reg->chain);
+ if (IS_NOT_NULL(REG_EXTP(reg))) xfree(REG_EXTP(reg));
-#ifdef USE_NAMED_GROUP
onig_names_free(reg);
-#endif
}
}
@@ -5278,23 +5879,20 @@ onig_transfer(regex_t* to, regex_t* from)
}
-#ifdef ONIG_DEBUG
-static void print_compiled_byte_code_list P_((FILE* f, regex_t* reg));
-#endif
-#ifdef ONIG_DEBUG_PARSE_TREE
+#ifdef ONIG_DEBUG_PARSE
static void print_tree P_((FILE* f, Node* node));
#endif
extern int
onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
- OnigErrorInfo* einfo)
+ OnigErrorInfo* einfo)
{
#define COMPILE_INIT_SIZE 20
int r, init_size;
Node* root;
ScanEnv scan_env;
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
UnsetAddrList uslist;
#endif
@@ -5306,9 +5904,9 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
#endif
if (reg->alloc == 0) {
- init_size = (pattern_end - pattern) * 2;
+ init_size = (int )(pattern_end - pattern) * 2;
if (init_size <= 0) init_size = COMPILE_INIT_SIZE;
- r = BBUF_INIT(reg, init_size);
+ r = BB_INIT(reg, init_size);
if (r != 0) goto end;
}
else
@@ -5319,18 +5917,14 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
reg->num_null_check = 0;
reg->repeat_range_alloc = 0;
reg->repeat_range = (OnigRepeatRange* )NULL;
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- reg->num_comb_exp_check = 0;
-#endif
- r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env);
+ r = onig_parse_tree(&root, pattern, pattern_end, reg, &scan_env);
if (r != 0) goto err;
-#ifdef USE_NAMED_GROUP
/* mixed use named group and no-named group */
if (scan_env.num_named > 0 &&
IS_SYNTAX_BV(scan_env.syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
- !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {
+ ! ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {
if (scan_env.num_named != scan_env.num_mem)
r = disable_noname_group_capture(&root, reg, &scan_env);
else
@@ -5338,30 +5932,34 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
if (r != 0) goto err;
}
-#endif
-#ifdef USE_SUBEXP_CALL
+ r = check_backrefs(root, &scan_env);
+ if (r != 0) goto err;
+
+#ifdef USE_CALL
if (scan_env.num_call > 0) {
r = unset_addr_list_init(&uslist, scan_env.num_call);
if (r != 0) goto err;
scan_env.unset_addr_list = &uslist;
- r = setup_subexp_call(root, &scan_env);
+ r = setup_call(root, &scan_env, 0);
+ if (r != 0) goto err_unset;
+ r = setup_call2(root);
if (r != 0) goto err_unset;
- r = subexp_recursive_check_trav(root, &scan_env);
+ r = recursive_call_check_trav(root, &scan_env, 0);
if (r < 0) goto err_unset;
- r = subexp_inf_recursive_check_trav(root, &scan_env);
+ r = infinite_recursive_call_check_trav(root, &scan_env);
if (r != 0) goto err_unset;
- reg->num_call = scan_env.num_call;
+ setup_called_state(root, 0);
}
- else
- reg->num_call = 0;
+
+ reg->num_call = scan_env.num_call;
#endif
r = setup_tree(root, reg, 0, &scan_env);
if (r != 0) goto err_unset;
-#ifdef ONIG_DEBUG_PARSE_TREE
+#ifdef ONIG_DEBUG_PARSE
print_tree(stderr, root);
#endif
@@ -5369,38 +5967,12 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
reg->bt_mem_start = scan_env.bt_mem_start;
reg->bt_mem_start |= reg->capture_history;
if (IS_FIND_CONDITION(reg->options))
- BIT_STATUS_ON_ALL(reg->bt_mem_end);
+ MEM_STATUS_ON_ALL(reg->bt_mem_end);
else {
reg->bt_mem_end = scan_env.bt_mem_end;
reg->bt_mem_end |= reg->capture_history;
}
-
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- if (scan_env.backrefed_mem == 0
-#ifdef USE_SUBEXP_CALL
- || scan_env.num_call == 0
-#endif
- ) {
- setup_comb_exp_check(root, 0, &scan_env);
-#ifdef USE_SUBEXP_CALL
- if (scan_env.has_recursion != 0) {
- scan_env.num_comb_exp_check = 0;
- }
- else
-#endif
- if (scan_env.comb_exp_max_regnum > 0) {
- int i;
- for (i = 1; i <= scan_env.comb_exp_max_regnum; i++) {
- if (BIT_STATUS_AT(scan_env.backrefed_mem, i) != 0) {
- scan_env.num_comb_exp_check = 0;
- break;
- }
- }
- }
- }
-
- reg->num_comb_exp_check = scan_env.num_comb_exp_check;
-#endif
+ reg->bt_mem_start |= reg->bt_mem_end;
clear_optimize_info(reg);
#ifndef ONIG_DONT_OPTIMIZE
@@ -5408,19 +5980,28 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
if (r != 0) goto err_unset;
#endif
- if (IS_NOT_NULL(scan_env.mem_nodes_dynamic)) {
- xfree(scan_env.mem_nodes_dynamic);
- scan_env.mem_nodes_dynamic = (Node** )NULL;
+ if (IS_NOT_NULL(scan_env.mem_env_dynamic)) {
+ xfree(scan_env.mem_env_dynamic);
+ scan_env.mem_env_dynamic = (MemEnv* )NULL;
}
- r = compile_tree(root, reg);
+ r = compile_tree(root, reg, &scan_env);
if (r == 0) {
+ if (scan_env.keep_num > 0) {
+ r = add_opcode(reg, OP_UPDATE_VAR);
+ if (r != 0) goto err;
+ r = add_update_var_type(reg, UPDATE_VAR_KEEP_FROM_STACK_LAST);
+ if (r != 0) goto err;
+ r = add_mem_num(reg, 0 /* not used */);
+ if (r != 0) goto err;
+ }
+
r = add_opcode(reg, OP_END);
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
if (scan_env.num_call > 0) {
r = unset_addr_list_fix(&uslist, reg);
unset_addr_list_end(&uslist);
- if (r) goto err;
+ if (r != 0) goto err;
}
#endif
@@ -5433,7 +6014,7 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
reg->stack_pop_level = STACK_POP_LEVEL_FREE;
}
}
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
else if (scan_env.num_call > 0) {
unset_addr_list_end(&uslist);
}
@@ -5441,17 +6022,15 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
onig_node_free(root);
#ifdef ONIG_DEBUG_COMPILE
-#ifdef USE_NAMED_GROUP
onig_print_names(stderr, reg);
-#endif
- print_compiled_byte_code_list(stderr, reg);
+ onig_print_compiled_byte_code_list(stderr, reg);
#endif
end:
return r;
err_unset:
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
if (scan_env.num_call > 0) {
unset_addr_list_end(&uslist);
}
@@ -5466,8 +6045,8 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
}
onig_node_free(root);
- if (IS_NOT_NULL(scan_env.mem_nodes_dynamic))
- xfree(scan_env.mem_nodes_dynamic);
+ if (IS_NOT_NULL(scan_env.mem_env_dynamic))
+ xfree(scan_env.mem_env_dynamic);
return r;
}
@@ -5475,9 +6054,8 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
static int onig_inited = 0;
extern int
-onig_reg_init(regex_t* reg, OnigOptionType option,
- OnigCaseFoldType case_fold_flag,
- OnigEncoding enc, OnigSyntaxType* syntax)
+onig_reg_init(regex_t* reg, OnigOptionType option, OnigCaseFoldType case_fold_flag,
+ OnigEncoding enc, OnigSyntaxType* syntax)
{
int r;
@@ -5524,7 +6102,7 @@ onig_reg_init(regex_t* reg, OnigOptionType option,
(reg)->exact = (UChar* )NULL;
(reg)->int_map = (int* )NULL;
(reg)->int_map_backward = (int* )NULL;
- (reg)->chain = (regex_t* )NULL;
+ REG_EXTPL(reg) = NULL;
(reg)->p = (UChar* )NULL;
(reg)->alloc = 0;
@@ -5536,14 +6114,15 @@ onig_reg_init(regex_t* reg, OnigOptionType option,
}
extern int
-onig_new_without_alloc(regex_t* reg, const UChar* pattern,
- const UChar* pattern_end, OnigOptionType option, OnigEncoding enc,
- OnigSyntaxType* syntax, OnigErrorInfo* einfo)
+onig_new_without_alloc(regex_t* reg,
+ const UChar* pattern, const UChar* pattern_end,
+ OnigOptionType option, OnigEncoding enc,
+ OnigSyntaxType* syntax, OnigErrorInfo* einfo)
{
int r;
r = onig_reg_init(reg, option, ONIGENC_CASE_FOLD_DEFAULT, enc, syntax);
- if (r) return r;
+ if (r != 0) return r;
r = onig_compile(reg, pattern, pattern_end, einfo);
return r;
@@ -5551,8 +6130,8 @@ onig_new_without_alloc(regex_t* reg, const UChar* pattern,
extern int
onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
- OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
- OnigErrorInfo* einfo)
+ OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
+ OnigErrorInfo* einfo)
{
int r;
@@ -5560,10 +6139,10 @@ onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
if (IS_NULL(*reg)) return ONIGERR_MEMORY;
r = onig_reg_init(*reg, option, ONIGENC_CASE_FOLD_DEFAULT, enc, syntax);
- if (r) goto err;
+ if (r != 0) goto err;
r = onig_compile(*reg, pattern, pattern_end, einfo);
- if (r) {
+ if (r != 0) {
err:
onig_free(*reg);
*reg = NULL;
@@ -5594,13 +6173,18 @@ onig_initialize(OnigEncoding encodings[], int n)
return 0;
}
-static OnigEndCallListItemType* EndCallTop;
+typedef struct EndCallListItem {
+ struct EndCallListItem* next;
+ void (*func)(void);
+} EndCallListItemType;
+
+static EndCallListItemType* EndCallTop;
extern void onig_add_end_call(void (*func)(void))
{
- OnigEndCallListItemType* item;
+ EndCallListItemType* item;
- item = (OnigEndCallListItemType* )xmalloc(sizeof(*item));
+ item = (EndCallListItemType* )xmalloc(sizeof(*item));
if (item == 0) return ;
item->next = EndCallTop;
@@ -5612,7 +6196,7 @@ extern void onig_add_end_call(void (*func)(void))
static void
exec_end_call_list(void)
{
- OnigEndCallListItemType* prev;
+ EndCallListItemType* prev;
void (*func)(void);
while (EndCallTop != 0) {
@@ -5657,9 +6241,10 @@ onig_is_in_code_range(const UChar* p, OnigCodePoint code)
}
extern int
-onig_is_code_in_cc_len(int elen, OnigCodePoint code, CClassNode* cc)
+onig_is_code_in_cc_len(int elen, OnigCodePoint code, /* CClassNode* */ void* cc_arg)
{
int found;
+ CClassNode* cc = (CClassNode* )cc_arg;
if (elen > 1 || (code >= SINGLE_BYTE_SIZE)) {
if (IS_NULL(cc->mbuf)) {
@@ -5694,141 +6279,7 @@ onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc)
}
-#ifdef ONIG_DEBUG
-
-/* arguments type */
-#define ARG_SPECIAL -1
-#define ARG_NON 0
-#define ARG_RELADDR 1
-#define ARG_ABSADDR 2
-#define ARG_LENGTH 3
-#define ARG_MEMNUM 4
-#define ARG_OPTION 5
-#define ARG_STATE_CHECK 6
-
-OnigOpInfoType OnigOpInfo[] = {
- { OP_FINISH, "finish", ARG_NON },
- { OP_END, "end", ARG_NON },
- { OP_EXACT1, "exact1", ARG_SPECIAL },
- { OP_EXACT2, "exact2", ARG_SPECIAL },
- { OP_EXACT3, "exact3", ARG_SPECIAL },
- { OP_EXACT4, "exact4", ARG_SPECIAL },
- { OP_EXACT5, "exact5", ARG_SPECIAL },
- { OP_EXACTN, "exactn", ARG_SPECIAL },
- { OP_EXACTMB2N1, "exactmb2-n1", ARG_SPECIAL },
- { OP_EXACTMB2N2, "exactmb2-n2", ARG_SPECIAL },
- { OP_EXACTMB2N3, "exactmb2-n3", ARG_SPECIAL },
- { OP_EXACTMB2N, "exactmb2-n", ARG_SPECIAL },
- { OP_EXACTMB3N, "exactmb3n" , ARG_SPECIAL },
- { OP_EXACTMBN, "exactmbn", ARG_SPECIAL },
- { OP_EXACT1_IC, "exact1-ic", ARG_SPECIAL },
- { OP_EXACTN_IC, "exactn-ic", ARG_SPECIAL },
- { OP_CCLASS, "cclass", ARG_SPECIAL },
- { OP_CCLASS_MB, "cclass-mb", ARG_SPECIAL },
- { OP_CCLASS_MIX, "cclass-mix", ARG_SPECIAL },
- { OP_CCLASS_NOT, "cclass-not", ARG_SPECIAL },
- { OP_CCLASS_MB_NOT, "cclass-mb-not", ARG_SPECIAL },
- { OP_CCLASS_MIX_NOT, "cclass-mix-not", ARG_SPECIAL },
- { OP_CCLASS_NODE, "cclass-node", ARG_SPECIAL },
- { OP_ANYCHAR, "anychar", ARG_NON },
- { OP_ANYCHAR_ML, "anychar-ml", ARG_NON },
- { OP_ANYCHAR_STAR, "anychar*", ARG_NON },
- { OP_ANYCHAR_ML_STAR, "anychar-ml*", ARG_NON },
- { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },
- { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },
- { OP_WORD, "word", ARG_NON },
- { OP_NOT_WORD, "not-word", ARG_NON },
- { OP_WORD_BOUND, "word-bound", ARG_NON },
- { OP_NOT_WORD_BOUND, "not-word-bound", ARG_NON },
- { OP_WORD_BEGIN, "word-begin", ARG_NON },
- { OP_WORD_END, "word-end", ARG_NON },
- { OP_BEGIN_BUF, "begin-buf", ARG_NON },
- { OP_END_BUF, "end-buf", ARG_NON },
- { OP_BEGIN_LINE, "begin-line", ARG_NON },
- { OP_END_LINE, "end-line", ARG_NON },
- { OP_SEMI_END_BUF, "semi-end-buf", ARG_NON },
- { OP_BEGIN_POSITION, "begin-position", ARG_NON },
- { OP_BACKREF1, "backref1", ARG_NON },
- { OP_BACKREF2, "backref2", ARG_NON },
- { OP_BACKREFN, "backrefn", ARG_MEMNUM },
- { OP_BACKREFN_IC, "backrefn-ic", ARG_SPECIAL },
- { OP_BACKREF_MULTI, "backref_multi", ARG_SPECIAL },
- { OP_BACKREF_MULTI_IC, "backref_multi-ic", ARG_SPECIAL },
- { OP_BACKREF_WITH_LEVEL, "backref_at_level", ARG_SPECIAL },
- { OP_MEMORY_START_PUSH, "mem-start-push", ARG_MEMNUM },
- { OP_MEMORY_START, "mem-start", ARG_MEMNUM },
- { OP_MEMORY_END_PUSH, "mem-end-push", ARG_MEMNUM },
- { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec", ARG_MEMNUM },
- { OP_MEMORY_END, "mem-end", ARG_MEMNUM },
- { OP_MEMORY_END_REC, "mem-end-rec", ARG_MEMNUM },
- { OP_SET_OPTION_PUSH, "set-option-push", ARG_OPTION },
- { OP_SET_OPTION, "set-option", ARG_OPTION },
- { OP_FAIL, "fail", ARG_NON },
- { OP_JUMP, "jump", ARG_RELADDR },
- { OP_PUSH, "push", ARG_RELADDR },
- { OP_POP, "pop", ARG_NON },
- { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1", ARG_SPECIAL },
- { OP_PUSH_IF_PEEK_NEXT, "push-if-peek-next", ARG_SPECIAL },
- { OP_REPEAT, "repeat", ARG_SPECIAL },
- { OP_REPEAT_NG, "repeat-ng", ARG_SPECIAL },
- { OP_REPEAT_INC, "repeat-inc", ARG_MEMNUM },
- { OP_REPEAT_INC_NG, "repeat-inc-ng", ARG_MEMNUM },
- { OP_REPEAT_INC_SG, "repeat-inc-sg", ARG_MEMNUM },
- { OP_REPEAT_INC_NG_SG, "repeat-inc-ng-sg", ARG_MEMNUM },
- { OP_NULL_CHECK_START, "null-check-start", ARG_MEMNUM },
- { OP_NULL_CHECK_END, "null-check-end", ARG_MEMNUM },
- { OP_NULL_CHECK_END_MEMST,"null-check-end-memst", ARG_MEMNUM },
- { OP_NULL_CHECK_END_MEMST_PUSH,"null-check-end-memst-push", ARG_MEMNUM },
- { OP_PUSH_POS, "push-pos", ARG_NON },
- { OP_POP_POS, "pop-pos", ARG_NON },
- { OP_PUSH_POS_NOT, "push-pos-not", ARG_RELADDR },
- { OP_FAIL_POS, "fail-pos", ARG_NON },
- { OP_PUSH_STOP_BT, "push-stop-bt", ARG_NON },
- { OP_POP_STOP_BT, "pop-stop-bt", ARG_NON },
- { OP_LOOK_BEHIND, "look-behind", ARG_SPECIAL },
- { OP_PUSH_LOOK_BEHIND_NOT, "push-look-behind-not", ARG_SPECIAL },
- { OP_FAIL_LOOK_BEHIND_NOT, "fail-look-behind-not", ARG_NON },
- { OP_CALL, "call", ARG_ABSADDR },
- { OP_RETURN, "return", ARG_NON },
- { OP_STATE_CHECK_PUSH, "state-check-push", ARG_SPECIAL },
- { OP_STATE_CHECK_PUSH_OR_JUMP, "state-check-push-or-jump", ARG_SPECIAL },
- { OP_STATE_CHECK, "state-check", ARG_STATE_CHECK },
- { OP_STATE_CHECK_ANYCHAR_STAR, "state-check-anychar*", ARG_STATE_CHECK },
- { OP_STATE_CHECK_ANYCHAR_ML_STAR,
- "state-check-anychar-ml*", ARG_STATE_CHECK },
- { -1, "", ARG_NON }
-};
-
-static char*
-op2name(int opcode)
-{
- int i;
-
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {
- if (opcode == OnigOpInfo[i].opcode)
- return OnigOpInfo[i].name;
- }
- return "";
-}
-
-static int
-op2arg_type(int opcode)
-{
- int i;
-
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {
- if (opcode == OnigOpInfo[i].opcode)
- return OnigOpInfo[i].arg_type;
- }
- return ARG_SPECIAL;
-}
-
-static void
-Indent(FILE* f, int indent)
-{
- int i;
- for (i = 0; i < indent; i++) putc(' ', f);
-}
+#ifdef ONIG_DEBUG_PARSE
static void
p_string(FILE* f, int len, UChar* s)
@@ -5838,288 +6289,19 @@ p_string(FILE* f, int len, UChar* s)
}
static void
-p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)
-{
- int x = len * mb_len;
-
- fprintf(f, ":%d:", len);
- while (x-- > 0) { fputc(*s++, f); }
-}
-
-extern void
-onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp,
- OnigEncoding enc)
-{
- int i, n, arg_type;
- RelAddrType addr;
- LengthType len;
- MemNumType mem;
- StateCheckNumType scn;
- OnigCodePoint code;
- UChar *q;
-
- fprintf(f, "[%s", op2name(*bp));
- arg_type = op2arg_type(*bp);
- if (arg_type != ARG_SPECIAL) {
- bp++;
- switch (arg_type) {
- case ARG_NON:
- break;
- case ARG_RELADDR:
- GET_RELADDR_INC(addr, bp);
- fprintf(f, ":(%d)", addr);
- break;
- case ARG_ABSADDR:
- GET_ABSADDR_INC(addr, bp);
- fprintf(f, ":(%d)", addr);
- break;
- case ARG_LENGTH:
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d", len);
- break;
- case ARG_MEMNUM:
- mem = *((MemNumType* )bp);
- bp += SIZE_MEMNUM;
- fprintf(f, ":%d", mem);
- break;
- case ARG_OPTION:
- {
- OnigOptionType option = *((OnigOptionType* )bp);
- bp += SIZE_OPTION;
- fprintf(f, ":%d", option);
- }
- break;
-
- case ARG_STATE_CHECK:
- scn = *((StateCheckNumType* )bp);
- bp += SIZE_STATE_CHECK_NUM;
- fprintf(f, ":%d", scn);
- break;
- }
- }
- else {
- switch (*bp++) {
- case OP_EXACT1:
- case OP_ANYCHAR_STAR_PEEK_NEXT:
- case OP_ANYCHAR_ML_STAR_PEEK_NEXT:
- p_string(f, 1, bp++); break;
- case OP_EXACT2:
- p_string(f, 2, bp); bp += 2; break;
- case OP_EXACT3:
- p_string(f, 3, bp); bp += 3; break;
- case OP_EXACT4:
- p_string(f, 4, bp); bp += 4; break;
- case OP_EXACT5:
- p_string(f, 5, bp); bp += 5; break;
- case OP_EXACTN:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 1, bp);
- bp += len;
- break;
-
- case OP_EXACTMB2N1:
- p_string(f, 2, bp); bp += 2; break;
- case OP_EXACTMB2N2:
- p_string(f, 4, bp); bp += 4; break;
- case OP_EXACTMB2N3:
- p_string(f, 6, bp); bp += 6; break;
- case OP_EXACTMB2N:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 2, bp);
- bp += len * 2;
- break;
- case OP_EXACTMB3N:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 3, bp);
- bp += len * 3;
- break;
- case OP_EXACTMBN:
- {
- int mb_len;
-
- GET_LENGTH_INC(mb_len, bp);
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d:%d:", mb_len, len);
- n = len * mb_len;
- while (n-- > 0) { fputc(*bp++, f); }
- }
- break;
-
- case OP_EXACT1_IC:
- len = enclen(enc, bp);
- p_string(f, len, bp);
- bp += len;
- break;
- case OP_EXACTN_IC:
- GET_LENGTH_INC(len, bp);
- p_len_string(f, len, 1, bp);
- bp += len;
- break;
-
- case OP_CCLASS:
- n = bitset_on_num((BitSetRef )bp);
- bp += SIZE_BITSET;
- fprintf(f, ":%d", n);
- break;
-
- case OP_CCLASS_NOT:
- n = bitset_on_num((BitSetRef )bp);
- bp += SIZE_BITSET;
- fprintf(f, ":%d", n);
- break;
-
- case OP_CCLASS_MB:
- case OP_CCLASS_MB_NOT:
- GET_LENGTH_INC(len, bp);
- q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
- ALIGNMENT_RIGHT(q);
-#endif
- GET_CODE_POINT(code, q);
- bp += len;
- fprintf(f, ":%d:%d", (int )code, len);
- break;
-
- case OP_CCLASS_MIX:
- case OP_CCLASS_MIX_NOT:
- n = bitset_on_num((BitSetRef )bp);
- bp += SIZE_BITSET;
- GET_LENGTH_INC(len, bp);
- q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
- ALIGNMENT_RIGHT(q);
-#endif
- GET_CODE_POINT(code, q);
- bp += len;
- fprintf(f, ":%d:%d:%d", n, (int )code, len);
- break;
-
- case OP_CCLASS_NODE:
- {
- CClassNode *cc;
-
- GET_POINTER_INC(cc, bp);
- n = bitset_on_num(cc->bs);
- fprintf(f, ":%p:%d", cc, n);
- }
- break;
-
- case OP_BACKREFN_IC:
- mem = *((MemNumType* )bp);
- bp += SIZE_MEMNUM;
- fprintf(f, ":%d", mem);
- break;
-
- case OP_BACKREF_MULTI_IC:
- case OP_BACKREF_MULTI:
- fputs(" ", f);
- GET_LENGTH_INC(len, bp);
- for (i = 0; i < len; i++) {
- GET_MEMNUM_INC(mem, bp);
- if (i > 0) fputs(", ", f);
- fprintf(f, "%d", mem);
- }
- break;
-
- case OP_BACKREF_WITH_LEVEL:
- {
- OnigOptionType option;
- LengthType level;
-
- GET_OPTION_INC(option, bp);
- fprintf(f, ":%d", option);
- GET_LENGTH_INC(level, bp);
- fprintf(f, ":%d", level);
-
- fputs(" ", f);
- GET_LENGTH_INC(len, bp);
- for (i = 0; i < len; i++) {
- GET_MEMNUM_INC(mem, bp);
- if (i > 0) fputs(", ", f);
- fprintf(f, "%d", mem);
- }
- }
- break;
-
- case OP_REPEAT:
- case OP_REPEAT_NG:
- {
- mem = *((MemNumType* )bp);
- bp += SIZE_MEMNUM;
- addr = *((RelAddrType* )bp);
- bp += SIZE_RELADDR;
- fprintf(f, ":%d:%d", mem, addr);
- }
- break;
-
- case OP_PUSH_OR_JUMP_EXACT1:
- case OP_PUSH_IF_PEEK_NEXT:
- addr = *((RelAddrType* )bp);
- bp += SIZE_RELADDR;
- fprintf(f, ":(%d)", addr);
- p_string(f, 1, bp);
- bp += 1;
- break;
-
- case OP_LOOK_BEHIND:
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d", len);
- break;
-
- case OP_PUSH_LOOK_BEHIND_NOT:
- GET_RELADDR_INC(addr, bp);
- GET_LENGTH_INC(len, bp);
- fprintf(f, ":%d:(%d)", len, addr);
- break;
-
- case OP_STATE_CHECK_PUSH:
- case OP_STATE_CHECK_PUSH_OR_JUMP:
- scn = *((StateCheckNumType* )bp);
- bp += SIZE_STATE_CHECK_NUM;
- addr = *((RelAddrType* )bp);
- bp += SIZE_RELADDR;
- fprintf(f, ":%d:(%d)", scn, addr);
- break;
-
- default:
- fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n",
- *--bp);
- }
- }
- fputs("]", f);
- if (nextp) *nextp = bp;
-}
-
-static void
-print_compiled_byte_code_list(FILE* f, regex_t* reg)
+Indent(FILE* f, int indent)
{
- int ncode;
- UChar* bp = reg->p;
- UChar* end = reg->p + reg->used;
-
- fprintf(f, "code length: %d\n", reg->used);
-
- ncode = 0;
- while (bp < end) {
- ncode++;
- if (bp > reg->p) {
- if (ncode % 5 == 0)
- fprintf(f, "\n");
- else
- fputs(" ", f);
- }
- onig_print_compiled_byte_code(f, bp, &bp, reg->enc);
- }
-
- fprintf(f, "\n");
+ int i;
+ for (i = 0; i < indent; i++) putc(' ', f);
}
static void
print_indent_tree(FILE* f, Node* node, int indent)
{
- int i, type;
- int add = 3;
+ int i;
+ NodeType type;
UChar* p;
+ int add = 3;
Indent(f, indent);
if (IS_NULL(node)) {
@@ -6127,29 +6309,28 @@ print_indent_tree(FILE* f, Node* node, int indent)
exit (0);
}
- type = NTYPE(node);
+ type = NODE_TYPE(node);
switch (type) {
- case NT_LIST:
- case NT_ALT:
- if (NTYPE(node) == NT_LIST)
+ case NODE_LIST:
+ case NODE_ALT:
+ if (type == NODE_LIST)
fprintf(f, "<list:%p>\n", node);
else
fprintf(f, "<alt:%p>\n", node);
- print_indent_tree(f, NCAR(node), indent + add);
- while (IS_NOT_NULL(node = NCDR(node))) {
- if (NTYPE(node) != type) {
- fprintf(f, "ERROR: list/alt right is not a cons. %d\n", NTYPE(node));
+ print_indent_tree(f, NODE_CAR(node), indent + add);
+ while (IS_NOT_NULL(node = NODE_CDR(node))) {
+ if (NODE_TYPE(node) != type) {
+ fprintf(f, "ERROR: list/alt right is not a cons. %d\n", NODE_TYPE(node));
exit(0);
}
- print_indent_tree(f, NCAR(node), indent + add);
+ print_indent_tree(f, NODE_CAR(node), indent + add);
}
break;
- case NT_STR:
- fprintf(f, "<string%s:%p>",
- (NSTRING_IS_RAW(node) ? "-raw" : ""), node);
- for (p = NSTR(node)->s; p < NSTR(node)->end; p++) {
+ case NODE_STRING:
+ fprintf(f, "<string%s:%p>", (NODE_STRING_IS_RAW(node) ? "-raw" : ""), node);
+ for (p = STR_(node)->s; p < STR_(node)->end; p++) {
if (*p >= 0x20 && *p < 0x7f)
fputc(*p, f);
else {
@@ -6158,11 +6339,11 @@ print_indent_tree(FILE* f, Node* node, int indent)
}
break;
- case NT_CCLASS:
+ case NODE_CCLASS:
fprintf(f, "<cclass:%p>", node);
- if (IS_NCCLASS_NOT(NCCLASS(node))) fputs(" not", f);
- if (NCCLASS(node)->mbuf) {
- BBuf* bbuf = NCCLASS(node)->mbuf;
+ if (IS_NCCLASS_NOT(CCLASS_(node))) fputs(" not", f);
+ if (CCLASS_(node)->mbuf) {
+ BBuf* bbuf = CCLASS_(node)->mbuf;
for (i = 0; i < bbuf->used; i++) {
if (i > 0) fprintf(f, ",");
fprintf(f, "%0x", bbuf->p[i]);
@@ -6170,14 +6351,22 @@ print_indent_tree(FILE* f, Node* node, int indent)
}
break;
- case NT_CTYPE:
+ case NODE_CTYPE:
fprintf(f, "<ctype:%p> ", node);
- switch (NCTYPE(node)->ctype) {
+ switch (CTYPE_(node)->ctype) {
+ case CTYPE_ANYCHAR:
+ fprintf(f, "<anychar:%p>", node);
+ break;
+
case ONIGENC_CTYPE_WORD:
- if (NCTYPE(node)->not != 0)
- fputs("not word", f);
+ if (CTYPE_(node)->not != 0)
+ fputs("not word", f);
else
- fputs("word", f);
+ fputs("word", f);
+
+ if (CTYPE_(node)->ascii_mode != 0)
+ fputs(" (ascii)", f);
+
break;
default:
@@ -6186,41 +6375,41 @@ print_indent_tree(FILE* f, Node* node, int indent)
}
break;
- case NT_CANY:
- fprintf(f, "<anychar:%p>", node);
- break;
-
- case NT_ANCHOR:
+ case NODE_ANCHOR:
fprintf(f, "<anchor:%p> ", node);
- switch (NANCHOR(node)->type) {
- case ANCHOR_BEGIN_BUF: fputs("begin buf", f); break;
- case ANCHOR_END_BUF: fputs("end buf", f); break;
- case ANCHOR_BEGIN_LINE: fputs("begin line", f); break;
- case ANCHOR_END_LINE: fputs("end line", f); break;
- case ANCHOR_SEMI_END_BUF: fputs("semi end buf", f); break;
- case ANCHOR_BEGIN_POSITION: fputs("begin position", f); break;
-
- case ANCHOR_WORD_BOUND: fputs("word bound", f); break;
- case ANCHOR_NOT_WORD_BOUND: fputs("not word bound", f); break;
+ switch (ANCHOR_(node)->type) {
+ case ANCHOR_BEGIN_BUF: fputs("begin buf", f); break;
+ case ANCHOR_END_BUF: fputs("end buf", f); break;
+ case ANCHOR_BEGIN_LINE: fputs("begin line", f); break;
+ case ANCHOR_END_LINE: fputs("end line", f); break;
+ case ANCHOR_SEMI_END_BUF: fputs("semi end buf", f); break;
+ case ANCHOR_BEGIN_POSITION: fputs("begin position", f); break;
+
+ case ANCHOR_WORD_BOUNDARY: fputs("word boundary", f); break;
+ case ANCHOR_NO_WORD_BOUNDARY: fputs("not word boundary", f); break;
#ifdef USE_WORD_BEGIN_END
- case ANCHOR_WORD_BEGIN: fputs("word begin", f); break;
- case ANCHOR_WORD_END: fputs("word end", f); break;
+ case ANCHOR_WORD_BEGIN: fputs("word begin", f); break;
+ case ANCHOR_WORD_END: fputs("word end", f); break;
#endif
+ case ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ fputs("extended-grapheme-cluster boundary", f); break;
+ case ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ fputs("no-extended-grapheme-cluster boundary", f); break;
case ANCHOR_PREC_READ:
fprintf(f, "prec read\n");
- print_indent_tree(f, NANCHOR(node)->target, indent + add);
+ print_indent_tree(f, NODE_BODY(node), indent + add);
break;
case ANCHOR_PREC_READ_NOT:
fprintf(f, "prec read not\n");
- print_indent_tree(f, NANCHOR(node)->target, indent + add);
+ print_indent_tree(f, NODE_BODY(node), indent + add);
break;
case ANCHOR_LOOK_BEHIND:
fprintf(f, "look behind\n");
- print_indent_tree(f, NANCHOR(node)->target, indent + add);
+ print_indent_tree(f, NODE_BODY(node), indent + add);
break;
case ANCHOR_LOOK_BEHIND_NOT:
fprintf(f, "look behind not\n");
- print_indent_tree(f, NANCHOR(node)->target, indent + add);
+ print_indent_tree(f, NODE_BODY(node), indent + add);
break;
default:
@@ -6229,12 +6418,12 @@ print_indent_tree(FILE* f, Node* node, int indent)
}
break;
- case NT_BREF:
+ case NODE_BACKREF:
{
int* p;
- BRefNode* br = NBREF(node);
+ BackRefNode* br = BACKREF_(node);
p = BACKREFS_P(br);
- fprintf(f, "<backref:%p>", node);
+ fprintf(f, "<backref%s:%p>", NODE_IS_CHECKER(node) ? "-checker" : "", node);
for (i = 0; i < br->back_num; i++) {
if (i > 0) fputs(", ", f);
fprintf(f, "%d", p[i]);
@@ -6242,33 +6431,33 @@ print_indent_tree(FILE* f, Node* node, int indent)
}
break;
-#ifdef USE_SUBEXP_CALL
- case NT_CALL:
+#ifdef USE_CALL
+ case NODE_CALL:
{
- CallNode* cn = NCALL(node);
+ CallNode* cn = CALL_(node);
fprintf(f, "<call:%p>", node);
p_string(f, cn->name_end - cn->name, cn->name);
}
break;
#endif
- case NT_QTFR:
+ case NODE_QUANT:
fprintf(f, "<quantifier:%p>{%d,%d}%s\n", node,
- NQTFR(node)->lower, NQTFR(node)->upper,
- (NQTFR(node)->greedy ? "" : "?"));
- print_indent_tree(f, NQTFR(node)->target, indent + add);
+ QUANT_(node)->lower, QUANT_(node)->upper,
+ (QUANT_(node)->greedy ? "" : "?"));
+ print_indent_tree(f, NODE_BODY(node), indent + add);
break;
- case NT_ENCLOSE:
- fprintf(f, "<enclose:%p> ", node);
- switch (NENCLOSE(node)->type) {
- case ENCLOSE_OPTION:
- fprintf(f, "option:%d", NENCLOSE(node)->option);
+ case NODE_ENCLOSURE:
+ fprintf(f, "<enclosure:%p> ", node);
+ switch (ENCLOSURE_(node)->type) {
+ case ENCLOSURE_OPTION:
+ fprintf(f, "option:%d", ENCLOSURE_(node)->o.options);
break;
- case ENCLOSE_MEMORY:
- fprintf(f, "memory:%d", NENCLOSE(node)->regnum);
+ case ENCLOSURE_MEMORY:
+ fprintf(f, "memory:%d", ENCLOSURE_(node)->m.regnum);
break;
- case ENCLOSE_STOP_BACKTRACK:
+ case ENCLOSURE_STOP_BACKTRACK:
fprintf(f, "stop-bt");
break;
@@ -6276,22 +6465,38 @@ print_indent_tree(FILE* f, Node* node, int indent)
break;
}
fprintf(f, "\n");
- print_indent_tree(f, NENCLOSE(node)->target, indent + add);
+ print_indent_tree(f, NODE_BODY(node), indent + add);
+ break;
+
+ case NODE_GIMMICK:
+ fprintf(f, "<gimmick:%p> ", node);
+ switch (GIMMICK_(node)->type) {
+ case GIMMICK_FAIL:
+ fprintf(f, "fail");
+ break;
+ case GIMMICK_KEEP:
+ fprintf(f, "keep:%d", GIMMICK_(node)->id);
+ break;
+ case GIMMICK_SAVE:
+ fprintf(f, "save:%d:%d", GIMMICK_(node)->detail_type, GIMMICK_(node)->id);
+ break;
+ case GIMMICK_UPDATE_VAR:
+ fprintf(f, "update_var:%d:%d", GIMMICK_(node)->detail_type, GIMMICK_(node)->id);
+ break;
+ }
break;
default:
- fprintf(f, "print_indent_tree: undefined node type %d\n", NTYPE(node));
+ fprintf(f, "print_indent_tree: undefined node type %d\n", NODE_TYPE(node));
break;
}
- if (type != NT_LIST && type != NT_ALT && type != NT_QTFR &&
- type != NT_ENCLOSE)
+ if (type != NODE_LIST && type != NODE_ALT && type != NODE_QUANT &&
+ type != NODE_ENCLOSURE)
fprintf(f, "\n");
fflush(f);
}
-#endif /* ONIG_DEBUG */
-#ifdef ONIG_DEBUG_PARSE_TREE
static void
print_tree(FILE* f, Node* node)
{
diff --git a/ext/mbstring/oniguruma/src/regenc.c b/ext/mbstring/oniguruma/src/regenc.c
index 9d8e5abe2f..7ded5a81e4 100644
--- a/ext/mbstring/oniguruma/src/regenc.c
+++ b/ext/mbstring/oniguruma/src/regenc.c
@@ -2,7 +2,7 @@
regenc.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -137,7 +137,7 @@ onigenc_strlen(OnigEncoding enc, const UChar* p, const UChar* end)
{
int n = 0;
UChar* q = (UChar* )p;
-
+
while (q < end) {
q += ONIGENC_MBC_ENC_LEN(enc, q);
n++;
@@ -150,7 +150,7 @@ onigenc_strlen_null(OnigEncoding enc, const UChar* s)
{
int n = 0;
UChar* p = (UChar* )s;
-
+
while (1) {
if (*p == '\0') {
UChar* q;
@@ -780,7 +780,7 @@ onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
if (enclen(enc, buf) != (p - buf))
return ONIGERR_INVALID_CODE_POINT_VALUE;
#endif
- return p - buf;
+ return (int )(p - buf);
}
extern int
@@ -803,7 +803,7 @@ onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
if (enclen(enc, buf) != (p - buf))
return ONIGERR_INVALID_CODE_POINT_VALUE;
#endif
- return p - buf;
+ return (int )(p - buf);
}
extern int
@@ -841,6 +841,16 @@ onigenc_minimum_property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)
}
extern int
+onigenc_is_mbc_word_ascii(OnigEncoding enc, UChar* s, const UChar* end)
+{
+ OnigCodePoint code = ONIGENC_MBC_TO_CODE(enc, s, end);
+
+ if (code > 127) return 0;
+
+ return ONIGENC_IS_ASCII_CODE_WORD(code);
+}
+
+extern int
onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
unsigned int ctype)
{
diff --git a/ext/mbstring/oniguruma/src/regenc.h b/ext/mbstring/oniguruma/src/regenc.h
index ff4b04b266..cda3bcd8fe 100644
--- a/ext/mbstring/oniguruma/src/regenc.h
+++ b/ext/mbstring/oniguruma/src/regenc.h
@@ -4,7 +4,7 @@
regenc.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -71,6 +71,8 @@ typedef struct {
#define ONIG_CHECK_NULL_RETURN(p) if (ONIG_IS_NULL(p)) return NULL
#define ONIG_CHECK_NULL_RETURN_VAL(p,val) if (ONIG_IS_NULL(p)) return (val)
+#define MAX_CODE_POINT (~((OnigCodePoint )0))
+
#define enclen(enc,p) ONIGENC_MBC_ENC_LEN(enc,p)
/* character types bit flag */
@@ -109,6 +111,7 @@ struct PropertyNameCtype {
/* #define USE_CRNL_AS_LINE_TERMINATOR */
#define USE_UNICODE_PROPERTIES
+#define USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
/* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
/* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTS #18 */
@@ -143,6 +146,7 @@ ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code));
ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
ONIG_EXTERN int onigenc_minimum_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
ONIG_EXTERN int onigenc_unicode_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
+ONIG_EXTERN int onigenc_is_mbc_word_ascii P_((OnigEncoding enc, UChar* s, const UChar* end));
ONIG_EXTERN int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code));
ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
@@ -154,10 +158,11 @@ ONIG_EXTERN struct PropertyNameCtype* sjis_lookup_property_name P_((register con
/* in enc/unicode.c */
ONIG_EXTERN int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));
ONIG_EXTERN int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));
-ONIG_EXTERN int onigenc_unicode_ctype_code_range P_((int ctype, const OnigCodePoint* ranges[]));
+ONIG_EXTERN int onigenc_unicode_ctype_code_range P_((OnigCtype ctype, const OnigCodePoint* ranges[]));
ONIG_EXTERN int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
ONIG_EXTERN int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));
ONIG_EXTERN int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
+ONIG_EXTERN int onigenc_egcb_is_break_position P_((OnigEncoding enc, UChar* p, UChar* prev, const UChar* start, const UChar* end));
#define UTF16_IS_SURROGATE_FIRST(c) (((c) & 0xfc) == 0xd8)
@@ -194,8 +199,8 @@ extern OnigCodePoint OnigUnicodeFolds3[];
struct ByUnfoldKey {
OnigCodePoint code;
- int index;
- int fold_len;
+ short int index;
+ short int fold_len;
};
extern const struct ByUnfoldKey* unicode_unfold_key(OnigCodePoint code);
@@ -235,9 +240,13 @@ ONIG_EXTERN const unsigned short OnigEncAsciiCtypeTable[];
#define ONIGENC_ASCII_CODE_TO_UPPER_CASE(c) OnigEncAsciiToUpperCaseTable[c]
#define ONIGENC_IS_ASCII_CODE_CTYPE(code,ctype) \
((OnigEncAsciiCtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)
+#define ONIGENC_IS_ASCII_CODE_WORD(code) \
+ ((OnigEncAsciiCtypeTable[code] & CTYPE_TO_BIT(ONIGENC_CTYPE_WORD)) != 0)
#define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \
(ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_UPPER) ||\
ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_LOWER))
-
+
+#define ONIGENC_IS_UNICODE_ENCODING(enc) \
+ ((enc)->is_code_ctype == onigenc_unicode_is_code_ctype)
#endif /* REGENC_H */
diff --git a/ext/mbstring/oniguruma/src/regerror.c b/ext/mbstring/oniguruma/src/regerror.c
index dad91c15ab..4c10d065f9 100644
--- a/ext/mbstring/oniguruma/src/regerror.c
+++ b/ext/mbstring/oniguruma/src/regerror.c
@@ -2,7 +2,7 @@
regerror.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -56,6 +56,8 @@ onig_error_code_to_format(int code)
p = "match-stack limit over"; break;
case ONIGERR_PARSE_DEPTH_LIMIT_OVER:
p = "parse depth limit over"; break;
+ case ONIGERR_TRY_IN_MATCH_LIMIT_OVER:
+ p = "try-in-match limit over"; break;
case ONIGERR_TYPE_BUG:
p = "undefined type (bug)"; break;
case ONIGERR_PARSER_BUG:
@@ -135,11 +137,7 @@ onig_error_code_to_format(int code)
case ONIGERR_TOO_BIG_BACKREF_NUMBER:
p = "too big backref number"; break;
case ONIGERR_INVALID_BACKREF:
-#ifdef USE_NAMED_GROUP
p = "invalid backref number/name"; break;
-#else
- p = "invalid backref number"; break;
-#endif
case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:
p = "numbered backref/call is not allowed. (use name)"; break;
case ONIGERR_TOO_MANY_CAPTURES:
@@ -155,11 +153,7 @@ onig_error_code_to_format(int code)
case ONIGERR_INVALID_GROUP_NAME:
p = "invalid group name <%n>"; break;
case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
-#ifdef USE_NAMED_GROUP
p = "invalid char in group name <%n>"; break;
-#else
- p = "invalid char in group number <%n>"; break;
-#endif
case ONIGERR_UNDEFINED_NAME_REFERENCE:
p = "undefined name <%n> reference"; break;
case ONIGERR_UNDEFINED_GROUP_REFERENCE:
@@ -174,6 +168,12 @@ onig_error_code_to_format(int code)
p = "group number is too big for capture history"; break;
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
p = "invalid character property name {%n}"; break;
+ case ONIGERR_INVALID_IF_ELSE_SYNTAX:
+ p = "invalid if-else syntax"; break;
+ case ONIGERR_INVALID_ABSENT_GROUP_PATTERN:
+ p = "invalid absent group pattern"; break;
+ case ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN:
+ p = "invalid absent group generator pattern"; break;
case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:
p = "not supported encoding combination"; break;
case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:
@@ -211,24 +211,24 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
while (p < end) {
code = ONIGENC_MBC_TO_CODE(enc, p, end);
if (code >= 0x80) {
- if (code > 0xffff && len + 10 <= buf_size) {
- sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 24));
- sprint_byte((char*)(&(buf[len+4])), (unsigned int)(code >> 16));
- sprint_byte((char*)(&(buf[len+6])), (unsigned int)(code >> 8));
- sprint_byte((char*)(&(buf[len+8])), (unsigned int)code);
- len += 10;
- }
- else if (len + 6 <= buf_size) {
- sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 8));
- sprint_byte((char*)(&(buf[len+4])), (unsigned int)code);
- len += 6;
- }
- else {
- break;
- }
+ if (code > 0xffff && len + 10 <= buf_size) {
+ sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 24));
+ sprint_byte((char*)(&(buf[len+4])), (unsigned int)(code >> 16));
+ sprint_byte((char*)(&(buf[len+6])), (unsigned int)(code >> 8));
+ sprint_byte((char*)(&(buf[len+8])), (unsigned int)code);
+ len += 10;
+ }
+ else if (len + 6 <= buf_size) {
+ sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 8));
+ sprint_byte((char*)(&(buf[len+4])), (unsigned int)code);
+ len += 6;
+ }
+ else {
+ break;
+ }
}
else {
- buf[len++] = (UChar )code;
+ buf[len++] = (UChar )code;
}
p += enclen(enc, p);
@@ -238,7 +238,7 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
*is_over = ((p < end) ? 1 : 0);
}
else {
- len = MIN((end - s), buf_size);
+ len = MIN((int )(end - s), buf_size);
xmemcpy(buf, s, (size_t )len);
*is_over = ((buf_size < (end - s)) ? 1 : 0);
}
@@ -257,7 +257,7 @@ onig_error_code_to_str(UChar* s, int code, ...)
onig_error_code_to_str(s, code, va_alist)
UChar* s;
int code;
- va_dcl
+ va_dcl
#endif
{
UChar *p, *q;
@@ -278,31 +278,31 @@ onig_error_code_to_str(s, code, va_alist)
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
einfo = va_arg(vargs, OnigErrorInfo*);
len = to_ascii(einfo->enc, einfo->par, einfo->par_end,
- parbuf, MAX_ERROR_PAR_LEN - 3, &is_over);
+ parbuf, MAX_ERROR_PAR_LEN - 3, &is_over);
q = onig_error_code_to_format(code);
p = s;
while (*q != '\0') {
if (*q == '%') {
- q++;
- if (*q == 'n') { /* '%n': name */
- xmemcpy(p, parbuf, len);
- p += len;
- if (is_over != 0) {
- xmemcpy(p, "...", 3);
- p += 3;
- }
- q++;
- }
- else
- goto normal_char;
+ q++;
+ if (*q == 'n') { /* '%n': name */
+ xmemcpy(p, parbuf, len);
+ p += len;
+ if (is_over != 0) {
+ xmemcpy(p, "...", 3);
+ p += 3;
+ }
+ q++;
+ }
+ else
+ goto normal_char;
}
else {
normal_char:
- *p++ = *q++;
+ *p++ = *q++;
}
}
*p = '\0';
- len = p - s;
+ len = (int )(p - s);
break;
default:
@@ -342,7 +342,7 @@ onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
n = xvsnprintf((char* )buf, bufsize, (const char* )fmt, args);
va_end(args);
- need = (pat_end - pat) * 4 + 4;
+ need = (int )(pat_end - pat) * 4 + 4;
if (n + need < bufsize) {
xstrcat((char* )buf, ": /", bufsize);
@@ -359,7 +359,7 @@ onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
int blen;
while (len-- > 0) {
- sprint_byte_with_x((char* )bs, (unsigned int )(*p++));
+ sprint_byte_with_x((char* )bs, (unsigned int )(*p++));
blen = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
bp = bs;
while (blen-- > 0) *s++ = *bp++;
@@ -367,23 +367,23 @@ onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
}
}
else if (*p == '\\') {
- *s++ = *p++;
- len = enclen(enc, p);
- while (len-- > 0) *s++ = *p++;
+ *s++ = *p++;
+ len = enclen(enc, p);
+ while (len-- > 0) *s++ = *p++;
}
else if (*p == '/') {
- *s++ = (unsigned char )'\\';
- *s++ = *p++;
+ *s++ = (unsigned char )'\\';
+ *s++ = *p++;
}
else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&
- !ONIGENC_IS_CODE_SPACE(enc, *p)) {
- sprint_byte_with_x((char* )bs, (unsigned int )(*p++));
- len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
+ !ONIGENC_IS_CODE_SPACE(enc, *p)) {
+ sprint_byte_with_x((char* )bs, (unsigned int )(*p++));
+ len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);
bp = bs;
- while (len-- > 0) *s++ = *bp++;
+ while (len-- > 0) *s++ = *bp++;
}
else {
- *s++ = *p++;
+ *s++ = *p++;
}
}
diff --git a/ext/mbstring/oniguruma/src/regexec.c b/ext/mbstring/oniguruma/src/regexec.c
index 6796e58fce..45fbc69f0a 100644
--- a/ext/mbstring/oniguruma/src/regexec.c
+++ b/ext/mbstring/oniguruma/src/regexec.c
@@ -2,7 +2,7 @@
regexec.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -31,12 +31,493 @@
#define USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
+#define IS_MBC_WORD_ASCII_MODE(enc,s,end,mode) \
+ ((mode) == 0 ? ONIGENC_IS_MBC_WORD(enc,s,end) : ONIGENC_IS_MBC_WORD_ASCII(enc,s,end))
+
#ifdef USE_CRNL_AS_LINE_TERMINATOR
#define ONIGENC_IS_MBC_CRNL(enc,p,end) \
(ONIGENC_MBC_TO_CODE(enc,p,end) == 13 && \
ONIGENC_IS_MBC_NEWLINE(enc,(p+enclen(enc,p)),end))
#endif
+#define CHECK_INTERRUPT_IN_MATCH
+
+typedef struct {
+ void* stack_p;
+ int stack_n;
+ OnigOptionType options;
+ OnigRegion* region;
+ int ptr_num;
+ const UChar* start; /* search start position (for \G: BEGIN_POSITION) */
+#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
+ int best_len; /* for ONIG_OPTION_FIND_LONGEST */
+ UChar* best_s;
+#endif
+} MatchArg;
+
+
+#ifdef ONIG_DEBUG
+
+/* arguments type */
+#define ARG_SPECIAL -1
+#define ARG_NON 0
+#define ARG_RELADDR 1
+#define ARG_ABSADDR 2
+#define ARG_LENGTH 3
+#define ARG_MEMNUM 4
+#define ARG_OPTION 5
+#define ARG_MODE 6
+
+typedef struct {
+ short int opcode;
+ char* name;
+ short int arg_type;
+} OpInfoType;
+
+static OpInfoType OpInfo[] = {
+ { OP_FINISH, "finish", ARG_NON },
+ { OP_END, "end", ARG_NON },
+ { OP_EXACT1, "exact1", ARG_SPECIAL },
+ { OP_EXACT2, "exact2", ARG_SPECIAL },
+ { OP_EXACT3, "exact3", ARG_SPECIAL },
+ { OP_EXACT4, "exact4", ARG_SPECIAL },
+ { OP_EXACT5, "exact5", ARG_SPECIAL },
+ { OP_EXACTN, "exactn", ARG_SPECIAL },
+ { OP_EXACTMB2N1, "exactmb2-n1", ARG_SPECIAL },
+ { OP_EXACTMB2N2, "exactmb2-n2", ARG_SPECIAL },
+ { OP_EXACTMB2N3, "exactmb2-n3", ARG_SPECIAL },
+ { OP_EXACTMB2N, "exactmb2-n", ARG_SPECIAL },
+ { OP_EXACTMB3N, "exactmb3n" , ARG_SPECIAL },
+ { OP_EXACTMBN, "exactmbn", ARG_SPECIAL },
+ { OP_EXACT1_IC, "exact1-ic", ARG_SPECIAL },
+ { OP_EXACTN_IC, "exactn-ic", ARG_SPECIAL },
+ { OP_CCLASS, "cclass", ARG_SPECIAL },
+ { OP_CCLASS_MB, "cclass-mb", ARG_SPECIAL },
+ { OP_CCLASS_MIX, "cclass-mix", ARG_SPECIAL },
+ { OP_CCLASS_NOT, "cclass-not", ARG_SPECIAL },
+ { OP_CCLASS_MB_NOT, "cclass-mb-not", ARG_SPECIAL },
+ { OP_CCLASS_MIX_NOT, "cclass-mix-not", ARG_SPECIAL },
+#ifdef USE_OP_CCLASS_NODE
+ { OP_CCLASS_NODE, "cclass-node", ARG_SPECIAL },
+#endif
+ { OP_ANYCHAR, "anychar", ARG_NON },
+ { OP_ANYCHAR_ML, "anychar-ml", ARG_NON },
+ { OP_ANYCHAR_STAR, "anychar*", ARG_NON },
+ { OP_ANYCHAR_ML_STAR, "anychar-ml*", ARG_NON },
+ { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },
+ { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },
+ { OP_WORD, "word", ARG_NON },
+ { OP_WORD_ASCII, "word-ascii", ARG_NON },
+ { OP_NO_WORD, "not-word", ARG_NON },
+ { OP_NO_WORD_ASCII, "not-word-ascii", ARG_NON },
+ { OP_WORD_BOUNDARY, "word-boundary", ARG_MODE },
+ { OP_NO_WORD_BOUNDARY, "not-word-boundary", ARG_MODE },
+ { OP_WORD_BEGIN, "word-begin", ARG_MODE },
+ { OP_WORD_END, "word-end", ARG_MODE },
+ { OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "extended-grapheme-cluster-boundary", ARG_NON },
+ { OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "no-extended-grapheme-cluster-boundary", ARG_NON },
+ { OP_BEGIN_BUF, "begin-buf", ARG_NON },
+ { OP_END_BUF, "end-buf", ARG_NON },
+ { OP_BEGIN_LINE, "begin-line", ARG_NON },
+ { OP_END_LINE, "end-line", ARG_NON },
+ { OP_SEMI_END_BUF, "semi-end-buf", ARG_NON },
+ { OP_BEGIN_POSITION, "begin-position", ARG_NON },
+ { OP_BACKREF1, "backref1", ARG_NON },
+ { OP_BACKREF2, "backref2", ARG_NON },
+ { OP_BACKREF_N, "backref-n", ARG_MEMNUM },
+ { OP_BACKREF_N_IC, "backref-n-ic", ARG_SPECIAL },
+ { OP_BACKREF_MULTI, "backref_multi", ARG_SPECIAL },
+ { OP_BACKREF_MULTI_IC, "backref_multi-ic", ARG_SPECIAL },
+ { OP_BACKREF_WITH_LEVEL, "backref_with_level", ARG_SPECIAL },
+ { OP_BACKREF_CHECK, "backref_check", ARG_SPECIAL },
+ { OP_BACKREF_CHECK_WITH_LEVEL, "backref_check_with_level", ARG_SPECIAL },
+ { OP_MEMORY_START_PUSH, "mem-start-push", ARG_MEMNUM },
+ { OP_MEMORY_START, "mem-start", ARG_MEMNUM },
+ { OP_MEMORY_END_PUSH, "mem-end-push", ARG_MEMNUM },
+ { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec", ARG_MEMNUM },
+ { OP_MEMORY_END, "mem-end", ARG_MEMNUM },
+ { OP_MEMORY_END_REC, "mem-end-rec", ARG_MEMNUM },
+ { OP_SET_OPTION_PUSH, "set-option-push", ARG_OPTION },
+ { OP_SET_OPTION, "set-option", ARG_OPTION },
+ { OP_FAIL, "fail", ARG_NON },
+ { OP_JUMP, "jump", ARG_RELADDR },
+ { OP_PUSH, "push", ARG_RELADDR },
+ { OP_PUSH_SUPER, "push_SUPER", ARG_RELADDR },
+ { OP_POP, "pop", ARG_NON },
+ { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1", ARG_SPECIAL },
+ { OP_PUSH_IF_PEEK_NEXT, "push-if-peek-next", ARG_SPECIAL },
+ { OP_REPEAT, "repeat", ARG_SPECIAL },
+ { OP_REPEAT_NG, "repeat-ng", ARG_SPECIAL },
+ { OP_REPEAT_INC, "repeat-inc", ARG_MEMNUM },
+ { OP_REPEAT_INC_NG, "repeat-inc-ng", ARG_MEMNUM },
+ { OP_REPEAT_INC_SG, "repeat-inc-sg", ARG_MEMNUM },
+ { OP_REPEAT_INC_NG_SG, "repeat-inc-ng-sg", ARG_MEMNUM },
+ { OP_EMPTY_CHECK_START, "empty-check-start", ARG_MEMNUM },
+ { OP_EMPTY_CHECK_END, "empty-check-end", ARG_MEMNUM },
+ { OP_EMPTY_CHECK_END_MEMST,"empty-check-end-memst", ARG_MEMNUM },
+ { OP_EMPTY_CHECK_END_MEMST_PUSH,"empty-check-end-memst-push", ARG_MEMNUM },
+ { OP_PREC_READ_START, "push-pos", ARG_NON },
+ { OP_PREC_READ_END, "pop-pos", ARG_NON },
+ { OP_PREC_READ_NOT_START, "prec-read-not-start", ARG_RELADDR },
+ { OP_PREC_READ_NOT_END, "prec-read-not-end", ARG_NON },
+ { OP_ATOMIC_START, "atomic-start", ARG_NON },
+ { OP_ATOMIC_END, "atomic-end", ARG_NON },
+ { OP_LOOK_BEHIND, "look-behind", ARG_SPECIAL },
+ { OP_LOOK_BEHIND_NOT_START, "look-behind-not-start", ARG_SPECIAL },
+ { OP_LOOK_BEHIND_NOT_END, "look-behind-not-end", ARG_NON },
+ { OP_CALL, "call", ARG_ABSADDR },
+ { OP_RETURN, "return", ARG_NON },
+ { OP_PUSH_SAVE_VAL, "push-save-val", ARG_SPECIAL },
+ { OP_UPDATE_VAR, "update-var", ARG_SPECIAL },
+ { -1, "", ARG_NON }
+};
+
+static char*
+op2name(int opcode)
+{
+ int i;
+
+ for (i = 0; OpInfo[i].opcode >= 0; i++) {
+ if (opcode == OpInfo[i].opcode)
+ return OpInfo[i].name;
+ }
+ return "";
+}
+
+static int
+op2arg_type(int opcode)
+{
+ int i;
+
+ for (i = 0; OpInfo[i].opcode >= 0; i++) {
+ if (opcode == OpInfo[i].opcode)
+ return OpInfo[i].arg_type;
+ }
+ return ARG_SPECIAL;
+}
+
+static void
+p_string(FILE* f, int len, UChar* s)
+{
+ fputs(":", f);
+ while (len-- > 0) { fputc(*s++, f); }
+}
+
+static void
+p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)
+{
+ int x = len * mb_len;
+
+ fprintf(f, ":%d:", len);
+ while (x-- > 0) { fputc(*s++, f); }
+}
+
+static void
+p_rel_addr(FILE* f, RelAddrType rel_addr, UChar* p, UChar* start)
+{
+ RelAddrType curr = (RelAddrType )(p - start);
+
+ fprintf(f, "{%d/%d}", rel_addr, curr + rel_addr);
+}
+
+static int
+bitset_on_num(BitSetRef bs)
+{
+ int i, n;
+
+ n = 0;
+ for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
+ if (BITSET_AT(bs, i)) n++;
+ }
+ return n;
+}
+
+extern void
+onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp, UChar* start,
+ OnigEncoding enc)
+{
+ int i, n, arg_type;
+ RelAddrType addr;
+ LengthType len;
+ MemNumType mem;
+ StateCheckNumType scn;
+ OnigCodePoint code;
+ OnigOptionType option;
+ ModeType mode;
+ UChar *q;
+
+ fprintf(f, "%s", op2name(*bp));
+ arg_type = op2arg_type(*bp);
+ if (arg_type != ARG_SPECIAL) {
+ bp++;
+ switch (arg_type) {
+ case ARG_NON:
+ break;
+ case ARG_RELADDR:
+ GET_RELADDR_INC(addr, bp);
+ fputc(':', f);
+ p_rel_addr(f, addr, bp, start);
+ break;
+ case ARG_ABSADDR:
+ GET_ABSADDR_INC(addr, bp);
+ fprintf(f, ":{/%d}", addr);
+ break;
+ case ARG_LENGTH:
+ GET_LENGTH_INC(len, bp);
+ fprintf(f, ":%d", len);
+ break;
+ case ARG_MEMNUM:
+ mem = *((MemNumType* )bp);
+ bp += SIZE_MEMNUM;
+ fprintf(f, ":%d", mem);
+ break;
+ case ARG_OPTION:
+ {
+ OnigOptionType option = *((OnigOptionType* )bp);
+ bp += SIZE_OPTION;
+ fprintf(f, ":%d", option);
+ }
+ break;
+
+ case ARG_MODE:
+ mode = *((ModeType* )bp);
+ bp += SIZE_MODE;
+ fprintf(f, ":%d", mode);
+ break;
+ }
+ }
+ else {
+ switch (*bp++) {
+ case OP_EXACT1:
+ case OP_ANYCHAR_STAR_PEEK_NEXT:
+ case OP_ANYCHAR_ML_STAR_PEEK_NEXT:
+ p_string(f, 1, bp++); break;
+ case OP_EXACT2:
+ p_string(f, 2, bp); bp += 2; break;
+ case OP_EXACT3:
+ p_string(f, 3, bp); bp += 3; break;
+ case OP_EXACT4:
+ p_string(f, 4, bp); bp += 4; break;
+ case OP_EXACT5:
+ p_string(f, 5, bp); bp += 5; break;
+ case OP_EXACTN:
+ GET_LENGTH_INC(len, bp);
+ p_len_string(f, len, 1, bp);
+ bp += len;
+ break;
+
+ case OP_EXACTMB2N1:
+ p_string(f, 2, bp); bp += 2; break;
+ case OP_EXACTMB2N2:
+ p_string(f, 4, bp); bp += 4; break;
+ case OP_EXACTMB2N3:
+ p_string(f, 6, bp); bp += 6; break;
+ case OP_EXACTMB2N:
+ GET_LENGTH_INC(len, bp);
+ p_len_string(f, len, 2, bp);
+ bp += len * 2;
+ break;
+ case OP_EXACTMB3N:
+ GET_LENGTH_INC(len, bp);
+ p_len_string(f, len, 3, bp);
+ bp += len * 3;
+ break;
+ case OP_EXACTMBN:
+ {
+ int mb_len;
+
+ GET_LENGTH_INC(mb_len, bp);
+ GET_LENGTH_INC(len, bp);
+ fprintf(f, ":%d:%d:", mb_len, len);
+ n = len * mb_len;
+ while (n-- > 0) { fputc(*bp++, f); }
+ }
+ break;
+
+ case OP_EXACT1_IC:
+ len = enclen(enc, bp);
+ p_string(f, len, bp);
+ bp += len;
+ break;
+ case OP_EXACTN_IC:
+ GET_LENGTH_INC(len, bp);
+ p_len_string(f, len, 1, bp);
+ bp += len;
+ break;
+
+ case OP_CCLASS:
+ n = bitset_on_num((BitSetRef )bp);
+ bp += SIZE_BITSET;
+ fprintf(f, ":%d", n);
+ break;
+
+ case OP_CCLASS_NOT:
+ n = bitset_on_num((BitSetRef )bp);
+ bp += SIZE_BITSET;
+ fprintf(f, ":%d", n);
+ break;
+
+ case OP_CCLASS_MB:
+ case OP_CCLASS_MB_NOT:
+ GET_LENGTH_INC(len, bp);
+ q = bp;
+#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
+ ALIGNMENT_RIGHT(q);
+#endif
+ GET_CODE_POINT(code, q);
+ bp += len;
+ fprintf(f, ":%d:%d", (int )code, len);
+ break;
+
+ case OP_CCLASS_MIX:
+ case OP_CCLASS_MIX_NOT:
+ n = bitset_on_num((BitSetRef )bp);
+ bp += SIZE_BITSET;
+ GET_LENGTH_INC(len, bp);
+ q = bp;
+#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
+ ALIGNMENT_RIGHT(q);
+#endif
+ GET_CODE_POINT(code, q);
+ bp += len;
+ fprintf(f, ":%d:%d:%d", n, (int )code, len);
+ break;
+
+#ifdef USE_OP_CCLASS_NODE
+ case OP_CCLASS_NODE:
+ {
+ CClassNode *cc;
+
+ GET_POINTER_INC(cc, bp);
+ n = bitset_on_num(cc->bs);
+ fprintf(f, ":%p:%d", cc, n);
+ }
+ break;
+#endif
+
+ case OP_BACKREF_N_IC:
+ mem = *((MemNumType* )bp);
+ bp += SIZE_MEMNUM;
+ fprintf(f, ":%d", mem);
+ break;
+
+ case OP_BACKREF_MULTI_IC:
+ case OP_BACKREF_MULTI:
+ case OP_BACKREF_CHECK:
+ fputs(" ", f);
+ GET_LENGTH_INC(len, bp);
+ for (i = 0; i < len; i++) {
+ GET_MEMNUM_INC(mem, bp);
+ if (i > 0) fputs(", ", f);
+ fprintf(f, "%d", mem);
+ }
+ break;
+
+ case OP_BACKREF_WITH_LEVEL:
+ GET_OPTION_INC(option, bp);
+ fprintf(f, ":%d", option);
+ /* fall */
+ case OP_BACKREF_CHECK_WITH_LEVEL:
+ {
+ LengthType level;
+
+ GET_LENGTH_INC(level, bp);
+ fprintf(f, ":%d", level);
+
+ fputs(" ", f);
+ GET_LENGTH_INC(len, bp);
+ for (i = 0; i < len; i++) {
+ GET_MEMNUM_INC(mem, bp);
+ if (i > 0) fputs(", ", f);
+ fprintf(f, "%d", mem);
+ }
+ }
+ break;
+
+ case OP_REPEAT:
+ case OP_REPEAT_NG:
+ {
+ mem = *((MemNumType* )bp);
+ bp += SIZE_MEMNUM;
+ addr = *((RelAddrType* )bp);
+ bp += SIZE_RELADDR;
+ fprintf(f, ":%d:%d", mem, addr);
+ }
+ break;
+
+ case OP_PUSH_OR_JUMP_EXACT1:
+ case OP_PUSH_IF_PEEK_NEXT:
+ addr = *((RelAddrType* )bp);
+ bp += SIZE_RELADDR;
+ fputc(':', f);
+ p_rel_addr(f, addr, bp, start);
+ p_string(f, 1, bp);
+ bp += 1;
+ break;
+
+ case OP_LOOK_BEHIND:
+ GET_LENGTH_INC(len, bp);
+ fprintf(f, ":%d", len);
+ break;
+
+ case OP_LOOK_BEHIND_NOT_START:
+ GET_RELADDR_INC(addr, bp);
+ GET_LENGTH_INC(len, bp);
+ fprintf(f, ":%d:", len);
+ p_rel_addr(f, addr, bp, start);
+ break;
+
+ case OP_PUSH_SAVE_VAL:
+ {
+ SaveType type;
+ GET_SAVE_TYPE_INC(type, bp);
+ GET_MEMNUM_INC(mem, bp);
+ fprintf(f, ":%d:%d", type, mem);
+ }
+ break;
+
+ case OP_UPDATE_VAR:
+ {
+ UpdateVarType type;
+ GET_UPDATE_VAR_TYPE_INC(type, bp);
+ GET_MEMNUM_INC(mem, bp);
+ fprintf(f, ":%d:%d", type, mem);
+ }
+ break;
+
+ default:
+ fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n", *--bp);
+ }
+ }
+ if (nextp) *nextp = bp;
+}
+#endif /* ONIG_DEBUG */
+
+#ifdef ONIG_DEBUG_COMPILE
+extern void
+onig_print_compiled_byte_code_list(FILE* f, regex_t* reg)
+{
+ UChar* bp;
+ UChar* start = reg->p;
+ UChar* end = reg->p + reg->used;
+
+ fprintf(f, "bt_mem_start: 0x%x, bt_mem_end: 0x%x\n",
+ reg->bt_mem_start, reg->bt_mem_end);
+ fprintf(f, "code-length: %d\n", reg->used);
+
+ bp = start;
+ while (bp < end) {
+ int pos = bp - start;
+
+ fprintf(f, "%4d: ", pos);
+ onig_print_compiled_byte_code(f, bp, &bp, start, reg->enc);
+ fprintf(f, "\n");
+ }
+ fprintf(f, "\n");
+}
+#endif
+
+
#ifdef USE_CAPTURE_HISTORY
static void history_tree_free(OnigCaptureTreeNode* node);
@@ -202,13 +683,13 @@ static int
onig_region_resize_clear(OnigRegion* region, int n)
{
int r;
-
+
r = onig_region_resize(region, n);
if (r != 0) return r;
onig_region_clear(region);
return 0;
}
-
+
extern int
onig_region_set(OnigRegion* region, int at, int beg, int end)
{
@@ -218,7 +699,7 @@ onig_region_set(OnigRegion* region, int at, int beg, int end)
int r = onig_region_resize(region, at + 1);
if (r < 0) return r;
}
-
+
region->beg[at] = beg;
region->end[at] = end;
return 0;
@@ -240,6 +721,7 @@ onig_region_new(void)
OnigRegion* r;
r = (OnigRegion* )xmalloc(sizeof(OnigRegion));
+ CHECK_NULL_RETURN(r);
onig_region_init(r);
return r;
}
@@ -247,7 +729,7 @@ onig_region_new(void)
extern void
onig_region_free(OnigRegion* r, int free_self)
{
- if (r) {
+ if (r != 0) {
if (r->allocated > 0) {
if (r->beg) xfree(r->beg);
if (r->end) xfree(r->end);
@@ -271,13 +753,17 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
if (to->allocated == 0) {
if (from->num_regs > 0) {
to->beg = (int* )xmalloc(RREGC_SIZE);
+ if (IS_NULL(to->beg)) return;
to->end = (int* )xmalloc(RREGC_SIZE);
+ if (IS_NULL(to->end)) return;
to->allocated = from->num_regs;
}
}
else if (to->allocated < from->num_regs) {
to->beg = (int* )xrealloc(to->beg, RREGC_SIZE);
+ if (IS_NULL(to->beg)) return;
to->end = (int* )xrealloc(to->end, RREGC_SIZE);
+ if (IS_NULL(to->end)) return;
to->allocated = from->num_regs;
}
@@ -300,32 +786,77 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
/** stack **/
#define INVALID_STACK_INDEX -1
+#define STK_ALT_FLAG 0x0001
+
/* stack type */
/* used by normal-POP */
-#define STK_ALT 0x0001
-#define STK_LOOK_BEHIND_NOT 0x0002
-#define STK_POS_NOT 0x0003
+#define STK_SUPER_ALT STK_ALT_FLAG
+#define STK_ALT (0x0002 | STK_ALT_FLAG)
+#define STK_ALT_PREC_READ_NOT (0x0004 | STK_ALT_FLAG)
+#define STK_ALT_LOOK_BEHIND_NOT (0x0006 | STK_ALT_FLAG)
/* handled by normal-POP */
#define STK_MEM_START 0x0100
#define STK_MEM_END 0x8200
#define STK_REPEAT_INC 0x0300
-#define STK_STATE_CHECK_MARK 0x1000
+//#define STK_STATE_CHECK_MARK 0x1000
/* avoided by normal-POP */
-#define STK_NULL_CHECK_START 0x3000
-#define STK_NULL_CHECK_END 0x5000 /* for recursive call */
+#define STK_VOID 0x0000 /* for fill a blank */
+#define STK_EMPTY_CHECK_START 0x3000
+#define STK_EMPTY_CHECK_END 0x5000 /* for recursive call */
#define STK_MEM_END_MARK 0x8400
-#define STK_POS 0x0500 /* used when POP-POS */
-#define STK_STOP_BT 0x0600 /* mark for "(?>...)" */
-#define STK_REPEAT 0x0700
-#define STK_CALL_FRAME 0x0800
-#define STK_RETURN 0x0900
-#define STK_VOID 0x0a00 /* for fill a blank */
+#define STK_TO_VOID_START 0x0500 /* mark for "(?>...)" */
+#define STK_REPEAT 0x0600
+#define STK_CALL_FRAME 0x0700
+#define STK_RETURN 0x0800
+#define STK_SAVE_VAL 0x0900
/* stack type check mask */
-#define STK_MASK_POP_USED 0x00ff
-#define STK_MASK_TO_VOID_TARGET 0x10ff
+#define STK_MASK_POP_USED STK_ALT_FLAG
+#define STK_MASK_TO_VOID_TARGET 0x10fe
#define STK_MASK_MEM_END_OR_MARK 0x8000 /* MEM_END or MEM_END_MARK */
+typedef intptr_t StackIndex;
+
+typedef struct _StackType {
+ unsigned int type;
+ int id;
+ union {
+ struct {
+ UChar *pcode; /* byte code position */
+ UChar *pstr; /* string position */
+ UChar *pstr_prev; /* previous char position of pstr */
+ } state;
+ struct {
+ int count; /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
+ UChar *pcode; /* byte code position (head of repeated target) */
+ } repeat;
+ struct {
+ StackIndex si; /* index of stack */
+ } repeat_inc;
+ struct {
+ UChar *pstr; /* start/end position */
+ /* Following information is set, if this stack type is MEM-START */
+ StackIndex start; /* prev. info (for backtrack "(...)*" ) */
+ StackIndex end; /* prev. info (for backtrack "(...)*" ) */
+ } mem;
+ struct {
+ UChar *pstr; /* start position */
+ } empty_check;
+#ifdef USE_CALL
+ struct {
+ UChar *ret_addr; /* byte code position */
+ UChar *pstr; /* string position */
+ } call_frame;
+#endif
+ struct {
+ enum SaveType type;
+ UChar* v;
+ UChar* v2;
+ } val;
+ } u;
+} StackType;
+
+
#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
#define MATCH_ARG_INIT(msa, reg, arg_option, arg_region, arg_start) do {\
(msa).stack_p = (void* )0;\
@@ -333,7 +864,7 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
(msa).region = (arg_region);\
(msa).start = (arg_start);\
(msa).best_len = ONIG_MISMATCH;\
- (msa).ptr_num = (reg)->num_repeat + (reg)->num_mem * 2;\
+ (msa).ptr_num = (reg)->num_repeat + ((reg)->num_mem + 1) * 2; \
} while(0)
#else
#define MATCH_ARG_INIT(msa, reg, arg_option, arg_region, arg_start) do {\
@@ -341,48 +872,11 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
(msa).options = (arg_option);\
(msa).region = (arg_region);\
(msa).start = (arg_start);\
- (msa).ptr_num = (reg)->num_repeat + (reg)->num_mem * 2;\
+ (msa).ptr_num = (reg)->num_repeat + ((reg)->num_mem + 1) * 2; \
} while(0)
#endif
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
-
-#define STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE 16
-
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num) do { \
- if ((state_num) > 0 && str_len >= STATE_CHECK_STRING_THRESHOLD_LEN) {\
- unsigned int size = (unsigned int )(((str_len) + 1) * (state_num) + 7) >> 3;\
- offset = ((offset) * (state_num)) >> 3;\
- if (size > 0 && offset < size && size < STATE_CHECK_BUFF_MAX_SIZE) {\
- if (size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) \
- (msa).state_check_buff = (void* )xmalloc(size);\
- else \
- (msa).state_check_buff = (void* )xalloca(size);\
- xmemset(((char* )((msa).state_check_buff)+(offset)), 0, \
- (size_t )(size - (offset))); \
- (msa).state_check_buff_size = size;\
- }\
- else {\
- (msa).state_check_buff = (void* )0;\
- (msa).state_check_buff_size = 0;\
- }\
- }\
- else {\
- (msa).state_check_buff = (void* )0;\
- (msa).state_check_buff_size = 0;\
- }\
-} while(0)
-
-#define MATCH_ARG_FREE(msa) do {\
- if ((msa).stack_p) xfree((msa).stack_p);\
- if ((msa).state_check_buff_size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) { \
- if ((msa).state_check_buff) xfree((msa).state_check_buff);\
- }\
-} while(0)
-#else
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num)
#define MATCH_ARG_FREE(msa) if ((msa).stack_p) xfree((msa).stack_p)
-#endif
#define ALLOCA_PTR_NUM_LIMIT 50
@@ -391,26 +885,28 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
if (msa->stack_p) {\
is_alloca = 0;\
alloc_base = msa->stack_p;\
- stk_base = (OnigStackType* )(alloc_base\
- + (sizeof(OnigStackIndex) * msa->ptr_num));\
+ stk_base = (StackType* )(alloc_base\
+ + (sizeof(StackIndex) * msa->ptr_num));\
stk = stk_base;\
stk_end = stk_base + msa->stack_n;\
}\
else if (msa->ptr_num > ALLOCA_PTR_NUM_LIMIT) {\
is_alloca = 0;\
- alloc_base = (char* )xmalloc(sizeof(OnigStackIndex) * msa->ptr_num\
- + sizeof(OnigStackType) * (stack_num));\
- stk_base = (OnigStackType* )(alloc_base\
- + (sizeof(OnigStackIndex) * msa->ptr_num));\
+ alloc_base = (char* )xmalloc(sizeof(StackIndex) * msa->ptr_num\
+ + sizeof(StackType) * (stack_num));\
+ CHECK_NULL_RETURN_MEMERR(alloc_base);\
+ stk_base = (StackType* )(alloc_base\
+ + (sizeof(StackIndex) * msa->ptr_num));\
stk = stk_base;\
stk_end = stk_base + (stack_num);\
}\
else {\
is_alloca = 1;\
- alloc_base = (char* )xalloca(sizeof(OnigStackIndex) * msa->ptr_num\
- + sizeof(OnigStackType) * (stack_num));\
- stk_base = (OnigStackType* )(alloc_base\
- + (sizeof(OnigStackIndex) * msa->ptr_num));\
+ alloc_base = (char* )xalloca(sizeof(StackIndex) * msa->ptr_num\
+ + sizeof(StackType) * (stack_num));\
+ CHECK_NULL_RETURN_MEMERR(alloc_base);\
+ stk_base = (StackType* )(alloc_base\
+ + (sizeof(StackIndex) * msa->ptr_num));\
stk = stk_base;\
stk_end = stk_base + (stack_num);\
}\
@@ -418,11 +914,12 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
#define STACK_SAVE do{\
- msa->stack_n = stk_end - stk_base;\
+ msa->stack_n = (int )(stk_end - stk_base);\
if (is_alloca != 0) {\
- size_t size = sizeof(OnigStackIndex) * msa->ptr_num \
- + sizeof(OnigStackType) * msa->stack_n;\
+ size_t size = sizeof(StackIndex) * msa->ptr_num \
+ + sizeof(StackType) * msa->stack_n;\
msa->stack_p = xmalloc(size);\
+ CHECK_NULL_RETURN_MEMERR(msa->stack_p);\
xmemcpy(msa->stack_p, alloc_base, size);\
}\
else {\
@@ -431,11 +928,9 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
} while(0)
#define UPDATE_FOR_STACK_REALLOC do{\
- repeat_stk = (OnigStackIndex* )alloc_base;\
- mem_start_stk = (OnigStackIndex* )(repeat_stk + reg->num_repeat);\
- mem_end_stk = mem_start_stk + num_mem;\
- mem_start_stk--; /* for index start from 1 */\
- mem_end_stk--; /* for index start from 1 */\
+ repeat_stk = (StackIndex* )alloc_base;\
+ mem_start_stk = (StackIndex* )(repeat_stk + reg->num_repeat);\
+ mem_end_stk = mem_start_stk + num_mem + 1;\
} while(0)
static unsigned int MatchStackLimitSize = DEFAULT_MATCH_STACK_LIMIT_SIZE;
@@ -453,11 +948,47 @@ onig_set_match_stack_limit_size(unsigned int size)
return 0;
}
+#ifdef USE_TRY_IN_MATCH_LIMIT
+
+static unsigned long TryInMatchLimit = DEFAULT_TRY_IN_MATCH_LIMIT;
+
+#define CHECK_TRY_IN_MATCH_LIMIT do {\
+ if (try_in_match_counter++ > TryInMatchLimit) goto try_in_match_limit_over;\
+} while (0)
+
+#else
+
+#define CHECK_TRY_IN_MATCH_LIMIT
+
+#endif /* USE_TRY_IN_MATCH_LIMIT */
+
+extern unsigned long
+onig_get_try_in_match_limit(void)
+{
+#ifdef USE_TRY_IN_MATCH_LIMIT
+ return TryInMatchLimit;
+#else
+ //return ONIG_NO_SUPPORT_CONFIG;
+ return 0;
+#endif
+}
+
+extern int
+onig_set_try_in_match_limit(unsigned long size)
+{
+#ifdef USE_TRY_IN_MATCH_LIMIT
+ TryInMatchLimit = size;
+ return 0;
+#else
+ return ONIG_NO_SUPPORT_CONFIG;
+#endif
+}
+
+
static int
stack_double(int is_alloca, char** arg_alloc_base,
- OnigStackType** arg_stk_base,
- OnigStackType** arg_stk_end, OnigStackType** arg_stk,
- OnigMatchArg* msa)
+ StackType** arg_stk_base, StackType** arg_stk_end, StackType** arg_stk,
+ MatchArg* msa)
{
unsigned int n;
int used;
@@ -465,17 +996,17 @@ stack_double(int is_alloca, char** arg_alloc_base,
size_t new_size;
char* alloc_base;
char* new_alloc_base;
- OnigStackType *stk_base, *stk_end, *stk;
+ StackType *stk_base, *stk_end, *stk;
alloc_base = *arg_alloc_base;
stk_base = *arg_stk_base;
stk_end = *arg_stk_end;
stk = *arg_stk;
- n = stk_end - stk_base;
- size = sizeof(OnigStackIndex) * msa->ptr_num + sizeof(OnigStackType) * n;
+ n = (unsigned int )(stk_end - stk_base);
+ size = sizeof(StackIndex) * msa->ptr_num + sizeof(StackType) * n;
n *= 2;
- new_size = sizeof(OnigStackIndex) * msa->ptr_num + sizeof(OnigStackType) * n;
+ new_size = sizeof(StackIndex) * msa->ptr_num + sizeof(StackType) * n;
if (is_alloca != 0) {
new_alloc_base = (char* )xmalloc(new_size);
if (IS_NULL(new_alloc_base)) {
@@ -499,19 +1030,18 @@ stack_double(int is_alloca, char** arg_alloc_base,
}
alloc_base = new_alloc_base;
- used = stk - stk_base;
+ used = (int )(stk - stk_base);
*arg_alloc_base = alloc_base;
- *arg_stk_base = (OnigStackType* )(alloc_base
- + (sizeof(OnigStackIndex) * msa->ptr_num));
+ *arg_stk_base = (StackType* )(alloc_base
+ + (sizeof(StackIndex) * msa->ptr_num));
*arg_stk = *arg_stk_base + used;
*arg_stk_end = *arg_stk_base + n;
return 0;
}
-#define STACK_ENSURE(n) do {\
- if (stk_end - stk < (n)) {\
- int r = stack_double(is_alloca, &alloc_base, &stk_base, &stk_end, &stk,\
- msa);\
+#define STACK_ENSURE(n) do {\
+ if ((int )(stk_end - stk) < (n)) {\
+ int r = stack_double(is_alloca, &alloc_base, &stk_base, &stk_end, &stk, msa);\
if (r != 0) { STACK_SAVE; return r; } \
is_alloca = 0;\
UPDATE_FOR_STACK_REALLOC;\
@@ -529,92 +1059,51 @@ stack_double(int is_alloca, char** arg_alloc_base,
#define IS_TO_VOID_TARGET(stk) (((stk)->type & STK_MASK_TO_VOID_TARGET) != 0)
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
-#define STATE_CHECK_POS(s,snum) \
- (((s) - str) * num_comb_exp_check + ((snum) - 1))
-#define STATE_CHECK_VAL(v,snum) do {\
- if (state_check_buff != NULL) {\
- int x = STATE_CHECK_POS(s,snum);\
- (v) = state_check_buff[x/8] & (1<<(x%8));\
- }\
- else (v) = 0;\
-} while(0)
-
-
-#define ELSE_IF_STATE_CHECK_MARK(stk) \
- else if ((stk)->type == STK_STATE_CHECK_MARK) { \
- int x = STATE_CHECK_POS(stk->u.state.pstr, stk->u.state.state_check);\
- state_check_buff[x/8] |= (1<<(x%8)); \
- }
-
#define STACK_PUSH(stack_type,pat,s,sprev) do {\
STACK_ENSURE(1);\
stk->type = (stack_type);\
stk->u.state.pcode = (pat);\
stk->u.state.pstr = (s);\
stk->u.state.pstr_prev = (sprev);\
- stk->u.state.state_check = 0;\
STACK_INC;\
} while(0)
#define STACK_PUSH_ENSURED(stack_type,pat) do {\
stk->type = (stack_type);\
stk->u.state.pcode = (pat);\
- stk->u.state.state_check = 0;\
STACK_INC;\
} while(0)
-#define STACK_PUSH_ALT_WITH_STATE_CHECK(pat,s,sprev,snum) do {\
- STACK_ENSURE(1);\
- stk->type = STK_ALT;\
- stk->u.state.pcode = (pat);\
- stk->u.state.pstr = (s);\
- stk->u.state.pstr_prev = (sprev);\
- stk->u.state.state_check = ((state_check_buff != NULL) ? (snum) : 0);\
- STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_STATE_CHECK(s,snum) do {\
- if (state_check_buff != NULL) {\
- STACK_ENSURE(1);\
- stk->type = STK_STATE_CHECK_MARK;\
- stk->u.state.pstr = (s);\
- stk->u.state.state_check = (snum);\
- STACK_INC;\
- }\
-} while(0)
-
-#else /* USE_COMBINATION_EXPLOSION_CHECK */
-
-#define ELSE_IF_STATE_CHECK_MARK(stk)
-
-#define STACK_PUSH(stack_type,pat,s,sprev) do {\
- STACK_ENSURE(1);\
+#ifdef ONIG_DEBUG_MATCH
+#define STACK_PUSH_BOTTOM(stack_type,pat) do {\
stk->type = (stack_type);\
- stk->u.state.pcode = (pat);\
- stk->u.state.pstr = (s);\
- stk->u.state.pstr_prev = (sprev);\
+ stk->u.state.pcode = (pat);\
+ stk->u.state.pstr = s;\
+ stk->u.state.pstr_prev = sprev;\
STACK_INC;\
-} while(0)
-
-#define STACK_PUSH_ENSURED(stack_type,pat) do {\
+} while (0)
+#else
+#define STACK_PUSH_BOTTOM(stack_type,pat) do {\
stk->type = (stack_type);\
stk->u.state.pcode = (pat);\
STACK_INC;\
-} while(0)
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */
-
-#define STACK_PUSH_ALT(pat,s,sprev) STACK_PUSH(STK_ALT,pat,s,sprev)
-#define STACK_PUSH_POS(s,sprev) STACK_PUSH(STK_POS,NULL_UCHARP,s,sprev)
-#define STACK_PUSH_POS_NOT(pat,s,sprev) STACK_PUSH(STK_POS_NOT,pat,s,sprev)
-#define STACK_PUSH_STOP_BT STACK_PUSH_TYPE(STK_STOP_BT)
-#define STACK_PUSH_LOOK_BEHIND_NOT(pat,s,sprev) \
- STACK_PUSH(STK_LOOK_BEHIND_NOT,pat,s,sprev)
+} while (0)
+#endif
-#define STACK_PUSH_REPEAT(id, pat) do {\
+#define STACK_PUSH_ALT(pat,s,sprev) STACK_PUSH(STK_ALT,pat,s,sprev)
+#define STACK_PUSH_SUPER_ALT(pat,s,sprev) STACK_PUSH(STK_SUPER_ALT,pat,s,sprev)
+#define STACK_PUSH_POS(s,sprev) \
+ STACK_PUSH(STK_TO_VOID_START,NULL_UCHARP,s,sprev)
+#define STACK_PUSH_ALT_PREC_READ_NOT(pat,s,sprev) \
+ STACK_PUSH(STK_ALT_PREC_READ_NOT,pat,s,sprev)
+#define STACK_PUSH_TO_VOID_START STACK_PUSH_TYPE(STK_TO_VOID_START)
+#define STACK_PUSH_ALT_LOOK_BEHIND_NOT(pat,s,sprev) \
+ STACK_PUSH(STK_ALT_LOOK_BEHIND_NOT,pat,s,sprev)
+
+#define STACK_PUSH_REPEAT(sid, pat) do {\
STACK_ENSURE(1);\
stk->type = STK_REPEAT;\
- stk->u.repeat.num = (id);\
+ stk->id = (sid);\
stk->u.repeat.pcode = (pat);\
stk->u.repeat.count = 0;\
STACK_INC;\
@@ -630,7 +1119,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
#define STACK_PUSH_MEM_START(mnum, s) do {\
STACK_ENSURE(1);\
stk->type = STK_MEM_START;\
- stk->u.mem.num = (mnum);\
+ stk->id = (mnum);\
stk->u.mem.pstr = (s);\
stk->u.mem.start = mem_start_stk[mnum];\
stk->u.mem.end = mem_end_stk[mnum];\
@@ -642,7 +1131,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
#define STACK_PUSH_MEM_END(mnum, s) do {\
STACK_ENSURE(1);\
stk->type = STK_MEM_END;\
- stk->u.mem.num = (mnum);\
+ stk->id = (mnum);\
stk->u.mem.pstr = (s);\
stk->u.mem.start = mem_start_stk[mnum];\
stk->u.mem.end = mem_end_stk[mnum];\
@@ -653,7 +1142,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
#define STACK_PUSH_MEM_END_MARK(mnum) do {\
STACK_ENSURE(1);\
stk->type = STK_MEM_END_MARK;\
- stk->u.mem.num = (mnum);\
+ stk->id = (mnum);\
STACK_INC;\
} while(0)
@@ -663,10 +1152,10 @@ stack_double(int is_alloca, char** arg_alloc_base,
while (k > stk_base) {\
k--;\
if ((k->type & STK_MASK_MEM_END_OR_MARK) != 0 \
- && k->u.mem.num == (mnum)) {\
+ && k->id == (mnum)) {\
level++;\
}\
- else if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\
+ else if (k->type == STK_MEM_START && k->id == (mnum)) {\
if (level == 0) break;\
level--;\
}\
@@ -691,18 +1180,18 @@ stack_double(int is_alloca, char** arg_alloc_base,
}\
} while(0)
-#define STACK_PUSH_NULL_CHECK_START(cnum, s) do {\
+#define STACK_PUSH_EMPTY_CHECK_START(cnum, s) do {\
STACK_ENSURE(1);\
- stk->type = STK_NULL_CHECK_START;\
- stk->u.null_check.num = (cnum);\
- stk->u.null_check.pstr = (s);\
+ stk->type = STK_EMPTY_CHECK_START;\
+ stk->id = (cnum);\
+ stk->u.empty_check.pstr = (s);\
STACK_INC;\
} while(0)
-#define STACK_PUSH_NULL_CHECK_END(cnum) do {\
+#define STACK_PUSH_EMPTY_CHECK_END(cnum) do {\
STACK_ENSURE(1);\
- stk->type = STK_NULL_CHECK_END;\
- stk->u.null_check.num = (cnum);\
+ stk->type = STK_EMPTY_CHECK_END;\
+ stk->id = (cnum);\
STACK_INC;\
} while(0)
@@ -719,6 +1208,97 @@ stack_double(int is_alloca, char** arg_alloc_base,
STACK_INC;\
} while(0)
+#define STACK_PUSH_SAVE_VAL(sid, stype, sval) do {\
+ STACK_ENSURE(1);\
+ stk->type = STK_SAVE_VAL;\
+ stk->id = (sid);\
+ stk->u.val.type = (stype);\
+ stk->u.val.v = (UChar* )(sval);\
+ STACK_INC;\
+} while(0)
+
+#define STACK_PUSH_SAVE_VAL_WITH_SPREV(sid, stype, sval) do {\
+ STACK_ENSURE(1);\
+ stk->type = STK_SAVE_VAL;\
+ stk->id = (sid);\
+ stk->u.val.type = (stype);\
+ stk->u.val.v = (UChar* )(sval);\
+ stk->u.val.v2 = sprev;\
+ STACK_INC;\
+} while(0)
+
+#define STACK_GET_SAVE_VAL_TYPE_LAST(stype, sval) do {\
+ StackType *k = stk;\
+ while (k > stk_base) {\
+ k--;\
+ STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST"); \
+ if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)) {\
+ (sval) = k->u.val.v;\
+ break;\
+ }\
+ }\
+} while (0)
+
+#define STACK_GET_SAVE_VAL_TYPE_LAST_ID(stype, sid, sval) do { \
+ int level = 0;\
+ StackType *k = stk;\
+ while (k > stk_base) {\
+ k--;\
+ STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST_ID"); \
+ if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)\
+ && k->id == (sid)) {\
+ if (level == 0) {\
+ (sval) = k->u.val.v;\
+ break;\
+ }\
+ }\
+ else if (k->type == STK_CALL_FRAME)\
+ level--;\
+ else if (k->type == STK_RETURN)\
+ level++;\
+ }\
+} while (0)
+
+#define STACK_GET_SAVE_VAL_TYPE_LAST_ID_WITH_SPREV(stype, sid, sval) do { \
+ int level = 0;\
+ StackType *k = stk;\
+ while (k > stk_base) {\
+ k--;\
+ STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST_ID"); \
+ if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)\
+ && k->id == (sid)) {\
+ if (level == 0) {\
+ (sval) = k->u.val.v;\
+ sprev = k->u.val.v2;\
+ break;\
+ }\
+ }\
+ else if (k->type == STK_CALL_FRAME)\
+ level--;\
+ else if (k->type == STK_RETURN)\
+ level++;\
+ }\
+} while (0)
+
+#define STACK_GET_SAVE_VAL_TYPE_LAST_ID_FROM(stype, sid, sval, stk_from) do { \
+ int level = 0;\
+ StackType *k = (stk_from);\
+ while (k > stk_base) {\
+ STACK_BASE_CHECK(k, "STACK_GET_SAVE_VAL_TYPE_LAST_ID_FROM"); \
+ if (k->type == STK_SAVE_VAL && k->u.val.type == (stype)\
+ && k->u.val.id == (sid)) {\
+ if (level == 0) {\
+ (sval) = k->u.val.v;\
+ break;\
+ }\
+ }\
+ else if (k->type == STK_CALL_FRAME)\
+ level--;\
+ else if (k->type == STK_RETURN)\
+ level++;\
+ k--;\
+ }\
+} while (0)
#ifdef ONIG_DEBUG
#define STACK_BASE_CHECK(p, at) \
@@ -742,7 +1322,6 @@ stack_double(int is_alloca, char** arg_alloc_base,
stk--;\
STACK_BASE_CHECK(stk, "STACK_POP"); \
if ((stk->type & STK_MASK_POP_USED) != 0) break;\
- ELSE_IF_STATE_CHECK_MARK(stk);\
}\
break;\
case STACK_POP_LEVEL_MEM_START:\
@@ -751,10 +1330,9 @@ stack_double(int is_alloca, char** arg_alloc_base,
STACK_BASE_CHECK(stk, "STACK_POP 2"); \
if ((stk->type & STK_MASK_POP_USED) != 0) break;\
else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
+ mem_start_stk[stk->id] = stk->u.mem.start;\
+ mem_end_stk[stk->id] = stk->u.mem.end;\
}\
- ELSE_IF_STATE_CHECK_MARK(stk);\
}\
break;\
default:\
@@ -763,135 +1341,97 @@ stack_double(int is_alloca, char** arg_alloc_base,
STACK_BASE_CHECK(stk, "STACK_POP 3"); \
if ((stk->type & STK_MASK_POP_USED) != 0) break;\
else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
+ mem_start_stk[stk->id] = stk->u.mem.start;\
+ mem_end_stk[stk->id] = stk->u.mem.end;\
}\
else if (stk->type == STK_REPEAT_INC) {\
STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
}\
else if (stk->type == STK_MEM_END) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
+ mem_start_stk[stk->id] = stk->u.mem.start;\
+ mem_end_stk[stk->id] = stk->u.mem.end;\
}\
- ELSE_IF_STATE_CHECK_MARK(stk);\
}\
break;\
}\
} while(0)
-#define STACK_POP_TIL_POS_NOT do {\
+#define STACK_POP_TIL_ALT_PREC_READ_NOT do {\
while (1) {\
stk--;\
- STACK_BASE_CHECK(stk, "STACK_POP_TIL_POS_NOT"); \
- if (stk->type == STK_POS_NOT) break;\
+ STACK_BASE_CHECK(stk, "STACK_POP_TIL_ALT_PREC_READ_NOT"); \
+ if (stk->type == STK_ALT_PREC_READ_NOT) break;\
else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
+ mem_start_stk[stk->id] = stk->u.mem.start;\
+ mem_end_stk[stk->id] = stk->u.mem.end;\
}\
else if (stk->type == STK_REPEAT_INC) {\
STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
}\
else if (stk->type == STK_MEM_END) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
+ mem_start_stk[stk->id] = stk->u.mem.start;\
+ mem_end_stk[stk->id] = stk->u.mem.end;\
}\
- ELSE_IF_STATE_CHECK_MARK(stk);\
}\
} while(0)
-#define STACK_POP_TIL_LOOK_BEHIND_NOT do {\
+#define STACK_POP_TIL_ALT_LOOK_BEHIND_NOT do {\
while (1) {\
stk--;\
- STACK_BASE_CHECK(stk, "STACK_POP_TIL_LOOK_BEHIND_NOT"); \
- if (stk->type == STK_LOOK_BEHIND_NOT) break;\
+ STACK_BASE_CHECK(stk, "STACK_POP_TIL_ALT_LOOK_BEHIND_NOT"); \
+ if (stk->type == STK_ALT_LOOK_BEHIND_NOT) break;\
else if (stk->type == STK_MEM_START) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
+ mem_start_stk[stk->id] = stk->u.mem.start;\
+ mem_end_stk[stk->id] = stk->u.mem.end;\
}\
else if (stk->type == STK_REPEAT_INC) {\
STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
}\
else if (stk->type == STK_MEM_END) {\
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\
+ mem_start_stk[stk->id] = stk->u.mem.start;\
+ mem_end_stk[stk->id] = stk->u.mem.end;\
}\
- ELSE_IF_STATE_CHECK_MARK(stk);\
}\
} while(0)
-#define STACK_POS_END(k) do {\
+#define STACK_EXEC_TO_VOID(k) do {\
k = stk;\
while (1) {\
k--;\
- STACK_BASE_CHECK(k, "STACK_POS_END"); \
- if (IS_TO_VOID_TARGET(k)) {\
- k->type = STK_VOID;\
- }\
- else if (k->type == STK_POS) {\
- k->type = STK_VOID;\
- break;\
- }\
- }\
-} while(0)
-
-#define STACK_STOP_BT_END do {\
- OnigStackType *k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k, "STACK_STOP_BT_END"); \
+ STACK_BASE_CHECK(k, "STACK_EXEC_TO_VOID"); \
if (IS_TO_VOID_TARGET(k)) {\
k->type = STK_VOID;\
}\
- else if (k->type == STK_STOP_BT) {\
+ else if (k->type == STK_TO_VOID_START) {\
k->type = STK_VOID;\
break;\
}\
}\
} while(0)
-#define STACK_NULL_CHECK(isnull,id,s) do {\
- OnigStackType* k = stk;\
+#define STACK_EMPTY_CHECK(isnull,sid,s) do {\
+ StackType* k = stk;\
while (1) {\
k--;\
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK"); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
- (isnull) = (k->u.null_check.pstr == (s));\
+ STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK"); \
+ if (k->type == STK_EMPTY_CHECK_START) {\
+ if (k->id == (sid)) {\
+ (isnull) = (k->u.empty_check.pstr == (s));\
break;\
}\
}\
}\
} while(0)
-#define STACK_NULL_CHECK_REC(isnull,id,s) do {\
- int level = 0;\
- OnigStackType* k = stk;\
- while (1) {\
- k--;\
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK_REC"); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
- if (level == 0) {\
- (isnull) = (k->u.null_check.pstr == (s));\
- break;\
- }\
- else level--;\
- }\
- }\
- else if (k->type == STK_NULL_CHECK_END) {\
- level++;\
- }\
- }\
-} while(0)
-
-#define STACK_NULL_CHECK_MEMST(isnull,id,s,reg) do {\
- OnigStackType* k = stk;\
+#ifdef USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT
+#define STACK_EMPTY_CHECK_MEMST(isnull,sid,s,reg) do {\
+ StackType* k = stk;\
while (1) {\
k--;\
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST"); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
- if (k->u.null_check.pstr != (s)) {\
+ STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK_MEMST"); \
+ if (k->type == STK_EMPTY_CHECK_START) {\
+ if (k->id == (sid)) {\
+ if (k->u.empty_check.pstr != (s)) {\
(isnull) = 0;\
break;\
}\
@@ -903,10 +1443,11 @@ stack_double(int is_alloca, char** arg_alloc_base,
if (k->u.mem.end == INVALID_STACK_INDEX) {\
(isnull) = 0; break;\
}\
- if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\
+ if (MEM_STATUS_AT(reg->bt_mem_end, k->id))\
endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\
else\
endp = (UChar* )k->u.mem.end;\
+ /*fprintf(stderr, "num: %d, pstr: %p, endp: %p\n", k->u.mem.num, STACK_AT(k->u.mem.start)->u.mem.pstr, endp);*/ \
if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\
(isnull) = 0; break;\
}\
@@ -916,23 +1457,23 @@ stack_double(int is_alloca, char** arg_alloc_base,
}\
k++;\
}\
- break;\
+ break;\
}\
}\
}\
}\
} while(0)
-#define STACK_NULL_CHECK_MEMST_REC(isnull,id,s,reg) do {\
+#define STACK_EMPTY_CHECK_MEMST_REC(isnull,sid,s,reg) do {\
int level = 0;\
- OnigStackType* k = stk;\
+ StackType* k = stk;\
while (1) {\
k--;\
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST_REC"); \
- if (k->type == STK_NULL_CHECK_START) {\
- if (k->u.null_check.num == (id)) {\
+ STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK_MEMST_REC"); \
+ if (k->type == STK_EMPTY_CHECK_START) {\
+ if (k->id == (sid)) {\
if (level == 0) {\
- if (k->u.null_check.pstr != (s)) {\
+ if (k->u.empty_check.pstr != (s)) {\
(isnull) = 0;\
break;\
}\
@@ -944,7 +1485,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
if (k->u.mem.end == INVALID_STACK_INDEX) {\
(isnull) = 0; break;\
}\
- if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\
+ if (MEM_STATUS_AT(reg->bt_mem_end, k->id))\
endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\
else\
endp = (UChar* )k->u.mem.end;\
@@ -957,7 +1498,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
}\
k++;\
}\
- break;\
+ break;\
}\
}\
else {\
@@ -965,13 +1506,35 @@ stack_double(int is_alloca, char** arg_alloc_base,
}\
}\
}\
- else if (k->type == STK_NULL_CHECK_END) {\
- if (k->u.null_check.num == (id)) level++;\
+ else if (k->type == STK_EMPTY_CHECK_END) {\
+ if (k->id == (sid)) level++;\
+ }\
+ }\
+} while(0)
+#else
+#define STACK_EMPTY_CHECK_REC(isnull,id,s) do {\
+ int level = 0;\
+ StackType* k = stk;\
+ while (1) {\
+ k--;\
+ STACK_BASE_CHECK(k, "STACK_EMPTY_CHECK_REC"); \
+ if (k->type == STK_EMPTY_CHECK_START) {\
+ if (k->u.empty_check.num == (id)) {\
+ if (level == 0) {\
+ (isnull) = (k->u.empty_check.pstr == (s));\
+ break;\
+ }\
+ }\
+ level--;\
+ }\
+ else if (k->type == STK_EMPTY_CHECK_END) {\
+ level++;\
}\
}\
} while(0)
+#endif /* USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT */
-#define STACK_GET_REPEAT(id, k) do {\
+#define STACK_GET_REPEAT(sid, k) do {\
int level = 0;\
k = stk;\
while (1) {\
@@ -979,7 +1542,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
STACK_BASE_CHECK(k, "STACK_GET_REPEAT"); \
if (k->type == STK_REPEAT) {\
if (level == 0) {\
- if (k->u.repeat.num == (id)) {\
+ if (k->id == (sid)) {\
break;\
}\
}\
@@ -991,7 +1554,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
#define STACK_RETURN(addr) do {\
int level = 0;\
- OnigStackType* k = stk;\
+ StackType* k = stk;\
while (1) {\
k--;\
STACK_BASE_CHECK(k, "STACK_RETURN"); \
@@ -1020,7 +1583,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
} while(0)
static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
- UChar* s1, UChar** ps2, int mblen)
+ UChar* s1, UChar** ps2, int mblen)
{
UChar buf1[ONIGENC_MBC_CASE_FOLD_MAXLEN];
UChar buf2[ONIGENC_MBC_CASE_FOLD_MAXLEN];
@@ -1065,33 +1628,32 @@ static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
#define IS_EMPTY_STR (str == end)
-#define ON_STR_BEGIN(s) ((s) == str)
-#define ON_STR_END(s) ((s) == end)
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
+#define ON_STR_BEGIN(s) ((s) == str)
+#define ON_STR_END(s) ((s) == end)
#define DATA_ENSURE_CHECK1 (s < right_range)
#define DATA_ENSURE_CHECK(n) (s + (n) <= right_range)
#define DATA_ENSURE(n) if (s + (n) > right_range) goto fail
-#else
-#define DATA_ENSURE_CHECK1 (s < end)
-#define DATA_ENSURE_CHECK(n) (s + (n) <= end)
-#define DATA_ENSURE(n) if (s + (n) > end) goto fail
-#endif /* USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE */
+#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
+#define INIT_RIGHT_RANGE right_range = (UChar* )in_right_range
+#else
+#define INIT_RIGHT_RANGE right_range = (UChar* )end
+#endif
#ifdef USE_CAPTURE_HISTORY
static int
-make_capture_history_tree(OnigCaptureTreeNode* node, OnigStackType** kp,
- OnigStackType* stk_top, UChar* str, regex_t* reg)
+make_capture_history_tree(OnigCaptureTreeNode* node, StackType** kp,
+ StackType* stk_top, UChar* str, regex_t* reg)
{
int n, r;
OnigCaptureTreeNode* child;
- OnigStackType* k = *kp;
+ StackType* k = *kp;
while (k < stk_top) {
if (k->type == STK_MEM_START) {
- n = k->u.mem.num;
+ n = k->id;
if (n <= ONIG_MAX_CAPTURE_HISTORY_GROUP &&
- BIT_STATUS_AT(reg->capture_history, n) != 0) {
+ MEM_STATUS_AT(reg->capture_history, n) != 0) {
child = history_node_new();
CHECK_NULL_RETURN_MEMERR(child);
child->group = n;
@@ -1107,7 +1669,7 @@ make_capture_history_tree(OnigCaptureTreeNode* node, OnigStackType** kp,
}
}
else if (k->type == STK_MEM_END) {
- if (k->u.mem.num == node->group) {
+ if (k->id == node->group) {
node->end = (int )(k->u.mem.pstr - str);
*kp = k;
return 0;
@@ -1133,14 +1695,16 @@ static int mem_is_in_memp(int mem, int num, UChar* memp)
return 0;
}
-static int backref_match_at_nested_level(regex_t* reg
- , OnigStackType* top, OnigStackType* stk_base
- , int ignore_case, int case_fold_flag
- , int nest, int mem_num, UChar* memp, UChar** s, const UChar* send)
+static int
+backref_match_at_nested_level(regex_t* reg,
+ StackType* top, StackType* stk_base,
+ int ignore_case, int case_fold_flag,
+ int nest, int mem_num, UChar* memp,
+ UChar** s, const UChar* send)
{
UChar *ss, *p, *pstart, *pend = NULL_UCHARP;
int level;
- OnigStackType* k;
+ StackType* k;
level = 0;
k = top;
@@ -1154,9 +1718,9 @@ static int backref_match_at_nested_level(regex_t* reg
}
else if (level == nest) {
if (k->type == STK_MEM_START) {
- if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) {
+ if (mem_is_in_memp(k->id, mem_num, memp)) {
pstart = k->u.mem.pstr;
- if (pend != NULL_UCHARP) {
+ if (IS_NOT_NULL(pend)) {
if (pend - pstart > send - *s) return 0; /* or goto next_mem; */
p = pstart;
ss = *s;
@@ -1178,7 +1742,7 @@ static int backref_match_at_nested_level(regex_t* reg
}
}
else if (k->type == STK_MEM_END) {
- if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) {
+ if (mem_is_in_memp(k->id, mem_num, memp)) {
pend = k->u.mem.pstr;
}
}
@@ -1188,6 +1752,37 @@ static int backref_match_at_nested_level(regex_t* reg
return 0;
}
+
+static int
+backref_check_at_nested_level(regex_t* reg,
+ StackType* top, StackType* stk_base,
+ int nest, int mem_num, UChar* memp)
+{
+ int level;
+ StackType* k;
+
+ level = 0;
+ k = top;
+ k--;
+ while (k >= stk_base) {
+ if (k->type == STK_CALL_FRAME) {
+ level--;
+ }
+ else if (k->type == STK_RETURN) {
+ level++;
+ }
+ else if (level == nest) {
+ if (k->type == STK_MEM_END) {
+ if (mem_is_in_memp(k->id, mem_num, memp)) {
+ return 1;
+ }
+ }
+ }
+ k--;
+ }
+
+ return 0;
+}
#endif /* USE_BACKREF_WITH_LEVEL */
@@ -1222,14 +1817,14 @@ static int OpCurr = OP_FINISH;
static int OpPrevTarget = OP_FAIL;
static int MaxStackDepth = 0;
-#define MOP_IN(opcode) do {\
+#define SOP_IN(opcode) do {\
if (opcode == OpPrevTarget) OpPrevCounter[OpCurr]++;\
OpCurr = opcode;\
OpCounter[opcode]++;\
GETTIME(ts);\
} while(0)
-#define MOP_OUT do {\
+#define SOP_OUT do {\
GETTIME(te);\
OpTime[OpCurr] += TIMEDIFF(te, ts);\
} while(0)
@@ -1253,9 +1848,9 @@ onig_print_statistics(FILE* f)
r = fprintf(f, " count prev time\n");
if (r < 0) return -1;
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {
+ for (i = 0; OpInfo[i].opcode >= 0; i++) {
r = fprintf(f, "%8d: %8d: %10ld: %s\n",
- OpCounter[i], OpPrevCounter[i], OpTime[i], OnigOpInfo[i].name);
+ OpCounter[i], OpPrevCounter[i], OpTime[i], OpInfo[i].name);
if (r < 0) return -1;
}
r = fprintf(f, "\nmax stack depth: %d\n", MaxStackDepth);
@@ -1273,8 +1868,8 @@ onig_print_statistics(FILE* f)
#else
#define STACK_INC stk++
-#define MOP_IN(opcode)
-#define MOP_OUT
+#define SOP_IN(opcode)
+#define SOP_OUT
#endif
@@ -1291,9 +1886,9 @@ typedef struct {
static int
match_at(regex_t* reg, const UChar* str, const UChar* end,
#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
- const UChar* right_range,
+ const UChar* in_right_range,
#endif
- const UChar* sstart, UChar* sprev, OnigMatchArg* msa)
+ const UChar* sstart, UChar* sprev, MatchArg* msa)
{
static UChar FinishCode[] = { OP_FINISH };
@@ -1302,17 +1897,17 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
MemNumType mem;
RelAddrType addr;
UChar *s, *q, *sbegin;
+ UChar *right_range;
int is_alloca;
char *alloc_base;
- OnigStackType *stk_base, *stk, *stk_end;
- OnigStackType *stkp; /* used as any purpose. */
- OnigStackIndex si;
- OnigStackIndex *repeat_stk;
- OnigStackIndex *mem_start_stk, *mem_end_stk;
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- int scv;
- unsigned char* state_check_buff = msa->state_check_buff;
- int num_comb_exp_check = reg->num_comb_exp_check;
+ StackType *stk_base, *stk, *stk_end;
+ StackType *stkp; /* used as any purpose. */
+ StackIndex si;
+ StackIndex *repeat_stk;
+ StackIndex *mem_start_stk, *mem_end_stk;
+ UChar* keep;
+#ifdef USE_TRY_IN_MATCH_LIMIT
+ unsigned long try_in_match_counter;
#endif
UChar *p = reg->p;
OnigOptionType option = reg->options;
@@ -1329,21 +1924,32 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "match_at: str: %d, end: %d, start: %d, sprev: %d\n",
- (int )str, (int )end, (int )sstart, (int )sprev);
+ fprintf(stderr, "match_at: str: %p, end: %p, start: %p, sprev: %p\n",
+ str, end, sstart, sprev);
fprintf(stderr, "size: %d, start offset: %d\n",
- (int )(end - str), (int )(sstart - str));
+ (int )(end - str), (int )(sstart - str));
#endif
- STACK_PUSH_ENSURED(STK_ALT, FinishCode); /* bottom stack */
best_len = ONIG_MISMATCH;
- s = (UChar* )sstart;
+ keep = s = (UChar* )sstart;
+ STACK_PUSH_BOTTOM(STK_ALT, FinishCode); /* bottom stack */
+ INIT_RIGHT_RANGE;
+
+#ifdef USE_TRY_IN_MATCH_LIMIT
+ try_in_match_counter = 0;
+#endif
+
while (1) {
#ifdef ONIG_DEBUG_MATCH
{
+ static unsigned int counter = 1;
+
UChar *q, *bp, buf[50];
int len;
- fprintf(stderr, "%4d> \"", (int )(s - str));
+ fprintf(stderr, "%7u: %7ld: %4d> \"",
+ counter, GET_STACK_INDEX(stk), (int )(s - str));
+ counter++;
+
bp = buf;
for (i = 0, q = s; i < 7 && q < end; i++) {
len = enclen(encode, q);
@@ -1353,16 +1959,21 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
else { xmemcpy(bp, "\"", 1); bp += 1; }
*bp = 0;
fputs((char* )buf, stderr);
+
for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);
- onig_print_compiled_byte_code(stderr, p, NULL, encode);
+ if (p == FinishCode)
+ fprintf(stderr, "----: ");
+ else
+ fprintf(stderr, "%4d: ", (int )(p - reg->p));
+ onig_print_compiled_byte_code(stderr, p, NULL, reg->p, encode);
fprintf(stderr, "\n");
}
#endif
sbegin = s;
switch (*p++) {
- case OP_END: MOP_IN(OP_END);
- n = s - sstart;
+ case OP_END: SOP_IN(OP_END);
+ n = (int )(s - sstart);
if (n > best_len) {
OnigRegion* region;
#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
@@ -1378,22 +1989,25 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
best_len = n;
region = msa->region;
if (region) {
+ if (keep > s) keep = s;
+
#ifdef USE_POSIX_API_REGION_OPTION
if (IS_POSIX_REGION(msa->options)) {
posix_regmatch_t* rmt = (posix_regmatch_t* )region;
- rmt[0].rm_so = sstart - str;
- rmt[0].rm_eo = s - str;
+ rmt[0].rm_so = (regoff_t )(keep - str);
+ rmt[0].rm_eo = (regoff_t )(s - str);
for (i = 1; i <= num_mem; i++) {
if (mem_end_stk[i] != INVALID_STACK_INDEX) {
- if (BIT_STATUS_AT(reg->bt_mem_start, i))
- rmt[i].rm_so = STACK_AT(mem_start_stk[i])->u.mem.pstr - str;
+ if (MEM_STATUS_AT(reg->bt_mem_start, i))
+ rmt[i].rm_so = (regoff_t )(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);
else
- rmt[i].rm_so = (UChar* )((void* )(mem_start_stk[i])) - str;
+ rmt[i].rm_so = (regoff_t )((UChar* )((void* )(mem_start_stk[i])) - str);
- rmt[i].rm_eo = (BIT_STATUS_AT(reg->bt_mem_end, i)
- ? STACK_AT(mem_end_stk[i])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[i])) - str;
+ rmt[i].rm_eo = (regoff_t )((MEM_STATUS_AT(reg->bt_mem_end, i)
+ ? STACK_AT(mem_end_stk[i])->u.mem.pstr
+ : (UChar* )((void* )mem_end_stk[i]))
+ - str);
}
else {
rmt[i].rm_so = rmt[i].rm_eo = ONIG_REGION_NOTPOS;
@@ -1402,18 +2016,18 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
else {
#endif /* USE_POSIX_API_REGION_OPTION */
- region->beg[0] = sstart - str;
- region->end[0] = s - str;
+ region->beg[0] = (int )(keep - str);
+ region->end[0] = (int )(s - str);
for (i = 1; i <= num_mem; i++) {
if (mem_end_stk[i] != INVALID_STACK_INDEX) {
- if (BIT_STATUS_AT(reg->bt_mem_start, i))
- region->beg[i] = STACK_AT(mem_start_stk[i])->u.mem.pstr - str;
+ if (MEM_STATUS_AT(reg->bt_mem_start, i))
+ region->beg[i] = (int )(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);
else
- region->beg[i] = (UChar* )((void* )mem_start_stk[i]) - str;
+ region->beg[i] = (int )((UChar* )((void* )mem_start_stk[i]) - str);
- region->end[i] = (BIT_STATUS_AT(reg->bt_mem_end, i)
- ? STACK_AT(mem_end_stk[i])->u.mem.pstr
- : (UChar* )((void* )mem_end_stk[i])) - str;
+ region->end[i] = (int )((MEM_STATUS_AT(reg->bt_mem_end, i)
+ ? STACK_AT(mem_end_stk[i])->u.mem.pstr
+ : (UChar* )((void* )mem_end_stk[i])) - str);
}
else {
region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
@@ -1435,8 +2049,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
node->group = 0;
- node->beg = sstart - str;
- node->end = s - str;
+ node->beg = (int )(keep - str);
+ node->end = (int )(s - str);
stkp = stk_base;
r = make_capture_history_tree(region->history_root, &stkp,
@@ -1456,7 +2070,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
end_best_len:
#endif
- MOP_OUT;
+ SOP_OUT;
if (IS_FIND_CONDITION(option)) {
if (IS_FIND_NOT_EMPTY(option) && s == sstart) {
@@ -1472,14 +2086,14 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
goto finish;
break;
- case OP_EXACT1: MOP_IN(OP_EXACT1);
+ case OP_EXACT1: SOP_IN(OP_EXACT1);
DATA_ENSURE(1);
if (*p != *s) goto fail;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_EXACT1_IC: MOP_IN(OP_EXACT1_IC);
+ case OP_EXACT1_IC: SOP_IN(OP_EXACT1_IC);
{
int len;
UChar *q, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
@@ -1498,21 +2112,21 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p++; q++;
}
}
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_EXACT2: MOP_IN(OP_EXACT2);
+ case OP_EXACT2: SOP_IN(OP_EXACT2);
DATA_ENSURE(2);
if (*p != *s) goto fail;
p++; s++;
if (*p != *s) goto fail;
sprev = s;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACT3: MOP_IN(OP_EXACT3);
+ case OP_EXACT3: SOP_IN(OP_EXACT3);
DATA_ENSURE(3);
if (*p != *s) goto fail;
p++; s++;
@@ -1521,11 +2135,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
if (*p != *s) goto fail;
sprev = s;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACT4: MOP_IN(OP_EXACT4);
+ case OP_EXACT4: SOP_IN(OP_EXACT4);
DATA_ENSURE(4);
if (*p != *s) goto fail;
p++; s++;
@@ -1536,11 +2150,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
if (*p != *s) goto fail;
sprev = s;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACT5: MOP_IN(OP_EXACT5);
+ case OP_EXACT5: SOP_IN(OP_EXACT5);
DATA_ENSURE(5);
if (*p != *s) goto fail;
p++; s++;
@@ -1553,22 +2167,22 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
if (*p != *s) goto fail;
sprev = s;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACTN: MOP_IN(OP_EXACTN);
+ case OP_EXACTN: SOP_IN(OP_EXACTN);
GET_LENGTH_INC(tlen, p);
DATA_ENSURE(tlen);
while (tlen-- > 0) {
if (*p++ != *s++) goto fail;
}
sprev = s - 1;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACTN_IC: MOP_IN(OP_EXACTN_IC);
+ case OP_EXACTN_IC: SOP_IN(OP_EXACTN_IC);
{
int len;
UChar *q, *endp, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
@@ -1592,20 +2206,20 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACTMB2N1: MOP_IN(OP_EXACTMB2N1);
+ case OP_EXACTMB2N1: SOP_IN(OP_EXACTMB2N1);
DATA_ENSURE(2);
if (*p != *s) goto fail;
p++; s++;
if (*p != *s) goto fail;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_EXACTMB2N2: MOP_IN(OP_EXACTMB2N2);
+ case OP_EXACTMB2N2: SOP_IN(OP_EXACTMB2N2);
DATA_ENSURE(4);
if (*p != *s) goto fail;
p++; s++;
@@ -1616,11 +2230,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p++; s++;
if (*p != *s) goto fail;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACTMB2N3: MOP_IN(OP_EXACTMB2N3);
+ case OP_EXACTMB2N3: SOP_IN(OP_EXACTMB2N3);
DATA_ENSURE(6);
if (*p != *s) goto fail;
p++; s++;
@@ -1635,11 +2249,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p++; s++;
if (*p != *s) goto fail;
p++; s++;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACTMB2N: MOP_IN(OP_EXACTMB2N);
+ case OP_EXACTMB2N: SOP_IN(OP_EXACTMB2N);
GET_LENGTH_INC(tlen, p);
DATA_ENSURE(tlen * 2);
while (tlen-- > 0) {
@@ -1649,11 +2263,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p++; s++;
}
sprev = s - 2;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACTMB3N: MOP_IN(OP_EXACTMB3N);
+ case OP_EXACTMB3N: SOP_IN(OP_EXACTMB3N);
GET_LENGTH_INC(tlen, p);
DATA_ENSURE(tlen * 3);
while (tlen-- > 0) {
@@ -1665,11 +2279,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p++; s++;
}
sprev = s - 3;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_EXACTMBN: MOP_IN(OP_EXACTMBN);
+ case OP_EXACTMBN: SOP_IN(OP_EXACTMBN);
GET_LENGTH_INC(tlen, p); /* mb-len */
GET_LENGTH_INC(tlen2, p); /* string len */
tlen2 *= tlen;
@@ -1679,19 +2293,19 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p++; s++;
}
sprev = s - tlen;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_CCLASS: MOP_IN(OP_CCLASS);
+ case OP_CCLASS: SOP_IN(OP_CCLASS);
DATA_ENSURE(1);
if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail;
p += SIZE_BITSET;
s += enclen(encode, s); /* OP_CCLASS can match mb-code. \D, \S */
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_CCLASS_MB: MOP_IN(OP_CCLASS_MB);
+ case OP_CCLASS_MB: SOP_IN(OP_CCLASS_MB);
if (! ONIGENC_IS_MBC_HEAD(encode, s)) goto fail;
cclass_mb:
@@ -1717,10 +2331,10 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
#endif
}
p += tlen;
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_CCLASS_MIX: MOP_IN(OP_CCLASS_MIX);
+ case OP_CCLASS_MIX: SOP_IN(OP_CCLASS_MIX);
DATA_ENSURE(1);
if (ONIGENC_IS_MBC_HEAD(encode, s)) {
p += SIZE_BITSET;
@@ -1735,18 +2349,18 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p += tlen;
s++;
}
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_CCLASS_NOT: MOP_IN(OP_CCLASS_NOT);
+ case OP_CCLASS_NOT: SOP_IN(OP_CCLASS_NOT);
DATA_ENSURE(1);
if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail;
p += SIZE_BITSET;
s += enclen(encode, s);
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_CCLASS_MB_NOT: MOP_IN(OP_CCLASS_MB_NOT);
+ case OP_CCLASS_MB_NOT: SOP_IN(OP_CCLASS_MB_NOT);
DATA_ENSURE(1);
if (! ONIGENC_IS_MBC_HEAD(encode, s)) {
s++;
@@ -1784,10 +2398,10 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p += tlen;
cc_mb_not_success:
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_CCLASS_MIX_NOT: MOP_IN(OP_CCLASS_MIX_NOT);
+ case OP_CCLASS_MIX_NOT: SOP_IN(OP_CCLASS_MIX_NOT);
DATA_ENSURE(1);
if (ONIGENC_IS_MBC_HEAD(encode, s)) {
p += SIZE_BITSET;
@@ -1802,10 +2416,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p += tlen;
s++;
}
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_CCLASS_NODE: MOP_IN(OP_CCLASS_NODE);
+#ifdef USE_OP_CCLASS_NODE
+ case OP_CCLASS_NODE: SOP_IN(OP_CCLASS_NODE);
{
OnigCodePoint code;
void *node;
@@ -1821,27 +2436,28 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
code = ONIGENC_MBC_TO_CODE(encode, ss, s);
if (onig_is_code_in_cc_len(mb_len, code, node) == 0) goto fail;
}
- MOP_OUT;
+ SOP_OUT;
break;
+#endif
- case OP_ANYCHAR: MOP_IN(OP_ANYCHAR);
+ case OP_ANYCHAR: SOP_IN(OP_ANYCHAR);
DATA_ENSURE(1);
n = enclen(encode, s);
DATA_ENSURE(n);
if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;
s += n;
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_ANYCHAR_ML: MOP_IN(OP_ANYCHAR_ML);
+ case OP_ANYCHAR_ML: SOP_IN(OP_ANYCHAR_ML);
DATA_ENSURE(1);
n = enclen(encode, s);
DATA_ENSURE(n);
s += n;
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_ANYCHAR_STAR: MOP_IN(OP_ANYCHAR_STAR);
+ case OP_ANYCHAR_STAR: SOP_IN(OP_ANYCHAR_STAR);
while (DATA_ENSURE_CHECK1) {
STACK_PUSH_ALT(p, s, sprev);
n = enclen(encode, s);
@@ -1850,10 +2466,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
sprev = s;
s += n;
}
- MOP_OUT;
+ SOP_OUT;
+ continue;
break;
- case OP_ANYCHAR_ML_STAR: MOP_IN(OP_ANYCHAR_ML_STAR);
+ case OP_ANYCHAR_ML_STAR: SOP_IN(OP_ANYCHAR_ML_STAR);
while (DATA_ENSURE_CHECK1) {
STACK_PUSH_ALT(p, s, sprev);
n = enclen(encode, s);
@@ -1867,10 +2484,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
s++;
}
}
- MOP_OUT;
+ SOP_OUT;
+ continue;
break;
- case OP_ANYCHAR_STAR_PEEK_NEXT: MOP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);
+ case OP_ANYCHAR_STAR_PEEK_NEXT: SOP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);
while (DATA_ENSURE_CHECK1) {
if (*p == *s) {
STACK_PUSH_ALT(p + 1, s, sprev);
@@ -1882,10 +2500,10 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
s += n;
}
p++;
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_ANYCHAR_ML_STAR_PEEK_NEXT:MOP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT);
+ case OP_ANYCHAR_ML_STAR_PEEK_NEXT:SOP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT);
while (DATA_ENSURE_CHECK1) {
if (*p == *s) {
STACK_PUSH_ALT(p + 1, s, sprev);
@@ -1902,186 +2520,201 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
}
p++;
- MOP_OUT;
+ SOP_OUT;
break;
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- case OP_STATE_CHECK_ANYCHAR_STAR: MOP_IN(OP_STATE_CHECK_ANYCHAR_STAR);
- GET_STATE_CHECK_NUM_INC(mem, p);
- while (DATA_ENSURE_CHECK1) {
- STATE_CHECK_VAL(scv, mem);
- if (scv) goto fail;
+ case OP_WORD: SOP_IN(OP_WORD);
+ DATA_ENSURE(1);
+ if (! ONIGENC_IS_MBC_WORD(encode, s, end))
+ goto fail;
- STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem);
- n = enclen(encode, s);
- DATA_ENSURE(n);
- if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;
- sprev = s;
- s += n;
- }
- MOP_OUT;
+ s += enclen(encode, s);
+ SOP_OUT;
break;
- case OP_STATE_CHECK_ANYCHAR_ML_STAR:
- MOP_IN(OP_STATE_CHECK_ANYCHAR_ML_STAR);
-
- GET_STATE_CHECK_NUM_INC(mem, p);
- while (DATA_ENSURE_CHECK1) {
- STATE_CHECK_VAL(scv, mem);
- if (scv) goto fail;
+ case OP_WORD_ASCII: SOP_IN(OP_WORD_ASCII);
+ DATA_ENSURE(1);
+ if (! ONIGENC_IS_MBC_WORD_ASCII(encode, s, end))
+ goto fail;
- STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem);
- n = enclen(encode, s);
- if (n > 1) {
- DATA_ENSURE(n);
- sprev = s;
- s += n;
- }
- else {
- sprev = s;
- s++;
- }
- }
- MOP_OUT;
+ s += enclen(encode, s);
+ SOP_OUT;
break;
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */
- case OP_WORD: MOP_IN(OP_WORD);
+ case OP_NO_WORD: SOP_IN(OP_NO_WORD);
DATA_ENSURE(1);
- if (! ONIGENC_IS_MBC_WORD(encode, s, end))
+ if (ONIGENC_IS_MBC_WORD(encode, s, end))
goto fail;
s += enclen(encode, s);
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_NOT_WORD: MOP_IN(OP_NOT_WORD);
+ case OP_NO_WORD_ASCII: SOP_IN(OP_NO_WORD_ASCII);
DATA_ENSURE(1);
- if (ONIGENC_IS_MBC_WORD(encode, s, end))
+ if (ONIGENC_IS_MBC_WORD_ASCII(encode, s, end))
goto fail;
s += enclen(encode, s);
- MOP_OUT;
+ SOP_OUT;
break;
- case OP_WORD_BOUND: MOP_IN(OP_WORD_BOUND);
- if (ON_STR_BEGIN(s)) {
- DATA_ENSURE(1);
- if (! ONIGENC_IS_MBC_WORD(encode, s, end))
- goto fail;
- }
- else if (ON_STR_END(s)) {
- if (! ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
- }
- else {
- if (ONIGENC_IS_MBC_WORD(encode, s, end)
- == ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
+ case OP_WORD_BOUNDARY: SOP_IN(OP_WORD_BOUNDARY);
+ {
+ ModeType mode;
+ GET_MODE_INC(mode, p); // ascii_mode
+
+ if (ON_STR_BEGIN(s)) {
+ DATA_ENSURE(1);
+ if (! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))
+ goto fail;
+ }
+ else if (ON_STR_END(s)) {
+ if (! IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))
+ goto fail;
+ }
+ else {
+ if (IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)
+ == IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))
+ goto fail;
+ }
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_NOT_WORD_BOUND: MOP_IN(OP_NOT_WORD_BOUND);
- if (ON_STR_BEGIN(s)) {
- if (DATA_ENSURE_CHECK1 && ONIGENC_IS_MBC_WORD(encode, s, end))
- goto fail;
- }
- else if (ON_STR_END(s)) {
- if (ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
- }
- else {
- if (ONIGENC_IS_MBC_WORD(encode, s, end)
- != ONIGENC_IS_MBC_WORD(encode, sprev, end))
- goto fail;
+ case OP_NO_WORD_BOUNDARY: SOP_IN(OP_NO_WORD_BOUNDARY);
+ {
+ ModeType mode;
+ GET_MODE_INC(mode, p); // ascii_mode
+
+ if (ON_STR_BEGIN(s)) {
+ if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))
+ goto fail;
+ }
+ else if (ON_STR_END(s)) {
+ if (IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))
+ goto fail;
+ }
+ else {
+ if (IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)
+ != IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode))
+ goto fail;
+ }
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
#ifdef USE_WORD_BEGIN_END
- case OP_WORD_BEGIN: MOP_IN(OP_WORD_BEGIN);
- if (DATA_ENSURE_CHECK1 && ONIGENC_IS_MBC_WORD(encode, s, end)) {
- if (ON_STR_BEGIN(s) || !ONIGENC_IS_MBC_WORD(encode, sprev, end)) {
- MOP_OUT;
- continue;
+ case OP_WORD_BEGIN: SOP_IN(OP_WORD_BEGIN);
+ {
+ ModeType mode;
+ GET_MODE_INC(mode, p); // ascii_mode
+
+ if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {
+ if (ON_STR_BEGIN(s) || !IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {
+ SOP_OUT;
+ continue;
+ }
}
}
goto fail;
break;
- case OP_WORD_END: MOP_IN(OP_WORD_END);
- if (!ON_STR_BEGIN(s) && ONIGENC_IS_MBC_WORD(encode, sprev, end)) {
- if (ON_STR_END(s) || !ONIGENC_IS_MBC_WORD(encode, s, end)) {
- MOP_OUT;
- continue;
+ case OP_WORD_END: SOP_IN(OP_WORD_END);
+ {
+ ModeType mode;
+ GET_MODE_INC(mode, p); // ascii_mode
+
+ if (!ON_STR_BEGIN(s) && IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {
+ if (ON_STR_END(s) || ! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {
+ SOP_OUT;
+ continue;
+ }
}
}
goto fail;
break;
#endif
- case OP_BEGIN_BUF: MOP_IN(OP_BEGIN_BUF);
+ case OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ SOP_IN(OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
+ if (onigenc_egcb_is_break_position(encode, s, sprev, str, end)) {
+ SOP_OUT;
+ continue;
+ }
+ goto fail;
+ break;
+
+ case OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+ SOP_IN(OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
+ if (onigenc_egcb_is_break_position(encode, s, sprev, str, end))
+ goto fail;
+
+ SOP_OUT;
+ continue;
+ break;
+
+ case OP_BEGIN_BUF: SOP_IN(OP_BEGIN_BUF);
if (! ON_STR_BEGIN(s)) goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_END_BUF: MOP_IN(OP_END_BUF);
+ case OP_END_BUF: SOP_IN(OP_END_BUF);
if (! ON_STR_END(s)) goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_BEGIN_LINE: MOP_IN(OP_BEGIN_LINE);
+ case OP_BEGIN_LINE: SOP_IN(OP_BEGIN_LINE);
if (ON_STR_BEGIN(s)) {
if (IS_NOTBOL(msa->options)) goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
}
else if (ONIGENC_IS_MBC_NEWLINE(encode, sprev, end) && !ON_STR_END(s)) {
- MOP_OUT;
+ SOP_OUT;
continue;
}
goto fail;
break;
- case OP_END_LINE: MOP_IN(OP_END_LINE);
+ case OP_END_LINE: SOP_IN(OP_END_LINE);
if (ON_STR_END(s)) {
#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {
#endif
if (IS_NOTEOL(msa->options)) goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
}
#endif
}
else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) {
- MOP_OUT;
+ SOP_OUT;
continue;
}
#ifdef USE_CRNL_AS_LINE_TERMINATOR
else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {
- MOP_OUT;
+ SOP_OUT;
continue;
}
#endif
goto fail;
break;
- case OP_SEMI_END_BUF: MOP_IN(OP_SEMI_END_BUF);
+ case OP_SEMI_END_BUF: SOP_IN(OP_SEMI_END_BUF);
if (ON_STR_END(s)) {
#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {
#endif
if (IS_NOTEOL(msa->options)) goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
}
@@ -2089,7 +2722,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end) &&
ON_STR_END(s + enclen(encode, s))) {
- MOP_OUT;
+ SOP_OUT;
continue;
}
#ifdef USE_CRNL_AS_LINE_TERMINATOR
@@ -2097,7 +2730,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
UChar* ss = s + enclen(encode, s);
ss += enclen(encode, ss);
if (ON_STR_END(ss)) {
- MOP_OUT;
+ SOP_OUT;
continue;
}
}
@@ -2105,144 +2738,138 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
goto fail;
break;
- case OP_BEGIN_POSITION: MOP_IN(OP_BEGIN_POSITION);
+ case OP_BEGIN_POSITION: SOP_IN(OP_BEGIN_POSITION);
if (s != msa->start)
goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_MEMORY_START_PUSH: MOP_IN(OP_MEMORY_START_PUSH);
+ case OP_MEMORY_START_PUSH: SOP_IN(OP_MEMORY_START_PUSH);
GET_MEMNUM_INC(mem, p);
STACK_PUSH_MEM_START(mem, s);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_MEMORY_START: MOP_IN(OP_MEMORY_START);
+ case OP_MEMORY_START: SOP_IN(OP_MEMORY_START);
GET_MEMNUM_INC(mem, p);
- mem_start_stk[mem] = (OnigStackIndex )((void* )s);
- MOP_OUT;
+ mem_start_stk[mem] = (StackIndex )((void* )s);
+ SOP_OUT;
continue;
break;
- case OP_MEMORY_END_PUSH: MOP_IN(OP_MEMORY_END_PUSH);
+ case OP_MEMORY_END_PUSH: SOP_IN(OP_MEMORY_END_PUSH);
GET_MEMNUM_INC(mem, p);
STACK_PUSH_MEM_END(mem, s);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_MEMORY_END: MOP_IN(OP_MEMORY_END);
+ case OP_MEMORY_END: SOP_IN(OP_MEMORY_END);
GET_MEMNUM_INC(mem, p);
- mem_end_stk[mem] = (OnigStackIndex )((void* )s);
- MOP_OUT;
+ mem_end_stk[mem] = (StackIndex )((void* )s);
+ SOP_OUT;
continue;
break;
-#ifdef USE_SUBEXP_CALL
- case OP_MEMORY_END_PUSH_REC: MOP_IN(OP_MEMORY_END_PUSH_REC);
+#ifdef USE_CALL
+ case OP_MEMORY_END_PUSH_REC: SOP_IN(OP_MEMORY_END_PUSH_REC);
GET_MEMNUM_INC(mem, p);
STACK_GET_MEM_START(mem, stkp); /* should be before push mem-end. */
STACK_PUSH_MEM_END(mem, s);
mem_start_stk[mem] = GET_STACK_INDEX(stkp);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_MEMORY_END_REC: MOP_IN(OP_MEMORY_END_REC);
+ case OP_MEMORY_END_REC: SOP_IN(OP_MEMORY_END_REC);
GET_MEMNUM_INC(mem, p);
- mem_end_stk[mem] = (OnigStackIndex )((void* )s);
+ mem_end_stk[mem] = (StackIndex )((void* )s);
STACK_GET_MEM_START(mem, stkp);
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
+ if (MEM_STATUS_AT(reg->bt_mem_start, mem))
mem_start_stk[mem] = GET_STACK_INDEX(stkp);
else
- mem_start_stk[mem] = (OnigStackIndex )((void* )stkp->u.mem.pstr);
+ mem_start_stk[mem] = (StackIndex )((void* )stkp->u.mem.pstr);
STACK_PUSH_MEM_END_MARK(mem);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
#endif
- case OP_BACKREF1: MOP_IN(OP_BACKREF1);
+ case OP_BACKREF1: SOP_IN(OP_BACKREF1);
mem = 1;
goto backref;
break;
- case OP_BACKREF2: MOP_IN(OP_BACKREF2);
+ case OP_BACKREF2: SOP_IN(OP_BACKREF2);
mem = 2;
goto backref;
break;
- case OP_BACKREFN: MOP_IN(OP_BACKREFN);
+ case OP_BACKREF_N: SOP_IN(OP_BACKREF_N);
GET_MEMNUM_INC(mem, p);
backref:
{
int len;
UChar *pstart, *pend;
- /* if you want to remove following line,
- you should check in parse and compile time. */
- if (mem > num_mem) goto fail;
if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail;
if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
+ if (MEM_STATUS_AT(reg->bt_mem_start, mem))
pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
else
pstart = (UChar* )((void* )mem_start_stk[mem]);
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
+ pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)
? STACK_AT(mem_end_stk[mem])->u.mem.pstr
: (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
+ n = (int )(pend - pstart);
DATA_ENSURE(n);
sprev = s;
STRING_CMP(pstart, s, n);
while (sprev + (len = enclen(encode, sprev)) < s)
sprev += len;
- MOP_OUT;
+ SOP_OUT;
continue;
}
break;
- case OP_BACKREFN_IC: MOP_IN(OP_BACKREFN_IC);
+ case OP_BACKREF_N_IC: SOP_IN(OP_BACKREF_N_IC);
GET_MEMNUM_INC(mem, p);
{
int len;
UChar *pstart, *pend;
- /* if you want to remove following line,
- you should check in parse and compile time. */
- if (mem > num_mem) goto fail;
if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail;
if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
+ if (MEM_STATUS_AT(reg->bt_mem_start, mem))
pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
else
pstart = (UChar* )((void* )mem_start_stk[mem]);
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
+ pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)
? STACK_AT(mem_end_stk[mem])->u.mem.pstr
: (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
+ n = (int )(pend - pstart);
DATA_ENSURE(n);
sprev = s;
STRING_CMP_IC(case_fold_flag, pstart, &s, n);
while (sprev + (len = enclen(encode, sprev)) < s)
sprev += len;
- MOP_OUT;
+ SOP_OUT;
continue;
}
break;
- case OP_BACKREF_MULTI: MOP_IN(OP_BACKREF_MULTI);
+ case OP_BACKREF_MULTI: SOP_IN(OP_BACKREF_MULTI);
{
int len, is_fail;
UChar *pstart, *pend, *swork;
@@ -2254,15 +2881,15 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue;
if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
+ if (MEM_STATUS_AT(reg->bt_mem_start, mem))
pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
else
pstart = (UChar* )((void* )mem_start_stk[mem]);
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
+ pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)
? STACK_AT(mem_end_stk[mem])->u.mem.pstr
: (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
+ n = (int )(pend - pstart);
DATA_ENSURE(n);
sprev = s;
swork = s;
@@ -2276,12 +2903,12 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
break; /* success */
}
if (i == tlen) goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
}
break;
- case OP_BACKREF_MULTI_IC: MOP_IN(OP_BACKREF_MULTI_IC);
+ case OP_BACKREF_MULTI_IC: SOP_IN(OP_BACKREF_MULTI_IC);
{
int len, is_fail;
UChar *pstart, *pend, *swork;
@@ -2293,15 +2920,15 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue;
if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))
+ if (MEM_STATUS_AT(reg->bt_mem_start, mem))
pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;
else
pstart = (UChar* )((void* )mem_start_stk[mem]);
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)
+ pend = (MEM_STATUS_AT(reg->bt_mem_end, mem)
? STACK_AT(mem_end_stk[mem])->u.mem.pstr
: (UChar* )((void* )mem_end_stk[mem]));
- n = pend - pstart;
+ n = (int )(pend - pstart);
DATA_ENSURE(n);
sprev = s;
swork = s;
@@ -2315,7 +2942,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
break; /* success */
}
if (i == tlen) goto fail;
- MOP_OUT;
+ SOP_OUT;
continue;
}
break;
@@ -2342,47 +2969,85 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
else
goto fail;
- MOP_OUT;
+ SOP_OUT;
+ continue;
+ }
+ break;
+#endif
+
+ case OP_BACKREF_CHECK: SOP_IN(OP_BACKREF_CHECK);
+ {
+ GET_LENGTH_INC(tlen, p);
+ for (i = 0; i < tlen; i++) {
+ GET_MEMNUM_INC(mem, p);
+
+ if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue;
+ if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
+
+ p += (SIZE_MEMNUM * (tlen - i - 1));
+ break; /* success */
+ }
+ if (i == tlen) goto fail;
+ SOP_OUT;
+ continue;
+ }
+ break;
+
+#ifdef USE_BACKREF_WITH_LEVEL
+ case OP_BACKREF_CHECK_WITH_LEVEL:
+ {
+ LengthType level;
+
+ GET_LENGTH_INC(level, p);
+ GET_LENGTH_INC(tlen, p);
+
+ if (backref_check_at_nested_level(reg, stk, stk_base,
+ (int )level, (int )tlen, p) != 0) {
+ p += (SIZE_MEMNUM * tlen);
+ }
+ else
+ goto fail;
+
+ SOP_OUT;
continue;
}
break;
#endif
#if 0 /* no need: IS_DYNAMIC_OPTION() == 0 */
- case OP_SET_OPTION_PUSH: MOP_IN(OP_SET_OPTION_PUSH);
+ case OP_SET_OPTION_PUSH: SOP_IN(OP_SET_OPTION_PUSH);
GET_OPTION_INC(option, p);
STACK_PUSH_ALT(p, s, sprev);
p += SIZE_OP_SET_OPTION + SIZE_OP_FAIL;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_SET_OPTION: MOP_IN(OP_SET_OPTION);
+ case OP_SET_OPTION: SOP_IN(OP_SET_OPTION);
GET_OPTION_INC(option, p);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
#endif
- case OP_NULL_CHECK_START: MOP_IN(OP_NULL_CHECK_START);
+ case OP_EMPTY_CHECK_START: SOP_IN(OP_EMPTY_CHECK_START);
GET_MEMNUM_INC(mem, p); /* mem: null check id */
- STACK_PUSH_NULL_CHECK_START(mem, s);
- MOP_OUT;
+ STACK_PUSH_EMPTY_CHECK_START(mem, s);
+ SOP_OUT;
continue;
break;
- case OP_NULL_CHECK_END: MOP_IN(OP_NULL_CHECK_END);
+ case OP_EMPTY_CHECK_END: SOP_IN(OP_EMPTY_CHECK_END);
{
- int isnull;
+ int is_empty;
GET_MEMNUM_INC(mem, p); /* mem: null check id */
- STACK_NULL_CHECK(isnull, mem, s);
- if (isnull) {
+ STACK_EMPTY_CHECK(is_empty, mem, s);
+ if (is_empty) {
#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "NULL_CHECK_END: skip id:%d, s:%d\n",
- (int )mem, (int )s);
+ fprintf(stderr, "EMPTY_CHECK_END: skip id:%d, s:%p\n", (int )mem, s);
#endif
- null_check_found:
+ empty_check_found:
/* empty loop founded, skip next instruction */
switch (*p++) {
case OP_JUMP:
@@ -2401,145 +3066,116 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
}
}
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
- case OP_NULL_CHECK_END_MEMST: MOP_IN(OP_NULL_CHECK_END_MEMST);
+#ifdef USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT
+ case OP_EMPTY_CHECK_END_MEMST: SOP_IN(OP_EMPTY_CHECK_END_MEMST);
{
- int isnull;
+ int is_empty;
GET_MEMNUM_INC(mem, p); /* mem: null check id */
- STACK_NULL_CHECK_MEMST(isnull, mem, s, reg);
- if (isnull) {
+ STACK_EMPTY_CHECK_MEMST(is_empty, mem, s, reg);
+ if (is_empty) {
#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "NULL_CHECK_END_MEMST: skip id:%d, s:%d\n",
- (int )mem, (int )s);
+ fprintf(stderr, "EMPTY_CHECK_END_MEMST: skip id:%d, s:%p\n", (int)mem, s);
#endif
- if (isnull == -1) goto fail;
- goto null_check_found;
+ if (is_empty == -1) goto fail;
+ goto empty_check_found;
}
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
#endif
-#ifdef USE_SUBEXP_CALL
- case OP_NULL_CHECK_END_MEMST_PUSH:
- MOP_IN(OP_NULL_CHECK_END_MEMST_PUSH);
+#ifdef USE_CALL
+ case OP_EMPTY_CHECK_END_MEMST_PUSH:
+ SOP_IN(OP_EMPTY_CHECK_END_MEMST_PUSH);
{
- int isnull;
+ int is_empty;
GET_MEMNUM_INC(mem, p); /* mem: null check id */
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
- STACK_NULL_CHECK_MEMST_REC(isnull, mem, s, reg);
+#ifdef USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT
+ STACK_EMPTY_CHECK_MEMST_REC(is_empty, mem, s, reg);
#else
- STACK_NULL_CHECK_REC(isnull, mem, s);
+ STACK_EMPTY_CHECK_REC(is_empty, mem, s);
#endif
- if (isnull) {
+ if (is_empty) {
#ifdef ONIG_DEBUG_MATCH
- fprintf(stderr, "NULL_CHECK_END_MEMST_PUSH: skip id:%d, s:%d\n",
- (int )mem, (int )s);
+ fprintf(stderr, "EMPTY_CHECK_END_MEMST_PUSH: skip id:%d, s:%p\n",
+ (int )mem, s);
#endif
- if (isnull == -1) goto fail;
- goto null_check_found;
+ if (is_empty == -1) goto fail;
+ goto empty_check_found;
}
else {
- STACK_PUSH_NULL_CHECK_END(mem);
+ STACK_PUSH_EMPTY_CHECK_END(mem);
}
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
#endif
- case OP_JUMP: MOP_IN(OP_JUMP);
+ case OP_JUMP: SOP_IN(OP_JUMP);
GET_RELADDR_INC(addr, p);
p += addr;
- MOP_OUT;
- CHECK_INTERRUPT_IN_MATCH_AT;
+ SOP_OUT;
+ CHECK_INTERRUPT_IN_MATCH;
continue;
break;
- case OP_PUSH: MOP_IN(OP_PUSH);
+ case OP_PUSH: SOP_IN(OP_PUSH);
GET_RELADDR_INC(addr, p);
STACK_PUSH_ALT(p + addr, s, sprev);
- MOP_OUT;
- continue;
- break;
-
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- case OP_STATE_CHECK_PUSH: MOP_IN(OP_STATE_CHECK_PUSH);
- GET_STATE_CHECK_NUM_INC(mem, p);
- STATE_CHECK_VAL(scv, mem);
- if (scv) goto fail;
-
- GET_RELADDR_INC(addr, p);
- STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_STATE_CHECK_PUSH_OR_JUMP: MOP_IN(OP_STATE_CHECK_PUSH_OR_JUMP);
- GET_STATE_CHECK_NUM_INC(mem, p);
+ case OP_PUSH_SUPER: SOP_IN(OP_PUSH_SUPER);
GET_RELADDR_INC(addr, p);
- STATE_CHECK_VAL(scv, mem);
- if (scv) {
- p += addr;
- }
- else {
- STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem);
- }
- MOP_OUT;
- continue;
- break;
-
- case OP_STATE_CHECK: MOP_IN(OP_STATE_CHECK);
- GET_STATE_CHECK_NUM_INC(mem, p);
- STATE_CHECK_VAL(scv, mem);
- if (scv) goto fail;
-
- STACK_PUSH_STATE_CHECK(s, mem);
- MOP_OUT;
+ STACK_PUSH_SUPER_ALT(p + addr, s, sprev);
+ SOP_OUT;
continue;
break;
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */
- case OP_POP: MOP_IN(OP_POP);
+ case OP_POP: SOP_IN(OP_POP);
STACK_POP_ONE;
- MOP_OUT;
+ // for stop backtrack
+ //CHECK_TRY_IN_MATCH_LIMIT;
+ SOP_OUT;
continue;
break;
- case OP_PUSH_OR_JUMP_EXACT1: MOP_IN(OP_PUSH_OR_JUMP_EXACT1);
+ case OP_PUSH_OR_JUMP_EXACT1: SOP_IN(OP_PUSH_OR_JUMP_EXACT1);
GET_RELADDR_INC(addr, p);
if (*p == *s && DATA_ENSURE_CHECK1) {
p++;
STACK_PUSH_ALT(p + addr, s, sprev);
- MOP_OUT;
+ SOP_OUT;
continue;
}
p += (addr + 1);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_PUSH_IF_PEEK_NEXT: MOP_IN(OP_PUSH_IF_PEEK_NEXT);
+ case OP_PUSH_IF_PEEK_NEXT: SOP_IN(OP_PUSH_IF_PEEK_NEXT);
GET_RELADDR_INC(addr, p);
if (*p == *s) {
p++;
STACK_PUSH_ALT(p + addr, s, sprev);
- MOP_OUT;
+ SOP_OUT;
continue;
}
p++;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_REPEAT: MOP_IN(OP_REPEAT);
+ case OP_REPEAT: SOP_IN(OP_REPEAT);
{
GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
GET_RELADDR_INC(addr, p);
@@ -2552,11 +3188,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
STACK_PUSH_ALT(p + addr, s, sprev);
}
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_REPEAT_NG: MOP_IN(OP_REPEAT_NG);
+ case OP_REPEAT_NG: SOP_IN(OP_REPEAT_NG);
{
GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
GET_RELADDR_INC(addr, p);
@@ -2570,11 +3206,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p += addr;
}
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_REPEAT_INC: MOP_IN(OP_REPEAT_INC);
+ case OP_REPEAT_INC: SOP_IN(OP_REPEAT_INC);
GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
si = repeat_stk[mem];
stkp = STACK_AT(si);
@@ -2592,19 +3228,20 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
p = stkp->u.repeat.pcode;
}
STACK_PUSH_REPEAT_INC(si);
- MOP_OUT;
- CHECK_INTERRUPT_IN_MATCH_AT;
+ CHECK_TRY_IN_MATCH_LIMIT;
+ SOP_OUT;
+ CHECK_INTERRUPT_IN_MATCH;
continue;
break;
- case OP_REPEAT_INC_SG: MOP_IN(OP_REPEAT_INC_SG);
+ case OP_REPEAT_INC_SG: SOP_IN(OP_REPEAT_INC_SG);
GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
STACK_GET_REPEAT(mem, stkp);
si = GET_STACK_INDEX(stkp);
goto repeat_inc;
break;
- case OP_REPEAT_INC_NG: MOP_IN(OP_REPEAT_INC_NG);
+ case OP_REPEAT_INC_NG: SOP_IN(OP_REPEAT_INC_NG);
GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
si = repeat_stk[mem];
stkp = STACK_AT(si);
@@ -2626,68 +3263,69 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
STACK_PUSH_REPEAT_INC(si);
}
- MOP_OUT;
- CHECK_INTERRUPT_IN_MATCH_AT;
+ CHECK_TRY_IN_MATCH_LIMIT;
+ SOP_OUT;
+ CHECK_INTERRUPT_IN_MATCH;
continue;
break;
- case OP_REPEAT_INC_NG_SG: MOP_IN(OP_REPEAT_INC_NG_SG);
+ case OP_REPEAT_INC_NG_SG: SOP_IN(OP_REPEAT_INC_NG_SG);
GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
STACK_GET_REPEAT(mem, stkp);
si = GET_STACK_INDEX(stkp);
goto repeat_inc_ng;
break;
- case OP_PUSH_POS: MOP_IN(OP_PUSH_POS);
+ case OP_PREC_READ_START: SOP_IN(OP_PREC_READ_START);
STACK_PUSH_POS(s, sprev);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_POP_POS: MOP_IN(OP_POP_POS);
+ case OP_PREC_READ_END: SOP_IN(OP_PREC_READ_END);
{
- STACK_POS_END(stkp);
+ STACK_EXEC_TO_VOID(stkp);
s = stkp->u.state.pstr;
sprev = stkp->u.state.pstr_prev;
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_PUSH_POS_NOT: MOP_IN(OP_PUSH_POS_NOT);
+ case OP_PREC_READ_NOT_START: SOP_IN(OP_PREC_READ_NOT_START);
GET_RELADDR_INC(addr, p);
- STACK_PUSH_POS_NOT(p + addr, s, sprev);
- MOP_OUT;
+ STACK_PUSH_ALT_PREC_READ_NOT(p + addr, s, sprev);
+ SOP_OUT;
continue;
break;
- case OP_FAIL_POS: MOP_IN(OP_FAIL_POS);
- STACK_POP_TIL_POS_NOT;
+ case OP_PREC_READ_NOT_END: SOP_IN(OP_PREC_READ_NOT_END);
+ STACK_POP_TIL_ALT_PREC_READ_NOT;
goto fail;
break;
- case OP_PUSH_STOP_BT: MOP_IN(OP_PUSH_STOP_BT);
- STACK_PUSH_STOP_BT;
- MOP_OUT;
+ case OP_ATOMIC_START: SOP_IN(OP_ATOMIC_START);
+ STACK_PUSH_TO_VOID_START;
+ SOP_OUT;
continue;
break;
- case OP_POP_STOP_BT: MOP_IN(OP_POP_STOP_BT);
- STACK_STOP_BT_END;
- MOP_OUT;
+ case OP_ATOMIC_END: SOP_IN(OP_ATOMIC_END);
+ STACK_EXEC_TO_VOID(stkp);
+ SOP_OUT;
continue;
break;
- case OP_LOOK_BEHIND: MOP_IN(OP_LOOK_BEHIND);
+ case OP_LOOK_BEHIND: SOP_IN(OP_LOOK_BEHIND);
GET_LENGTH_INC(tlen, p);
s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
if (IS_NULL(s)) goto fail;
sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_PUSH_LOOK_BEHIND_NOT: MOP_IN(OP_PUSH_LOOK_BEHIND_NOT);
+ case OP_LOOK_BEHIND_NOT_START: SOP_IN(OP_LOOK_BEHIND_NOT_START);
GET_RELADDR_INC(addr, p);
GET_LENGTH_INC(tlen, p);
q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
@@ -2698,57 +3336,105 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
/* goto fail; */
}
else {
- STACK_PUSH_LOOK_BEHIND_NOT(p + addr, s, sprev);
+ STACK_PUSH_ALT_LOOK_BEHIND_NOT(p + addr, s, sprev);
s = q;
sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
}
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_FAIL_LOOK_BEHIND_NOT: MOP_IN(OP_FAIL_LOOK_BEHIND_NOT);
- STACK_POP_TIL_LOOK_BEHIND_NOT;
+ case OP_LOOK_BEHIND_NOT_END: SOP_IN(OP_LOOK_BEHIND_NOT_END);
+ STACK_POP_TIL_ALT_LOOK_BEHIND_NOT;
goto fail;
break;
-#ifdef USE_SUBEXP_CALL
- case OP_CALL: MOP_IN(OP_CALL);
+#ifdef USE_CALL
+ case OP_CALL: SOP_IN(OP_CALL);
GET_ABSADDR_INC(addr, p);
STACK_PUSH_CALL_FRAME(p);
p = reg->p + addr;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
- case OP_RETURN: MOP_IN(OP_RETURN);
+ case OP_RETURN: SOP_IN(OP_RETURN);
STACK_RETURN(p);
STACK_PUSH_RETURN;
- MOP_OUT;
+ SOP_OUT;
continue;
break;
#endif
+ case OP_PUSH_SAVE_VAL: SOP_IN(OP_PUSH_SAVE_VAL);
+ {
+ SaveType type;
+ GET_SAVE_TYPE_INC(type, p);
+ GET_MEMNUM_INC(mem, p); /* mem: save id */
+ switch ((enum SaveType )type) {
+ case SAVE_KEEP:
+ STACK_PUSH_SAVE_VAL(mem, type, s);
+ break;
+
+ case SAVE_S:
+ STACK_PUSH_SAVE_VAL_WITH_SPREV(mem, type, s);
+ break;
+
+ case SAVE_RIGHT_RANGE:
+ STACK_PUSH_SAVE_VAL(mem, SAVE_RIGHT_RANGE, right_range);
+ break;
+ }
+ }
+ SOP_OUT;
+ continue;
+ break;
+
+ case OP_UPDATE_VAR: SOP_IN(OP_UPDATE_VAR);
+ {
+ UpdateVarType type;
+ enum SaveType save_type;
+
+ GET_UPDATE_VAR_TYPE_INC(type, p);
+ GET_MEMNUM_INC(mem, p); /* mem: save id */
+ switch ((enum UpdateVarType )type) {
+ case UPDATE_VAR_KEEP_FROM_STACK_LAST:
+ STACK_GET_SAVE_VAL_TYPE_LAST(SAVE_KEEP, keep);
+ break;
+ case UPDATE_VAR_S_FROM_STACK:
+ STACK_GET_SAVE_VAL_TYPE_LAST_ID_WITH_SPREV(SAVE_S, mem, s);
+ break;
+ case UPDATE_VAR_RIGHT_RANGE_FROM_S_STACK:
+ save_type = SAVE_S;
+ goto get_save_val_type_last_id;
+ break;
+ case UPDATE_VAR_RIGHT_RANGE_FROM_STACK:
+ save_type = SAVE_RIGHT_RANGE;
+ get_save_val_type_last_id:
+ STACK_GET_SAVE_VAL_TYPE_LAST_ID(save_type, mem, right_range);
+ break;
+ case UPDATE_VAR_RIGHT_RANGE_INIT:
+ INIT_RIGHT_RANGE;
+ break;
+ }
+ }
+ SOP_OUT;
+ continue;
+ break;
+
case OP_FINISH:
goto finish;
break;
fail:
- MOP_OUT;
+ SOP_OUT;
/* fall */
- case OP_FAIL: MOP_IN(OP_FAIL);
+ case OP_FAIL: SOP_IN(OP_FAIL);
STACK_POP;
p = stk->u.state.pcode;
s = stk->u.state.pstr;
sprev = stk->u.state.pstr_prev;
-
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- if (stk->u.state.state_check != 0) {
- stk->type = STK_STATE_CHECK_MARK;
- stk++;
- }
-#endif
-
- MOP_OUT;
+ CHECK_TRY_IN_MATCH_LIMIT;
+ SOP_OUT;
continue;
break;
@@ -2776,12 +3462,18 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
unexpected_bytecode_error:
STACK_SAVE;
return ONIGERR_UNEXPECTED_BYTECODE;
+
+#ifdef USE_TRY_IN_MATCH_LIMIT
+ try_in_match_limit_over:
+ STACK_SAVE;
+ return ONIGERR_TRY_IN_MATCH_LIMIT_OVER;
+#endif
}
static UChar*
slow_search(OnigEncoding enc, UChar* target, UChar* target_end,
- const UChar* text, const UChar* text_end, UChar* text_range)
+ const UChar* text, const UChar* text_end, UChar* text_range)
{
UChar *t, *p, *s, *end;
@@ -2813,7 +3505,7 @@ slow_search(OnigEncoding enc, UChar* target, UChar* target_end,
static int
str_lower_case_match(OnigEncoding enc, int case_fold_flag,
const UChar* t, const UChar* tend,
- const UChar* p, const UChar* end)
+ const UChar* p, const UChar* end)
{
int lowlen;
UChar *q, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
@@ -2822,7 +3514,7 @@ str_lower_case_match(OnigEncoding enc, int case_fold_flag,
lowlen = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &p, end, lowbuf);
q = lowbuf;
while (lowlen > 0) {
- if (*t++ != *q++) return 0;
+ if (*t++ != *q++) return 0;
lowlen--;
}
}
@@ -2832,8 +3524,8 @@ str_lower_case_match(OnigEncoding enc, int case_fold_flag,
static UChar*
slow_search_ic(OnigEncoding enc, int case_fold_flag,
- UChar* target, UChar* target_end,
- const UChar* text, const UChar* text_end, UChar* text_range)
+ UChar* target, UChar* target_end,
+ const UChar* text, const UChar* text_end, UChar* text_range)
{
UChar *s, *end;
@@ -2846,7 +3538,7 @@ slow_search_ic(OnigEncoding enc, int case_fold_flag,
while (s < end) {
if (str_lower_case_match(enc, case_fold_flag, target, target_end,
- s, text_end))
+ s, text_end))
return s;
s += enclen(enc, s);
@@ -2857,8 +3549,8 @@ slow_search_ic(OnigEncoding enc, int case_fold_flag,
static UChar*
slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end,
- const UChar* text, const UChar* adjust_text,
- const UChar* text_end, const UChar* text_start)
+ const UChar* text, const UChar* adjust_text,
+ const UChar* text_end, const UChar* text_start)
{
UChar *t, *p, *s;
@@ -2889,9 +3581,9 @@ slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end,
static UChar*
slow_search_backward_ic(OnigEncoding enc, int case_fold_flag,
- UChar* target, UChar* target_end,
- const UChar* text, const UChar* adjust_text,
- const UChar* text_end, const UChar* text_start)
+ UChar* target, UChar* target_end,
+ const UChar* text, const UChar* adjust_text,
+ const UChar* text_end, const UChar* text_start)
{
UChar *s;
@@ -2915,20 +3607,20 @@ slow_search_backward_ic(OnigEncoding enc, int case_fold_flag,
static UChar*
bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
- const UChar* text, const UChar* text_end,
- const UChar* text_range)
+ const UChar* text, const UChar* text_end,
+ const UChar* text_range)
{
const UChar *s, *se, *t, *p, *end;
const UChar *tail;
int skip, tlen1;
#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "bm_search_notrev: text: %d, text_end: %d, text_range: %d\n",
- (int )text, (int )text_end, (int )text_range);
+ fprintf(stderr, "bm_search_notrev: text: %p, text_end: %p, text_range: %p\n",
+ text, text_end, text_range);
#endif
tail = target_end - 1;
- tlen1 = tail - target;
+ tlen1 = (int )(tail - target);
end = text_range;
if (end + tlen1 > text_end)
end = text_end - tlen1;
@@ -2971,7 +3663,7 @@ bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,
static UChar*
bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
- const UChar* text, const UChar* text_end, const UChar* text_range)
+ const UChar* text, const UChar* text_end, const UChar* text_range)
{
const UChar *s, *t, *p, *end;
const UChar *tail;
@@ -3009,9 +3701,7 @@ bm_search(regex_t* reg, const UChar* target, const UChar* target_end,
#ifdef USE_INT_MAP_BACKWARD
static int
-set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
- int** skip)
-
+set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED, int** skip)
{
int i, len;
@@ -3032,8 +3722,8 @@ set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
static UChar*
bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end,
- const UChar* text, const UChar* adjust_text,
- const UChar* text_end, const UChar* text_start)
+ const UChar* text, const UChar* adjust_text,
+ const UChar* text_end, const UChar* text_start)
{
const UChar *s, *t, *p;
@@ -3062,7 +3752,7 @@ bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end,
static UChar*
map_search(OnigEncoding enc, UChar map[],
- const UChar* text, const UChar* text_range)
+ const UChar* text, const UChar* text_range)
{
const UChar *s = text;
@@ -3076,8 +3766,8 @@ map_search(OnigEncoding enc, UChar map[],
static UChar*
map_search_backward(OnigEncoding enc, UChar map[],
- const UChar* text, const UChar* adjust_text,
- const UChar* text_start)
+ const UChar* text, const UChar* adjust_text,
+ const UChar* text_start)
{
const UChar *s = text_start;
@@ -3090,21 +3780,14 @@ map_search_backward(OnigEncoding enc, UChar map[],
}
extern int
-onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, OnigRegion* region,
- OnigOptionType option)
+onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,
+ OnigRegion* region, OnigOptionType option)
{
int r;
UChar *prev;
- OnigMatchArg msa;
+ MatchArg msa;
MATCH_ARG_INIT(msa, reg, option, region, at);
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- {
- int offset = at - str;
- STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check);
- }
-#endif
-
if (region
#ifdef USE_POSIX_API_REGION_OPTION
&& !IS_POSIX_REGION(option)
@@ -3126,9 +3809,9 @@ onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, On
prev = (UChar* )onigenc_get_prev_char_head(reg->enc, str, at);
r = match_at(reg, str, end,
#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
- end,
+ end,
#endif
- at, prev, &msa);
+ at, prev, &msa);
}
end:
@@ -3138,13 +3821,13 @@ onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, On
static int
forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
- UChar* range, UChar** low, UChar** high, UChar** low_prev)
+ UChar* range, UChar** low, UChar** high, UChar** low_prev)
{
UChar *p, *pprev = (UChar* )NULL;
#ifdef ONIG_DEBUG_SEARCH
- fprintf(stderr, "forward_search_range: str: %d, end: %d, s: %d, range: %d\n",
- (int )str, (int )end, (int )s, (int )range);
+ fprintf(stderr, "forward_search_range: str: %p, end: %p, s: %p, range: %p\n",
+ str, end, s, range);
#endif
p = s;
@@ -3162,23 +3845,23 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
retry:
switch (reg->optimize) {
- case ONIG_OPTIMIZE_EXACT:
+ case OPTIMIZE_EXACT:
p = slow_search(reg->enc, reg->exact, reg->exact_end, p, end, range);
break;
- case ONIG_OPTIMIZE_EXACT_IC:
+ case OPTIMIZE_EXACT_IC:
p = slow_search_ic(reg->enc, reg->case_fold_flag,
reg->exact, reg->exact_end, p, end, range);
break;
- case ONIG_OPTIMIZE_EXACT_BM:
+ case OPTIMIZE_EXACT_BM:
p = bm_search(reg, reg->exact, reg->exact_end, p, end, range);
break;
- case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:
+ case OPTIMIZE_EXACT_BM_NO_REV:
p = bm_search_notrev(reg, reg->exact, reg->exact_end, p, end, range);
break;
- case ONIG_OPTIMIZE_MAP:
+ case OPTIMIZE_MAP:
p = map_search(reg->enc, reg->map, p, range);
break;
}
@@ -3234,7 +3917,7 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
}
}
else {
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {
+ if (reg->dmax != INFINITE_LEN) {
if (p - str < reg->dmax) {
*low = (UChar* )str;
if (low_prev)
@@ -3262,8 +3945,8 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
#ifdef ONIG_DEBUG_SEARCH
fprintf(stderr,
- "forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n",
- (int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax);
+ "forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n",
+ (int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax);
#endif
return 1; /* success */
}
@@ -3276,8 +3959,8 @@ forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,
static int
backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
- UChar* s, const UChar* range, UChar* adjrange,
- UChar** low, UChar** high)
+ UChar* s, const UChar* range, UChar* adjrange,
+ UChar** low, UChar** high)
{
UChar *p;
@@ -3286,20 +3969,20 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
retry:
switch (reg->optimize) {
- case ONIG_OPTIMIZE_EXACT:
+ case OPTIMIZE_EXACT:
exact_method:
p = slow_search_backward(reg->enc, reg->exact, reg->exact_end,
- range, adjrange, end, p);
+ range, adjrange, end, p);
break;
- case ONIG_OPTIMIZE_EXACT_IC:
+ case OPTIMIZE_EXACT_IC:
p = slow_search_backward_ic(reg->enc, reg->case_fold_flag,
reg->exact, reg->exact_end,
range, adjrange, end, p);
break;
- case ONIG_OPTIMIZE_EXACT_BM:
- case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:
+ case OPTIMIZE_EXACT_BM:
+ case OPTIMIZE_EXACT_BM_NO_REV:
#ifdef USE_INT_MAP_BACKWARD
if (IS_NULL(reg->int_map_backward)) {
int r;
@@ -3309,7 +3992,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
r = set_bm_backward_skip(reg->exact, reg->exact_end, reg->enc,
&(reg->int_map_backward));
- if (r) return r;
+ if (r != 0) return r;
}
p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange,
end, p);
@@ -3318,7 +4001,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
#endif
break;
- case ONIG_OPTIMIZE_MAP:
+ case OPTIMIZE_MAP:
p = map_search_backward(reg->enc, reg->map, range, adjrange, p);
break;
}
@@ -3363,7 +4046,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
}
/* no needs to adjust *high, *high is used as range check only */
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {
+ if (reg->dmax != INFINITE_LEN) {
*low = p - reg->dmax;
*high = p - reg->dmin;
*high = onigenc_get_right_adjust_char_head(reg->enc, adjrange, *high);
@@ -3371,7 +4054,7 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
#ifdef ONIG_DEBUG_SEARCH
fprintf(stderr, "backward_search_range: low: %d, high: %d\n",
- (int )(*low - str), (int )(*high - str));
+ (int )(*low - str), (int )(*high - str));
#endif
return 1; /* success */
}
@@ -3386,11 +4069,12 @@ backward_search_range(regex_t* reg, const UChar* str, const UChar* end,
extern int
onig_search(regex_t* reg, const UChar* str, const UChar* end,
- const UChar* start, const UChar* range, OnigRegion* region, OnigOptionType option)
+ const UChar* start, const UChar* range, OnigRegion* region,
+ OnigOptionType option)
{
int r;
UChar *s, *prev;
- OnigMatchArg msa;
+ MatchArg msa;
const UChar *orig_start = start;
#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
const UChar *orig_range = range;
@@ -3398,8 +4082,8 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
#ifdef ONIG_DEBUG_SEARCH
fprintf(stderr,
- "onig_search (entry point): str: %d, end: %d, start: %d, range: %d\n",
- (int )str, (int )(end - str), (int )(start - str), (int )(range - str));
+ "onig_search (entry point): str: %p, end: %d, start: %d, range: %d\n",
+ str, (int )(end - str), (int )(start - str), (int )(range - str));
#endif
if (region
@@ -3408,7 +4092,7 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
#endif
) {
r = onig_region_resize_clear(region, reg->num_mem + 1);
- if (r) goto finish_no_msa;
+ if (r != 0) goto finish_no_msa;
}
if (start > end || start < str) goto mismatch_no_msa;
@@ -3500,7 +4184,7 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
end_buf:
if ((OnigLen )(max_semi_end - str) < reg->anchor_dmin)
- goto mismatch_no_msa;
+ goto mismatch_no_msa;
if (range > start) {
if ((OnigLen )(min_semi_end - start) > reg->anchor_dmax) {
@@ -3567,10 +4251,6 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
prev = (UChar* )NULL;
MATCH_ARG_INIT(msa, reg, option, region, start);
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- msa.state_check_buff = (void* )0;
- msa.state_check_buff_size = 0; /* NO NEED, for valgrind */
-#endif
MATCH_AND_RETURN_CHECK(end);
goto mismatch;
}
@@ -3579,16 +4259,10 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
#ifdef ONIG_DEBUG_SEARCH
fprintf(stderr, "onig_search(apply anchor): end: %d, start: %d, range: %d\n",
- (int )(end - str), (int )(start - str), (int )(range - str));
+ (int )(end - str), (int )(start - str), (int )(range - str));
#endif
MATCH_ARG_INIT(msa, reg, option, region, orig_start);
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- {
- int offset = (MIN(start, range) - str);
- STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check);
- }
-#endif
s = (UChar* )start;
if (range > start) { /* forward search */
@@ -3597,12 +4271,12 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
else
prev = (UChar* )NULL;
- if (reg->optimize != ONIG_OPTIMIZE_NONE) {
+ if (reg->optimize != OPTIMIZE_NONE) {
UChar *sch_range, *low, *high, *low_prev;
sch_range = (UChar* )range;
if (reg->dmax != 0) {
- if (reg->dmax == ONIG_INFINITE_DISTANCE)
+ if (reg->dmax == INFINITE_LEN)
sch_range = (UChar* )end;
else {
sch_range += reg->dmax;
@@ -3613,7 +4287,7 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
if ((end - start) < reg->threshold_len)
goto mismatch;
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {
+ if (reg->dmax != INFINITE_LEN) {
do {
if (! forward_search_range(reg, str, end, s, sch_range,
&low, &high, &low_prev)) goto mismatch;
@@ -3667,7 +4341,7 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
orig_start += enclen(reg->enc, orig_start); /* is upper range */
#endif
- if (reg->optimize != ONIG_OPTIMIZE_NONE) {
+ if (reg->optimize != OPTIMIZE_NONE) {
UChar *low, *high, *adjrange, *sch_start;
if (range < end)
@@ -3675,7 +4349,7 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
else
adjrange = (UChar* )end;
- if (reg->dmax != ONIG_INFINITE_DISTANCE &&
+ if (reg->dmax != INFINITE_LEN &&
(end - range) >= reg->threshold_len) {
do {
sch_start = s + reg->dmax;
@@ -3700,7 +4374,7 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
sch_start = s;
if (reg->dmax != 0) {
- if (reg->dmax == ONIG_INFINITE_DISTANCE)
+ if (reg->dmax == INFINITE_LEN)
sch_start = (UChar* )end;
else {
sch_start += reg->dmax;
@@ -3763,14 +4437,14 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
match:
MATCH_ARG_FREE(msa);
- return s - str;
+ return (int )(s - str);
}
extern int
onig_scan(regex_t* reg, const UChar* str, const UChar* end,
- OnigRegion* region, OnigOptionType option,
- int (*scan_callback)(int, int, OnigRegion*, void*),
- void* callback_arg)
+ OnigRegion* region, OnigOptionType option,
+ int (*scan_callback)(int, int, OnigRegion*, void*),
+ void* callback_arg)
{
int r;
int n;
@@ -3853,7 +4527,7 @@ onig_number_of_capture_histories(regex_t* reg)
n = 0;
for (i = 0; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {
- if (BIT_STATUS_AT(reg->capture_history, i) != 0)
+ if (MEM_STATUS_AT(reg->capture_history, i) != 0)
n++;
}
return n;
diff --git a/ext/mbstring/oniguruma/src/regext.c b/ext/mbstring/oniguruma/src/regext.c
index 1903174e5d..996d043f56 100644
--- a/ext/mbstring/oniguruma/src/regext.c
+++ b/ext/mbstring/oniguruma/src/regext.c
@@ -2,7 +2,7 @@
regext.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -95,7 +95,7 @@ static int
conv_encoding(OnigEncoding from, OnigEncoding to, const UChar* s, const UChar* end,
UChar** conv, UChar** conv_end)
{
- int len = end - s;
+ int len = (int )(end - s);
if (to == ONIG_ENCODING_UTF16_BE) {
if (from == ONIG_ENCODING_ASCII || from == ONIG_ENCODING_ISO_8859_1) {
@@ -171,7 +171,7 @@ onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
if (ci->pattern_enc != ci->target_enc) {
r = conv_encoding(ci->pattern_enc, ci->target_enc, pattern, pattern_end,
&cpat, &cpat_end);
- if (r) return r;
+ if (r != 0) return r;
}
else {
cpat = (UChar* )pattern;
@@ -186,10 +186,10 @@ onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
r = onig_reg_init(*reg, ci->option, ci->case_fold_flag, ci->target_enc,
ci->syntax);
- if (r) goto err;
+ if (r != 0) goto err;
r = onig_compile(*reg, cpat, cpat_end, einfo);
- if (r) {
+ if (r != 0) {
err:
onig_free(*reg);
*reg = NULL;
diff --git a/ext/mbstring/oniguruma/src/reggnu.c b/ext/mbstring/oniguruma/src/reggnu.c
index 1de82fb078..50eb9b434e 100644
--- a/ext/mbstring/oniguruma/src/reggnu.c
+++ b/ext/mbstring/oniguruma/src/reggnu.c
@@ -2,7 +2,7 @@
reggnu.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -54,7 +54,7 @@ re_adjust_startpos(regex_t* reg, const char* string, int size,
else {
p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s);
}
- return p - (UChar* )string;
+ return (int )(p - (UChar* )string);
}
return startpos;
diff --git a/ext/mbstring/oniguruma/src/regint.h b/ext/mbstring/oniguruma/src/regint.h
index 4c9853b39d..95c8446c03 100644
--- a/ext/mbstring/oniguruma/src/regint.h
+++ b/ext/mbstring/oniguruma/src/regint.h
@@ -4,7 +4,7 @@
regint.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2013 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,7 +30,7 @@
*/
/* for debug */
-/* #define ONIG_DEBUG_PARSE_TREE */
+/* #define ONIG_DEBUG_PARSE */
/* #define ONIG_DEBUG_COMPILE */
/* #define ONIG_DEBUG_SEARCH */
/* #define ONIG_DEBUG_MATCH */
@@ -39,7 +39,7 @@
/* for byte-code statistical data. */
/* #define ONIG_DEBUG_STATISTICS */
-#if defined(ONIG_DEBUG_PARSE_TREE) || defined(ONIG_DEBUG_MATCH) || \
+#if defined(ONIG_DEBUG_PARSE) || defined(ONIG_DEBUG_MATCH) || \
defined(ONIG_DEBUG_SEARCH) || defined(ONIG_DEBUG_COMPILE) || \
defined(ONIG_DEBUG_STATISTICS)
#ifndef ONIG_DEBUG
@@ -47,6 +47,12 @@
#endif
#endif
+#ifdef EXPORT
+#ifndef ONIGURUMA_EXPORT
+#define ONIGURUMA_EXPORT
+#endif
+#endif
+
#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
(defined(__ppc__) && defined(__APPLE__)) || \
defined(__x86_64) || defined(__x86_64__) || \
@@ -56,21 +62,27 @@
/* config */
/* spec. config */
-#define USE_NAMED_GROUP
-#define USE_SUBEXP_CALL
+#define USE_CALL
#define USE_BACKREF_WITH_LEVEL /* \k<name+n>, \k<name-n> */
-#define USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT /* /(?:()|())*\2/ */
+#define USE_INSISTENT_CHECK_CAPTURES_STATUS_IN_ENDLESS_REPEAT /* /(?:()|())*\2/ */
#define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE /* /\n$/ =~ "\n" */
#define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
-/* !!! moved to regenc.h. */ /* #define USE_CRNL_AS_LINE_TERMINATOR */
+
+//#define USE_TRY_IN_MATCH_LIMIT
+#ifdef USE_COMBINATION_EXPLOSION_CHECK
+#ifndef USE_TRY_IN_MATCH_LIMIT
+#define USE_TRY_IN_MATCH_LIMIT
+#endif
+#endif
/* internal config */
#define USE_OP_PUSH_OR_JUMP_EXACT
-#define USE_QTFR_PEEK_NEXT
+#define USE_QUANT_PEEK_NEXT
#define USE_ST_LIBRARY
#define INIT_MATCH_STACK_SIZE 160
#define DEFAULT_MATCH_STACK_LIMIT_SIZE 0 /* unlimited */
+#define DEFAULT_TRY_IN_MATCH_LIMIT 10000000
#define DEFAULT_PARSE_DEPTH_LIMIT 4096
#if defined(__GNUC__)
@@ -91,15 +103,12 @@
#define USE_VARIABLE_META_CHARS
#define USE_POSIX_API_REGION_OPTION
#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
-/* #define USE_COMBINATION_EXPLOSION_CHECK */ /* (X*)* */
#define xmalloc malloc
#define xrealloc realloc
#define xcalloc calloc
#define xfree free
-#define CHECK_INTERRUPT_IN_MATCH_AT
-
#define st_init_table onig_st_init_table
#define st_init_table_with_size onig_st_init_table_with_size
#define st_init_numtable onig_st_init_numtable
@@ -120,9 +129,6 @@
/* */
#define onig_st_is_member st_is_member
-#define STATE_CHECK_STRING_THRESHOLD_LEN 7
-#define STATE_CHECK_BUFF_MAX_SIZE 0x4000
-
#define xmemset memset
#define xmemcpy memcpy
#define xmemmove memmove
@@ -140,10 +146,20 @@
#endif
+#include <stddef.h>
+
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__)
#include <alloca.h>
#endif
@@ -161,6 +177,10 @@
#endif
#endif
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
#ifdef __BORLANDC__
#include <malloc.h>
#endif
@@ -169,6 +189,13 @@
# include <stdio.h>
#endif
+#ifdef _WIN32
+#if defined(_MSC_VER) && (_MSC_VER < 1300)
+typedef int intptr_t;
+typedef unsigned int uintptr_t;
+#endif
+#endif
+
#include "regenc.h"
#ifdef MIN
@@ -177,6 +204,7 @@
#ifdef MAX
#undef MAX
#endif
+
#define MIN(a,b) (((a)>(b))?(b):(a))
#define MAX(a,b) (((a)<(b))?(b):(a))
@@ -186,6 +214,8 @@
#define CHECK_NULL_RETURN_MEMERR(p) if (IS_NULL(p)) return ONIGERR_MEMORY
#define NULL_UCHARP ((UChar* )0)
+#define INFINITE_LEN ONIG_INFINITE_DISTANCE
+
#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
#define PLATFORM_GET_INC(val,p,type) do{\
@@ -208,59 +238,81 @@
#endif
#define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\
- (pad_size) = WORD_ALIGNMENT_SIZE \
- - ((size_t)(addr) % WORD_ALIGNMENT_SIZE);\
+ (pad_size) = WORD_ALIGNMENT_SIZE - ((uintptr_t )(addr) % WORD_ALIGNMENT_SIZE);\
if ((pad_size) == WORD_ALIGNMENT_SIZE) (pad_size) = 0;\
} while (0)
#define ALIGNMENT_RIGHT(addr) do {\
(addr) += (WORD_ALIGNMENT_SIZE - 1);\
- (addr) -= ((size_t)(addr) % WORD_ALIGNMENT_SIZE);\
+ (addr) -= ((uintptr_t )(addr) % WORD_ALIGNMENT_SIZE);\
} while (0)
#endif /* PLATFORM_UNALIGNED_WORD_ACCESS */
+typedef struct {
+ int num_keeper;
+ int* keepers;
+} RegExt;
+
+#define REG_EXTP(reg) (RegExt* )((reg)->chain)
+#define REG_EXTPL(reg) ((reg)->chain)
+
/* stack pop level */
-#define STACK_POP_LEVEL_FREE 0
-#define STACK_POP_LEVEL_MEM_START 1
-#define STACK_POP_LEVEL_ALL 2
+enum StackPopLevel {
+ STACK_POP_LEVEL_FREE = 0,
+ STACK_POP_LEVEL_MEM_START = 1,
+ STACK_POP_LEVEL_ALL = 2
+};
/* optimize flags */
-#define ONIG_OPTIMIZE_NONE 0
-#define ONIG_OPTIMIZE_EXACT 1 /* Slow Search */
-#define ONIG_OPTIMIZE_EXACT_BM 2 /* Boyer Moore Search */
-#define ONIG_OPTIMIZE_EXACT_BM_NOT_REV 3 /* BM (but not simple match) */
-#define ONIG_OPTIMIZE_EXACT_IC 4 /* Slow Search (ignore case) */
-#define ONIG_OPTIMIZE_MAP 5 /* char map */
+enum OptimizeType {
+ OPTIMIZE_NONE = 0,
+ OPTIMIZE_EXACT = 1, /* Slow Search */
+ OPTIMIZE_EXACT_BM = 2, /* Boyer Moore Search */
+ OPTIMIZE_EXACT_BM_NO_REV = 3, /* BM (but not simple match) */
+ OPTIMIZE_EXACT_IC = 4, /* Slow Search (ignore case) */
+ OPTIMIZE_MAP = 5 /* char map */
+};
/* bit status */
-typedef unsigned int BitStatusType;
-
-#define BIT_STATUS_BITS_NUM (sizeof(BitStatusType) * 8)
-#define BIT_STATUS_CLEAR(stats) (stats) = 0
-#define BIT_STATUS_ON_ALL(stats) (stats) = ~((BitStatusType )0)
-#define BIT_STATUS_AT(stats,n) \
- ((n) < (int )BIT_STATUS_BITS_NUM ? ((stats) & (1 << n)) : ((stats) & 1))
-
-#define BIT_STATUS_ON_AT(stats,n) do {\
- if ((n) < (int )BIT_STATUS_BITS_NUM) \
- (stats) |= (1 << (n));\
+typedef unsigned int MemStatusType;
+
+#define MEM_STATUS_BITS_NUM (sizeof(MemStatusType) * 8)
+#define MEM_STATUS_CLEAR(stats) (stats) = 0
+#define MEM_STATUS_ON_ALL(stats) (stats) = ~((MemStatusType )0)
+#define MEM_STATUS_AT(stats,n) \
+ ((n) < (int )MEM_STATUS_BITS_NUM ? ((stats) & ((MemStatusType )1 << n)) : ((stats) & 1))
+#define MEM_STATUS_AT0(stats,n) \
+ ((n) > 0 && (n) < (int )MEM_STATUS_BITS_NUM ? ((stats) & ((MemStatusType )1 << n)) : ((stats) & 1))
+
+#define MEM_STATUS_ON(stats,n) do {\
+ if ((n) < (int )MEM_STATUS_BITS_NUM) {\
+ if ((n) != 0)\
+ (stats) |= ((MemStatusType )1 << (n));\
+ }\
else\
(stats) |= 1;\
} while (0)
-#define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\
- if ((n) < (int )BIT_STATUS_BITS_NUM)\
- (stats) |= (1 << (n));\
+#define MEM_STATUS_ON_SIMPLE(stats,n) do {\
+ if ((n) < (int )MEM_STATUS_BITS_NUM)\
+ (stats) |= ((MemStatusType )1 << (n));\
} while (0)
#define INT_MAX_LIMIT ((1UL << (SIZEOF_INT * 8 - 1)) - 1)
+#define IS_CODE_WORD_ASCII(enc,code) \
+ (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
+#define IS_CODE_DIGIT_ASCII(enc, code) \
+ (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_DIGIT(enc,code))
+#define IS_CODE_XDIGIT_ASCII(enc, code) \
+ (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_XDIGIT(enc,code))
+
#define DIGITVAL(code) ((code) - '0')
#define ODIGITVAL(code) DIGITVAL(code)
#define XDIGITVAL(enc,code) \
- (ONIGENC_IS_CODE_DIGIT(enc,code) ? DIGITVAL(code) \
+ (IS_CODE_DIGIT_ASCII(enc,code) ? DIGITVAL(code) \
: (ONIGENC_IS_CODE_UPPER(enc,code) ? (code) - 'A' + 10 : (code) - 'a' + 10))
#define IS_SINGLELINE(option) ((option) & ONIG_OPTION_SINGLELINE)
@@ -275,6 +327,21 @@ typedef unsigned int BitStatusType;
#define IS_NOTEOL(option) ((option) & ONIG_OPTION_NOTEOL)
#define IS_POSIX_REGION(option) ((option) & ONIG_OPTION_POSIX_REGION)
+#define IS_WORD_ASCII(option) \
+ ((option) & (ONIG_OPTION_WORD_IS_ASCII | ONIG_OPTION_POSIX_IS_ASCII))
+#define IS_DIGIT_ASCII(option) \
+ ((option) & (ONIG_OPTION_DIGIT_IS_ASCII | ONIG_OPTION_POSIX_IS_ASCII))
+#define IS_SPACE_ASCII(option) \
+ ((option) & (ONIG_OPTION_SPACE_IS_ASCII | ONIG_OPTION_POSIX_IS_ASCII))
+#define IS_POSIX_ASCII(option) ((option) & ONIG_OPTION_POSIX_IS_ASCII)
+
+#define IS_ASCII_MODE_CTYPE_OPTION(ctype, options) \
+ ((ctype) >= 0 && \
+ (((ctype) < ONIGENC_CTYPE_ASCII && IS_POSIX_ASCII(options)) ||\
+ ((ctype) == ONIGENC_CTYPE_WORD && IS_WORD_ASCII(options)) ||\
+ ((ctype) == ONIGENC_CTYPE_DIGIT && IS_DIGIT_ASCII(options)) ||\
+ ((ctype) == ONIGENC_CTYPE_SPACE && IS_SPACE_ASCII(options))))
+
/* OP_SET_OPTION is required for these options.
#define IS_DYNAMIC_OPTION(option) \
(((option) & (ONIG_OPTION_MULTILINE | ONIG_OPTION_IGNORECASE)) != 0)
@@ -306,7 +373,7 @@ typedef Bits* BitSetRef;
#define BITSET_CLEAR(bs) do {\
int i;\
- for (i = 0; i < (int )BITSET_SIZE; i++) { (bs)[i] = 0; } \
+ for (i = 0; i < (int )BITSET_SIZE; i++) { (bs)[i] = 0; } \
} while (0)
#define BS_ROOM(bs,pos) (bs)[pos / BITS_IN_ROOM]
@@ -324,21 +391,21 @@ typedef struct _BBuf {
unsigned int alloc;
} BBuf;
-#define BBUF_INIT(buf,size) onig_bbuf_init((BBuf* )(buf), (size))
+#define BB_INIT(buf,size) onig_bbuf_init((BBuf* )(buf), (size))
-#define BBUF_SIZE_INC(buf,inc) do{\
+#define BB_SIZE_INC(buf,inc) do{\
(buf)->alloc += (inc);\
(buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
} while (0)
-#define BBUF_EXPAND(buf,low) do{\
+#define BB_EXPAND(buf,low) do{\
do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
(buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
} while (0)
-#define BBUF_ENSURE_SIZE(buf,size) do{\
+#define BB_ENSURE_SIZE(buf,size) do{\
unsigned int new_alloc = (buf)->alloc;\
while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\
if ((buf)->alloc != new_alloc) {\
@@ -348,74 +415,83 @@ typedef struct _BBuf {
}\
} while (0)
-#define BBUF_WRITE(buf,pos,bytes,n) do{\
+#define BB_WRITE(buf,pos,bytes,n) do{\
int used = (pos) + (n);\
- if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
+ if ((buf)->alloc < (unsigned int )used) BB_EXPAND((buf),used);\
xmemcpy((buf)->p + (pos), (bytes), (n));\
if ((buf)->used < (unsigned int )used) (buf)->used = used;\
} while (0)
-#define BBUF_WRITE1(buf,pos,byte) do{\
+#define BB_WRITE1(buf,pos,byte) do{\
int used = (pos) + 1;\
- if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
+ if ((buf)->alloc < (unsigned int )used) BB_EXPAND((buf),used);\
(buf)->p[(pos)] = (byte);\
if ((buf)->used < (unsigned int )used) (buf)->used = used;\
} while (0)
-#define BBUF_ADD(buf,bytes,n) BBUF_WRITE((buf),(buf)->used,(bytes),(n))
-#define BBUF_ADD1(buf,byte) BBUF_WRITE1((buf),(buf)->used,(byte))
-#define BBUF_GET_ADD_ADDRESS(buf) ((buf)->p + (buf)->used)
-#define BBUF_GET_OFFSET_POS(buf) ((buf)->used)
+#define BB_ADD(buf,bytes,n) BB_WRITE((buf),(buf)->used,(bytes),(n))
+#define BB_ADD1(buf,byte) BB_WRITE1((buf),(buf)->used,(byte))
+#define BB_GET_ADD_ADDRESS(buf) ((buf)->p + (buf)->used)
+#define BB_GET_OFFSET_POS(buf) ((buf)->used)
/* from < to */
-#define BBUF_MOVE_RIGHT(buf,from,to,n) do {\
- if ((unsigned int )((to)+(n)) > (buf)->alloc) BBUF_EXPAND((buf),(to) + (n));\
+#define BB_MOVE_RIGHT(buf,from,to,n) do {\
+ if ((unsigned int )((to)+(n)) > (buf)->alloc) BB_EXPAND((buf),(to) + (n));\
xmemmove((buf)->p + (to), (buf)->p + (from), (n));\
if ((unsigned int )((to)+(n)) > (buf)->used) (buf)->used = (to) + (n);\
} while (0)
/* from > to */
-#define BBUF_MOVE_LEFT(buf,from,to,n) do {\
+#define BB_MOVE_LEFT(buf,from,to,n) do {\
xmemmove((buf)->p + (to), (buf)->p + (from), (n));\
} while (0)
/* from > to */
-#define BBUF_MOVE_LEFT_REDUCE(buf,from,to) do {\
+#define BB_MOVE_LEFT_REDUCE(buf,from,to) do {\
xmemmove((buf)->p + (to), (buf)->p + (from), (buf)->used - (from));\
(buf)->used -= (from - to);\
} while (0)
-#define BBUF_INSERT(buf,pos,bytes,n) do {\
+#define BB_INSERT(buf,pos,bytes,n) do {\
if (pos >= (buf)->used) {\
- BBUF_WRITE(buf,pos,bytes,n);\
+ BB_WRITE(buf,pos,bytes,n);\
}\
else {\
- BBUF_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\
+ BB_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\
xmemcpy((buf)->p + (pos), (bytes), (n));\
}\
} while (0)
-#define BBUF_GET_BYTE(buf, pos) (buf)->p[(pos)]
-
+#define BB_GET_BYTE(buf, pos) (buf)->p[(pos)]
+
+
+/* has body */
+#define ANCHOR_PREC_READ (1<<0)
+#define ANCHOR_PREC_READ_NOT (1<<1)
+#define ANCHOR_LOOK_BEHIND (1<<2)
+#define ANCHOR_LOOK_BEHIND_NOT (1<<3)
+/* no body */
+#define ANCHOR_BEGIN_BUF (1<<4)
+#define ANCHOR_BEGIN_LINE (1<<5)
+#define ANCHOR_BEGIN_POSITION (1<<6)
+#define ANCHOR_END_BUF (1<<7)
+#define ANCHOR_SEMI_END_BUF (1<<8)
+#define ANCHOR_END_LINE (1<<9)
+#define ANCHOR_WORD_BOUNDARY (1<<10)
+#define ANCHOR_NO_WORD_BOUNDARY (1<<11)
+#define ANCHOR_WORD_BEGIN (1<<12)
+#define ANCHOR_WORD_END (1<<13)
+#define ANCHOR_ANYCHAR_STAR (1<<14) /* ".*" optimize info */
+#define ANCHOR_ANYCHAR_STAR_ML (1<<15) /* ".*" optimize info (multi-line) */
+#define ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY (1<<16)
+#define ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY (1<<17)
-#define ANCHOR_BEGIN_BUF (1<<0)
-#define ANCHOR_BEGIN_LINE (1<<1)
-#define ANCHOR_BEGIN_POSITION (1<<2)
-#define ANCHOR_END_BUF (1<<3)
-#define ANCHOR_SEMI_END_BUF (1<<4)
-#define ANCHOR_END_LINE (1<<5)
-#define ANCHOR_WORD_BOUND (1<<6)
-#define ANCHOR_NOT_WORD_BOUND (1<<7)
-#define ANCHOR_WORD_BEGIN (1<<8)
-#define ANCHOR_WORD_END (1<<9)
-#define ANCHOR_PREC_READ (1<<10)
-#define ANCHOR_PREC_READ_NOT (1<<11)
-#define ANCHOR_LOOK_BEHIND (1<<12)
-#define ANCHOR_LOOK_BEHIND_NOT (1<<13)
+#define ANCHOR_HAS_BODY(a) ((a)->type < ANCHOR_BEGIN_BUF)
-#define ANCHOR_ANYCHAR_STAR (1<<14) /* ".*" optimize info */
-#define ANCHOR_ANYCHAR_STAR_ML (1<<15) /* ".*" optimize info (multi-line) */
+#define IS_WORD_ANCHOR_TYPE(type) \
+ ((type) == ANCHOR_WORD_BOUNDARY || (type) == ANCHOR_NO_WORD_BOUNDARY || \
+ (type) == ANCHOR_WORD_BEGIN || (type) == ANCHOR_WORD_END)
/* operation code */
enum OpCode {
@@ -444,7 +520,9 @@ enum OpCode {
OP_CCLASS_NOT,
OP_CCLASS_MB_NOT,
OP_CCLASS_MIX_NOT,
+#ifdef USE_OP_CCLASS_NODE
OP_CCLASS_NODE, /* pointer to CClassNode node */
+#endif
OP_ANYCHAR, /* "." */
OP_ANYCHAR_ML, /* "." multi-line */
@@ -454,12 +532,17 @@ enum OpCode {
OP_ANYCHAR_ML_STAR_PEEK_NEXT,
OP_WORD,
- OP_NOT_WORD,
- OP_WORD_BOUND,
- OP_NOT_WORD_BOUND,
+ OP_WORD_ASCII,
+ OP_NO_WORD,
+ OP_NO_WORD_ASCII,
+ OP_WORD_BOUNDARY,
+ OP_NO_WORD_BOUNDARY,
OP_WORD_BEGIN,
OP_WORD_END,
+ OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
+ OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
+
OP_BEGIN_BUF,
OP_END_BUF,
OP_BEGIN_LINE,
@@ -469,11 +552,13 @@ enum OpCode {
OP_BACKREF1,
OP_BACKREF2,
- OP_BACKREFN,
- OP_BACKREFN_IC,
+ OP_BACKREF_N,
+ OP_BACKREF_N_IC,
OP_BACKREF_MULTI,
OP_BACKREF_MULTI_IC,
- OP_BACKREF_WITH_LEVEL, /* \k<xxx+n>, \k<xxx-n> */
+ OP_BACKREF_WITH_LEVEL, /* \k<xxx+n>, \k<xxx-n> */
+ OP_BACKREF_CHECK, /* (?(n)), (?('name')) */
+ OP_BACKREF_CHECK_WITH_LEVEL, /* (?(n-level)), (?('name-level')) */
OP_MEMORY_START,
OP_MEMORY_START_PUSH, /* push back-tracker to stack */
@@ -485,6 +570,7 @@ enum OpCode {
OP_FAIL, /* pop stack and move */
OP_JUMP,
OP_PUSH,
+ OP_PUSH_SUPER,
OP_POP,
OP_PUSH_OR_JUMP_EXACT1, /* if match exact then push, else jump. */
OP_PUSH_IF_PEEK_NEXT, /* if match exact then push, else none. */
@@ -494,35 +580,45 @@ enum OpCode {
OP_REPEAT_INC_NG, /* non greedy */
OP_REPEAT_INC_SG, /* search and get in stack */
OP_REPEAT_INC_NG_SG, /* search and get in stack (non greedy) */
- OP_NULL_CHECK_START, /* null loop checker start */
- OP_NULL_CHECK_END, /* null loop checker end */
- OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */
- OP_NULL_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */
-
- OP_PUSH_POS, /* (?=...) start */
- OP_POP_POS, /* (?=...) end */
- OP_PUSH_POS_NOT, /* (?!...) start */
- OP_FAIL_POS, /* (?!...) end */
- OP_PUSH_STOP_BT, /* (?>...) start */
- OP_POP_STOP_BT, /* (?>...) end */
- OP_LOOK_BEHIND, /* (?<=...) start (no needs end opcode) */
- OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */
- OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end */
+ OP_EMPTY_CHECK_START, /* null loop checker start */
+ OP_EMPTY_CHECK_END, /* null loop checker end */
+ OP_EMPTY_CHECK_END_MEMST, /* null loop checker end (with capture status) */
+ OP_EMPTY_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */
+
+ OP_PREC_READ_START, /* (?=...) start */
+ OP_PREC_READ_END, /* (?=...) end */
+ OP_PREC_READ_NOT_START, /* (?!...) start */
+ OP_PREC_READ_NOT_END, /* (?!...) end */
+ OP_ATOMIC_START, /* (?>...) start */
+ OP_ATOMIC_END, /* (?>...) end */
+ OP_LOOK_BEHIND, /* (?<=...) start (no needs end opcode) */
+ OP_LOOK_BEHIND_NOT_START, /* (?<!...) start */
+ OP_LOOK_BEHIND_NOT_END, /* (?<!...) end */
OP_CALL, /* \g<name> */
OP_RETURN,
-
- OP_STATE_CHECK_PUSH, /* combination explosion check and push */
- OP_STATE_CHECK_PUSH_OR_JUMP, /* check ok -> push, else jump */
- OP_STATE_CHECK, /* check only */
- OP_STATE_CHECK_ANYCHAR_STAR,
- OP_STATE_CHECK_ANYCHAR_ML_STAR,
+ OP_PUSH_SAVE_VAL,
+ OP_UPDATE_VAR,
/* no need: IS_DYNAMIC_OPTION() == 0 */
OP_SET_OPTION_PUSH, /* set option and push recover option */
OP_SET_OPTION /* set option */
};
+enum SaveType {
+ SAVE_KEEP = 0, /* SAVE S */
+ SAVE_S = 1,
+ SAVE_RIGHT_RANGE = 2,
+};
+
+enum UpdateVarType {
+ UPDATE_VAR_KEEP_FROM_STACK_LAST = 0,
+ UPDATE_VAR_S_FROM_STACK = 1,
+ UPDATE_VAR_RIGHT_RANGE_FROM_STACK = 2,
+ UPDATE_VAR_RIGHT_RANGE_FROM_S_STACK = 3,
+ UPDATE_VAR_RIGHT_RANGE_INIT = 4,
+};
+
typedef int RelAddrType;
typedef int AbsAddrType;
typedef int LengthType;
@@ -530,18 +626,22 @@ typedef int RepeatNumType;
typedef int MemNumType;
typedef short int StateCheckNumType;
typedef void* PointerType;
+typedef int SaveType;
+typedef int UpdateVarType;
+typedef int ModeType;
#define SIZE_OPCODE 1
#define SIZE_RELADDR sizeof(RelAddrType)
#define SIZE_ABSADDR sizeof(AbsAddrType)
#define SIZE_LENGTH sizeof(LengthType)
#define SIZE_MEMNUM sizeof(MemNumType)
-#define SIZE_STATE_CHECK_NUM sizeof(StateCheckNumType)
#define SIZE_REPEATNUM sizeof(RepeatNumType)
#define SIZE_OPTION sizeof(OnigOptionType)
#define SIZE_CODE_POINT sizeof(OnigCodePoint)
#define SIZE_POINTER sizeof(PointerType)
-
+#define SIZE_SAVE_TYPE sizeof(SaveType)
+#define SIZE_UPDATE_VAR_TYPE sizeof(UpdateVarType)
+#define SIZE_MODE sizeof(ModeType)
#define GET_RELADDR_INC(addr,p) PLATFORM_GET_INC(addr, p, RelAddrType)
#define GET_ABSADDR_INC(addr,p) PLATFORM_GET_INC(addr, p, AbsAddrType)
@@ -550,7 +650,9 @@ typedef void* PointerType;
#define GET_REPEATNUM_INC(num,p) PLATFORM_GET_INC(num, p, RepeatNumType)
#define GET_OPTION_INC(option,p) PLATFORM_GET_INC(option, p, OnigOptionType)
#define GET_POINTER_INC(ptr,p) PLATFORM_GET_INC(ptr, p, PointerType)
-#define GET_STATE_CHECK_NUM_INC(num,p) PLATFORM_GET_INC(num, p, StateCheckNumType)
+#define GET_SAVE_TYPE_INC(type,p) PLATFORM_GET_INC(type, p, SaveType)
+#define GET_UPDATE_VAR_TYPE_INC(type,p) PLATFORM_GET_INC(type, p, UpdateVarType)
+#define GET_MODE_INC(mode,p) PLATFORM_GET_INC(mode, p, ModeType)
/* code point's address must be aligned address. */
#define GET_CODE_POINT(code,p) code = *((OnigCodePoint* )(p))
@@ -565,15 +667,17 @@ typedef void* PointerType;
#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)
#define SIZE_OP_JUMP (SIZE_OPCODE + SIZE_RELADDR)
#define SIZE_OP_PUSH (SIZE_OPCODE + SIZE_RELADDR)
+#define SIZE_OP_PUSH_SUPER (SIZE_OPCODE + SIZE_RELADDR)
#define SIZE_OP_POP SIZE_OPCODE
#define SIZE_OP_PUSH_OR_JUMP_EXACT1 (SIZE_OPCODE + SIZE_RELADDR + 1)
#define SIZE_OP_PUSH_IF_PEEK_NEXT (SIZE_OPCODE + SIZE_RELADDR + 1)
#define SIZE_OP_REPEAT_INC (SIZE_OPCODE + SIZE_MEMNUM)
#define SIZE_OP_REPEAT_INC_NG (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_PUSH_POS SIZE_OPCODE
-#define SIZE_OP_PUSH_POS_NOT (SIZE_OPCODE + SIZE_RELADDR)
-#define SIZE_OP_POP_POS SIZE_OPCODE
-#define SIZE_OP_FAIL_POS SIZE_OPCODE
+#define SIZE_OP_WORD_BOUNDARY (SIZE_OPCODE + SIZE_MODE)
+#define SIZE_OP_PREC_READ_START SIZE_OPCODE
+#define SIZE_OP_PREC_READ_NOT_START (SIZE_OPCODE + SIZE_RELADDR)
+#define SIZE_OP_PREC_READ_END SIZE_OPCODE
+#define SIZE_OP_PREC_READ_NOT_END SIZE_OPCODE
#define SIZE_OP_SET_OPTION (SIZE_OPCODE + SIZE_OPTION)
#define SIZE_OP_SET_OPTION_PUSH (SIZE_OPCODE + SIZE_OPTION)
#define SIZE_OP_FAIL SIZE_OPCODE
@@ -583,22 +687,17 @@ typedef void* PointerType;
#define SIZE_OP_MEMORY_END_PUSH_REC (SIZE_OPCODE + SIZE_MEMNUM)
#define SIZE_OP_MEMORY_END (SIZE_OPCODE + SIZE_MEMNUM)
#define SIZE_OP_MEMORY_END_REC (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_PUSH_STOP_BT SIZE_OPCODE
-#define SIZE_OP_POP_STOP_BT SIZE_OPCODE
-#define SIZE_OP_NULL_CHECK_START (SIZE_OPCODE + SIZE_MEMNUM)
-#define SIZE_OP_NULL_CHECK_END (SIZE_OPCODE + SIZE_MEMNUM)
+#define SIZE_OP_ATOMIC_START SIZE_OPCODE
+#define SIZE_OP_ATOMIC_END SIZE_OPCODE
+#define SIZE_OP_EMPTY_CHECK_START (SIZE_OPCODE + SIZE_MEMNUM)
+#define SIZE_OP_EMPTY_CHECK_END (SIZE_OPCODE + SIZE_MEMNUM)
#define SIZE_OP_LOOK_BEHIND (SIZE_OPCODE + SIZE_LENGTH)
-#define SIZE_OP_PUSH_LOOK_BEHIND_NOT (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)
-#define SIZE_OP_FAIL_LOOK_BEHIND_NOT SIZE_OPCODE
+#define SIZE_OP_LOOK_BEHIND_NOT_START (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)
+#define SIZE_OP_LOOK_BEHIND_NOT_END SIZE_OPCODE
#define SIZE_OP_CALL (SIZE_OPCODE + SIZE_ABSADDR)
#define SIZE_OP_RETURN SIZE_OPCODE
-
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
-#define SIZE_OP_STATE_CHECK (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
-#define SIZE_OP_STATE_CHECK_PUSH (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
-#define SIZE_OP_STATE_CHECK_PUSH_OR_JUMP (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
-#define SIZE_OP_STATE_CHECK_ANYCHAR_STAR (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
-#endif
+#define SIZE_OP_PUSH_SAVE_VAL (SIZE_OPCODE + SIZE_SAVE_TYPE + SIZE_MEMNUM)
+#define SIZE_OP_UPDATE_VAR (SIZE_OPCODE + SIZE_UPDATE_VAR_TYPE + SIZE_MEMNUM)
#define MC_ESC(syn) (syn)->meta_char_table.esc
#define MC_ANYCHAR(syn) (syn)->meta_char_table.anychar
@@ -648,111 +747,17 @@ typedef void* PointerType;
#define FLAG_NCCLASS_SHARE (1<<1)
#define NCCLASS_SET_NOT(nd) NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_NOT)
-#define NCCLASS_SET_SHARE(nd) NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_SHARE)
#define NCCLASS_CLEAR_NOT(nd) NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)
#define IS_NCCLASS_NOT(nd) IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
-#define IS_NCCLASS_SHARE(nd) IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_SHARE)
-
-typedef struct {
- int type;
- /* struct _Node* next; */
- /* unsigned int flags; */
-} NodeBase;
-
-typedef struct {
- NodeBase base;
- unsigned int flags;
- BitSet bs;
- BBuf* mbuf; /* multi-byte info or NULL */
-} CClassNode;
-
-#ifdef _WIN64
-typedef __int64 OnigStackIndex;
-#else
-typedef long OnigStackIndex;
-#endif
-
-typedef struct _OnigStackType {
- unsigned int type;
- union {
- struct {
- UChar *pcode; /* byte code position */
- UChar *pstr; /* string position */
- UChar *pstr_prev; /* previous char position of pstr */
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- unsigned int state_check;
-#endif
- } state;
- struct {
- int count; /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
- UChar *pcode; /* byte code position (head of repeated target) */
- int num; /* repeat id */
- } repeat;
- struct {
- OnigStackIndex si; /* index of stack */
- } repeat_inc;
- struct {
- int num; /* memory num */
- UChar *pstr; /* start/end position */
- /* Following information is set, if this stack type is MEM-START */
- OnigStackIndex start; /* prev. info (for backtrack "(...)*" ) */
- OnigStackIndex end; /* prev. info (for backtrack "(...)*" ) */
- } mem;
- struct {
- int num; /* null check id */
- UChar *pstr; /* start position */
- } null_check;
-#ifdef USE_SUBEXP_CALL
- struct {
- UChar *ret_addr; /* byte code position */
- int num; /* null check id */
- UChar *pstr; /* string position */
- } call_frame;
-#endif
- } u;
-} OnigStackType;
-
-typedef struct {
- void* stack_p;
- int stack_n;
- OnigOptionType options;
- OnigRegion* region;
- int ptr_num;
- const UChar* start; /* search start position (for \G: BEGIN_POSITION) */
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
- int best_len; /* for ONIG_OPTION_FIND_LONGEST */
- UChar* best_s;
-#endif
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- void* state_check_buff;
- int state_check_buff_size;
-#endif
-} OnigMatchArg;
-
-
-#define IS_CODE_SB_WORD(enc,code) \
- (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))
-
-typedef struct OnigEndCallListItem {
- struct OnigEndCallListItem* next;
- void (*func)(void);
-} OnigEndCallListItemType;
extern void onig_add_end_call(void (*func)(void));
#ifdef ONIG_DEBUG
-typedef struct {
- short int opcode;
- char* name;
- short int arg_type;
-} OnigOpInfoType;
-
-extern OnigOpInfoType OnigOpInfo[];
-
-
-extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar** nextp, OnigEncoding enc));
+#ifdef ONIG_DEBUG_COMPILE
+extern void onig_print_compiled_byte_code_list(FILE* f, regex_t* reg);
+#endif
#ifdef ONIG_DEBUG_STATISTICS
extern void onig_statistics_init P_((void));
@@ -760,17 +765,17 @@ extern int onig_print_statistics P_((FILE* f));
#endif
#endif
-extern void onig_warning(const char* s);
+extern void onig_warning(const char* s);
extern UChar* onig_error_code_to_format P_((int code));
-extern void onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
-extern int onig_bbuf_init P_((BBuf* buf, int size));
-extern int onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));
-extern void onig_transfer P_((regex_t* to, regex_t* from));
-extern int onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));
-extern int onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, CClassNode* cc));
+extern void onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
+extern int onig_bbuf_init P_((BBuf* buf, int size));
+extern int onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));
+extern void onig_transfer P_((regex_t* to, regex_t* from));
+extern int onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, void* /* CClassNode* */ cc));
/* strend hash */
typedef void hash_table_type;
+
#ifdef _WIN32
# include <windows.h>
typedef ULONG_PTR hash_data_type;
diff --git a/ext/mbstring/oniguruma/src/regparse.c b/ext/mbstring/oniguruma/src/regparse.c
index 55b94af43b..0d29bb27c3 100644
--- a/ext/mbstring/oniguruma/src/regparse.c
+++ b/ext/mbstring/oniguruma/src/regparse.c
@@ -26,6 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+
#include "regparse.h"
#include "st.h"
@@ -38,6 +39,49 @@
#define CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS
+OnigSyntaxType OnigSyntaxOniguruma = {
+ (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
+ ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
+ ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_O_BRACE_OCTAL |
+ ONIG_SYN_OP_ESC_CONTROL_CHARS |
+ ONIG_SYN_OP_ESC_C_CONTROL )
+ & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
+ , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
+ ONIG_SYN_OP2_OPTION_RUBY |
+ ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
+ ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
+ ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
+ ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+ ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
+ ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT |
+ ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
+ ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |
+ ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
+ ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
+ ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
+ ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |
+ ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |
+ ONIG_SYN_OP2_ESC_H_XDIGIT | ONIG_SYN_OP2_ESC_U_HEX4 )
+ , ( SYN_GNU_REGEX_BV |
+ ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |
+ ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |
+ ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
+ ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |
+ ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY |
+ ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |
+ ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )
+ , ONIG_OPTION_NONE
+ ,
+ {
+ (OnigCodePoint )'\\' /* esc */
+ , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */
+ , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */
+ , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
+ , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
+ , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
+ }
+};
+
OnigSyntaxType OnigSyntaxRuby = {
(( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
@@ -48,14 +92,19 @@ OnigSyntaxType OnigSyntaxRuby = {
, ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
ONIG_SYN_OP2_OPTION_RUBY |
ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
+ ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
+ ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
+ ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+ ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
+ ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |
ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |
ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |
ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |
- ONIG_SYN_OP2_ESC_H_XDIGIT )
- , ( SYN_GNU_REGEX_BV |
+ ONIG_SYN_OP2_ESC_H_XDIGIT | ONIG_SYN_OP2_ESC_U_HEX4 )
+ , ( SYN_GNU_REGEX_BV |
ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |
ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |
ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
@@ -75,7 +124,7 @@ OnigSyntaxType OnigSyntaxRuby = {
}
};
-OnigSyntaxType* OnigDefaultSyntax = ONIG_SYNTAX_RUBY;
+OnigSyntaxType* OnigDefaultSyntax = ONIG_SYNTAX_ONIGURUMA;
extern void onig_null_warn(const char* s ARG_UNUSED) { }
@@ -140,6 +189,16 @@ onig_set_parse_depth_limit(unsigned int depth)
return 0;
}
+static int
+positive_int_multiply(int x, int y)
+{
+ if (x == 0 || y == 0) return 0;
+
+ if (x < INT_MAX / y)
+ return x * y;
+ else
+ return -1;
+}
static void
bbuf_free(BBuf* bbuf)
@@ -158,17 +217,31 @@ bbuf_clone(BBuf** rto, BBuf* from)
*rto = to = (BBuf* )xmalloc(sizeof(BBuf));
CHECK_NULL_RETURN_MEMERR(to);
- r = BBUF_INIT(to, from->alloc);
- if (r != 0) return r;
+ r = BB_INIT(to, from->alloc);
+ if (r != 0) {
+ xfree(to->p);
+ *rto = 0;
+ return r;
+ }
to->used = from->used;
xmemcpy(to->p, from->p, from->used);
return 0;
}
-#define BACKREF_REL_TO_ABS(rel_no, env) \
- ((env)->num_mem + 1 + (rel_no))
+static int backref_rel_to_abs(int rel_no, ScanEnv* env)
+{
+ if (rel_no > 0) {
+ return env->num_mem + rel_no;
+ }
+ else {
+ return env->num_mem + 1 + rel_no;
+ }
+}
+
+#define OPTION_ON(v,f) ((v) |= (f))
+#define OPTION_OFF(v,f) ((v) &= ~(f))
-#define ONOFF(v,f,negative) (negative) ? ((v) &= ~(f)) : ((v) |= (f))
+#define OPTION_NEGATE(v,f,negative) (negative) ? ((v) &= ~(f)) : ((v) |= (f))
#define MBCODE_START_POS(enc) \
(OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
@@ -179,7 +252,7 @@ bbuf_clone(BBuf** rto, BBuf* from)
#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\
- if (r) return r;\
+ if (r != 0) return r;\
}\
} while (0)
@@ -262,21 +335,20 @@ onig_strncmp(const UChar* s1, const UChar* s2, int n)
extern void
onig_strcpy(UChar* dest, const UChar* src, const UChar* end)
{
- int len = end - src;
+ int len = (int )(end - src);
if (len > 0) {
xmemcpy(dest, src, len);
dest[len] = (UChar )0;
}
}
-#ifdef USE_NAMED_GROUP
static UChar*
strdup_with_null(OnigEncoding enc, UChar* s, UChar* end)
{
int slen, term_len, i;
UChar *r;
- slen = end - s;
+ slen = (int )(end - s);
term_len = ONIGENC_MBC_MINLEN(enc);
r = (UChar* )xmalloc(slen + term_len);
@@ -288,8 +360,35 @@ strdup_with_null(OnigEncoding enc, UChar* s, UChar* end)
return r;
}
+
+static int
+save_entry(ScanEnv* env, enum SaveType type, int* id)
+{
+ int nid = env->save_num;
+
+#if 0
+ if (IS_NULL(env->saves)) {
+ int n = 10;
+ env->saves = (SaveItem* )xmalloc(sizeof(SaveItem) * n);
+ CHECK_NULL_RETURN_MEMERR(env->saves);
+ env->save_alloc_num = n;
+ }
+ else if (env->save_alloc_num <= nid) {
+ int n = env->save_alloc_num * 2;
+ SaveItem* p = (SaveItem* )xrealloc(env->saves, sizeof(SaveItem) * n);
+ CHECK_NULL_RETURN_MEMERR(p);
+ env->saves = p;
+ env->save_alloc_num = n;
+ }
+
+ env->saves[nid].type = type;
#endif
+ env->save_num++;
+ *id = nid;
+ return 0;
+}
+
/* scan pattern methods */
#define PEND_VALUE 0
@@ -319,7 +418,7 @@ strdup_with_null(OnigEncoding enc, UChar* s, UChar* end)
static UChar*
strcat_capa(UChar* dest, UChar* dest_end, const UChar* src, const UChar* src_end,
- int capa)
+ int capa)
{
UChar* r;
@@ -336,7 +435,7 @@ strcat_capa(UChar* dest, UChar* dest_end, const UChar* src, const UChar* src_end
/* dest on static area */
static UChar*
strcat_capa_from_static(UChar* dest, UChar* dest_end,
- const UChar* src, const UChar* src_end, int capa)
+ const UChar* src, const UChar* src_end, int capa)
{
UChar* r;
@@ -404,7 +503,7 @@ onig_st_init_strend_table_with_size(int size)
extern int
onig_st_lookup_strend(hash_table_type* table, const UChar* str_key,
- const UChar* end_key, hash_data_type *value)
+ const UChar* end_key, hash_data_type *value)
{
st_str_end_key key;
@@ -416,12 +515,14 @@ onig_st_lookup_strend(hash_table_type* table, const UChar* str_key,
extern int
onig_st_insert_strend(hash_table_type* table, const UChar* str_key,
- const UChar* end_key, hash_data_type value)
+ const UChar* end_key, hash_data_type value)
{
st_str_end_key* key;
int result;
key = (st_str_end_key* )xmalloc(sizeof(st_str_end_key));
+ CHECK_NULL_RETURN_MEMERR(key);
+
key->s = (UChar* )str_key;
key->end = (UChar* )end_key;
result = onig_st_insert(table, (st_data_t )key, value);
@@ -434,8 +535,6 @@ onig_st_insert_strend(hash_table_type* table, const UChar* str_key,
#endif /* USE_ST_LIBRARY */
-#ifdef USE_NAMED_GROUP
-
#define INIT_NAME_BACKREFS_ALLOC_NUM 8
typedef struct {
@@ -519,7 +618,7 @@ onig_names_free(regex_t* reg)
NameTable* t;
r = names_clear(reg);
- if (r) return r;
+ if (r != 0) return r;
t = (NameTable* )reg->name_table;
if (IS_NOT_NULL(t)) onig_st_free_table(t);
@@ -700,7 +799,7 @@ onig_names_free(regex_t* reg)
NameTable* t;
r = names_clear(reg);
- if (r) return r;
+ if (r != 0) return r;
t = (NameTable* )reg->name_table;
if (IS_NOT_NULL(t)) xfree(t);
@@ -762,6 +861,7 @@ onig_number_of_names(regex_t* reg)
static int
name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
{
+ int r;
int alloc;
NameEntry* e;
NameTable* t = (NameTable* )reg->name_table;
@@ -783,10 +883,11 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
if (IS_NULL(e->name)) {
xfree(e); return ONIGERR_MEMORY;
}
- onig_st_insert_strend(t, e->name, (e->name + (name_end - name)),
- (HashDataType )e);
+ r = onig_st_insert_strend(t, e->name, (e->name + (name_end - name)),
+ (HashDataType )e);
+ if (r < 0) return r;
- e->name_len = name_end - name;
+ e->name_len = (int )(name_end - name);
e->back_num = 0;
e->back_alloc = 0;
e->back_refs = (int* )NULL;
@@ -871,7 +972,7 @@ name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)
extern int
onig_name_to_group_numbers(regex_t* reg, const UChar* name,
- const UChar* name_end, int** nums)
+ const UChar* name_end, int** nums)
{
NameEntry* e = name_find(reg, name, name_end);
@@ -892,7 +993,7 @@ onig_name_to_group_numbers(regex_t* reg, const UChar* name,
extern int
onig_name_to_backref_number(regex_t* reg, const UChar* name,
- const UChar* name_end, OnigRegion *region)
+ const UChar* name_end, OnigRegion *region)
{
int i, n, *nums;
@@ -914,115 +1015,87 @@ onig_name_to_backref_number(regex_t* reg, const UChar* name,
}
}
-#else /* USE_NAMED_GROUP */
-
-extern int
-onig_name_to_group_numbers(regex_t* reg, const UChar* name,
- const UChar* name_end, int** nums)
-{
- return ONIG_NO_SUPPORT_CONFIG;
-}
-
-extern int
-onig_name_to_backref_number(regex_t* reg, const UChar* name,
- const UChar* name_end, OnigRegion* region)
-{
- return ONIG_NO_SUPPORT_CONFIG;
-}
-
-extern int
-onig_foreach_name(regex_t* reg,
- int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), void* arg)
-{
- return ONIG_NO_SUPPORT_CONFIG;
-}
-
-extern int
-onig_number_of_names(regex_t* reg)
-{
- return 0;
-}
-#endif /* else USE_NAMED_GROUP */
-
extern int
onig_noname_group_capture_is_active(regex_t* reg)
{
if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_DONT_CAPTURE_GROUP))
return 0;
-#ifdef USE_NAMED_GROUP
if (onig_number_of_names(reg) > 0 &&
IS_SYNTAX_BV(reg->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
!ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {
return 0;
}
-#endif
return 1;
}
-#define INIT_SCANENV_MEMNODES_ALLOC_SIZE 16
+#define INIT_SCANENV_MEMENV_ALLOC_SIZE 16
static void
scan_env_clear(ScanEnv* env)
{
- int i;
-
- BIT_STATUS_CLEAR(env->capture_history);
- BIT_STATUS_CLEAR(env->bt_mem_start);
- BIT_STATUS_CLEAR(env->bt_mem_end);
- BIT_STATUS_CLEAR(env->backrefed_mem);
+ MEM_STATUS_CLEAR(env->capture_history);
+ MEM_STATUS_CLEAR(env->bt_mem_start);
+ MEM_STATUS_CLEAR(env->bt_mem_end);
+ MEM_STATUS_CLEAR(env->backrefed_mem);
env->error = (UChar* )NULL;
env->error_end = (UChar* )NULL;
env->num_call = 0;
+
+#ifdef USE_CALL
+ env->unset_addr_list = NULL;
+ env->has_call_zero = 0;
+#endif
+
env->num_mem = 0;
-#ifdef USE_NAMED_GROUP
env->num_named = 0;
-#endif
- env->mem_alloc = 0;
- env->mem_nodes_dynamic = (Node** )NULL;
+ env->mem_alloc = 0;
+ env->mem_env_dynamic = (MemEnv* )NULL;
- for (i = 0; i < SCANENV_MEMNODES_SIZE; i++)
- env->mem_nodes_static[i] = NULL_NODE;
+ xmemset(env->mem_env_static, 0, sizeof(env->mem_env_static));
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- env->num_comb_exp_check = 0;
- env->comb_exp_max_regnum = 0;
- env->curr_max_regnum = 0;
- env->has_recursion = 0;
-#endif
env->parse_depth = 0;
+ env->keep_num = 0;
+ env->save_num = 0;
+ env->save_alloc_num = 0;
+ env->saves = 0;
}
static int
scan_env_add_mem_entry(ScanEnv* env)
{
int i, need, alloc;
- Node** p;
+ MemEnv* p;
need = env->num_mem + 1;
if (need > MaxCaptureNum && MaxCaptureNum != 0)
return ONIGERR_TOO_MANY_CAPTURES;
- if (need >= SCANENV_MEMNODES_SIZE) {
+ if (need >= SCANENV_MEMENV_SIZE) {
if (env->mem_alloc <= need) {
- if (IS_NULL(env->mem_nodes_dynamic)) {
- alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE;
- p = (Node** )xmalloc(sizeof(Node*) * alloc);
- xmemcpy(p, env->mem_nodes_static,
- sizeof(Node*) * SCANENV_MEMNODES_SIZE);
+ if (IS_NULL(env->mem_env_dynamic)) {
+ alloc = INIT_SCANENV_MEMENV_ALLOC_SIZE;
+ p = (MemEnv* )xmalloc(sizeof(MemEnv) * alloc);
+ CHECK_NULL_RETURN_MEMERR(p);
+ xmemcpy(p, env->mem_env_static, sizeof(env->mem_env_static));
}
else {
alloc = env->mem_alloc * 2;
- p = (Node** )xrealloc(env->mem_nodes_dynamic, sizeof(Node*) * alloc);
+ p = (MemEnv* )xrealloc(env->mem_env_dynamic, sizeof(MemEnv) * alloc);
+ CHECK_NULL_RETURN_MEMERR(p);
}
- CHECK_NULL_RETURN_MEMERR(p);
- for (i = env->num_mem + 1; i < alloc; i++)
- p[i] = NULL_NODE;
+ for (i = env->num_mem + 1; i < alloc; i++) {
+ p[i].node = NULL_NODE;
+#if 0
+ p[i].in = 0;
+ p[i].recursion = 0;
+#endif
+ }
- env->mem_nodes_dynamic = p;
+ env->mem_env_dynamic = p;
env->mem_alloc = alloc;
}
}
@@ -1035,7 +1108,7 @@ static int
scan_env_set_mem_node(ScanEnv* env, int num, Node* node)
{
if (env->num_mem >= num)
- SCANENV_MEM_NODES(env)[num] = node;
+ SCANENV_MEMENV(env)[num].node = node;
else
return ONIGERR_PARSER_BUG;
return 0;
@@ -1051,19 +1124,19 @@ onig_node_free(Node* node)
fprintf(stderr, "onig_node_free: %p\n", node);
#endif
- switch (NTYPE(node)) {
- case NT_STR:
- if (NSTR(node)->capa != 0 &&
- IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {
- xfree(NSTR(node)->s);
+ switch (NODE_TYPE(node)) {
+ case NODE_STRING:
+ if (STR_(node)->capa != 0 &&
+ IS_NOT_NULL(STR_(node)->s) && STR_(node)->s != STR_(node)->buf) {
+ xfree(STR_(node)->s);
}
break;
- case NT_LIST:
- case NT_ALT:
- onig_node_free(NCAR(node));
+ case NODE_LIST:
+ case NODE_ALT:
+ onig_node_free(NODE_CAR(node));
{
- Node* next_node = NCDR(node);
+ Node* next_node = NODE_CDR(node);
xfree(node);
node = next_node;
@@ -1071,47 +1144,78 @@ onig_node_free(Node* node)
}
break;
- case NT_CCLASS:
+ case NODE_CCLASS:
{
- CClassNode* cc = NCCLASS(node);
+ CClassNode* cc = CCLASS_(node);
- if (IS_NCCLASS_SHARE(cc)) return ;
if (cc->mbuf)
bbuf_free(cc->mbuf);
}
break;
- case NT_QTFR:
- if (NQTFR(node)->target)
- onig_node_free(NQTFR(node)->target);
+ case NODE_BACKREF:
+ if (IS_NOT_NULL(BACKREF_(node)->back_dynamic))
+ xfree(BACKREF_(node)->back_dynamic);
break;
- case NT_ENCLOSE:
- if (NENCLOSE(node)->target)
- onig_node_free(NENCLOSE(node)->target);
+ case NODE_ENCLOSURE:
+ if (NODE_BODY(node))
+ onig_node_free(NODE_BODY(node));
+
+ {
+ EnclosureNode* en = ENCLOSURE_(node);
+ if (en->type == ENCLOSURE_IF_ELSE) {
+ onig_node_free(en->te.Then);
+ onig_node_free(en->te.Else);
+ }
+ }
break;
- case NT_BREF:
- if (IS_NOT_NULL(NBREF(node)->back_dynamic))
- xfree(NBREF(node)->back_dynamic);
+ case NODE_QUANT:
+ case NODE_ANCHOR:
+ if (NODE_BODY(node))
+ onig_node_free(NODE_BODY(node));
break;
- case NT_ANCHOR:
- if (NANCHOR(node)->target)
- onig_node_free(NANCHOR(node)->target);
+ case NODE_CTYPE:
+ case NODE_CALL:
+ case NODE_GIMMICK:
break;
}
xfree(node);
}
+static void
+cons_node_free_alone(Node* node)
+{
+ NODE_CAR(node) = 0;
+ NODE_CDR(node) = 0;
+ onig_node_free(node);
+}
+
+extern void
+list_node_free_not_car(Node* node)
+{
+ Node* next_node;
+
+ start:
+ if (IS_NULL(node)) return;
+
+ next_node = NODE_CDR(node);
+ xfree(node);
+ node = next_node;
+ goto start;
+}
+
static Node*
node_new(void)
{
Node* node;
node = (Node* )xmalloc(sizeof(Node));
- /* xmemset(node, 0, sizeof(Node)); */
+ xmemset(node, 0, sizeof(*node));
+
#ifdef DEBUG_NODE_FREE
fprintf(stderr, "node_new: %p\n", node);
#endif
@@ -1123,7 +1227,6 @@ static void
initialize_cclass(CClassNode* cc)
{
BITSET_CLEAR(cc->bs);
- /* cc->base.flags = 0; */
cc->flags = 0;
cc->mbuf = NULL;
}
@@ -1134,42 +1237,76 @@ node_new_cclass(void)
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_CCLASS);
- initialize_cclass(NCCLASS(node));
+ NODE_SET_TYPE(node, NODE_CCLASS);
+ initialize_cclass(CCLASS_(node));
return node;
}
static Node*
-node_new_ctype(int type, int not)
+node_new_ctype(int type, int not, OnigOptionType options)
{
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_CTYPE);
- NCTYPE(node)->ctype = type;
- NCTYPE(node)->not = not;
+ NODE_SET_TYPE(node, NODE_CTYPE);
+ CTYPE_(node)->ctype = type;
+ CTYPE_(node)->not = not;
+ CTYPE_(node)->options = options;
+ CTYPE_(node)->ascii_mode = IS_ASCII_MODE_CTYPE_OPTION(type, options);
return node;
}
static Node*
node_new_anychar(void)
{
- Node* node = node_new();
- CHECK_NULL_RETURN(node);
+ Node* node = node_new_ctype(CTYPE_ANYCHAR, 0, ONIG_OPTION_NONE);
+ return node;
+}
- SET_NTYPE(node, NT_CANY);
+static Node*
+node_new_anychar_with_fixed_option(OnigOptionType option)
+{
+ CtypeNode* ct;
+ Node* node;
+
+ node = node_new_anychar();
+ ct = CTYPE_(node);
+ ct->options = option;
+ NODE_STATUS_ADD(node, NST_FIXED_OPTION);
return node;
}
+static int
+node_new_no_newline(Node** node, ScanEnv* env)
+{
+ Node* n;
+
+ n = node_new_anychar_with_fixed_option(ONIG_OPTION_NONE);
+ CHECK_NULL_RETURN_MEMERR(n);
+ *node = n;
+ return 0;
+}
+
+static int
+node_new_true_anychar(Node** node, ScanEnv* env)
+{
+ Node* n;
+
+ n = node_new_anychar_with_fixed_option(ONIG_OPTION_MULTILINE);
+ CHECK_NULL_RETURN_MEMERR(n);
+ *node = n;
+ return 0;
+}
+
static Node*
node_new_list(Node* left, Node* right)
{
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_LIST);
- NCAR(node) = left;
- NCDR(node) = right;
+ NODE_SET_TYPE(node, NODE_LIST);
+ NODE_CAR(node) = left;
+ NODE_CDR(node) = right;
return node;
}
@@ -1188,10 +1325,10 @@ onig_node_list_add(Node* list, Node* x)
if (IS_NULL(n)) return NULL_NODE;
if (IS_NOT_NULL(list)) {
- while (IS_NOT_NULL(NCDR(list)))
- list = NCDR(list);
+ while (IS_NOT_NULL(NODE_CDR(list)))
+ list = NODE_CDR(list);
- NCDR(list) = n;
+ NODE_CDR(list) = n;
}
return n;
@@ -1203,62 +1340,107 @@ onig_node_new_alt(Node* left, Node* right)
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_ALT);
- NCAR(node) = left;
- NCDR(node) = right;
+ NODE_SET_TYPE(node, NODE_ALT);
+ NODE_CAR(node) = left;
+ NODE_CDR(node) = right;
return node;
}
+static Node*
+make_list_or_alt(NodeType type, int n, Node* ns[])
+{
+ Node* r;
+
+ if (n <= 0) return NULL_NODE;
+
+ if (n == 1) {
+ r = node_new();
+ CHECK_NULL_RETURN(r);
+ NODE_SET_TYPE(r, type);
+ NODE_CAR(r) = ns[0];
+ NODE_CDR(r) = NULL_NODE;
+ }
+ else {
+ Node* right;
+
+ r = node_new();
+ CHECK_NULL_RETURN(r);
+
+ right = make_list_or_alt(type, n - 1, ns + 1);
+ if (IS_NULL(right)) {
+ onig_node_free(r);
+ return NULL_NODE;
+ }
+
+ NODE_SET_TYPE(r, type);
+ NODE_CAR(r) = ns[0];
+ NODE_CDR(r) = right;
+ }
+
+ return r;
+}
+
+static Node*
+make_list(int n, Node* ns[])
+{
+ return make_list_or_alt(NODE_LIST, n, ns);
+}
+
+static Node*
+make_alt(int n, Node* ns[])
+{
+ return make_list_or_alt(NODE_ALT, n, ns);
+}
+
extern Node*
-onig_node_new_anchor(int type)
+onig_node_new_anchor(int type, int ascii_mode)
{
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_ANCHOR);
- NANCHOR(node)->type = type;
- NANCHOR(node)->target = NULL;
- NANCHOR(node)->char_len = -1;
+ NODE_SET_TYPE(node, NODE_ANCHOR);
+ ANCHOR_(node)->type = type;
+ ANCHOR_(node)->char_len = -1;
+ ANCHOR_(node)->ascii_mode = ascii_mode;
return node;
}
static Node*
node_new_backref(int back_num, int* backrefs, int by_name,
#ifdef USE_BACKREF_WITH_LEVEL
- int exist_level, int nest_level,
+ int exist_level, int nest_level,
#endif
- ScanEnv* env)
+ ScanEnv* env)
{
int i;
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_BREF);
- NBREF(node)->state = 0;
- NBREF(node)->back_num = back_num;
- NBREF(node)->back_dynamic = (int* )NULL;
+ NODE_SET_TYPE(node, NODE_BACKREF);
+ BACKREF_(node)->back_num = back_num;
+ BACKREF_(node)->back_dynamic = (int* )NULL;
if (by_name != 0)
- NBREF(node)->state |= NST_NAME_REF;
+ NODE_STATUS_ADD(node, NST_BY_NAME);
#ifdef USE_BACKREF_WITH_LEVEL
if (exist_level != 0) {
- NBREF(node)->state |= NST_NEST_LEVEL;
- NBREF(node)->nest_level = nest_level;
+ NODE_STATUS_ADD(node, NST_NEST_LEVEL);
+ BACKREF_(node)->nest_level = nest_level;
}
#endif
for (i = 0; i < back_num; i++) {
if (backrefs[i] <= env->num_mem &&
- IS_NULL(SCANENV_MEM_NODES(env)[backrefs[i]])) {
- NBREF(node)->state |= NST_RECURSION; /* /...(\1).../ */
+ IS_NULL(SCANENV_MEMENV(env)[backrefs[i]].node)) {
+ NODE_STATUS_ADD(node, NST_RECURSION); /* /...(\1).../ */
break;
}
}
if (back_num <= NODE_BACKREFS_SIZE) {
for (i = 0; i < back_num; i++)
- NBREF(node)->back_static[i] = backrefs[i];
+ BACKREF_(node)->back_static[i] = backrefs[i];
}
else {
int* p = (int* )xmalloc(sizeof(int) * back_num);
@@ -1266,26 +1448,46 @@ node_new_backref(int back_num, int* backrefs, int by_name,
onig_node_free(node);
return NULL;
}
- NBREF(node)->back_dynamic = p;
+ BACKREF_(node)->back_dynamic = p;
for (i = 0; i < back_num; i++)
p[i] = backrefs[i];
}
return node;
}
-#ifdef USE_SUBEXP_CALL
static Node*
-node_new_call(UChar* name, UChar* name_end, int gnum)
+node_new_backref_checker(int back_num, int* backrefs, int by_name,
+#ifdef USE_BACKREF_WITH_LEVEL
+ int exist_level, int nest_level,
+#endif
+ ScanEnv* env)
+{
+ Node* node;
+
+ node = node_new_backref(back_num, backrefs, by_name,
+#ifdef USE_BACKREF_WITH_LEVEL
+ exist_level, nest_level,
+#endif
+ env);
+ CHECK_NULL_RETURN(node);
+
+ NODE_STATUS_ADD(node, NST_CHECKER);
+ return node;
+}
+
+#ifdef USE_CALL
+static Node*
+node_new_call(UChar* name, UChar* name_end, int gnum, int by_number)
{
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_CALL);
- NCALL(node)->state = 0;
- NCALL(node)->target = NULL_NODE;
- NCALL(node)->name = name;
- NCALL(node)->name_end = name_end;
- NCALL(node)->group_num = gnum; /* call by number if gnum != 0 */
+ NODE_SET_TYPE(node, NODE_CALL);
+ CALL_(node)->by_number = by_number;
+ CALL_(node)->name = name;
+ CALL_(node)->name_end = name_end;
+ CALL_(node)->group_num = gnum;
+ CALL_(node)->entry_count = 1;
return node;
}
#endif
@@ -1296,103 +1498,630 @@ node_new_quantifier(int lower, int upper, int by_number)
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_QTFR);
- NQTFR(node)->state = 0;
- NQTFR(node)->target = NULL;
- NQTFR(node)->lower = lower;
- NQTFR(node)->upper = upper;
- NQTFR(node)->greedy = 1;
- NQTFR(node)->target_empty_info = NQ_TARGET_ISNOT_EMPTY;
- NQTFR(node)->head_exact = NULL_NODE;
- NQTFR(node)->next_head_exact = NULL_NODE;
- NQTFR(node)->is_refered = 0;
+ NODE_SET_TYPE(node, NODE_QUANT);
+ QUANT_(node)->lower = lower;
+ QUANT_(node)->upper = upper;
+ QUANT_(node)->greedy = 1;
+ QUANT_(node)->body_empty_info = QUANT_BODY_IS_NOT_EMPTY;
+ QUANT_(node)->head_exact = NULL_NODE;
+ QUANT_(node)->next_head_exact = NULL_NODE;
+ QUANT_(node)->is_refered = 0;
if (by_number != 0)
- NQTFR(node)->state |= NST_BY_NUMBER;
-
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- NQTFR(node)->comb_exp_check_num = 0;
-#endif
+ NODE_STATUS_ADD(node, NST_BY_NUMBER);
return node;
}
static Node*
-node_new_enclose(int type)
+node_new_enclosure(enum EnclosureType type)
{
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_ENCLOSE);
- NENCLOSE(node)->type = type;
- NENCLOSE(node)->state = 0;
- NENCLOSE(node)->regnum = 0;
- NENCLOSE(node)->option = 0;
- NENCLOSE(node)->target = NULL;
- NENCLOSE(node)->call_addr = -1;
- NENCLOSE(node)->opt_count = 0;
+ NODE_SET_TYPE(node, NODE_ENCLOSURE);
+ ENCLOSURE_(node)->type = type;
+
+ switch (type) {
+ case ENCLOSURE_MEMORY:
+ ENCLOSURE_(node)->m.regnum = 0;
+ ENCLOSURE_(node)->m.called_addr = -1;
+ ENCLOSURE_(node)->m.entry_count = 1;
+ ENCLOSURE_(node)->m.called_state = 0;
+ break;
+
+ case ENCLOSURE_OPTION:
+ ENCLOSURE_(node)->o.options = 0;
+ break;
+
+ case ENCLOSURE_STOP_BACKTRACK:
+ break;
+
+ case ENCLOSURE_IF_ELSE:
+ ENCLOSURE_(node)->te.Then = 0;
+ ENCLOSURE_(node)->te.Else = 0;
+ break;
+ }
+
+ ENCLOSURE_(node)->opt_count = 0;
return node;
}
extern Node*
-onig_node_new_enclose(int type)
+onig_node_new_enclosure(int type)
{
- return node_new_enclose(type);
+ return node_new_enclosure(type);
}
static Node*
-node_new_enclose_memory(OnigOptionType option, int is_named)
+node_new_enclosure_if_else(Node* cond, Node* Then, Node* Else)
{
- Node* node = node_new_enclose(ENCLOSE_MEMORY);
+ Node* n;
+ n = node_new_enclosure(ENCLOSURE_IF_ELSE);
+ CHECK_NULL_RETURN(n);
+
+ NODE_BODY(n) = cond;
+ ENCLOSURE_(n)->te.Then = Then;
+ ENCLOSURE_(n)->te.Else = Else;
+ return n;
+}
+
+static Node*
+node_new_memory(int is_named)
+{
+ Node* node = node_new_enclosure(ENCLOSURE_MEMORY);
CHECK_NULL_RETURN(node);
if (is_named != 0)
- SET_ENCLOSE_STATUS(node, NST_NAMED_GROUP);
+ NODE_STATUS_ADD(node, NST_NAMED_GROUP);
-#ifdef USE_SUBEXP_CALL
- NENCLOSE(node)->option = option;
-#endif
return node;
}
static Node*
node_new_option(OnigOptionType option)
{
- Node* node = node_new_enclose(ENCLOSE_OPTION);
+ Node* node = node_new_enclosure(ENCLOSURE_OPTION);
CHECK_NULL_RETURN(node);
- NENCLOSE(node)->option = option;
+ ENCLOSURE_(node)->o.options = option;
return node;
}
+static int
+node_new_fail(Node** node, ScanEnv* env)
+{
+ *node = node_new();
+ CHECK_NULL_RETURN_MEMERR(*node);
+
+ NODE_SET_TYPE(*node, NODE_GIMMICK);
+ GIMMICK_(*node)->type = GIMMICK_FAIL;
+ return ONIG_NORMAL;
+}
+
+static int
+node_new_save_gimmick(Node** node, enum SaveType save_type, ScanEnv* env)
+{
+ int id;
+ int r;
+
+ r = save_entry(env, save_type, &id);
+ if (r != ONIG_NORMAL) return r;
+
+ *node = node_new();
+ CHECK_NULL_RETURN_MEMERR(*node);
+
+ NODE_SET_TYPE(*node, NODE_GIMMICK);
+ GIMMICK_(*node)->id = id;
+ GIMMICK_(*node)->type = GIMMICK_SAVE;
+ GIMMICK_(*node)->detail_type = (int )save_type;
+
+ return ONIG_NORMAL;
+}
+
+static int
+node_new_update_var_gimmick(Node** node, enum UpdateVarType update_var_type,
+ int id, ScanEnv* env)
+{
+ *node = node_new();
+ CHECK_NULL_RETURN_MEMERR(*node);
+
+ NODE_SET_TYPE(*node, NODE_GIMMICK);
+ GIMMICK_(*node)->id = id;
+ GIMMICK_(*node)->type = GIMMICK_UPDATE_VAR;
+ GIMMICK_(*node)->detail_type = (int )update_var_type;
+
+ return ONIG_NORMAL;
+}
+
+static int
+node_new_keep(Node** node, ScanEnv* env)
+{
+ int r;
+
+ r = node_new_save_gimmick(node, SAVE_KEEP, env);
+ if (r != 0) return r;
+
+ env->keep_num++;
+ return ONIG_NORMAL;
+}
+
+static int
+make_extended_grapheme_cluster(Node** node, ScanEnv* env)
+{
+ int r;
+ int i;
+ Node* x;
+ Node* ns[2];
+
+ /* \X == (?>\O(?:\Y\O)*) */
+
+ ns[1] = NULL_NODE;
+
+ r = ONIGERR_MEMORY;
+ ns[0] = onig_node_new_anchor(ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, 0);
+ if (IS_NULL(ns[0])) goto err;
+
+ r = node_new_true_anychar(&ns[1], env);
+ if (r != 0) goto err1;
+
+ x = make_list(2, ns);
+ if (IS_NULL(x)) goto err;
+ ns[0] = x;
+ ns[1] = NULL_NODE;
+
+ x = node_new_quantifier(0, REPEAT_INFINITE, 1);
+ if (IS_NULL(x)) goto err;
+
+ NODE_BODY(x) = ns[0];
+ ns[0] = NULL_NODE;
+ ns[1] = x;
+
+ r = node_new_true_anychar(&ns[0], env);
+ if (r != 0) goto err1;
+
+ x = make_list(2, ns);
+ if (IS_NULL(x)) goto err;
+
+ ns[0] = x;
+ ns[1] = NULL_NODE;
+
+ x = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
+ if (IS_NULL(x)) goto err;
+
+ NODE_BODY(x) = ns[0];
+
+ *node = x;
+ return ONIG_NORMAL;
+
+ err:
+ r = ONIGERR_MEMORY;
+ err1:
+ for (i = 0; i < 2; i++) onig_node_free(ns[i]);
+ return r;
+}
+
+static int
+make_absent_engine(Node** node, int pre_save_right_id, Node* absent,
+ Node* step_one, int lower, int upper, int possessive,
+ int is_range_cutter, ScanEnv* env)
+{
+ int r;
+ int i;
+ int id;
+ Node* x;
+ Node* ns[4];
+
+ for (i = 0; i < 4; i++) ns[i] = NULL_NODE;
+
+ ns[1] = absent;
+ ns[3] = step_one; // for err
+ r = node_new_save_gimmick(&ns[0], SAVE_S, env);
+ if (r != 0) goto err;
+
+ id = GIMMICK_(ns[0])->id;
+ r = node_new_update_var_gimmick(&ns[2], UPDATE_VAR_RIGHT_RANGE_FROM_S_STACK,
+ id, env);
+ if (r != 0) goto err;
+
+ r = node_new_fail(&ns[3], env);
+ if (r != 0) goto err;
+
+ x = make_list(4, ns);
+ if (IS_NULL(x)) goto err0;
+
+ ns[0] = x;
+ ns[1] = step_one;
+ ns[2] = ns[3] = NULL_NODE;
+
+ x = make_alt(2, ns);
+ if (IS_NULL(x)) goto err0;
+
+ ns[0] = x;
+
+ x = node_new_quantifier(lower, upper, 0);
+ if (IS_NULL(x)) goto err0;
+
+ NODE_BODY(x) = ns[0];
+ ns[0] = x;
+
+ if (possessive != 0) {
+ x = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
+ if (IS_NULL(x)) goto err0;
+
+ NODE_BODY(x) = ns[0];
+ ns[0] = x;
+ }
+
+ r = node_new_update_var_gimmick(&ns[1], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,
+ pre_save_right_id, env);
+ if (r != 0) goto err;
+
+ r = node_new_fail(&ns[2], env);
+ if (r != 0) goto err;
+
+ x = make_list(2, ns + 1);
+ if (IS_NULL(x)) goto err0;
+
+ ns[1] = x; ns[2] = NULL_NODE;
+
+ x = make_alt(2, ns);
+ if (IS_NULL(x)) goto err0;
+
+ if (is_range_cutter != 0)
+ NODE_STATUS_ADD(x, NST_SUPER);
+
+ *node = x;
+ return ONIG_NORMAL;
+
+ err0:
+ r = ONIGERR_MEMORY;
+ err:
+ for (i = 0; i < 4; i++) onig_node_free(ns[i]);
+ return r;
+}
+
+static int
+make_absent_tail(Node** node1, Node** node2, int pre_save_right_id,
+ ScanEnv* env)
+{
+ int r;
+ int id;
+ Node* save;
+ Node* x;
+ Node* ns[2];
+
+ *node1 = *node2 = NULL_NODE;
+ save = ns[0] = ns[1] = NULL_NODE;
+
+ r = node_new_save_gimmick(&save, SAVE_RIGHT_RANGE, env);
+ if (r != 0) goto err;
+
+ id = GIMMICK_(save)->id;
+ r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,
+ id, env);
+ if (r != 0) goto err;
+
+ r = node_new_fail(&ns[1], env);
+ if (r != 0) goto err;
+
+ x = make_list(2, ns);
+ if (IS_NULL(x)) goto err0;
+
+ ns[0] = NULL_NODE; ns[1] = x;
+
+ r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,
+ pre_save_right_id, env);
+ if (r != 0) goto err;
+
+ x = make_alt(2, ns);
+ if (IS_NULL(x)) goto err0;
+
+ *node1 = save;
+ *node2 = x;
+ return ONIG_NORMAL;
+
+ err0:
+ r = ONIGERR_MEMORY;
+ err:
+ onig_node_free(save);
+ onig_node_free(ns[0]);
+ onig_node_free(ns[1]);
+ return r;
+}
+
+static int
+make_range_clear(Node** node, ScanEnv* env)
+{
+ int r;
+ int id;
+ Node* save;
+ Node* x;
+ Node* ns[2];
+
+ *node = NULL_NODE;
+ save = ns[0] = ns[1] = NULL_NODE;
+
+ r = node_new_save_gimmick(&save, SAVE_RIGHT_RANGE, env);
+ if (r != 0) goto err;
+
+ id = GIMMICK_(save)->id;
+ r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,
+ id, env);
+ if (r != 0) goto err;
+
+ r = node_new_fail(&ns[1], env);
+ if (r != 0) goto err;
+
+ x = make_list(2, ns);
+ if (IS_NULL(x)) goto err0;
+
+ ns[0] = NULL_NODE; ns[1] = x;
+
+ r = node_new_update_var_gimmick(&ns[0], UPDATE_VAR_RIGHT_RANGE_INIT, 0, env);
+ if (r != 0) goto err;
+
+ x = make_alt(2, ns);
+ if (IS_NULL(x)) goto err0;
+
+ NODE_STATUS_ADD(x, NST_SUPER);
+
+ ns[0] = save;
+ ns[1] = x;
+ save = NULL_NODE;
+ x = make_list(2, ns);
+ if (IS_NULL(x)) goto err0;
+
+ *node = x;
+ return ONIG_NORMAL;
+
+ err0:
+ r = ONIGERR_MEMORY;
+ err:
+ onig_node_free(save);
+ onig_node_free(ns[0]);
+ onig_node_free(ns[1]);
+ return r;
+}
+
+static int
+is_simple_one_char_repeat(Node* node, Node** rquant, Node** rbody,
+ int* is_possessive, ScanEnv* env)
+{
+ Node* quant;
+ Node* body;
+
+ *rquant = *rbody = 0;
+ *is_possessive = 0;
+
+ if (NODE_TYPE(node) == NODE_QUANT) {
+ quant = node;
+ }
+ else {
+ if (NODE_TYPE(node) == NODE_ENCLOSURE) {
+ EnclosureNode* en = ENCLOSURE_(node);
+ if (en->type == ENCLOSURE_STOP_BACKTRACK) {
+ *is_possessive = 1;
+ quant = NODE_ENCLOSURE_BODY(en);
+ if (NODE_TYPE(quant) != NODE_QUANT)
+ return 0;
+ }
+ else
+ return 0;
+ }
+ else
+ return 0;
+ }
+
+ if (QUANT_(quant)->greedy == 0)
+ return 0;
+
+ body = NODE_BODY(quant);
+ switch (NODE_TYPE(body)) {
+ case NODE_STRING:
+ {
+ int len;
+ StrNode* sn = STR_(body);
+ UChar *s = sn->s;
+
+ len = 0;
+ while (s < sn->end) {
+ s += enclen(env->enc, s);
+ len++;
+ }
+ if (len != 1)
+ return 0;
+ }
+
+ case NODE_CCLASS:
+ break;
+
+ default:
+ return 0;
+ break;
+ }
+
+ if (node != quant) {
+ NODE_BODY(node) = 0;
+ onig_node_free(node);
+ }
+ NODE_BODY(quant) = NULL_NODE;
+ *rquant = quant;
+ *rbody = body;
+ return 1;
+}
+
+static int
+make_absent_tree_for_simple_one_char_repeat(Node** node, Node* absent, Node* quant,
+ Node* body, int possessive, ScanEnv* env)
+{
+ int r;
+ int i;
+ int id1;
+ int lower, upper;
+ Node* x;
+ Node* ns[4];
+
+ *node = NULL_NODE;
+ r = ONIGERR_MEMORY;
+ ns[0] = ns[1] = NULL_NODE;
+ ns[2] = body, ns[3] = absent;
+
+ lower = QUANT_(quant)->lower;
+ upper = QUANT_(quant)->upper;
+ onig_node_free(quant);
+
+ r = node_new_save_gimmick(&ns[0], SAVE_RIGHT_RANGE, env);
+ if (r != 0) goto err;
+
+ id1 = GIMMICK_(ns[0])->id;
+
+ r = make_absent_engine(&ns[1], id1, absent, body, lower, upper, possessive,
+ 0, env);
+ if (r != 0) goto err;
+
+ ns[2] = ns[3] = NULL_NODE;
+
+ r = node_new_update_var_gimmick(&ns[2], UPDATE_VAR_RIGHT_RANGE_FROM_STACK,
+ id1, env);
+ if (r != 0) goto err;
+
+ x = make_list(3, ns);
+ if (IS_NULL(x)) goto err0;
+
+ *node = x;
+ return ONIG_NORMAL;
+
+ err0:
+ r = ONIGERR_MEMORY;
+ err:
+ for (i = 0; i < 4; i++) onig_node_free(ns[i]);
+ return r;
+}
+
+static int
+make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,
+ ScanEnv* env)
+{
+ int r;
+ int i;
+ int id1, id2;
+ int possessive;
+ Node* x;
+ Node* ns[7];
+
+ r = ONIGERR_MEMORY;
+ for (i = 0; i < 7; i++) ns[i] = NULL_NODE;
+ ns[4] = expr; ns[5] = absent;
+
+ if (is_range_cutter == 0) {
+ Node* quant;
+ Node* body;
+
+ if (expr == NULL_NODE) {
+ /* default expr \O* */
+ quant = node_new_quantifier(0, REPEAT_INFINITE, 0);
+ if (IS_NULL(quant)) goto err0;
+
+ r = node_new_true_anychar(&body, env);
+ if (r != 0) {
+ onig_node_free(quant);
+ goto err;
+ }
+ possessive = 0;
+ goto simple;
+ }
+ else {
+ if (is_simple_one_char_repeat(expr, &quant, &body, &possessive, env)) {
+ simple:
+ r = make_absent_tree_for_simple_one_char_repeat(node, absent, quant,
+ body, possessive, env);
+ if (r != 0) {
+ ns[4] = NULL_NODE;
+ onig_node_free(quant);
+ onig_node_free(body);
+ goto err;
+ }
+
+ return ONIG_NORMAL;
+ }
+ }
+ }
+
+ r = node_new_save_gimmick(&ns[0], SAVE_RIGHT_RANGE, env);
+ if (r != 0) goto err;
+
+ id1 = GIMMICK_(ns[0])->id;
+
+ r = node_new_save_gimmick(&ns[1], SAVE_S, env);
+ if (r != 0) goto err;
+
+ id2 = GIMMICK_(ns[1])->id;
+
+ r = node_new_true_anychar(&ns[3], env);
+ if (r != 0) goto err;
+
+ possessive = 1;
+ r = make_absent_engine(&ns[2], id1, absent, ns[3], 0, REPEAT_INFINITE,
+ possessive, is_range_cutter, env);
+ if (r != 0) goto err;
+
+ ns[3] = NULL_NODE;
+ ns[5] = NULL_NODE;
+
+ r = node_new_update_var_gimmick(&ns[3], UPDATE_VAR_S_FROM_STACK, id2, env);
+ if (r != 0) goto err;
+
+ if (is_range_cutter != 0) {
+ x = make_list(4, ns);
+ if (IS_NULL(x)) goto err0;
+ }
+ else {
+ r = make_absent_tail(&ns[5], &ns[6], id1, env);
+ if (r != 0) goto err;
+
+ x = make_list(7, ns);
+ if (IS_NULL(x)) goto err0;
+ }
+
+ *node = x;
+ return ONIG_NORMAL;
+
+ err0:
+ r = ONIGERR_MEMORY;
+ err:
+ for (i = 0; i < 7; i++) onig_node_free(ns[i]);
+ return r;
+}
+
extern int
onig_node_str_cat(Node* node, const UChar* s, const UChar* end)
{
- int addlen = end - s;
+ int addlen = (int )(end - s);
if (addlen > 0) {
- int len = NSTR(node)->end - NSTR(node)->s;
+ int len = (int )(STR_(node)->end - STR_(node)->s);
- if (NSTR(node)->capa > 0 || (len + addlen > NODE_STR_BUF_SIZE - 1)) {
+ if (STR_(node)->capa > 0 || (len + addlen > NODE_STRING_BUF_SIZE - 1)) {
UChar* p;
- int capa = len + addlen + NODE_STR_MARGIN;
+ int capa = len + addlen + NODE_STRING_MARGIN;
- if (capa <= NSTR(node)->capa) {
- onig_strcpy(NSTR(node)->s + len, s, end);
+ if (capa <= STR_(node)->capa) {
+ onig_strcpy(STR_(node)->s + len, s, end);
}
else {
- if (NSTR(node)->s == NSTR(node)->buf)
- p = strcat_capa_from_static(NSTR(node)->s, NSTR(node)->end,
+ if (STR_(node)->s == STR_(node)->buf)
+ p = strcat_capa_from_static(STR_(node)->s, STR_(node)->end,
s, end, capa);
else
- p = strcat_capa(NSTR(node)->s, NSTR(node)->end, s, end, capa);
+ p = strcat_capa(STR_(node)->s, STR_(node)->end, s, end, capa);
CHECK_NULL_RETURN_MEMERR(p);
- NSTR(node)->s = p;
- NSTR(node)->capa = capa;
+ STR_(node)->s = p;
+ STR_(node)->capa = capa;
}
}
else {
- onig_strcpy(NSTR(node)->s + len, s, end);
+ onig_strcpy(STR_(node)->s + len, s, end);
}
- NSTR(node)->end = NSTR(node)->s + len + addlen;
+ STR_(node)->end = STR_(node)->s + len + addlen;
}
return 0;
@@ -1417,25 +2146,25 @@ node_str_cat_char(Node* node, UChar c)
extern void
onig_node_conv_to_str_node(Node* node, int flag)
{
- SET_NTYPE(node, NT_STR);
- NSTR(node)->flag = flag;
- NSTR(node)->capa = 0;
- NSTR(node)->s = NSTR(node)->buf;
- NSTR(node)->end = NSTR(node)->buf;
+ NODE_SET_TYPE(node, NODE_STRING);
+ STR_(node)->flag = flag;
+ STR_(node)->capa = 0;
+ STR_(node)->s = STR_(node)->buf;
+ STR_(node)->end = STR_(node)->buf;
}
extern void
onig_node_str_clear(Node* node)
{
- if (NSTR(node)->capa != 0 &&
- IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {
- xfree(NSTR(node)->s);
+ if (STR_(node)->capa != 0 &&
+ IS_NOT_NULL(STR_(node)->s) && STR_(node)->s != STR_(node)->buf) {
+ xfree(STR_(node)->s);
}
- NSTR(node)->capa = 0;
- NSTR(node)->flag = 0;
- NSTR(node)->s = NSTR(node)->buf;
- NSTR(node)->end = NSTR(node)->buf;
+ STR_(node)->capa = 0;
+ STR_(node)->flag = 0;
+ STR_(node)->s = STR_(node)->buf;
+ STR_(node)->end = STR_(node)->buf;
}
static Node*
@@ -1444,11 +2173,11 @@ node_new_str(const UChar* s, const UChar* end)
Node* node = node_new();
CHECK_NULL_RETURN(node);
- SET_NTYPE(node, NT_STR);
- NSTR(node)->capa = 0;
- NSTR(node)->flag = 0;
- NSTR(node)->s = NSTR(node)->buf;
- NSTR(node)->end = NSTR(node)->buf;
+ NODE_SET_TYPE(node, NODE_STRING);
+ STR_(node)->capa = 0;
+ STR_(node)->flag = 0;
+ STR_(node)->s = STR_(node)->buf;
+ STR_(node)->end = STR_(node)->buf;
if (onig_node_str_cat(node, s, end)) {
onig_node_free(node);
return NULL;
@@ -1466,7 +2195,7 @@ static Node*
node_new_str_raw(UChar* s, UChar* end)
{
Node* node = node_new_str(s, end);
- NSTRING_SET_RAW(node);
+ NODE_STRING_SET_RAW(node);
return node;
}
@@ -1495,8 +2224,8 @@ str_node_split_last_char(StrNode* sn, OnigEncoding enc)
p = onigenc_get_prev_char_head(enc, sn->s, sn->end);
if (p && p > sn->s) { /* can be split. */
n = node_new_str(p, sn->end);
- if ((sn->flag & NSTR_RAW) != 0)
- NSTRING_SET_RAW(n);
+ if ((sn->flag & STRING_RAW) != 0)
+ NODE_STRING_SET_RAW(n);
sn->end = (UChar* )p;
}
@@ -1517,7 +2246,7 @@ str_node_can_be_split(StrNode* sn, OnigEncoding enc)
static int
node_str_head_pad(StrNode* sn, int num, UChar val)
{
- UChar buf[NODE_STR_BUF_SIZE];
+ UChar buf[NODE_STRING_BUF_SIZE];
int i, len;
len = sn->end - sn->s;
@@ -1540,9 +2269,9 @@ onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc)
PFETCH_READY;
num = 0;
- while (!PEND) {
+ while (! PEND) {
PFETCH(c);
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
+ if (IS_CODE_DIGIT_ASCII(enc, c)) {
val = (unsigned int )DIGITVAL(c);
if ((INT_MAX_LIMIT - val) / 10UL < num)
return -1; /* overflow */
@@ -1559,21 +2288,24 @@ onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc)
}
static int
-scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int maxlen,
- OnigEncoding enc)
+scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int minlen,
+ int maxlen, OnigEncoding enc)
{
OnigCodePoint c;
unsigned int num, val;
+ int n;
UChar* p = *src;
PFETCH_READY;
num = 0;
- while (! PEND && maxlen-- != 0) {
+ n = 0;
+ while (! PEND && n < maxlen) {
PFETCH(c);
- if (ONIGENC_IS_CODE_XDIGIT(enc, c)) {
+ if (IS_CODE_XDIGIT_ASCII(enc, c)) {
+ n++;
val = (unsigned int )XDIGITVAL(enc,c);
if ((INT_MAX_LIMIT - val) / 16UL < num)
- return -1; /* overflow */
+ return ONIGERR_TOO_BIG_NUMBER; /* overflow */
num = (num << 4) + XDIGITVAL(enc,c);
}
@@ -1582,13 +2314,17 @@ scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int maxlen,
break;
}
}
+
+ if (n < minlen)
+ return ONIGERR_INVALID_CODE_POINT_VALUE;
+
*src = p;
return num;
}
static int
scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen,
- OnigEncoding enc)
+ OnigEncoding enc)
{
OnigCodePoint c;
unsigned int num, val;
@@ -1596,9 +2332,9 @@ scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen,
PFETCH_READY;
num = 0;
- while (!PEND && maxlen-- != 0) {
+ while (! PEND && maxlen-- != 0) {
PFETCH(c);
- if (ONIGENC_IS_CODE_DIGIT(enc, c) && c < '8') {
+ if (IS_CODE_DIGIT_ASCII(enc, c) && c < '8') {
val = ODIGITVAL(c);
if ((INT_MAX_LIMIT - val) / 8UL < num)
return -1; /* overflow */
@@ -1615,8 +2351,8 @@ scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen,
}
-#define BBUF_WRITE_CODE_POINT(bbuf,pos,code) \
- BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
+#define BB_WRITE_CODE_POINT(bbuf,pos,code) \
+ BB_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)
/* data format:
[n][from-1][to-1][from-2][to-2] ... [from-n][to-n]
@@ -1631,12 +2367,16 @@ new_code_range(BBuf** pbuf)
BBuf* bbuf;
bbuf = *pbuf = (BBuf* )xmalloc(sizeof(BBuf));
- CHECK_NULL_RETURN_MEMERR(*pbuf);
- r = BBUF_INIT(*pbuf, INIT_MULTI_BYTE_RANGE_SIZE);
- if (r) return r;
+ CHECK_NULL_RETURN_MEMERR(bbuf);
+ r = BB_INIT(bbuf, INIT_MULTI_BYTE_RANGE_SIZE);
+ if (r != 0) {
+ xfree(bbuf);
+ *pbuf = 0;
+ return r;
+ }
n = 0;
- BBUF_WRITE_CODE_POINT(bbuf, 0, n);
+ BB_WRITE_CODE_POINT(bbuf, 0, n);
return 0;
}
@@ -1654,7 +2394,7 @@ add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)
if (IS_NULL(*pbuf)) {
r = new_code_range(pbuf);
- if (r) return r;
+ if (r != 0) return r;
bbuf = *pbuf;
n = 0;
}
@@ -1699,19 +2439,19 @@ add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)
int size = (n - high) * 2 * SIZE_CODE_POINT;
if (inc_n > 0) {
- BBUF_MOVE_RIGHT(bbuf, from_pos, to_pos, size);
+ BB_MOVE_RIGHT(bbuf, from_pos, to_pos, size);
}
else {
- BBUF_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos);
+ BB_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos);
}
}
pos = SIZE_CODE_POINT * (1 + low * 2);
- BBUF_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2);
- BBUF_WRITE_CODE_POINT(bbuf, pos, from);
- BBUF_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to);
+ BB_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2);
+ BB_WRITE_CODE_POINT(bbuf, pos, from);
+ BB_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to);
n += inc_n;
- BBUF_WRITE_CODE_POINT(bbuf, 0, n);
+ BB_WRITE_CODE_POINT(bbuf, 0, n);
return 0;
}
@@ -1764,7 +2504,7 @@ not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf)
return r;
}
-#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\
+#define SWAP_BB_NOT(bbuf1, not1, bbuf2, not2) do {\
BBuf *tbuf; \
int tnot; \
tnot = not1; not1 = not2; not2 = tnot; \
@@ -1788,7 +2528,7 @@ or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,
r = 0;
if (IS_NULL(bbuf2))
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
+ SWAP_BB_NOT(bbuf1, not1, bbuf2, not2);
if (IS_NULL(bbuf1)) {
if (not1 != 0) {
@@ -1805,7 +2545,7 @@ or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,
}
if (not1 != 0)
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
+ SWAP_BB_NOT(bbuf1, not1, bbuf2, not2);
data1 = (OnigCodePoint* )(bbuf1->p);
GET_CODE_POINT(n1, data1);
@@ -1830,7 +2570,7 @@ or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,
static int
and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1,
- OnigCodePoint* data, int n)
+ OnigCodePoint* data, int n)
{
int i, r;
OnigCodePoint from2, to2;
@@ -1888,7 +2628,7 @@ and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)
}
if (not1 != 0)
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);
+ SWAP_BB_NOT(bbuf1, not1, bbuf2, not2);
data1 = (OnigCodePoint* )(bbuf1->p);
data2 = (OnigCodePoint* )(bbuf2->p);
@@ -1951,7 +2691,6 @@ and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
bitset_and(bsr1, bsr2);
if (bsr1 != dest->bs) {
bitset_copy(dest->bs, bsr1);
- bsr1 = dest->bs;
}
if (not1 != 0) {
bitset_invert(dest->bs);
@@ -2009,7 +2748,6 @@ or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
bitset_or(bsr1, bsr2);
if (bsr1 != dest->bs) {
bitset_copy(dest->bs, bsr1);
- bsr1 = dest->bs;
}
if (not1 != 0) {
bitset_invert(dest->bs);
@@ -2056,7 +2794,7 @@ conv_backslash_value(OnigCodePoint c, ScanEnv* env)
case 'e': return '\033';
case 'v':
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_V_VTAB))
- return '\v';
+ return '\v';
break;
default:
@@ -2069,27 +2807,28 @@ conv_backslash_value(OnigCodePoint c, ScanEnv* env)
static int
is_invalid_quantifier_target(Node* node)
{
- switch (NTYPE(node)) {
- case NT_ANCHOR:
+ switch (NODE_TYPE(node)) {
+ case NODE_ANCHOR:
+ case NODE_GIMMICK:
return 1;
break;
- case NT_ENCLOSE:
+ case NODE_ENCLOSURE:
/* allow enclosed elements */
- /* return is_invalid_quantifier_target(NENCLOSE(node)->target); */
+ /* return is_invalid_quantifier_target(NODE_BODY(node)); */
break;
- case NT_LIST:
+ case NODE_LIST:
do {
- if (! is_invalid_quantifier_target(NCAR(node))) return 0;
- } while (IS_NOT_NULL(node = NCDR(node)));
+ if (! is_invalid_quantifier_target(NODE_CAR(node))) return 0;
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
return 0;
break;
- case NT_ALT:
+ case NODE_ALT:
do {
- if (is_invalid_quantifier_target(NCAR(node))) return 1;
- } while (IS_NOT_NULL(node = NCDR(node)));
+ if (is_invalid_quantifier_target(NODE_CAR(node))) return 1;
+ } while (IS_NOT_NULL(node = NODE_CDR(node)));
break;
default:
@@ -2100,7 +2839,7 @@ is_invalid_quantifier_target(Node* node)
/* ?:0, *:1, +:2, ??:3, *?:4, +?:5 */
static int
-popular_quantifier_num(QtfrNode* q)
+quantifier_type_num(QuantNode* q)
{
if (q->greedy) {
if (q->lower == 0) {
@@ -2147,52 +2886,116 @@ extern void
onig_reduce_nested_quantifier(Node* pnode, Node* cnode)
{
int pnum, cnum;
- QtfrNode *p, *c;
+ QuantNode *p, *c;
+
+ p = QUANT_(pnode);
+ c = QUANT_(cnode);
+ pnum = quantifier_type_num(p);
+ cnum = quantifier_type_num(c);
+ if (pnum < 0 || cnum < 0) {
+ if ((p->lower == p->upper) && ! IS_REPEAT_INFINITE(p->upper)) {
+ if ((c->lower == c->upper) && ! IS_REPEAT_INFINITE(c->upper)) {
+ int n = positive_int_multiply(p->lower, c->lower);
+ if (n >= 0) {
+ p->lower = p->upper = n;
+ NODE_BODY(pnode) = NODE_BODY(cnode);
+ goto remove_cnode;
+ }
+ }
+ }
- p = NQTFR(pnode);
- c = NQTFR(cnode);
- pnum = popular_quantifier_num(p);
- cnum = popular_quantifier_num(c);
- if (pnum < 0 || cnum < 0) return ;
+ return ;
+ }
switch(ReduceTypeTable[cnum][pnum]) {
case RQ_DEL:
*pnode = *cnode;
break;
case RQ_A:
- p->target = c->target;
+ NODE_BODY(pnode) = NODE_BODY(cnode);
p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 1;
break;
case RQ_AQ:
- p->target = c->target;
+ NODE_BODY(pnode) = NODE_BODY(cnode);
p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 0;
break;
case RQ_QQ:
- p->target = c->target;
+ NODE_BODY(pnode) = NODE_BODY(cnode);
p->lower = 0; p->upper = 1; p->greedy = 0;
break;
case RQ_P_QQ:
- p->target = cnode;
+ NODE_BODY(pnode) = cnode;
p->lower = 0; p->upper = 1; p->greedy = 0;
c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 1;
return ;
break;
case RQ_PQ_Q:
- p->target = cnode;
+ NODE_BODY(pnode) = cnode;
p->lower = 0; p->upper = 1; p->greedy = 1;
c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 0;
return ;
break;
case RQ_ASIS:
- p->target = cnode;
+ NODE_BODY(pnode) = cnode;
return ;
break;
}
- c->target = NULL_NODE;
+ remove_cnode:
+ NODE_BODY(cnode) = NULL_NODE;
onig_node_free(cnode);
}
+static int
+node_new_general_newline(Node** node, ScanEnv* env)
+{
+ int r;
+ int dlen, alen;
+ UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN * 2];
+ Node* crnl;
+ Node* ncc;
+ Node* x;
+ CClassNode* cc;
+
+ dlen = ONIGENC_CODE_TO_MBC(env->enc, 0x0d, buf);
+ if (dlen < 0) return dlen;
+ alen = ONIGENC_CODE_TO_MBC(env->enc, 0x0a, buf + dlen);
+ if (alen < 0) return alen;
+
+ crnl = node_new_str_raw(buf, buf + dlen + alen);
+ CHECK_NULL_RETURN_MEMERR(crnl);
+
+ ncc = node_new_cclass();
+ if (IS_NULL(ncc)) goto err2;
+
+ cc = CCLASS_(ncc);
+ if (dlen == 1) {
+ bitset_set_range(cc->bs, 0x0a, 0x0d);
+ }
+ else {
+ r = add_code_range(&(cc->mbuf), env, 0x0a, 0x0d);
+ if (r != 0) {
+ err1:
+ onig_node_free(ncc);
+ err2:
+ onig_node_free(crnl);
+ return ONIGERR_MEMORY;
+ }
+ }
+
+ if (ONIGENC_IS_UNICODE_ENCODING(env->enc)) {
+ r = add_code_range(&(cc->mbuf), env, 0x85, 0x85);
+ if (r != 0) goto err1;
+ r = add_code_range(&(cc->mbuf), env, 0x2028, 0x2029);
+ if (r != 0) goto err1;
+ }
+
+ x = node_new_enclosure_if_else(crnl, 0, ncc);
+ if (IS_NULL(x)) goto err1;
+
+ *node = x;
+ return 0;
+}
enum TokenSyms {
TK_EOT = 0, /* end of token */
@@ -2214,6 +3017,12 @@ enum TokenSyms {
TK_CC_OPEN,
TK_QUOTE_OPEN,
TK_CHAR_PROPERTY, /* \p{...}, \P{...} */
+ TK_KEEP, /* \K */
+ TK_GENERAL_NEWLINE, /* \R */
+ TK_NO_NEWLINE, /* \N */
+ TK_TRUE_ANYCHAR, /* \O */
+ TK_EXTENDED_GRAPHEME_CLUSTER, /* \X */
+
/* in cc */
TK_CC_CLOSE,
TK_CC_RANGE,
@@ -2253,6 +3062,7 @@ typedef struct {
UChar* name;
UChar* name_end;
int gnum;
+ int by_number;
} call;
struct {
int ctype;
@@ -2432,8 +3242,9 @@ static OnigCodePoint
get_name_end_code_point(OnigCodePoint start)
{
switch (start) {
- case '<': return (OnigCodePoint )'>'; break;
+ case '<': return (OnigCodePoint )'>'; break;
case '\'': return (OnigCodePoint )'\''; break;
+ case '(': return (OnigCodePoint )')'; break;
default:
break;
}
@@ -2441,19 +3252,26 @@ get_name_end_code_point(OnigCodePoint start)
return (OnigCodePoint )0;
}
-#ifdef USE_NAMED_GROUP
+enum REF_NUM {
+ IS_NOT_NUM = 0,
+ IS_ABS_NUM = 1,
+ IS_REL_NUM = 2
+};
+
#ifdef USE_BACKREF_WITH_LEVEL
/*
\k<name+n>, \k<name-n>
\k<num+n>, \k<num-n>
\k<-num+n>, \k<-num-n>
+ \k<+num+n>, \k<+num-n>
*/
static int
fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
- UChar** rname_end, ScanEnv* env,
- int* rback_num, int* rlevel)
+ UChar** rname_end, ScanEnv* env,
+ int* rback_num, int* rlevel, enum REF_NUM* num_type)
{
- int r, sign, is_num, exist_level;
+ int r, sign, exist_level;
+ int digit_count;
OnigCodePoint end_code;
OnigCodePoint c = 0;
OnigEncoding enc = env->enc;
@@ -2463,12 +3281,14 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
PFETCH_READY;
*rback_num = 0;
- is_num = exist_level = 0;
+ exist_level = 0;
+ *num_type = IS_NOT_NUM;
sign = 1;
pnum_head = *src;
end_code = get_name_end_code_point(start_code);
+ digit_count = 0;
name_end = end;
r = 0;
if (PEND) {
@@ -2479,14 +3299,20 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
if (c == end_code)
return ONIGERR_EMPTY_GROUP_NAME;
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
- is_num = 1;
+ if (IS_CODE_DIGIT_ASCII(enc, c)) {
+ *num_type = IS_ABS_NUM;
+ digit_count++;
}
else if (c == '-') {
- is_num = 2;
+ *num_type = IS_REL_NUM;
sign = -1;
pnum_head = p;
}
+ else if (c == '+') {
+ *num_type = IS_REL_NUM;
+ sign = 1;
+ pnum_head = p;
+ }
else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
}
@@ -2496,17 +3322,18 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
name_end = p;
PFETCH(c);
if (c == end_code || c == ')' || c == '+' || c == '-') {
- if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;
+ if (*num_type != IS_NOT_NUM && digit_count == 0)
+ r = ONIGERR_INVALID_GROUP_NAME;
break;
}
- if (is_num != 0) {
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
- is_num = 1;
+ if (*num_type != IS_NOT_NUM) {
+ if (IS_CODE_DIGIT_ASCII(enc, c)) {
+ digit_count++;
}
else {
r = ONIGERR_INVALID_GROUP_NAME;
- is_num = 0;
+ *num_type = IS_NOT_NUM;
}
}
else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
@@ -2524,7 +3351,7 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
goto end;
}
PFETCH(c);
- if (! ONIGENC_IS_CODE_DIGIT(enc, c)) goto err;
+ if (! IS_CODE_DIGIT_ASCII(enc, c)) goto err;
PUNFETCH;
level = onig_scan_unsigned_number(&p, end, enc);
if (level < 0) return ONIGERR_TOO_BIG_NUMBER;
@@ -2539,16 +3366,20 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
}
err:
- r = ONIGERR_INVALID_GROUP_NAME;
name_end = end;
+ err2:
+ r = ONIGERR_INVALID_GROUP_NAME;
}
end:
if (r == 0) {
- if (is_num != 0) {
+ if (*num_type != IS_NOT_NUM) {
*rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);
if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;
- else if (*rback_num == 0) goto err;
+ else if (*rback_num == 0) {
+ if (*num_type == IS_REL_NUM)
+ goto err2;
+ }
*rback_num *= sign;
}
@@ -2570,9 +3401,11 @@ fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,
*/
static int
fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
- UChar** rname_end, ScanEnv* env, int* rback_num, int ref)
+ UChar** rname_end, ScanEnv* env, int* rback_num,
+ enum REF_NUM* num_type, int ref)
{
- int r, is_num, sign;
+ int r, sign;
+ int digit_count;
OnigCodePoint end_code;
OnigCodePoint c = 0;
OnigEncoding enc = env->enc;
@@ -2584,10 +3417,11 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
end_code = get_name_end_code_point(start_code);
+ digit_count = 0;
name_end = end;
pnum_head = *src;
r = 0;
- is_num = 0;
+ *num_type = IS_NOT_NUM;
sign = 1;
if (PEND) {
return ONIGERR_EMPTY_GROUP_NAME;
@@ -2597,23 +3431,32 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
if (c == end_code)
return ONIGERR_EMPTY_GROUP_NAME;
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
+ if (IS_CODE_DIGIT_ASCII(enc, c)) {
if (ref == 1)
- is_num = 1;
+ *num_type = IS_ABS_NUM;
else {
r = ONIGERR_INVALID_GROUP_NAME;
- is_num = 0;
}
+ digit_count++;
}
else if (c == '-') {
if (ref == 1) {
- is_num = 2;
+ *num_type = IS_REL_NUM;
sign = -1;
pnum_head = p;
}
else {
r = ONIGERR_INVALID_GROUP_NAME;
- is_num = 0;
+ }
+ }
+ else if (c == '+') {
+ if (ref == 1) {
+ *num_type = IS_REL_NUM;
+ sign = 1;
+ pnum_head = p;
+ }
+ else {
+ r = ONIGERR_INVALID_GROUP_NAME;
}
}
else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
@@ -2626,20 +3469,22 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
name_end = p;
PFETCH_S(c);
if (c == end_code || c == ')') {
- if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;
+ if (*num_type != IS_NOT_NUM && digit_count == 0)
+ r = ONIGERR_INVALID_GROUP_NAME;
break;
}
- if (is_num != 0) {
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
- is_num = 1;
+ if (*num_type != IS_NOT_NUM) {
+ if (IS_CODE_DIGIT_ASCII(enc, c)) {
+ digit_count++;
}
else {
if (!ONIGENC_IS_CODE_WORD(enc, c))
r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
else
r = ONIGERR_INVALID_GROUP_NAME;
- is_num = 0;
+
+ *num_type = IS_NOT_NUM;
}
}
else {
@@ -2651,15 +3496,17 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
if (c != end_code) {
r = ONIGERR_INVALID_GROUP_NAME;
- name_end = end;
+ goto err;
}
- if (is_num != 0) {
+ if (*num_type != IS_NOT_NUM) {
*rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);
if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;
else if (*rback_num == 0) {
- r = ONIGERR_INVALID_GROUP_NAME;
- goto err;
+ if (*num_type == IS_REL_NUM) {
+ r = ONIGERR_INVALID_GROUP_NAME;
+ goto err;
+ }
}
*rback_num *= sign;
@@ -2684,84 +3531,6 @@ fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
return r;
}
}
-#else
-static int
-fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,
- UChar** rname_end, ScanEnv* env, int* rback_num, int ref)
-{
- int r, is_num, sign;
- OnigCodePoint end_code;
- OnigCodePoint c = 0;
- UChar *name_end;
- OnigEncoding enc = env->enc;
- UChar *pnum_head;
- UChar *p = *src;
- PFETCH_READY;
-
- *rback_num = 0;
-
- end_code = get_name_end_code_point(start_code);
-
- *rname_end = name_end = end;
- r = 0;
- pnum_head = *src;
- is_num = 0;
- sign = 1;
-
- if (PEND) {
- return ONIGERR_EMPTY_GROUP_NAME;
- }
- else {
- PFETCH(c);
- if (c == end_code)
- return ONIGERR_EMPTY_GROUP_NAME;
-
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
- is_num = 1;
- }
- else if (c == '-') {
- is_num = 2;
- sign = -1;
- pnum_head = p;
- }
- else {
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
- }
- }
-
- while (!PEND) {
- name_end = p;
-
- PFETCH(c);
- if (c == end_code || c == ')') break;
- if (! ONIGENC_IS_CODE_DIGIT(enc, c))
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
- }
- if (r == 0 && c != end_code) {
- r = ONIGERR_INVALID_GROUP_NAME;
- name_end = end;
- }
-
- if (r == 0) {
- *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);
- if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;
- else if (*rback_num == 0) {
- r = ONIGERR_INVALID_GROUP_NAME;
- goto err;
- }
- *rback_num *= sign;
-
- *rname_end = name_end;
- *src = p;
- return 0;
- }
- else {
- err:
- onig_scan_env_set_error_string(env, r, *src, name_end);
- return r;
- }
-}
-#endif /* USE_NAMED_GROUP */
static void
CC_ESC_WARN(ScanEnv* env, UChar *c)
@@ -2772,8 +3541,9 @@ CC_ESC_WARN(ScanEnv* env, UChar *c)
IS_SYNTAX_BV(env->syntax, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC)) {
UChar buf[WARN_BUFSIZE];
onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
- env->pattern, env->pattern_end,
- (UChar* )"character class has '%s' without escape", c);
+ env->pattern, env->pattern_end,
+ (UChar* )"character class has '%s' without escape",
+ c);
(*onig_warn)((char* )buf);
}
}
@@ -2786,21 +3556,21 @@ CLOSE_BRACKET_WITHOUT_ESC_WARN(ScanEnv* env, UChar* c)
if (IS_SYNTAX_BV((env)->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED)) {
UChar buf[WARN_BUFSIZE];
onig_snprintf_with_pattern(buf, WARN_BUFSIZE, (env)->enc,
- (env)->pattern, (env)->pattern_end,
- (UChar* )"regular expression has '%s' without escape", c);
+ (env)->pattern, (env)->pattern_end,
+ (UChar* )"regular expression has '%s' without escape", c);
(*onig_warn)((char* )buf);
}
}
static UChar*
find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,
- UChar **next, OnigEncoding enc)
+ UChar **next, OnigEncoding enc)
{
int i;
OnigCodePoint x;
UChar *q;
UChar *p = from;
-
+
while (p < to) {
x = ONIGENC_MBC_TO_CODE(enc, p, to);
q = p + enclen(enc, p);
@@ -2823,7 +3593,7 @@ find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,
static int
str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,
- OnigCodePoint bad, OnigEncoding enc, OnigSyntaxType* syn)
+ OnigCodePoint bad, OnigEncoding enc, OnigSyntaxType* syn)
{
int i, in_esc;
OnigCodePoint x;
@@ -2972,7 +3742,7 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
if (!PEND) {
c2 = PPEEK;
- if (ONIGENC_IS_CODE_DIGIT(enc, c2))
+ if (IS_CODE_DIGIT_ASCII(enc, c2))
return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
}
@@ -2995,11 +3765,16 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
prev = p;
if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
PINC;
- num = scan_unsigned_hexadecimal_number(&p, end, 8, enc);
- if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+ num = scan_unsigned_hexadecimal_number(&p, end, 0, 8, enc);
+ if (num < 0) {
+ if (num == ONIGERR_TOO_BIG_NUMBER)
+ return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+ else
+ return num;
+ }
if (!PEND) {
c2 = PPEEK;
- if (ONIGENC_IS_CODE_XDIGIT(enc, c2))
+ if (IS_CODE_XDIGIT_ASCII(enc, c2))
return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
}
@@ -3015,8 +3790,8 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
}
}
else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 2, enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
+ num = scan_unsigned_hexadecimal_number(&p, end, 0, 2, enc);
+ if (num < 0) return num;
if (p == prev) { /* can't read nothing. */
num = 0; /* but, it's not error */
}
@@ -3031,8 +3806,8 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
prev = p;
if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 4, enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
+ num = scan_unsigned_hexadecimal_number(&p, end, 4, 4, enc);
+ if (num < 0) return num;
if (p == prev) { /* can't read nothing. */
num = 0; /* but, it's not error */
}
@@ -3229,13 +4004,25 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
case 'b':
if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
tok->type = TK_ANCHOR;
- tok->u.anchor = ANCHOR_WORD_BOUND;
+ tok->u.anchor = ANCHOR_WORD_BOUNDARY;
break;
case 'B':
if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;
tok->type = TK_ANCHOR;
- tok->u.anchor = ANCHOR_NOT_WORD_BOUND;
+ tok->u.anchor = ANCHOR_NO_WORD_BOUNDARY;
+ break;
+
+ case 'y':
+ if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
+ tok->type = TK_ANCHOR;
+ tok->u.anchor = ANCHOR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+ break;
+
+ case 'Y':
+ if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
+ tok->type = TK_ANCHOR;
+ tok->u.anchor = ANCHOR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
break;
#ifdef USE_WORD_BEGIN_END
@@ -3294,6 +4081,31 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
tok->u.prop.not = 1;
break;
+ case 'K':
+ if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP)) break;
+ tok->type = TK_KEEP;
+ break;
+
+ case 'R':
+ if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE)) break;
+ tok->type = TK_GENERAL_NEWLINE;
+ break;
+
+ case 'N':
+ if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT)) break;
+ tok->type = TK_NO_NEWLINE;
+ break;
+
+ case 'O':
+ if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT)) break;
+ tok->type = TK_TRUE_ANYCHAR;
+ break;
+
+ case 'X':
+ if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
+ tok->type = TK_EXTENDED_GRAPHEME_CLUSTER;
+ break;
+
case 'A':
if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;
begin_buf:
@@ -3339,7 +4151,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
num = scan_unsigned_octal_number(&p, end, 11, enc);
if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
if (!PEND) {
- if (ONIGENC_IS_CODE_DIGIT(enc, PPEEK))
+ if (IS_CODE_DIGIT_ASCII(enc, PPEEK))
return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
}
@@ -3361,10 +4173,15 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
prev = p;
if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {
PINC;
- num = scan_unsigned_hexadecimal_number(&p, end, 8, enc);
- if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+ num = scan_unsigned_hexadecimal_number(&p, end, 0, 8, enc);
+ if (num < 0) {
+ if (num == ONIGERR_TOO_BIG_NUMBER)
+ return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+ else
+ return num;
+ }
if (!PEND) {
- if (ONIGENC_IS_CODE_XDIGIT(enc, PPEEK))
+ if (IS_CODE_XDIGIT_ASCII(enc, PPEEK))
return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
}
@@ -3379,8 +4196,8 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
}
}
else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 2, enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
+ num = scan_unsigned_hexadecimal_number(&p, end, 0, 2, enc);
+ if (num < 0) return num;
if (p == prev) { /* can't read nothing. */
num = 0; /* but, it's not error */
}
@@ -3395,8 +4212,8 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
prev = p;
if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {
- num = scan_unsigned_hexadecimal_number(&p, end, 4, enc);
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
+ num = scan_unsigned_hexadecimal_number(&p, end, 4, 4, enc);
+ if (num < 0) return num;
if (p == prev) { /* can't read nothing. */
num = 0; /* but, it's not error */
}
@@ -3415,10 +4232,10 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
goto skip_backref;
}
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) &&
+ if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) &&
(num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */
if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
- if (num > env->num_mem || IS_NULL(SCANENV_MEM_NODES(env)[num]))
+ if (num > env->num_mem || IS_NULL(SCANENV_MEMENV(env)[num].node))
return ONIGERR_INVALID_BACKREF;
}
@@ -3458,7 +4275,6 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
}
break;
-#ifdef USE_NAMED_GROUP
case 'k':
if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {
PFETCH(c);
@@ -3466,30 +4282,31 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
UChar* name_end;
int* backs;
int back_num;
+ enum REF_NUM num_type;
prev = p;
#ifdef USE_BACKREF_WITH_LEVEL
name_end = NULL_UCHARP; /* no need. escape gcc warning. */
r = fetch_name_with_level((OnigCodePoint )c, &p, end, &name_end,
- env, &back_num, &tok->u.backref.level);
+ env, &back_num, &tok->u.backref.level, &num_type);
if (r == 1) tok->u.backref.exist_level = 1;
else tok->u.backref.exist_level = 0;
#else
- r = fetch_name(&p, end, &name_end, env, &back_num, 1);
+ r = fetch_name(c, &p, end, &name_end, env, &back_num, &num_type, 1);
#endif
if (r < 0) return r;
- if (back_num != 0) {
- if (back_num < 0) {
- back_num = BACKREF_REL_TO_ABS(back_num, env);
- if (back_num <= 0)
- return ONIGERR_INVALID_BACKREF;
+ if (num_type != IS_NOT_NUM) {
+ if (num_type == IS_REL_NUM) {
+ back_num = backref_rel_to_abs(back_num, env);
}
+ if (back_num <= 0)
+ return ONIGERR_INVALID_BACKREF;
if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
if (back_num > env->num_mem ||
- IS_NULL(SCANENV_MEM_NODES(env)[back_num]))
+ IS_NULL(SCANENV_MEMENV(env)[back_num].node))
return ONIGERR_INVALID_BACKREF;
}
tok->type = TK_BACKREF;
@@ -3508,7 +4325,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
int i;
for (i = 0; i < num; i++) {
if (backs[i] > env->num_mem ||
- IS_NULL(SCANENV_MEM_NODES(env)[backs[i]]))
+ IS_NULL(SCANENV_MEMENV(env)[backs[i]].node))
return ONIGERR_INVALID_BACKREF;
}
}
@@ -3529,24 +4346,38 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
PUNFETCH;
}
break;
-#endif
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
case 'g':
if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {
PFETCH(c);
if (c == '<' || c == '\'') {
int gnum;
UChar* name_end;
+ enum REF_NUM num_type;
prev = p;
- r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &gnum, 1);
+ r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env,
+ &gnum, &num_type, 1);
if (r < 0) return r;
+ if (num_type != IS_NOT_NUM) {
+ if (num_type == IS_REL_NUM) {
+ gnum = backref_rel_to_abs(gnum, env);
+ if (gnum < 0)
+ return ONIGERR_UNDEFINED_GROUP_REFERENCE;
+ }
+ tok->u.call.by_number = 1;
+ tok->u.call.gnum = gnum;
+ }
+ else {
+ tok->u.call.by_number = 0;
+ tok->u.call.gnum = 0;
+ }
+
tok->type = TK_CALL;
tok->u.call.name = prev;
tok->u.call.name_end = name_end;
- tok->u.call.gnum = gnum;
}
else
PUNFETCH;
@@ -3686,20 +4517,91 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
if (!PEND && PPEEK_IS('?') &&
IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {
PINC;
- if (!PEND && PPEEK_IS('#')) {
- PFETCH(c);
- while (1) {
- if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+ if (! PEND) {
+ c = PPEEK;
+ if (c == '#') {
PFETCH(c);
- if (c == MC_ESC(syn)) {
- if (!PEND) PFETCH(c);
+ while (1) {
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+ PFETCH(c);
+ if (c == MC_ESC(syn)) {
+ if (! PEND) PFETCH(c);
+ }
+ else {
+ if (c == ')') break;
+ }
}
- else {
- if (c == ')') break;
+ goto start;
+ }
+ else if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL)) {
+ int gnum;
+ UChar* name;
+ UChar* name_end;
+ enum REF_NUM num_type;
+
+ switch (c) {
+ case '&':
+ {
+ PINC;
+ name = p;
+ r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env, &gnum,
+ &num_type, 0);
+ if (r < 0) return r;
+
+ tok->type = TK_CALL;
+ tok->u.call.by_number = 0;
+ tok->u.call.gnum = 0;
+ tok->u.call.name = name;
+ tok->u.call.name_end = name_end;
+ }
+ break;
+
+ case 'R':
+ tok->type = TK_CALL;
+ tok->u.call.by_number = 1;
+ tok->u.call.gnum = 0;
+ tok->u.call.name = p;
+ PINC;
+ if (! PPEEK_IS(')')) return ONIGERR_INVALID_GROUP_NAME;
+ tok->u.call.name_end = p;
+ break;
+
+ case '-':
+ case '+':
+ goto lparen_qmark_num;
+ break;
+ default:
+ if (! ONIGENC_IS_CODE_DIGIT(enc, c)) goto lparen_qmark_end;
+
+ lparen_qmark_num:
+ {
+ name = p;
+ r = fetch_name((OnigCodePoint )'(', &p, end, &name_end, env,
+ &gnum, &num_type, 1);
+ if (r < 0) return r;
+
+ if (num_type == IS_NOT_NUM) {
+ return ONIGERR_INVALID_GROUP_NAME;
+ }
+ else {
+ if (num_type == IS_REL_NUM) {
+ gnum = backref_rel_to_abs(gnum, env);
+ if (gnum < 0)
+ return ONIGERR_UNDEFINED_GROUP_REFERENCE;
+ }
+ tok->u.call.by_number = 1;
+ tok->u.call.gnum = gnum;
+ }
+
+ tok->type = TK_CALL;
+ tok->u.call.name = name;
+ tok->u.call.name_end = name_end;
+ }
+ break;
}
}
- goto start;
}
+ lparen_qmark_end:
PUNFETCH;
}
@@ -3715,15 +4617,15 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
case '^':
if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
tok->type = TK_ANCHOR;
- tok->u.subtype = (IS_SINGLELINE(env->option)
- ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);
+ tok->u.subtype = (IS_SINGLELINE(env->options)
+ ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);
break;
case '$':
if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;
tok->type = TK_ANCHOR;
- tok->u.subtype = (IS_SINGLELINE(env->option)
- ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);
+ tok->u.subtype = (IS_SINGLELINE(env->options)
+ ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);
break;
case '[':
@@ -3737,7 +4639,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
break;
case '#':
- if (IS_EXTEND(env->option)) {
+ if (IS_EXTEND(env->options)) {
while (!PEND) {
PFETCH(c);
if (ONIGENC_IS_CODE_NEWLINE(enc, c))
@@ -3749,7 +4651,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
break;
case ' ': case '\t': case '\n': case '\r': case '\f':
- if (IS_EXTEND(env->option))
+ if (IS_EXTEND(env->options))
goto start;
break;
@@ -3768,8 +4670,8 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
static int
add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
- OnigEncoding enc ARG_UNUSED,
- OnigCodePoint sb_out, const OnigCodePoint mbr[])
+ OnigEncoding enc ARG_UNUSED, OnigCodePoint sb_out,
+ const OnigCodePoint mbr[])
{
int i, r;
OnigCodePoint j;
@@ -3828,33 +4730,140 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
if (r != 0) return r;
}
prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;
+ if (prev == 0) goto end;
+ }
+
+ r = add_code_range_to_buf(&(cc->mbuf), prev, MAX_CODE_POINT);
+ if (r != 0) return r;
+ }
+
+ end:
+ return 0;
+}
+
+static int
+add_ctype_to_cc_by_range_limit(CClassNode* cc, int ctype ARG_UNUSED, int not,
+ OnigEncoding enc ARG_UNUSED,
+ OnigCodePoint sb_out,
+ const OnigCodePoint mbr[], OnigCodePoint limit)
+{
+ int i, r;
+ OnigCodePoint j;
+ OnigCodePoint from;
+ OnigCodePoint to;
+
+ int n = ONIGENC_CODE_RANGE_NUM(mbr);
+
+ if (not == 0) {
+ for (i = 0; i < n; i++) {
+ for (j = ONIGENC_CODE_RANGE_FROM(mbr, i);
+ j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {
+ if (j > limit) goto end;
+ if (j >= sb_out) {
+ if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {
+ to = ONIGENC_CODE_RANGE_TO(mbr, i);
+ if (to > limit) to = limit;
+ r = add_code_range_to_buf(&(cc->mbuf), j, to);
+ if (r != 0) return r;
+ i++;
+ }
+
+ goto sb_end;
+ }
+ BITSET_SET_BIT(cc->bs, j);
+ }
}
- if (prev < 0x7fffffff) {
- r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff);
+
+ sb_end:
+ for ( ; i < n; i++) {
+ from = ONIGENC_CODE_RANGE_FROM(mbr, i);
+ to = ONIGENC_CODE_RANGE_TO(mbr, i);
+ if (from > limit) break;
+ if (to > limit) to = limit;
+ r = add_code_range_to_buf(&(cc->mbuf), from, to);
if (r != 0) return r;
}
}
+ else {
+ OnigCodePoint prev = 0;
+
+ for (i = 0; i < n; i++) {
+ from = ONIGENC_CODE_RANGE_FROM(mbr, i);
+ if (from > limit) {
+ for (j = prev; j < sb_out; j++) {
+ BITSET_SET_BIT(cc->bs, j);
+ }
+ goto sb_end2;
+ }
+ for (j = prev; j < from; j++) {
+ if (j >= sb_out) goto sb_end2;
+ BITSET_SET_BIT(cc->bs, j);
+ }
+ prev = ONIGENC_CODE_RANGE_TO(mbr, i);
+ if (prev > limit) prev = limit;
+ prev++;
+ if (prev == 0) goto end;
+ }
+ for (j = prev; j < sb_out; j++) {
+ BITSET_SET_BIT(cc->bs, j);
+ }
+
+ sb_end2:
+ prev = sb_out;
+
+ for (i = 0; i < n; i++) {
+ from = ONIGENC_CODE_RANGE_FROM(mbr, i);
+ if (from > limit) goto last;
+
+ if (prev < from) {
+ r = add_code_range_to_buf(&(cc->mbuf), prev, from - 1);
+ if (r != 0) return r;
+ }
+ prev = ONIGENC_CODE_RANGE_TO(mbr, i);
+ if (prev > limit) prev = limit;
+ prev++;
+ if (prev == 0) goto end;
+ }
+
+ last:
+ r = add_code_range_to_buf(&(cc->mbuf), prev, MAX_CODE_POINT);
+ if (r != 0) return r;
+ }
+ end:
return 0;
}
static int
add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env)
{
+#define ASCII_LIMIT 127
+
int c, r;
+ int ascii_mode;
const OnigCodePoint *ranges;
+ OnigCodePoint limit;
OnigCodePoint sb_out;
OnigEncoding enc = env->enc;
+ ascii_mode = IS_ASCII_MODE_CTYPE_OPTION(ctype, env->options);
+
r = ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, &sb_out, &ranges);
if (r == 0) {
- return add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sb_out, ranges);
+ if (ascii_mode == 0)
+ r = add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sb_out, ranges);
+ else
+ r = add_ctype_to_cc_by_range_limit(cc, ctype, not, env->enc, sb_out,
+ ranges, ASCII_LIMIT);
+ return r;
}
else if (r != ONIG_NO_SUPPORT_CONFIG) {
return r;
}
r = 0;
+ limit = ascii_mode ? ASCII_LIMIT : SINGLE_BYTE_SIZE;
+
switch (ctype) {
case ONIGENC_CTYPE_ALPHA:
case ONIGENC_CTYPE_BLANK:
@@ -3868,14 +4877,18 @@ add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env)
case ONIGENC_CTYPE_ASCII:
case ONIGENC_CTYPE_ALNUM:
if (not != 0) {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
+ for (c = 0; c < (int )limit; c++) {
if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
BITSET_SET_BIT(cc->bs, c);
}
+ for (c = limit; c < SINGLE_BYTE_SIZE; c++) {
+ BITSET_SET_BIT(cc->bs, c);
+ }
+
ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
}
else {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
+ for (c = 0; c < (int )limit; c++) {
if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
BITSET_SET_BIT(cc->bs, c);
}
@@ -3884,34 +4897,25 @@ add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env)
case ONIGENC_CTYPE_GRAPH:
case ONIGENC_CTYPE_PRINT:
+ case ONIGENC_CTYPE_WORD:
if (not != 0) {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
+ for (c = 0; c < (int )limit; c++) {
+ if (ONIGENC_CODE_TO_MBCLEN(enc, c) > 0 /* check invalid code point */
+ && ! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
BITSET_SET_BIT(cc->bs, c);
}
- }
- else {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
+ for (c = limit; c < SINGLE_BYTE_SIZE; c++) {
+ if (ONIGENC_CODE_TO_MBCLEN(enc, c) > 0)
BITSET_SET_BIT(cc->bs, c);
}
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
- }
- break;
-
- case ONIGENC_CTYPE_WORD:
- if (not == 0) {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if (IS_CODE_SB_WORD(enc, c)) BITSET_SET_BIT(cc->bs, c);
- }
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
}
else {
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
- if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* check invalid code point */
- && ! ONIGENC_IS_CODE_WORD(enc, c))
+ for (c = 0; c < (int )limit; c++) {
+ if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
BITSET_SET_BIT(cc->bs, c);
}
+ if (ascii_mode == 0)
+ ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
}
break;
@@ -4029,8 +5033,7 @@ fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env)
}
static int
-parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end,
- ScanEnv* env)
+parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
{
int r, ctype;
CClassNode* cc;
@@ -4040,7 +5043,7 @@ parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end,
*np = node_new_cclass();
CHECK_NULL_RETURN_MEMERR(*np);
- cc = NCCLASS(*np);
+ cc = CCLASS_(*np);
r = add_ctype_to_cc(cc, ctype, 0, env);
if (r != 0) return r;
if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);
@@ -4064,7 +5067,7 @@ enum CCVALTYPE {
static int
next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type,
- enum CCSTATE* state, ScanEnv* env)
+ enum CCSTATE* state, ScanEnv* env)
{
int r;
@@ -4080,18 +5083,16 @@ next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type,
}
}
- if (*state != CCS_START)
- *state = CCS_VALUE;
-
+ *state = CCS_VALUE;
*type = CCV_CLASS;
return 0;
}
static int
next_state_val(CClassNode* cc, OnigCodePoint *from, OnigCodePoint to,
- int* from_israw, int to_israw,
- enum CCVALTYPE intype, enum CCVALTYPE* type,
- enum CCSTATE* state, ScanEnv* env)
+ int* from_israw, int to_israw,
+ enum CCVALTYPE intype, enum CCVALTYPE* type,
+ enum CCSTATE* state, ScanEnv* env)
{
int r;
@@ -4160,7 +5161,7 @@ next_state_val(CClassNode* cc, OnigCodePoint *from, OnigCodePoint to,
static int
code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,
- ScanEnv* env)
+ ScanEnv* env)
{
int in_esc;
OnigCodePoint code;
@@ -4182,8 +5183,7 @@ code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,
}
static int
-parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
- ScanEnv* env)
+parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
{
int r, neg, len, fetched, and_start;
OnigCodePoint v, vs;
@@ -4222,7 +5222,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
*np = node = node_new_cclass();
CHECK_NULL_RETURN_MEMERR(node);
- cc = NCCLASS(node);
+ cc = CCLASS_(node);
and_start = 0;
state = CCS_START;
@@ -4316,7 +5316,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);
val_entry2:
r = next_state_val(cc, &vs, v, &val_israw, in_israw, in_type, &val_type,
- &state, env);
+ &state, env);
if (r != 0) goto err;
break;
@@ -4335,7 +5335,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
case TK_CHAR_TYPE:
r = add_ctype_to_cc(cc, tok->u.prop.ctype, tok->u.prop.not, env);
- if (r != 0) return r;
+ if (r != 0) goto err;
next_class:
r = next_state_class(cc, &vs, &val_type, &state, env);
@@ -4344,12 +5344,13 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
case TK_CHAR_PROPERTY:
{
- int ctype;
-
- ctype = fetch_char_property_to_ctype(&p, end, env);
- if (ctype < 0) return ctype;
+ int ctype = fetch_char_property_to_ctype(&p, end, env);
+ if (ctype < 0) {
+ r = ctype;
+ goto err;
+ }
r = add_ctype_to_cc(cc, ctype, tok->u.prop.not, env);
- if (r != 0) return r;
+ if (r != 0) goto err;
goto next_class;
}
break;
@@ -4369,6 +5370,12 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
CC_ESC_WARN(env, (UChar* )"-");
goto range_end_val;
}
+
+ if (val_type == CCV_CLASS) {
+ r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;
+ goto err;
+ }
+
state = CCS_RANGE;
}
else if (state == CCS_START) {
@@ -4418,10 +5425,10 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
onig_node_free(anode);
goto cc_open_err;
}
- acc = NCCLASS(anode);
+ acc = CCLASS_(anode);
r = or_cclass(cc, acc, env->enc);
-
onig_node_free(anode);
+
cc_open_err:
if (r != 0) goto err;
}
@@ -4471,7 +5478,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
if (state == CCS_VALUE) {
r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type,
- &val_type, &state, env);
+ &val_type, &state, env);
if (r != 0) goto err;
}
@@ -4488,9 +5495,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
NCCLASS_CLEAR_NOT(cc);
if (IS_NCCLASS_NOT(cc) &&
IS_SYNTAX_BV(env->syntax, ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC)) {
- int is_empty;
-
- is_empty = (IS_NULL(cc->mbuf) ? 1 : 0);
+ int is_empty = (IS_NULL(cc->mbuf) ? 1 : 0);
if (is_empty != 0)
BITSET_IS_EMPTY(cc->bs, is_empty);
@@ -4510,27 +5515,24 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,
return 0;
err:
- if (cc != NCCLASS(*np))
+ if (cc != CCLASS_(*np))
bbuf_free(cc->mbuf);
return r;
}
static int parse_subexp(Node** top, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env);
+ UChar** src, UChar* end, ScanEnv* env);
static int
-parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
- ScanEnv* env)
+parse_enclosure(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
+ ScanEnv* env)
{
int r, num;
Node *target;
OnigOptionType option;
OnigCodePoint c;
- OnigEncoding enc = env->enc;
-
-#ifdef USE_NAMED_GROUP
int list_capture;
-#endif
+ OnigEncoding enc = env->enc;
UChar* p = *src;
PFETCH_READY;
@@ -4538,7 +5540,7 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
*np = NULL;
if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
- option = env->option;
+ option = env->options;
if (PPEEK_IS('?') &&
IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {
PINC;
@@ -4557,16 +5559,15 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
break;
case '=':
- *np = onig_node_new_anchor(ANCHOR_PREC_READ);
+ *np = onig_node_new_anchor(ANCHOR_PREC_READ, 0);
break;
case '!': /* preceding read */
- *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT);
+ *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT, 0);
break;
case '>': /* (?>...) stop backtrack */
- *np = node_new_enclose(ENCLOSE_STOP_BACKTRACK);
+ *np = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
break;
-#ifdef USE_NAMED_GROUP
case '\'':
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
goto named_group1;
@@ -4574,20 +5575,19 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
else
return ONIGERR_UNDEFINED_GROUP_OPTION;
break;
-#endif
case '<': /* look behind (?<=...), (?<!...) */
if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
PFETCH(c);
if (c == '=')
- *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND);
+ *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND, 0);
else if (c == '!')
- *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT);
-#ifdef USE_NAMED_GROUP
+ *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT, 0);
else {
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
UChar *name;
UChar *name_end;
+ enum REF_NUM num_type;
PUNFETCH;
c = '<';
@@ -4597,37 +5597,284 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
named_group2:
name = p;
- r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num, 0);
+ r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num,
+ &num_type, 0);
if (r < 0) return r;
num = scan_env_add_mem_entry(env);
if (num < 0) return num;
- if (list_capture != 0 && num >= (int )BIT_STATUS_BITS_NUM)
+ if (list_capture != 0 && num >= (int )MEM_STATUS_BITS_NUM)
return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
r = name_add(env->reg, name, name_end, num, env);
if (r != 0) return r;
- *np = node_new_enclose_memory(env->option, 1);
+ *np = node_new_memory(1);
CHECK_NULL_RETURN_MEMERR(*np);
- NENCLOSE(*np)->regnum = num;
+ ENCLOSURE_(*np)->m.regnum = num;
if (list_capture != 0)
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
+ MEM_STATUS_ON_SIMPLE(env->capture_history, num);
env->num_named++;
}
else {
return ONIGERR_UNDEFINED_GROUP_OPTION;
}
}
-#else
+ break;
+
+ case '~':
+ if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP)) {
+ Node* absent;
+ Node* expr;
+ int head_bar;
+ int is_range_cutter;
+
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+
+ if (PPEEK_IS('|')) { // (?~|generator|absent)
+ PINC;
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+
+ head_bar = 1;
+ if (PPEEK_IS(')')) { // (?~|) : range clear
+ PINC;
+ r = make_range_clear(np, env);
+ if (r != 0) return r;
+ goto end;
+ }
+ }
+ else
+ head_bar = 0;
+
+ r = fetch_token(tok, &p, end, env);
+ if (r < 0) return r;
+ r = parse_subexp(&absent, tok, term, &p, end, env);
+ if (r < 0) {
+ onig_node_free(absent);
+ return r;
+ }
+
+ expr = NULL_NODE;
+ is_range_cutter = 0;
+ if (head_bar != 0) {
+ Node* top = absent;
+ if (NODE_TYPE(top) != NODE_ALT || IS_NULL(NODE_CDR(top))) {
+ expr = NULL_NODE;
+ is_range_cutter = 1;
+ //return ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN;
+ }
+ else {
+ absent = NODE_CAR(top);
+ expr = NODE_CDR(top);
+ NODE_CAR(top) = NULL_NODE;
+ NODE_CDR(top) = NULL_NODE;
+ onig_node_free(top);
+ if (IS_NULL(NODE_CDR(expr))) {
+ top = expr;
+ expr = NODE_CAR(top);
+ NODE_CAR(top) = NULL_NODE;
+ onig_node_free(top);
+ }
+ }
+ }
+
+ r = make_absent_tree(np, absent, expr, is_range_cutter, env);
+ if (r != 0) {
+ return r;
+ }
+ goto end;
+ }
else {
return ONIGERR_UNDEFINED_GROUP_OPTION;
}
+ break;
+
+ case '(':
+ /* (?()...) */
+ if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE)) {
+ UChar *prev;
+ Node* condition;
+ int condition_is_checker;
+
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+ PFETCH(c);
+ if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+
+ if (IS_CODE_DIGIT_ASCII(enc, c)
+ || c == '-' || c == '+' || c == '<' || c == '\'') {
+ UChar* name_end;
+ int back_num;
+ int exist_level;
+ int level;
+ enum REF_NUM num_type;
+ int is_enclosed;
+
+ is_enclosed = (c == '<' || c == '\'') ? 1 : 0;
+ if (! is_enclosed)
+ PUNFETCH;
+ prev = p;
+ exist_level = 0;
+#ifdef USE_BACKREF_WITH_LEVEL
+ name_end = NULL_UCHARP; /* no need. escape gcc warning. */
+ r = fetch_name_with_level(
+ (OnigCodePoint )(is_enclosed != 0 ? c : '('),
+ &p, end, &name_end,
+ env, &back_num, &level, &num_type);
+ if (r == 1) exist_level = 1;
+#else
+ r = fetch_name((OnigCodePoint )(is_enclosed != 0 ? c : '('),
+ &p, end, &name_end, env, &back_num, &num_type, 1);
+#endif
+ if (r < 0) {
+ if (is_enclosed == 0) {
+ goto any_condition;
+ }
+ else
+ return r;
+ }
+
+ condition_is_checker = 1;
+ if (num_type != IS_NOT_NUM) {
+ if (num_type == IS_REL_NUM) {
+ back_num = backref_rel_to_abs(back_num, env);
+ }
+ if (back_num <= 0)
+ return ONIGERR_INVALID_BACKREF;
+
+ if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
+ if (back_num > env->num_mem ||
+ IS_NULL(SCANENV_MEMENV(env)[back_num].node))
+ return ONIGERR_INVALID_BACKREF;
+ }
+
+ condition = node_new_backref_checker(1, &back_num, 0,
+#ifdef USE_BACKREF_WITH_LEVEL
+ exist_level, level,
+#endif
+ env);
+ }
+ else {
+ int num;
+ int* backs;
+
+ num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);
+ if (num <= 0) {
+ onig_scan_env_set_error_string(env,
+ ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);
+ return ONIGERR_UNDEFINED_NAME_REFERENCE;
+ }
+ if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
+ int i;
+ for (i = 0; i < num; i++) {
+ if (backs[i] > env->num_mem ||
+ IS_NULL(SCANENV_MEMENV(env)[backs[i]].node))
+ return ONIGERR_INVALID_BACKREF;
+ }
+ }
+
+ condition = node_new_backref_checker(num, backs, 1,
+#ifdef USE_BACKREF_WITH_LEVEL
+ exist_level, level,
#endif
+ env);
+ }
+
+ if (is_enclosed != 0) {
+ if (PEND) goto err_if_else;
+ PFETCH(c);
+ if (c != ')') goto err_if_else;
+ }
+ }
+ else {
+ any_condition:
+ PUNFETCH;
+ condition_is_checker = 0;
+ r = fetch_token(tok, &p, end, env);
+ if (r < 0) return r;
+ r = parse_subexp(&condition, tok, term, &p, end, env);
+ if (r < 0) {
+ onig_node_free(condition);
+ return r;
+ }
+ }
+
+ CHECK_NULL_RETURN_MEMERR(condition);
+
+ if (PEND) {
+ err_if_else:
+ onig_node_free(condition);
+ return ONIGERR_END_PATTERN_IN_GROUP;
+ }
+
+ if (PPEEK_IS(')')) { /* case: empty body: make backref checker */
+ if (condition_is_checker == 0) {
+ onig_node_free(condition);
+ return ONIGERR_INVALID_IF_ELSE_SYNTAX;
+ }
+ PFETCH(c);
+ *np = condition;
+ }
+ else { /* if-else */
+ int then_is_empty;
+ Node *Then, *Else;
+
+ if (PPEEK_IS('|')) {
+ PFETCH(c);
+ Then = 0;
+ then_is_empty = 1;
+ }
+ else
+ then_is_empty = 0;
+
+ r = fetch_token(tok, &p, end, env);
+ if (r < 0) {
+ onig_node_free(condition);
+ return r;
+ }
+ r = parse_subexp(&target, tok, term, &p, end, env);
+ if (r < 0) {
+ onig_node_free(condition);
+ onig_node_free(target);
+ return r;
+ }
+
+ if (then_is_empty != 0) {
+ Else = target;
+ }
+ else {
+ if (NODE_TYPE(target) == NODE_ALT) {
+ Then = NODE_CAR(target);
+ if (NODE_CDR(NODE_CDR(target)) == NULL_NODE) {
+ Else = NODE_CAR(NODE_CDR(target));
+ cons_node_free_alone(NODE_CDR(target));
+ }
+ else {
+ Else = NODE_CDR(target);
+ }
+ cons_node_free_alone(target);
+ }
+ else {
+ Then = target;
+ Else = 0;
+ }
+ }
+
+ *np = node_new_enclosure_if_else(condition, Then, Else);
+ if (IS_NULL(*np)) {
+ onig_node_free(condition);
+ onig_node_free(Then);
+ onig_node_free(Else);
+ return ONIGERR_MEMORY;
+ }
+ }
+ goto end;
+ }
+ else {
+ return ONIGERR_UNDEFINED_GROUP_OPTION;
+ }
break;
case '@':
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {
-#ifdef USE_NAMED_GROUP
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
PFETCH(c);
if (c == '<' || c == '\'') {
@@ -4636,18 +5883,18 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
}
PUNFETCH;
}
-#endif
- *np = node_new_enclose_memory(env->option, 0);
+
+ *np = node_new_memory(0);
CHECK_NULL_RETURN_MEMERR(*np);
num = scan_env_add_mem_entry(env);
if (num < 0) {
return num;
}
- else if (num >= (int )BIT_STATUS_BITS_NUM) {
+ else if (num >= (int )MEM_STATUS_BITS_NUM) {
return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;
}
- NENCLOSE(*np)->regnum = num;
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);
+ ENCLOSURE_(*np)->m.regnum = num;
+ MEM_STATUS_ON_SIMPLE(env->capture_history, num);
}
else {
return ONIGERR_UNDEFINED_GROUP_OPTION;
@@ -4658,6 +5905,7 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
case 'p':
#endif
case '-': case 'i': case 'm': case 's': case 'x':
+ case 'W': case 'D': case 'S': case 'P':
{
int neg = 0;
@@ -4668,11 +5916,11 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
break;
case '-': neg = 1; break;
- case 'x': ONOFF(option, ONIG_OPTION_EXTEND, neg); break;
- case 'i': ONOFF(option, ONIG_OPTION_IGNORECASE, neg); break;
+ case 'x': OPTION_NEGATE(option, ONIG_OPTION_EXTEND, neg); break;
+ case 'i': OPTION_NEGATE(option, ONIG_OPTION_IGNORECASE, neg); break;
case 's':
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
- ONOFF(option, ONIG_OPTION_MULTILINE, neg);
+ OPTION_NEGATE(option, ONIG_OPTION_MULTILINE, neg);
}
else
return ONIGERR_UNDEFINED_GROUP_OPTION;
@@ -4680,19 +5928,24 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
case 'm':
if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
- ONOFF(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));
+ OPTION_NEGATE(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));
}
else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
- ONOFF(option, ONIG_OPTION_MULTILINE, neg);
+ OPTION_NEGATE(option, ONIG_OPTION_MULTILINE, neg);
}
else
return ONIGERR_UNDEFINED_GROUP_OPTION;
break;
#ifdef USE_POSIXLINE_OPTION
case 'p':
- ONOFF(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg);
+ OPTION_NEGATE(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg);
break;
#endif
+ case 'W': OPTION_NEGATE(option, ONIG_OPTION_WORD_IS_ASCII, neg); break;
+ case 'D': OPTION_NEGATE(option, ONIG_OPTION_DIGIT_IS_ASCII, neg); break;
+ case 'S': OPTION_NEGATE(option, ONIG_OPTION_SPACE_IS_ASCII, neg); break;
+ case 'P': OPTION_NEGATE(option, ONIG_OPTION_POSIX_IS_ASCII, neg); break;
+
default:
return ONIGERR_UNDEFINED_GROUP_OPTION;
}
@@ -4704,20 +5957,20 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
return 2; /* option only */
}
else if (c == ':') {
- OnigOptionType prev = env->option;
+ OnigOptionType prev = env->options;
- env->option = option;
+ env->options = option;
r = fetch_token(tok, &p, end, env);
if (r < 0) return r;
r = parse_subexp(&target, tok, term, &p, end, env);
- env->option = prev;
+ env->options = prev;
if (r < 0) {
onig_node_free(target);
return r;
}
*np = node_new_option(option);
CHECK_NULL_RETURN_MEMERR(*np);
- NENCLOSE(*np)->target = target;
+ NODE_BODY(*np) = target;
*src = p;
return 0;
}
@@ -4733,14 +5986,14 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
}
}
else {
- if (ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_DONT_CAPTURE_GROUP))
+ if (ONIG_IS_OPTION_ON(env->options, ONIG_OPTION_DONT_CAPTURE_GROUP))
goto group;
- *np = node_new_enclose_memory(env->option, 0);
+ *np = node_new_memory(0);
CHECK_NULL_RETURN_MEMERR(*np);
num = scan_env_add_mem_entry(env);
if (num < 0) return num;
- NENCLOSE(*np)->regnum = num;
+ ENCLOSURE_(*np)->m.regnum = num;
}
CHECK_NULL_RETURN_MEMERR(*np);
@@ -4752,17 +6005,17 @@ parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
return r;
}
- if (NTYPE(*np) == NT_ANCHOR)
- NANCHOR(*np)->target = target;
- else {
- NENCLOSE(*np)->target = target;
- if (NENCLOSE(*np)->type == ENCLOSE_MEMORY) {
+ NODE_BODY(*np) = target;
+
+ if (NODE_TYPE(*np) == NODE_ENCLOSURE) {
+ if (ENCLOSURE_(*np)->type == ENCLOSURE_MEMORY) {
/* Don't move this to previous of parse_subexp() */
- r = scan_env_set_mem_node(env, NENCLOSE(*np)->regnum, *np);
+ r = scan_env_set_mem_node(env, ENCLOSURE_(*np)->m.regnum, *np);
if (r != 0) return r;
}
}
+ end:
*src = p;
return 0;
}
@@ -4778,36 +6031,35 @@ static const char* ReduceQStr[] = {
static int
set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
{
- QtfrNode* qn;
+ QuantNode* qn;
- qn = NQTFR(qnode);
- if (qn->lower == 1 && qn->upper == 1) {
+ qn = QUANT_(qnode);
+ if (qn->lower == 1 && qn->upper == 1)
return 1;
- }
- switch (NTYPE(target)) {
- case NT_STR:
+ switch (NODE_TYPE(target)) {
+ case NODE_STRING:
if (! group) {
- StrNode* sn = NSTR(target);
+ StrNode* sn = STR_(target);
if (str_node_can_be_split(sn, env->enc)) {
Node* n = str_node_split_last_char(sn, env->enc);
if (IS_NOT_NULL(n)) {
- qn->target = n;
+ NODE_BODY(qnode) = n;
return 2;
}
}
}
break;
- case NT_QTFR:
+ case NODE_QUANT:
{ /* check redundant double repeat. */
/* verbose warn (?:.?)? etc... but not warn (.?)? etc... */
- QtfrNode* qnt = NQTFR(target);
- int nestq_num = popular_quantifier_num(qn);
- int targetq_num = popular_quantifier_num(qnt);
+ QuantNode* qnt = QUANT_(target);
+ int nestq_num = quantifier_type_num(qn);
+ int targetq_num = quantifier_type_num(qnt);
#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
- if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) &&
+ if (! NODE_IS_BY_NUMBER(qnode) && ! NODE_IS_BY_NUMBER(target) &&
IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {
UChar buf[WARN_BUFSIZE];
@@ -4841,18 +6093,19 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
warn_exit:
#endif
- if (targetq_num >= 0) {
- if (nestq_num >= 0) {
- onig_reduce_nested_quantifier(qnode, target);
- goto q_exit;
- }
- else if (targetq_num == 1 || targetq_num == 2) { /* * or + */
+ if (targetq_num >= 0 && nestq_num < 0) {
+ if (targetq_num == 1 || targetq_num == 2) { /* * or + */
/* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */
if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) {
qn->upper = (qn->lower == 0 ? 1 : qn->lower);
}
}
}
+ else {
+ NODE_BODY(qnode) = target;
+ onig_reduce_nested_quantifier(qnode, target);
+ goto q_exit;
+ }
}
break;
@@ -4860,7 +6113,7 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
break;
}
- qn->target = target;
+ NODE_BODY(qnode) = target;
q_exit:
return 0;
}
@@ -4899,8 +6152,7 @@ typedef struct {
} IApplyCaseFoldArg;
static int
-i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
- int to_len, void* arg)
+i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[], int to_len, void* arg)
{
IApplyCaseFoldArg* iarg;
ScanEnv* env;
@@ -4947,7 +6199,7 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
if (onig_is_code_in_cc(env->enc, from, cc)
#ifdef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS
- && !IS_NCCLASS_NOT(cc)
+ && !IS_NCCLASS_NOT(cc)
#endif
) {
for (i = 0; i < to_len; i++) {
@@ -4958,7 +6210,7 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
/* char-class expanded multi-char only
compare with string folded at match time. */
- NSTRING_SET_AMBIG(snode);
+ NODE_STRING_SET_AMBIG(snode);
}
else {
r = onig_node_str_cat(snode, buf, buf + len);
@@ -4971,7 +6223,7 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
*(iarg->ptail) = onig_node_new_alt(snode, NULL_NODE);
CHECK_NULL_RETURN_MEMERR(*(iarg->ptail));
- iarg->ptail = &(NCDR((*(iarg->ptail))));
+ iarg->ptail = &(NODE_CDR((*(iarg->ptail))));
}
}
@@ -4979,8 +6231,8 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],
}
static int
-parse_exp(Node** np, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env)
+parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
+ ScanEnv* env)
{
int r, len, group = 0;
Node* qn;
@@ -4999,23 +6251,23 @@ parse_exp(Node** np, OnigToken* tok, int term,
break;
case TK_SUBEXP_OPEN:
- r = parse_enclose(np, tok, TK_SUBEXP_CLOSE, src, end, env);
+ r = parse_enclosure(np, tok, TK_SUBEXP_CLOSE, src, end, env);
if (r < 0) return r;
if (r == 1) group = 1;
else if (r == 2) { /* option only */
Node* target;
- OnigOptionType prev = env->option;
+ OnigOptionType prev = env->options;
- env->option = NENCLOSE(*np)->option;
+ env->options = ENCLOSURE_(*np)->o.options;
r = fetch_token(tok, src, end, env);
if (r < 0) return r;
r = parse_subexp(&target, tok, term, src, end, env);
- env->option = prev;
+ env->options = prev;
if (r < 0) {
onig_node_free(target);
return r;
}
- NENCLOSE(*np)->target = target;
+ NODE_BODY(*np) = target;
return tok->type;
}
break;
@@ -5057,9 +6309,9 @@ parse_exp(Node** np, OnigToken* tok, int term,
len = 1;
while (1) {
if (len >= ONIGENC_MBC_MINLEN(env->enc)) {
- if (len == enclen(env->enc, NSTR(*np)->s)) {//should not enclen_end()
+ if (len == enclen(env->enc, STR_(*np)->s)) {//should not enclen_end()
r = fetch_token(tok, src, end, env);
- NSTRING_CLEAR_RAW(*np);
+ NODE_STRING_CLEAR_RAW(*np);
goto string_end;
}
}
@@ -5072,9 +6324,9 @@ parse_exp(Node** np, OnigToken* tok, int term,
int rem;
if (len < ONIGENC_MBC_MINLEN(env->enc)) {
rem = ONIGENC_MBC_MINLEN(env->enc) - len;
- (void )node_str_head_pad(NSTR(*np), rem, (UChar )0);
- if (len + rem == enclen(env->enc, NSTR(*np)->s)) {
- NSTRING_CLEAR_RAW(*np);
+ (void )node_str_head_pad(STR_(*np), rem, (UChar )0);
+ if (len + rem == enclen(env->enc, STR_(*np)->s)) {
+ NODE_STRING_CLEAR_RAW(*np);
goto string_end;
}
}
@@ -5126,7 +6378,7 @@ parse_exp(Node** np, OnigToken* tok, int term,
{
switch (tok->u.prop.ctype) {
case ONIGENC_CTYPE_WORD:
- *np = node_new_ctype(tok->u.prop.ctype, tok->u.prop.not);
+ *np = node_new_ctype(tok->u.prop.ctype, tok->u.prop.not, env->options);
CHECK_NULL_RETURN_MEMERR(*np);
break;
@@ -5138,7 +6390,7 @@ parse_exp(Node** np, OnigToken* tok, int term,
*np = node_new_cclass();
CHECK_NULL_RETURN_MEMERR(*np);
- cc = NCCLASS(*np);
+ cc = CCLASS_(*np);
add_ctype_to_cc(cc, tok->u.prop.ctype, 0, env);
if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);
}
@@ -5163,8 +6415,8 @@ parse_exp(Node** np, OnigToken* tok, int term,
r = parse_char_class(np, tok, src, end, env);
if (r != 0) return r;
- cc = NCCLASS(*np);
- if (IS_IGNORECASE(env->option)) {
+ cc = CCLASS_(*np);
+ if (IS_IGNORECASE(env->options)) {
IApplyCaseFoldArg iarg;
iarg.env = env;
@@ -5200,7 +6452,7 @@ parse_exp(Node** np, OnigToken* tok, int term,
CHECK_NULL_RETURN_MEMERR(*np);
qn = node_new_quantifier(0, REPEAT_INFINITE, 0);
CHECK_NULL_RETURN_MEMERR(qn);
- NQTFR(qn)->target = *np;
+ NODE_BODY(qn) = *np;
*np = qn;
break;
@@ -5210,32 +6462,35 @@ parse_exp(Node** np, OnigToken* tok, int term,
(len > 1 ? tok->u.backref.refs : &(tok->u.backref.ref1)),
tok->u.backref.by_name,
#ifdef USE_BACKREF_WITH_LEVEL
- tok->u.backref.exist_level,
- tok->u.backref.level,
+ tok->u.backref.exist_level,
+ tok->u.backref.level,
#endif
- env);
+ env);
CHECK_NULL_RETURN_MEMERR(*np);
break;
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
case TK_CALL:
{
int gnum = tok->u.call.gnum;
- if (gnum < 0) {
- gnum = BACKREF_REL_TO_ABS(gnum, env);
- if (gnum <= 0)
- return ONIGERR_INVALID_BACKREF;
- }
- *np = node_new_call(tok->u.call.name, tok->u.call.name_end, gnum);
+ *np = node_new_call(tok->u.call.name, tok->u.call.name_end,
+ gnum, tok->u.call.by_number);
CHECK_NULL_RETURN_MEMERR(*np);
env->num_call++;
+ if (tok->u.call.by_number != 0 && gnum == 0) {
+ env->has_call_zero = 1;
+ }
}
break;
#endif
case TK_ANCHOR:
- *np = onig_node_new_anchor(tok->u.anchor);
+ {
+ int ascii_mode =
+ IS_WORD_ASCII(env->options) && IS_WORD_ANCHOR_TYPE(tok->u.anchor) ? 1 : 0;
+ *np = onig_node_new_anchor(tok->u.anchor, ascii_mode);
+ }
break;
case TK_OP_REPEAT:
@@ -5251,6 +6506,31 @@ parse_exp(Node** np, OnigToken* tok, int term,
}
break;
+ case TK_KEEP:
+ r = node_new_keep(np, env);
+ if (r < 0) return r;
+ break;
+
+ case TK_GENERAL_NEWLINE:
+ r = node_new_general_newline(np, env);
+ if (r < 0) return r;
+ break;
+
+ case TK_NO_NEWLINE:
+ r = node_new_no_newline(np, env);
+ if (r < 0) return r;
+ break;
+
+ case TK_TRUE_ANYCHAR:
+ r = node_new_true_anychar(np, env);
+ if (r < 0) return r;
+ break;
+
+ case TK_EXTENDED_GRAPHEME_CLUSTER:
+ r = make_extended_grapheme_cluster(np, env);
+ if (r < 0) return r;
+ break;
+
default:
return ONIGERR_PARSER_BUG;
break;
@@ -5271,7 +6551,7 @@ parse_exp(Node** np, OnigToken* tok, int term,
qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper,
(r == TK_INTERVAL ? 1 : 0));
CHECK_NULL_RETURN_MEMERR(qn);
- NQTFR(qn)->greedy = tok->u.repeat.greedy;
+ QUANT_(qn)->greedy = tok->u.repeat.greedy;
r = set_quantifier(qn, *targetp, group, env);
if (r < 0) {
onig_node_free(qn);
@@ -5280,12 +6560,12 @@ parse_exp(Node** np, OnigToken* tok, int term,
if (tok->u.repeat.possessive != 0) {
Node* en;
- en = node_new_enclose(ENCLOSE_STOP_BACKTRACK);
+ en = node_new_enclosure(ENCLOSURE_STOP_BACKTRACK);
if (IS_NULL(en)) {
onig_node_free(qn);
return ONIGERR_MEMORY;
}
- NENCLOSE(en)->target = qn;
+ NODE_BODY(en) = qn;
qn = en;
}
@@ -5303,12 +6583,12 @@ parse_exp(Node** np, OnigToken* tok, int term,
onig_node_free(qn);
return ONIGERR_MEMORY;
}
- tmp = NCDR(*targetp) = node_new_list(qn, NULL);
+ tmp = NODE_CDR(*targetp) = node_new_list(qn, NULL);
if (IS_NULL(tmp)) {
onig_node_free(qn);
return ONIGERR_MEMORY;
}
- targetp = &(NCAR(tmp));
+ targetp = &(NODE_CAR(tmp));
}
goto re_entry;
}
@@ -5318,8 +6598,8 @@ parse_exp(Node** np, OnigToken* tok, int term,
}
static int
-parse_branch(Node** top, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env)
+parse_branch(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
+ ScanEnv* env)
{
int r;
Node *node, **headp;
@@ -5336,7 +6616,7 @@ parse_branch(Node** top, OnigToken* tok, int term,
}
else {
*top = node_new_list(node, NULL);
- headp = &(NCDR(*top));
+ headp = &(NODE_CDR(*top));
while (r != TK_EOT && r != term && r != TK_ALT) {
r = parse_exp(&node, tok, term, src, end, env);
if (r < 0) {
@@ -5344,14 +6624,14 @@ parse_branch(Node** top, OnigToken* tok, int term,
return r;
}
- if (NTYPE(node) == NT_LIST) {
+ if (NODE_TYPE(node) == NODE_LIST) {
*headp = node;
- while (IS_NOT_NULL(NCDR(node))) node = NCDR(node);
- headp = &(NCDR(node));
+ while (IS_NOT_NULL(NODE_CDR(node))) node = NODE_CDR(node);
+ headp = &(NODE_CDR(node));
}
else {
*headp = node_new_list(node, NULL);
- headp = &(NCDR(*headp));
+ headp = &(NODE_CDR(*headp));
}
}
}
@@ -5361,8 +6641,8 @@ parse_branch(Node** top, OnigToken* tok, int term,
/* term_tok: TK_EOT or TK_SUBEXP_CLOSE */
static int
-parse_subexp(Node** top, OnigToken* tok, int term,
- UChar** src, UChar* end, ScanEnv* env)
+parse_subexp(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
+ ScanEnv* env)
{
int r;
Node *node, **headp;
@@ -5382,7 +6662,7 @@ parse_subexp(Node** top, OnigToken* tok, int term,
}
else if (r == TK_ALT) {
*top = onig_node_new_alt(node, NULL);
- headp = &(NCDR(*top));
+ headp = &(NODE_CDR(*top));
while (r == TK_ALT) {
r = fetch_token(tok, src, end, env);
if (r < 0) return r;
@@ -5392,7 +6672,7 @@ parse_subexp(Node** top, OnigToken* tok, int term,
return r;
}
*headp = onig_node_new_alt(node, NULL);
- headp = &(NCDR(*headp));
+ headp = &(NODE_CDR(*headp));
}
if (tok->type != (enum TokenSyms )term)
@@ -5421,22 +6701,43 @@ parse_regexp(Node** top, UChar** src, UChar* end, ScanEnv* env)
if (r < 0) return r;
r = parse_subexp(top, &tok, TK_EOT, src, end, env);
if (r < 0) return r;
+
+ return 0;
+}
+
+#ifdef USE_CALL
+static int
+make_call_zero_body(Node* node, ScanEnv* env, Node** rnode)
+{
+ int r;
+
+ Node* x = node_new_memory(0 /* 0: is not named */);
+ CHECK_NULL_RETURN_MEMERR(x);
+
+ NODE_BODY(x) = node;
+ ENCLOSURE_(x)->m.regnum = 0;
+ r = scan_env_set_mem_node(env, 0, x);
+ if (r != 0) {
+ onig_node_free(x);
+ return r;
+ }
+
+ *rnode = x;
return 0;
}
+#endif
extern int
-onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end,
- regex_t* reg, ScanEnv* env)
+onig_parse_tree(Node** root, const UChar* pattern, const UChar* end,
+ regex_t* reg, ScanEnv* env)
{
int r;
UChar* p;
-#ifdef USE_NAMED_GROUP
names_clear(reg);
-#endif
scan_env_clear(env);
- env->option = reg->options;
+ env->options = reg->options;
env->case_fold_flag = reg->case_fold_flag;
env->enc = reg->enc;
env->syntax = reg->syntax;
@@ -5451,13 +6752,26 @@ onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end,
p = (UChar* )pattern;
r = parse_regexp(root, &p, (UChar* )end, env);
+
+#ifdef USE_CALL
+ if (r != 0) return r;
+
+ if (env->has_call_zero != 0) {
+ Node* zero_node;
+ r = make_call_zero_body(*root, env, &zero_node);
+ if (r != 0) return r;
+
+ *root = zero_node;
+ }
+#endif
+
reg->num_mem = env->num_mem;
return r;
}
extern void
onig_scan_env_set_error_string(ScanEnv* env, int ecode ARG_UNUSED,
- UChar* arg, UChar* arg_end)
+ UChar* arg, UChar* arg_end)
{
env->error = arg;
env->error_end = arg_end;
diff --git a/ext/mbstring/oniguruma/src/regparse.h b/ext/mbstring/oniguruma/src/regparse.h
index c9d1fe8a6e..a07e187487 100644
--- a/ext/mbstring/oniguruma/src/regparse.h
+++ b/ext/mbstring/oniguruma/src/regparse.h
@@ -4,7 +4,7 @@
regparse.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,172 +32,233 @@
#include "regint.h"
/* node type */
-#define NT_STR 0
-#define NT_CCLASS 1
-#define NT_CTYPE 2
-#define NT_CANY 3
-#define NT_BREF 4
-#define NT_QTFR 5
-#define NT_ENCLOSE 6
-#define NT_ANCHOR 7
-#define NT_LIST 8
-#define NT_ALT 9
-#define NT_CALL 10
+typedef enum {
+ NODE_STRING = 0,
+ NODE_CCLASS = 1,
+ NODE_CTYPE = 2,
+ NODE_BACKREF = 3,
+ NODE_QUANT = 4,
+ NODE_ENCLOSURE = 5,
+ NODE_ANCHOR = 6,
+ NODE_LIST = 7,
+ NODE_ALT = 8,
+ NODE_CALL = 9,
+ NODE_GIMMICK = 10
+} NodeType;
+
+enum GimmickType {
+ GIMMICK_FAIL = 0,
+ GIMMICK_KEEP = 1,
+ GIMMICK_SAVE = 2,
+ GIMMICK_UPDATE_VAR = 3,
+};
/* node type bit */
-#define NTYPE2BIT(type) (1<<(type))
-
-#define BIT_NT_STR NTYPE2BIT(NT_STR)
-#define BIT_NT_CCLASS NTYPE2BIT(NT_CCLASS)
-#define BIT_NT_CTYPE NTYPE2BIT(NT_CTYPE)
-#define BIT_NT_CANY NTYPE2BIT(NT_CANY)
-#define BIT_NT_BREF NTYPE2BIT(NT_BREF)
-#define BIT_NT_QTFR NTYPE2BIT(NT_QTFR)
-#define BIT_NT_ENCLOSE NTYPE2BIT(NT_ENCLOSE)
-#define BIT_NT_ANCHOR NTYPE2BIT(NT_ANCHOR)
-#define BIT_NT_LIST NTYPE2BIT(NT_LIST)
-#define BIT_NT_ALT NTYPE2BIT(NT_ALT)
-#define BIT_NT_CALL NTYPE2BIT(NT_CALL)
-
-#define IS_NODE_TYPE_SIMPLE(type) \
- ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
- BIT_NT_CANY | BIT_NT_BREF)) != 0)
-
-#define NTYPE(node) ((node)->u.base.type)
-#define SET_NTYPE(node, ntype) (node)->u.base.type = (ntype)
-
-#define NSTR(node) (&((node)->u.str))
-#define NCCLASS(node) (&((node)->u.cclass))
-#define NCTYPE(node) (&((node)->u.ctype))
-#define NBREF(node) (&((node)->u.bref))
-#define NQTFR(node) (&((node)->u.qtfr))
-#define NENCLOSE(node) (&((node)->u.enclose))
-#define NANCHOR(node) (&((node)->u.anchor))
-#define NCONS(node) (&((node)->u.cons))
-#define NCALL(node) (&((node)->u.call))
-
-#define NCAR(node) (NCONS(node)->car)
-#define NCDR(node) (NCONS(node)->cdr)
-
+#define NODE_TYPE2BIT(type) (1<<(type))
+
+#define BIT_NODE_STRING NODE_TYPE2BIT(NODE_STRING)
+#define BIT_NODE_CCLASS NODE_TYPE2BIT(NODE_CCLASS)
+#define BIT_NODE_CTYPE NODE_TYPE2BIT(NODE_CTYPE)
+#define BIT_NODE_BACKREF NODE_TYPE2BIT(NODE_BACKREF)
+#define BIT_NODE_QUANT NODE_TYPE2BIT(NODE_QUANT)
+#define BIT_NODE_ENCLOSURE NODE_TYPE2BIT(NODE_ENCLOSURE)
+#define BIT_NODE_ANCHOR NODE_TYPE2BIT(NODE_ANCHOR)
+#define BIT_NODE_LIST NODE_TYPE2BIT(NODE_LIST)
+#define BIT_NODE_ALT NODE_TYPE2BIT(NODE_ALT)
+#define BIT_NODE_CALL NODE_TYPE2BIT(NODE_CALL)
+#define BIT_NODE_GIMMICK NODE_TYPE2BIT(NODE_GIMMICK)
+
+#define NODE_IS_SIMPLE_TYPE(node) \
+ ((NODE_TYPE2BIT(NODE_TYPE(node)) & \
+ (BIT_NODE_STRING | BIT_NODE_CCLASS | BIT_NODE_CTYPE | BIT_NODE_BACKREF)) != 0)
+
+#define NODE_TYPE(node) ((node)->u.base.node_type)
+#define NODE_SET_TYPE(node, ntype) (node)->u.base.node_type = (ntype)
+
+#define STR_(node) (&((node)->u.str))
+#define CCLASS_(node) (&((node)->u.cclass))
+#define CTYPE_(node) (&((node)->u.ctype))
+#define BACKREF_(node) (&((node)->u.backref))
+#define QUANT_(node) (&((node)->u.quant))
+#define ENCLOSURE_(node) (&((node)->u.enclosure))
+#define ANCHOR_(node) (&((node)->u.anchor))
+#define CONS_(node) (&((node)->u.cons))
+#define CALL_(node) (&((node)->u.call))
+#define GIMMICK_(node) (&((node)->u.gimmick))
+
+#define NODE_CAR(node) (CONS_(node)->car)
+#define NODE_CDR(node) (CONS_(node)->cdr)
+
+#define CTYPE_ANYCHAR -1
+#define NODE_IS_ANYCHAR(node) \
+ (NODE_TYPE(node) == NODE_CTYPE && CTYPE_(node)->ctype == CTYPE_ANYCHAR)
+
+#define CTYPE_OPTION(node, reg) \
+ (NODE_IS_FIXED_OPTION(node) ? CTYPE_(node)->options : reg->options)
#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)
#define ANCHOR_END_BUF_MASK (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)
-#define ENCLOSE_MEMORY (1<<0)
-#define ENCLOSE_OPTION (1<<1)
-#define ENCLOSE_STOP_BACKTRACK (1<<2)
+enum EnclosureType {
+ ENCLOSURE_MEMORY = 0,
+ ENCLOSURE_OPTION = 1,
+ ENCLOSURE_STOP_BACKTRACK = 2,
+ ENCLOSURE_IF_ELSE = 3,
+};
-#define NODE_STR_MARGIN 16
-#define NODE_STR_BUF_SIZE 24 /* sizeof(CClassNode) - sizeof(int)*4 */
+#define NODE_STRING_MARGIN 16
+#define NODE_STRING_BUF_SIZE 24 /* sizeof(CClassNode) - sizeof(int)*4 */
#define NODE_BACKREFS_SIZE 6
-#define NSTR_RAW (1<<0) /* by backslashed number */
-#define NSTR_AMBIG (1<<1)
-#define NSTR_DONT_GET_OPT_INFO (1<<2)
-
-#define NSTRING_LEN(node) ((node)->u.str.end - (node)->u.str.s)
-#define NSTRING_SET_RAW(node) (node)->u.str.flag |= NSTR_RAW
-#define NSTRING_CLEAR_RAW(node) (node)->u.str.flag &= ~NSTR_RAW
-#define NSTRING_SET_AMBIG(node) (node)->u.str.flag |= NSTR_AMBIG
-#define NSTRING_SET_DONT_GET_OPT_INFO(node) \
- (node)->u.str.flag |= NSTR_DONT_GET_OPT_INFO
-#define NSTRING_IS_RAW(node) (((node)->u.str.flag & NSTR_RAW) != 0)
-#define NSTRING_IS_AMBIG(node) (((node)->u.str.flag & NSTR_AMBIG) != 0)
-#define NSTRING_IS_DONT_GET_OPT_INFO(node) \
- (((node)->u.str.flag & NSTR_DONT_GET_OPT_INFO) != 0)
+#define STRING_RAW (1<<0) /* by backslashed number */
+#define STRING_AMBIG (1<<1)
+#define STRING_DONT_GET_OPT_INFO (1<<2)
+
+#define NODE_STRING_LEN(node) (int )((node)->u.str.end - (node)->u.str.s)
+#define NODE_STRING_SET_RAW(node) (node)->u.str.flag |= STRING_RAW
+#define NODE_STRING_CLEAR_RAW(node) (node)->u.str.flag &= ~STRING_RAW
+#define NODE_STRING_SET_AMBIG(node) (node)->u.str.flag |= STRING_AMBIG
+#define NODE_STRING_SET_DONT_GET_OPT_INFO(node) \
+ (node)->u.str.flag |= STRING_DONT_GET_OPT_INFO
+#define NODE_STRING_IS_RAW(node) (((node)->u.str.flag & STRING_RAW) != 0)
+#define NODE_STRING_IS_AMBIG(node) (((node)->u.str.flag & STRING_AMBIG) != 0)
+#define NODE_STRING_IS_DONT_GET_OPT_INFO(node) \
+ (((node)->u.str.flag & STRING_DONT_GET_OPT_INFO) != 0)
#define BACKREFS_P(br) \
- (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);
+ (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static)
-#define NQ_TARGET_ISNOT_EMPTY 0
-#define NQ_TARGET_IS_EMPTY 1
-#define NQ_TARGET_IS_EMPTY_MEM 2
-#define NQ_TARGET_IS_EMPTY_REC 3
+enum QuantBodyEmpty {
+ QUANT_BODY_IS_NOT_EMPTY = 0,
+ QUANT_BODY_IS_EMPTY = 1,
+ QUANT_BODY_IS_EMPTY_MEM = 2,
+ QUANT_BODY_IS_EMPTY_REC = 3
+};
-/* status bits */
+/* node status bits */
#define NST_MIN_FIXED (1<<0)
#define NST_MAX_FIXED (1<<1)
#define NST_CLEN_FIXED (1<<2)
#define NST_MARK1 (1<<3)
#define NST_MARK2 (1<<4)
-#define NST_MEM_BACKREFED (1<<5)
-#define NST_STOP_BT_SIMPLE_REPEAT (1<<6)
-#define NST_RECURSION (1<<7)
-#define NST_CALLED (1<<8)
-#define NST_ADDR_FIXED (1<<9)
-#define NST_NAMED_GROUP (1<<10)
-#define NST_NAME_REF (1<<11)
-#define NST_IN_REPEAT (1<<12) /* STK_REPEAT is nested in stack. */
+#define NST_STOP_BT_SIMPLE_REPEAT (1<<5)
+#define NST_RECURSION (1<<6)
+#define NST_CALLED (1<<7)
+#define NST_ADDR_FIXED (1<<8)
+#define NST_NAMED_GROUP (1<<9)
+#define NST_IN_REAL_REPEAT (1<<10) /* STK_REPEAT is nested in stack. */
+#define NST_IN_ZERO_REPEAT (1<<11) /* (....){0} */
+#define NST_IN_MULTI_ENTRY (1<<12)
#define NST_NEST_LEVEL (1<<13)
#define NST_BY_NUMBER (1<<14) /* {n,m} */
+#define NST_BY_NAME (1<<15) /* backref by name */
+#define NST_BACKREF (1<<16)
+#define NST_CHECKER (1<<17)
+#define NST_FIXED_OPTION (1<<18)
+#define NST_PROHIBIT_RECURSION (1<<19)
+#define NST_SUPER (1<<20)
+
+
+#define NODE_STATUS(node) (((Node* )node)->u.base.status)
+#define NODE_STATUS_ADD(node,f) (NODE_STATUS(node) |= (f))
+#define NODE_STATUS_REMOVE(node,f) (NODE_STATUS(node) &= ~(f))
+
+#define NODE_IS_BY_NUMBER(node) ((NODE_STATUS(node) & NST_BY_NUMBER) != 0)
+#define NODE_IS_IN_REAL_REPEAT(node) ((NODE_STATUS(node) & NST_IN_REAL_REPEAT) != 0)
+#define NODE_IS_CALLED(node) ((NODE_STATUS(node) & NST_CALLED) != 0)
+#define NODE_IS_IN_MULTI_ENTRY(node) ((NODE_STATUS(node) & NST_IN_MULTI_ENTRY) != 0)
+#define NODE_IS_RECURSION(node) ((NODE_STATUS(node) & NST_RECURSION) != 0)
+#define NODE_IS_IN_ZERO_REPEAT(node) ((NODE_STATUS(node) & NST_IN_ZERO_REPEAT) != 0)
+#define NODE_IS_NAMED_GROUP(node) ((NODE_STATUS(node) & NST_NAMED_GROUP) != 0)
+#define NODE_IS_ADDR_FIXED(node) ((NODE_STATUS(node) & NST_ADDR_FIXED) != 0)
+#define NODE_IS_CLEN_FIXED(node) ((NODE_STATUS(node) & NST_CLEN_FIXED) != 0)
+#define NODE_IS_MIN_FIXED(node) ((NODE_STATUS(node) & NST_MIN_FIXED) != 0)
+#define NODE_IS_MAX_FIXED(node) ((NODE_STATUS(node) & NST_MAX_FIXED) != 0)
+#define NODE_IS_MARK1(node) ((NODE_STATUS(node) & NST_MARK1) != 0)
+#define NODE_IS_MARK2(node) ((NODE_STATUS(node) & NST_MARK2) != 0)
+#define NODE_IS_NEST_LEVEL(node) ((NODE_STATUS(node) & NST_NEST_LEVEL) != 0)
+#define NODE_IS_BY_NAME(node) ((NODE_STATUS(node) & NST_BY_NAME) != 0)
+#define NODE_IS_BACKREF(node) ((NODE_STATUS(node) & NST_BACKREF) != 0)
+#define NODE_IS_CHECKER(node) ((NODE_STATUS(node) & NST_CHECKER) != 0)
+#define NODE_IS_FIXED_OPTION(node) ((NODE_STATUS(node) & NST_FIXED_OPTION) != 0)
+#define NODE_IS_SUPER(node) ((NODE_STATUS(node) & NST_SUPER) != 0)
+#define NODE_IS_PROHIBIT_RECURSION(node) \
+ ((NODE_STATUS(node) & NST_PROHIBIT_RECURSION) != 0)
+#define NODE_IS_STOP_BT_SIMPLE_REPEAT(node) \
+ ((NODE_STATUS(node) & NST_STOP_BT_SIMPLE_REPEAT) != 0)
+
+#define NODE_BODY(node) ((node)->u.base.body)
+#define NODE_QUANT_BODY(node) ((node)->body)
+#define NODE_ENCLOSURE_BODY(node) ((node)->body)
+#define NODE_CALL_BODY(node) ((node)->body)
+#define NODE_ANCHOR_BODY(node) ((node)->body)
-#define SET_ENCLOSE_STATUS(node,f) (node)->u.enclose.state |= (f)
-#define CLEAR_ENCLOSE_STATUS(node,f) (node)->u.enclose.state &= ~(f)
-
-#define IS_ENCLOSE_CALLED(en) (((en)->state & NST_CALLED) != 0)
-#define IS_ENCLOSE_ADDR_FIXED(en) (((en)->state & NST_ADDR_FIXED) != 0)
-#define IS_ENCLOSE_RECURSION(en) (((en)->state & NST_RECURSION) != 0)
-#define IS_ENCLOSE_MARK1(en) (((en)->state & NST_MARK1) != 0)
-#define IS_ENCLOSE_MARK2(en) (((en)->state & NST_MARK2) != 0)
-#define IS_ENCLOSE_MIN_FIXED(en) (((en)->state & NST_MIN_FIXED) != 0)
-#define IS_ENCLOSE_MAX_FIXED(en) (((en)->state & NST_MAX_FIXED) != 0)
-#define IS_ENCLOSE_CLEN_FIXED(en) (((en)->state & NST_CLEN_FIXED) != 0)
-#define IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(en) \
- (((en)->state & NST_STOP_BT_SIMPLE_REPEAT) != 0)
-#define IS_ENCLOSE_NAMED_GROUP(en) (((en)->state & NST_NAMED_GROUP) != 0)
-
-#define SET_CALL_RECURSION(node) (node)->u.call.state |= NST_RECURSION
-#define IS_CALL_RECURSION(cn) (((cn)->state & NST_RECURSION) != 0)
-#define IS_CALL_NAME_REF(cn) (((cn)->state & NST_NAME_REF) != 0)
-#define IS_BACKREF_NAME_REF(bn) (((bn)->state & NST_NAME_REF) != 0)
-#define IS_BACKREF_NEST_LEVEL(bn) (((bn)->state & NST_NEST_LEVEL) != 0)
-#define IS_QUANTIFIER_IN_REPEAT(qn) (((qn)->state & NST_IN_REPEAT) != 0)
-#define IS_QUANTIFIER_BY_NUMBER(qn) (((qn)->state & NST_BY_NUMBER) != 0)
-
-#define CALLNODE_REFNUM_UNDEF -1
typedef struct {
- NodeBase base;
+ NodeType node_type;
+ int status;
+
UChar* s;
UChar* end;
unsigned int flag;
int capa; /* (allocated size - 1) or 0: use buf[] */
- UChar buf[NODE_STR_BUF_SIZE];
+ UChar buf[NODE_STRING_BUF_SIZE];
} StrNode;
typedef struct {
- NodeBase base;
- int state;
- struct _Node* target;
+ NodeType node_type;
+ int status;
+
+ unsigned int flags;
+ BitSet bs;
+ BBuf* mbuf; /* multi-byte info or NULL */
+} CClassNode;
+
+typedef struct {
+ NodeType node_type;
+ int status;
+ struct _Node* body;
+
int lower;
int upper;
int greedy;
- int target_empty_info;
+ enum QuantBodyEmpty body_empty_info;
struct _Node* head_exact;
struct _Node* next_head_exact;
int is_refered; /* include called node. don't eliminate even if {0} */
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- int comb_exp_check_num; /* 1,2,3...: check, 0: no check */
-#endif
-} QtfrNode;
+} QuantNode;
typedef struct {
- NodeBase base;
- int state;
- int type;
- int regnum;
- OnigOptionType option;
- struct _Node* target;
- AbsAddrType call_addr;
+ NodeType node_type;
+ int status;
+ struct _Node* body;
+
+ enum EnclosureType type;
+ union {
+ struct {
+ int regnum;
+ AbsAddrType called_addr;
+ int entry_count;
+ int called_state;
+ } m;
+ struct {
+ OnigOptionType options;
+ } o;
+ struct {
+ /* body is condition */
+ struct _Node* Then;
+ struct _Node* Else;
+ } te;
+ };
/* for multiple call reference */
- OnigLen min_len; /* min length (byte) */
- OnigLen max_len; /* max length (byte) */
- int char_len; /* character length */
- int opt_count; /* referenced count in optimize_node_left() */
-} EncloseNode;
+ OnigLen min_len; /* min length (byte) */
+ OnigLen max_len; /* max length (byte) */
+ int char_len; /* character length */
+ int opt_count; /* referenced count in optimize_nodes() */
+} EnclosureNode;
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
typedef struct {
int offset;
@@ -211,102 +272,139 @@ typedef struct {
} UnsetAddrList;
typedef struct {
- NodeBase base;
- int state;
+ NodeType node_type;
+ int status;
+ struct _Node* body; /* to EnclosureNode : ENCLOSURE_MEMORY */
+
+ int by_number;
int group_num;
UChar* name;
UChar* name_end;
- struct _Node* target; /* EncloseNode : ENCLOSE_MEMORY */
- UnsetAddrList* unset_addr_list;
+ int entry_count;
} CallNode;
#endif
typedef struct {
- NodeBase base;
- int state;
+ NodeType node_type;
+ int status;
+
int back_num;
int back_static[NODE_BACKREFS_SIZE];
int* back_dynamic;
int nest_level;
-} BRefNode;
+} BackRefNode;
typedef struct {
- NodeBase base;
+ NodeType node_type;
+ int status;
+ struct _Node* body;
+
int type;
- struct _Node* target;
int char_len;
+ int ascii_mode;
} AnchorNode;
typedef struct {
- NodeBase base;
+ NodeType node_type;
+ int status;
+
struct _Node* car;
struct _Node* cdr;
} ConsAltNode;
typedef struct {
- NodeBase base;
+ NodeType node_type;
+ int status;
+
int ctype;
int not;
+ OnigOptionType options;
+ int ascii_mode;
} CtypeNode;
+typedef struct {
+ NodeType node_type;
+ int status;
+
+ enum GimmickType type;
+ int detail_type;
+ int id;
+} GimmickNode;
+
typedef struct _Node {
union {
- NodeBase base;
- StrNode str;
- CClassNode cclass;
- QtfrNode qtfr;
- EncloseNode enclose;
- BRefNode bref;
- AnchorNode anchor;
- ConsAltNode cons;
- CtypeNode ctype;
-#ifdef USE_SUBEXP_CALL
- CallNode call;
+ struct {
+ NodeType node_type;
+ int status;
+ struct _Node* body;
+ } base;
+
+ StrNode str;
+ CClassNode cclass;
+ QuantNode quant;
+ EnclosureNode enclosure;
+ BackRefNode backref;
+ AnchorNode anchor;
+ ConsAltNode cons;
+ CtypeNode ctype;
+#ifdef USE_CALL
+ CallNode call;
#endif
+ GimmickNode gimmick;
} u;
} Node;
#define NULL_NODE ((Node* )0)
-#define SCANENV_MEMNODES_SIZE 8
-#define SCANENV_MEM_NODES(senv) \
- (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \
- (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)
+#define SCANENV_MEMENV_SIZE 8
+#define SCANENV_MEMENV(senv) \
+ (IS_NOT_NULL((senv)->mem_env_dynamic) ? \
+ (senv)->mem_env_dynamic : (senv)->mem_env_static)
+
+typedef struct {
+ Node* node;
+#if 0
+ int in;
+ int recursion;
+#endif
+} MemEnv;
+
+typedef struct {
+ enum SaveType type;
+} SaveItem;
typedef struct {
- OnigOptionType option;
+ OnigOptionType options;
OnigCaseFoldType case_fold_flag;
OnigEncoding enc;
OnigSyntaxType* syntax;
- BitStatusType capture_history;
- BitStatusType bt_mem_start;
- BitStatusType bt_mem_end;
- BitStatusType backrefed_mem;
+ MemStatusType capture_history;
+ MemStatusType bt_mem_start;
+ MemStatusType bt_mem_end;
+ MemStatusType backrefed_mem;
UChar* pattern;
UChar* pattern_end;
UChar* error;
UChar* error_end;
regex_t* reg; /* for reg->names only */
int num_call;
-#ifdef USE_SUBEXP_CALL
+#ifdef USE_CALL
UnsetAddrList* unset_addr_list;
+ int has_call_zero;
#endif
int num_mem;
-#ifdef USE_NAMED_GROUP
int num_named;
-#endif
int mem_alloc;
- Node* mem_nodes_static[SCANENV_MEMNODES_SIZE];
- Node** mem_nodes_dynamic;
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
- int num_comb_exp_check;
- int comb_exp_max_regnum;
- int curr_max_regnum;
- int has_recursion;
-#endif
- unsigned int parse_depth;
+ MemEnv mem_env_static[SCANENV_MEMENV_SIZE];
+ MemEnv* mem_env_dynamic;
+ unsigned int parse_depth;
+
+ int keep_num;
+ int save_num;
+ int save_alloc_num;
+ SaveItem* saves;
} ScanEnv;
@@ -314,13 +412,11 @@ typedef struct {
#define IS_SYNTAX_OP2(syn, opm) (((syn)->op2 & (opm)) != 0)
#define IS_SYNTAX_BV(syn, bvm) (((syn)->behavior & (bvm)) != 0)
-#ifdef USE_NAMED_GROUP
typedef struct {
int new_val;
} GroupNumRemap;
extern int onig_renumber_name_table P_((regex_t* reg, GroupNumRemap* map));
-#endif
extern int onig_strncmp P_((const UChar* s1, const UChar* s2, int n));
extern void onig_strcpy P_((UChar* dest, const UChar* src, const UChar* end));
@@ -331,21 +427,21 @@ extern void onig_node_conv_to_str_node P_((Node* node, int raw));
extern int onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end));
extern int onig_node_str_set P_((Node* node, const UChar* s, const UChar* end));
extern void onig_node_free P_((Node* node));
-extern Node* onig_node_new_enclose P_((int type));
-extern Node* onig_node_new_anchor P_((int type));
+extern Node* onig_node_new_enclosure P_((int type));
+extern Node* onig_node_new_anchor P_((int type, int ascii_mode));
extern Node* onig_node_new_str P_((const UChar* s, const UChar* end));
extern Node* onig_node_new_list P_((Node* left, Node* right));
extern Node* onig_node_list_add P_((Node* list, Node* x));
extern Node* onig_node_new_alt P_((Node* left, Node* right));
extern void onig_node_str_clear P_((Node* node));
extern int onig_names_free P_((regex_t* reg));
-extern int onig_parse_make_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));
+extern int onig_parse_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));
extern int onig_free_shared_cclass_table P_((void));
+extern int onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));
+extern OnigLen onig_get_tiny_min_len(Node* node, unsigned int inhibit_node_types, int* invalid_node);
#ifdef ONIG_DEBUG
-#ifdef USE_NAMED_GROUP
extern int onig_print_names(FILE*, regex_t*);
#endif
-#endif
#endif /* REGPARSE_H */
diff --git a/ext/mbstring/oniguruma/src/regposix.c b/ext/mbstring/oniguruma/src/regposix.c
index bbe52dc0f1..608c031c1f 100644
--- a/ext/mbstring/oniguruma/src/regposix.c
+++ b/ext/mbstring/oniguruma/src/regposix.c
@@ -2,7 +2,7 @@
regposix.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -40,7 +40,7 @@
if (ONIGENC_MBC_MINLEN(enc) == 1) { \
UChar* tmps = (UChar* )(s); \
while (*tmps != 0) tmps++; \
- len = tmps - (UChar* )(s); \
+ len = (int )(tmps - (UChar* )(s));\
} \
else { \
len = onigenc_str_bytelen_null(enc, (UChar* )s); \
@@ -60,6 +60,7 @@ onig2posix_error_code(int code)
{ ONIG_NO_SUPPORT_CONFIG, REG_EONIG_INTERNAL },
{ ONIGERR_MEMORY, REG_ESPACE },
{ ONIGERR_MATCH_STACK_LIMIT_OVER, REG_EONIG_INTERNAL },
+ { ONIGERR_TRY_IN_MATCH_LIMIT_OVER, REG_EONIG_INTERNAL },
{ ONIGERR_TYPE_BUG, REG_EONIG_INTERNAL },
{ ONIGERR_PARSER_BUG, REG_EONIG_INTERNAL },
{ ONIGERR_STACK_BUG, REG_EONIG_INTERNAL },
@@ -114,6 +115,9 @@ onig2posix_error_code(int code)
{ ONIGERR_NEVER_ENDING_RECURSION, REG_BADPAT },
{ ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY, REG_BADPAT },
{ ONIGERR_INVALID_CHAR_PROPERTY_NAME, REG_BADPAT },
+ { ONIGERR_INVALID_IF_ELSE_SYNTAX, REG_BADPAT },
+ { ONIGERR_INVALID_ABSENT_GROUP_PATTERN, REG_BADPAT },
+ { ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN, REG_BADPAT },
{ ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION, REG_EONIG_BADARG },
{ ONIGERR_LIBRARY_IS_NOT_INITIALIZED, REG_EONIG_INTERNAL }
};
diff --git a/ext/mbstring/oniguruma/src/regsyntax.c b/ext/mbstring/oniguruma/src/regsyntax.c
index 0a4d1da375..3817d38823 100644
--- a/ext/mbstring/oniguruma/src/regsyntax.c
+++ b/ext/mbstring/oniguruma/src/regsyntax.c
@@ -2,7 +2,7 @@
regsyntax.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -67,8 +67,8 @@ OnigSyntaxType OnigSyntaxPosixExtended = {
ONIG_SYN_OP_BRACE_INTERVAL |
ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT )
, 0
- , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS |
- ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS |
+ , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS |
+ ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS |
ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP |
ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )
, ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )
@@ -174,8 +174,14 @@ OnigSyntaxType OnigSyntaxPerl = {
& ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
, ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
+ ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
+ ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
+ ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
- ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT )
+ ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
+ ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
+ ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
+ ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT )
, SYN_GNU_REGEX_BV
, ONIG_OPTION_SINGLELINE
,
@@ -199,11 +205,18 @@ OnigSyntaxType OnigSyntaxPerl_NG = {
& ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
, ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
+ ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
+ ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
+ ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP |
ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
- ONIG_SYN_OP2_ESC_G_SUBEXP_CALL )
+ ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |
+ ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
+ ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
+ ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT |
+ ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL )
, ( SYN_GNU_REGEX_BV |
ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME )
@@ -225,7 +238,7 @@ extern int
onig_set_default_syntax(OnigSyntaxType* syntax)
{
if (IS_NULL(syntax))
- syntax = ONIG_SYNTAX_RUBY;
+ syntax = ONIG_SYNTAX_ONIGURUMA;
OnigDefaultSyntax = syntax;
return 0;
diff --git a/ext/mbstring/oniguruma/src/regversion.c b/ext/mbstring/oniguruma/src/regversion.c
index 245a001b57..03754e7728 100644
--- a/ext/mbstring/oniguruma/src/regversion.c
+++ b/ext/mbstring/oniguruma/src/regversion.c
@@ -2,7 +2,7 @@
regversion.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2018 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -49,7 +49,7 @@ onig_copyright(void)
static char s[58];
xsnprintf(s, sizeof(s),
- "Oniguruma %d.%d.%d : Copyright (C) 2002-2016 K.Kosako",
+ "Oniguruma %d.%d.%d : Copyright (C) 2002-2018 K.Kosako",
ONIGURUMA_VERSION_MAJOR,
ONIGURUMA_VERSION_MINOR,
ONIGURUMA_VERSION_TEENY);
diff --git a/ext/mbstring/oniguruma/src/sjis.c b/ext/mbstring/oniguruma/src/sjis.c
index 153e7ca2e0..88b8d0299c 100644
--- a/ext/mbstring/oniguruma/src/sjis.c
+++ b/ext/mbstring/oniguruma/src/sjis.c
@@ -2,7 +2,7 @@
sjis.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -156,7 +156,7 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
if (enclen(ONIG_ENCODING_SJIS, buf) != (p - buf))
return REGERR_INVALID_CODE_POINT_VALUE;
#endif
- return p - buf;
+ return (int )(p - buf);
}
static int
@@ -188,7 +188,7 @@ is_mbc_ambiguous(OnigCaseFoldType flag,
const UChar** pp, const UChar* end)
{
return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_SJIS, flag, pp, end);
-
+
}
#endif
@@ -223,7 +223,7 @@ left_adjust_char_head(const UChar* start, const UChar* s)
p++;
break;
}
- }
+ }
}
len = enclen(ONIG_ENCODING_SJIS, p);
if (p + len > s) return (UChar* )p;
@@ -262,7 +262,7 @@ static int
property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)
{
struct PropertyNameCtype* pc;
- int len = end - p;
+ int len = (int )(end - p);
char q[32];
if (len < sizeof(q) - 1) {
diff --git a/ext/mbstring/oniguruma/src/st.c b/ext/mbstring/oniguruma/src/st.c
index d4fe867f9e..e5fd1a15d9 100644
--- a/ext/mbstring/oniguruma/src/st.c
+++ b/ext/mbstring/oniguruma/src/st.c
@@ -108,17 +108,16 @@ new_size(size)
#if 0
for (i=3; i<31; i++) {
- if ((1<<i) > size) return 1<<i;
+ if ((1<<i) > size) return 1<<i;
}
return -1;
#else
int newsize;
for (i = 0, newsize = MINSIZE;
- i < (int )(sizeof(primes)/sizeof(primes[0]));
- i++, newsize <<= 1)
- {
- if (newsize > size) return primes[i];
+ i < (int )(sizeof(primes)/sizeof(primes[0]));
+ i++, newsize <<= 1) {
+ if (newsize > size) return primes[i];
}
/* Ran out of polynomials */
return -1; /* should raise exception */
@@ -145,82 +144,82 @@ st_init_table_with_size(type, size)
struct st_hash_type *type;
int size;
{
- st_table *tbl;
+ st_table *tbl;
#ifdef HASH_LOG
- if (init_st == 0) {
- init_st = 1;
- atexit(stat_col);
- }
+ if (init_st == 0) {
+ init_st = 1;
+ atexit(stat_col);
+ }
#endif
- size = new_size(size); /* round up to prime number */
+ size = new_size(size); /* round up to prime number */
- tbl = alloc(st_table);
- if (tbl == 0) return 0;
+ tbl = alloc(st_table);
+ if (tbl == 0) return 0;
- tbl->type = type;
- tbl->num_entries = 0;
- tbl->num_bins = size;
- tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*));
- if (tbl->bins == 0) {
- free(tbl);
- return 0;
- }
+ tbl->type = type;
+ tbl->num_entries = 0;
+ tbl->num_bins = size;
+ tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*));
+ if (tbl->bins == 0) {
+ free(tbl);
+ return 0;
+ }
- return tbl;
+ return tbl;
}
st_table*
st_init_table(type)
struct st_hash_type *type;
{
- return st_init_table_with_size(type, 0);
+ return st_init_table_with_size(type, 0);
}
st_table*
st_init_numtable(void)
{
- return st_init_table(&type_numhash);
+ return st_init_table(&type_numhash);
}
st_table*
st_init_numtable_with_size(size)
int size;
{
- return st_init_table_with_size(&type_numhash, size);
+ return st_init_table_with_size(&type_numhash, size);
}
st_table*
st_init_strtable(void)
{
- return st_init_table(&type_strhash);
+ return st_init_table(&type_strhash);
}
st_table*
st_init_strtable_with_size(size)
int size;
{
- return st_init_table_with_size(&type_strhash, size);
+ return st_init_table_with_size(&type_strhash, size);
}
void
st_free_table(table)
st_table *table;
{
- register st_table_entry *ptr, *next;
- int i;
+ register st_table_entry *ptr, *next;
+ int i;
- for(i = 0; i < table->num_bins; i++) {
- ptr = table->bins[i];
- while (ptr != 0) {
+ for(i = 0; i < table->num_bins; i++) {
+ ptr = table->bins[i];
+ while (ptr != 0) {
next = ptr->next;
free(ptr);
ptr = next;
- }
}
- free(table->bins);
- free(table);
+ }
+ free(table->bins);
+ free(table);
}
#define PTR_NOT_EQUAL(table, ptr, hash_val, key) \
@@ -236,187 +235,186 @@ st_free_table(table)
bin_pos = hash_val%(table)->num_bins;\
ptr = (table)->bins[bin_pos];\
if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\
- COLLISION;\
- while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\
- ptr = ptr->next;\
- }\
- ptr = ptr->next;\
+ COLLISION;\
+ while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\
+ ptr = ptr->next;\
+ }\
+ ptr = ptr->next;\
}\
} while (0)
int
st_lookup(table, key, value)
- st_table *table;
- register st_data_t key;
- st_data_t *value;
+ st_table *table;
+ register st_data_t key;
+ st_data_t *value;
{
- unsigned int hash_val, bin_pos;
- register st_table_entry *ptr;
+ unsigned int hash_val, bin_pos;
+ register st_table_entry *ptr;
- hash_val = do_hash(key, table);
- FIND_ENTRY(table, ptr, hash_val, bin_pos);
+ hash_val = do_hash(key, table);
+ FIND_ENTRY(table, ptr, hash_val, bin_pos);
- if (ptr == 0) {
- return 0;
- }
- else {
- if (value != 0) *value = ptr->record;
- return 1;
- }
+ if (ptr == 0) {
+ return 0;
+ }
+ else {
+ if (value != 0) *value = ptr->record;
+ return 1;
+ }
}
-#define ADD_DIRECT(table, key, value, hash_val, bin_pos)\
+#define ADD_DIRECT(table, key, value, hash_val, bin_pos, ret) \
do {\
- st_table_entry *entry;\
- if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\
- rehash(table);\
- bin_pos = hash_val % table->num_bins;\
- }\
- \
- entry = alloc(st_table_entry);\
- \
- entry->hash = hash_val;\
- entry->key = key;\
- entry->record = value;\
- entry->next = table->bins[bin_pos];\
- table->bins[bin_pos] = entry;\
- table->num_entries++;\
+ st_table_entry *entry;\
+ if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\
+ rehash(table);\
+ bin_pos = hash_val % table->num_bins;\
+ }\
+ entry = alloc(st_table_entry);\
+ if (IS_NULL(entry)) return ret;\
+ entry->hash = hash_val;\
+ entry->key = key;\
+ entry->record = value;\
+ entry->next = table->bins[bin_pos];\
+ table->bins[bin_pos] = entry;\
+ table->num_entries++;\
} while (0)
int
st_insert(table, key, value)
- register st_table *table;
- register st_data_t key;
- st_data_t value;
+ register st_table *table;
+ register st_data_t key;
+ st_data_t value;
{
- unsigned int hash_val, bin_pos;
- register st_table_entry *ptr;
+ unsigned int hash_val, bin_pos;
+ register st_table_entry *ptr;
- hash_val = do_hash(key, table);
- FIND_ENTRY(table, ptr, hash_val, bin_pos);
+ hash_val = do_hash(key, table);
+ FIND_ENTRY(table, ptr, hash_val, bin_pos);
- if (ptr == 0) {
- ADD_DIRECT(table, key, value, hash_val, bin_pos);
- return 0;
- }
- else {
- ptr->record = value;
- return 1;
- }
+ if (ptr == 0) {
+ ADD_DIRECT(table, key, value, hash_val, bin_pos, ONIGERR_MEMORY);
+ return 0;
+ }
+ else {
+ ptr->record = value;
+ return 1;
+ }
}
void
st_add_direct(table, key, value)
- st_table *table;
- st_data_t key;
- st_data_t value;
+ st_table *table;
+ st_data_t key;
+ st_data_t value;
{
- unsigned int hash_val, bin_pos;
+ unsigned int hash_val, bin_pos;
- hash_val = do_hash(key, table);
- bin_pos = hash_val % table->num_bins;
- ADD_DIRECT(table, key, value, hash_val, bin_pos);
+ hash_val = do_hash(key, table);
+ bin_pos = hash_val % table->num_bins;
+ ADD_DIRECT(table, key, value, hash_val, bin_pos,);
}
static void
rehash(table)
- register st_table *table;
+ register st_table *table;
{
- register st_table_entry *ptr, *next, **new_bins;
- int i, old_num_bins = table->num_bins, new_num_bins;
- unsigned int hash_val;
-
- new_num_bins = new_size(old_num_bins+1);
- new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*));
- if (new_bins == 0) {
- return ;
- }
-
- for(i = 0; i < old_num_bins; i++) {
- ptr = table->bins[i];
- while (ptr != 0) {
+ register st_table_entry *ptr, *next, **new_bins;
+ int i, old_num_bins = table->num_bins, new_num_bins;
+ unsigned int hash_val;
+
+ new_num_bins = new_size(old_num_bins+1);
+ new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*));
+ if (new_bins == 0) {
+ return ;
+ }
+
+ for(i = 0; i < old_num_bins; i++) {
+ ptr = table->bins[i];
+ while (ptr != 0) {
next = ptr->next;
hash_val = ptr->hash % new_num_bins;
ptr->next = new_bins[hash_val];
new_bins[hash_val] = ptr;
ptr = next;
- }
}
- free(table->bins);
- table->num_bins = new_num_bins;
- table->bins = new_bins;
+ }
+ free(table->bins);
+ table->num_bins = new_num_bins;
+ table->bins = new_bins;
}
st_table*
st_copy(old_table)
- st_table *old_table;
+ st_table *old_table;
{
- st_table *new_table;
- st_table_entry *ptr, *entry;
- int i, num_bins = old_table->num_bins;
+ st_table *new_table;
+ st_table_entry *ptr, *entry;
+ int i, num_bins = old_table->num_bins;
- new_table = alloc(st_table);
- if (new_table == 0) {
- return 0;
- }
+ new_table = alloc(st_table);
+ if (new_table == 0) {
+ return 0;
+ }
- *new_table = *old_table;
- new_table->bins = (st_table_entry**)
- Calloc((unsigned)num_bins, sizeof(st_table_entry*));
+ *new_table = *old_table;
+ new_table->bins = (st_table_entry**)
+ Calloc((unsigned)num_bins, sizeof(st_table_entry*));
- if (new_table->bins == 0) {
- free(new_table);
- return 0;
- }
+ if (new_table->bins == 0) {
+ free(new_table);
+ return 0;
+ }
- for(i = 0; i < num_bins; i++) {
- new_table->bins[i] = 0;
- ptr = old_table->bins[i];
- while (ptr != 0) {
+ for(i = 0; i < num_bins; i++) {
+ new_table->bins[i] = 0;
+ ptr = old_table->bins[i];
+ while (ptr != 0) {
entry = alloc(st_table_entry);
if (entry == 0) {
- free(new_table->bins);
- free(new_table);
- return 0;
+ free(new_table->bins);
+ free(new_table);
+ return 0;
}
*entry = *ptr;
entry->next = new_table->bins[i];
new_table->bins[i] = entry;
ptr = ptr->next;
- }
}
- return new_table;
+ }
+ return new_table;
}
int
st_delete(table, key, value)
- register st_table *table;
- register st_data_t *key;
- st_data_t *value;
+ register st_table *table;
+ register st_data_t *key;
+ st_data_t *value;
{
- unsigned int hash_val;
- st_table_entry *tmp;
- register st_table_entry *ptr;
+ unsigned int hash_val;
+ st_table_entry *tmp;
+ register st_table_entry *ptr;
- hash_val = do_hash_bin(*key, table);
- ptr = table->bins[hash_val];
+ hash_val = do_hash_bin(*key, table);
+ ptr = table->bins[hash_val];
- if (ptr == 0) {
- if (value != 0) *value = 0;
- return 0;
- }
-
- if (EQUAL(table, *key, ptr->key)) {
- table->bins[hash_val] = ptr->next;
- table->num_entries--;
- if (value != 0) *value = ptr->record;
- *key = ptr->key;
- free(ptr);
- return 1;
- }
-
- for(; ptr->next != 0; ptr = ptr->next) {
- if (EQUAL(table, ptr->next->key, *key)) {
+ if (ptr == 0) {
+ if (value != 0) *value = 0;
+ return 0;
+ }
+
+ if (EQUAL(table, *key, ptr->key)) {
+ table->bins[hash_val] = ptr->next;
+ table->num_entries--;
+ if (value != 0) *value = ptr->record;
+ *key = ptr->key;
+ free(ptr);
+ return 1;
+ }
+
+ for(; ptr->next != 0; ptr = ptr->next) {
+ if (EQUAL(table, ptr->next->key, *key)) {
tmp = ptr->next;
ptr->next = ptr->next->next;
table->num_entries--;
@@ -424,41 +422,41 @@ st_delete(table, key, value)
*key = tmp->key;
free(tmp);
return 1;
- }
}
+ }
- return 0;
+ return 0;
}
int
st_delete_safe(table, key, value, never)
- register st_table *table;
- register st_data_t *key;
- st_data_t *value;
- st_data_t never;
+ register st_table *table;
+ register st_data_t *key;
+ st_data_t *value;
+ st_data_t never;
{
- unsigned int hash_val;
- register st_table_entry *ptr;
+ unsigned int hash_val;
+ register st_table_entry *ptr;
- hash_val = do_hash_bin(*key, table);
- ptr = table->bins[hash_val];
+ hash_val = do_hash_bin(*key, table);
+ ptr = table->bins[hash_val];
- if (ptr == 0) {
- if (value != 0) *value = 0;
- return 0;
- }
+ if (ptr == 0) {
+ if (value != 0) *value = 0;
+ return 0;
+ }
- for(; ptr != 0; ptr = ptr->next) {
- if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {
+ for(; ptr != 0; ptr = ptr->next) {
+ if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {
table->num_entries--;
*key = ptr->key;
if (value != 0) *value = ptr->record;
ptr->key = ptr->record = never;
return 1;
- }
}
+ }
- return 0;
+ return 0;
}
static int
@@ -476,114 +474,114 @@ delete_never(key, value, never)
void
st_cleanup_safe(table, never)
- st_table *table;
- st_data_t never;
+ st_table *table;
+ st_data_t never;
{
- int num_entries = table->num_entries;
+ int num_entries = table->num_entries;
- st_foreach(table, delete_never, never);
- table->num_entries = num_entries;
+ st_foreach(table, delete_never, never);
+ table->num_entries = num_entries;
}
int
st_foreach(table, func, arg)
- st_table *table;
- int (*func)();
- st_data_t arg;
+ st_table *table;
+ int (*func)();
+ st_data_t arg;
{
- st_table_entry *ptr, *last, *tmp;
- enum st_retval retval;
- int i;
+ st_table_entry *ptr, *last, *tmp;
+ enum st_retval retval;
+ int i;
- for(i = 0; i < table->num_bins; i++) {
- last = 0;
- for(ptr = table->bins[i]; ptr != 0;) {
+ for(i = 0; i < table->num_bins; i++) {
+ last = 0;
+ for(ptr = table->bins[i]; ptr != 0;) {
retval = (*func)(ptr->key, ptr->record, arg);
switch (retval) {
case ST_CHECK: /* check if hash is modified during iteration */
- tmp = 0;
- if (i < table->num_bins) {
- for (tmp = table->bins[i]; tmp; tmp=tmp->next) {
- if (tmp == ptr) break;
- }
- }
- if (!tmp) {
- /* call func with error notice */
- return 1;
- }
- /* fall through */
+ tmp = 0;
+ if (i < table->num_bins) {
+ for (tmp = table->bins[i]; tmp; tmp=tmp->next) {
+ if (tmp == ptr) break;
+ }
+ }
+ if (!tmp) {
+ /* call func with error notice */
+ return 1;
+ }
+ /* fall through */
case ST_CONTINUE:
- last = ptr;
- ptr = ptr->next;
- break;
+ last = ptr;
+ ptr = ptr->next;
+ break;
case ST_STOP:
- return 0;
+ return 0;
case ST_DELETE:
- tmp = ptr;
- if (last == 0) {
- table->bins[i] = ptr->next;
- }
- else {
- last->next = ptr->next;
- }
- ptr = ptr->next;
- free(tmp);
- table->num_entries--;
+ tmp = ptr;
+ if (last == 0) {
+ table->bins[i] = ptr->next;
+ }
+ else {
+ last->next = ptr->next;
+ }
+ ptr = ptr->next;
+ free(tmp);
+ table->num_entries--;
}
- }
}
- return 0;
+ }
+ return 0;
}
static int
strhash(string)
- register const char *string;
+ register const char *string;
{
- register int c;
+ register int c;
#ifdef HASH_ELFHASH
- register unsigned int h = 0, g;
+ register unsigned int h = 0, g;
- while ((c = *string++) != '\0') {
- h = ( h << 4 ) + c;
- if ( g = h & 0xF0000000 )
+ while ((c = *string++) != '\0') {
+ h = ( h << 4 ) + c;
+ if ( g = h & 0xF0000000 )
h ^= g >> 24;
- h &= ~g;
- }
- return h;
+ h &= ~g;
+ }
+ return h;
#elif HASH_PERL
- register int val = 0;
+ register int val = 0;
- while ((c = *string++) != '\0') {
- val += c;
- val += (val << 10);
- val ^= (val >> 6);
- }
- val += (val << 3);
- val ^= (val >> 11);
+ while ((c = *string++) != '\0') {
+ val += c;
+ val += (val << 10);
+ val ^= (val >> 6);
+ }
+ val += (val << 3);
+ val ^= (val >> 11);
- return val + (val << 15);
+ return val + (val << 15);
#else
- register int val = 0;
+ register int val = 0;
- while ((c = *string++) != '\0') {
- val = val*997 + c;
- }
+ while ((c = *string++) != '\0') {
+ val = val*997 + c;
+ }
- return val + (val>>5);
+ return val + (val>>5);
#endif
}
static int
numcmp(x, y)
- long x, y;
+ long x, y;
{
- return x != y;
+ return x != y;
}
static int
numhash(n)
- long n;
+ long n;
{
- return n;
+ return n;
}
diff --git a/ext/mbstring/oniguruma/src/unicode.c b/ext/mbstring/oniguruma/src/unicode.c
index 8812ca2fd0..e58593789e 100644
--- a/ext/mbstring/oniguruma/src/unicode.c
+++ b/ext/mbstring/oniguruma/src/unicode.c
@@ -2,7 +2,7 @@
unicode.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,6 +29,11 @@
#include "regint.h"
+struct PoolPropertyNameCtype {
+ short int name;
+ short int ctype;
+};
+
#define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code,ctype) \
((EncUNICODE_ISO_8859_1_CtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)
@@ -67,181 +72,10 @@ static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256] = {
0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2
};
-#ifdef USE_UNICODE_PROPERTIES
-#include "unicode_property_data.c"
-#else
-#include "unicode_property_data_posix.c"
-#endif
-
#include "st.h"
-#define USER_DEFINED_PROPERTY_MAX_NUM 20
-
-typedef struct {
- int ctype;
- OnigCodePoint* ranges;
-} UserDefinedPropertyValue;
-
-static int UserDefinedPropertyNum;
-static UserDefinedPropertyValue
-UserDefinedPropertyRanges[USER_DEFINED_PROPERTY_MAX_NUM];
-static st_table* UserDefinedPropertyTable;
-
-extern int
-onig_unicode_define_user_property(const char* name, OnigCodePoint* ranges)
-{
- UserDefinedPropertyValue* e;
- int i;
- int n;
- int len;
- int c;
- char* s;
-
- if (UserDefinedPropertyNum >= USER_DEFINED_PROPERTY_MAX_NUM)
- return ONIGERR_TOO_MANY_USER_DEFINED_OBJECTS;
-
- len = strlen(name);
- if (len >= PROPERTY_NAME_MAX_SIZE)
- return ONIGERR_TOO_LONG_PROPERTY_NAME;
-
- s = (char* )xmalloc(len + 1);
- if (s == 0)
- return ONIGERR_MEMORY;
-
- n = 0;
- for (i = 0; i < len; i++) {
- c = name[i];
- if (c <= 0 || c >= 0x80) {
- xfree(s);
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
- }
-
- if (c != ' ' && c != '-' && c != '_') {
- s[n] = c;
- n++;
- }
- }
- s[n] = '\0';
-
- if (UserDefinedPropertyTable == 0) {
- UserDefinedPropertyTable = onig_st_init_strend_table_with_size(10);
- }
-
- e = UserDefinedPropertyRanges + UserDefinedPropertyNum;
- e->ctype = CODE_RANGES_NUM + UserDefinedPropertyNum;
- e->ranges = ranges;
- onig_st_insert_strend(UserDefinedPropertyTable,
- (const UChar* )s, (const UChar* )s + n,
- (hash_data_type )((void* )e));
-
- UserDefinedPropertyNum++;
- return 0;
-}
-
-extern int
-onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype)
-{
- if (
-#ifdef USE_UNICODE_PROPERTIES
- ctype <= ONIGENC_MAX_STD_CTYPE &&
-#endif
- code < 256) {
- return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);
- }
-
- if (ctype >= CODE_RANGES_NUM) {
- int index = ctype - CODE_RANGES_NUM;
- if (index < UserDefinedPropertyNum)
- return onig_is_in_code_range((UChar* )UserDefinedPropertyRanges[index].ranges, code);
- else
- return ONIGERR_TYPE_BUG;
- }
-
- return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);
-}
-
-
-extern int
-onigenc_unicode_ctype_code_range(int ctype, const OnigCodePoint* ranges[])
-{
- if (ctype >= CODE_RANGES_NUM) {
- int index = ctype - CODE_RANGES_NUM;
- if (index < UserDefinedPropertyNum) {
- *ranges = UserDefinedPropertyRanges[index].ranges;
- return 0;
- }
- else
- return ONIGERR_TYPE_BUG;
- }
-
- *ranges = CodeRanges[ctype];
- return 0;
-}
-
-extern int
-onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,
- const OnigCodePoint* ranges[])
-{
- *sb_out = 0x00;
- return onigenc_unicode_ctype_code_range(ctype, ranges);
-}
-
-extern int
-onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)
-{
- int len;
- UChar *p;
- OnigCodePoint code;
- const struct PropertyNameCtype* pc;
- char buf[PROPERTY_NAME_MAX_SIZE];
-
- p = name;
- len = 0;
- while (p < end) {
- code = ONIGENC_MBC_TO_CODE(enc, p, end);
- if (code >= 0x80)
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
-
- if (code != ' ' && code != '-' && code != '_') {
- buf[len++] = (char )code;
- if (len >= PROPERTY_NAME_MAX_SIZE)
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
- }
-
- p += enclen(enc, p);
- }
-
- buf[len] = 0;
-
- if (UserDefinedPropertyTable != 0) {
- UserDefinedPropertyValue* e;
- e = (UserDefinedPropertyValue* )NULL;
- onig_st_lookup_strend(UserDefinedPropertyTable,
- (const UChar* )buf, (const UChar* )buf + len,
- (hash_data_type* )((void* )(&e)));
- if (e != 0) {
- return e->ctype;
- }
- }
-
- pc = unicode_lookup_property_name(buf, len);
- if (pc != 0) {
- /* fprintf(stderr, "LOOKUP: %s: %d\n", buf, pc->ctype); */
-#ifndef USE_UNICODE_PROPERTIES
- if (pc->ctype > ONIGENC_MAX_STD_CTYPE)
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
-#endif
-
- return pc->ctype;
- }
-
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
-}
-
-/* for use macros in unicode_fold_data.c */
#include "unicode_fold_data.c"
-
extern int
onigenc_unicode_mbc_case_fold(OnigEncoding enc,
OnigCaseFoldType flag ARG_UNUSED, const UChar** pp, const UChar* end,
@@ -387,7 +221,7 @@ apply_case_fold3(int from, int to, OnigApplyAllCaseFoldFunc f, void* arg)
extern int
onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
- OnigApplyAllCaseFoldFunc f, void* arg)
+ OnigApplyAllCaseFoldFunc f, void* arg)
{
int r;
@@ -662,3 +496,390 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
return n;
}
+
+
+#ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
+
+enum EGCB_BREAK_TYPE {
+ EGCB_NOT_BREAK = 0,
+ EGCB_BREAK = 1,
+ EGCB_BREAK_UNDEF_E_MODIFIER = 2,
+ EGCB_BREAK_UNDEF_RI_RI = 3
+};
+
+enum EGCB_TYPE {
+ EGCB_Other = 0,
+ EGCB_CR = 1,
+ EGCB_LF = 2,
+ EGCB_Control = 3,
+ EGCB_Extend = 4,
+ EGCB_Prepend = 5,
+ EGCB_Regional_Indicator = 6,
+ EGCB_SpacingMark = 7,
+ EGCB_ZWJ = 8,
+ EGCB_E_Base = 9,
+ EGCB_E_Base_GAZ = 10,
+ EGCB_E_Modifier = 11,
+ EGCB_Glue_After_Zwj = 12,
+ EGCB_L = 13,
+ EGCB_LV = 14,
+ EGCB_LVT = 15,
+ EGCB_T = 16,
+ EGCB_V = 17
+};
+
+typedef struct {
+ OnigCodePoint start;
+ OnigCodePoint end;
+ enum EGCB_TYPE type;
+} EGCB_RANGE_TYPE;
+
+#include "unicode_egcb_data.c"
+
+static enum EGCB_TYPE
+egcb_get_type(OnigCodePoint code)
+{
+ OnigCodePoint low, high, x;
+ enum EGCB_TYPE type;
+
+ for (low = 0, high = (OnigCodePoint )EGCB_RANGE_NUM; low < high; ) {
+ x = (low + high) >> 1;
+ if (code > EGCB_RANGES[x].end)
+ low = x + 1;
+ else
+ high = x;
+ }
+
+ type = (low < (OnigCodePoint )EGCB_RANGE_NUM &&
+ code >= EGCB_RANGES[low].start) ?
+ EGCB_RANGES[low].type : EGCB_Other;
+
+ return type;
+}
+
+#define IS_CONTROL_CR_LF(code) ((code) <= EGCB_Control && (code) >= EGCB_CR)
+#define IS_HANGUL(code) ((code) >= EGCB_L)
+
+/* GB1 and GB2 are outside of this function. */
+static enum EGCB_BREAK_TYPE
+unicode_egcb_is_break_2code(OnigCodePoint from_code, OnigCodePoint to_code)
+{
+ enum EGCB_TYPE from;
+ enum EGCB_TYPE to;
+
+ from = egcb_get_type(from_code);
+ to = egcb_get_type(to_code);
+
+ /* short cut */
+ if (from == 0 && to == 0) goto GB999;
+
+ /* GB3 */
+ if (from == EGCB_CR && to == EGCB_LF) return EGCB_NOT_BREAK;
+ /* GB4 */
+ if (IS_CONTROL_CR_LF(from)) return EGCB_BREAK;
+ /* GB5 */
+ if (IS_CONTROL_CR_LF(to)) return EGCB_BREAK;
+
+ if (IS_HANGUL(from) && IS_HANGUL(to)) {
+ /* GB6 */
+ if (from == EGCB_L && to != EGCB_T) return EGCB_NOT_BREAK;
+ /* GB7 */
+ if ((from == EGCB_LV || from == EGCB_V)
+ && (to == EGCB_V || to == EGCB_T)) return EGCB_NOT_BREAK;
+
+ /* GB8 */
+ if ((from == EGCB_LVT || from == EGCB_T) && (to == EGCB_T))
+ return EGCB_NOT_BREAK;
+
+ goto GB999;
+ }
+
+ /* GB9 */
+ if (to == EGCB_Extend || to == EGCB_ZWJ) return EGCB_NOT_BREAK;
+
+ /* GB9a */
+ if (to == EGCB_SpacingMark) return EGCB_NOT_BREAK;
+ /* GB9b */
+ if (from == EGCB_Prepend) return EGCB_NOT_BREAK;
+
+ /* GB10 */
+ if (to == EGCB_E_Modifier) {
+ if (from == EGCB_E_Base || from == EGCB_E_Base_GAZ) return EGCB_NOT_BREAK;
+ if (from == EGCB_Extend) return EGCB_BREAK_UNDEF_E_MODIFIER;
+ goto GB999;
+ }
+
+ /* GB11 */
+ if (from == EGCB_ZWJ) {
+ if (to == EGCB_Glue_After_Zwj || to == EGCB_E_Base_GAZ) return EGCB_NOT_BREAK;
+ goto GB999;
+ }
+
+ /* GB12, GB13 */
+ if (from == EGCB_Regional_Indicator && to == EGCB_Regional_Indicator) {
+ return EGCB_BREAK_UNDEF_RI_RI;
+ }
+
+ GB999:
+ return EGCB_BREAK;
+}
+
+#endif /* USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER */
+
+extern int
+onigenc_egcb_is_break_position(OnigEncoding enc, UChar* p, UChar* prev,
+ const UChar* start, const UChar* end)
+{
+ OnigCodePoint from;
+ OnigCodePoint to;
+#ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
+ enum EGCB_BREAK_TYPE btype;
+ enum EGCB_TYPE type;
+#endif
+
+ /* GB1 and GB2 */
+ if (p == start) return 1;
+ if (p == end) return 1;
+
+ if (IS_NULL(prev)) {
+ prev = onigenc_get_prev_char_head(enc, start, p);
+ if (IS_NULL(prev)) return 1;
+ }
+
+ from = ONIGENC_MBC_TO_CODE(enc, prev, end);
+ to = ONIGENC_MBC_TO_CODE(enc, p, end);
+
+#ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
+ if (! ONIGENC_IS_UNICODE_ENCODING(enc)) {
+ if (from == 0x000d && to == 0x000a) return 0;
+ else return 1;
+ }
+
+ btype = unicode_egcb_is_break_2code(from, to);
+ switch (btype) {
+ case EGCB_NOT_BREAK:
+ return 0;
+ break;
+ case EGCB_BREAK:
+ return 1;
+ break;
+
+ case EGCB_BREAK_UNDEF_E_MODIFIER:
+ while ((prev = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+ from = ONIGENC_MBC_TO_CODE(enc, prev, end);
+ type = egcb_get_type(from);
+ if (type == EGCB_E_Base || type == EGCB_E_Base_GAZ)
+ return 0;
+ if (type != EGCB_Extend)
+ break;
+ }
+ break;
+
+ case EGCB_BREAK_UNDEF_RI_RI:
+ {
+ int n = 0;
+ while ((prev = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+ from = ONIGENC_MBC_TO_CODE(enc, prev, end);
+ type = egcb_get_type(from);
+ if (type != EGCB_Regional_Indicator)
+ break;
+
+ n++;
+ }
+ if ((n % 2) == 0) return 0;
+ }
+ break;
+ }
+
+ return 1;
+
+#else
+ if (from == 0x000d && to == 0x000a) return 0;
+ else return 1;
+#endif /* USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER */
+}
+
+
+/*
+ Undefine __GNUC__ for Escape warnings in Clang.
+
+./unicode_property_data.c:26730:44: warning: static variable
+ 'unicode_prop_name_pool_contents' is used in an inline function with
+ external linkage [-Wstatic-in-inline]
+ register const char *s = o + unicode_prop_name_pool;
+*/
+
+#ifdef __clang__
+#undef __GNUC__
+#endif
+
+#ifdef USE_UNICODE_PROPERTIES
+#include "unicode_property_data.c"
+#else
+#include "unicode_property_data_posix.c"
+#endif
+
+#define USER_DEFINED_PROPERTY_MAX_NUM 20
+
+typedef struct {
+ int ctype;
+ OnigCodePoint* ranges;
+} UserDefinedPropertyValue;
+
+static int UserDefinedPropertyNum;
+static UserDefinedPropertyValue
+UserDefinedPropertyRanges[USER_DEFINED_PROPERTY_MAX_NUM];
+static st_table* UserDefinedPropertyTable;
+
+extern int
+onig_unicode_define_user_property(const char* name, OnigCodePoint* ranges)
+{
+ UserDefinedPropertyValue* e;
+ int r;
+ int i;
+ int n;
+ int len;
+ int c;
+ char* s;
+
+ if (UserDefinedPropertyNum >= USER_DEFINED_PROPERTY_MAX_NUM)
+ return ONIGERR_TOO_MANY_USER_DEFINED_OBJECTS;
+
+ len = (int )strlen(name);
+ if (len >= PROPERTY_NAME_MAX_SIZE)
+ return ONIGERR_TOO_LONG_PROPERTY_NAME;
+
+ s = (char* )xmalloc(len + 1);
+ if (s == 0)
+ return ONIGERR_MEMORY;
+
+ n = 0;
+ for (i = 0; i < len; i++) {
+ c = name[i];
+ if (c <= 0 || c >= 0x80) {
+ xfree(s);
+ return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
+ }
+
+ if (c != ' ' && c != '-' && c != '_') {
+ s[n] = c;
+ n++;
+ }
+ }
+ s[n] = '\0';
+
+ if (UserDefinedPropertyTable == 0) {
+ UserDefinedPropertyTable = onig_st_init_strend_table_with_size(10);
+ }
+
+ e = UserDefinedPropertyRanges + UserDefinedPropertyNum;
+ e->ctype = CODE_RANGES_NUM + UserDefinedPropertyNum;
+ e->ranges = ranges;
+ r = onig_st_insert_strend(UserDefinedPropertyTable,
+ (const UChar* )s, (const UChar* )s + n,
+ (hash_data_type )((void* )e));
+ if (r < 0) return r;
+
+ UserDefinedPropertyNum++;
+ return 0;
+}
+
+extern int
+onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype)
+{
+ if (
+#ifdef USE_UNICODE_PROPERTIES
+ ctype <= ONIGENC_MAX_STD_CTYPE &&
+#endif
+ code < 256) {
+ return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);
+ }
+
+ if (ctype >= CODE_RANGES_NUM) {
+ int index = ctype - CODE_RANGES_NUM;
+ if (index < UserDefinedPropertyNum)
+ return onig_is_in_code_range((UChar* )UserDefinedPropertyRanges[index].ranges, code);
+ else
+ return ONIGERR_TYPE_BUG;
+ }
+
+ return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);
+}
+
+
+extern int
+onigenc_unicode_ctype_code_range(OnigCtype ctype, const OnigCodePoint* ranges[])
+{
+ if (ctype >= CODE_RANGES_NUM) {
+ int index = ctype - CODE_RANGES_NUM;
+ if (index < UserDefinedPropertyNum) {
+ *ranges = UserDefinedPropertyRanges[index].ranges;
+ return 0;
+ }
+ else
+ return ONIGERR_TYPE_BUG;
+ }
+
+ *ranges = CodeRanges[ctype];
+ return 0;
+}
+
+extern int
+onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,
+ const OnigCodePoint* ranges[])
+{
+ *sb_out = 0x00;
+ return onigenc_unicode_ctype_code_range(ctype, ranges);
+}
+
+extern int
+onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)
+{
+ int len;
+ UChar *p;
+ OnigCodePoint code;
+ const struct PoolPropertyNameCtype* pc;
+ char buf[PROPERTY_NAME_MAX_SIZE];
+
+ p = name;
+ len = 0;
+ while (p < end) {
+ code = ONIGENC_MBC_TO_CODE(enc, p, end);
+ if (code >= 0x80)
+ return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
+
+ if (code != ' ' && code != '-' && code != '_') {
+ buf[len++] = (char )code;
+ if (len >= PROPERTY_NAME_MAX_SIZE)
+ return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
+ }
+
+ p += enclen(enc, p);
+ }
+
+ buf[len] = 0;
+
+ if (UserDefinedPropertyTable != 0) {
+ UserDefinedPropertyValue* e;
+ e = (UserDefinedPropertyValue* )NULL;
+ onig_st_lookup_strend(UserDefinedPropertyTable,
+ (const UChar* )buf, (const UChar* )buf + len,
+ (hash_data_type* )((void* )(&e)));
+ if (e != 0) {
+ return e->ctype;
+ }
+ }
+
+ pc = unicode_lookup_property_name(buf, len);
+ if (pc != 0) {
+ /* fprintf(stderr, "LOOKUP: %s: %d\n", buf, pc->ctype); */
+#ifndef USE_UNICODE_PROPERTIES
+ if (pc->ctype > ONIGENC_MAX_STD_CTYPE)
+ return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
+#endif
+
+ return (int )pc->ctype;
+ }
+
+ return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
+}
diff --git a/ext/mbstring/oniguruma/src/unicode_egcb_data.c b/ext/mbstring/oniguruma/src/unicode_egcb_data.c
new file mode 100644
index 0000000000..230440770a
--- /dev/null
+++ b/ext/mbstring/oniguruma/src/unicode_egcb_data.c
@@ -0,0 +1,1406 @@
+/* unicode_egcb_data.c: Generated by make_unicode_egcb_data.py. */
+/*-
+ * Copyright (c) 2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ */
+
+#define GRAPHEME_BREAK_PROPERTY_VERSION 10_0_0
+
+/*
+CR
+Control
+E_Base
+E_Base_GAZ
+E_Modifier
+Extend
+Glue_After_Zwj
+L
+LF
+LV
+LVT
+Prepend
+Regional_Indicator
+SpacingMark
+T
+V
+ZWJ
+*/
+
+static int EGCB_RANGE_NUM = 1354;
+static EGCB_RANGE_TYPE EGCB_RANGES[] = {
+ {0x000000, 0x000009, EGCB_Control },
+ {0x00000a, 0x00000a, EGCB_LF },
+ {0x00000b, 0x00000c, EGCB_Control },
+ {0x00000d, 0x00000d, EGCB_CR },
+ {0x00000e, 0x00001f, EGCB_Control },
+ {0x00007f, 0x00009f, EGCB_Control },
+ {0x0000ad, 0x0000ad, EGCB_Control },
+ {0x000300, 0x00036f, EGCB_Extend },
+ {0x000483, 0x000489, EGCB_Extend },
+ {0x000591, 0x0005bd, EGCB_Extend },
+ {0x0005bf, 0x0005bf, EGCB_Extend },
+ {0x0005c1, 0x0005c2, EGCB_Extend },
+ {0x0005c4, 0x0005c5, EGCB_Extend },
+ {0x0005c7, 0x0005c7, EGCB_Extend },
+ {0x000600, 0x000605, EGCB_Prepend },
+ {0x000610, 0x00061a, EGCB_Extend },
+ {0x00061c, 0x00061c, EGCB_Control },
+ {0x00064b, 0x00065f, EGCB_Extend },
+ {0x000670, 0x000670, EGCB_Extend },
+ {0x0006d6, 0x0006dc, EGCB_Extend },
+ {0x0006dd, 0x0006dd, EGCB_Prepend },
+ {0x0006df, 0x0006e4, EGCB_Extend },
+ {0x0006e7, 0x0006e8, EGCB_Extend },
+ {0x0006ea, 0x0006ed, EGCB_Extend },
+ {0x00070f, 0x00070f, EGCB_Prepend },
+ {0x000711, 0x000711, EGCB_Extend },
+ {0x000730, 0x00074a, EGCB_Extend },
+ {0x0007a6, 0x0007b0, EGCB_Extend },
+ {0x0007eb, 0x0007f3, EGCB_Extend },
+ {0x000816, 0x000819, EGCB_Extend },
+ {0x00081b, 0x000823, EGCB_Extend },
+ {0x000825, 0x000827, EGCB_Extend },
+ {0x000829, 0x00082d, EGCB_Extend },
+ {0x000859, 0x00085b, EGCB_Extend },
+ {0x0008d4, 0x0008e1, EGCB_Extend },
+ {0x0008e2, 0x0008e2, EGCB_Prepend },
+ {0x0008e3, 0x000902, EGCB_Extend },
+ {0x000903, 0x000903, EGCB_SpacingMark },
+ {0x00093a, 0x00093a, EGCB_Extend },
+ {0x00093b, 0x00093b, EGCB_SpacingMark },
+ {0x00093c, 0x00093c, EGCB_Extend },
+ {0x00093e, 0x000940, EGCB_SpacingMark },
+ {0x000941, 0x000948, EGCB_Extend },
+ {0x000949, 0x00094c, EGCB_SpacingMark },
+ {0x00094d, 0x00094d, EGCB_Extend },
+ {0x00094e, 0x00094f, EGCB_SpacingMark },
+ {0x000951, 0x000957, EGCB_Extend },
+ {0x000962, 0x000963, EGCB_Extend },
+ {0x000981, 0x000981, EGCB_Extend },
+ {0x000982, 0x000983, EGCB_SpacingMark },
+ {0x0009bc, 0x0009bc, EGCB_Extend },
+ {0x0009be, 0x0009be, EGCB_Extend },
+ {0x0009bf, 0x0009c0, EGCB_SpacingMark },
+ {0x0009c1, 0x0009c4, EGCB_Extend },
+ {0x0009c7, 0x0009c8, EGCB_SpacingMark },
+ {0x0009cb, 0x0009cc, EGCB_SpacingMark },
+ {0x0009cd, 0x0009cd, EGCB_Extend },
+ {0x0009d7, 0x0009d7, EGCB_Extend },
+ {0x0009e2, 0x0009e3, EGCB_Extend },
+ {0x000a01, 0x000a02, EGCB_Extend },
+ {0x000a03, 0x000a03, EGCB_SpacingMark },
+ {0x000a3c, 0x000a3c, EGCB_Extend },
+ {0x000a3e, 0x000a40, EGCB_SpacingMark },
+ {0x000a41, 0x000a42, EGCB_Extend },
+ {0x000a47, 0x000a48, EGCB_Extend },
+ {0x000a4b, 0x000a4d, EGCB_Extend },
+ {0x000a51, 0x000a51, EGCB_Extend },
+ {0x000a70, 0x000a71, EGCB_Extend },
+ {0x000a75, 0x000a75, EGCB_Extend },
+ {0x000a81, 0x000a82, EGCB_Extend },
+ {0x000a83, 0x000a83, EGCB_SpacingMark },
+ {0x000abc, 0x000abc, EGCB_Extend },
+ {0x000abe, 0x000ac0, EGCB_SpacingMark },
+ {0x000ac1, 0x000ac5, EGCB_Extend },
+ {0x000ac7, 0x000ac8, EGCB_Extend },
+ {0x000ac9, 0x000ac9, EGCB_SpacingMark },
+ {0x000acb, 0x000acc, EGCB_SpacingMark },
+ {0x000acd, 0x000acd, EGCB_Extend },
+ {0x000ae2, 0x000ae3, EGCB_Extend },
+ {0x000afa, 0x000aff, EGCB_Extend },
+ {0x000b01, 0x000b01, EGCB_Extend },
+ {0x000b02, 0x000b03, EGCB_SpacingMark },
+ {0x000b3c, 0x000b3c, EGCB_Extend },
+ {0x000b3e, 0x000b3f, EGCB_Extend },
+ {0x000b40, 0x000b40, EGCB_SpacingMark },
+ {0x000b41, 0x000b44, EGCB_Extend },
+ {0x000b47, 0x000b48, EGCB_SpacingMark },
+ {0x000b4b, 0x000b4c, EGCB_SpacingMark },
+ {0x000b4d, 0x000b4d, EGCB_Extend },
+ {0x000b56, 0x000b57, EGCB_Extend },
+ {0x000b62, 0x000b63, EGCB_Extend },
+ {0x000b82, 0x000b82, EGCB_Extend },
+ {0x000bbe, 0x000bbe, EGCB_Extend },
+ {0x000bbf, 0x000bbf, EGCB_SpacingMark },
+ {0x000bc0, 0x000bc0, EGCB_Extend },
+ {0x000bc1, 0x000bc2, EGCB_SpacingMark },
+ {0x000bc6, 0x000bc8, EGCB_SpacingMark },
+ {0x000bca, 0x000bcc, EGCB_SpacingMark },
+ {0x000bcd, 0x000bcd, EGCB_Extend },
+ {0x000bd7, 0x000bd7, EGCB_Extend },
+ {0x000c00, 0x000c00, EGCB_Extend },
+ {0x000c01, 0x000c03, EGCB_SpacingMark },
+ {0x000c3e, 0x000c40, EGCB_Extend },
+ {0x000c41, 0x000c44, EGCB_SpacingMark },
+ {0x000c46, 0x000c48, EGCB_Extend },
+ {0x000c4a, 0x000c4d, EGCB_Extend },
+ {0x000c55, 0x000c56, EGCB_Extend },
+ {0x000c62, 0x000c63, EGCB_Extend },
+ {0x000c81, 0x000c81, EGCB_Extend },
+ {0x000c82, 0x000c83, EGCB_SpacingMark },
+ {0x000cbc, 0x000cbc, EGCB_Extend },
+ {0x000cbe, 0x000cbe, EGCB_SpacingMark },
+ {0x000cbf, 0x000cbf, EGCB_Extend },
+ {0x000cc0, 0x000cc1, EGCB_SpacingMark },
+ {0x000cc2, 0x000cc2, EGCB_Extend },
+ {0x000cc3, 0x000cc4, EGCB_SpacingMark },
+ {0x000cc6, 0x000cc6, EGCB_Extend },
+ {0x000cc7, 0x000cc8, EGCB_SpacingMark },
+ {0x000cca, 0x000ccb, EGCB_SpacingMark },
+ {0x000ccc, 0x000ccd, EGCB_Extend },
+ {0x000cd5, 0x000cd6, EGCB_Extend },
+ {0x000ce2, 0x000ce3, EGCB_Extend },
+ {0x000d00, 0x000d01, EGCB_Extend },
+ {0x000d02, 0x000d03, EGCB_SpacingMark },
+ {0x000d3b, 0x000d3c, EGCB_Extend },
+ {0x000d3e, 0x000d3e, EGCB_Extend },
+ {0x000d3f, 0x000d40, EGCB_SpacingMark },
+ {0x000d41, 0x000d44, EGCB_Extend },
+ {0x000d46, 0x000d48, EGCB_SpacingMark },
+ {0x000d4a, 0x000d4c, EGCB_SpacingMark },
+ {0x000d4d, 0x000d4d, EGCB_Extend },
+ {0x000d4e, 0x000d4e, EGCB_Prepend },
+ {0x000d57, 0x000d57, EGCB_Extend },
+ {0x000d62, 0x000d63, EGCB_Extend },
+ {0x000d82, 0x000d83, EGCB_SpacingMark },
+ {0x000dca, 0x000dca, EGCB_Extend },
+ {0x000dcf, 0x000dcf, EGCB_Extend },
+ {0x000dd0, 0x000dd1, EGCB_SpacingMark },
+ {0x000dd2, 0x000dd4, EGCB_Extend },
+ {0x000dd6, 0x000dd6, EGCB_Extend },
+ {0x000dd8, 0x000dde, EGCB_SpacingMark },
+ {0x000ddf, 0x000ddf, EGCB_Extend },
+ {0x000df2, 0x000df3, EGCB_SpacingMark },
+ {0x000e31, 0x000e31, EGCB_Extend },
+ {0x000e33, 0x000e33, EGCB_SpacingMark },
+ {0x000e34, 0x000e3a, EGCB_Extend },
+ {0x000e47, 0x000e4e, EGCB_Extend },
+ {0x000eb1, 0x000eb1, EGCB_Extend },
+ {0x000eb3, 0x000eb3, EGCB_SpacingMark },
+ {0x000eb4, 0x000eb9, EGCB_Extend },
+ {0x000ebb, 0x000ebc, EGCB_Extend },
+ {0x000ec8, 0x000ecd, EGCB_Extend },
+ {0x000f18, 0x000f19, EGCB_Extend },
+ {0x000f35, 0x000f35, EGCB_Extend },
+ {0x000f37, 0x000f37, EGCB_Extend },
+ {0x000f39, 0x000f39, EGCB_Extend },
+ {0x000f3e, 0x000f3f, EGCB_SpacingMark },
+ {0x000f71, 0x000f7e, EGCB_Extend },
+ {0x000f7f, 0x000f7f, EGCB_SpacingMark },
+ {0x000f80, 0x000f84, EGCB_Extend },
+ {0x000f86, 0x000f87, EGCB_Extend },
+ {0x000f8d, 0x000f97, EGCB_Extend },
+ {0x000f99, 0x000fbc, EGCB_Extend },
+ {0x000fc6, 0x000fc6, EGCB_Extend },
+ {0x00102d, 0x001030, EGCB_Extend },
+ {0x001031, 0x001031, EGCB_SpacingMark },
+ {0x001032, 0x001037, EGCB_Extend },
+ {0x001039, 0x00103a, EGCB_Extend },
+ {0x00103b, 0x00103c, EGCB_SpacingMark },
+ {0x00103d, 0x00103e, EGCB_Extend },
+ {0x001056, 0x001057, EGCB_SpacingMark },
+ {0x001058, 0x001059, EGCB_Extend },
+ {0x00105e, 0x001060, EGCB_Extend },
+ {0x001071, 0x001074, EGCB_Extend },
+ {0x001082, 0x001082, EGCB_Extend },
+ {0x001084, 0x001084, EGCB_SpacingMark },
+ {0x001085, 0x001086, EGCB_Extend },
+ {0x00108d, 0x00108d, EGCB_Extend },
+ {0x00109d, 0x00109d, EGCB_Extend },
+ {0x001100, 0x00115f, EGCB_L },
+ {0x001160, 0x0011a7, EGCB_V },
+ {0x0011a8, 0x0011ff, EGCB_T },
+ {0x00135d, 0x00135f, EGCB_Extend },
+ {0x001712, 0x001714, EGCB_Extend },
+ {0x001732, 0x001734, EGCB_Extend },
+ {0x001752, 0x001753, EGCB_Extend },
+ {0x001772, 0x001773, EGCB_Extend },
+ {0x0017b4, 0x0017b5, EGCB_Extend },
+ {0x0017b6, 0x0017b6, EGCB_SpacingMark },
+ {0x0017b7, 0x0017bd, EGCB_Extend },
+ {0x0017be, 0x0017c5, EGCB_SpacingMark },
+ {0x0017c6, 0x0017c6, EGCB_Extend },
+ {0x0017c7, 0x0017c8, EGCB_SpacingMark },
+ {0x0017c9, 0x0017d3, EGCB_Extend },
+ {0x0017dd, 0x0017dd, EGCB_Extend },
+ {0x00180b, 0x00180d, EGCB_Extend },
+ {0x00180e, 0x00180e, EGCB_Control },
+ {0x001885, 0x001886, EGCB_Extend },
+ {0x0018a9, 0x0018a9, EGCB_Extend },
+ {0x001920, 0x001922, EGCB_Extend },
+ {0x001923, 0x001926, EGCB_SpacingMark },
+ {0x001927, 0x001928, EGCB_Extend },
+ {0x001929, 0x00192b, EGCB_SpacingMark },
+ {0x001930, 0x001931, EGCB_SpacingMark },
+ {0x001932, 0x001932, EGCB_Extend },
+ {0x001933, 0x001938, EGCB_SpacingMark },
+ {0x001939, 0x00193b, EGCB_Extend },
+ {0x001a17, 0x001a18, EGCB_Extend },
+ {0x001a19, 0x001a1a, EGCB_SpacingMark },
+ {0x001a1b, 0x001a1b, EGCB_Extend },
+ {0x001a55, 0x001a55, EGCB_SpacingMark },
+ {0x001a56, 0x001a56, EGCB_Extend },
+ {0x001a57, 0x001a57, EGCB_SpacingMark },
+ {0x001a58, 0x001a5e, EGCB_Extend },
+ {0x001a60, 0x001a60, EGCB_Extend },
+ {0x001a62, 0x001a62, EGCB_Extend },
+ {0x001a65, 0x001a6c, EGCB_Extend },
+ {0x001a6d, 0x001a72, EGCB_SpacingMark },
+ {0x001a73, 0x001a7c, EGCB_Extend },
+ {0x001a7f, 0x001a7f, EGCB_Extend },
+ {0x001ab0, 0x001abe, EGCB_Extend },
+ {0x001b00, 0x001b03, EGCB_Extend },
+ {0x001b04, 0x001b04, EGCB_SpacingMark },
+ {0x001b34, 0x001b34, EGCB_Extend },
+ {0x001b35, 0x001b35, EGCB_SpacingMark },
+ {0x001b36, 0x001b3a, EGCB_Extend },
+ {0x001b3b, 0x001b3b, EGCB_SpacingMark },
+ {0x001b3c, 0x001b3c, EGCB_Extend },
+ {0x001b3d, 0x001b41, EGCB_SpacingMark },
+ {0x001b42, 0x001b42, EGCB_Extend },
+ {0x001b43, 0x001b44, EGCB_SpacingMark },
+ {0x001b6b, 0x001b73, EGCB_Extend },
+ {0x001b80, 0x001b81, EGCB_Extend },
+ {0x001b82, 0x001b82, EGCB_SpacingMark },
+ {0x001ba1, 0x001ba1, EGCB_SpacingMark },
+ {0x001ba2, 0x001ba5, EGCB_Extend },
+ {0x001ba6, 0x001ba7, EGCB_SpacingMark },
+ {0x001ba8, 0x001ba9, EGCB_Extend },
+ {0x001baa, 0x001baa, EGCB_SpacingMark },
+ {0x001bab, 0x001bad, EGCB_Extend },
+ {0x001be6, 0x001be6, EGCB_Extend },
+ {0x001be7, 0x001be7, EGCB_SpacingMark },
+ {0x001be8, 0x001be9, EGCB_Extend },
+ {0x001bea, 0x001bec, EGCB_SpacingMark },
+ {0x001bed, 0x001bed, EGCB_Extend },
+ {0x001bee, 0x001bee, EGCB_SpacingMark },
+ {0x001bef, 0x001bf1, EGCB_Extend },
+ {0x001bf2, 0x001bf3, EGCB_SpacingMark },
+ {0x001c24, 0x001c2b, EGCB_SpacingMark },
+ {0x001c2c, 0x001c33, EGCB_Extend },
+ {0x001c34, 0x001c35, EGCB_SpacingMark },
+ {0x001c36, 0x001c37, EGCB_Extend },
+ {0x001cd0, 0x001cd2, EGCB_Extend },
+ {0x001cd4, 0x001ce0, EGCB_Extend },
+ {0x001ce1, 0x001ce1, EGCB_SpacingMark },
+ {0x001ce2, 0x001ce8, EGCB_Extend },
+ {0x001ced, 0x001ced, EGCB_Extend },
+ {0x001cf2, 0x001cf3, EGCB_SpacingMark },
+ {0x001cf4, 0x001cf4, EGCB_Extend },
+ {0x001cf7, 0x001cf7, EGCB_SpacingMark },
+ {0x001cf8, 0x001cf9, EGCB_Extend },
+ {0x001dc0, 0x001df9, EGCB_Extend },
+ {0x001dfb, 0x001dff, EGCB_Extend },
+ {0x00200b, 0x00200b, EGCB_Control },
+ {0x00200c, 0x00200c, EGCB_Extend },
+ {0x00200d, 0x00200d, EGCB_ZWJ },
+ {0x00200e, 0x00200f, EGCB_Control },
+ {0x002028, 0x00202e, EGCB_Control },
+ {0x002060, 0x00206f, EGCB_Control },
+ {0x0020d0, 0x0020f0, EGCB_Extend },
+ {0x00261d, 0x00261d, EGCB_E_Base },
+ {0x002640, 0x002640, EGCB_Glue_After_Zwj },
+ {0x002642, 0x002642, EGCB_Glue_After_Zwj },
+ {0x002695, 0x002696, EGCB_Glue_After_Zwj },
+ {0x0026f9, 0x0026f9, EGCB_E_Base },
+ {0x002708, 0x002708, EGCB_Glue_After_Zwj },
+ {0x00270a, 0x00270d, EGCB_E_Base },
+ {0x002764, 0x002764, EGCB_Glue_After_Zwj },
+ {0x002cef, 0x002cf1, EGCB_Extend },
+ {0x002d7f, 0x002d7f, EGCB_Extend },
+ {0x002de0, 0x002dff, EGCB_Extend },
+ {0x00302a, 0x00302f, EGCB_Extend },
+ {0x003099, 0x00309a, EGCB_Extend },
+ {0x00a66f, 0x00a672, EGCB_Extend },
+ {0x00a674, 0x00a67d, EGCB_Extend },
+ {0x00a69e, 0x00a69f, EGCB_Extend },
+ {0x00a6f0, 0x00a6f1, EGCB_Extend },
+ {0x00a802, 0x00a802, EGCB_Extend },
+ {0x00a806, 0x00a806, EGCB_Extend },
+ {0x00a80b, 0x00a80b, EGCB_Extend },
+ {0x00a823, 0x00a824, EGCB_SpacingMark },
+ {0x00a825, 0x00a826, EGCB_Extend },
+ {0x00a827, 0x00a827, EGCB_SpacingMark },
+ {0x00a880, 0x00a881, EGCB_SpacingMark },
+ {0x00a8b4, 0x00a8c3, EGCB_SpacingMark },
+ {0x00a8c4, 0x00a8c5, EGCB_Extend },
+ {0x00a8e0, 0x00a8f1, EGCB_Extend },
+ {0x00a926, 0x00a92d, EGCB_Extend },
+ {0x00a947, 0x00a951, EGCB_Extend },
+ {0x00a952, 0x00a953, EGCB_SpacingMark },
+ {0x00a960, 0x00a97c, EGCB_L },
+ {0x00a980, 0x00a982, EGCB_Extend },
+ {0x00a983, 0x00a983, EGCB_SpacingMark },
+ {0x00a9b3, 0x00a9b3, EGCB_Extend },
+ {0x00a9b4, 0x00a9b5, EGCB_SpacingMark },
+ {0x00a9b6, 0x00a9b9, EGCB_Extend },
+ {0x00a9ba, 0x00a9bb, EGCB_SpacingMark },
+ {0x00a9bc, 0x00a9bc, EGCB_Extend },
+ {0x00a9bd, 0x00a9c0, EGCB_SpacingMark },
+ {0x00a9e5, 0x00a9e5, EGCB_Extend },
+ {0x00aa29, 0x00aa2e, EGCB_Extend },
+ {0x00aa2f, 0x00aa30, EGCB_SpacingMark },
+ {0x00aa31, 0x00aa32, EGCB_Extend },
+ {0x00aa33, 0x00aa34, EGCB_SpacingMark },
+ {0x00aa35, 0x00aa36, EGCB_Extend },
+ {0x00aa43, 0x00aa43, EGCB_Extend },
+ {0x00aa4c, 0x00aa4c, EGCB_Extend },
+ {0x00aa4d, 0x00aa4d, EGCB_SpacingMark },
+ {0x00aa7c, 0x00aa7c, EGCB_Extend },
+ {0x00aab0, 0x00aab0, EGCB_Extend },
+ {0x00aab2, 0x00aab4, EGCB_Extend },
+ {0x00aab7, 0x00aab8, EGCB_Extend },
+ {0x00aabe, 0x00aabf, EGCB_Extend },
+ {0x00aac1, 0x00aac1, EGCB_Extend },
+ {0x00aaeb, 0x00aaeb, EGCB_SpacingMark },
+ {0x00aaec, 0x00aaed, EGCB_Extend },
+ {0x00aaee, 0x00aaef, EGCB_SpacingMark },
+ {0x00aaf5, 0x00aaf5, EGCB_SpacingMark },
+ {0x00aaf6, 0x00aaf6, EGCB_Extend },
+ {0x00abe3, 0x00abe4, EGCB_SpacingMark },
+ {0x00abe5, 0x00abe5, EGCB_Extend },
+ {0x00abe6, 0x00abe7, EGCB_SpacingMark },
+ {0x00abe8, 0x00abe8, EGCB_Extend },
+ {0x00abe9, 0x00abea, EGCB_SpacingMark },
+ {0x00abec, 0x00abec, EGCB_SpacingMark },
+ {0x00abed, 0x00abed, EGCB_Extend },
+ {0x00ac00, 0x00ac00, EGCB_LV },
+ {0x00ac01, 0x00ac1b, EGCB_LVT },
+ {0x00ac1c, 0x00ac1c, EGCB_LV },
+ {0x00ac1d, 0x00ac37, EGCB_LVT },
+ {0x00ac38, 0x00ac38, EGCB_LV },
+ {0x00ac39, 0x00ac53, EGCB_LVT },
+ {0x00ac54, 0x00ac54, EGCB_LV },
+ {0x00ac55, 0x00ac6f, EGCB_LVT },
+ {0x00ac70, 0x00ac70, EGCB_LV },
+ {0x00ac71, 0x00ac8b, EGCB_LVT },
+ {0x00ac8c, 0x00ac8c, EGCB_LV },
+ {0x00ac8d, 0x00aca7, EGCB_LVT },
+ {0x00aca8, 0x00aca8, EGCB_LV },
+ {0x00aca9, 0x00acc3, EGCB_LVT },
+ {0x00acc4, 0x00acc4, EGCB_LV },
+ {0x00acc5, 0x00acdf, EGCB_LVT },
+ {0x00ace0, 0x00ace0, EGCB_LV },
+ {0x00ace1, 0x00acfb, EGCB_LVT },
+ {0x00acfc, 0x00acfc, EGCB_LV },
+ {0x00acfd, 0x00ad17, EGCB_LVT },
+ {0x00ad18, 0x00ad18, EGCB_LV },
+ {0x00ad19, 0x00ad33, EGCB_LVT },
+ {0x00ad34, 0x00ad34, EGCB_LV },
+ {0x00ad35, 0x00ad4f, EGCB_LVT },
+ {0x00ad50, 0x00ad50, EGCB_LV },
+ {0x00ad51, 0x00ad6b, EGCB_LVT },
+ {0x00ad6c, 0x00ad6c, EGCB_LV },
+ {0x00ad6d, 0x00ad87, EGCB_LVT },
+ {0x00ad88, 0x00ad88, EGCB_LV },
+ {0x00ad89, 0x00ada3, EGCB_LVT },
+ {0x00ada4, 0x00ada4, EGCB_LV },
+ {0x00ada5, 0x00adbf, EGCB_LVT },
+ {0x00adc0, 0x00adc0, EGCB_LV },
+ {0x00adc1, 0x00addb, EGCB_LVT },
+ {0x00addc, 0x00addc, EGCB_LV },
+ {0x00addd, 0x00adf7, EGCB_LVT },
+ {0x00adf8, 0x00adf8, EGCB_LV },
+ {0x00adf9, 0x00ae13, EGCB_LVT },
+ {0x00ae14, 0x00ae14, EGCB_LV },
+ {0x00ae15, 0x00ae2f, EGCB_LVT },
+ {0x00ae30, 0x00ae30, EGCB_LV },
+ {0x00ae31, 0x00ae4b, EGCB_LVT },
+ {0x00ae4c, 0x00ae4c, EGCB_LV },
+ {0x00ae4d, 0x00ae67, EGCB_LVT },
+ {0x00ae68, 0x00ae68, EGCB_LV },
+ {0x00ae69, 0x00ae83, EGCB_LVT },
+ {0x00ae84, 0x00ae84, EGCB_LV },
+ {0x00ae85, 0x00ae9f, EGCB_LVT },
+ {0x00aea0, 0x00aea0, EGCB_LV },
+ {0x00aea1, 0x00aebb, EGCB_LVT },
+ {0x00aebc, 0x00aebc, EGCB_LV },
+ {0x00aebd, 0x00aed7, EGCB_LVT },
+ {0x00aed8, 0x00aed8, EGCB_LV },
+ {0x00aed9, 0x00aef3, EGCB_LVT },
+ {0x00aef4, 0x00aef4, EGCB_LV },
+ {0x00aef5, 0x00af0f, EGCB_LVT },
+ {0x00af10, 0x00af10, EGCB_LV },
+ {0x00af11, 0x00af2b, EGCB_LVT },
+ {0x00af2c, 0x00af2c, EGCB_LV },
+ {0x00af2d, 0x00af47, EGCB_LVT },
+ {0x00af48, 0x00af48, EGCB_LV },
+ {0x00af49, 0x00af63, EGCB_LVT },
+ {0x00af64, 0x00af64, EGCB_LV },
+ {0x00af65, 0x00af7f, EGCB_LVT },
+ {0x00af80, 0x00af80, EGCB_LV },
+ {0x00af81, 0x00af9b, EGCB_LVT },
+ {0x00af9c, 0x00af9c, EGCB_LV },
+ {0x00af9d, 0x00afb7, EGCB_LVT },
+ {0x00afb8, 0x00afb8, EGCB_LV },
+ {0x00afb9, 0x00afd3, EGCB_LVT },
+ {0x00afd4, 0x00afd4, EGCB_LV },
+ {0x00afd5, 0x00afef, EGCB_LVT },
+ {0x00aff0, 0x00aff0, EGCB_LV },
+ {0x00aff1, 0x00b00b, EGCB_LVT },
+ {0x00b00c, 0x00b00c, EGCB_LV },
+ {0x00b00d, 0x00b027, EGCB_LVT },
+ {0x00b028, 0x00b028, EGCB_LV },
+ {0x00b029, 0x00b043, EGCB_LVT },
+ {0x00b044, 0x00b044, EGCB_LV },
+ {0x00b045, 0x00b05f, EGCB_LVT },
+ {0x00b060, 0x00b060, EGCB_LV },
+ {0x00b061, 0x00b07b, EGCB_LVT },
+ {0x00b07c, 0x00b07c, EGCB_LV },
+ {0x00b07d, 0x00b097, EGCB_LVT },
+ {0x00b098, 0x00b098, EGCB_LV },
+ {0x00b099, 0x00b0b3, EGCB_LVT },
+ {0x00b0b4, 0x00b0b4, EGCB_LV },
+ {0x00b0b5, 0x00b0cf, EGCB_LVT },
+ {0x00b0d0, 0x00b0d0, EGCB_LV },
+ {0x00b0d1, 0x00b0eb, EGCB_LVT },
+ {0x00b0ec, 0x00b0ec, EGCB_LV },
+ {0x00b0ed, 0x00b107, EGCB_LVT },
+ {0x00b108, 0x00b108, EGCB_LV },
+ {0x00b109, 0x00b123, EGCB_LVT },
+ {0x00b124, 0x00b124, EGCB_LV },
+ {0x00b125, 0x00b13f, EGCB_LVT },
+ {0x00b140, 0x00b140, EGCB_LV },
+ {0x00b141, 0x00b15b, EGCB_LVT },
+ {0x00b15c, 0x00b15c, EGCB_LV },
+ {0x00b15d, 0x00b177, EGCB_LVT },
+ {0x00b178, 0x00b178, EGCB_LV },
+ {0x00b179, 0x00b193, EGCB_LVT },
+ {0x00b194, 0x00b194, EGCB_LV },
+ {0x00b195, 0x00b1af, EGCB_LVT },
+ {0x00b1b0, 0x00b1b0, EGCB_LV },
+ {0x00b1b1, 0x00b1cb, EGCB_LVT },
+ {0x00b1cc, 0x00b1cc, EGCB_LV },
+ {0x00b1cd, 0x00b1e7, EGCB_LVT },
+ {0x00b1e8, 0x00b1e8, EGCB_LV },
+ {0x00b1e9, 0x00b203, EGCB_LVT },
+ {0x00b204, 0x00b204, EGCB_LV },
+ {0x00b205, 0x00b21f, EGCB_LVT },
+ {0x00b220, 0x00b220, EGCB_LV },
+ {0x00b221, 0x00b23b, EGCB_LVT },
+ {0x00b23c, 0x00b23c, EGCB_LV },
+ {0x00b23d, 0x00b257, EGCB_LVT },
+ {0x00b258, 0x00b258, EGCB_LV },
+ {0x00b259, 0x00b273, EGCB_LVT },
+ {0x00b274, 0x00b274, EGCB_LV },
+ {0x00b275, 0x00b28f, EGCB_LVT },
+ {0x00b290, 0x00b290, EGCB_LV },
+ {0x00b291, 0x00b2ab, EGCB_LVT },
+ {0x00b2ac, 0x00b2ac, EGCB_LV },
+ {0x00b2ad, 0x00b2c7, EGCB_LVT },
+ {0x00b2c8, 0x00b2c8, EGCB_LV },
+ {0x00b2c9, 0x00b2e3, EGCB_LVT },
+ {0x00b2e4, 0x00b2e4, EGCB_LV },
+ {0x00b2e5, 0x00b2ff, EGCB_LVT },
+ {0x00b300, 0x00b300, EGCB_LV },
+ {0x00b301, 0x00b31b, EGCB_LVT },
+ {0x00b31c, 0x00b31c, EGCB_LV },
+ {0x00b31d, 0x00b337, EGCB_LVT },
+ {0x00b338, 0x00b338, EGCB_LV },
+ {0x00b339, 0x00b353, EGCB_LVT },
+ {0x00b354, 0x00b354, EGCB_LV },
+ {0x00b355, 0x00b36f, EGCB_LVT },
+ {0x00b370, 0x00b370, EGCB_LV },
+ {0x00b371, 0x00b38b, EGCB_LVT },
+ {0x00b38c, 0x00b38c, EGCB_LV },
+ {0x00b38d, 0x00b3a7, EGCB_LVT },
+ {0x00b3a8, 0x00b3a8, EGCB_LV },
+ {0x00b3a9, 0x00b3c3, EGCB_LVT },
+ {0x00b3c4, 0x00b3c4, EGCB_LV },
+ {0x00b3c5, 0x00b3df, EGCB_LVT },
+ {0x00b3e0, 0x00b3e0, EGCB_LV },
+ {0x00b3e1, 0x00b3fb, EGCB_LVT },
+ {0x00b3fc, 0x00b3fc, EGCB_LV },
+ {0x00b3fd, 0x00b417, EGCB_LVT },
+ {0x00b418, 0x00b418, EGCB_LV },
+ {0x00b419, 0x00b433, EGCB_LVT },
+ {0x00b434, 0x00b434, EGCB_LV },
+ {0x00b435, 0x00b44f, EGCB_LVT },
+ {0x00b450, 0x00b450, EGCB_LV },
+ {0x00b451, 0x00b46b, EGCB_LVT },
+ {0x00b46c, 0x00b46c, EGCB_LV },
+ {0x00b46d, 0x00b487, EGCB_LVT },
+ {0x00b488, 0x00b488, EGCB_LV },
+ {0x00b489, 0x00b4a3, EGCB_LVT },
+ {0x00b4a4, 0x00b4a4, EGCB_LV },
+ {0x00b4a5, 0x00b4bf, EGCB_LVT },
+ {0x00b4c0, 0x00b4c0, EGCB_LV },
+ {0x00b4c1, 0x00b4db, EGCB_LVT },
+ {0x00b4dc, 0x00b4dc, EGCB_LV },
+ {0x00b4dd, 0x00b4f7, EGCB_LVT },
+ {0x00b4f8, 0x00b4f8, EGCB_LV },
+ {0x00b4f9, 0x00b513, EGCB_LVT },
+ {0x00b514, 0x00b514, EGCB_LV },
+ {0x00b515, 0x00b52f, EGCB_LVT },
+ {0x00b530, 0x00b530, EGCB_LV },
+ {0x00b531, 0x00b54b, EGCB_LVT },
+ {0x00b54c, 0x00b54c, EGCB_LV },
+ {0x00b54d, 0x00b567, EGCB_LVT },
+ {0x00b568, 0x00b568, EGCB_LV },
+ {0x00b569, 0x00b583, EGCB_LVT },
+ {0x00b584, 0x00b584, EGCB_LV },
+ {0x00b585, 0x00b59f, EGCB_LVT },
+ {0x00b5a0, 0x00b5a0, EGCB_LV },
+ {0x00b5a1, 0x00b5bb, EGCB_LVT },
+ {0x00b5bc, 0x00b5bc, EGCB_LV },
+ {0x00b5bd, 0x00b5d7, EGCB_LVT },
+ {0x00b5d8, 0x00b5d8, EGCB_LV },
+ {0x00b5d9, 0x00b5f3, EGCB_LVT },
+ {0x00b5f4, 0x00b5f4, EGCB_LV },
+ {0x00b5f5, 0x00b60f, EGCB_LVT },
+ {0x00b610, 0x00b610, EGCB_LV },
+ {0x00b611, 0x00b62b, EGCB_LVT },
+ {0x00b62c, 0x00b62c, EGCB_LV },
+ {0x00b62d, 0x00b647, EGCB_LVT },
+ {0x00b648, 0x00b648, EGCB_LV },
+ {0x00b649, 0x00b663, EGCB_LVT },
+ {0x00b664, 0x00b664, EGCB_LV },
+ {0x00b665, 0x00b67f, EGCB_LVT },
+ {0x00b680, 0x00b680, EGCB_LV },
+ {0x00b681, 0x00b69b, EGCB_LVT },
+ {0x00b69c, 0x00b69c, EGCB_LV },
+ {0x00b69d, 0x00b6b7, EGCB_LVT },
+ {0x00b6b8, 0x00b6b8, EGCB_LV },
+ {0x00b6b9, 0x00b6d3, EGCB_LVT },
+ {0x00b6d4, 0x00b6d4, EGCB_LV },
+ {0x00b6d5, 0x00b6ef, EGCB_LVT },
+ {0x00b6f0, 0x00b6f0, EGCB_LV },
+ {0x00b6f1, 0x00b70b, EGCB_LVT },
+ {0x00b70c, 0x00b70c, EGCB_LV },
+ {0x00b70d, 0x00b727, EGCB_LVT },
+ {0x00b728, 0x00b728, EGCB_LV },
+ {0x00b729, 0x00b743, EGCB_LVT },
+ {0x00b744, 0x00b744, EGCB_LV },
+ {0x00b745, 0x00b75f, EGCB_LVT },
+ {0x00b760, 0x00b760, EGCB_LV },
+ {0x00b761, 0x00b77b, EGCB_LVT },
+ {0x00b77c, 0x00b77c, EGCB_LV },
+ {0x00b77d, 0x00b797, EGCB_LVT },
+ {0x00b798, 0x00b798, EGCB_LV },
+ {0x00b799, 0x00b7b3, EGCB_LVT },
+ {0x00b7b4, 0x00b7b4, EGCB_LV },
+ {0x00b7b5, 0x00b7cf, EGCB_LVT },
+ {0x00b7d0, 0x00b7d0, EGCB_LV },
+ {0x00b7d1, 0x00b7eb, EGCB_LVT },
+ {0x00b7ec, 0x00b7ec, EGCB_LV },
+ {0x00b7ed, 0x00b807, EGCB_LVT },
+ {0x00b808, 0x00b808, EGCB_LV },
+ {0x00b809, 0x00b823, EGCB_LVT },
+ {0x00b824, 0x00b824, EGCB_LV },
+ {0x00b825, 0x00b83f, EGCB_LVT },
+ {0x00b840, 0x00b840, EGCB_LV },
+ {0x00b841, 0x00b85b, EGCB_LVT },
+ {0x00b85c, 0x00b85c, EGCB_LV },
+ {0x00b85d, 0x00b877, EGCB_LVT },
+ {0x00b878, 0x00b878, EGCB_LV },
+ {0x00b879, 0x00b893, EGCB_LVT },
+ {0x00b894, 0x00b894, EGCB_LV },
+ {0x00b895, 0x00b8af, EGCB_LVT },
+ {0x00b8b0, 0x00b8b0, EGCB_LV },
+ {0x00b8b1, 0x00b8cb, EGCB_LVT },
+ {0x00b8cc, 0x00b8cc, EGCB_LV },
+ {0x00b8cd, 0x00b8e7, EGCB_LVT },
+ {0x00b8e8, 0x00b8e8, EGCB_LV },
+ {0x00b8e9, 0x00b903, EGCB_LVT },
+ {0x00b904, 0x00b904, EGCB_LV },
+ {0x00b905, 0x00b91f, EGCB_LVT },
+ {0x00b920, 0x00b920, EGCB_LV },
+ {0x00b921, 0x00b93b, EGCB_LVT },
+ {0x00b93c, 0x00b93c, EGCB_LV },
+ {0x00b93d, 0x00b957, EGCB_LVT },
+ {0x00b958, 0x00b958, EGCB_LV },
+ {0x00b959, 0x00b973, EGCB_LVT },
+ {0x00b974, 0x00b974, EGCB_LV },
+ {0x00b975, 0x00b98f, EGCB_LVT },
+ {0x00b990, 0x00b990, EGCB_LV },
+ {0x00b991, 0x00b9ab, EGCB_LVT },
+ {0x00b9ac, 0x00b9ac, EGCB_LV },
+ {0x00b9ad, 0x00b9c7, EGCB_LVT },
+ {0x00b9c8, 0x00b9c8, EGCB_LV },
+ {0x00b9c9, 0x00b9e3, EGCB_LVT },
+ {0x00b9e4, 0x00b9e4, EGCB_LV },
+ {0x00b9e5, 0x00b9ff, EGCB_LVT },
+ {0x00ba00, 0x00ba00, EGCB_LV },
+ {0x00ba01, 0x00ba1b, EGCB_LVT },
+ {0x00ba1c, 0x00ba1c, EGCB_LV },
+ {0x00ba1d, 0x00ba37, EGCB_LVT },
+ {0x00ba38, 0x00ba38, EGCB_LV },
+ {0x00ba39, 0x00ba53, EGCB_LVT },
+ {0x00ba54, 0x00ba54, EGCB_LV },
+ {0x00ba55, 0x00ba6f, EGCB_LVT },
+ {0x00ba70, 0x00ba70, EGCB_LV },
+ {0x00ba71, 0x00ba8b, EGCB_LVT },
+ {0x00ba8c, 0x00ba8c, EGCB_LV },
+ {0x00ba8d, 0x00baa7, EGCB_LVT },
+ {0x00baa8, 0x00baa8, EGCB_LV },
+ {0x00baa9, 0x00bac3, EGCB_LVT },
+ {0x00bac4, 0x00bac4, EGCB_LV },
+ {0x00bac5, 0x00badf, EGCB_LVT },
+ {0x00bae0, 0x00bae0, EGCB_LV },
+ {0x00bae1, 0x00bafb, EGCB_LVT },
+ {0x00bafc, 0x00bafc, EGCB_LV },
+ {0x00bafd, 0x00bb17, EGCB_LVT },
+ {0x00bb18, 0x00bb18, EGCB_LV },
+ {0x00bb19, 0x00bb33, EGCB_LVT },
+ {0x00bb34, 0x00bb34, EGCB_LV },
+ {0x00bb35, 0x00bb4f, EGCB_LVT },
+ {0x00bb50, 0x00bb50, EGCB_LV },
+ {0x00bb51, 0x00bb6b, EGCB_LVT },
+ {0x00bb6c, 0x00bb6c, EGCB_LV },
+ {0x00bb6d, 0x00bb87, EGCB_LVT },
+ {0x00bb88, 0x00bb88, EGCB_LV },
+ {0x00bb89, 0x00bba3, EGCB_LVT },
+ {0x00bba4, 0x00bba4, EGCB_LV },
+ {0x00bba5, 0x00bbbf, EGCB_LVT },
+ {0x00bbc0, 0x00bbc0, EGCB_LV },
+ {0x00bbc1, 0x00bbdb, EGCB_LVT },
+ {0x00bbdc, 0x00bbdc, EGCB_LV },
+ {0x00bbdd, 0x00bbf7, EGCB_LVT },
+ {0x00bbf8, 0x00bbf8, EGCB_LV },
+ {0x00bbf9, 0x00bc13, EGCB_LVT },
+ {0x00bc14, 0x00bc14, EGCB_LV },
+ {0x00bc15, 0x00bc2f, EGCB_LVT },
+ {0x00bc30, 0x00bc30, EGCB_LV },
+ {0x00bc31, 0x00bc4b, EGCB_LVT },
+ {0x00bc4c, 0x00bc4c, EGCB_LV },
+ {0x00bc4d, 0x00bc67, EGCB_LVT },
+ {0x00bc68, 0x00bc68, EGCB_LV },
+ {0x00bc69, 0x00bc83, EGCB_LVT },
+ {0x00bc84, 0x00bc84, EGCB_LV },
+ {0x00bc85, 0x00bc9f, EGCB_LVT },
+ {0x00bca0, 0x00bca0, EGCB_LV },
+ {0x00bca1, 0x00bcbb, EGCB_LVT },
+ {0x00bcbc, 0x00bcbc, EGCB_LV },
+ {0x00bcbd, 0x00bcd7, EGCB_LVT },
+ {0x00bcd8, 0x00bcd8, EGCB_LV },
+ {0x00bcd9, 0x00bcf3, EGCB_LVT },
+ {0x00bcf4, 0x00bcf4, EGCB_LV },
+ {0x00bcf5, 0x00bd0f, EGCB_LVT },
+ {0x00bd10, 0x00bd10, EGCB_LV },
+ {0x00bd11, 0x00bd2b, EGCB_LVT },
+ {0x00bd2c, 0x00bd2c, EGCB_LV },
+ {0x00bd2d, 0x00bd47, EGCB_LVT },
+ {0x00bd48, 0x00bd48, EGCB_LV },
+ {0x00bd49, 0x00bd63, EGCB_LVT },
+ {0x00bd64, 0x00bd64, EGCB_LV },
+ {0x00bd65, 0x00bd7f, EGCB_LVT },
+ {0x00bd80, 0x00bd80, EGCB_LV },
+ {0x00bd81, 0x00bd9b, EGCB_LVT },
+ {0x00bd9c, 0x00bd9c, EGCB_LV },
+ {0x00bd9d, 0x00bdb7, EGCB_LVT },
+ {0x00bdb8, 0x00bdb8, EGCB_LV },
+ {0x00bdb9, 0x00bdd3, EGCB_LVT },
+ {0x00bdd4, 0x00bdd4, EGCB_LV },
+ {0x00bdd5, 0x00bdef, EGCB_LVT },
+ {0x00bdf0, 0x00bdf0, EGCB_LV },
+ {0x00bdf1, 0x00be0b, EGCB_LVT },
+ {0x00be0c, 0x00be0c, EGCB_LV },
+ {0x00be0d, 0x00be27, EGCB_LVT },
+ {0x00be28, 0x00be28, EGCB_LV },
+ {0x00be29, 0x00be43, EGCB_LVT },
+ {0x00be44, 0x00be44, EGCB_LV },
+ {0x00be45, 0x00be5f, EGCB_LVT },
+ {0x00be60, 0x00be60, EGCB_LV },
+ {0x00be61, 0x00be7b, EGCB_LVT },
+ {0x00be7c, 0x00be7c, EGCB_LV },
+ {0x00be7d, 0x00be97, EGCB_LVT },
+ {0x00be98, 0x00be98, EGCB_LV },
+ {0x00be99, 0x00beb3, EGCB_LVT },
+ {0x00beb4, 0x00beb4, EGCB_LV },
+ {0x00beb5, 0x00becf, EGCB_LVT },
+ {0x00bed0, 0x00bed0, EGCB_LV },
+ {0x00bed1, 0x00beeb, EGCB_LVT },
+ {0x00beec, 0x00beec, EGCB_LV },
+ {0x00beed, 0x00bf07, EGCB_LVT },
+ {0x00bf08, 0x00bf08, EGCB_LV },
+ {0x00bf09, 0x00bf23, EGCB_LVT },
+ {0x00bf24, 0x00bf24, EGCB_LV },
+ {0x00bf25, 0x00bf3f, EGCB_LVT },
+ {0x00bf40, 0x00bf40, EGCB_LV },
+ {0x00bf41, 0x00bf5b, EGCB_LVT },
+ {0x00bf5c, 0x00bf5c, EGCB_LV },
+ {0x00bf5d, 0x00bf77, EGCB_LVT },
+ {0x00bf78, 0x00bf78, EGCB_LV },
+ {0x00bf79, 0x00bf93, EGCB_LVT },
+ {0x00bf94, 0x00bf94, EGCB_LV },
+ {0x00bf95, 0x00bfaf, EGCB_LVT },
+ {0x00bfb0, 0x00bfb0, EGCB_LV },
+ {0x00bfb1, 0x00bfcb, EGCB_LVT },
+ {0x00bfcc, 0x00bfcc, EGCB_LV },
+ {0x00bfcd, 0x00bfe7, EGCB_LVT },
+ {0x00bfe8, 0x00bfe8, EGCB_LV },
+ {0x00bfe9, 0x00c003, EGCB_LVT },
+ {0x00c004, 0x00c004, EGCB_LV },
+ {0x00c005, 0x00c01f, EGCB_LVT },
+ {0x00c020, 0x00c020, EGCB_LV },
+ {0x00c021, 0x00c03b, EGCB_LVT },
+ {0x00c03c, 0x00c03c, EGCB_LV },
+ {0x00c03d, 0x00c057, EGCB_LVT },
+ {0x00c058, 0x00c058, EGCB_LV },
+ {0x00c059, 0x00c073, EGCB_LVT },
+ {0x00c074, 0x00c074, EGCB_LV },
+ {0x00c075, 0x00c08f, EGCB_LVT },
+ {0x00c090, 0x00c090, EGCB_LV },
+ {0x00c091, 0x00c0ab, EGCB_LVT },
+ {0x00c0ac, 0x00c0ac, EGCB_LV },
+ {0x00c0ad, 0x00c0c7, EGCB_LVT },
+ {0x00c0c8, 0x00c0c8, EGCB_LV },
+ {0x00c0c9, 0x00c0e3, EGCB_LVT },
+ {0x00c0e4, 0x00c0e4, EGCB_LV },
+ {0x00c0e5, 0x00c0ff, EGCB_LVT },
+ {0x00c100, 0x00c100, EGCB_LV },
+ {0x00c101, 0x00c11b, EGCB_LVT },
+ {0x00c11c, 0x00c11c, EGCB_LV },
+ {0x00c11d, 0x00c137, EGCB_LVT },
+ {0x00c138, 0x00c138, EGCB_LV },
+ {0x00c139, 0x00c153, EGCB_LVT },
+ {0x00c154, 0x00c154, EGCB_LV },
+ {0x00c155, 0x00c16f, EGCB_LVT },
+ {0x00c170, 0x00c170, EGCB_LV },
+ {0x00c171, 0x00c18b, EGCB_LVT },
+ {0x00c18c, 0x00c18c, EGCB_LV },
+ {0x00c18d, 0x00c1a7, EGCB_LVT },
+ {0x00c1a8, 0x00c1a8, EGCB_LV },
+ {0x00c1a9, 0x00c1c3, EGCB_LVT },
+ {0x00c1c4, 0x00c1c4, EGCB_LV },
+ {0x00c1c5, 0x00c1df, EGCB_LVT },
+ {0x00c1e0, 0x00c1e0, EGCB_LV },
+ {0x00c1e1, 0x00c1fb, EGCB_LVT },
+ {0x00c1fc, 0x00c1fc, EGCB_LV },
+ {0x00c1fd, 0x00c217, EGCB_LVT },
+ {0x00c218, 0x00c218, EGCB_LV },
+ {0x00c219, 0x00c233, EGCB_LVT },
+ {0x00c234, 0x00c234, EGCB_LV },
+ {0x00c235, 0x00c24f, EGCB_LVT },
+ {0x00c250, 0x00c250, EGCB_LV },
+ {0x00c251, 0x00c26b, EGCB_LVT },
+ {0x00c26c, 0x00c26c, EGCB_LV },
+ {0x00c26d, 0x00c287, EGCB_LVT },
+ {0x00c288, 0x00c288, EGCB_LV },
+ {0x00c289, 0x00c2a3, EGCB_LVT },
+ {0x00c2a4, 0x00c2a4, EGCB_LV },
+ {0x00c2a5, 0x00c2bf, EGCB_LVT },
+ {0x00c2c0, 0x00c2c0, EGCB_LV },
+ {0x00c2c1, 0x00c2db, EGCB_LVT },
+ {0x00c2dc, 0x00c2dc, EGCB_LV },
+ {0x00c2dd, 0x00c2f7, EGCB_LVT },
+ {0x00c2f8, 0x00c2f8, EGCB_LV },
+ {0x00c2f9, 0x00c313, EGCB_LVT },
+ {0x00c314, 0x00c314, EGCB_LV },
+ {0x00c315, 0x00c32f, EGCB_LVT },
+ {0x00c330, 0x00c330, EGCB_LV },
+ {0x00c331, 0x00c34b, EGCB_LVT },
+ {0x00c34c, 0x00c34c, EGCB_LV },
+ {0x00c34d, 0x00c367, EGCB_LVT },
+ {0x00c368, 0x00c368, EGCB_LV },
+ {0x00c369, 0x00c383, EGCB_LVT },
+ {0x00c384, 0x00c384, EGCB_LV },
+ {0x00c385, 0x00c39f, EGCB_LVT },
+ {0x00c3a0, 0x00c3a0, EGCB_LV },
+ {0x00c3a1, 0x00c3bb, EGCB_LVT },
+ {0x00c3bc, 0x00c3bc, EGCB_LV },
+ {0x00c3bd, 0x00c3d7, EGCB_LVT },
+ {0x00c3d8, 0x00c3d8, EGCB_LV },
+ {0x00c3d9, 0x00c3f3, EGCB_LVT },
+ {0x00c3f4, 0x00c3f4, EGCB_LV },
+ {0x00c3f5, 0x00c40f, EGCB_LVT },
+ {0x00c410, 0x00c410, EGCB_LV },
+ {0x00c411, 0x00c42b, EGCB_LVT },
+ {0x00c42c, 0x00c42c, EGCB_LV },
+ {0x00c42d, 0x00c447, EGCB_LVT },
+ {0x00c448, 0x00c448, EGCB_LV },
+ {0x00c449, 0x00c463, EGCB_LVT },
+ {0x00c464, 0x00c464, EGCB_LV },
+ {0x00c465, 0x00c47f, EGCB_LVT },
+ {0x00c480, 0x00c480, EGCB_LV },
+ {0x00c481, 0x00c49b, EGCB_LVT },
+ {0x00c49c, 0x00c49c, EGCB_LV },
+ {0x00c49d, 0x00c4b7, EGCB_LVT },
+ {0x00c4b8, 0x00c4b8, EGCB_LV },
+ {0x00c4b9, 0x00c4d3, EGCB_LVT },
+ {0x00c4d4, 0x00c4d4, EGCB_LV },
+ {0x00c4d5, 0x00c4ef, EGCB_LVT },
+ {0x00c4f0, 0x00c4f0, EGCB_LV },
+ {0x00c4f1, 0x00c50b, EGCB_LVT },
+ {0x00c50c, 0x00c50c, EGCB_LV },
+ {0x00c50d, 0x00c527, EGCB_LVT },
+ {0x00c528, 0x00c528, EGCB_LV },
+ {0x00c529, 0x00c543, EGCB_LVT },
+ {0x00c544, 0x00c544, EGCB_LV },
+ {0x00c545, 0x00c55f, EGCB_LVT },
+ {0x00c560, 0x00c560, EGCB_LV },
+ {0x00c561, 0x00c57b, EGCB_LVT },
+ {0x00c57c, 0x00c57c, EGCB_LV },
+ {0x00c57d, 0x00c597, EGCB_LVT },
+ {0x00c598, 0x00c598, EGCB_LV },
+ {0x00c599, 0x00c5b3, EGCB_LVT },
+ {0x00c5b4, 0x00c5b4, EGCB_LV },
+ {0x00c5b5, 0x00c5cf, EGCB_LVT },
+ {0x00c5d0, 0x00c5d0, EGCB_LV },
+ {0x00c5d1, 0x00c5eb, EGCB_LVT },
+ {0x00c5ec, 0x00c5ec, EGCB_LV },
+ {0x00c5ed, 0x00c607, EGCB_LVT },
+ {0x00c608, 0x00c608, EGCB_LV },
+ {0x00c609, 0x00c623, EGCB_LVT },
+ {0x00c624, 0x00c624, EGCB_LV },
+ {0x00c625, 0x00c63f, EGCB_LVT },
+ {0x00c640, 0x00c640, EGCB_LV },
+ {0x00c641, 0x00c65b, EGCB_LVT },
+ {0x00c65c, 0x00c65c, EGCB_LV },
+ {0x00c65d, 0x00c677, EGCB_LVT },
+ {0x00c678, 0x00c678, EGCB_LV },
+ {0x00c679, 0x00c693, EGCB_LVT },
+ {0x00c694, 0x00c694, EGCB_LV },
+ {0x00c695, 0x00c6af, EGCB_LVT },
+ {0x00c6b0, 0x00c6b0, EGCB_LV },
+ {0x00c6b1, 0x00c6cb, EGCB_LVT },
+ {0x00c6cc, 0x00c6cc, EGCB_LV },
+ {0x00c6cd, 0x00c6e7, EGCB_LVT },
+ {0x00c6e8, 0x00c6e8, EGCB_LV },
+ {0x00c6e9, 0x00c703, EGCB_LVT },
+ {0x00c704, 0x00c704, EGCB_LV },
+ {0x00c705, 0x00c71f, EGCB_LVT },
+ {0x00c720, 0x00c720, EGCB_LV },
+ {0x00c721, 0x00c73b, EGCB_LVT },
+ {0x00c73c, 0x00c73c, EGCB_LV },
+ {0x00c73d, 0x00c757, EGCB_LVT },
+ {0x00c758, 0x00c758, EGCB_LV },
+ {0x00c759, 0x00c773, EGCB_LVT },
+ {0x00c774, 0x00c774, EGCB_LV },
+ {0x00c775, 0x00c78f, EGCB_LVT },
+ {0x00c790, 0x00c790, EGCB_LV },
+ {0x00c791, 0x00c7ab, EGCB_LVT },
+ {0x00c7ac, 0x00c7ac, EGCB_LV },
+ {0x00c7ad, 0x00c7c7, EGCB_LVT },
+ {0x00c7c8, 0x00c7c8, EGCB_LV },
+ {0x00c7c9, 0x00c7e3, EGCB_LVT },
+ {0x00c7e4, 0x00c7e4, EGCB_LV },
+ {0x00c7e5, 0x00c7ff, EGCB_LVT },
+ {0x00c800, 0x00c800, EGCB_LV },
+ {0x00c801, 0x00c81b, EGCB_LVT },
+ {0x00c81c, 0x00c81c, EGCB_LV },
+ {0x00c81d, 0x00c837, EGCB_LVT },
+ {0x00c838, 0x00c838, EGCB_LV },
+ {0x00c839, 0x00c853, EGCB_LVT },
+ {0x00c854, 0x00c854, EGCB_LV },
+ {0x00c855, 0x00c86f, EGCB_LVT },
+ {0x00c870, 0x00c870, EGCB_LV },
+ {0x00c871, 0x00c88b, EGCB_LVT },
+ {0x00c88c, 0x00c88c, EGCB_LV },
+ {0x00c88d, 0x00c8a7, EGCB_LVT },
+ {0x00c8a8, 0x00c8a8, EGCB_LV },
+ {0x00c8a9, 0x00c8c3, EGCB_LVT },
+ {0x00c8c4, 0x00c8c4, EGCB_LV },
+ {0x00c8c5, 0x00c8df, EGCB_LVT },
+ {0x00c8e0, 0x00c8e0, EGCB_LV },
+ {0x00c8e1, 0x00c8fb, EGCB_LVT },
+ {0x00c8fc, 0x00c8fc, EGCB_LV },
+ {0x00c8fd, 0x00c917, EGCB_LVT },
+ {0x00c918, 0x00c918, EGCB_LV },
+ {0x00c919, 0x00c933, EGCB_LVT },
+ {0x00c934, 0x00c934, EGCB_LV },
+ {0x00c935, 0x00c94f, EGCB_LVT },
+ {0x00c950, 0x00c950, EGCB_LV },
+ {0x00c951, 0x00c96b, EGCB_LVT },
+ {0x00c96c, 0x00c96c, EGCB_LV },
+ {0x00c96d, 0x00c987, EGCB_LVT },
+ {0x00c988, 0x00c988, EGCB_LV },
+ {0x00c989, 0x00c9a3, EGCB_LVT },
+ {0x00c9a4, 0x00c9a4, EGCB_LV },
+ {0x00c9a5, 0x00c9bf, EGCB_LVT },
+ {0x00c9c0, 0x00c9c0, EGCB_LV },
+ {0x00c9c1, 0x00c9db, EGCB_LVT },
+ {0x00c9dc, 0x00c9dc, EGCB_LV },
+ {0x00c9dd, 0x00c9f7, EGCB_LVT },
+ {0x00c9f8, 0x00c9f8, EGCB_LV },
+ {0x00c9f9, 0x00ca13, EGCB_LVT },
+ {0x00ca14, 0x00ca14, EGCB_LV },
+ {0x00ca15, 0x00ca2f, EGCB_LVT },
+ {0x00ca30, 0x00ca30, EGCB_LV },
+ {0x00ca31, 0x00ca4b, EGCB_LVT },
+ {0x00ca4c, 0x00ca4c, EGCB_LV },
+ {0x00ca4d, 0x00ca67, EGCB_LVT },
+ {0x00ca68, 0x00ca68, EGCB_LV },
+ {0x00ca69, 0x00ca83, EGCB_LVT },
+ {0x00ca84, 0x00ca84, EGCB_LV },
+ {0x00ca85, 0x00ca9f, EGCB_LVT },
+ {0x00caa0, 0x00caa0, EGCB_LV },
+ {0x00caa1, 0x00cabb, EGCB_LVT },
+ {0x00cabc, 0x00cabc, EGCB_LV },
+ {0x00cabd, 0x00cad7, EGCB_LVT },
+ {0x00cad8, 0x00cad8, EGCB_LV },
+ {0x00cad9, 0x00caf3, EGCB_LVT },
+ {0x00caf4, 0x00caf4, EGCB_LV },
+ {0x00caf5, 0x00cb0f, EGCB_LVT },
+ {0x00cb10, 0x00cb10, EGCB_LV },
+ {0x00cb11, 0x00cb2b, EGCB_LVT },
+ {0x00cb2c, 0x00cb2c, EGCB_LV },
+ {0x00cb2d, 0x00cb47, EGCB_LVT },
+ {0x00cb48, 0x00cb48, EGCB_LV },
+ {0x00cb49, 0x00cb63, EGCB_LVT },
+ {0x00cb64, 0x00cb64, EGCB_LV },
+ {0x00cb65, 0x00cb7f, EGCB_LVT },
+ {0x00cb80, 0x00cb80, EGCB_LV },
+ {0x00cb81, 0x00cb9b, EGCB_LVT },
+ {0x00cb9c, 0x00cb9c, EGCB_LV },
+ {0x00cb9d, 0x00cbb7, EGCB_LVT },
+ {0x00cbb8, 0x00cbb8, EGCB_LV },
+ {0x00cbb9, 0x00cbd3, EGCB_LVT },
+ {0x00cbd4, 0x00cbd4, EGCB_LV },
+ {0x00cbd5, 0x00cbef, EGCB_LVT },
+ {0x00cbf0, 0x00cbf0, EGCB_LV },
+ {0x00cbf1, 0x00cc0b, EGCB_LVT },
+ {0x00cc0c, 0x00cc0c, EGCB_LV },
+ {0x00cc0d, 0x00cc27, EGCB_LVT },
+ {0x00cc28, 0x00cc28, EGCB_LV },
+ {0x00cc29, 0x00cc43, EGCB_LVT },
+ {0x00cc44, 0x00cc44, EGCB_LV },
+ {0x00cc45, 0x00cc5f, EGCB_LVT },
+ {0x00cc60, 0x00cc60, EGCB_LV },
+ {0x00cc61, 0x00cc7b, EGCB_LVT },
+ {0x00cc7c, 0x00cc7c, EGCB_LV },
+ {0x00cc7d, 0x00cc97, EGCB_LVT },
+ {0x00cc98, 0x00cc98, EGCB_LV },
+ {0x00cc99, 0x00ccb3, EGCB_LVT },
+ {0x00ccb4, 0x00ccb4, EGCB_LV },
+ {0x00ccb5, 0x00cccf, EGCB_LVT },
+ {0x00ccd0, 0x00ccd0, EGCB_LV },
+ {0x00ccd1, 0x00cceb, EGCB_LVT },
+ {0x00ccec, 0x00ccec, EGCB_LV },
+ {0x00cced, 0x00cd07, EGCB_LVT },
+ {0x00cd08, 0x00cd08, EGCB_LV },
+ {0x00cd09, 0x00cd23, EGCB_LVT },
+ {0x00cd24, 0x00cd24, EGCB_LV },
+ {0x00cd25, 0x00cd3f, EGCB_LVT },
+ {0x00cd40, 0x00cd40, EGCB_LV },
+ {0x00cd41, 0x00cd5b, EGCB_LVT },
+ {0x00cd5c, 0x00cd5c, EGCB_LV },
+ {0x00cd5d, 0x00cd77, EGCB_LVT },
+ {0x00cd78, 0x00cd78, EGCB_LV },
+ {0x00cd79, 0x00cd93, EGCB_LVT },
+ {0x00cd94, 0x00cd94, EGCB_LV },
+ {0x00cd95, 0x00cdaf, EGCB_LVT },
+ {0x00cdb0, 0x00cdb0, EGCB_LV },
+ {0x00cdb1, 0x00cdcb, EGCB_LVT },
+ {0x00cdcc, 0x00cdcc, EGCB_LV },
+ {0x00cdcd, 0x00cde7, EGCB_LVT },
+ {0x00cde8, 0x00cde8, EGCB_LV },
+ {0x00cde9, 0x00ce03, EGCB_LVT },
+ {0x00ce04, 0x00ce04, EGCB_LV },
+ {0x00ce05, 0x00ce1f, EGCB_LVT },
+ {0x00ce20, 0x00ce20, EGCB_LV },
+ {0x00ce21, 0x00ce3b, EGCB_LVT },
+ {0x00ce3c, 0x00ce3c, EGCB_LV },
+ {0x00ce3d, 0x00ce57, EGCB_LVT },
+ {0x00ce58, 0x00ce58, EGCB_LV },
+ {0x00ce59, 0x00ce73, EGCB_LVT },
+ {0x00ce74, 0x00ce74, EGCB_LV },
+ {0x00ce75, 0x00ce8f, EGCB_LVT },
+ {0x00ce90, 0x00ce90, EGCB_LV },
+ {0x00ce91, 0x00ceab, EGCB_LVT },
+ {0x00ceac, 0x00ceac, EGCB_LV },
+ {0x00cead, 0x00cec7, EGCB_LVT },
+ {0x00cec8, 0x00cec8, EGCB_LV },
+ {0x00cec9, 0x00cee3, EGCB_LVT },
+ {0x00cee4, 0x00cee4, EGCB_LV },
+ {0x00cee5, 0x00ceff, EGCB_LVT },
+ {0x00cf00, 0x00cf00, EGCB_LV },
+ {0x00cf01, 0x00cf1b, EGCB_LVT },
+ {0x00cf1c, 0x00cf1c, EGCB_LV },
+ {0x00cf1d, 0x00cf37, EGCB_LVT },
+ {0x00cf38, 0x00cf38, EGCB_LV },
+ {0x00cf39, 0x00cf53, EGCB_LVT },
+ {0x00cf54, 0x00cf54, EGCB_LV },
+ {0x00cf55, 0x00cf6f, EGCB_LVT },
+ {0x00cf70, 0x00cf70, EGCB_LV },
+ {0x00cf71, 0x00cf8b, EGCB_LVT },
+ {0x00cf8c, 0x00cf8c, EGCB_LV },
+ {0x00cf8d, 0x00cfa7, EGCB_LVT },
+ {0x00cfa8, 0x00cfa8, EGCB_LV },
+ {0x00cfa9, 0x00cfc3, EGCB_LVT },
+ {0x00cfc4, 0x00cfc4, EGCB_LV },
+ {0x00cfc5, 0x00cfdf, EGCB_LVT },
+ {0x00cfe0, 0x00cfe0, EGCB_LV },
+ {0x00cfe1, 0x00cffb, EGCB_LVT },
+ {0x00cffc, 0x00cffc, EGCB_LV },
+ {0x00cffd, 0x00d017, EGCB_LVT },
+ {0x00d018, 0x00d018, EGCB_LV },
+ {0x00d019, 0x00d033, EGCB_LVT },
+ {0x00d034, 0x00d034, EGCB_LV },
+ {0x00d035, 0x00d04f, EGCB_LVT },
+ {0x00d050, 0x00d050, EGCB_LV },
+ {0x00d051, 0x00d06b, EGCB_LVT },
+ {0x00d06c, 0x00d06c, EGCB_LV },
+ {0x00d06d, 0x00d087, EGCB_LVT },
+ {0x00d088, 0x00d088, EGCB_LV },
+ {0x00d089, 0x00d0a3, EGCB_LVT },
+ {0x00d0a4, 0x00d0a4, EGCB_LV },
+ {0x00d0a5, 0x00d0bf, EGCB_LVT },
+ {0x00d0c0, 0x00d0c0, EGCB_LV },
+ {0x00d0c1, 0x00d0db, EGCB_LVT },
+ {0x00d0dc, 0x00d0dc, EGCB_LV },
+ {0x00d0dd, 0x00d0f7, EGCB_LVT },
+ {0x00d0f8, 0x00d0f8, EGCB_LV },
+ {0x00d0f9, 0x00d113, EGCB_LVT },
+ {0x00d114, 0x00d114, EGCB_LV },
+ {0x00d115, 0x00d12f, EGCB_LVT },
+ {0x00d130, 0x00d130, EGCB_LV },
+ {0x00d131, 0x00d14b, EGCB_LVT },
+ {0x00d14c, 0x00d14c, EGCB_LV },
+ {0x00d14d, 0x00d167, EGCB_LVT },
+ {0x00d168, 0x00d168, EGCB_LV },
+ {0x00d169, 0x00d183, EGCB_LVT },
+ {0x00d184, 0x00d184, EGCB_LV },
+ {0x00d185, 0x00d19f, EGCB_LVT },
+ {0x00d1a0, 0x00d1a0, EGCB_LV },
+ {0x00d1a1, 0x00d1bb, EGCB_LVT },
+ {0x00d1bc, 0x00d1bc, EGCB_LV },
+ {0x00d1bd, 0x00d1d7, EGCB_LVT },
+ {0x00d1d8, 0x00d1d8, EGCB_LV },
+ {0x00d1d9, 0x00d1f3, EGCB_LVT },
+ {0x00d1f4, 0x00d1f4, EGCB_LV },
+ {0x00d1f5, 0x00d20f, EGCB_LVT },
+ {0x00d210, 0x00d210, EGCB_LV },
+ {0x00d211, 0x00d22b, EGCB_LVT },
+ {0x00d22c, 0x00d22c, EGCB_LV },
+ {0x00d22d, 0x00d247, EGCB_LVT },
+ {0x00d248, 0x00d248, EGCB_LV },
+ {0x00d249, 0x00d263, EGCB_LVT },
+ {0x00d264, 0x00d264, EGCB_LV },
+ {0x00d265, 0x00d27f, EGCB_LVT },
+ {0x00d280, 0x00d280, EGCB_LV },
+ {0x00d281, 0x00d29b, EGCB_LVT },
+ {0x00d29c, 0x00d29c, EGCB_LV },
+ {0x00d29d, 0x00d2b7, EGCB_LVT },
+ {0x00d2b8, 0x00d2b8, EGCB_LV },
+ {0x00d2b9, 0x00d2d3, EGCB_LVT },
+ {0x00d2d4, 0x00d2d4, EGCB_LV },
+ {0x00d2d5, 0x00d2ef, EGCB_LVT },
+ {0x00d2f0, 0x00d2f0, EGCB_LV },
+ {0x00d2f1, 0x00d30b, EGCB_LVT },
+ {0x00d30c, 0x00d30c, EGCB_LV },
+ {0x00d30d, 0x00d327, EGCB_LVT },
+ {0x00d328, 0x00d328, EGCB_LV },
+ {0x00d329, 0x00d343, EGCB_LVT },
+ {0x00d344, 0x00d344, EGCB_LV },
+ {0x00d345, 0x00d35f, EGCB_LVT },
+ {0x00d360, 0x00d360, EGCB_LV },
+ {0x00d361, 0x00d37b, EGCB_LVT },
+ {0x00d37c, 0x00d37c, EGCB_LV },
+ {0x00d37d, 0x00d397, EGCB_LVT },
+ {0x00d398, 0x00d398, EGCB_LV },
+ {0x00d399, 0x00d3b3, EGCB_LVT },
+ {0x00d3b4, 0x00d3b4, EGCB_LV },
+ {0x00d3b5, 0x00d3cf, EGCB_LVT },
+ {0x00d3d0, 0x00d3d0, EGCB_LV },
+ {0x00d3d1, 0x00d3eb, EGCB_LVT },
+ {0x00d3ec, 0x00d3ec, EGCB_LV },
+ {0x00d3ed, 0x00d407, EGCB_LVT },
+ {0x00d408, 0x00d408, EGCB_LV },
+ {0x00d409, 0x00d423, EGCB_LVT },
+ {0x00d424, 0x00d424, EGCB_LV },
+ {0x00d425, 0x00d43f, EGCB_LVT },
+ {0x00d440, 0x00d440, EGCB_LV },
+ {0x00d441, 0x00d45b, EGCB_LVT },
+ {0x00d45c, 0x00d45c, EGCB_LV },
+ {0x00d45d, 0x00d477, EGCB_LVT },
+ {0x00d478, 0x00d478, EGCB_LV },
+ {0x00d479, 0x00d493, EGCB_LVT },
+ {0x00d494, 0x00d494, EGCB_LV },
+ {0x00d495, 0x00d4af, EGCB_LVT },
+ {0x00d4b0, 0x00d4b0, EGCB_LV },
+ {0x00d4b1, 0x00d4cb, EGCB_LVT },
+ {0x00d4cc, 0x00d4cc, EGCB_LV },
+ {0x00d4cd, 0x00d4e7, EGCB_LVT },
+ {0x00d4e8, 0x00d4e8, EGCB_LV },
+ {0x00d4e9, 0x00d503, EGCB_LVT },
+ {0x00d504, 0x00d504, EGCB_LV },
+ {0x00d505, 0x00d51f, EGCB_LVT },
+ {0x00d520, 0x00d520, EGCB_LV },
+ {0x00d521, 0x00d53b, EGCB_LVT },
+ {0x00d53c, 0x00d53c, EGCB_LV },
+ {0x00d53d, 0x00d557, EGCB_LVT },
+ {0x00d558, 0x00d558, EGCB_LV },
+ {0x00d559, 0x00d573, EGCB_LVT },
+ {0x00d574, 0x00d574, EGCB_LV },
+ {0x00d575, 0x00d58f, EGCB_LVT },
+ {0x00d590, 0x00d590, EGCB_LV },
+ {0x00d591, 0x00d5ab, EGCB_LVT },
+ {0x00d5ac, 0x00d5ac, EGCB_LV },
+ {0x00d5ad, 0x00d5c7, EGCB_LVT },
+ {0x00d5c8, 0x00d5c8, EGCB_LV },
+ {0x00d5c9, 0x00d5e3, EGCB_LVT },
+ {0x00d5e4, 0x00d5e4, EGCB_LV },
+ {0x00d5e5, 0x00d5ff, EGCB_LVT },
+ {0x00d600, 0x00d600, EGCB_LV },
+ {0x00d601, 0x00d61b, EGCB_LVT },
+ {0x00d61c, 0x00d61c, EGCB_LV },
+ {0x00d61d, 0x00d637, EGCB_LVT },
+ {0x00d638, 0x00d638, EGCB_LV },
+ {0x00d639, 0x00d653, EGCB_LVT },
+ {0x00d654, 0x00d654, EGCB_LV },
+ {0x00d655, 0x00d66f, EGCB_LVT },
+ {0x00d670, 0x00d670, EGCB_LV },
+ {0x00d671, 0x00d68b, EGCB_LVT },
+ {0x00d68c, 0x00d68c, EGCB_LV },
+ {0x00d68d, 0x00d6a7, EGCB_LVT },
+ {0x00d6a8, 0x00d6a8, EGCB_LV },
+ {0x00d6a9, 0x00d6c3, EGCB_LVT },
+ {0x00d6c4, 0x00d6c4, EGCB_LV },
+ {0x00d6c5, 0x00d6df, EGCB_LVT },
+ {0x00d6e0, 0x00d6e0, EGCB_LV },
+ {0x00d6e1, 0x00d6fb, EGCB_LVT },
+ {0x00d6fc, 0x00d6fc, EGCB_LV },
+ {0x00d6fd, 0x00d717, EGCB_LVT },
+ {0x00d718, 0x00d718, EGCB_LV },
+ {0x00d719, 0x00d733, EGCB_LVT },
+ {0x00d734, 0x00d734, EGCB_LV },
+ {0x00d735, 0x00d74f, EGCB_LVT },
+ {0x00d750, 0x00d750, EGCB_LV },
+ {0x00d751, 0x00d76b, EGCB_LVT },
+ {0x00d76c, 0x00d76c, EGCB_LV },
+ {0x00d76d, 0x00d787, EGCB_LVT },
+ {0x00d788, 0x00d788, EGCB_LV },
+ {0x00d789, 0x00d7a3, EGCB_LVT },
+ {0x00d7b0, 0x00d7c6, EGCB_V },
+ {0x00d7cb, 0x00d7fb, EGCB_T },
+ {0x00d800, 0x00dfff, EGCB_Control },
+ {0x00fb1e, 0x00fb1e, EGCB_Extend },
+ {0x00fe00, 0x00fe0f, EGCB_Extend },
+ {0x00fe20, 0x00fe2f, EGCB_Extend },
+ {0x00feff, 0x00feff, EGCB_Control },
+ {0x00ff9e, 0x00ff9f, EGCB_Extend },
+ {0x00fff0, 0x00fffb, EGCB_Control },
+ {0x0101fd, 0x0101fd, EGCB_Extend },
+ {0x0102e0, 0x0102e0, EGCB_Extend },
+ {0x010376, 0x01037a, EGCB_Extend },
+ {0x010a01, 0x010a03, EGCB_Extend },
+ {0x010a05, 0x010a06, EGCB_Extend },
+ {0x010a0c, 0x010a0f, EGCB_Extend },
+ {0x010a38, 0x010a3a, EGCB_Extend },
+ {0x010a3f, 0x010a3f, EGCB_Extend },
+ {0x010ae5, 0x010ae6, EGCB_Extend },
+ {0x011000, 0x011000, EGCB_SpacingMark },
+ {0x011001, 0x011001, EGCB_Extend },
+ {0x011002, 0x011002, EGCB_SpacingMark },
+ {0x011038, 0x011046, EGCB_Extend },
+ {0x01107f, 0x011081, EGCB_Extend },
+ {0x011082, 0x011082, EGCB_SpacingMark },
+ {0x0110b0, 0x0110b2, EGCB_SpacingMark },
+ {0x0110b3, 0x0110b6, EGCB_Extend },
+ {0x0110b7, 0x0110b8, EGCB_SpacingMark },
+ {0x0110b9, 0x0110ba, EGCB_Extend },
+ {0x0110bd, 0x0110bd, EGCB_Prepend },
+ {0x011100, 0x011102, EGCB_Extend },
+ {0x011127, 0x01112b, EGCB_Extend },
+ {0x01112c, 0x01112c, EGCB_SpacingMark },
+ {0x01112d, 0x011134, EGCB_Extend },
+ {0x011173, 0x011173, EGCB_Extend },
+ {0x011180, 0x011181, EGCB_Extend },
+ {0x011182, 0x011182, EGCB_SpacingMark },
+ {0x0111b3, 0x0111b5, EGCB_SpacingMark },
+ {0x0111b6, 0x0111be, EGCB_Extend },
+ {0x0111bf, 0x0111c0, EGCB_SpacingMark },
+ {0x0111c2, 0x0111c3, EGCB_Prepend },
+ {0x0111ca, 0x0111cc, EGCB_Extend },
+ {0x01122c, 0x01122e, EGCB_SpacingMark },
+ {0x01122f, 0x011231, EGCB_Extend },
+ {0x011232, 0x011233, EGCB_SpacingMark },
+ {0x011234, 0x011234, EGCB_Extend },
+ {0x011235, 0x011235, EGCB_SpacingMark },
+ {0x011236, 0x011237, EGCB_Extend },
+ {0x01123e, 0x01123e, EGCB_Extend },
+ {0x0112df, 0x0112df, EGCB_Extend },
+ {0x0112e0, 0x0112e2, EGCB_SpacingMark },
+ {0x0112e3, 0x0112ea, EGCB_Extend },
+ {0x011300, 0x011301, EGCB_Extend },
+ {0x011302, 0x011303, EGCB_SpacingMark },
+ {0x01133c, 0x01133c, EGCB_Extend },
+ {0x01133e, 0x01133e, EGCB_Extend },
+ {0x01133f, 0x01133f, EGCB_SpacingMark },
+ {0x011340, 0x011340, EGCB_Extend },
+ {0x011341, 0x011344, EGCB_SpacingMark },
+ {0x011347, 0x011348, EGCB_SpacingMark },
+ {0x01134b, 0x01134d, EGCB_SpacingMark },
+ {0x011357, 0x011357, EGCB_Extend },
+ {0x011362, 0x011363, EGCB_SpacingMark },
+ {0x011366, 0x01136c, EGCB_Extend },
+ {0x011370, 0x011374, EGCB_Extend },
+ {0x011435, 0x011437, EGCB_SpacingMark },
+ {0x011438, 0x01143f, EGCB_Extend },
+ {0x011440, 0x011441, EGCB_SpacingMark },
+ {0x011442, 0x011444, EGCB_Extend },
+ {0x011445, 0x011445, EGCB_SpacingMark },
+ {0x011446, 0x011446, EGCB_Extend },
+ {0x0114b0, 0x0114b0, EGCB_Extend },
+ {0x0114b1, 0x0114b2, EGCB_SpacingMark },
+ {0x0114b3, 0x0114b8, EGCB_Extend },
+ {0x0114b9, 0x0114b9, EGCB_SpacingMark },
+ {0x0114ba, 0x0114ba, EGCB_Extend },
+ {0x0114bb, 0x0114bc, EGCB_SpacingMark },
+ {0x0114bd, 0x0114bd, EGCB_Extend },
+ {0x0114be, 0x0114be, EGCB_SpacingMark },
+ {0x0114bf, 0x0114c0, EGCB_Extend },
+ {0x0114c1, 0x0114c1, EGCB_SpacingMark },
+ {0x0114c2, 0x0114c3, EGCB_Extend },
+ {0x0115af, 0x0115af, EGCB_Extend },
+ {0x0115b0, 0x0115b1, EGCB_SpacingMark },
+ {0x0115b2, 0x0115b5, EGCB_Extend },
+ {0x0115b8, 0x0115bb, EGCB_SpacingMark },
+ {0x0115bc, 0x0115bd, EGCB_Extend },
+ {0x0115be, 0x0115be, EGCB_SpacingMark },
+ {0x0115bf, 0x0115c0, EGCB_Extend },
+ {0x0115dc, 0x0115dd, EGCB_Extend },
+ {0x011630, 0x011632, EGCB_SpacingMark },
+ {0x011633, 0x01163a, EGCB_Extend },
+ {0x01163b, 0x01163c, EGCB_SpacingMark },
+ {0x01163d, 0x01163d, EGCB_Extend },
+ {0x01163e, 0x01163e, EGCB_SpacingMark },
+ {0x01163f, 0x011640, EGCB_Extend },
+ {0x0116ab, 0x0116ab, EGCB_Extend },
+ {0x0116ac, 0x0116ac, EGCB_SpacingMark },
+ {0x0116ad, 0x0116ad, EGCB_Extend },
+ {0x0116ae, 0x0116af, EGCB_SpacingMark },
+ {0x0116b0, 0x0116b5, EGCB_Extend },
+ {0x0116b6, 0x0116b6, EGCB_SpacingMark },
+ {0x0116b7, 0x0116b7, EGCB_Extend },
+ {0x01171d, 0x01171f, EGCB_Extend },
+ {0x011720, 0x011721, EGCB_SpacingMark },
+ {0x011722, 0x011725, EGCB_Extend },
+ {0x011726, 0x011726, EGCB_SpacingMark },
+ {0x011727, 0x01172b, EGCB_Extend },
+ {0x011a01, 0x011a06, EGCB_Extend },
+ {0x011a07, 0x011a08, EGCB_SpacingMark },
+ {0x011a09, 0x011a0a, EGCB_Extend },
+ {0x011a33, 0x011a38, EGCB_Extend },
+ {0x011a39, 0x011a39, EGCB_SpacingMark },
+ {0x011a3a, 0x011a3a, EGCB_Prepend },
+ {0x011a3b, 0x011a3e, EGCB_Extend },
+ {0x011a47, 0x011a47, EGCB_Extend },
+ {0x011a51, 0x011a56, EGCB_Extend },
+ {0x011a57, 0x011a58, EGCB_SpacingMark },
+ {0x011a59, 0x011a5b, EGCB_Extend },
+ {0x011a86, 0x011a89, EGCB_Prepend },
+ {0x011a8a, 0x011a96, EGCB_Extend },
+ {0x011a97, 0x011a97, EGCB_SpacingMark },
+ {0x011a98, 0x011a99, EGCB_Extend },
+ {0x011c2f, 0x011c2f, EGCB_SpacingMark },
+ {0x011c30, 0x011c36, EGCB_Extend },
+ {0x011c38, 0x011c3d, EGCB_Extend },
+ {0x011c3e, 0x011c3e, EGCB_SpacingMark },
+ {0x011c3f, 0x011c3f, EGCB_Extend },
+ {0x011c92, 0x011ca7, EGCB_Extend },
+ {0x011ca9, 0x011ca9, EGCB_SpacingMark },
+ {0x011caa, 0x011cb0, EGCB_Extend },
+ {0x011cb1, 0x011cb1, EGCB_SpacingMark },
+ {0x011cb2, 0x011cb3, EGCB_Extend },
+ {0x011cb4, 0x011cb4, EGCB_SpacingMark },
+ {0x011cb5, 0x011cb6, EGCB_Extend },
+ {0x011d31, 0x011d36, EGCB_Extend },
+ {0x011d3a, 0x011d3a, EGCB_Extend },
+ {0x011d3c, 0x011d3d, EGCB_Extend },
+ {0x011d3f, 0x011d45, EGCB_Extend },
+ {0x011d46, 0x011d46, EGCB_Prepend },
+ {0x011d47, 0x011d47, EGCB_Extend },
+ {0x016af0, 0x016af4, EGCB_Extend },
+ {0x016b30, 0x016b36, EGCB_Extend },
+ {0x016f51, 0x016f7e, EGCB_SpacingMark },
+ {0x016f8f, 0x016f92, EGCB_Extend },
+ {0x01bc9d, 0x01bc9e, EGCB_Extend },
+ {0x01bca0, 0x01bca3, EGCB_Control },
+ {0x01d165, 0x01d165, EGCB_Extend },
+ {0x01d166, 0x01d166, EGCB_SpacingMark },
+ {0x01d167, 0x01d169, EGCB_Extend },
+ {0x01d16d, 0x01d16d, EGCB_SpacingMark },
+ {0x01d16e, 0x01d172, EGCB_Extend },
+ {0x01d173, 0x01d17a, EGCB_Control },
+ {0x01d17b, 0x01d182, EGCB_Extend },
+ {0x01d185, 0x01d18b, EGCB_Extend },
+ {0x01d1aa, 0x01d1ad, EGCB_Extend },
+ {0x01d242, 0x01d244, EGCB_Extend },
+ {0x01da00, 0x01da36, EGCB_Extend },
+ {0x01da3b, 0x01da6c, EGCB_Extend },
+ {0x01da75, 0x01da75, EGCB_Extend },
+ {0x01da84, 0x01da84, EGCB_Extend },
+ {0x01da9b, 0x01da9f, EGCB_Extend },
+ {0x01daa1, 0x01daaf, EGCB_Extend },
+ {0x01e000, 0x01e006, EGCB_Extend },
+ {0x01e008, 0x01e018, EGCB_Extend },
+ {0x01e01b, 0x01e021, EGCB_Extend },
+ {0x01e023, 0x01e024, EGCB_Extend },
+ {0x01e026, 0x01e02a, EGCB_Extend },
+ {0x01e8d0, 0x01e8d6, EGCB_Extend },
+ {0x01e944, 0x01e94a, EGCB_Extend },
+ {0x01f1e6, 0x01f1ff, EGCB_Regional_Indicator },
+ {0x01f308, 0x01f308, EGCB_Glue_After_Zwj },
+ {0x01f33e, 0x01f33e, EGCB_Glue_After_Zwj },
+ {0x01f373, 0x01f373, EGCB_Glue_After_Zwj },
+ {0x01f385, 0x01f385, EGCB_E_Base },
+ {0x01f393, 0x01f393, EGCB_Glue_After_Zwj },
+ {0x01f3a4, 0x01f3a4, EGCB_Glue_After_Zwj },
+ {0x01f3a8, 0x01f3a8, EGCB_Glue_After_Zwj },
+ {0x01f3c2, 0x01f3c4, EGCB_E_Base },
+ {0x01f3c7, 0x01f3c7, EGCB_E_Base },
+ {0x01f3ca, 0x01f3cc, EGCB_E_Base },
+ {0x01f3eb, 0x01f3eb, EGCB_Glue_After_Zwj },
+ {0x01f3ed, 0x01f3ed, EGCB_Glue_After_Zwj },
+ {0x01f3fb, 0x01f3ff, EGCB_E_Modifier },
+ {0x01f442, 0x01f443, EGCB_E_Base },
+ {0x01f446, 0x01f450, EGCB_E_Base },
+ {0x01f466, 0x01f469, EGCB_E_Base_GAZ },
+ {0x01f46e, 0x01f46e, EGCB_E_Base },
+ {0x01f470, 0x01f478, EGCB_E_Base },
+ {0x01f47c, 0x01f47c, EGCB_E_Base },
+ {0x01f481, 0x01f483, EGCB_E_Base },
+ {0x01f485, 0x01f487, EGCB_E_Base },
+ {0x01f48b, 0x01f48b, EGCB_Glue_After_Zwj },
+ {0x01f4aa, 0x01f4aa, EGCB_E_Base },
+ {0x01f4bb, 0x01f4bc, EGCB_Glue_After_Zwj },
+ {0x01f527, 0x01f527, EGCB_Glue_After_Zwj },
+ {0x01f52c, 0x01f52c, EGCB_Glue_After_Zwj },
+ {0x01f574, 0x01f575, EGCB_E_Base },
+ {0x01f57a, 0x01f57a, EGCB_E_Base },
+ {0x01f590, 0x01f590, EGCB_E_Base },
+ {0x01f595, 0x01f596, EGCB_E_Base },
+ {0x01f5e8, 0x01f5e8, EGCB_Glue_After_Zwj },
+ {0x01f645, 0x01f647, EGCB_E_Base },
+ {0x01f64b, 0x01f64f, EGCB_E_Base },
+ {0x01f680, 0x01f680, EGCB_Glue_After_Zwj },
+ {0x01f692, 0x01f692, EGCB_Glue_After_Zwj },
+ {0x01f6a3, 0x01f6a3, EGCB_E_Base },
+ {0x01f6b4, 0x01f6b6, EGCB_E_Base },
+ {0x01f6c0, 0x01f6c0, EGCB_E_Base },
+ {0x01f6cc, 0x01f6cc, EGCB_E_Base },
+ {0x01f918, 0x01f91c, EGCB_E_Base },
+ {0x01f91e, 0x01f91f, EGCB_E_Base },
+ {0x01f926, 0x01f926, EGCB_E_Base },
+ {0x01f930, 0x01f939, EGCB_E_Base },
+ {0x01f93d, 0x01f93e, EGCB_E_Base },
+ {0x01f9d1, 0x01f9dd, EGCB_E_Base },
+ {0x0e0000, 0x0e001f, EGCB_Control },
+ {0x0e0020, 0x0e007f, EGCB_Extend },
+ {0x0e0080, 0x0e00ff, EGCB_Control },
+ {0x0e0100, 0x0e01ef, EGCB_Extend },
+ {0x0e01f0, 0x0e0fff, EGCB_Control }
+};
diff --git a/ext/mbstring/oniguruma/src/unicode_fold1_key.c b/ext/mbstring/oniguruma/src/unicode_fold1_key.c
index 21512118e6..ffaa661726 100644
--- a/ext/mbstring/oniguruma/src/unicode_fold1_key.c
+++ b/ext/mbstring/oniguruma/src/unicode_fold1_key.c
@@ -69,7 +69,7 @@ __attribute__ ((__gnu_inline__))
int
unicode_fold1_key(OnigCodePoint codes[])
{
- static const int wordlist[] =
+ static const short int wordlist[] =
{
-1, -1, -1, -1, -1, -1,
diff --git a/ext/mbstring/oniguruma/src/unicode_fold2_key.c b/ext/mbstring/oniguruma/src/unicode_fold2_key.c
index 07cfa4ec5e..8a45c9d96f 100644
--- a/ext/mbstring/oniguruma/src/unicode_fold2_key.c
+++ b/ext/mbstring/oniguruma/src/unicode_fold2_key.c
@@ -69,7 +69,7 @@ __attribute__ ((__gnu_inline__))
int
unicode_fold2_key(OnigCodePoint codes[])
{
- static const int wordlist[] =
+ static const short int wordlist[] =
{
101,
diff --git a/ext/mbstring/oniguruma/src/unicode_fold3_key.c b/ext/mbstring/oniguruma/src/unicode_fold3_key.c
index 1b4d9d41b7..deb9d222e6 100644
--- a/ext/mbstring/oniguruma/src/unicode_fold3_key.c
+++ b/ext/mbstring/oniguruma/src/unicode_fold3_key.c
@@ -69,7 +69,7 @@ __attribute__ ((__gnu_inline__))
int
unicode_fold3_key(OnigCodePoint codes[])
{
- static const int wordlist[] =
+ static const short int wordlist[] =
{
62,
diff --git a/ext/mbstring/oniguruma/src/unicode_property_data.c b/ext/mbstring/oniguruma/src/unicode_property_data.c
index 4ca438fea6..b25392b846 100644
--- a/ext/mbstring/oniguruma/src/unicode_property_data.c
+++ b/ext/mbstring/oniguruma/src/unicode_property_data.c
@@ -1,5 +1,5 @@
-/* ANSI-C code produced by gperf version 3.0.3 */
-/* Command-line: /Library/Developer/CommandLineTools/usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case -N unicode_lookup_property_name --output-file gperf.tmp unicode_property_data.gperf */
+/* ANSI-C code produced by gperf version 3.0.4 */
+/* Command-line: gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf.tmp unicode_property_data.gperf */
/* Computed positions: -k'1-3,5-6,12,16,$' */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -4766,12 +4766,102 @@ CR_ASCII[] = { 1,
}; /* END of CR_ASCII */
+/* PROPERTY: 'ASCII_Hex_Digit': Binary Property */
+#define CR_ASCII_Hex_Digit CR_XDigit
+
+/* PROPERTY: 'Ahom': Script */
+static const OnigCodePoint
+CR_Ahom[] = { 3,
+0x11700, 0x11719,
+0x1171d, 0x1172b,
+0x11730, 0x1173f,
+}; /* END of CR_Ahom */
+
+/* PROPERTY: 'Alphabetic': Derived Property */
+#define CR_Alphabetic CR_Alpha
+
+/* PROPERTY: 'Anatolian_Hieroglyphs': Script */
+static const OnigCodePoint
+CR_Anatolian_Hieroglyphs[] = { 1,
+0x14400, 0x14646,
+}; /* END of CR_Anatolian_Hieroglyphs */
+
/* PROPERTY: 'Any': - */
static const OnigCodePoint
CR_Any[] = { 1,
0x0000, 0x10ffff,
}; /* END of CR_Any */
+/* PROPERTY: 'Arabic': Script */
+static const OnigCodePoint
+CR_Arabic[] = { 54,
+0x0600, 0x0604,
+0x0606, 0x060b,
+0x060d, 0x061a,
+0x061e, 0x061e,
+0x0620, 0x063f,
+0x0641, 0x064a,
+0x0656, 0x066f,
+0x0671, 0x06dc,
+0x06de, 0x06ff,
+0x0750, 0x077f,
+0x08a0, 0x08b4,
+0x08e3, 0x08ff,
+0xfb50, 0xfbc1,
+0xfbd3, 0xfd3d,
+0xfd50, 0xfd8f,
+0xfd92, 0xfdc7,
+0xfdf0, 0xfdfd,
+0xfe70, 0xfe74,
+0xfe76, 0xfefc,
+0x10e60, 0x10e7e,
+0x1ee00, 0x1ee03,
+0x1ee05, 0x1ee1f,
+0x1ee21, 0x1ee22,
+0x1ee24, 0x1ee24,
+0x1ee27, 0x1ee27,
+0x1ee29, 0x1ee32,
+0x1ee34, 0x1ee37,
+0x1ee39, 0x1ee39,
+0x1ee3b, 0x1ee3b,
+0x1ee42, 0x1ee42,
+0x1ee47, 0x1ee47,
+0x1ee49, 0x1ee49,
+0x1ee4b, 0x1ee4b,
+0x1ee4d, 0x1ee4f,
+0x1ee51, 0x1ee52,
+0x1ee54, 0x1ee54,
+0x1ee57, 0x1ee57,
+0x1ee59, 0x1ee59,
+0x1ee5b, 0x1ee5b,
+0x1ee5d, 0x1ee5d,
+0x1ee5f, 0x1ee5f,
+0x1ee61, 0x1ee62,
+0x1ee64, 0x1ee64,
+0x1ee67, 0x1ee6a,
+0x1ee6c, 0x1ee72,
+0x1ee74, 0x1ee77,
+0x1ee79, 0x1ee7c,
+0x1ee7e, 0x1ee7e,
+0x1ee80, 0x1ee89,
+0x1ee8b, 0x1ee9b,
+0x1eea1, 0x1eea3,
+0x1eea5, 0x1eea9,
+0x1eeab, 0x1eebb,
+0x1eef0, 0x1eef1,
+}; /* END of CR_Arabic */
+
+/* PROPERTY: 'Armenian': Script */
+static const OnigCodePoint
+CR_Armenian[] = { 6,
+0x0531, 0x0556,
+0x0559, 0x055f,
+0x0561, 0x0587,
+0x058a, 0x058a,
+0x058d, 0x058f,
+0xfb13, 0xfb17,
+}; /* END of CR_Armenian */
+
/* PROPERTY: 'Assigned': - */
static const OnigCodePoint
CR_Assigned[] = { 613,
@@ -5390,6 +5480,104 @@ CR_Assigned[] = { 613,
0x100000, 0x10fffd,
}; /* END of CR_Assigned */
+/* PROPERTY: 'Avestan': Script */
+static const OnigCodePoint
+CR_Avestan[] = { 2,
+0x10b00, 0x10b35,
+0x10b39, 0x10b3f,
+}; /* END of CR_Avestan */
+
+/* PROPERTY: 'Balinese': Script */
+static const OnigCodePoint
+CR_Balinese[] = { 2,
+0x1b00, 0x1b4b,
+0x1b50, 0x1b7c,
+}; /* END of CR_Balinese */
+
+/* PROPERTY: 'Bamum': Script */
+static const OnigCodePoint
+CR_Bamum[] = { 2,
+0xa6a0, 0xa6f7,
+0x16800, 0x16a38,
+}; /* END of CR_Bamum */
+
+/* PROPERTY: 'Bassa_Vah': Script */
+static const OnigCodePoint
+CR_Bassa_Vah[] = { 2,
+0x16ad0, 0x16aed,
+0x16af0, 0x16af5,
+}; /* END of CR_Bassa_Vah */
+
+/* PROPERTY: 'Batak': Script */
+static const OnigCodePoint
+CR_Batak[] = { 2,
+0x1bc0, 0x1bf3,
+0x1bfc, 0x1bff,
+}; /* END of CR_Batak */
+
+/* PROPERTY: 'Bengali': Script */
+static const OnigCodePoint
+CR_Bengali[] = { 14,
+0x0980, 0x0983,
+0x0985, 0x098c,
+0x098f, 0x0990,
+0x0993, 0x09a8,
+0x09aa, 0x09b0,
+0x09b2, 0x09b2,
+0x09b6, 0x09b9,
+0x09bc, 0x09c4,
+0x09c7, 0x09c8,
+0x09cb, 0x09ce,
+0x09d7, 0x09d7,
+0x09dc, 0x09dd,
+0x09df, 0x09e3,
+0x09e6, 0x09fb,
+}; /* END of CR_Bengali */
+
+/* PROPERTY: 'Bidi_Control': Binary Property */
+static const OnigCodePoint
+CR_Bidi_Control[] = { 4,
+0x061c, 0x061c,
+0x200e, 0x200f,
+0x202a, 0x202e,
+0x2066, 0x2069,
+}; /* END of CR_Bidi_Control */
+
+/* PROPERTY: 'Bopomofo': Script */
+static const OnigCodePoint
+CR_Bopomofo[] = { 3,
+0x02ea, 0x02eb,
+0x3105, 0x312d,
+0x31a0, 0x31ba,
+}; /* END of CR_Bopomofo */
+
+/* PROPERTY: 'Brahmi': Script */
+static const OnigCodePoint
+CR_Brahmi[] = { 3,
+0x11000, 0x1104d,
+0x11052, 0x1106f,
+0x1107f, 0x1107f,
+}; /* END of CR_Brahmi */
+
+/* PROPERTY: 'Braille': Script */
+static const OnigCodePoint
+CR_Braille[] = { 1,
+0x2800, 0x28ff,
+}; /* END of CR_Braille */
+
+/* PROPERTY: 'Buginese': Script */
+static const OnigCodePoint
+CR_Buginese[] = { 2,
+0x1a00, 0x1a1b,
+0x1a1e, 0x1a1f,
+}; /* END of CR_Buginese */
+
+/* PROPERTY: 'Buhid': Script */
+static const OnigCodePoint
+CR_Buhid[] = { 1,
+0x1740, 0x1753,
+}; /* END of CR_Buhid */
+
/* PROPERTY: 'C': Major Category */
static const OnigCodePoint
CR_C[] = { 616,
@@ -6011,6 +6199,513 @@ CR_C[] = { 616,
0xe01f0, 0x10ffff,
}; /* END of CR_C */
+/* PROPERTY: 'Canadian_Aboriginal': Script */
+static const OnigCodePoint
+CR_Canadian_Aboriginal[] = { 2,
+0x1400, 0x167f,
+0x18b0, 0x18f5,
+}; /* END of CR_Canadian_Aboriginal */
+
+/* PROPERTY: 'Carian': Script */
+static const OnigCodePoint
+CR_Carian[] = { 1,
+0x102a0, 0x102d0,
+}; /* END of CR_Carian */
+
+/* PROPERTY: 'Case_Ignorable': Derived Property */
+static const OnigCodePoint
+CR_Case_Ignorable[] = { 346,
+0x0027, 0x0027,
+0x002e, 0x002e,
+0x003a, 0x003a,
+0x005e, 0x005e,
+0x0060, 0x0060,
+0x00a8, 0x00a8,
+0x00ad, 0x00ad,
+0x00af, 0x00af,
+0x00b4, 0x00b4,
+0x00b7, 0x00b8,
+0x02b0, 0x036f,
+0x0374, 0x0375,
+0x037a, 0x037a,
+0x0384, 0x0385,
+0x0387, 0x0387,
+0x0483, 0x0489,
+0x0559, 0x0559,
+0x0591, 0x05bd,
+0x05bf, 0x05bf,
+0x05c1, 0x05c2,
+0x05c4, 0x05c5,
+0x05c7, 0x05c7,
+0x05f4, 0x05f4,
+0x0600, 0x0605,
+0x0610, 0x061a,
+0x061c, 0x061c,
+0x0640, 0x0640,
+0x064b, 0x065f,
+0x0670, 0x0670,
+0x06d6, 0x06dd,
+0x06df, 0x06e8,
+0x06ea, 0x06ed,
+0x070f, 0x070f,
+0x0711, 0x0711,
+0x0730, 0x074a,
+0x07a6, 0x07b0,
+0x07eb, 0x07f5,
+0x07fa, 0x07fa,
+0x0816, 0x082d,
+0x0859, 0x085b,
+0x08e3, 0x0902,
+0x093a, 0x093a,
+0x093c, 0x093c,
+0x0941, 0x0948,
+0x094d, 0x094d,
+0x0951, 0x0957,
+0x0962, 0x0963,
+0x0971, 0x0971,
+0x0981, 0x0981,
+0x09bc, 0x09bc,
+0x09c1, 0x09c4,
+0x09cd, 0x09cd,
+0x09e2, 0x09e3,
+0x0a01, 0x0a02,
+0x0a3c, 0x0a3c,
+0x0a41, 0x0a42,
+0x0a47, 0x0a48,
+0x0a4b, 0x0a4d,
+0x0a51, 0x0a51,
+0x0a70, 0x0a71,
+0x0a75, 0x0a75,
+0x0a81, 0x0a82,
+0x0abc, 0x0abc,
+0x0ac1, 0x0ac5,
+0x0ac7, 0x0ac8,
+0x0acd, 0x0acd,
+0x0ae2, 0x0ae3,
+0x0b01, 0x0b01,
+0x0b3c, 0x0b3c,
+0x0b3f, 0x0b3f,
+0x0b41, 0x0b44,
+0x0b4d, 0x0b4d,
+0x0b56, 0x0b56,
+0x0b62, 0x0b63,
+0x0b82, 0x0b82,
+0x0bc0, 0x0bc0,
+0x0bcd, 0x0bcd,
+0x0c00, 0x0c00,
+0x0c3e, 0x0c40,
+0x0c46, 0x0c48,
+0x0c4a, 0x0c4d,
+0x0c55, 0x0c56,
+0x0c62, 0x0c63,
+0x0c81, 0x0c81,
+0x0cbc, 0x0cbc,
+0x0cbf, 0x0cbf,
+0x0cc6, 0x0cc6,
+0x0ccc, 0x0ccd,
+0x0ce2, 0x0ce3,
+0x0d01, 0x0d01,
+0x0d41, 0x0d44,
+0x0d4d, 0x0d4d,
+0x0d62, 0x0d63,
+0x0dca, 0x0dca,
+0x0dd2, 0x0dd4,
+0x0dd6, 0x0dd6,
+0x0e31, 0x0e31,
+0x0e34, 0x0e3a,
+0x0e46, 0x0e4e,
+0x0eb1, 0x0eb1,
+0x0eb4, 0x0eb9,
+0x0ebb, 0x0ebc,
+0x0ec6, 0x0ec6,
+0x0ec8, 0x0ecd,
+0x0f18, 0x0f19,
+0x0f35, 0x0f35,
+0x0f37, 0x0f37,
+0x0f39, 0x0f39,
+0x0f71, 0x0f7e,
+0x0f80, 0x0f84,
+0x0f86, 0x0f87,
+0x0f8d, 0x0f97,
+0x0f99, 0x0fbc,
+0x0fc6, 0x0fc6,
+0x102d, 0x1030,
+0x1032, 0x1037,
+0x1039, 0x103a,
+0x103d, 0x103e,
+0x1058, 0x1059,
+0x105e, 0x1060,
+0x1071, 0x1074,
+0x1082, 0x1082,
+0x1085, 0x1086,
+0x108d, 0x108d,
+0x109d, 0x109d,
+0x10fc, 0x10fc,
+0x135d, 0x135f,
+0x1712, 0x1714,
+0x1732, 0x1734,
+0x1752, 0x1753,
+0x1772, 0x1773,
+0x17b4, 0x17b5,
+0x17b7, 0x17bd,
+0x17c6, 0x17c6,
+0x17c9, 0x17d3,
+0x17d7, 0x17d7,
+0x17dd, 0x17dd,
+0x180b, 0x180e,
+0x1843, 0x1843,
+0x18a9, 0x18a9,
+0x1920, 0x1922,
+0x1927, 0x1928,
+0x1932, 0x1932,
+0x1939, 0x193b,
+0x1a17, 0x1a18,
+0x1a1b, 0x1a1b,
+0x1a56, 0x1a56,
+0x1a58, 0x1a5e,
+0x1a60, 0x1a60,
+0x1a62, 0x1a62,
+0x1a65, 0x1a6c,
+0x1a73, 0x1a7c,
+0x1a7f, 0x1a7f,
+0x1aa7, 0x1aa7,
+0x1ab0, 0x1abe,
+0x1b00, 0x1b03,
+0x1b34, 0x1b34,
+0x1b36, 0x1b3a,
+0x1b3c, 0x1b3c,
+0x1b42, 0x1b42,
+0x1b6b, 0x1b73,
+0x1b80, 0x1b81,
+0x1ba2, 0x1ba5,
+0x1ba8, 0x1ba9,
+0x1bab, 0x1bad,
+0x1be6, 0x1be6,
+0x1be8, 0x1be9,
+0x1bed, 0x1bed,
+0x1bef, 0x1bf1,
+0x1c2c, 0x1c33,
+0x1c36, 0x1c37,
+0x1c78, 0x1c7d,
+0x1cd0, 0x1cd2,
+0x1cd4, 0x1ce0,
+0x1ce2, 0x1ce8,
+0x1ced, 0x1ced,
+0x1cf4, 0x1cf4,
+0x1cf8, 0x1cf9,
+0x1d2c, 0x1d6a,
+0x1d78, 0x1d78,
+0x1d9b, 0x1df5,
+0x1dfc, 0x1dff,
+0x1fbd, 0x1fbd,
+0x1fbf, 0x1fc1,
+0x1fcd, 0x1fcf,
+0x1fdd, 0x1fdf,
+0x1fed, 0x1fef,
+0x1ffd, 0x1ffe,
+0x200b, 0x200f,
+0x2018, 0x2019,
+0x2024, 0x2024,
+0x2027, 0x2027,
+0x202a, 0x202e,
+0x2060, 0x2064,
+0x2066, 0x206f,
+0x2071, 0x2071,
+0x207f, 0x207f,
+0x2090, 0x209c,
+0x20d0, 0x20f0,
+0x2c7c, 0x2c7d,
+0x2cef, 0x2cf1,
+0x2d6f, 0x2d6f,
+0x2d7f, 0x2d7f,
+0x2de0, 0x2dff,
+0x2e2f, 0x2e2f,
+0x3005, 0x3005,
+0x302a, 0x302d,
+0x3031, 0x3035,
+0x303b, 0x303b,
+0x3099, 0x309e,
+0x30fc, 0x30fe,
+0xa015, 0xa015,
+0xa4f8, 0xa4fd,
+0xa60c, 0xa60c,
+0xa66f, 0xa672,
+0xa674, 0xa67d,
+0xa67f, 0xa67f,
+0xa69c, 0xa69f,
+0xa6f0, 0xa6f1,
+0xa700, 0xa721,
+0xa770, 0xa770,
+0xa788, 0xa78a,
+0xa7f8, 0xa7f9,
+0xa802, 0xa802,
+0xa806, 0xa806,
+0xa80b, 0xa80b,
+0xa825, 0xa826,
+0xa8c4, 0xa8c4,
+0xa8e0, 0xa8f1,
+0xa926, 0xa92d,
+0xa947, 0xa951,
+0xa980, 0xa982,
+0xa9b3, 0xa9b3,
+0xa9b6, 0xa9b9,
+0xa9bc, 0xa9bc,
+0xa9cf, 0xa9cf,
+0xa9e5, 0xa9e6,
+0xaa29, 0xaa2e,
+0xaa31, 0xaa32,
+0xaa35, 0xaa36,
+0xaa43, 0xaa43,
+0xaa4c, 0xaa4c,
+0xaa70, 0xaa70,
+0xaa7c, 0xaa7c,
+0xaab0, 0xaab0,
+0xaab2, 0xaab4,
+0xaab7, 0xaab8,
+0xaabe, 0xaabf,
+0xaac1, 0xaac1,
+0xaadd, 0xaadd,
+0xaaec, 0xaaed,
+0xaaf3, 0xaaf4,
+0xaaf6, 0xaaf6,
+0xab5b, 0xab5f,
+0xabe5, 0xabe5,
+0xabe8, 0xabe8,
+0xabed, 0xabed,
+0xfb1e, 0xfb1e,
+0xfbb2, 0xfbc1,
+0xfe00, 0xfe0f,
+0xfe13, 0xfe13,
+0xfe20, 0xfe2f,
+0xfe52, 0xfe52,
+0xfe55, 0xfe55,
+0xfeff, 0xfeff,
+0xff07, 0xff07,
+0xff0e, 0xff0e,
+0xff1a, 0xff1a,
+0xff3e, 0xff3e,
+0xff40, 0xff40,
+0xff70, 0xff70,
+0xff9e, 0xff9f,
+0xffe3, 0xffe3,
+0xfff9, 0xfffb,
+0x101fd, 0x101fd,
+0x102e0, 0x102e0,
+0x10376, 0x1037a,
+0x10a01, 0x10a03,
+0x10a05, 0x10a06,
+0x10a0c, 0x10a0f,
+0x10a38, 0x10a3a,
+0x10a3f, 0x10a3f,
+0x10ae5, 0x10ae6,
+0x11001, 0x11001,
+0x11038, 0x11046,
+0x1107f, 0x11081,
+0x110b3, 0x110b6,
+0x110b9, 0x110ba,
+0x110bd, 0x110bd,
+0x11100, 0x11102,
+0x11127, 0x1112b,
+0x1112d, 0x11134,
+0x11173, 0x11173,
+0x11180, 0x11181,
+0x111b6, 0x111be,
+0x111ca, 0x111cc,
+0x1122f, 0x11231,
+0x11234, 0x11234,
+0x11236, 0x11237,
+0x112df, 0x112df,
+0x112e3, 0x112ea,
+0x11300, 0x11301,
+0x1133c, 0x1133c,
+0x11340, 0x11340,
+0x11366, 0x1136c,
+0x11370, 0x11374,
+0x114b3, 0x114b8,
+0x114ba, 0x114ba,
+0x114bf, 0x114c0,
+0x114c2, 0x114c3,
+0x115b2, 0x115b5,
+0x115bc, 0x115bd,
+0x115bf, 0x115c0,
+0x115dc, 0x115dd,
+0x11633, 0x1163a,
+0x1163d, 0x1163d,
+0x1163f, 0x11640,
+0x116ab, 0x116ab,
+0x116ad, 0x116ad,
+0x116b0, 0x116b5,
+0x116b7, 0x116b7,
+0x1171d, 0x1171f,
+0x11722, 0x11725,
+0x11727, 0x1172b,
+0x16af0, 0x16af4,
+0x16b30, 0x16b36,
+0x16b40, 0x16b43,
+0x16f8f, 0x16f9f,
+0x1bc9d, 0x1bc9e,
+0x1bca0, 0x1bca3,
+0x1d167, 0x1d169,
+0x1d173, 0x1d182,
+0x1d185, 0x1d18b,
+0x1d1aa, 0x1d1ad,
+0x1d242, 0x1d244,
+0x1da00, 0x1da36,
+0x1da3b, 0x1da6c,
+0x1da75, 0x1da75,
+0x1da84, 0x1da84,
+0x1da9b, 0x1da9f,
+0x1daa1, 0x1daaf,
+0x1e8d0, 0x1e8d6,
+0x1f3fb, 0x1f3ff,
+0xe0001, 0xe0001,
+0xe0020, 0xe007f,
+0xe0100, 0xe01ef,
+}; /* END of CR_Case_Ignorable */
+
+/* PROPERTY: 'Cased': Derived Property */
+static const OnigCodePoint
+CR_Cased[] = { 131,
+0x0041, 0x005a,
+0x0061, 0x007a,
+0x00aa, 0x00aa,
+0x00b5, 0x00b5,
+0x00ba, 0x00ba,
+0x00c0, 0x00d6,
+0x00d8, 0x00f6,
+0x00f8, 0x01ba,
+0x01bc, 0x01bf,
+0x01c4, 0x0293,
+0x0295, 0x02b8,
+0x02c0, 0x02c1,
+0x02e0, 0x02e4,
+0x0345, 0x0345,
+0x0370, 0x0373,
+0x0376, 0x0377,
+0x037a, 0x037d,
+0x037f, 0x037f,
+0x0386, 0x0386,
+0x0388, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x03a1,
+0x03a3, 0x03f5,
+0x03f7, 0x0481,
+0x048a, 0x052f,
+0x0531, 0x0556,
+0x0561, 0x0587,
+0x10a0, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x13a0, 0x13f5,
+0x13f8, 0x13fd,
+0x1d00, 0x1dbf,
+0x1e00, 0x1f15,
+0x1f18, 0x1f1d,
+0x1f20, 0x1f45,
+0x1f48, 0x1f4d,
+0x1f50, 0x1f57,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f7d,
+0x1f80, 0x1fb4,
+0x1fb6, 0x1fbc,
+0x1fbe, 0x1fbe,
+0x1fc2, 0x1fc4,
+0x1fc6, 0x1fcc,
+0x1fd0, 0x1fd3,
+0x1fd6, 0x1fdb,
+0x1fe0, 0x1fec,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ffc,
+0x2071, 0x2071,
+0x207f, 0x207f,
+0x2090, 0x209c,
+0x2102, 0x2102,
+0x2107, 0x2107,
+0x210a, 0x2113,
+0x2115, 0x2115,
+0x2119, 0x211d,
+0x2124, 0x2124,
+0x2126, 0x2126,
+0x2128, 0x2128,
+0x212a, 0x212d,
+0x212f, 0x2134,
+0x2139, 0x2139,
+0x213c, 0x213f,
+0x2145, 0x2149,
+0x214e, 0x214e,
+0x2160, 0x217f,
+0x2183, 0x2184,
+0x24b6, 0x24e9,
+0x2c00, 0x2c2e,
+0x2c30, 0x2c5e,
+0x2c60, 0x2ce4,
+0x2ceb, 0x2cee,
+0x2cf2, 0x2cf3,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0xa640, 0xa66d,
+0xa680, 0xa69d,
+0xa722, 0xa787,
+0xa78b, 0xa78e,
+0xa790, 0xa7ad,
+0xa7b0, 0xa7b7,
+0xa7f8, 0xa7fa,
+0xab30, 0xab5a,
+0xab5c, 0xab65,
+0xab70, 0xabbf,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xff21, 0xff3a,
+0xff41, 0xff5a,
+0x10400, 0x1044f,
+0x10c80, 0x10cb2,
+0x10cc0, 0x10cf2,
+0x118a0, 0x118df,
+0x1d400, 0x1d454,
+0x1d456, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d51e, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d552, 0x1d6a5,
+0x1d6a8, 0x1d6c0,
+0x1d6c2, 0x1d6da,
+0x1d6dc, 0x1d6fa,
+0x1d6fc, 0x1d714,
+0x1d716, 0x1d734,
+0x1d736, 0x1d74e,
+0x1d750, 0x1d76e,
+0x1d770, 0x1d788,
+0x1d78a, 0x1d7a8,
+0x1d7aa, 0x1d7c2,
+0x1d7c4, 0x1d7cb,
+0x1f130, 0x1f149,
+0x1f150, 0x1f169,
+0x1f170, 0x1f189,
+}; /* END of CR_Cased */
+
+/* PROPERTY: 'Caucasian_Albanian': Script */
+static const OnigCodePoint
+CR_Caucasian_Albanian[] = { 2,
+0x10530, 0x10563,
+0x1056f, 0x1056f,
+}; /* END of CR_Caucasian_Albanian */
+
/* PROPERTY: 'Cc': General Category */
#define CR_Cc CR_Cntrl
@@ -6036,6 +6731,2567 @@ CR_Cf[] = { 17,
0xe0020, 0xe007f,
}; /* END of CR_Cf */
+/* PROPERTY: 'Chakma': Script */
+static const OnigCodePoint
+CR_Chakma[] = { 2,
+0x11100, 0x11134,
+0x11136, 0x11143,
+}; /* END of CR_Chakma */
+
+/* PROPERTY: 'Cham': Script */
+static const OnigCodePoint
+CR_Cham[] = { 4,
+0xaa00, 0xaa36,
+0xaa40, 0xaa4d,
+0xaa50, 0xaa59,
+0xaa5c, 0xaa5f,
+}; /* END of CR_Cham */
+
+/* PROPERTY: 'Changes_When_Casefolded': Derived Property */
+static const OnigCodePoint
+CR_Changes_When_Casefolded[] = { 600,
+0x0041, 0x005a,
+0x00b5, 0x00b5,
+0x00c0, 0x00d6,
+0x00d8, 0x00df,
+0x0100, 0x0100,
+0x0102, 0x0102,
+0x0104, 0x0104,
+0x0106, 0x0106,
+0x0108, 0x0108,
+0x010a, 0x010a,
+0x010c, 0x010c,
+0x010e, 0x010e,
+0x0110, 0x0110,
+0x0112, 0x0112,
+0x0114, 0x0114,
+0x0116, 0x0116,
+0x0118, 0x0118,
+0x011a, 0x011a,
+0x011c, 0x011c,
+0x011e, 0x011e,
+0x0120, 0x0120,
+0x0122, 0x0122,
+0x0124, 0x0124,
+0x0126, 0x0126,
+0x0128, 0x0128,
+0x012a, 0x012a,
+0x012c, 0x012c,
+0x012e, 0x012e,
+0x0130, 0x0130,
+0x0132, 0x0132,
+0x0134, 0x0134,
+0x0136, 0x0136,
+0x0139, 0x0139,
+0x013b, 0x013b,
+0x013d, 0x013d,
+0x013f, 0x013f,
+0x0141, 0x0141,
+0x0143, 0x0143,
+0x0145, 0x0145,
+0x0147, 0x0147,
+0x0149, 0x014a,
+0x014c, 0x014c,
+0x014e, 0x014e,
+0x0150, 0x0150,
+0x0152, 0x0152,
+0x0154, 0x0154,
+0x0156, 0x0156,
+0x0158, 0x0158,
+0x015a, 0x015a,
+0x015c, 0x015c,
+0x015e, 0x015e,
+0x0160, 0x0160,
+0x0162, 0x0162,
+0x0164, 0x0164,
+0x0166, 0x0166,
+0x0168, 0x0168,
+0x016a, 0x016a,
+0x016c, 0x016c,
+0x016e, 0x016e,
+0x0170, 0x0170,
+0x0172, 0x0172,
+0x0174, 0x0174,
+0x0176, 0x0176,
+0x0178, 0x0179,
+0x017b, 0x017b,
+0x017d, 0x017d,
+0x017f, 0x017f,
+0x0181, 0x0182,
+0x0184, 0x0184,
+0x0186, 0x0187,
+0x0189, 0x018b,
+0x018e, 0x0191,
+0x0193, 0x0194,
+0x0196, 0x0198,
+0x019c, 0x019d,
+0x019f, 0x01a0,
+0x01a2, 0x01a2,
+0x01a4, 0x01a4,
+0x01a6, 0x01a7,
+0x01a9, 0x01a9,
+0x01ac, 0x01ac,
+0x01ae, 0x01af,
+0x01b1, 0x01b3,
+0x01b5, 0x01b5,
+0x01b7, 0x01b8,
+0x01bc, 0x01bc,
+0x01c4, 0x01c5,
+0x01c7, 0x01c8,
+0x01ca, 0x01cb,
+0x01cd, 0x01cd,
+0x01cf, 0x01cf,
+0x01d1, 0x01d1,
+0x01d3, 0x01d3,
+0x01d5, 0x01d5,
+0x01d7, 0x01d7,
+0x01d9, 0x01d9,
+0x01db, 0x01db,
+0x01de, 0x01de,
+0x01e0, 0x01e0,
+0x01e2, 0x01e2,
+0x01e4, 0x01e4,
+0x01e6, 0x01e6,
+0x01e8, 0x01e8,
+0x01ea, 0x01ea,
+0x01ec, 0x01ec,
+0x01ee, 0x01ee,
+0x01f1, 0x01f2,
+0x01f4, 0x01f4,
+0x01f6, 0x01f8,
+0x01fa, 0x01fa,
+0x01fc, 0x01fc,
+0x01fe, 0x01fe,
+0x0200, 0x0200,
+0x0202, 0x0202,
+0x0204, 0x0204,
+0x0206, 0x0206,
+0x0208, 0x0208,
+0x020a, 0x020a,
+0x020c, 0x020c,
+0x020e, 0x020e,
+0x0210, 0x0210,
+0x0212, 0x0212,
+0x0214, 0x0214,
+0x0216, 0x0216,
+0x0218, 0x0218,
+0x021a, 0x021a,
+0x021c, 0x021c,
+0x021e, 0x021e,
+0x0220, 0x0220,
+0x0222, 0x0222,
+0x0224, 0x0224,
+0x0226, 0x0226,
+0x0228, 0x0228,
+0x022a, 0x022a,
+0x022c, 0x022c,
+0x022e, 0x022e,
+0x0230, 0x0230,
+0x0232, 0x0232,
+0x023a, 0x023b,
+0x023d, 0x023e,
+0x0241, 0x0241,
+0x0243, 0x0246,
+0x0248, 0x0248,
+0x024a, 0x024a,
+0x024c, 0x024c,
+0x024e, 0x024e,
+0x0345, 0x0345,
+0x0370, 0x0370,
+0x0372, 0x0372,
+0x0376, 0x0376,
+0x037f, 0x037f,
+0x0386, 0x0386,
+0x0388, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x038f,
+0x0391, 0x03a1,
+0x03a3, 0x03ab,
+0x03c2, 0x03c2,
+0x03cf, 0x03d1,
+0x03d5, 0x03d6,
+0x03d8, 0x03d8,
+0x03da, 0x03da,
+0x03dc, 0x03dc,
+0x03de, 0x03de,
+0x03e0, 0x03e0,
+0x03e2, 0x03e2,
+0x03e4, 0x03e4,
+0x03e6, 0x03e6,
+0x03e8, 0x03e8,
+0x03ea, 0x03ea,
+0x03ec, 0x03ec,
+0x03ee, 0x03ee,
+0x03f0, 0x03f1,
+0x03f4, 0x03f5,
+0x03f7, 0x03f7,
+0x03f9, 0x03fa,
+0x03fd, 0x042f,
+0x0460, 0x0460,
+0x0462, 0x0462,
+0x0464, 0x0464,
+0x0466, 0x0466,
+0x0468, 0x0468,
+0x046a, 0x046a,
+0x046c, 0x046c,
+0x046e, 0x046e,
+0x0470, 0x0470,
+0x0472, 0x0472,
+0x0474, 0x0474,
+0x0476, 0x0476,
+0x0478, 0x0478,
+0x047a, 0x047a,
+0x047c, 0x047c,
+0x047e, 0x047e,
+0x0480, 0x0480,
+0x048a, 0x048a,
+0x048c, 0x048c,
+0x048e, 0x048e,
+0x0490, 0x0490,
+0x0492, 0x0492,
+0x0494, 0x0494,
+0x0496, 0x0496,
+0x0498, 0x0498,
+0x049a, 0x049a,
+0x049c, 0x049c,
+0x049e, 0x049e,
+0x04a0, 0x04a0,
+0x04a2, 0x04a2,
+0x04a4, 0x04a4,
+0x04a6, 0x04a6,
+0x04a8, 0x04a8,
+0x04aa, 0x04aa,
+0x04ac, 0x04ac,
+0x04ae, 0x04ae,
+0x04b0, 0x04b0,
+0x04b2, 0x04b2,
+0x04b4, 0x04b4,
+0x04b6, 0x04b6,
+0x04b8, 0x04b8,
+0x04ba, 0x04ba,
+0x04bc, 0x04bc,
+0x04be, 0x04be,
+0x04c0, 0x04c1,
+0x04c3, 0x04c3,
+0x04c5, 0x04c5,
+0x04c7, 0x04c7,
+0x04c9, 0x04c9,
+0x04cb, 0x04cb,
+0x04cd, 0x04cd,
+0x04d0, 0x04d0,
+0x04d2, 0x04d2,
+0x04d4, 0x04d4,
+0x04d6, 0x04d6,
+0x04d8, 0x04d8,
+0x04da, 0x04da,
+0x04dc, 0x04dc,
+0x04de, 0x04de,
+0x04e0, 0x04e0,
+0x04e2, 0x04e2,
+0x04e4, 0x04e4,
+0x04e6, 0x04e6,
+0x04e8, 0x04e8,
+0x04ea, 0x04ea,
+0x04ec, 0x04ec,
+0x04ee, 0x04ee,
+0x04f0, 0x04f0,
+0x04f2, 0x04f2,
+0x04f4, 0x04f4,
+0x04f6, 0x04f6,
+0x04f8, 0x04f8,
+0x04fa, 0x04fa,
+0x04fc, 0x04fc,
+0x04fe, 0x04fe,
+0x0500, 0x0500,
+0x0502, 0x0502,
+0x0504, 0x0504,
+0x0506, 0x0506,
+0x0508, 0x0508,
+0x050a, 0x050a,
+0x050c, 0x050c,
+0x050e, 0x050e,
+0x0510, 0x0510,
+0x0512, 0x0512,
+0x0514, 0x0514,
+0x0516, 0x0516,
+0x0518, 0x0518,
+0x051a, 0x051a,
+0x051c, 0x051c,
+0x051e, 0x051e,
+0x0520, 0x0520,
+0x0522, 0x0522,
+0x0524, 0x0524,
+0x0526, 0x0526,
+0x0528, 0x0528,
+0x052a, 0x052a,
+0x052c, 0x052c,
+0x052e, 0x052e,
+0x0531, 0x0556,
+0x0587, 0x0587,
+0x10a0, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x13f8, 0x13fd,
+0x1e00, 0x1e00,
+0x1e02, 0x1e02,
+0x1e04, 0x1e04,
+0x1e06, 0x1e06,
+0x1e08, 0x1e08,
+0x1e0a, 0x1e0a,
+0x1e0c, 0x1e0c,
+0x1e0e, 0x1e0e,
+0x1e10, 0x1e10,
+0x1e12, 0x1e12,
+0x1e14, 0x1e14,
+0x1e16, 0x1e16,
+0x1e18, 0x1e18,
+0x1e1a, 0x1e1a,
+0x1e1c, 0x1e1c,
+0x1e1e, 0x1e1e,
+0x1e20, 0x1e20,
+0x1e22, 0x1e22,
+0x1e24, 0x1e24,
+0x1e26, 0x1e26,
+0x1e28, 0x1e28,
+0x1e2a, 0x1e2a,
+0x1e2c, 0x1e2c,
+0x1e2e, 0x1e2e,
+0x1e30, 0x1e30,
+0x1e32, 0x1e32,
+0x1e34, 0x1e34,
+0x1e36, 0x1e36,
+0x1e38, 0x1e38,
+0x1e3a, 0x1e3a,
+0x1e3c, 0x1e3c,
+0x1e3e, 0x1e3e,
+0x1e40, 0x1e40,
+0x1e42, 0x1e42,
+0x1e44, 0x1e44,
+0x1e46, 0x1e46,
+0x1e48, 0x1e48,
+0x1e4a, 0x1e4a,
+0x1e4c, 0x1e4c,
+0x1e4e, 0x1e4e,
+0x1e50, 0x1e50,
+0x1e52, 0x1e52,
+0x1e54, 0x1e54,
+0x1e56, 0x1e56,
+0x1e58, 0x1e58,
+0x1e5a, 0x1e5a,
+0x1e5c, 0x1e5c,
+0x1e5e, 0x1e5e,
+0x1e60, 0x1e60,
+0x1e62, 0x1e62,
+0x1e64, 0x1e64,
+0x1e66, 0x1e66,
+0x1e68, 0x1e68,
+0x1e6a, 0x1e6a,
+0x1e6c, 0x1e6c,
+0x1e6e, 0x1e6e,
+0x1e70, 0x1e70,
+0x1e72, 0x1e72,
+0x1e74, 0x1e74,
+0x1e76, 0x1e76,
+0x1e78, 0x1e78,
+0x1e7a, 0x1e7a,
+0x1e7c, 0x1e7c,
+0x1e7e, 0x1e7e,
+0x1e80, 0x1e80,
+0x1e82, 0x1e82,
+0x1e84, 0x1e84,
+0x1e86, 0x1e86,
+0x1e88, 0x1e88,
+0x1e8a, 0x1e8a,
+0x1e8c, 0x1e8c,
+0x1e8e, 0x1e8e,
+0x1e90, 0x1e90,
+0x1e92, 0x1e92,
+0x1e94, 0x1e94,
+0x1e9a, 0x1e9b,
+0x1e9e, 0x1e9e,
+0x1ea0, 0x1ea0,
+0x1ea2, 0x1ea2,
+0x1ea4, 0x1ea4,
+0x1ea6, 0x1ea6,
+0x1ea8, 0x1ea8,
+0x1eaa, 0x1eaa,
+0x1eac, 0x1eac,
+0x1eae, 0x1eae,
+0x1eb0, 0x1eb0,
+0x1eb2, 0x1eb2,
+0x1eb4, 0x1eb4,
+0x1eb6, 0x1eb6,
+0x1eb8, 0x1eb8,
+0x1eba, 0x1eba,
+0x1ebc, 0x1ebc,
+0x1ebe, 0x1ebe,
+0x1ec0, 0x1ec0,
+0x1ec2, 0x1ec2,
+0x1ec4, 0x1ec4,
+0x1ec6, 0x1ec6,
+0x1ec8, 0x1ec8,
+0x1eca, 0x1eca,
+0x1ecc, 0x1ecc,
+0x1ece, 0x1ece,
+0x1ed0, 0x1ed0,
+0x1ed2, 0x1ed2,
+0x1ed4, 0x1ed4,
+0x1ed6, 0x1ed6,
+0x1ed8, 0x1ed8,
+0x1eda, 0x1eda,
+0x1edc, 0x1edc,
+0x1ede, 0x1ede,
+0x1ee0, 0x1ee0,
+0x1ee2, 0x1ee2,
+0x1ee4, 0x1ee4,
+0x1ee6, 0x1ee6,
+0x1ee8, 0x1ee8,
+0x1eea, 0x1eea,
+0x1eec, 0x1eec,
+0x1eee, 0x1eee,
+0x1ef0, 0x1ef0,
+0x1ef2, 0x1ef2,
+0x1ef4, 0x1ef4,
+0x1ef6, 0x1ef6,
+0x1ef8, 0x1ef8,
+0x1efa, 0x1efa,
+0x1efc, 0x1efc,
+0x1efe, 0x1efe,
+0x1f08, 0x1f0f,
+0x1f18, 0x1f1d,
+0x1f28, 0x1f2f,
+0x1f38, 0x1f3f,
+0x1f48, 0x1f4d,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f5f,
+0x1f68, 0x1f6f,
+0x1f80, 0x1faf,
+0x1fb2, 0x1fb4,
+0x1fb7, 0x1fbc,
+0x1fc2, 0x1fc4,
+0x1fc7, 0x1fcc,
+0x1fd8, 0x1fdb,
+0x1fe8, 0x1fec,
+0x1ff2, 0x1ff4,
+0x1ff7, 0x1ffc,
+0x2126, 0x2126,
+0x212a, 0x212b,
+0x2132, 0x2132,
+0x2160, 0x216f,
+0x2183, 0x2183,
+0x24b6, 0x24cf,
+0x2c00, 0x2c2e,
+0x2c60, 0x2c60,
+0x2c62, 0x2c64,
+0x2c67, 0x2c67,
+0x2c69, 0x2c69,
+0x2c6b, 0x2c6b,
+0x2c6d, 0x2c70,
+0x2c72, 0x2c72,
+0x2c75, 0x2c75,
+0x2c7e, 0x2c80,
+0x2c82, 0x2c82,
+0x2c84, 0x2c84,
+0x2c86, 0x2c86,
+0x2c88, 0x2c88,
+0x2c8a, 0x2c8a,
+0x2c8c, 0x2c8c,
+0x2c8e, 0x2c8e,
+0x2c90, 0x2c90,
+0x2c92, 0x2c92,
+0x2c94, 0x2c94,
+0x2c96, 0x2c96,
+0x2c98, 0x2c98,
+0x2c9a, 0x2c9a,
+0x2c9c, 0x2c9c,
+0x2c9e, 0x2c9e,
+0x2ca0, 0x2ca0,
+0x2ca2, 0x2ca2,
+0x2ca4, 0x2ca4,
+0x2ca6, 0x2ca6,
+0x2ca8, 0x2ca8,
+0x2caa, 0x2caa,
+0x2cac, 0x2cac,
+0x2cae, 0x2cae,
+0x2cb0, 0x2cb0,
+0x2cb2, 0x2cb2,
+0x2cb4, 0x2cb4,
+0x2cb6, 0x2cb6,
+0x2cb8, 0x2cb8,
+0x2cba, 0x2cba,
+0x2cbc, 0x2cbc,
+0x2cbe, 0x2cbe,
+0x2cc0, 0x2cc0,
+0x2cc2, 0x2cc2,
+0x2cc4, 0x2cc4,
+0x2cc6, 0x2cc6,
+0x2cc8, 0x2cc8,
+0x2cca, 0x2cca,
+0x2ccc, 0x2ccc,
+0x2cce, 0x2cce,
+0x2cd0, 0x2cd0,
+0x2cd2, 0x2cd2,
+0x2cd4, 0x2cd4,
+0x2cd6, 0x2cd6,
+0x2cd8, 0x2cd8,
+0x2cda, 0x2cda,
+0x2cdc, 0x2cdc,
+0x2cde, 0x2cde,
+0x2ce0, 0x2ce0,
+0x2ce2, 0x2ce2,
+0x2ceb, 0x2ceb,
+0x2ced, 0x2ced,
+0x2cf2, 0x2cf2,
+0xa640, 0xa640,
+0xa642, 0xa642,
+0xa644, 0xa644,
+0xa646, 0xa646,
+0xa648, 0xa648,
+0xa64a, 0xa64a,
+0xa64c, 0xa64c,
+0xa64e, 0xa64e,
+0xa650, 0xa650,
+0xa652, 0xa652,
+0xa654, 0xa654,
+0xa656, 0xa656,
+0xa658, 0xa658,
+0xa65a, 0xa65a,
+0xa65c, 0xa65c,
+0xa65e, 0xa65e,
+0xa660, 0xa660,
+0xa662, 0xa662,
+0xa664, 0xa664,
+0xa666, 0xa666,
+0xa668, 0xa668,
+0xa66a, 0xa66a,
+0xa66c, 0xa66c,
+0xa680, 0xa680,
+0xa682, 0xa682,
+0xa684, 0xa684,
+0xa686, 0xa686,
+0xa688, 0xa688,
+0xa68a, 0xa68a,
+0xa68c, 0xa68c,
+0xa68e, 0xa68e,
+0xa690, 0xa690,
+0xa692, 0xa692,
+0xa694, 0xa694,
+0xa696, 0xa696,
+0xa698, 0xa698,
+0xa69a, 0xa69a,
+0xa722, 0xa722,
+0xa724, 0xa724,
+0xa726, 0xa726,
+0xa728, 0xa728,
+0xa72a, 0xa72a,
+0xa72c, 0xa72c,
+0xa72e, 0xa72e,
+0xa732, 0xa732,
+0xa734, 0xa734,
+0xa736, 0xa736,
+0xa738, 0xa738,
+0xa73a, 0xa73a,
+0xa73c, 0xa73c,
+0xa73e, 0xa73e,
+0xa740, 0xa740,
+0xa742, 0xa742,
+0xa744, 0xa744,
+0xa746, 0xa746,
+0xa748, 0xa748,
+0xa74a, 0xa74a,
+0xa74c, 0xa74c,
+0xa74e, 0xa74e,
+0xa750, 0xa750,
+0xa752, 0xa752,
+0xa754, 0xa754,
+0xa756, 0xa756,
+0xa758, 0xa758,
+0xa75a, 0xa75a,
+0xa75c, 0xa75c,
+0xa75e, 0xa75e,
+0xa760, 0xa760,
+0xa762, 0xa762,
+0xa764, 0xa764,
+0xa766, 0xa766,
+0xa768, 0xa768,
+0xa76a, 0xa76a,
+0xa76c, 0xa76c,
+0xa76e, 0xa76e,
+0xa779, 0xa779,
+0xa77b, 0xa77b,
+0xa77d, 0xa77e,
+0xa780, 0xa780,
+0xa782, 0xa782,
+0xa784, 0xa784,
+0xa786, 0xa786,
+0xa78b, 0xa78b,
+0xa78d, 0xa78d,
+0xa790, 0xa790,
+0xa792, 0xa792,
+0xa796, 0xa796,
+0xa798, 0xa798,
+0xa79a, 0xa79a,
+0xa79c, 0xa79c,
+0xa79e, 0xa79e,
+0xa7a0, 0xa7a0,
+0xa7a2, 0xa7a2,
+0xa7a4, 0xa7a4,
+0xa7a6, 0xa7a6,
+0xa7a8, 0xa7a8,
+0xa7aa, 0xa7ad,
+0xa7b0, 0xa7b4,
+0xa7b6, 0xa7b6,
+0xab70, 0xabbf,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xff21, 0xff3a,
+0x10400, 0x10427,
+0x10c80, 0x10cb2,
+0x118a0, 0x118bf,
+}; /* END of CR_Changes_When_Casefolded */
+
+/* PROPERTY: 'Changes_When_Casemapped': Derived Property */
+static const OnigCodePoint
+CR_Changes_When_Casemapped[] = { 113,
+0x0041, 0x005a,
+0x0061, 0x007a,
+0x00b5, 0x00b5,
+0x00c0, 0x00d6,
+0x00d8, 0x00f6,
+0x00f8, 0x0137,
+0x0139, 0x018c,
+0x018e, 0x019a,
+0x019c, 0x01a9,
+0x01ac, 0x01b9,
+0x01bc, 0x01bd,
+0x01bf, 0x01bf,
+0x01c4, 0x0220,
+0x0222, 0x0233,
+0x023a, 0x0254,
+0x0256, 0x0257,
+0x0259, 0x0259,
+0x025b, 0x025c,
+0x0260, 0x0261,
+0x0263, 0x0263,
+0x0265, 0x0266,
+0x0268, 0x0269,
+0x026b, 0x026c,
+0x026f, 0x026f,
+0x0271, 0x0272,
+0x0275, 0x0275,
+0x027d, 0x027d,
+0x0280, 0x0280,
+0x0283, 0x0283,
+0x0287, 0x028c,
+0x0292, 0x0292,
+0x029d, 0x029e,
+0x0345, 0x0345,
+0x0370, 0x0373,
+0x0376, 0x0377,
+0x037b, 0x037d,
+0x037f, 0x037f,
+0x0386, 0x0386,
+0x0388, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x03a1,
+0x03a3, 0x03d1,
+0x03d5, 0x03f5,
+0x03f7, 0x03fb,
+0x03fd, 0x0481,
+0x048a, 0x052f,
+0x0531, 0x0556,
+0x0561, 0x0587,
+0x10a0, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x13a0, 0x13f5,
+0x13f8, 0x13fd,
+0x1d79, 0x1d79,
+0x1d7d, 0x1d7d,
+0x1e00, 0x1e9b,
+0x1e9e, 0x1e9e,
+0x1ea0, 0x1f15,
+0x1f18, 0x1f1d,
+0x1f20, 0x1f45,
+0x1f48, 0x1f4d,
+0x1f50, 0x1f57,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f7d,
+0x1f80, 0x1fb4,
+0x1fb6, 0x1fbc,
+0x1fbe, 0x1fbe,
+0x1fc2, 0x1fc4,
+0x1fc6, 0x1fcc,
+0x1fd0, 0x1fd3,
+0x1fd6, 0x1fdb,
+0x1fe0, 0x1fec,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ffc,
+0x2126, 0x2126,
+0x212a, 0x212b,
+0x2132, 0x2132,
+0x214e, 0x214e,
+0x2160, 0x217f,
+0x2183, 0x2184,
+0x24b6, 0x24e9,
+0x2c00, 0x2c2e,
+0x2c30, 0x2c5e,
+0x2c60, 0x2c70,
+0x2c72, 0x2c73,
+0x2c75, 0x2c76,
+0x2c7e, 0x2ce3,
+0x2ceb, 0x2cee,
+0x2cf2, 0x2cf3,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0xa640, 0xa66d,
+0xa680, 0xa69b,
+0xa722, 0xa72f,
+0xa732, 0xa76f,
+0xa779, 0xa787,
+0xa78b, 0xa78d,
+0xa790, 0xa793,
+0xa796, 0xa7ad,
+0xa7b0, 0xa7b7,
+0xab53, 0xab53,
+0xab70, 0xabbf,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xff21, 0xff3a,
+0xff41, 0xff5a,
+0x10400, 0x1044f,
+0x10c80, 0x10cb2,
+0x10cc0, 0x10cf2,
+0x118a0, 0x118df,
+}; /* END of CR_Changes_When_Casemapped */
+
+/* PROPERTY: 'Changes_When_Lowercased': Derived Property */
+static const OnigCodePoint
+CR_Changes_When_Lowercased[] = { 588,
+0x0041, 0x005a,
+0x00c0, 0x00d6,
+0x00d8, 0x00de,
+0x0100, 0x0100,
+0x0102, 0x0102,
+0x0104, 0x0104,
+0x0106, 0x0106,
+0x0108, 0x0108,
+0x010a, 0x010a,
+0x010c, 0x010c,
+0x010e, 0x010e,
+0x0110, 0x0110,
+0x0112, 0x0112,
+0x0114, 0x0114,
+0x0116, 0x0116,
+0x0118, 0x0118,
+0x011a, 0x011a,
+0x011c, 0x011c,
+0x011e, 0x011e,
+0x0120, 0x0120,
+0x0122, 0x0122,
+0x0124, 0x0124,
+0x0126, 0x0126,
+0x0128, 0x0128,
+0x012a, 0x012a,
+0x012c, 0x012c,
+0x012e, 0x012e,
+0x0130, 0x0130,
+0x0132, 0x0132,
+0x0134, 0x0134,
+0x0136, 0x0136,
+0x0139, 0x0139,
+0x013b, 0x013b,
+0x013d, 0x013d,
+0x013f, 0x013f,
+0x0141, 0x0141,
+0x0143, 0x0143,
+0x0145, 0x0145,
+0x0147, 0x0147,
+0x014a, 0x014a,
+0x014c, 0x014c,
+0x014e, 0x014e,
+0x0150, 0x0150,
+0x0152, 0x0152,
+0x0154, 0x0154,
+0x0156, 0x0156,
+0x0158, 0x0158,
+0x015a, 0x015a,
+0x015c, 0x015c,
+0x015e, 0x015e,
+0x0160, 0x0160,
+0x0162, 0x0162,
+0x0164, 0x0164,
+0x0166, 0x0166,
+0x0168, 0x0168,
+0x016a, 0x016a,
+0x016c, 0x016c,
+0x016e, 0x016e,
+0x0170, 0x0170,
+0x0172, 0x0172,
+0x0174, 0x0174,
+0x0176, 0x0176,
+0x0178, 0x0179,
+0x017b, 0x017b,
+0x017d, 0x017d,
+0x0181, 0x0182,
+0x0184, 0x0184,
+0x0186, 0x0187,
+0x0189, 0x018b,
+0x018e, 0x0191,
+0x0193, 0x0194,
+0x0196, 0x0198,
+0x019c, 0x019d,
+0x019f, 0x01a0,
+0x01a2, 0x01a2,
+0x01a4, 0x01a4,
+0x01a6, 0x01a7,
+0x01a9, 0x01a9,
+0x01ac, 0x01ac,
+0x01ae, 0x01af,
+0x01b1, 0x01b3,
+0x01b5, 0x01b5,
+0x01b7, 0x01b8,
+0x01bc, 0x01bc,
+0x01c4, 0x01c5,
+0x01c7, 0x01c8,
+0x01ca, 0x01cb,
+0x01cd, 0x01cd,
+0x01cf, 0x01cf,
+0x01d1, 0x01d1,
+0x01d3, 0x01d3,
+0x01d5, 0x01d5,
+0x01d7, 0x01d7,
+0x01d9, 0x01d9,
+0x01db, 0x01db,
+0x01de, 0x01de,
+0x01e0, 0x01e0,
+0x01e2, 0x01e2,
+0x01e4, 0x01e4,
+0x01e6, 0x01e6,
+0x01e8, 0x01e8,
+0x01ea, 0x01ea,
+0x01ec, 0x01ec,
+0x01ee, 0x01ee,
+0x01f1, 0x01f2,
+0x01f4, 0x01f4,
+0x01f6, 0x01f8,
+0x01fa, 0x01fa,
+0x01fc, 0x01fc,
+0x01fe, 0x01fe,
+0x0200, 0x0200,
+0x0202, 0x0202,
+0x0204, 0x0204,
+0x0206, 0x0206,
+0x0208, 0x0208,
+0x020a, 0x020a,
+0x020c, 0x020c,
+0x020e, 0x020e,
+0x0210, 0x0210,
+0x0212, 0x0212,
+0x0214, 0x0214,
+0x0216, 0x0216,
+0x0218, 0x0218,
+0x021a, 0x021a,
+0x021c, 0x021c,
+0x021e, 0x021e,
+0x0220, 0x0220,
+0x0222, 0x0222,
+0x0224, 0x0224,
+0x0226, 0x0226,
+0x0228, 0x0228,
+0x022a, 0x022a,
+0x022c, 0x022c,
+0x022e, 0x022e,
+0x0230, 0x0230,
+0x0232, 0x0232,
+0x023a, 0x023b,
+0x023d, 0x023e,
+0x0241, 0x0241,
+0x0243, 0x0246,
+0x0248, 0x0248,
+0x024a, 0x024a,
+0x024c, 0x024c,
+0x024e, 0x024e,
+0x0370, 0x0370,
+0x0372, 0x0372,
+0x0376, 0x0376,
+0x037f, 0x037f,
+0x0386, 0x0386,
+0x0388, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x038f,
+0x0391, 0x03a1,
+0x03a3, 0x03ab,
+0x03cf, 0x03cf,
+0x03d8, 0x03d8,
+0x03da, 0x03da,
+0x03dc, 0x03dc,
+0x03de, 0x03de,
+0x03e0, 0x03e0,
+0x03e2, 0x03e2,
+0x03e4, 0x03e4,
+0x03e6, 0x03e6,
+0x03e8, 0x03e8,
+0x03ea, 0x03ea,
+0x03ec, 0x03ec,
+0x03ee, 0x03ee,
+0x03f4, 0x03f4,
+0x03f7, 0x03f7,
+0x03f9, 0x03fa,
+0x03fd, 0x042f,
+0x0460, 0x0460,
+0x0462, 0x0462,
+0x0464, 0x0464,
+0x0466, 0x0466,
+0x0468, 0x0468,
+0x046a, 0x046a,
+0x046c, 0x046c,
+0x046e, 0x046e,
+0x0470, 0x0470,
+0x0472, 0x0472,
+0x0474, 0x0474,
+0x0476, 0x0476,
+0x0478, 0x0478,
+0x047a, 0x047a,
+0x047c, 0x047c,
+0x047e, 0x047e,
+0x0480, 0x0480,
+0x048a, 0x048a,
+0x048c, 0x048c,
+0x048e, 0x048e,
+0x0490, 0x0490,
+0x0492, 0x0492,
+0x0494, 0x0494,
+0x0496, 0x0496,
+0x0498, 0x0498,
+0x049a, 0x049a,
+0x049c, 0x049c,
+0x049e, 0x049e,
+0x04a0, 0x04a0,
+0x04a2, 0x04a2,
+0x04a4, 0x04a4,
+0x04a6, 0x04a6,
+0x04a8, 0x04a8,
+0x04aa, 0x04aa,
+0x04ac, 0x04ac,
+0x04ae, 0x04ae,
+0x04b0, 0x04b0,
+0x04b2, 0x04b2,
+0x04b4, 0x04b4,
+0x04b6, 0x04b6,
+0x04b8, 0x04b8,
+0x04ba, 0x04ba,
+0x04bc, 0x04bc,
+0x04be, 0x04be,
+0x04c0, 0x04c1,
+0x04c3, 0x04c3,
+0x04c5, 0x04c5,
+0x04c7, 0x04c7,
+0x04c9, 0x04c9,
+0x04cb, 0x04cb,
+0x04cd, 0x04cd,
+0x04d0, 0x04d0,
+0x04d2, 0x04d2,
+0x04d4, 0x04d4,
+0x04d6, 0x04d6,
+0x04d8, 0x04d8,
+0x04da, 0x04da,
+0x04dc, 0x04dc,
+0x04de, 0x04de,
+0x04e0, 0x04e0,
+0x04e2, 0x04e2,
+0x04e4, 0x04e4,
+0x04e6, 0x04e6,
+0x04e8, 0x04e8,
+0x04ea, 0x04ea,
+0x04ec, 0x04ec,
+0x04ee, 0x04ee,
+0x04f0, 0x04f0,
+0x04f2, 0x04f2,
+0x04f4, 0x04f4,
+0x04f6, 0x04f6,
+0x04f8, 0x04f8,
+0x04fa, 0x04fa,
+0x04fc, 0x04fc,
+0x04fe, 0x04fe,
+0x0500, 0x0500,
+0x0502, 0x0502,
+0x0504, 0x0504,
+0x0506, 0x0506,
+0x0508, 0x0508,
+0x050a, 0x050a,
+0x050c, 0x050c,
+0x050e, 0x050e,
+0x0510, 0x0510,
+0x0512, 0x0512,
+0x0514, 0x0514,
+0x0516, 0x0516,
+0x0518, 0x0518,
+0x051a, 0x051a,
+0x051c, 0x051c,
+0x051e, 0x051e,
+0x0520, 0x0520,
+0x0522, 0x0522,
+0x0524, 0x0524,
+0x0526, 0x0526,
+0x0528, 0x0528,
+0x052a, 0x052a,
+0x052c, 0x052c,
+0x052e, 0x052e,
+0x0531, 0x0556,
+0x10a0, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x13a0, 0x13f5,
+0x1e00, 0x1e00,
+0x1e02, 0x1e02,
+0x1e04, 0x1e04,
+0x1e06, 0x1e06,
+0x1e08, 0x1e08,
+0x1e0a, 0x1e0a,
+0x1e0c, 0x1e0c,
+0x1e0e, 0x1e0e,
+0x1e10, 0x1e10,
+0x1e12, 0x1e12,
+0x1e14, 0x1e14,
+0x1e16, 0x1e16,
+0x1e18, 0x1e18,
+0x1e1a, 0x1e1a,
+0x1e1c, 0x1e1c,
+0x1e1e, 0x1e1e,
+0x1e20, 0x1e20,
+0x1e22, 0x1e22,
+0x1e24, 0x1e24,
+0x1e26, 0x1e26,
+0x1e28, 0x1e28,
+0x1e2a, 0x1e2a,
+0x1e2c, 0x1e2c,
+0x1e2e, 0x1e2e,
+0x1e30, 0x1e30,
+0x1e32, 0x1e32,
+0x1e34, 0x1e34,
+0x1e36, 0x1e36,
+0x1e38, 0x1e38,
+0x1e3a, 0x1e3a,
+0x1e3c, 0x1e3c,
+0x1e3e, 0x1e3e,
+0x1e40, 0x1e40,
+0x1e42, 0x1e42,
+0x1e44, 0x1e44,
+0x1e46, 0x1e46,
+0x1e48, 0x1e48,
+0x1e4a, 0x1e4a,
+0x1e4c, 0x1e4c,
+0x1e4e, 0x1e4e,
+0x1e50, 0x1e50,
+0x1e52, 0x1e52,
+0x1e54, 0x1e54,
+0x1e56, 0x1e56,
+0x1e58, 0x1e58,
+0x1e5a, 0x1e5a,
+0x1e5c, 0x1e5c,
+0x1e5e, 0x1e5e,
+0x1e60, 0x1e60,
+0x1e62, 0x1e62,
+0x1e64, 0x1e64,
+0x1e66, 0x1e66,
+0x1e68, 0x1e68,
+0x1e6a, 0x1e6a,
+0x1e6c, 0x1e6c,
+0x1e6e, 0x1e6e,
+0x1e70, 0x1e70,
+0x1e72, 0x1e72,
+0x1e74, 0x1e74,
+0x1e76, 0x1e76,
+0x1e78, 0x1e78,
+0x1e7a, 0x1e7a,
+0x1e7c, 0x1e7c,
+0x1e7e, 0x1e7e,
+0x1e80, 0x1e80,
+0x1e82, 0x1e82,
+0x1e84, 0x1e84,
+0x1e86, 0x1e86,
+0x1e88, 0x1e88,
+0x1e8a, 0x1e8a,
+0x1e8c, 0x1e8c,
+0x1e8e, 0x1e8e,
+0x1e90, 0x1e90,
+0x1e92, 0x1e92,
+0x1e94, 0x1e94,
+0x1e9e, 0x1e9e,
+0x1ea0, 0x1ea0,
+0x1ea2, 0x1ea2,
+0x1ea4, 0x1ea4,
+0x1ea6, 0x1ea6,
+0x1ea8, 0x1ea8,
+0x1eaa, 0x1eaa,
+0x1eac, 0x1eac,
+0x1eae, 0x1eae,
+0x1eb0, 0x1eb0,
+0x1eb2, 0x1eb2,
+0x1eb4, 0x1eb4,
+0x1eb6, 0x1eb6,
+0x1eb8, 0x1eb8,
+0x1eba, 0x1eba,
+0x1ebc, 0x1ebc,
+0x1ebe, 0x1ebe,
+0x1ec0, 0x1ec0,
+0x1ec2, 0x1ec2,
+0x1ec4, 0x1ec4,
+0x1ec6, 0x1ec6,
+0x1ec8, 0x1ec8,
+0x1eca, 0x1eca,
+0x1ecc, 0x1ecc,
+0x1ece, 0x1ece,
+0x1ed0, 0x1ed0,
+0x1ed2, 0x1ed2,
+0x1ed4, 0x1ed4,
+0x1ed6, 0x1ed6,
+0x1ed8, 0x1ed8,
+0x1eda, 0x1eda,
+0x1edc, 0x1edc,
+0x1ede, 0x1ede,
+0x1ee0, 0x1ee0,
+0x1ee2, 0x1ee2,
+0x1ee4, 0x1ee4,
+0x1ee6, 0x1ee6,
+0x1ee8, 0x1ee8,
+0x1eea, 0x1eea,
+0x1eec, 0x1eec,
+0x1eee, 0x1eee,
+0x1ef0, 0x1ef0,
+0x1ef2, 0x1ef2,
+0x1ef4, 0x1ef4,
+0x1ef6, 0x1ef6,
+0x1ef8, 0x1ef8,
+0x1efa, 0x1efa,
+0x1efc, 0x1efc,
+0x1efe, 0x1efe,
+0x1f08, 0x1f0f,
+0x1f18, 0x1f1d,
+0x1f28, 0x1f2f,
+0x1f38, 0x1f3f,
+0x1f48, 0x1f4d,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f5f,
+0x1f68, 0x1f6f,
+0x1f88, 0x1f8f,
+0x1f98, 0x1f9f,
+0x1fa8, 0x1faf,
+0x1fb8, 0x1fbc,
+0x1fc8, 0x1fcc,
+0x1fd8, 0x1fdb,
+0x1fe8, 0x1fec,
+0x1ff8, 0x1ffc,
+0x2126, 0x2126,
+0x212a, 0x212b,
+0x2132, 0x2132,
+0x2160, 0x216f,
+0x2183, 0x2183,
+0x24b6, 0x24cf,
+0x2c00, 0x2c2e,
+0x2c60, 0x2c60,
+0x2c62, 0x2c64,
+0x2c67, 0x2c67,
+0x2c69, 0x2c69,
+0x2c6b, 0x2c6b,
+0x2c6d, 0x2c70,
+0x2c72, 0x2c72,
+0x2c75, 0x2c75,
+0x2c7e, 0x2c80,
+0x2c82, 0x2c82,
+0x2c84, 0x2c84,
+0x2c86, 0x2c86,
+0x2c88, 0x2c88,
+0x2c8a, 0x2c8a,
+0x2c8c, 0x2c8c,
+0x2c8e, 0x2c8e,
+0x2c90, 0x2c90,
+0x2c92, 0x2c92,
+0x2c94, 0x2c94,
+0x2c96, 0x2c96,
+0x2c98, 0x2c98,
+0x2c9a, 0x2c9a,
+0x2c9c, 0x2c9c,
+0x2c9e, 0x2c9e,
+0x2ca0, 0x2ca0,
+0x2ca2, 0x2ca2,
+0x2ca4, 0x2ca4,
+0x2ca6, 0x2ca6,
+0x2ca8, 0x2ca8,
+0x2caa, 0x2caa,
+0x2cac, 0x2cac,
+0x2cae, 0x2cae,
+0x2cb0, 0x2cb0,
+0x2cb2, 0x2cb2,
+0x2cb4, 0x2cb4,
+0x2cb6, 0x2cb6,
+0x2cb8, 0x2cb8,
+0x2cba, 0x2cba,
+0x2cbc, 0x2cbc,
+0x2cbe, 0x2cbe,
+0x2cc0, 0x2cc0,
+0x2cc2, 0x2cc2,
+0x2cc4, 0x2cc4,
+0x2cc6, 0x2cc6,
+0x2cc8, 0x2cc8,
+0x2cca, 0x2cca,
+0x2ccc, 0x2ccc,
+0x2cce, 0x2cce,
+0x2cd0, 0x2cd0,
+0x2cd2, 0x2cd2,
+0x2cd4, 0x2cd4,
+0x2cd6, 0x2cd6,
+0x2cd8, 0x2cd8,
+0x2cda, 0x2cda,
+0x2cdc, 0x2cdc,
+0x2cde, 0x2cde,
+0x2ce0, 0x2ce0,
+0x2ce2, 0x2ce2,
+0x2ceb, 0x2ceb,
+0x2ced, 0x2ced,
+0x2cf2, 0x2cf2,
+0xa640, 0xa640,
+0xa642, 0xa642,
+0xa644, 0xa644,
+0xa646, 0xa646,
+0xa648, 0xa648,
+0xa64a, 0xa64a,
+0xa64c, 0xa64c,
+0xa64e, 0xa64e,
+0xa650, 0xa650,
+0xa652, 0xa652,
+0xa654, 0xa654,
+0xa656, 0xa656,
+0xa658, 0xa658,
+0xa65a, 0xa65a,
+0xa65c, 0xa65c,
+0xa65e, 0xa65e,
+0xa660, 0xa660,
+0xa662, 0xa662,
+0xa664, 0xa664,
+0xa666, 0xa666,
+0xa668, 0xa668,
+0xa66a, 0xa66a,
+0xa66c, 0xa66c,
+0xa680, 0xa680,
+0xa682, 0xa682,
+0xa684, 0xa684,
+0xa686, 0xa686,
+0xa688, 0xa688,
+0xa68a, 0xa68a,
+0xa68c, 0xa68c,
+0xa68e, 0xa68e,
+0xa690, 0xa690,
+0xa692, 0xa692,
+0xa694, 0xa694,
+0xa696, 0xa696,
+0xa698, 0xa698,
+0xa69a, 0xa69a,
+0xa722, 0xa722,
+0xa724, 0xa724,
+0xa726, 0xa726,
+0xa728, 0xa728,
+0xa72a, 0xa72a,
+0xa72c, 0xa72c,
+0xa72e, 0xa72e,
+0xa732, 0xa732,
+0xa734, 0xa734,
+0xa736, 0xa736,
+0xa738, 0xa738,
+0xa73a, 0xa73a,
+0xa73c, 0xa73c,
+0xa73e, 0xa73e,
+0xa740, 0xa740,
+0xa742, 0xa742,
+0xa744, 0xa744,
+0xa746, 0xa746,
+0xa748, 0xa748,
+0xa74a, 0xa74a,
+0xa74c, 0xa74c,
+0xa74e, 0xa74e,
+0xa750, 0xa750,
+0xa752, 0xa752,
+0xa754, 0xa754,
+0xa756, 0xa756,
+0xa758, 0xa758,
+0xa75a, 0xa75a,
+0xa75c, 0xa75c,
+0xa75e, 0xa75e,
+0xa760, 0xa760,
+0xa762, 0xa762,
+0xa764, 0xa764,
+0xa766, 0xa766,
+0xa768, 0xa768,
+0xa76a, 0xa76a,
+0xa76c, 0xa76c,
+0xa76e, 0xa76e,
+0xa779, 0xa779,
+0xa77b, 0xa77b,
+0xa77d, 0xa77e,
+0xa780, 0xa780,
+0xa782, 0xa782,
+0xa784, 0xa784,
+0xa786, 0xa786,
+0xa78b, 0xa78b,
+0xa78d, 0xa78d,
+0xa790, 0xa790,
+0xa792, 0xa792,
+0xa796, 0xa796,
+0xa798, 0xa798,
+0xa79a, 0xa79a,
+0xa79c, 0xa79c,
+0xa79e, 0xa79e,
+0xa7a0, 0xa7a0,
+0xa7a2, 0xa7a2,
+0xa7a4, 0xa7a4,
+0xa7a6, 0xa7a6,
+0xa7a8, 0xa7a8,
+0xa7aa, 0xa7ad,
+0xa7b0, 0xa7b4,
+0xa7b6, 0xa7b6,
+0xff21, 0xff3a,
+0x10400, 0x10427,
+0x10c80, 0x10cb2,
+0x118a0, 0x118bf,
+}; /* END of CR_Changes_When_Lowercased */
+
+/* PROPERTY: 'Changes_When_Titlecased': Derived Property */
+static const OnigCodePoint
+CR_Changes_When_Titlecased[] = { 606,
+0x0061, 0x007a,
+0x00b5, 0x00b5,
+0x00df, 0x00f6,
+0x00f8, 0x00ff,
+0x0101, 0x0101,
+0x0103, 0x0103,
+0x0105, 0x0105,
+0x0107, 0x0107,
+0x0109, 0x0109,
+0x010b, 0x010b,
+0x010d, 0x010d,
+0x010f, 0x010f,
+0x0111, 0x0111,
+0x0113, 0x0113,
+0x0115, 0x0115,
+0x0117, 0x0117,
+0x0119, 0x0119,
+0x011b, 0x011b,
+0x011d, 0x011d,
+0x011f, 0x011f,
+0x0121, 0x0121,
+0x0123, 0x0123,
+0x0125, 0x0125,
+0x0127, 0x0127,
+0x0129, 0x0129,
+0x012b, 0x012b,
+0x012d, 0x012d,
+0x012f, 0x012f,
+0x0131, 0x0131,
+0x0133, 0x0133,
+0x0135, 0x0135,
+0x0137, 0x0137,
+0x013a, 0x013a,
+0x013c, 0x013c,
+0x013e, 0x013e,
+0x0140, 0x0140,
+0x0142, 0x0142,
+0x0144, 0x0144,
+0x0146, 0x0146,
+0x0148, 0x0149,
+0x014b, 0x014b,
+0x014d, 0x014d,
+0x014f, 0x014f,
+0x0151, 0x0151,
+0x0153, 0x0153,
+0x0155, 0x0155,
+0x0157, 0x0157,
+0x0159, 0x0159,
+0x015b, 0x015b,
+0x015d, 0x015d,
+0x015f, 0x015f,
+0x0161, 0x0161,
+0x0163, 0x0163,
+0x0165, 0x0165,
+0x0167, 0x0167,
+0x0169, 0x0169,
+0x016b, 0x016b,
+0x016d, 0x016d,
+0x016f, 0x016f,
+0x0171, 0x0171,
+0x0173, 0x0173,
+0x0175, 0x0175,
+0x0177, 0x0177,
+0x017a, 0x017a,
+0x017c, 0x017c,
+0x017e, 0x0180,
+0x0183, 0x0183,
+0x0185, 0x0185,
+0x0188, 0x0188,
+0x018c, 0x018c,
+0x0192, 0x0192,
+0x0195, 0x0195,
+0x0199, 0x019a,
+0x019e, 0x019e,
+0x01a1, 0x01a1,
+0x01a3, 0x01a3,
+0x01a5, 0x01a5,
+0x01a8, 0x01a8,
+0x01ad, 0x01ad,
+0x01b0, 0x01b0,
+0x01b4, 0x01b4,
+0x01b6, 0x01b6,
+0x01b9, 0x01b9,
+0x01bd, 0x01bd,
+0x01bf, 0x01bf,
+0x01c4, 0x01c4,
+0x01c6, 0x01c7,
+0x01c9, 0x01ca,
+0x01cc, 0x01cc,
+0x01ce, 0x01ce,
+0x01d0, 0x01d0,
+0x01d2, 0x01d2,
+0x01d4, 0x01d4,
+0x01d6, 0x01d6,
+0x01d8, 0x01d8,
+0x01da, 0x01da,
+0x01dc, 0x01dd,
+0x01df, 0x01df,
+0x01e1, 0x01e1,
+0x01e3, 0x01e3,
+0x01e5, 0x01e5,
+0x01e7, 0x01e7,
+0x01e9, 0x01e9,
+0x01eb, 0x01eb,
+0x01ed, 0x01ed,
+0x01ef, 0x01f1,
+0x01f3, 0x01f3,
+0x01f5, 0x01f5,
+0x01f9, 0x01f9,
+0x01fb, 0x01fb,
+0x01fd, 0x01fd,
+0x01ff, 0x01ff,
+0x0201, 0x0201,
+0x0203, 0x0203,
+0x0205, 0x0205,
+0x0207, 0x0207,
+0x0209, 0x0209,
+0x020b, 0x020b,
+0x020d, 0x020d,
+0x020f, 0x020f,
+0x0211, 0x0211,
+0x0213, 0x0213,
+0x0215, 0x0215,
+0x0217, 0x0217,
+0x0219, 0x0219,
+0x021b, 0x021b,
+0x021d, 0x021d,
+0x021f, 0x021f,
+0x0223, 0x0223,
+0x0225, 0x0225,
+0x0227, 0x0227,
+0x0229, 0x0229,
+0x022b, 0x022b,
+0x022d, 0x022d,
+0x022f, 0x022f,
+0x0231, 0x0231,
+0x0233, 0x0233,
+0x023c, 0x023c,
+0x023f, 0x0240,
+0x0242, 0x0242,
+0x0247, 0x0247,
+0x0249, 0x0249,
+0x024b, 0x024b,
+0x024d, 0x024d,
+0x024f, 0x0254,
+0x0256, 0x0257,
+0x0259, 0x0259,
+0x025b, 0x025c,
+0x0260, 0x0261,
+0x0263, 0x0263,
+0x0265, 0x0266,
+0x0268, 0x0269,
+0x026b, 0x026c,
+0x026f, 0x026f,
+0x0271, 0x0272,
+0x0275, 0x0275,
+0x027d, 0x027d,
+0x0280, 0x0280,
+0x0283, 0x0283,
+0x0287, 0x028c,
+0x0292, 0x0292,
+0x029d, 0x029e,
+0x0345, 0x0345,
+0x0371, 0x0371,
+0x0373, 0x0373,
+0x0377, 0x0377,
+0x037b, 0x037d,
+0x0390, 0x0390,
+0x03ac, 0x03ce,
+0x03d0, 0x03d1,
+0x03d5, 0x03d7,
+0x03d9, 0x03d9,
+0x03db, 0x03db,
+0x03dd, 0x03dd,
+0x03df, 0x03df,
+0x03e1, 0x03e1,
+0x03e3, 0x03e3,
+0x03e5, 0x03e5,
+0x03e7, 0x03e7,
+0x03e9, 0x03e9,
+0x03eb, 0x03eb,
+0x03ed, 0x03ed,
+0x03ef, 0x03f3,
+0x03f5, 0x03f5,
+0x03f8, 0x03f8,
+0x03fb, 0x03fb,
+0x0430, 0x045f,
+0x0461, 0x0461,
+0x0463, 0x0463,
+0x0465, 0x0465,
+0x0467, 0x0467,
+0x0469, 0x0469,
+0x046b, 0x046b,
+0x046d, 0x046d,
+0x046f, 0x046f,
+0x0471, 0x0471,
+0x0473, 0x0473,
+0x0475, 0x0475,
+0x0477, 0x0477,
+0x0479, 0x0479,
+0x047b, 0x047b,
+0x047d, 0x047d,
+0x047f, 0x047f,
+0x0481, 0x0481,
+0x048b, 0x048b,
+0x048d, 0x048d,
+0x048f, 0x048f,
+0x0491, 0x0491,
+0x0493, 0x0493,
+0x0495, 0x0495,
+0x0497, 0x0497,
+0x0499, 0x0499,
+0x049b, 0x049b,
+0x049d, 0x049d,
+0x049f, 0x049f,
+0x04a1, 0x04a1,
+0x04a3, 0x04a3,
+0x04a5, 0x04a5,
+0x04a7, 0x04a7,
+0x04a9, 0x04a9,
+0x04ab, 0x04ab,
+0x04ad, 0x04ad,
+0x04af, 0x04af,
+0x04b1, 0x04b1,
+0x04b3, 0x04b3,
+0x04b5, 0x04b5,
+0x04b7, 0x04b7,
+0x04b9, 0x04b9,
+0x04bb, 0x04bb,
+0x04bd, 0x04bd,
+0x04bf, 0x04bf,
+0x04c2, 0x04c2,
+0x04c4, 0x04c4,
+0x04c6, 0x04c6,
+0x04c8, 0x04c8,
+0x04ca, 0x04ca,
+0x04cc, 0x04cc,
+0x04ce, 0x04cf,
+0x04d1, 0x04d1,
+0x04d3, 0x04d3,
+0x04d5, 0x04d5,
+0x04d7, 0x04d7,
+0x04d9, 0x04d9,
+0x04db, 0x04db,
+0x04dd, 0x04dd,
+0x04df, 0x04df,
+0x04e1, 0x04e1,
+0x04e3, 0x04e3,
+0x04e5, 0x04e5,
+0x04e7, 0x04e7,
+0x04e9, 0x04e9,
+0x04eb, 0x04eb,
+0x04ed, 0x04ed,
+0x04ef, 0x04ef,
+0x04f1, 0x04f1,
+0x04f3, 0x04f3,
+0x04f5, 0x04f5,
+0x04f7, 0x04f7,
+0x04f9, 0x04f9,
+0x04fb, 0x04fb,
+0x04fd, 0x04fd,
+0x04ff, 0x04ff,
+0x0501, 0x0501,
+0x0503, 0x0503,
+0x0505, 0x0505,
+0x0507, 0x0507,
+0x0509, 0x0509,
+0x050b, 0x050b,
+0x050d, 0x050d,
+0x050f, 0x050f,
+0x0511, 0x0511,
+0x0513, 0x0513,
+0x0515, 0x0515,
+0x0517, 0x0517,
+0x0519, 0x0519,
+0x051b, 0x051b,
+0x051d, 0x051d,
+0x051f, 0x051f,
+0x0521, 0x0521,
+0x0523, 0x0523,
+0x0525, 0x0525,
+0x0527, 0x0527,
+0x0529, 0x0529,
+0x052b, 0x052b,
+0x052d, 0x052d,
+0x052f, 0x052f,
+0x0561, 0x0587,
+0x13f8, 0x13fd,
+0x1d79, 0x1d79,
+0x1d7d, 0x1d7d,
+0x1e01, 0x1e01,
+0x1e03, 0x1e03,
+0x1e05, 0x1e05,
+0x1e07, 0x1e07,
+0x1e09, 0x1e09,
+0x1e0b, 0x1e0b,
+0x1e0d, 0x1e0d,
+0x1e0f, 0x1e0f,
+0x1e11, 0x1e11,
+0x1e13, 0x1e13,
+0x1e15, 0x1e15,
+0x1e17, 0x1e17,
+0x1e19, 0x1e19,
+0x1e1b, 0x1e1b,
+0x1e1d, 0x1e1d,
+0x1e1f, 0x1e1f,
+0x1e21, 0x1e21,
+0x1e23, 0x1e23,
+0x1e25, 0x1e25,
+0x1e27, 0x1e27,
+0x1e29, 0x1e29,
+0x1e2b, 0x1e2b,
+0x1e2d, 0x1e2d,
+0x1e2f, 0x1e2f,
+0x1e31, 0x1e31,
+0x1e33, 0x1e33,
+0x1e35, 0x1e35,
+0x1e37, 0x1e37,
+0x1e39, 0x1e39,
+0x1e3b, 0x1e3b,
+0x1e3d, 0x1e3d,
+0x1e3f, 0x1e3f,
+0x1e41, 0x1e41,
+0x1e43, 0x1e43,
+0x1e45, 0x1e45,
+0x1e47, 0x1e47,
+0x1e49, 0x1e49,
+0x1e4b, 0x1e4b,
+0x1e4d, 0x1e4d,
+0x1e4f, 0x1e4f,
+0x1e51, 0x1e51,
+0x1e53, 0x1e53,
+0x1e55, 0x1e55,
+0x1e57, 0x1e57,
+0x1e59, 0x1e59,
+0x1e5b, 0x1e5b,
+0x1e5d, 0x1e5d,
+0x1e5f, 0x1e5f,
+0x1e61, 0x1e61,
+0x1e63, 0x1e63,
+0x1e65, 0x1e65,
+0x1e67, 0x1e67,
+0x1e69, 0x1e69,
+0x1e6b, 0x1e6b,
+0x1e6d, 0x1e6d,
+0x1e6f, 0x1e6f,
+0x1e71, 0x1e71,
+0x1e73, 0x1e73,
+0x1e75, 0x1e75,
+0x1e77, 0x1e77,
+0x1e79, 0x1e79,
+0x1e7b, 0x1e7b,
+0x1e7d, 0x1e7d,
+0x1e7f, 0x1e7f,
+0x1e81, 0x1e81,
+0x1e83, 0x1e83,
+0x1e85, 0x1e85,
+0x1e87, 0x1e87,
+0x1e89, 0x1e89,
+0x1e8b, 0x1e8b,
+0x1e8d, 0x1e8d,
+0x1e8f, 0x1e8f,
+0x1e91, 0x1e91,
+0x1e93, 0x1e93,
+0x1e95, 0x1e9b,
+0x1ea1, 0x1ea1,
+0x1ea3, 0x1ea3,
+0x1ea5, 0x1ea5,
+0x1ea7, 0x1ea7,
+0x1ea9, 0x1ea9,
+0x1eab, 0x1eab,
+0x1ead, 0x1ead,
+0x1eaf, 0x1eaf,
+0x1eb1, 0x1eb1,
+0x1eb3, 0x1eb3,
+0x1eb5, 0x1eb5,
+0x1eb7, 0x1eb7,
+0x1eb9, 0x1eb9,
+0x1ebb, 0x1ebb,
+0x1ebd, 0x1ebd,
+0x1ebf, 0x1ebf,
+0x1ec1, 0x1ec1,
+0x1ec3, 0x1ec3,
+0x1ec5, 0x1ec5,
+0x1ec7, 0x1ec7,
+0x1ec9, 0x1ec9,
+0x1ecb, 0x1ecb,
+0x1ecd, 0x1ecd,
+0x1ecf, 0x1ecf,
+0x1ed1, 0x1ed1,
+0x1ed3, 0x1ed3,
+0x1ed5, 0x1ed5,
+0x1ed7, 0x1ed7,
+0x1ed9, 0x1ed9,
+0x1edb, 0x1edb,
+0x1edd, 0x1edd,
+0x1edf, 0x1edf,
+0x1ee1, 0x1ee1,
+0x1ee3, 0x1ee3,
+0x1ee5, 0x1ee5,
+0x1ee7, 0x1ee7,
+0x1ee9, 0x1ee9,
+0x1eeb, 0x1eeb,
+0x1eed, 0x1eed,
+0x1eef, 0x1eef,
+0x1ef1, 0x1ef1,
+0x1ef3, 0x1ef3,
+0x1ef5, 0x1ef5,
+0x1ef7, 0x1ef7,
+0x1ef9, 0x1ef9,
+0x1efb, 0x1efb,
+0x1efd, 0x1efd,
+0x1eff, 0x1f07,
+0x1f10, 0x1f15,
+0x1f20, 0x1f27,
+0x1f30, 0x1f37,
+0x1f40, 0x1f45,
+0x1f50, 0x1f57,
+0x1f60, 0x1f67,
+0x1f70, 0x1f7d,
+0x1f80, 0x1f87,
+0x1f90, 0x1f97,
+0x1fa0, 0x1fa7,
+0x1fb0, 0x1fb4,
+0x1fb6, 0x1fb7,
+0x1fbe, 0x1fbe,
+0x1fc2, 0x1fc4,
+0x1fc6, 0x1fc7,
+0x1fd0, 0x1fd3,
+0x1fd6, 0x1fd7,
+0x1fe0, 0x1fe7,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ff7,
+0x214e, 0x214e,
+0x2170, 0x217f,
+0x2184, 0x2184,
+0x24d0, 0x24e9,
+0x2c30, 0x2c5e,
+0x2c61, 0x2c61,
+0x2c65, 0x2c66,
+0x2c68, 0x2c68,
+0x2c6a, 0x2c6a,
+0x2c6c, 0x2c6c,
+0x2c73, 0x2c73,
+0x2c76, 0x2c76,
+0x2c81, 0x2c81,
+0x2c83, 0x2c83,
+0x2c85, 0x2c85,
+0x2c87, 0x2c87,
+0x2c89, 0x2c89,
+0x2c8b, 0x2c8b,
+0x2c8d, 0x2c8d,
+0x2c8f, 0x2c8f,
+0x2c91, 0x2c91,
+0x2c93, 0x2c93,
+0x2c95, 0x2c95,
+0x2c97, 0x2c97,
+0x2c99, 0x2c99,
+0x2c9b, 0x2c9b,
+0x2c9d, 0x2c9d,
+0x2c9f, 0x2c9f,
+0x2ca1, 0x2ca1,
+0x2ca3, 0x2ca3,
+0x2ca5, 0x2ca5,
+0x2ca7, 0x2ca7,
+0x2ca9, 0x2ca9,
+0x2cab, 0x2cab,
+0x2cad, 0x2cad,
+0x2caf, 0x2caf,
+0x2cb1, 0x2cb1,
+0x2cb3, 0x2cb3,
+0x2cb5, 0x2cb5,
+0x2cb7, 0x2cb7,
+0x2cb9, 0x2cb9,
+0x2cbb, 0x2cbb,
+0x2cbd, 0x2cbd,
+0x2cbf, 0x2cbf,
+0x2cc1, 0x2cc1,
+0x2cc3, 0x2cc3,
+0x2cc5, 0x2cc5,
+0x2cc7, 0x2cc7,
+0x2cc9, 0x2cc9,
+0x2ccb, 0x2ccb,
+0x2ccd, 0x2ccd,
+0x2ccf, 0x2ccf,
+0x2cd1, 0x2cd1,
+0x2cd3, 0x2cd3,
+0x2cd5, 0x2cd5,
+0x2cd7, 0x2cd7,
+0x2cd9, 0x2cd9,
+0x2cdb, 0x2cdb,
+0x2cdd, 0x2cdd,
+0x2cdf, 0x2cdf,
+0x2ce1, 0x2ce1,
+0x2ce3, 0x2ce3,
+0x2cec, 0x2cec,
+0x2cee, 0x2cee,
+0x2cf3, 0x2cf3,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0xa641, 0xa641,
+0xa643, 0xa643,
+0xa645, 0xa645,
+0xa647, 0xa647,
+0xa649, 0xa649,
+0xa64b, 0xa64b,
+0xa64d, 0xa64d,
+0xa64f, 0xa64f,
+0xa651, 0xa651,
+0xa653, 0xa653,
+0xa655, 0xa655,
+0xa657, 0xa657,
+0xa659, 0xa659,
+0xa65b, 0xa65b,
+0xa65d, 0xa65d,
+0xa65f, 0xa65f,
+0xa661, 0xa661,
+0xa663, 0xa663,
+0xa665, 0xa665,
+0xa667, 0xa667,
+0xa669, 0xa669,
+0xa66b, 0xa66b,
+0xa66d, 0xa66d,
+0xa681, 0xa681,
+0xa683, 0xa683,
+0xa685, 0xa685,
+0xa687, 0xa687,
+0xa689, 0xa689,
+0xa68b, 0xa68b,
+0xa68d, 0xa68d,
+0xa68f, 0xa68f,
+0xa691, 0xa691,
+0xa693, 0xa693,
+0xa695, 0xa695,
+0xa697, 0xa697,
+0xa699, 0xa699,
+0xa69b, 0xa69b,
+0xa723, 0xa723,
+0xa725, 0xa725,
+0xa727, 0xa727,
+0xa729, 0xa729,
+0xa72b, 0xa72b,
+0xa72d, 0xa72d,
+0xa72f, 0xa72f,
+0xa733, 0xa733,
+0xa735, 0xa735,
+0xa737, 0xa737,
+0xa739, 0xa739,
+0xa73b, 0xa73b,
+0xa73d, 0xa73d,
+0xa73f, 0xa73f,
+0xa741, 0xa741,
+0xa743, 0xa743,
+0xa745, 0xa745,
+0xa747, 0xa747,
+0xa749, 0xa749,
+0xa74b, 0xa74b,
+0xa74d, 0xa74d,
+0xa74f, 0xa74f,
+0xa751, 0xa751,
+0xa753, 0xa753,
+0xa755, 0xa755,
+0xa757, 0xa757,
+0xa759, 0xa759,
+0xa75b, 0xa75b,
+0xa75d, 0xa75d,
+0xa75f, 0xa75f,
+0xa761, 0xa761,
+0xa763, 0xa763,
+0xa765, 0xa765,
+0xa767, 0xa767,
+0xa769, 0xa769,
+0xa76b, 0xa76b,
+0xa76d, 0xa76d,
+0xa76f, 0xa76f,
+0xa77a, 0xa77a,
+0xa77c, 0xa77c,
+0xa77f, 0xa77f,
+0xa781, 0xa781,
+0xa783, 0xa783,
+0xa785, 0xa785,
+0xa787, 0xa787,
+0xa78c, 0xa78c,
+0xa791, 0xa791,
+0xa793, 0xa793,
+0xa797, 0xa797,
+0xa799, 0xa799,
+0xa79b, 0xa79b,
+0xa79d, 0xa79d,
+0xa79f, 0xa79f,
+0xa7a1, 0xa7a1,
+0xa7a3, 0xa7a3,
+0xa7a5, 0xa7a5,
+0xa7a7, 0xa7a7,
+0xa7a9, 0xa7a9,
+0xa7b5, 0xa7b5,
+0xa7b7, 0xa7b7,
+0xab53, 0xab53,
+0xab70, 0xabbf,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xff41, 0xff5a,
+0x10428, 0x1044f,
+0x10cc0, 0x10cf2,
+0x118c0, 0x118df,
+}; /* END of CR_Changes_When_Titlecased */
+
+/* PROPERTY: 'Changes_When_Uppercased': Derived Property */
+static const OnigCodePoint
+CR_Changes_When_Uppercased[] = { 605,
+0x0061, 0x007a,
+0x00b5, 0x00b5,
+0x00df, 0x00f6,
+0x00f8, 0x00ff,
+0x0101, 0x0101,
+0x0103, 0x0103,
+0x0105, 0x0105,
+0x0107, 0x0107,
+0x0109, 0x0109,
+0x010b, 0x010b,
+0x010d, 0x010d,
+0x010f, 0x010f,
+0x0111, 0x0111,
+0x0113, 0x0113,
+0x0115, 0x0115,
+0x0117, 0x0117,
+0x0119, 0x0119,
+0x011b, 0x011b,
+0x011d, 0x011d,
+0x011f, 0x011f,
+0x0121, 0x0121,
+0x0123, 0x0123,
+0x0125, 0x0125,
+0x0127, 0x0127,
+0x0129, 0x0129,
+0x012b, 0x012b,
+0x012d, 0x012d,
+0x012f, 0x012f,
+0x0131, 0x0131,
+0x0133, 0x0133,
+0x0135, 0x0135,
+0x0137, 0x0137,
+0x013a, 0x013a,
+0x013c, 0x013c,
+0x013e, 0x013e,
+0x0140, 0x0140,
+0x0142, 0x0142,
+0x0144, 0x0144,
+0x0146, 0x0146,
+0x0148, 0x0149,
+0x014b, 0x014b,
+0x014d, 0x014d,
+0x014f, 0x014f,
+0x0151, 0x0151,
+0x0153, 0x0153,
+0x0155, 0x0155,
+0x0157, 0x0157,
+0x0159, 0x0159,
+0x015b, 0x015b,
+0x015d, 0x015d,
+0x015f, 0x015f,
+0x0161, 0x0161,
+0x0163, 0x0163,
+0x0165, 0x0165,
+0x0167, 0x0167,
+0x0169, 0x0169,
+0x016b, 0x016b,
+0x016d, 0x016d,
+0x016f, 0x016f,
+0x0171, 0x0171,
+0x0173, 0x0173,
+0x0175, 0x0175,
+0x0177, 0x0177,
+0x017a, 0x017a,
+0x017c, 0x017c,
+0x017e, 0x0180,
+0x0183, 0x0183,
+0x0185, 0x0185,
+0x0188, 0x0188,
+0x018c, 0x018c,
+0x0192, 0x0192,
+0x0195, 0x0195,
+0x0199, 0x019a,
+0x019e, 0x019e,
+0x01a1, 0x01a1,
+0x01a3, 0x01a3,
+0x01a5, 0x01a5,
+0x01a8, 0x01a8,
+0x01ad, 0x01ad,
+0x01b0, 0x01b0,
+0x01b4, 0x01b4,
+0x01b6, 0x01b6,
+0x01b9, 0x01b9,
+0x01bd, 0x01bd,
+0x01bf, 0x01bf,
+0x01c5, 0x01c6,
+0x01c8, 0x01c9,
+0x01cb, 0x01cc,
+0x01ce, 0x01ce,
+0x01d0, 0x01d0,
+0x01d2, 0x01d2,
+0x01d4, 0x01d4,
+0x01d6, 0x01d6,
+0x01d8, 0x01d8,
+0x01da, 0x01da,
+0x01dc, 0x01dd,
+0x01df, 0x01df,
+0x01e1, 0x01e1,
+0x01e3, 0x01e3,
+0x01e5, 0x01e5,
+0x01e7, 0x01e7,
+0x01e9, 0x01e9,
+0x01eb, 0x01eb,
+0x01ed, 0x01ed,
+0x01ef, 0x01f0,
+0x01f2, 0x01f3,
+0x01f5, 0x01f5,
+0x01f9, 0x01f9,
+0x01fb, 0x01fb,
+0x01fd, 0x01fd,
+0x01ff, 0x01ff,
+0x0201, 0x0201,
+0x0203, 0x0203,
+0x0205, 0x0205,
+0x0207, 0x0207,
+0x0209, 0x0209,
+0x020b, 0x020b,
+0x020d, 0x020d,
+0x020f, 0x020f,
+0x0211, 0x0211,
+0x0213, 0x0213,
+0x0215, 0x0215,
+0x0217, 0x0217,
+0x0219, 0x0219,
+0x021b, 0x021b,
+0x021d, 0x021d,
+0x021f, 0x021f,
+0x0223, 0x0223,
+0x0225, 0x0225,
+0x0227, 0x0227,
+0x0229, 0x0229,
+0x022b, 0x022b,
+0x022d, 0x022d,
+0x022f, 0x022f,
+0x0231, 0x0231,
+0x0233, 0x0233,
+0x023c, 0x023c,
+0x023f, 0x0240,
+0x0242, 0x0242,
+0x0247, 0x0247,
+0x0249, 0x0249,
+0x024b, 0x024b,
+0x024d, 0x024d,
+0x024f, 0x0254,
+0x0256, 0x0257,
+0x0259, 0x0259,
+0x025b, 0x025c,
+0x0260, 0x0261,
+0x0263, 0x0263,
+0x0265, 0x0266,
+0x0268, 0x0269,
+0x026b, 0x026c,
+0x026f, 0x026f,
+0x0271, 0x0272,
+0x0275, 0x0275,
+0x027d, 0x027d,
+0x0280, 0x0280,
+0x0283, 0x0283,
+0x0287, 0x028c,
+0x0292, 0x0292,
+0x029d, 0x029e,
+0x0345, 0x0345,
+0x0371, 0x0371,
+0x0373, 0x0373,
+0x0377, 0x0377,
+0x037b, 0x037d,
+0x0390, 0x0390,
+0x03ac, 0x03ce,
+0x03d0, 0x03d1,
+0x03d5, 0x03d7,
+0x03d9, 0x03d9,
+0x03db, 0x03db,
+0x03dd, 0x03dd,
+0x03df, 0x03df,
+0x03e1, 0x03e1,
+0x03e3, 0x03e3,
+0x03e5, 0x03e5,
+0x03e7, 0x03e7,
+0x03e9, 0x03e9,
+0x03eb, 0x03eb,
+0x03ed, 0x03ed,
+0x03ef, 0x03f3,
+0x03f5, 0x03f5,
+0x03f8, 0x03f8,
+0x03fb, 0x03fb,
+0x0430, 0x045f,
+0x0461, 0x0461,
+0x0463, 0x0463,
+0x0465, 0x0465,
+0x0467, 0x0467,
+0x0469, 0x0469,
+0x046b, 0x046b,
+0x046d, 0x046d,
+0x046f, 0x046f,
+0x0471, 0x0471,
+0x0473, 0x0473,
+0x0475, 0x0475,
+0x0477, 0x0477,
+0x0479, 0x0479,
+0x047b, 0x047b,
+0x047d, 0x047d,
+0x047f, 0x047f,
+0x0481, 0x0481,
+0x048b, 0x048b,
+0x048d, 0x048d,
+0x048f, 0x048f,
+0x0491, 0x0491,
+0x0493, 0x0493,
+0x0495, 0x0495,
+0x0497, 0x0497,
+0x0499, 0x0499,
+0x049b, 0x049b,
+0x049d, 0x049d,
+0x049f, 0x049f,
+0x04a1, 0x04a1,
+0x04a3, 0x04a3,
+0x04a5, 0x04a5,
+0x04a7, 0x04a7,
+0x04a9, 0x04a9,
+0x04ab, 0x04ab,
+0x04ad, 0x04ad,
+0x04af, 0x04af,
+0x04b1, 0x04b1,
+0x04b3, 0x04b3,
+0x04b5, 0x04b5,
+0x04b7, 0x04b7,
+0x04b9, 0x04b9,
+0x04bb, 0x04bb,
+0x04bd, 0x04bd,
+0x04bf, 0x04bf,
+0x04c2, 0x04c2,
+0x04c4, 0x04c4,
+0x04c6, 0x04c6,
+0x04c8, 0x04c8,
+0x04ca, 0x04ca,
+0x04cc, 0x04cc,
+0x04ce, 0x04cf,
+0x04d1, 0x04d1,
+0x04d3, 0x04d3,
+0x04d5, 0x04d5,
+0x04d7, 0x04d7,
+0x04d9, 0x04d9,
+0x04db, 0x04db,
+0x04dd, 0x04dd,
+0x04df, 0x04df,
+0x04e1, 0x04e1,
+0x04e3, 0x04e3,
+0x04e5, 0x04e5,
+0x04e7, 0x04e7,
+0x04e9, 0x04e9,
+0x04eb, 0x04eb,
+0x04ed, 0x04ed,
+0x04ef, 0x04ef,
+0x04f1, 0x04f1,
+0x04f3, 0x04f3,
+0x04f5, 0x04f5,
+0x04f7, 0x04f7,
+0x04f9, 0x04f9,
+0x04fb, 0x04fb,
+0x04fd, 0x04fd,
+0x04ff, 0x04ff,
+0x0501, 0x0501,
+0x0503, 0x0503,
+0x0505, 0x0505,
+0x0507, 0x0507,
+0x0509, 0x0509,
+0x050b, 0x050b,
+0x050d, 0x050d,
+0x050f, 0x050f,
+0x0511, 0x0511,
+0x0513, 0x0513,
+0x0515, 0x0515,
+0x0517, 0x0517,
+0x0519, 0x0519,
+0x051b, 0x051b,
+0x051d, 0x051d,
+0x051f, 0x051f,
+0x0521, 0x0521,
+0x0523, 0x0523,
+0x0525, 0x0525,
+0x0527, 0x0527,
+0x0529, 0x0529,
+0x052b, 0x052b,
+0x052d, 0x052d,
+0x052f, 0x052f,
+0x0561, 0x0587,
+0x13f8, 0x13fd,
+0x1d79, 0x1d79,
+0x1d7d, 0x1d7d,
+0x1e01, 0x1e01,
+0x1e03, 0x1e03,
+0x1e05, 0x1e05,
+0x1e07, 0x1e07,
+0x1e09, 0x1e09,
+0x1e0b, 0x1e0b,
+0x1e0d, 0x1e0d,
+0x1e0f, 0x1e0f,
+0x1e11, 0x1e11,
+0x1e13, 0x1e13,
+0x1e15, 0x1e15,
+0x1e17, 0x1e17,
+0x1e19, 0x1e19,
+0x1e1b, 0x1e1b,
+0x1e1d, 0x1e1d,
+0x1e1f, 0x1e1f,
+0x1e21, 0x1e21,
+0x1e23, 0x1e23,
+0x1e25, 0x1e25,
+0x1e27, 0x1e27,
+0x1e29, 0x1e29,
+0x1e2b, 0x1e2b,
+0x1e2d, 0x1e2d,
+0x1e2f, 0x1e2f,
+0x1e31, 0x1e31,
+0x1e33, 0x1e33,
+0x1e35, 0x1e35,
+0x1e37, 0x1e37,
+0x1e39, 0x1e39,
+0x1e3b, 0x1e3b,
+0x1e3d, 0x1e3d,
+0x1e3f, 0x1e3f,
+0x1e41, 0x1e41,
+0x1e43, 0x1e43,
+0x1e45, 0x1e45,
+0x1e47, 0x1e47,
+0x1e49, 0x1e49,
+0x1e4b, 0x1e4b,
+0x1e4d, 0x1e4d,
+0x1e4f, 0x1e4f,
+0x1e51, 0x1e51,
+0x1e53, 0x1e53,
+0x1e55, 0x1e55,
+0x1e57, 0x1e57,
+0x1e59, 0x1e59,
+0x1e5b, 0x1e5b,
+0x1e5d, 0x1e5d,
+0x1e5f, 0x1e5f,
+0x1e61, 0x1e61,
+0x1e63, 0x1e63,
+0x1e65, 0x1e65,
+0x1e67, 0x1e67,
+0x1e69, 0x1e69,
+0x1e6b, 0x1e6b,
+0x1e6d, 0x1e6d,
+0x1e6f, 0x1e6f,
+0x1e71, 0x1e71,
+0x1e73, 0x1e73,
+0x1e75, 0x1e75,
+0x1e77, 0x1e77,
+0x1e79, 0x1e79,
+0x1e7b, 0x1e7b,
+0x1e7d, 0x1e7d,
+0x1e7f, 0x1e7f,
+0x1e81, 0x1e81,
+0x1e83, 0x1e83,
+0x1e85, 0x1e85,
+0x1e87, 0x1e87,
+0x1e89, 0x1e89,
+0x1e8b, 0x1e8b,
+0x1e8d, 0x1e8d,
+0x1e8f, 0x1e8f,
+0x1e91, 0x1e91,
+0x1e93, 0x1e93,
+0x1e95, 0x1e9b,
+0x1ea1, 0x1ea1,
+0x1ea3, 0x1ea3,
+0x1ea5, 0x1ea5,
+0x1ea7, 0x1ea7,
+0x1ea9, 0x1ea9,
+0x1eab, 0x1eab,
+0x1ead, 0x1ead,
+0x1eaf, 0x1eaf,
+0x1eb1, 0x1eb1,
+0x1eb3, 0x1eb3,
+0x1eb5, 0x1eb5,
+0x1eb7, 0x1eb7,
+0x1eb9, 0x1eb9,
+0x1ebb, 0x1ebb,
+0x1ebd, 0x1ebd,
+0x1ebf, 0x1ebf,
+0x1ec1, 0x1ec1,
+0x1ec3, 0x1ec3,
+0x1ec5, 0x1ec5,
+0x1ec7, 0x1ec7,
+0x1ec9, 0x1ec9,
+0x1ecb, 0x1ecb,
+0x1ecd, 0x1ecd,
+0x1ecf, 0x1ecf,
+0x1ed1, 0x1ed1,
+0x1ed3, 0x1ed3,
+0x1ed5, 0x1ed5,
+0x1ed7, 0x1ed7,
+0x1ed9, 0x1ed9,
+0x1edb, 0x1edb,
+0x1edd, 0x1edd,
+0x1edf, 0x1edf,
+0x1ee1, 0x1ee1,
+0x1ee3, 0x1ee3,
+0x1ee5, 0x1ee5,
+0x1ee7, 0x1ee7,
+0x1ee9, 0x1ee9,
+0x1eeb, 0x1eeb,
+0x1eed, 0x1eed,
+0x1eef, 0x1eef,
+0x1ef1, 0x1ef1,
+0x1ef3, 0x1ef3,
+0x1ef5, 0x1ef5,
+0x1ef7, 0x1ef7,
+0x1ef9, 0x1ef9,
+0x1efb, 0x1efb,
+0x1efd, 0x1efd,
+0x1eff, 0x1f07,
+0x1f10, 0x1f15,
+0x1f20, 0x1f27,
+0x1f30, 0x1f37,
+0x1f40, 0x1f45,
+0x1f50, 0x1f57,
+0x1f60, 0x1f67,
+0x1f70, 0x1f7d,
+0x1f80, 0x1fb4,
+0x1fb6, 0x1fb7,
+0x1fbc, 0x1fbc,
+0x1fbe, 0x1fbe,
+0x1fc2, 0x1fc4,
+0x1fc6, 0x1fc7,
+0x1fcc, 0x1fcc,
+0x1fd0, 0x1fd3,
+0x1fd6, 0x1fd7,
+0x1fe0, 0x1fe7,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ff7,
+0x1ffc, 0x1ffc,
+0x214e, 0x214e,
+0x2170, 0x217f,
+0x2184, 0x2184,
+0x24d0, 0x24e9,
+0x2c30, 0x2c5e,
+0x2c61, 0x2c61,
+0x2c65, 0x2c66,
+0x2c68, 0x2c68,
+0x2c6a, 0x2c6a,
+0x2c6c, 0x2c6c,
+0x2c73, 0x2c73,
+0x2c76, 0x2c76,
+0x2c81, 0x2c81,
+0x2c83, 0x2c83,
+0x2c85, 0x2c85,
+0x2c87, 0x2c87,
+0x2c89, 0x2c89,
+0x2c8b, 0x2c8b,
+0x2c8d, 0x2c8d,
+0x2c8f, 0x2c8f,
+0x2c91, 0x2c91,
+0x2c93, 0x2c93,
+0x2c95, 0x2c95,
+0x2c97, 0x2c97,
+0x2c99, 0x2c99,
+0x2c9b, 0x2c9b,
+0x2c9d, 0x2c9d,
+0x2c9f, 0x2c9f,
+0x2ca1, 0x2ca1,
+0x2ca3, 0x2ca3,
+0x2ca5, 0x2ca5,
+0x2ca7, 0x2ca7,
+0x2ca9, 0x2ca9,
+0x2cab, 0x2cab,
+0x2cad, 0x2cad,
+0x2caf, 0x2caf,
+0x2cb1, 0x2cb1,
+0x2cb3, 0x2cb3,
+0x2cb5, 0x2cb5,
+0x2cb7, 0x2cb7,
+0x2cb9, 0x2cb9,
+0x2cbb, 0x2cbb,
+0x2cbd, 0x2cbd,
+0x2cbf, 0x2cbf,
+0x2cc1, 0x2cc1,
+0x2cc3, 0x2cc3,
+0x2cc5, 0x2cc5,
+0x2cc7, 0x2cc7,
+0x2cc9, 0x2cc9,
+0x2ccb, 0x2ccb,
+0x2ccd, 0x2ccd,
+0x2ccf, 0x2ccf,
+0x2cd1, 0x2cd1,
+0x2cd3, 0x2cd3,
+0x2cd5, 0x2cd5,
+0x2cd7, 0x2cd7,
+0x2cd9, 0x2cd9,
+0x2cdb, 0x2cdb,
+0x2cdd, 0x2cdd,
+0x2cdf, 0x2cdf,
+0x2ce1, 0x2ce1,
+0x2ce3, 0x2ce3,
+0x2cec, 0x2cec,
+0x2cee, 0x2cee,
+0x2cf3, 0x2cf3,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0xa641, 0xa641,
+0xa643, 0xa643,
+0xa645, 0xa645,
+0xa647, 0xa647,
+0xa649, 0xa649,
+0xa64b, 0xa64b,
+0xa64d, 0xa64d,
+0xa64f, 0xa64f,
+0xa651, 0xa651,
+0xa653, 0xa653,
+0xa655, 0xa655,
+0xa657, 0xa657,
+0xa659, 0xa659,
+0xa65b, 0xa65b,
+0xa65d, 0xa65d,
+0xa65f, 0xa65f,
+0xa661, 0xa661,
+0xa663, 0xa663,
+0xa665, 0xa665,
+0xa667, 0xa667,
+0xa669, 0xa669,
+0xa66b, 0xa66b,
+0xa66d, 0xa66d,
+0xa681, 0xa681,
+0xa683, 0xa683,
+0xa685, 0xa685,
+0xa687, 0xa687,
+0xa689, 0xa689,
+0xa68b, 0xa68b,
+0xa68d, 0xa68d,
+0xa68f, 0xa68f,
+0xa691, 0xa691,
+0xa693, 0xa693,
+0xa695, 0xa695,
+0xa697, 0xa697,
+0xa699, 0xa699,
+0xa69b, 0xa69b,
+0xa723, 0xa723,
+0xa725, 0xa725,
+0xa727, 0xa727,
+0xa729, 0xa729,
+0xa72b, 0xa72b,
+0xa72d, 0xa72d,
+0xa72f, 0xa72f,
+0xa733, 0xa733,
+0xa735, 0xa735,
+0xa737, 0xa737,
+0xa739, 0xa739,
+0xa73b, 0xa73b,
+0xa73d, 0xa73d,
+0xa73f, 0xa73f,
+0xa741, 0xa741,
+0xa743, 0xa743,
+0xa745, 0xa745,
+0xa747, 0xa747,
+0xa749, 0xa749,
+0xa74b, 0xa74b,
+0xa74d, 0xa74d,
+0xa74f, 0xa74f,
+0xa751, 0xa751,
+0xa753, 0xa753,
+0xa755, 0xa755,
+0xa757, 0xa757,
+0xa759, 0xa759,
+0xa75b, 0xa75b,
+0xa75d, 0xa75d,
+0xa75f, 0xa75f,
+0xa761, 0xa761,
+0xa763, 0xa763,
+0xa765, 0xa765,
+0xa767, 0xa767,
+0xa769, 0xa769,
+0xa76b, 0xa76b,
+0xa76d, 0xa76d,
+0xa76f, 0xa76f,
+0xa77a, 0xa77a,
+0xa77c, 0xa77c,
+0xa77f, 0xa77f,
+0xa781, 0xa781,
+0xa783, 0xa783,
+0xa785, 0xa785,
+0xa787, 0xa787,
+0xa78c, 0xa78c,
+0xa791, 0xa791,
+0xa793, 0xa793,
+0xa797, 0xa797,
+0xa799, 0xa799,
+0xa79b, 0xa79b,
+0xa79d, 0xa79d,
+0xa79f, 0xa79f,
+0xa7a1, 0xa7a1,
+0xa7a3, 0xa7a3,
+0xa7a5, 0xa7a5,
+0xa7a7, 0xa7a7,
+0xa7a9, 0xa7a9,
+0xa7b5, 0xa7b5,
+0xa7b7, 0xa7b7,
+0xab53, 0xab53,
+0xab70, 0xabbf,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xff41, 0xff5a,
+0x10428, 0x1044f,
+0x10cc0, 0x10cf2,
+0x118c0, 0x118df,
+}; /* END of CR_Changes_When_Uppercased */
+
+/* PROPERTY: 'Cherokee': Script */
+static const OnigCodePoint
+CR_Cherokee[] = { 3,
+0x13a0, 0x13f5,
+0x13f8, 0x13fd,
+0xab70, 0xabbf,
+}; /* END of CR_Cherokee */
+
/* PROPERTY: 'Cn': General Category */
static const OnigCodePoint
CR_Cn[] = { 613,
@@ -6662,12 +9918,3243 @@ CR_Co[] = { 3,
0x100000, 0x10fffd,
}; /* END of CR_Co */
+/* PROPERTY: 'Common': Script */
+static const OnigCodePoint
+CR_Common[] = { 161,
+0x0000, 0x0040,
+0x005b, 0x0060,
+0x007b, 0x00a9,
+0x00ab, 0x00b9,
+0x00bb, 0x00bf,
+0x00d7, 0x00d7,
+0x00f7, 0x00f7,
+0x02b9, 0x02df,
+0x02e5, 0x02e9,
+0x02ec, 0x02ff,
+0x0374, 0x0374,
+0x037e, 0x037e,
+0x0385, 0x0385,
+0x0387, 0x0387,
+0x0589, 0x0589,
+0x0605, 0x0605,
+0x060c, 0x060c,
+0x061b, 0x061c,
+0x061f, 0x061f,
+0x0640, 0x0640,
+0x06dd, 0x06dd,
+0x0964, 0x0965,
+0x0e3f, 0x0e3f,
+0x0fd5, 0x0fd8,
+0x10fb, 0x10fb,
+0x16eb, 0x16ed,
+0x1735, 0x1736,
+0x1802, 0x1803,
+0x1805, 0x1805,
+0x1cd3, 0x1cd3,
+0x1ce1, 0x1ce1,
+0x1ce9, 0x1cec,
+0x1cee, 0x1cf3,
+0x1cf5, 0x1cf6,
+0x2000, 0x200b,
+0x200e, 0x2064,
+0x2066, 0x2070,
+0x2074, 0x207e,
+0x2080, 0x208e,
+0x20a0, 0x20be,
+0x2100, 0x2125,
+0x2127, 0x2129,
+0x212c, 0x2131,
+0x2133, 0x214d,
+0x214f, 0x215f,
+0x2189, 0x218b,
+0x2190, 0x23fa,
+0x2400, 0x2426,
+0x2440, 0x244a,
+0x2460, 0x27ff,
+0x2900, 0x2b73,
+0x2b76, 0x2b95,
+0x2b98, 0x2bb9,
+0x2bbd, 0x2bc8,
+0x2bca, 0x2bd1,
+0x2bec, 0x2bef,
+0x2e00, 0x2e42,
+0x2ff0, 0x2ffb,
+0x3000, 0x3004,
+0x3006, 0x3006,
+0x3008, 0x3020,
+0x3030, 0x3037,
+0x303c, 0x303f,
+0x309b, 0x309c,
+0x30a0, 0x30a0,
+0x30fb, 0x30fc,
+0x3190, 0x319f,
+0x31c0, 0x31e3,
+0x3220, 0x325f,
+0x327f, 0x32cf,
+0x3358, 0x33ff,
+0x4dc0, 0x4dff,
+0xa700, 0xa721,
+0xa788, 0xa78a,
+0xa830, 0xa839,
+0xa92e, 0xa92e,
+0xa9cf, 0xa9cf,
+0xab5b, 0xab5b,
+0xfd3e, 0xfd3f,
+0xfe10, 0xfe19,
+0xfe30, 0xfe52,
+0xfe54, 0xfe66,
+0xfe68, 0xfe6b,
+0xfeff, 0xfeff,
+0xff01, 0xff20,
+0xff3b, 0xff40,
+0xff5b, 0xff65,
+0xff70, 0xff70,
+0xff9e, 0xff9f,
+0xffe0, 0xffe6,
+0xffe8, 0xffee,
+0xfff9, 0xfffd,
+0x10100, 0x10102,
+0x10107, 0x10133,
+0x10137, 0x1013f,
+0x10190, 0x1019b,
+0x101d0, 0x101fc,
+0x102e1, 0x102fb,
+0x1bca0, 0x1bca3,
+0x1d000, 0x1d0f5,
+0x1d100, 0x1d126,
+0x1d129, 0x1d166,
+0x1d16a, 0x1d17a,
+0x1d183, 0x1d184,
+0x1d18c, 0x1d1a9,
+0x1d1ae, 0x1d1e8,
+0x1d300, 0x1d356,
+0x1d360, 0x1d371,
+0x1d400, 0x1d454,
+0x1d456, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d51e, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d552, 0x1d6a5,
+0x1d6a8, 0x1d7cb,
+0x1d7ce, 0x1d7ff,
+0x1f000, 0x1f02b,
+0x1f030, 0x1f093,
+0x1f0a0, 0x1f0ae,
+0x1f0b1, 0x1f0bf,
+0x1f0c1, 0x1f0cf,
+0x1f0d1, 0x1f0f5,
+0x1f100, 0x1f10c,
+0x1f110, 0x1f12e,
+0x1f130, 0x1f16b,
+0x1f170, 0x1f19a,
+0x1f1e6, 0x1f1ff,
+0x1f201, 0x1f202,
+0x1f210, 0x1f23a,
+0x1f240, 0x1f248,
+0x1f250, 0x1f251,
+0x1f300, 0x1f579,
+0x1f57b, 0x1f5a3,
+0x1f5a5, 0x1f6d0,
+0x1f6e0, 0x1f6ec,
+0x1f6f0, 0x1f6f3,
+0x1f700, 0x1f773,
+0x1f780, 0x1f7d4,
+0x1f800, 0x1f80b,
+0x1f810, 0x1f847,
+0x1f850, 0x1f859,
+0x1f860, 0x1f887,
+0x1f890, 0x1f8ad,
+0x1f910, 0x1f918,
+0x1f980, 0x1f984,
+0x1f9c0, 0x1f9c0,
+0xe0001, 0xe0001,
+0xe0020, 0xe007f,
+}; /* END of CR_Common */
+
+/* PROPERTY: 'Coptic': Script */
+static const OnigCodePoint
+CR_Coptic[] = { 3,
+0x03e2, 0x03ef,
+0x2c80, 0x2cf3,
+0x2cf9, 0x2cff,
+}; /* END of CR_Coptic */
+
/* PROPERTY: 'Cs': General Category */
static const OnigCodePoint
CR_Cs[] = { 1,
0xd800, 0xdfff,
}; /* END of CR_Cs */
+/* PROPERTY: 'Cuneiform': Script */
+static const OnigCodePoint
+CR_Cuneiform[] = { 4,
+0x12000, 0x12399,
+0x12400, 0x1246e,
+0x12470, 0x12474,
+0x12480, 0x12543,
+}; /* END of CR_Cuneiform */
+
+/* PROPERTY: 'Cypriot': Script */
+static const OnigCodePoint
+CR_Cypriot[] = { 6,
+0x10800, 0x10805,
+0x10808, 0x10808,
+0x1080a, 0x10835,
+0x10837, 0x10838,
+0x1083c, 0x1083c,
+0x1083f, 0x1083f,
+}; /* END of CR_Cypriot */
+
+/* PROPERTY: 'Cyrillic': Script */
+static const OnigCodePoint
+CR_Cyrillic[] = { 7,
+0x0400, 0x0484,
+0x0487, 0x052f,
+0x1d2b, 0x1d2b,
+0x1d78, 0x1d78,
+0x2de0, 0x2dff,
+0xa640, 0xa69f,
+0xfe2e, 0xfe2f,
+}; /* END of CR_Cyrillic */
+
+/* PROPERTY: 'Dash': Binary Property */
+static const OnigCodePoint
+CR_Dash[] = { 21,
+0x002d, 0x002d,
+0x058a, 0x058a,
+0x05be, 0x05be,
+0x1400, 0x1400,
+0x1806, 0x1806,
+0x2010, 0x2015,
+0x2053, 0x2053,
+0x207b, 0x207b,
+0x208b, 0x208b,
+0x2212, 0x2212,
+0x2e17, 0x2e17,
+0x2e1a, 0x2e1a,
+0x2e3a, 0x2e3b,
+0x2e40, 0x2e40,
+0x301c, 0x301c,
+0x3030, 0x3030,
+0x30a0, 0x30a0,
+0xfe31, 0xfe32,
+0xfe58, 0xfe58,
+0xfe63, 0xfe63,
+0xff0d, 0xff0d,
+}; /* END of CR_Dash */
+
+/* PROPERTY: 'Default_Ignorable_Code_Point': Derived Property */
+static const OnigCodePoint
+CR_Default_Ignorable_Code_Point[] = { 17,
+0x00ad, 0x00ad,
+0x034f, 0x034f,
+0x061c, 0x061c,
+0x115f, 0x1160,
+0x17b4, 0x17b5,
+0x180b, 0x180e,
+0x200b, 0x200f,
+0x202a, 0x202e,
+0x2060, 0x206f,
+0x3164, 0x3164,
+0xfe00, 0xfe0f,
+0xfeff, 0xfeff,
+0xffa0, 0xffa0,
+0xfff0, 0xfff8,
+0x1bca0, 0x1bca3,
+0x1d173, 0x1d17a,
+0xe0000, 0xe0fff,
+}; /* END of CR_Default_Ignorable_Code_Point */
+
+/* PROPERTY: 'Deprecated': Binary Property */
+static const OnigCodePoint
+CR_Deprecated[] = { 9,
+0x0149, 0x0149,
+0x0673, 0x0673,
+0x0f77, 0x0f77,
+0x0f79, 0x0f79,
+0x17a3, 0x17a4,
+0x206a, 0x206f,
+0x2329, 0x232a,
+0xe0001, 0xe0001,
+0xe007f, 0xe007f,
+}; /* END of CR_Deprecated */
+
+/* PROPERTY: 'Deseret': Script */
+static const OnigCodePoint
+CR_Deseret[] = { 1,
+0x10400, 0x1044f,
+}; /* END of CR_Deseret */
+
+/* PROPERTY: 'Devanagari': Script */
+static const OnigCodePoint
+CR_Devanagari[] = { 4,
+0x0900, 0x0950,
+0x0953, 0x0963,
+0x0966, 0x097f,
+0xa8e0, 0xa8fd,
+}; /* END of CR_Devanagari */
+
+/* PROPERTY: 'Diacritic': Binary Property */
+static const OnigCodePoint
+CR_Diacritic[] = { 147,
+0x005e, 0x005e,
+0x0060, 0x0060,
+0x00a8, 0x00a8,
+0x00af, 0x00af,
+0x00b4, 0x00b4,
+0x00b7, 0x00b8,
+0x02b0, 0x034e,
+0x0350, 0x0357,
+0x035d, 0x0362,
+0x0374, 0x0375,
+0x037a, 0x037a,
+0x0384, 0x0385,
+0x0483, 0x0487,
+0x0559, 0x0559,
+0x0591, 0x05a1,
+0x05a3, 0x05bd,
+0x05bf, 0x05bf,
+0x05c1, 0x05c2,
+0x05c4, 0x05c4,
+0x064b, 0x0652,
+0x0657, 0x0658,
+0x06df, 0x06e0,
+0x06e5, 0x06e6,
+0x06ea, 0x06ec,
+0x0730, 0x074a,
+0x07a6, 0x07b0,
+0x07eb, 0x07f5,
+0x0818, 0x0819,
+0x08e3, 0x08fe,
+0x093c, 0x093c,
+0x094d, 0x094d,
+0x0951, 0x0954,
+0x0971, 0x0971,
+0x09bc, 0x09bc,
+0x09cd, 0x09cd,
+0x0a3c, 0x0a3c,
+0x0a4d, 0x0a4d,
+0x0abc, 0x0abc,
+0x0acd, 0x0acd,
+0x0b3c, 0x0b3c,
+0x0b4d, 0x0b4d,
+0x0bcd, 0x0bcd,
+0x0c4d, 0x0c4d,
+0x0cbc, 0x0cbc,
+0x0ccd, 0x0ccd,
+0x0d4d, 0x0d4d,
+0x0dca, 0x0dca,
+0x0e47, 0x0e4c,
+0x0e4e, 0x0e4e,
+0x0ec8, 0x0ecc,
+0x0f18, 0x0f19,
+0x0f35, 0x0f35,
+0x0f37, 0x0f37,
+0x0f39, 0x0f39,
+0x0f3e, 0x0f3f,
+0x0f82, 0x0f84,
+0x0f86, 0x0f87,
+0x0fc6, 0x0fc6,
+0x1037, 0x1037,
+0x1039, 0x103a,
+0x1087, 0x108d,
+0x108f, 0x108f,
+0x109a, 0x109b,
+0x17c9, 0x17d3,
+0x17dd, 0x17dd,
+0x1939, 0x193b,
+0x1a75, 0x1a7c,
+0x1a7f, 0x1a7f,
+0x1ab0, 0x1abd,
+0x1b34, 0x1b34,
+0x1b44, 0x1b44,
+0x1b6b, 0x1b73,
+0x1baa, 0x1bab,
+0x1c36, 0x1c37,
+0x1c78, 0x1c7d,
+0x1cd0, 0x1ce8,
+0x1ced, 0x1ced,
+0x1cf4, 0x1cf4,
+0x1cf8, 0x1cf9,
+0x1d2c, 0x1d6a,
+0x1dc4, 0x1dcf,
+0x1df5, 0x1df5,
+0x1dfd, 0x1dff,
+0x1fbd, 0x1fbd,
+0x1fbf, 0x1fc1,
+0x1fcd, 0x1fcf,
+0x1fdd, 0x1fdf,
+0x1fed, 0x1fef,
+0x1ffd, 0x1ffe,
+0x2cef, 0x2cf1,
+0x2e2f, 0x2e2f,
+0x302a, 0x302f,
+0x3099, 0x309c,
+0x30fc, 0x30fc,
+0xa66f, 0xa66f,
+0xa67c, 0xa67d,
+0xa67f, 0xa67f,
+0xa69c, 0xa69d,
+0xa6f0, 0xa6f1,
+0xa717, 0xa721,
+0xa788, 0xa788,
+0xa7f8, 0xa7f9,
+0xa8c4, 0xa8c4,
+0xa8e0, 0xa8f1,
+0xa92b, 0xa92e,
+0xa953, 0xa953,
+0xa9b3, 0xa9b3,
+0xa9c0, 0xa9c0,
+0xa9e5, 0xa9e5,
+0xaa7b, 0xaa7d,
+0xaabf, 0xaac2,
+0xaaf6, 0xaaf6,
+0xab5b, 0xab5f,
+0xabec, 0xabed,
+0xfb1e, 0xfb1e,
+0xfe20, 0xfe2f,
+0xff3e, 0xff3e,
+0xff40, 0xff40,
+0xff70, 0xff70,
+0xff9e, 0xff9f,
+0xffe3, 0xffe3,
+0x102e0, 0x102e0,
+0x10ae5, 0x10ae6,
+0x110b9, 0x110ba,
+0x11133, 0x11134,
+0x11173, 0x11173,
+0x111c0, 0x111c0,
+0x111ca, 0x111cc,
+0x11235, 0x11236,
+0x112e9, 0x112ea,
+0x1133c, 0x1133c,
+0x1134d, 0x1134d,
+0x11366, 0x1136c,
+0x11370, 0x11374,
+0x114c2, 0x114c3,
+0x115bf, 0x115c0,
+0x1163f, 0x1163f,
+0x116b6, 0x116b7,
+0x1172b, 0x1172b,
+0x16af0, 0x16af4,
+0x16f8f, 0x16f9f,
+0x1d167, 0x1d169,
+0x1d16d, 0x1d172,
+0x1d17b, 0x1d182,
+0x1d185, 0x1d18b,
+0x1d1aa, 0x1d1ad,
+0x1e8d0, 0x1e8d6,
+}; /* END of CR_Diacritic */
+
+/* PROPERTY: 'Duployan': Script */
+static const OnigCodePoint
+CR_Duployan[] = { 5,
+0x1bc00, 0x1bc6a,
+0x1bc70, 0x1bc7c,
+0x1bc80, 0x1bc88,
+0x1bc90, 0x1bc99,
+0x1bc9c, 0x1bc9f,
+}; /* END of CR_Duployan */
+
+/* PROPERTY: 'Egyptian_Hieroglyphs': Script */
+static const OnigCodePoint
+CR_Egyptian_Hieroglyphs[] = { 1,
+0x13000, 0x1342e,
+}; /* END of CR_Egyptian_Hieroglyphs */
+
+/* PROPERTY: 'Elbasan': Script */
+static const OnigCodePoint
+CR_Elbasan[] = { 1,
+0x10500, 0x10527,
+}; /* END of CR_Elbasan */
+
+/* PROPERTY: 'Ethiopic': Script */
+static const OnigCodePoint
+CR_Ethiopic[] = { 32,
+0x1200, 0x1248,
+0x124a, 0x124d,
+0x1250, 0x1256,
+0x1258, 0x1258,
+0x125a, 0x125d,
+0x1260, 0x1288,
+0x128a, 0x128d,
+0x1290, 0x12b0,
+0x12b2, 0x12b5,
+0x12b8, 0x12be,
+0x12c0, 0x12c0,
+0x12c2, 0x12c5,
+0x12c8, 0x12d6,
+0x12d8, 0x1310,
+0x1312, 0x1315,
+0x1318, 0x135a,
+0x135d, 0x137c,
+0x1380, 0x1399,
+0x2d80, 0x2d96,
+0x2da0, 0x2da6,
+0x2da8, 0x2dae,
+0x2db0, 0x2db6,
+0x2db8, 0x2dbe,
+0x2dc0, 0x2dc6,
+0x2dc8, 0x2dce,
+0x2dd0, 0x2dd6,
+0x2dd8, 0x2dde,
+0xab01, 0xab06,
+0xab09, 0xab0e,
+0xab11, 0xab16,
+0xab20, 0xab26,
+0xab28, 0xab2e,
+}; /* END of CR_Ethiopic */
+
+/* PROPERTY: 'Extender': Binary Property */
+static const OnigCodePoint
+CR_Extender[] = { 26,
+0x00b7, 0x00b7,
+0x02d0, 0x02d1,
+0x0640, 0x0640,
+0x07fa, 0x07fa,
+0x0e46, 0x0e46,
+0x0ec6, 0x0ec6,
+0x180a, 0x180a,
+0x1843, 0x1843,
+0x1aa7, 0x1aa7,
+0x1c36, 0x1c36,
+0x1c7b, 0x1c7b,
+0x3005, 0x3005,
+0x3031, 0x3035,
+0x309d, 0x309e,
+0x30fc, 0x30fe,
+0xa015, 0xa015,
+0xa60c, 0xa60c,
+0xa9cf, 0xa9cf,
+0xa9e6, 0xa9e6,
+0xaa70, 0xaa70,
+0xaadd, 0xaadd,
+0xaaf3, 0xaaf4,
+0xff70, 0xff70,
+0x1135d, 0x1135d,
+0x115c6, 0x115c8,
+0x16b42, 0x16b43,
+}; /* END of CR_Extender */
+
+/* PROPERTY: 'Georgian': Script */
+static const OnigCodePoint
+CR_Georgian[] = { 8,
+0x10a0, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x10d0, 0x10fa,
+0x10fc, 0x10ff,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+}; /* END of CR_Georgian */
+
+/* PROPERTY: 'Glagolitic': Script */
+static const OnigCodePoint
+CR_Glagolitic[] = { 2,
+0x2c00, 0x2c2e,
+0x2c30, 0x2c5e,
+}; /* END of CR_Glagolitic */
+
+/* PROPERTY: 'Gothic': Script */
+static const OnigCodePoint
+CR_Gothic[] = { 1,
+0x10330, 0x1034a,
+}; /* END of CR_Gothic */
+
+/* PROPERTY: 'Grantha': Script */
+static const OnigCodePoint
+CR_Grantha[] = { 15,
+0x11300, 0x11303,
+0x11305, 0x1130c,
+0x1130f, 0x11310,
+0x11313, 0x11328,
+0x1132a, 0x11330,
+0x11332, 0x11333,
+0x11335, 0x11339,
+0x1133c, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134d,
+0x11350, 0x11350,
+0x11357, 0x11357,
+0x1135d, 0x11363,
+0x11366, 0x1136c,
+0x11370, 0x11374,
+}; /* END of CR_Grantha */
+
+/* PROPERTY: 'Grapheme_Base': Derived Property */
+static const OnigCodePoint
+CR_Grapheme_Base[] = { 743,
+0x0020, 0x007e,
+0x00a0, 0x00ac,
+0x00ae, 0x02ff,
+0x0370, 0x0377,
+0x037a, 0x037f,
+0x0384, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x03a1,
+0x03a3, 0x0482,
+0x048a, 0x052f,
+0x0531, 0x0556,
+0x0559, 0x055f,
+0x0561, 0x0587,
+0x0589, 0x058a,
+0x058d, 0x058f,
+0x05be, 0x05be,
+0x05c0, 0x05c0,
+0x05c3, 0x05c3,
+0x05c6, 0x05c6,
+0x05d0, 0x05ea,
+0x05f0, 0x05f4,
+0x0606, 0x060f,
+0x061b, 0x061b,
+0x061e, 0x064a,
+0x0660, 0x066f,
+0x0671, 0x06d5,
+0x06de, 0x06de,
+0x06e5, 0x06e6,
+0x06e9, 0x06e9,
+0x06ee, 0x070d,
+0x0710, 0x0710,
+0x0712, 0x072f,
+0x074d, 0x07a5,
+0x07b1, 0x07b1,
+0x07c0, 0x07ea,
+0x07f4, 0x07fa,
+0x0800, 0x0815,
+0x081a, 0x081a,
+0x0824, 0x0824,
+0x0828, 0x0828,
+0x0830, 0x083e,
+0x0840, 0x0858,
+0x085e, 0x085e,
+0x08a0, 0x08b4,
+0x0903, 0x0939,
+0x093b, 0x093b,
+0x093d, 0x0940,
+0x0949, 0x094c,
+0x094e, 0x0950,
+0x0958, 0x0961,
+0x0964, 0x0980,
+0x0982, 0x0983,
+0x0985, 0x098c,
+0x098f, 0x0990,
+0x0993, 0x09a8,
+0x09aa, 0x09b0,
+0x09b2, 0x09b2,
+0x09b6, 0x09b9,
+0x09bd, 0x09bd,
+0x09bf, 0x09c0,
+0x09c7, 0x09c8,
+0x09cb, 0x09cc,
+0x09ce, 0x09ce,
+0x09dc, 0x09dd,
+0x09df, 0x09e1,
+0x09e6, 0x09fb,
+0x0a03, 0x0a03,
+0x0a05, 0x0a0a,
+0x0a0f, 0x0a10,
+0x0a13, 0x0a28,
+0x0a2a, 0x0a30,
+0x0a32, 0x0a33,
+0x0a35, 0x0a36,
+0x0a38, 0x0a39,
+0x0a3e, 0x0a40,
+0x0a59, 0x0a5c,
+0x0a5e, 0x0a5e,
+0x0a66, 0x0a6f,
+0x0a72, 0x0a74,
+0x0a83, 0x0a83,
+0x0a85, 0x0a8d,
+0x0a8f, 0x0a91,
+0x0a93, 0x0aa8,
+0x0aaa, 0x0ab0,
+0x0ab2, 0x0ab3,
+0x0ab5, 0x0ab9,
+0x0abd, 0x0ac0,
+0x0ac9, 0x0ac9,
+0x0acb, 0x0acc,
+0x0ad0, 0x0ad0,
+0x0ae0, 0x0ae1,
+0x0ae6, 0x0af1,
+0x0af9, 0x0af9,
+0x0b02, 0x0b03,
+0x0b05, 0x0b0c,
+0x0b0f, 0x0b10,
+0x0b13, 0x0b28,
+0x0b2a, 0x0b30,
+0x0b32, 0x0b33,
+0x0b35, 0x0b39,
+0x0b3d, 0x0b3d,
+0x0b40, 0x0b40,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4c,
+0x0b5c, 0x0b5d,
+0x0b5f, 0x0b61,
+0x0b66, 0x0b77,
+0x0b83, 0x0b83,
+0x0b85, 0x0b8a,
+0x0b8e, 0x0b90,
+0x0b92, 0x0b95,
+0x0b99, 0x0b9a,
+0x0b9c, 0x0b9c,
+0x0b9e, 0x0b9f,
+0x0ba3, 0x0ba4,
+0x0ba8, 0x0baa,
+0x0bae, 0x0bb9,
+0x0bbf, 0x0bbf,
+0x0bc1, 0x0bc2,
+0x0bc6, 0x0bc8,
+0x0bca, 0x0bcc,
+0x0bd0, 0x0bd0,
+0x0be6, 0x0bfa,
+0x0c01, 0x0c03,
+0x0c05, 0x0c0c,
+0x0c0e, 0x0c10,
+0x0c12, 0x0c28,
+0x0c2a, 0x0c39,
+0x0c3d, 0x0c3d,
+0x0c41, 0x0c44,
+0x0c58, 0x0c5a,
+0x0c60, 0x0c61,
+0x0c66, 0x0c6f,
+0x0c78, 0x0c7f,
+0x0c82, 0x0c83,
+0x0c85, 0x0c8c,
+0x0c8e, 0x0c90,
+0x0c92, 0x0ca8,
+0x0caa, 0x0cb3,
+0x0cb5, 0x0cb9,
+0x0cbd, 0x0cbe,
+0x0cc0, 0x0cc1,
+0x0cc3, 0x0cc4,
+0x0cc7, 0x0cc8,
+0x0cca, 0x0ccb,
+0x0cde, 0x0cde,
+0x0ce0, 0x0ce1,
+0x0ce6, 0x0cef,
+0x0cf1, 0x0cf2,
+0x0d02, 0x0d03,
+0x0d05, 0x0d0c,
+0x0d0e, 0x0d10,
+0x0d12, 0x0d3a,
+0x0d3d, 0x0d3d,
+0x0d3f, 0x0d40,
+0x0d46, 0x0d48,
+0x0d4a, 0x0d4c,
+0x0d4e, 0x0d4e,
+0x0d5f, 0x0d61,
+0x0d66, 0x0d75,
+0x0d79, 0x0d7f,
+0x0d82, 0x0d83,
+0x0d85, 0x0d96,
+0x0d9a, 0x0db1,
+0x0db3, 0x0dbb,
+0x0dbd, 0x0dbd,
+0x0dc0, 0x0dc6,
+0x0dd0, 0x0dd1,
+0x0dd8, 0x0dde,
+0x0de6, 0x0def,
+0x0df2, 0x0df4,
+0x0e01, 0x0e30,
+0x0e32, 0x0e33,
+0x0e3f, 0x0e46,
+0x0e4f, 0x0e5b,
+0x0e81, 0x0e82,
+0x0e84, 0x0e84,
+0x0e87, 0x0e88,
+0x0e8a, 0x0e8a,
+0x0e8d, 0x0e8d,
+0x0e94, 0x0e97,
+0x0e99, 0x0e9f,
+0x0ea1, 0x0ea3,
+0x0ea5, 0x0ea5,
+0x0ea7, 0x0ea7,
+0x0eaa, 0x0eab,
+0x0ead, 0x0eb0,
+0x0eb2, 0x0eb3,
+0x0ebd, 0x0ebd,
+0x0ec0, 0x0ec4,
+0x0ec6, 0x0ec6,
+0x0ed0, 0x0ed9,
+0x0edc, 0x0edf,
+0x0f00, 0x0f17,
+0x0f1a, 0x0f34,
+0x0f36, 0x0f36,
+0x0f38, 0x0f38,
+0x0f3a, 0x0f47,
+0x0f49, 0x0f6c,
+0x0f7f, 0x0f7f,
+0x0f85, 0x0f85,
+0x0f88, 0x0f8c,
+0x0fbe, 0x0fc5,
+0x0fc7, 0x0fcc,
+0x0fce, 0x0fda,
+0x1000, 0x102c,
+0x1031, 0x1031,
+0x1038, 0x1038,
+0x103b, 0x103c,
+0x103f, 0x1057,
+0x105a, 0x105d,
+0x1061, 0x1070,
+0x1075, 0x1081,
+0x1083, 0x1084,
+0x1087, 0x108c,
+0x108e, 0x109c,
+0x109e, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x10d0, 0x1248,
+0x124a, 0x124d,
+0x1250, 0x1256,
+0x1258, 0x1258,
+0x125a, 0x125d,
+0x1260, 0x1288,
+0x128a, 0x128d,
+0x1290, 0x12b0,
+0x12b2, 0x12b5,
+0x12b8, 0x12be,
+0x12c0, 0x12c0,
+0x12c2, 0x12c5,
+0x12c8, 0x12d6,
+0x12d8, 0x1310,
+0x1312, 0x1315,
+0x1318, 0x135a,
+0x1360, 0x137c,
+0x1380, 0x1399,
+0x13a0, 0x13f5,
+0x13f8, 0x13fd,
+0x1400, 0x169c,
+0x16a0, 0x16f8,
+0x1700, 0x170c,
+0x170e, 0x1711,
+0x1720, 0x1731,
+0x1735, 0x1736,
+0x1740, 0x1751,
+0x1760, 0x176c,
+0x176e, 0x1770,
+0x1780, 0x17b3,
+0x17b6, 0x17b6,
+0x17be, 0x17c5,
+0x17c7, 0x17c8,
+0x17d4, 0x17dc,
+0x17e0, 0x17e9,
+0x17f0, 0x17f9,
+0x1800, 0x180a,
+0x1810, 0x1819,
+0x1820, 0x1877,
+0x1880, 0x18a8,
+0x18aa, 0x18aa,
+0x18b0, 0x18f5,
+0x1900, 0x191e,
+0x1923, 0x1926,
+0x1929, 0x192b,
+0x1930, 0x1931,
+0x1933, 0x1938,
+0x1940, 0x1940,
+0x1944, 0x196d,
+0x1970, 0x1974,
+0x1980, 0x19ab,
+0x19b0, 0x19c9,
+0x19d0, 0x19da,
+0x19de, 0x1a16,
+0x1a19, 0x1a1a,
+0x1a1e, 0x1a55,
+0x1a57, 0x1a57,
+0x1a61, 0x1a61,
+0x1a63, 0x1a64,
+0x1a6d, 0x1a72,
+0x1a80, 0x1a89,
+0x1a90, 0x1a99,
+0x1aa0, 0x1aad,
+0x1b04, 0x1b33,
+0x1b35, 0x1b35,
+0x1b3b, 0x1b3b,
+0x1b3d, 0x1b41,
+0x1b43, 0x1b4b,
+0x1b50, 0x1b6a,
+0x1b74, 0x1b7c,
+0x1b82, 0x1ba1,
+0x1ba6, 0x1ba7,
+0x1baa, 0x1baa,
+0x1bae, 0x1be5,
+0x1be7, 0x1be7,
+0x1bea, 0x1bec,
+0x1bee, 0x1bee,
+0x1bf2, 0x1bf3,
+0x1bfc, 0x1c2b,
+0x1c34, 0x1c35,
+0x1c3b, 0x1c49,
+0x1c4d, 0x1c7f,
+0x1cc0, 0x1cc7,
+0x1cd3, 0x1cd3,
+0x1ce1, 0x1ce1,
+0x1ce9, 0x1cec,
+0x1cee, 0x1cf3,
+0x1cf5, 0x1cf6,
+0x1d00, 0x1dbf,
+0x1e00, 0x1f15,
+0x1f18, 0x1f1d,
+0x1f20, 0x1f45,
+0x1f48, 0x1f4d,
+0x1f50, 0x1f57,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f7d,
+0x1f80, 0x1fb4,
+0x1fb6, 0x1fc4,
+0x1fc6, 0x1fd3,
+0x1fd6, 0x1fdb,
+0x1fdd, 0x1fef,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ffe,
+0x2000, 0x200a,
+0x2010, 0x2027,
+0x202f, 0x205f,
+0x2070, 0x2071,
+0x2074, 0x208e,
+0x2090, 0x209c,
+0x20a0, 0x20be,
+0x2100, 0x218b,
+0x2190, 0x23fa,
+0x2400, 0x2426,
+0x2440, 0x244a,
+0x2460, 0x2b73,
+0x2b76, 0x2b95,
+0x2b98, 0x2bb9,
+0x2bbd, 0x2bc8,
+0x2bca, 0x2bd1,
+0x2bec, 0x2bef,
+0x2c00, 0x2c2e,
+0x2c30, 0x2c5e,
+0x2c60, 0x2cee,
+0x2cf2, 0x2cf3,
+0x2cf9, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0x2d30, 0x2d67,
+0x2d6f, 0x2d70,
+0x2d80, 0x2d96,
+0x2da0, 0x2da6,
+0x2da8, 0x2dae,
+0x2db0, 0x2db6,
+0x2db8, 0x2dbe,
+0x2dc0, 0x2dc6,
+0x2dc8, 0x2dce,
+0x2dd0, 0x2dd6,
+0x2dd8, 0x2dde,
+0x2e00, 0x2e42,
+0x2e80, 0x2e99,
+0x2e9b, 0x2ef3,
+0x2f00, 0x2fd5,
+0x2ff0, 0x2ffb,
+0x3000, 0x3029,
+0x3030, 0x303f,
+0x3041, 0x3096,
+0x309b, 0x30ff,
+0x3105, 0x312d,
+0x3131, 0x318e,
+0x3190, 0x31ba,
+0x31c0, 0x31e3,
+0x31f0, 0x321e,
+0x3220, 0x32fe,
+0x3300, 0x4db5,
+0x4dc0, 0x9fd5,
+0xa000, 0xa48c,
+0xa490, 0xa4c6,
+0xa4d0, 0xa62b,
+0xa640, 0xa66e,
+0xa673, 0xa673,
+0xa67e, 0xa69d,
+0xa6a0, 0xa6ef,
+0xa6f2, 0xa6f7,
+0xa700, 0xa7ad,
+0xa7b0, 0xa7b7,
+0xa7f7, 0xa801,
+0xa803, 0xa805,
+0xa807, 0xa80a,
+0xa80c, 0xa824,
+0xa827, 0xa82b,
+0xa830, 0xa839,
+0xa840, 0xa877,
+0xa880, 0xa8c3,
+0xa8ce, 0xa8d9,
+0xa8f2, 0xa8fd,
+0xa900, 0xa925,
+0xa92e, 0xa946,
+0xa952, 0xa953,
+0xa95f, 0xa97c,
+0xa983, 0xa9b2,
+0xa9b4, 0xa9b5,
+0xa9ba, 0xa9bb,
+0xa9bd, 0xa9cd,
+0xa9cf, 0xa9d9,
+0xa9de, 0xa9e4,
+0xa9e6, 0xa9fe,
+0xaa00, 0xaa28,
+0xaa2f, 0xaa30,
+0xaa33, 0xaa34,
+0xaa40, 0xaa42,
+0xaa44, 0xaa4b,
+0xaa4d, 0xaa4d,
+0xaa50, 0xaa59,
+0xaa5c, 0xaa7b,
+0xaa7d, 0xaaaf,
+0xaab1, 0xaab1,
+0xaab5, 0xaab6,
+0xaab9, 0xaabd,
+0xaac0, 0xaac0,
+0xaac2, 0xaac2,
+0xaadb, 0xaaeb,
+0xaaee, 0xaaf5,
+0xab01, 0xab06,
+0xab09, 0xab0e,
+0xab11, 0xab16,
+0xab20, 0xab26,
+0xab28, 0xab2e,
+0xab30, 0xab65,
+0xab70, 0xabe4,
+0xabe6, 0xabe7,
+0xabe9, 0xabec,
+0xabf0, 0xabf9,
+0xac00, 0xd7a3,
+0xd7b0, 0xd7c6,
+0xd7cb, 0xd7fb,
+0xf900, 0xfa6d,
+0xfa70, 0xfad9,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xfb1d, 0xfb1d,
+0xfb1f, 0xfb36,
+0xfb38, 0xfb3c,
+0xfb3e, 0xfb3e,
+0xfb40, 0xfb41,
+0xfb43, 0xfb44,
+0xfb46, 0xfbc1,
+0xfbd3, 0xfd3f,
+0xfd50, 0xfd8f,
+0xfd92, 0xfdc7,
+0xfdf0, 0xfdfd,
+0xfe10, 0xfe19,
+0xfe30, 0xfe52,
+0xfe54, 0xfe66,
+0xfe68, 0xfe6b,
+0xfe70, 0xfe74,
+0xfe76, 0xfefc,
+0xff01, 0xff9d,
+0xffa0, 0xffbe,
+0xffc2, 0xffc7,
+0xffca, 0xffcf,
+0xffd2, 0xffd7,
+0xffda, 0xffdc,
+0xffe0, 0xffe6,
+0xffe8, 0xffee,
+0xfffc, 0xfffd,
+0x10000, 0x1000b,
+0x1000d, 0x10026,
+0x10028, 0x1003a,
+0x1003c, 0x1003d,
+0x1003f, 0x1004d,
+0x10050, 0x1005d,
+0x10080, 0x100fa,
+0x10100, 0x10102,
+0x10107, 0x10133,
+0x10137, 0x1018c,
+0x10190, 0x1019b,
+0x101a0, 0x101a0,
+0x101d0, 0x101fc,
+0x10280, 0x1029c,
+0x102a0, 0x102d0,
+0x102e1, 0x102fb,
+0x10300, 0x10323,
+0x10330, 0x1034a,
+0x10350, 0x10375,
+0x10380, 0x1039d,
+0x1039f, 0x103c3,
+0x103c8, 0x103d5,
+0x10400, 0x1049d,
+0x104a0, 0x104a9,
+0x10500, 0x10527,
+0x10530, 0x10563,
+0x1056f, 0x1056f,
+0x10600, 0x10736,
+0x10740, 0x10755,
+0x10760, 0x10767,
+0x10800, 0x10805,
+0x10808, 0x10808,
+0x1080a, 0x10835,
+0x10837, 0x10838,
+0x1083c, 0x1083c,
+0x1083f, 0x10855,
+0x10857, 0x1089e,
+0x108a7, 0x108af,
+0x108e0, 0x108f2,
+0x108f4, 0x108f5,
+0x108fb, 0x1091b,
+0x1091f, 0x10939,
+0x1093f, 0x1093f,
+0x10980, 0x109b7,
+0x109bc, 0x109cf,
+0x109d2, 0x10a00,
+0x10a10, 0x10a13,
+0x10a15, 0x10a17,
+0x10a19, 0x10a33,
+0x10a40, 0x10a47,
+0x10a50, 0x10a58,
+0x10a60, 0x10a9f,
+0x10ac0, 0x10ae4,
+0x10aeb, 0x10af6,
+0x10b00, 0x10b35,
+0x10b39, 0x10b55,
+0x10b58, 0x10b72,
+0x10b78, 0x10b91,
+0x10b99, 0x10b9c,
+0x10ba9, 0x10baf,
+0x10c00, 0x10c48,
+0x10c80, 0x10cb2,
+0x10cc0, 0x10cf2,
+0x10cfa, 0x10cff,
+0x10e60, 0x10e7e,
+0x11000, 0x11000,
+0x11002, 0x11037,
+0x11047, 0x1104d,
+0x11052, 0x1106f,
+0x11082, 0x110b2,
+0x110b7, 0x110b8,
+0x110bb, 0x110bc,
+0x110be, 0x110c1,
+0x110d0, 0x110e8,
+0x110f0, 0x110f9,
+0x11103, 0x11126,
+0x1112c, 0x1112c,
+0x11136, 0x11143,
+0x11150, 0x11172,
+0x11174, 0x11176,
+0x11182, 0x111b5,
+0x111bf, 0x111c9,
+0x111cd, 0x111cd,
+0x111d0, 0x111df,
+0x111e1, 0x111f4,
+0x11200, 0x11211,
+0x11213, 0x1122e,
+0x11232, 0x11233,
+0x11235, 0x11235,
+0x11238, 0x1123d,
+0x11280, 0x11286,
+0x11288, 0x11288,
+0x1128a, 0x1128d,
+0x1128f, 0x1129d,
+0x1129f, 0x112a9,
+0x112b0, 0x112de,
+0x112e0, 0x112e2,
+0x112f0, 0x112f9,
+0x11302, 0x11303,
+0x11305, 0x1130c,
+0x1130f, 0x11310,
+0x11313, 0x11328,
+0x1132a, 0x11330,
+0x11332, 0x11333,
+0x11335, 0x11339,
+0x1133d, 0x1133d,
+0x1133f, 0x1133f,
+0x11341, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134d,
+0x11350, 0x11350,
+0x1135d, 0x11363,
+0x11480, 0x114af,
+0x114b1, 0x114b2,
+0x114b9, 0x114b9,
+0x114bb, 0x114bc,
+0x114be, 0x114be,
+0x114c1, 0x114c1,
+0x114c4, 0x114c7,
+0x114d0, 0x114d9,
+0x11580, 0x115ae,
+0x115b0, 0x115b1,
+0x115b8, 0x115bb,
+0x115be, 0x115be,
+0x115c1, 0x115db,
+0x11600, 0x11632,
+0x1163b, 0x1163c,
+0x1163e, 0x1163e,
+0x11641, 0x11644,
+0x11650, 0x11659,
+0x11680, 0x116aa,
+0x116ac, 0x116ac,
+0x116ae, 0x116af,
+0x116b6, 0x116b6,
+0x116c0, 0x116c9,
+0x11700, 0x11719,
+0x11720, 0x11721,
+0x11726, 0x11726,
+0x11730, 0x1173f,
+0x118a0, 0x118f2,
+0x118ff, 0x118ff,
+0x11ac0, 0x11af8,
+0x12000, 0x12399,
+0x12400, 0x1246e,
+0x12470, 0x12474,
+0x12480, 0x12543,
+0x13000, 0x1342e,
+0x14400, 0x14646,
+0x16800, 0x16a38,
+0x16a40, 0x16a5e,
+0x16a60, 0x16a69,
+0x16a6e, 0x16a6f,
+0x16ad0, 0x16aed,
+0x16af5, 0x16af5,
+0x16b00, 0x16b2f,
+0x16b37, 0x16b45,
+0x16b50, 0x16b59,
+0x16b5b, 0x16b61,
+0x16b63, 0x16b77,
+0x16b7d, 0x16b8f,
+0x16f00, 0x16f44,
+0x16f50, 0x16f7e,
+0x16f93, 0x16f9f,
+0x1b000, 0x1b001,
+0x1bc00, 0x1bc6a,
+0x1bc70, 0x1bc7c,
+0x1bc80, 0x1bc88,
+0x1bc90, 0x1bc99,
+0x1bc9c, 0x1bc9c,
+0x1bc9f, 0x1bc9f,
+0x1d000, 0x1d0f5,
+0x1d100, 0x1d126,
+0x1d129, 0x1d164,
+0x1d166, 0x1d166,
+0x1d16a, 0x1d16d,
+0x1d183, 0x1d184,
+0x1d18c, 0x1d1a9,
+0x1d1ae, 0x1d1e8,
+0x1d200, 0x1d241,
+0x1d245, 0x1d245,
+0x1d300, 0x1d356,
+0x1d360, 0x1d371,
+0x1d400, 0x1d454,
+0x1d456, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d51e, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d552, 0x1d6a5,
+0x1d6a8, 0x1d7cb,
+0x1d7ce, 0x1d9ff,
+0x1da37, 0x1da3a,
+0x1da6d, 0x1da74,
+0x1da76, 0x1da83,
+0x1da85, 0x1da8b,
+0x1e800, 0x1e8c4,
+0x1e8c7, 0x1e8cf,
+0x1ee00, 0x1ee03,
+0x1ee05, 0x1ee1f,
+0x1ee21, 0x1ee22,
+0x1ee24, 0x1ee24,
+0x1ee27, 0x1ee27,
+0x1ee29, 0x1ee32,
+0x1ee34, 0x1ee37,
+0x1ee39, 0x1ee39,
+0x1ee3b, 0x1ee3b,
+0x1ee42, 0x1ee42,
+0x1ee47, 0x1ee47,
+0x1ee49, 0x1ee49,
+0x1ee4b, 0x1ee4b,
+0x1ee4d, 0x1ee4f,
+0x1ee51, 0x1ee52,
+0x1ee54, 0x1ee54,
+0x1ee57, 0x1ee57,
+0x1ee59, 0x1ee59,
+0x1ee5b, 0x1ee5b,
+0x1ee5d, 0x1ee5d,
+0x1ee5f, 0x1ee5f,
+0x1ee61, 0x1ee62,
+0x1ee64, 0x1ee64,
+0x1ee67, 0x1ee6a,
+0x1ee6c, 0x1ee72,
+0x1ee74, 0x1ee77,
+0x1ee79, 0x1ee7c,
+0x1ee7e, 0x1ee7e,
+0x1ee80, 0x1ee89,
+0x1ee8b, 0x1ee9b,
+0x1eea1, 0x1eea3,
+0x1eea5, 0x1eea9,
+0x1eeab, 0x1eebb,
+0x1eef0, 0x1eef1,
+0x1f000, 0x1f02b,
+0x1f030, 0x1f093,
+0x1f0a0, 0x1f0ae,
+0x1f0b1, 0x1f0bf,
+0x1f0c1, 0x1f0cf,
+0x1f0d1, 0x1f0f5,
+0x1f100, 0x1f10c,
+0x1f110, 0x1f12e,
+0x1f130, 0x1f16b,
+0x1f170, 0x1f19a,
+0x1f1e6, 0x1f202,
+0x1f210, 0x1f23a,
+0x1f240, 0x1f248,
+0x1f250, 0x1f251,
+0x1f300, 0x1f579,
+0x1f57b, 0x1f5a3,
+0x1f5a5, 0x1f6d0,
+0x1f6e0, 0x1f6ec,
+0x1f6f0, 0x1f6f3,
+0x1f700, 0x1f773,
+0x1f780, 0x1f7d4,
+0x1f800, 0x1f80b,
+0x1f810, 0x1f847,
+0x1f850, 0x1f859,
+0x1f860, 0x1f887,
+0x1f890, 0x1f8ad,
+0x1f910, 0x1f918,
+0x1f980, 0x1f984,
+0x1f9c0, 0x1f9c0,
+0x20000, 0x2a6d6,
+0x2a700, 0x2b734,
+0x2b740, 0x2b81d,
+0x2b820, 0x2cea1,
+0x2f800, 0x2fa1d,
+}; /* END of CR_Grapheme_Base */
+
+/* PROPERTY: 'Grapheme_Extend': Derived Property */
+static const OnigCodePoint
+CR_Grapheme_Extend[] = { 283,
+0x0300, 0x036f,
+0x0483, 0x0489,
+0x0591, 0x05bd,
+0x05bf, 0x05bf,
+0x05c1, 0x05c2,
+0x05c4, 0x05c5,
+0x05c7, 0x05c7,
+0x0610, 0x061a,
+0x064b, 0x065f,
+0x0670, 0x0670,
+0x06d6, 0x06dc,
+0x06df, 0x06e4,
+0x06e7, 0x06e8,
+0x06ea, 0x06ed,
+0x0711, 0x0711,
+0x0730, 0x074a,
+0x07a6, 0x07b0,
+0x07eb, 0x07f3,
+0x0816, 0x0819,
+0x081b, 0x0823,
+0x0825, 0x0827,
+0x0829, 0x082d,
+0x0859, 0x085b,
+0x08e3, 0x0902,
+0x093a, 0x093a,
+0x093c, 0x093c,
+0x0941, 0x0948,
+0x094d, 0x094d,
+0x0951, 0x0957,
+0x0962, 0x0963,
+0x0981, 0x0981,
+0x09bc, 0x09bc,
+0x09be, 0x09be,
+0x09c1, 0x09c4,
+0x09cd, 0x09cd,
+0x09d7, 0x09d7,
+0x09e2, 0x09e3,
+0x0a01, 0x0a02,
+0x0a3c, 0x0a3c,
+0x0a41, 0x0a42,
+0x0a47, 0x0a48,
+0x0a4b, 0x0a4d,
+0x0a51, 0x0a51,
+0x0a70, 0x0a71,
+0x0a75, 0x0a75,
+0x0a81, 0x0a82,
+0x0abc, 0x0abc,
+0x0ac1, 0x0ac5,
+0x0ac7, 0x0ac8,
+0x0acd, 0x0acd,
+0x0ae2, 0x0ae3,
+0x0b01, 0x0b01,
+0x0b3c, 0x0b3c,
+0x0b3e, 0x0b3f,
+0x0b41, 0x0b44,
+0x0b4d, 0x0b4d,
+0x0b56, 0x0b57,
+0x0b62, 0x0b63,
+0x0b82, 0x0b82,
+0x0bbe, 0x0bbe,
+0x0bc0, 0x0bc0,
+0x0bcd, 0x0bcd,
+0x0bd7, 0x0bd7,
+0x0c00, 0x0c00,
+0x0c3e, 0x0c40,
+0x0c46, 0x0c48,
+0x0c4a, 0x0c4d,
+0x0c55, 0x0c56,
+0x0c62, 0x0c63,
+0x0c81, 0x0c81,
+0x0cbc, 0x0cbc,
+0x0cbf, 0x0cbf,
+0x0cc2, 0x0cc2,
+0x0cc6, 0x0cc6,
+0x0ccc, 0x0ccd,
+0x0cd5, 0x0cd6,
+0x0ce2, 0x0ce3,
+0x0d01, 0x0d01,
+0x0d3e, 0x0d3e,
+0x0d41, 0x0d44,
+0x0d4d, 0x0d4d,
+0x0d57, 0x0d57,
+0x0d62, 0x0d63,
+0x0dca, 0x0dca,
+0x0dcf, 0x0dcf,
+0x0dd2, 0x0dd4,
+0x0dd6, 0x0dd6,
+0x0ddf, 0x0ddf,
+0x0e31, 0x0e31,
+0x0e34, 0x0e3a,
+0x0e47, 0x0e4e,
+0x0eb1, 0x0eb1,
+0x0eb4, 0x0eb9,
+0x0ebb, 0x0ebc,
+0x0ec8, 0x0ecd,
+0x0f18, 0x0f19,
+0x0f35, 0x0f35,
+0x0f37, 0x0f37,
+0x0f39, 0x0f39,
+0x0f71, 0x0f7e,
+0x0f80, 0x0f84,
+0x0f86, 0x0f87,
+0x0f8d, 0x0f97,
+0x0f99, 0x0fbc,
+0x0fc6, 0x0fc6,
+0x102d, 0x1030,
+0x1032, 0x1037,
+0x1039, 0x103a,
+0x103d, 0x103e,
+0x1058, 0x1059,
+0x105e, 0x1060,
+0x1071, 0x1074,
+0x1082, 0x1082,
+0x1085, 0x1086,
+0x108d, 0x108d,
+0x109d, 0x109d,
+0x135d, 0x135f,
+0x1712, 0x1714,
+0x1732, 0x1734,
+0x1752, 0x1753,
+0x1772, 0x1773,
+0x17b4, 0x17b5,
+0x17b7, 0x17bd,
+0x17c6, 0x17c6,
+0x17c9, 0x17d3,
+0x17dd, 0x17dd,
+0x180b, 0x180d,
+0x18a9, 0x18a9,
+0x1920, 0x1922,
+0x1927, 0x1928,
+0x1932, 0x1932,
+0x1939, 0x193b,
+0x1a17, 0x1a18,
+0x1a1b, 0x1a1b,
+0x1a56, 0x1a56,
+0x1a58, 0x1a5e,
+0x1a60, 0x1a60,
+0x1a62, 0x1a62,
+0x1a65, 0x1a6c,
+0x1a73, 0x1a7c,
+0x1a7f, 0x1a7f,
+0x1ab0, 0x1abe,
+0x1b00, 0x1b03,
+0x1b34, 0x1b34,
+0x1b36, 0x1b3a,
+0x1b3c, 0x1b3c,
+0x1b42, 0x1b42,
+0x1b6b, 0x1b73,
+0x1b80, 0x1b81,
+0x1ba2, 0x1ba5,
+0x1ba8, 0x1ba9,
+0x1bab, 0x1bad,
+0x1be6, 0x1be6,
+0x1be8, 0x1be9,
+0x1bed, 0x1bed,
+0x1bef, 0x1bf1,
+0x1c2c, 0x1c33,
+0x1c36, 0x1c37,
+0x1cd0, 0x1cd2,
+0x1cd4, 0x1ce0,
+0x1ce2, 0x1ce8,
+0x1ced, 0x1ced,
+0x1cf4, 0x1cf4,
+0x1cf8, 0x1cf9,
+0x1dc0, 0x1df5,
+0x1dfc, 0x1dff,
+0x200c, 0x200d,
+0x20d0, 0x20f0,
+0x2cef, 0x2cf1,
+0x2d7f, 0x2d7f,
+0x2de0, 0x2dff,
+0x302a, 0x302f,
+0x3099, 0x309a,
+0xa66f, 0xa672,
+0xa674, 0xa67d,
+0xa69e, 0xa69f,
+0xa6f0, 0xa6f1,
+0xa802, 0xa802,
+0xa806, 0xa806,
+0xa80b, 0xa80b,
+0xa825, 0xa826,
+0xa8c4, 0xa8c4,
+0xa8e0, 0xa8f1,
+0xa926, 0xa92d,
+0xa947, 0xa951,
+0xa980, 0xa982,
+0xa9b3, 0xa9b3,
+0xa9b6, 0xa9b9,
+0xa9bc, 0xa9bc,
+0xa9e5, 0xa9e5,
+0xaa29, 0xaa2e,
+0xaa31, 0xaa32,
+0xaa35, 0xaa36,
+0xaa43, 0xaa43,
+0xaa4c, 0xaa4c,
+0xaa7c, 0xaa7c,
+0xaab0, 0xaab0,
+0xaab2, 0xaab4,
+0xaab7, 0xaab8,
+0xaabe, 0xaabf,
+0xaac1, 0xaac1,
+0xaaec, 0xaaed,
+0xaaf6, 0xaaf6,
+0xabe5, 0xabe5,
+0xabe8, 0xabe8,
+0xabed, 0xabed,
+0xfb1e, 0xfb1e,
+0xfe00, 0xfe0f,
+0xfe20, 0xfe2f,
+0xff9e, 0xff9f,
+0x101fd, 0x101fd,
+0x102e0, 0x102e0,
+0x10376, 0x1037a,
+0x10a01, 0x10a03,
+0x10a05, 0x10a06,
+0x10a0c, 0x10a0f,
+0x10a38, 0x10a3a,
+0x10a3f, 0x10a3f,
+0x10ae5, 0x10ae6,
+0x11001, 0x11001,
+0x11038, 0x11046,
+0x1107f, 0x11081,
+0x110b3, 0x110b6,
+0x110b9, 0x110ba,
+0x11100, 0x11102,
+0x11127, 0x1112b,
+0x1112d, 0x11134,
+0x11173, 0x11173,
+0x11180, 0x11181,
+0x111b6, 0x111be,
+0x111ca, 0x111cc,
+0x1122f, 0x11231,
+0x11234, 0x11234,
+0x11236, 0x11237,
+0x112df, 0x112df,
+0x112e3, 0x112ea,
+0x11300, 0x11301,
+0x1133c, 0x1133c,
+0x1133e, 0x1133e,
+0x11340, 0x11340,
+0x11357, 0x11357,
+0x11366, 0x1136c,
+0x11370, 0x11374,
+0x114b0, 0x114b0,
+0x114b3, 0x114b8,
+0x114ba, 0x114ba,
+0x114bd, 0x114bd,
+0x114bf, 0x114c0,
+0x114c2, 0x114c3,
+0x115af, 0x115af,
+0x115b2, 0x115b5,
+0x115bc, 0x115bd,
+0x115bf, 0x115c0,
+0x115dc, 0x115dd,
+0x11633, 0x1163a,
+0x1163d, 0x1163d,
+0x1163f, 0x11640,
+0x116ab, 0x116ab,
+0x116ad, 0x116ad,
+0x116b0, 0x116b5,
+0x116b7, 0x116b7,
+0x1171d, 0x1171f,
+0x11722, 0x11725,
+0x11727, 0x1172b,
+0x16af0, 0x16af4,
+0x16b30, 0x16b36,
+0x16f8f, 0x16f92,
+0x1bc9d, 0x1bc9e,
+0x1d165, 0x1d165,
+0x1d167, 0x1d169,
+0x1d16e, 0x1d172,
+0x1d17b, 0x1d182,
+0x1d185, 0x1d18b,
+0x1d1aa, 0x1d1ad,
+0x1d242, 0x1d244,
+0x1da00, 0x1da36,
+0x1da3b, 0x1da6c,
+0x1da75, 0x1da75,
+0x1da84, 0x1da84,
+0x1da9b, 0x1da9f,
+0x1daa1, 0x1daaf,
+0x1e8d0, 0x1e8d6,
+0xe0100, 0xe01ef,
+}; /* END of CR_Grapheme_Extend */
+
+/* PROPERTY: 'Grapheme_Link': Derived Property */
+static const OnigCodePoint
+CR_Grapheme_Link[] = { 41,
+0x094d, 0x094d,
+0x09cd, 0x09cd,
+0x0a4d, 0x0a4d,
+0x0acd, 0x0acd,
+0x0b4d, 0x0b4d,
+0x0bcd, 0x0bcd,
+0x0c4d, 0x0c4d,
+0x0ccd, 0x0ccd,
+0x0d4d, 0x0d4d,
+0x0dca, 0x0dca,
+0x0e3a, 0x0e3a,
+0x0f84, 0x0f84,
+0x1039, 0x103a,
+0x1714, 0x1714,
+0x1734, 0x1734,
+0x17d2, 0x17d2,
+0x1a60, 0x1a60,
+0x1b44, 0x1b44,
+0x1baa, 0x1bab,
+0x1bf2, 0x1bf3,
+0x2d7f, 0x2d7f,
+0xa806, 0xa806,
+0xa8c4, 0xa8c4,
+0xa953, 0xa953,
+0xa9c0, 0xa9c0,
+0xaaf6, 0xaaf6,
+0xabed, 0xabed,
+0x10a3f, 0x10a3f,
+0x11046, 0x11046,
+0x1107f, 0x1107f,
+0x110b9, 0x110b9,
+0x11133, 0x11134,
+0x111c0, 0x111c0,
+0x11235, 0x11235,
+0x112ea, 0x112ea,
+0x1134d, 0x1134d,
+0x114c2, 0x114c2,
+0x115bf, 0x115bf,
+0x1163f, 0x1163f,
+0x116b6, 0x116b6,
+0x1172b, 0x1172b,
+}; /* END of CR_Grapheme_Link */
+
+/* PROPERTY: 'Greek': Script */
+static const OnigCodePoint
+CR_Greek[] = { 36,
+0x0370, 0x0373,
+0x0375, 0x0377,
+0x037a, 0x037d,
+0x037f, 0x037f,
+0x0384, 0x0384,
+0x0386, 0x0386,
+0x0388, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x03a1,
+0x03a3, 0x03e1,
+0x03f0, 0x03ff,
+0x1d26, 0x1d2a,
+0x1d5d, 0x1d61,
+0x1d66, 0x1d6a,
+0x1dbf, 0x1dbf,
+0x1f00, 0x1f15,
+0x1f18, 0x1f1d,
+0x1f20, 0x1f45,
+0x1f48, 0x1f4d,
+0x1f50, 0x1f57,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f7d,
+0x1f80, 0x1fb4,
+0x1fb6, 0x1fc4,
+0x1fc6, 0x1fd3,
+0x1fd6, 0x1fdb,
+0x1fdd, 0x1fef,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ffe,
+0x2126, 0x2126,
+0xab65, 0xab65,
+0x10140, 0x1018c,
+0x101a0, 0x101a0,
+0x1d200, 0x1d245,
+}; /* END of CR_Greek */
+
+/* PROPERTY: 'Gujarati': Script */
+static const OnigCodePoint
+CR_Gujarati[] = { 14,
+0x0a81, 0x0a83,
+0x0a85, 0x0a8d,
+0x0a8f, 0x0a91,
+0x0a93, 0x0aa8,
+0x0aaa, 0x0ab0,
+0x0ab2, 0x0ab3,
+0x0ab5, 0x0ab9,
+0x0abc, 0x0ac5,
+0x0ac7, 0x0ac9,
+0x0acb, 0x0acd,
+0x0ad0, 0x0ad0,
+0x0ae0, 0x0ae3,
+0x0ae6, 0x0af1,
+0x0af9, 0x0af9,
+}; /* END of CR_Gujarati */
+
+/* PROPERTY: 'Gurmukhi': Script */
+static const OnigCodePoint
+CR_Gurmukhi[] = { 16,
+0x0a01, 0x0a03,
+0x0a05, 0x0a0a,
+0x0a0f, 0x0a10,
+0x0a13, 0x0a28,
+0x0a2a, 0x0a30,
+0x0a32, 0x0a33,
+0x0a35, 0x0a36,
+0x0a38, 0x0a39,
+0x0a3c, 0x0a3c,
+0x0a3e, 0x0a42,
+0x0a47, 0x0a48,
+0x0a4b, 0x0a4d,
+0x0a51, 0x0a51,
+0x0a59, 0x0a5c,
+0x0a5e, 0x0a5e,
+0x0a66, 0x0a75,
+}; /* END of CR_Gurmukhi */
+
+/* PROPERTY: 'Han': Script */
+static const OnigCodePoint
+CR_Han[] = { 16,
+0x2e80, 0x2e99,
+0x2e9b, 0x2ef3,
+0x2f00, 0x2fd5,
+0x3005, 0x3005,
+0x3007, 0x3007,
+0x3021, 0x3029,
+0x3038, 0x303b,
+0x3400, 0x4db5,
+0x4e00, 0x9fd5,
+0xf900, 0xfa6d,
+0xfa70, 0xfad9,
+0x20000, 0x2a6d6,
+0x2a700, 0x2b734,
+0x2b740, 0x2b81d,
+0x2b820, 0x2cea1,
+0x2f800, 0x2fa1d,
+}; /* END of CR_Han */
+
+/* PROPERTY: 'Hangul': Script */
+static const OnigCodePoint
+CR_Hangul[] = { 14,
+0x1100, 0x11ff,
+0x302e, 0x302f,
+0x3131, 0x318e,
+0x3200, 0x321e,
+0x3260, 0x327e,
+0xa960, 0xa97c,
+0xac00, 0xd7a3,
+0xd7b0, 0xd7c6,
+0xd7cb, 0xd7fb,
+0xffa0, 0xffbe,
+0xffc2, 0xffc7,
+0xffca, 0xffcf,
+0xffd2, 0xffd7,
+0xffda, 0xffdc,
+}; /* END of CR_Hangul */
+
+/* PROPERTY: 'Hanunoo': Script */
+static const OnigCodePoint
+CR_Hanunoo[] = { 1,
+0x1720, 0x1734,
+}; /* END of CR_Hanunoo */
+
+/* PROPERTY: 'Hatran': Script */
+static const OnigCodePoint
+CR_Hatran[] = { 3,
+0x108e0, 0x108f2,
+0x108f4, 0x108f5,
+0x108fb, 0x108ff,
+}; /* END of CR_Hatran */
+
+/* PROPERTY: 'Hebrew': Script */
+static const OnigCodePoint
+CR_Hebrew[] = { 9,
+0x0591, 0x05c7,
+0x05d0, 0x05ea,
+0x05f0, 0x05f4,
+0xfb1d, 0xfb36,
+0xfb38, 0xfb3c,
+0xfb3e, 0xfb3e,
+0xfb40, 0xfb41,
+0xfb43, 0xfb44,
+0xfb46, 0xfb4f,
+}; /* END of CR_Hebrew */
+
+/* PROPERTY: 'Hex_Digit': Binary Property */
+static const OnigCodePoint
+CR_Hex_Digit[] = { 6,
+0x0030, 0x0039,
+0x0041, 0x0046,
+0x0061, 0x0066,
+0xff10, 0xff19,
+0xff21, 0xff26,
+0xff41, 0xff46,
+}; /* END of CR_Hex_Digit */
+
+/* PROPERTY: 'Hiragana': Script */
+static const OnigCodePoint
+CR_Hiragana[] = { 4,
+0x3041, 0x3096,
+0x309d, 0x309f,
+0x1b001, 0x1b001,
+0x1f200, 0x1f200,
+}; /* END of CR_Hiragana */
+
+/* PROPERTY: 'Hyphen': Binary Property */
+static const OnigCodePoint
+CR_Hyphen[] = { 10,
+0x002d, 0x002d,
+0x00ad, 0x00ad,
+0x058a, 0x058a,
+0x1806, 0x1806,
+0x2010, 0x2011,
+0x2e17, 0x2e17,
+0x30fb, 0x30fb,
+0xfe63, 0xfe63,
+0xff0d, 0xff0d,
+0xff65, 0xff65,
+}; /* END of CR_Hyphen */
+
+/* PROPERTY: 'IDS_Binary_Operator': Binary Property */
+static const OnigCodePoint
+CR_IDS_Binary_Operator[] = { 2,
+0x2ff0, 0x2ff1,
+0x2ff4, 0x2ffb,
+}; /* END of CR_IDS_Binary_Operator */
+
+/* PROPERTY: 'IDS_Trinary_Operator': Binary Property */
+static const OnigCodePoint
+CR_IDS_Trinary_Operator[] = { 1,
+0x2ff2, 0x2ff3,
+}; /* END of CR_IDS_Trinary_Operator */
+
+/* PROPERTY: 'ID_Continue': Derived Property */
+static const OnigCodePoint
+CR_ID_Continue[] = { 651,
+0x0030, 0x0039,
+0x0041, 0x005a,
+0x005f, 0x005f,
+0x0061, 0x007a,
+0x00aa, 0x00aa,
+0x00b5, 0x00b5,
+0x00b7, 0x00b7,
+0x00ba, 0x00ba,
+0x00c0, 0x00d6,
+0x00d8, 0x00f6,
+0x00f8, 0x02c1,
+0x02c6, 0x02d1,
+0x02e0, 0x02e4,
+0x02ec, 0x02ec,
+0x02ee, 0x02ee,
+0x0300, 0x0374,
+0x0376, 0x0377,
+0x037a, 0x037d,
+0x037f, 0x037f,
+0x0386, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x03a1,
+0x03a3, 0x03f5,
+0x03f7, 0x0481,
+0x0483, 0x0487,
+0x048a, 0x052f,
+0x0531, 0x0556,
+0x0559, 0x0559,
+0x0561, 0x0587,
+0x0591, 0x05bd,
+0x05bf, 0x05bf,
+0x05c1, 0x05c2,
+0x05c4, 0x05c5,
+0x05c7, 0x05c7,
+0x05d0, 0x05ea,
+0x05f0, 0x05f2,
+0x0610, 0x061a,
+0x0620, 0x0669,
+0x066e, 0x06d3,
+0x06d5, 0x06dc,
+0x06df, 0x06e8,
+0x06ea, 0x06fc,
+0x06ff, 0x06ff,
+0x0710, 0x074a,
+0x074d, 0x07b1,
+0x07c0, 0x07f5,
+0x07fa, 0x07fa,
+0x0800, 0x082d,
+0x0840, 0x085b,
+0x08a0, 0x08b4,
+0x08e3, 0x0963,
+0x0966, 0x096f,
+0x0971, 0x0983,
+0x0985, 0x098c,
+0x098f, 0x0990,
+0x0993, 0x09a8,
+0x09aa, 0x09b0,
+0x09b2, 0x09b2,
+0x09b6, 0x09b9,
+0x09bc, 0x09c4,
+0x09c7, 0x09c8,
+0x09cb, 0x09ce,
+0x09d7, 0x09d7,
+0x09dc, 0x09dd,
+0x09df, 0x09e3,
+0x09e6, 0x09f1,
+0x0a01, 0x0a03,
+0x0a05, 0x0a0a,
+0x0a0f, 0x0a10,
+0x0a13, 0x0a28,
+0x0a2a, 0x0a30,
+0x0a32, 0x0a33,
+0x0a35, 0x0a36,
+0x0a38, 0x0a39,
+0x0a3c, 0x0a3c,
+0x0a3e, 0x0a42,
+0x0a47, 0x0a48,
+0x0a4b, 0x0a4d,
+0x0a51, 0x0a51,
+0x0a59, 0x0a5c,
+0x0a5e, 0x0a5e,
+0x0a66, 0x0a75,
+0x0a81, 0x0a83,
+0x0a85, 0x0a8d,
+0x0a8f, 0x0a91,
+0x0a93, 0x0aa8,
+0x0aaa, 0x0ab0,
+0x0ab2, 0x0ab3,
+0x0ab5, 0x0ab9,
+0x0abc, 0x0ac5,
+0x0ac7, 0x0ac9,
+0x0acb, 0x0acd,
+0x0ad0, 0x0ad0,
+0x0ae0, 0x0ae3,
+0x0ae6, 0x0aef,
+0x0af9, 0x0af9,
+0x0b01, 0x0b03,
+0x0b05, 0x0b0c,
+0x0b0f, 0x0b10,
+0x0b13, 0x0b28,
+0x0b2a, 0x0b30,
+0x0b32, 0x0b33,
+0x0b35, 0x0b39,
+0x0b3c, 0x0b44,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4d,
+0x0b56, 0x0b57,
+0x0b5c, 0x0b5d,
+0x0b5f, 0x0b63,
+0x0b66, 0x0b6f,
+0x0b71, 0x0b71,
+0x0b82, 0x0b83,
+0x0b85, 0x0b8a,
+0x0b8e, 0x0b90,
+0x0b92, 0x0b95,
+0x0b99, 0x0b9a,
+0x0b9c, 0x0b9c,
+0x0b9e, 0x0b9f,
+0x0ba3, 0x0ba4,
+0x0ba8, 0x0baa,
+0x0bae, 0x0bb9,
+0x0bbe, 0x0bc2,
+0x0bc6, 0x0bc8,
+0x0bca, 0x0bcd,
+0x0bd0, 0x0bd0,
+0x0bd7, 0x0bd7,
+0x0be6, 0x0bef,
+0x0c00, 0x0c03,
+0x0c05, 0x0c0c,
+0x0c0e, 0x0c10,
+0x0c12, 0x0c28,
+0x0c2a, 0x0c39,
+0x0c3d, 0x0c44,
+0x0c46, 0x0c48,
+0x0c4a, 0x0c4d,
+0x0c55, 0x0c56,
+0x0c58, 0x0c5a,
+0x0c60, 0x0c63,
+0x0c66, 0x0c6f,
+0x0c81, 0x0c83,
+0x0c85, 0x0c8c,
+0x0c8e, 0x0c90,
+0x0c92, 0x0ca8,
+0x0caa, 0x0cb3,
+0x0cb5, 0x0cb9,
+0x0cbc, 0x0cc4,
+0x0cc6, 0x0cc8,
+0x0cca, 0x0ccd,
+0x0cd5, 0x0cd6,
+0x0cde, 0x0cde,
+0x0ce0, 0x0ce3,
+0x0ce6, 0x0cef,
+0x0cf1, 0x0cf2,
+0x0d01, 0x0d03,
+0x0d05, 0x0d0c,
+0x0d0e, 0x0d10,
+0x0d12, 0x0d3a,
+0x0d3d, 0x0d44,
+0x0d46, 0x0d48,
+0x0d4a, 0x0d4e,
+0x0d57, 0x0d57,
+0x0d5f, 0x0d63,
+0x0d66, 0x0d6f,
+0x0d7a, 0x0d7f,
+0x0d82, 0x0d83,
+0x0d85, 0x0d96,
+0x0d9a, 0x0db1,
+0x0db3, 0x0dbb,
+0x0dbd, 0x0dbd,
+0x0dc0, 0x0dc6,
+0x0dca, 0x0dca,
+0x0dcf, 0x0dd4,
+0x0dd6, 0x0dd6,
+0x0dd8, 0x0ddf,
+0x0de6, 0x0def,
+0x0df2, 0x0df3,
+0x0e01, 0x0e3a,
+0x0e40, 0x0e4e,
+0x0e50, 0x0e59,
+0x0e81, 0x0e82,
+0x0e84, 0x0e84,
+0x0e87, 0x0e88,
+0x0e8a, 0x0e8a,
+0x0e8d, 0x0e8d,
+0x0e94, 0x0e97,
+0x0e99, 0x0e9f,
+0x0ea1, 0x0ea3,
+0x0ea5, 0x0ea5,
+0x0ea7, 0x0ea7,
+0x0eaa, 0x0eab,
+0x0ead, 0x0eb9,
+0x0ebb, 0x0ebd,
+0x0ec0, 0x0ec4,
+0x0ec6, 0x0ec6,
+0x0ec8, 0x0ecd,
+0x0ed0, 0x0ed9,
+0x0edc, 0x0edf,
+0x0f00, 0x0f00,
+0x0f18, 0x0f19,
+0x0f20, 0x0f29,
+0x0f35, 0x0f35,
+0x0f37, 0x0f37,
+0x0f39, 0x0f39,
+0x0f3e, 0x0f47,
+0x0f49, 0x0f6c,
+0x0f71, 0x0f84,
+0x0f86, 0x0f97,
+0x0f99, 0x0fbc,
+0x0fc6, 0x0fc6,
+0x1000, 0x1049,
+0x1050, 0x109d,
+0x10a0, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x10d0, 0x10fa,
+0x10fc, 0x1248,
+0x124a, 0x124d,
+0x1250, 0x1256,
+0x1258, 0x1258,
+0x125a, 0x125d,
+0x1260, 0x1288,
+0x128a, 0x128d,
+0x1290, 0x12b0,
+0x12b2, 0x12b5,
+0x12b8, 0x12be,
+0x12c0, 0x12c0,
+0x12c2, 0x12c5,
+0x12c8, 0x12d6,
+0x12d8, 0x1310,
+0x1312, 0x1315,
+0x1318, 0x135a,
+0x135d, 0x135f,
+0x1369, 0x1371,
+0x1380, 0x138f,
+0x13a0, 0x13f5,
+0x13f8, 0x13fd,
+0x1401, 0x166c,
+0x166f, 0x167f,
+0x1681, 0x169a,
+0x16a0, 0x16ea,
+0x16ee, 0x16f8,
+0x1700, 0x170c,
+0x170e, 0x1714,
+0x1720, 0x1734,
+0x1740, 0x1753,
+0x1760, 0x176c,
+0x176e, 0x1770,
+0x1772, 0x1773,
+0x1780, 0x17d3,
+0x17d7, 0x17d7,
+0x17dc, 0x17dd,
+0x17e0, 0x17e9,
+0x180b, 0x180d,
+0x1810, 0x1819,
+0x1820, 0x1877,
+0x1880, 0x18aa,
+0x18b0, 0x18f5,
+0x1900, 0x191e,
+0x1920, 0x192b,
+0x1930, 0x193b,
+0x1946, 0x196d,
+0x1970, 0x1974,
+0x1980, 0x19ab,
+0x19b0, 0x19c9,
+0x19d0, 0x19da,
+0x1a00, 0x1a1b,
+0x1a20, 0x1a5e,
+0x1a60, 0x1a7c,
+0x1a7f, 0x1a89,
+0x1a90, 0x1a99,
+0x1aa7, 0x1aa7,
+0x1ab0, 0x1abd,
+0x1b00, 0x1b4b,
+0x1b50, 0x1b59,
+0x1b6b, 0x1b73,
+0x1b80, 0x1bf3,
+0x1c00, 0x1c37,
+0x1c40, 0x1c49,
+0x1c4d, 0x1c7d,
+0x1cd0, 0x1cd2,
+0x1cd4, 0x1cf6,
+0x1cf8, 0x1cf9,
+0x1d00, 0x1df5,
+0x1dfc, 0x1f15,
+0x1f18, 0x1f1d,
+0x1f20, 0x1f45,
+0x1f48, 0x1f4d,
+0x1f50, 0x1f57,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f7d,
+0x1f80, 0x1fb4,
+0x1fb6, 0x1fbc,
+0x1fbe, 0x1fbe,
+0x1fc2, 0x1fc4,
+0x1fc6, 0x1fcc,
+0x1fd0, 0x1fd3,
+0x1fd6, 0x1fdb,
+0x1fe0, 0x1fec,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ffc,
+0x203f, 0x2040,
+0x2054, 0x2054,
+0x2071, 0x2071,
+0x207f, 0x207f,
+0x2090, 0x209c,
+0x20d0, 0x20dc,
+0x20e1, 0x20e1,
+0x20e5, 0x20f0,
+0x2102, 0x2102,
+0x2107, 0x2107,
+0x210a, 0x2113,
+0x2115, 0x2115,
+0x2118, 0x211d,
+0x2124, 0x2124,
+0x2126, 0x2126,
+0x2128, 0x2128,
+0x212a, 0x2139,
+0x213c, 0x213f,
+0x2145, 0x2149,
+0x214e, 0x214e,
+0x2160, 0x2188,
+0x2c00, 0x2c2e,
+0x2c30, 0x2c5e,
+0x2c60, 0x2ce4,
+0x2ceb, 0x2cf3,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0x2d30, 0x2d67,
+0x2d6f, 0x2d6f,
+0x2d7f, 0x2d96,
+0x2da0, 0x2da6,
+0x2da8, 0x2dae,
+0x2db0, 0x2db6,
+0x2db8, 0x2dbe,
+0x2dc0, 0x2dc6,
+0x2dc8, 0x2dce,
+0x2dd0, 0x2dd6,
+0x2dd8, 0x2dde,
+0x2de0, 0x2dff,
+0x3005, 0x3007,
+0x3021, 0x302f,
+0x3031, 0x3035,
+0x3038, 0x303c,
+0x3041, 0x3096,
+0x3099, 0x309f,
+0x30a1, 0x30fa,
+0x30fc, 0x30ff,
+0x3105, 0x312d,
+0x3131, 0x318e,
+0x31a0, 0x31ba,
+0x31f0, 0x31ff,
+0x3400, 0x4db5,
+0x4e00, 0x9fd5,
+0xa000, 0xa48c,
+0xa4d0, 0xa4fd,
+0xa500, 0xa60c,
+0xa610, 0xa62b,
+0xa640, 0xa66f,
+0xa674, 0xa67d,
+0xa67f, 0xa6f1,
+0xa717, 0xa71f,
+0xa722, 0xa788,
+0xa78b, 0xa7ad,
+0xa7b0, 0xa7b7,
+0xa7f7, 0xa827,
+0xa840, 0xa873,
+0xa880, 0xa8c4,
+0xa8d0, 0xa8d9,
+0xa8e0, 0xa8f7,
+0xa8fb, 0xa8fb,
+0xa8fd, 0xa8fd,
+0xa900, 0xa92d,
+0xa930, 0xa953,
+0xa960, 0xa97c,
+0xa980, 0xa9c0,
+0xa9cf, 0xa9d9,
+0xa9e0, 0xa9fe,
+0xaa00, 0xaa36,
+0xaa40, 0xaa4d,
+0xaa50, 0xaa59,
+0xaa60, 0xaa76,
+0xaa7a, 0xaac2,
+0xaadb, 0xaadd,
+0xaae0, 0xaaef,
+0xaaf2, 0xaaf6,
+0xab01, 0xab06,
+0xab09, 0xab0e,
+0xab11, 0xab16,
+0xab20, 0xab26,
+0xab28, 0xab2e,
+0xab30, 0xab5a,
+0xab5c, 0xab65,
+0xab70, 0xabea,
+0xabec, 0xabed,
+0xabf0, 0xabf9,
+0xac00, 0xd7a3,
+0xd7b0, 0xd7c6,
+0xd7cb, 0xd7fb,
+0xf900, 0xfa6d,
+0xfa70, 0xfad9,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xfb1d, 0xfb28,
+0xfb2a, 0xfb36,
+0xfb38, 0xfb3c,
+0xfb3e, 0xfb3e,
+0xfb40, 0xfb41,
+0xfb43, 0xfb44,
+0xfb46, 0xfbb1,
+0xfbd3, 0xfd3d,
+0xfd50, 0xfd8f,
+0xfd92, 0xfdc7,
+0xfdf0, 0xfdfb,
+0xfe00, 0xfe0f,
+0xfe20, 0xfe2f,
+0xfe33, 0xfe34,
+0xfe4d, 0xfe4f,
+0xfe70, 0xfe74,
+0xfe76, 0xfefc,
+0xff10, 0xff19,
+0xff21, 0xff3a,
+0xff3f, 0xff3f,
+0xff41, 0xff5a,
+0xff66, 0xffbe,
+0xffc2, 0xffc7,
+0xffca, 0xffcf,
+0xffd2, 0xffd7,
+0xffda, 0xffdc,
+0x10000, 0x1000b,
+0x1000d, 0x10026,
+0x10028, 0x1003a,
+0x1003c, 0x1003d,
+0x1003f, 0x1004d,
+0x10050, 0x1005d,
+0x10080, 0x100fa,
+0x10140, 0x10174,
+0x101fd, 0x101fd,
+0x10280, 0x1029c,
+0x102a0, 0x102d0,
+0x102e0, 0x102e0,
+0x10300, 0x1031f,
+0x10330, 0x1034a,
+0x10350, 0x1037a,
+0x10380, 0x1039d,
+0x103a0, 0x103c3,
+0x103c8, 0x103cf,
+0x103d1, 0x103d5,
+0x10400, 0x1049d,
+0x104a0, 0x104a9,
+0x10500, 0x10527,
+0x10530, 0x10563,
+0x10600, 0x10736,
+0x10740, 0x10755,
+0x10760, 0x10767,
+0x10800, 0x10805,
+0x10808, 0x10808,
+0x1080a, 0x10835,
+0x10837, 0x10838,
+0x1083c, 0x1083c,
+0x1083f, 0x10855,
+0x10860, 0x10876,
+0x10880, 0x1089e,
+0x108e0, 0x108f2,
+0x108f4, 0x108f5,
+0x10900, 0x10915,
+0x10920, 0x10939,
+0x10980, 0x109b7,
+0x109be, 0x109bf,
+0x10a00, 0x10a03,
+0x10a05, 0x10a06,
+0x10a0c, 0x10a13,
+0x10a15, 0x10a17,
+0x10a19, 0x10a33,
+0x10a38, 0x10a3a,
+0x10a3f, 0x10a3f,
+0x10a60, 0x10a7c,
+0x10a80, 0x10a9c,
+0x10ac0, 0x10ac7,
+0x10ac9, 0x10ae6,
+0x10b00, 0x10b35,
+0x10b40, 0x10b55,
+0x10b60, 0x10b72,
+0x10b80, 0x10b91,
+0x10c00, 0x10c48,
+0x10c80, 0x10cb2,
+0x10cc0, 0x10cf2,
+0x11000, 0x11046,
+0x11066, 0x1106f,
+0x1107f, 0x110ba,
+0x110d0, 0x110e8,
+0x110f0, 0x110f9,
+0x11100, 0x11134,
+0x11136, 0x1113f,
+0x11150, 0x11173,
+0x11176, 0x11176,
+0x11180, 0x111c4,
+0x111ca, 0x111cc,
+0x111d0, 0x111da,
+0x111dc, 0x111dc,
+0x11200, 0x11211,
+0x11213, 0x11237,
+0x11280, 0x11286,
+0x11288, 0x11288,
+0x1128a, 0x1128d,
+0x1128f, 0x1129d,
+0x1129f, 0x112a8,
+0x112b0, 0x112ea,
+0x112f0, 0x112f9,
+0x11300, 0x11303,
+0x11305, 0x1130c,
+0x1130f, 0x11310,
+0x11313, 0x11328,
+0x1132a, 0x11330,
+0x11332, 0x11333,
+0x11335, 0x11339,
+0x1133c, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134d,
+0x11350, 0x11350,
+0x11357, 0x11357,
+0x1135d, 0x11363,
+0x11366, 0x1136c,
+0x11370, 0x11374,
+0x11480, 0x114c5,
+0x114c7, 0x114c7,
+0x114d0, 0x114d9,
+0x11580, 0x115b5,
+0x115b8, 0x115c0,
+0x115d8, 0x115dd,
+0x11600, 0x11640,
+0x11644, 0x11644,
+0x11650, 0x11659,
+0x11680, 0x116b7,
+0x116c0, 0x116c9,
+0x11700, 0x11719,
+0x1171d, 0x1172b,
+0x11730, 0x11739,
+0x118a0, 0x118e9,
+0x118ff, 0x118ff,
+0x11ac0, 0x11af8,
+0x12000, 0x12399,
+0x12400, 0x1246e,
+0x12480, 0x12543,
+0x13000, 0x1342e,
+0x14400, 0x14646,
+0x16800, 0x16a38,
+0x16a40, 0x16a5e,
+0x16a60, 0x16a69,
+0x16ad0, 0x16aed,
+0x16af0, 0x16af4,
+0x16b00, 0x16b36,
+0x16b40, 0x16b43,
+0x16b50, 0x16b59,
+0x16b63, 0x16b77,
+0x16b7d, 0x16b8f,
+0x16f00, 0x16f44,
+0x16f50, 0x16f7e,
+0x16f8f, 0x16f9f,
+0x1b000, 0x1b001,
+0x1bc00, 0x1bc6a,
+0x1bc70, 0x1bc7c,
+0x1bc80, 0x1bc88,
+0x1bc90, 0x1bc99,
+0x1bc9d, 0x1bc9e,
+0x1d165, 0x1d169,
+0x1d16d, 0x1d172,
+0x1d17b, 0x1d182,
+0x1d185, 0x1d18b,
+0x1d1aa, 0x1d1ad,
+0x1d242, 0x1d244,
+0x1d400, 0x1d454,
+0x1d456, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d51e, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d552, 0x1d6a5,
+0x1d6a8, 0x1d6c0,
+0x1d6c2, 0x1d6da,
+0x1d6dc, 0x1d6fa,
+0x1d6fc, 0x1d714,
+0x1d716, 0x1d734,
+0x1d736, 0x1d74e,
+0x1d750, 0x1d76e,
+0x1d770, 0x1d788,
+0x1d78a, 0x1d7a8,
+0x1d7aa, 0x1d7c2,
+0x1d7c4, 0x1d7cb,
+0x1d7ce, 0x1d7ff,
+0x1da00, 0x1da36,
+0x1da3b, 0x1da6c,
+0x1da75, 0x1da75,
+0x1da84, 0x1da84,
+0x1da9b, 0x1da9f,
+0x1daa1, 0x1daaf,
+0x1e800, 0x1e8c4,
+0x1e8d0, 0x1e8d6,
+0x1ee00, 0x1ee03,
+0x1ee05, 0x1ee1f,
+0x1ee21, 0x1ee22,
+0x1ee24, 0x1ee24,
+0x1ee27, 0x1ee27,
+0x1ee29, 0x1ee32,
+0x1ee34, 0x1ee37,
+0x1ee39, 0x1ee39,
+0x1ee3b, 0x1ee3b,
+0x1ee42, 0x1ee42,
+0x1ee47, 0x1ee47,
+0x1ee49, 0x1ee49,
+0x1ee4b, 0x1ee4b,
+0x1ee4d, 0x1ee4f,
+0x1ee51, 0x1ee52,
+0x1ee54, 0x1ee54,
+0x1ee57, 0x1ee57,
+0x1ee59, 0x1ee59,
+0x1ee5b, 0x1ee5b,
+0x1ee5d, 0x1ee5d,
+0x1ee5f, 0x1ee5f,
+0x1ee61, 0x1ee62,
+0x1ee64, 0x1ee64,
+0x1ee67, 0x1ee6a,
+0x1ee6c, 0x1ee72,
+0x1ee74, 0x1ee77,
+0x1ee79, 0x1ee7c,
+0x1ee7e, 0x1ee7e,
+0x1ee80, 0x1ee89,
+0x1ee8b, 0x1ee9b,
+0x1eea1, 0x1eea3,
+0x1eea5, 0x1eea9,
+0x1eeab, 0x1eebb,
+0x20000, 0x2a6d6,
+0x2a700, 0x2b734,
+0x2b740, 0x2b81d,
+0x2b820, 0x2cea1,
+0x2f800, 0x2fa1d,
+0xe0100, 0xe01ef,
+}; /* END of CR_ID_Continue */
+
+/* PROPERTY: 'ID_Start': Derived Property */
+static const OnigCodePoint
+CR_ID_Start[] = { 555,
+0x0041, 0x005a,
+0x0061, 0x007a,
+0x00aa, 0x00aa,
+0x00b5, 0x00b5,
+0x00ba, 0x00ba,
+0x00c0, 0x00d6,
+0x00d8, 0x00f6,
+0x00f8, 0x02c1,
+0x02c6, 0x02d1,
+0x02e0, 0x02e4,
+0x02ec, 0x02ec,
+0x02ee, 0x02ee,
+0x0370, 0x0374,
+0x0376, 0x0377,
+0x037a, 0x037d,
+0x037f, 0x037f,
+0x0386, 0x0386,
+0x0388, 0x038a,
+0x038c, 0x038c,
+0x038e, 0x03a1,
+0x03a3, 0x03f5,
+0x03f7, 0x0481,
+0x048a, 0x052f,
+0x0531, 0x0556,
+0x0559, 0x0559,
+0x0561, 0x0587,
+0x05d0, 0x05ea,
+0x05f0, 0x05f2,
+0x0620, 0x064a,
+0x066e, 0x066f,
+0x0671, 0x06d3,
+0x06d5, 0x06d5,
+0x06e5, 0x06e6,
+0x06ee, 0x06ef,
+0x06fa, 0x06fc,
+0x06ff, 0x06ff,
+0x0710, 0x0710,
+0x0712, 0x072f,
+0x074d, 0x07a5,
+0x07b1, 0x07b1,
+0x07ca, 0x07ea,
+0x07f4, 0x07f5,
+0x07fa, 0x07fa,
+0x0800, 0x0815,
+0x081a, 0x081a,
+0x0824, 0x0824,
+0x0828, 0x0828,
+0x0840, 0x0858,
+0x08a0, 0x08b4,
+0x0904, 0x0939,
+0x093d, 0x093d,
+0x0950, 0x0950,
+0x0958, 0x0961,
+0x0971, 0x0980,
+0x0985, 0x098c,
+0x098f, 0x0990,
+0x0993, 0x09a8,
+0x09aa, 0x09b0,
+0x09b2, 0x09b2,
+0x09b6, 0x09b9,
+0x09bd, 0x09bd,
+0x09ce, 0x09ce,
+0x09dc, 0x09dd,
+0x09df, 0x09e1,
+0x09f0, 0x09f1,
+0x0a05, 0x0a0a,
+0x0a0f, 0x0a10,
+0x0a13, 0x0a28,
+0x0a2a, 0x0a30,
+0x0a32, 0x0a33,
+0x0a35, 0x0a36,
+0x0a38, 0x0a39,
+0x0a59, 0x0a5c,
+0x0a5e, 0x0a5e,
+0x0a72, 0x0a74,
+0x0a85, 0x0a8d,
+0x0a8f, 0x0a91,
+0x0a93, 0x0aa8,
+0x0aaa, 0x0ab0,
+0x0ab2, 0x0ab3,
+0x0ab5, 0x0ab9,
+0x0abd, 0x0abd,
+0x0ad0, 0x0ad0,
+0x0ae0, 0x0ae1,
+0x0af9, 0x0af9,
+0x0b05, 0x0b0c,
+0x0b0f, 0x0b10,
+0x0b13, 0x0b28,
+0x0b2a, 0x0b30,
+0x0b32, 0x0b33,
+0x0b35, 0x0b39,
+0x0b3d, 0x0b3d,
+0x0b5c, 0x0b5d,
+0x0b5f, 0x0b61,
+0x0b71, 0x0b71,
+0x0b83, 0x0b83,
+0x0b85, 0x0b8a,
+0x0b8e, 0x0b90,
+0x0b92, 0x0b95,
+0x0b99, 0x0b9a,
+0x0b9c, 0x0b9c,
+0x0b9e, 0x0b9f,
+0x0ba3, 0x0ba4,
+0x0ba8, 0x0baa,
+0x0bae, 0x0bb9,
+0x0bd0, 0x0bd0,
+0x0c05, 0x0c0c,
+0x0c0e, 0x0c10,
+0x0c12, 0x0c28,
+0x0c2a, 0x0c39,
+0x0c3d, 0x0c3d,
+0x0c58, 0x0c5a,
+0x0c60, 0x0c61,
+0x0c85, 0x0c8c,
+0x0c8e, 0x0c90,
+0x0c92, 0x0ca8,
+0x0caa, 0x0cb3,
+0x0cb5, 0x0cb9,
+0x0cbd, 0x0cbd,
+0x0cde, 0x0cde,
+0x0ce0, 0x0ce1,
+0x0cf1, 0x0cf2,
+0x0d05, 0x0d0c,
+0x0d0e, 0x0d10,
+0x0d12, 0x0d3a,
+0x0d3d, 0x0d3d,
+0x0d4e, 0x0d4e,
+0x0d5f, 0x0d61,
+0x0d7a, 0x0d7f,
+0x0d85, 0x0d96,
+0x0d9a, 0x0db1,
+0x0db3, 0x0dbb,
+0x0dbd, 0x0dbd,
+0x0dc0, 0x0dc6,
+0x0e01, 0x0e30,
+0x0e32, 0x0e33,
+0x0e40, 0x0e46,
+0x0e81, 0x0e82,
+0x0e84, 0x0e84,
+0x0e87, 0x0e88,
+0x0e8a, 0x0e8a,
+0x0e8d, 0x0e8d,
+0x0e94, 0x0e97,
+0x0e99, 0x0e9f,
+0x0ea1, 0x0ea3,
+0x0ea5, 0x0ea5,
+0x0ea7, 0x0ea7,
+0x0eaa, 0x0eab,
+0x0ead, 0x0eb0,
+0x0eb2, 0x0eb3,
+0x0ebd, 0x0ebd,
+0x0ec0, 0x0ec4,
+0x0ec6, 0x0ec6,
+0x0edc, 0x0edf,
+0x0f00, 0x0f00,
+0x0f40, 0x0f47,
+0x0f49, 0x0f6c,
+0x0f88, 0x0f8c,
+0x1000, 0x102a,
+0x103f, 0x103f,
+0x1050, 0x1055,
+0x105a, 0x105d,
+0x1061, 0x1061,
+0x1065, 0x1066,
+0x106e, 0x1070,
+0x1075, 0x1081,
+0x108e, 0x108e,
+0x10a0, 0x10c5,
+0x10c7, 0x10c7,
+0x10cd, 0x10cd,
+0x10d0, 0x10fa,
+0x10fc, 0x1248,
+0x124a, 0x124d,
+0x1250, 0x1256,
+0x1258, 0x1258,
+0x125a, 0x125d,
+0x1260, 0x1288,
+0x128a, 0x128d,
+0x1290, 0x12b0,
+0x12b2, 0x12b5,
+0x12b8, 0x12be,
+0x12c0, 0x12c0,
+0x12c2, 0x12c5,
+0x12c8, 0x12d6,
+0x12d8, 0x1310,
+0x1312, 0x1315,
+0x1318, 0x135a,
+0x1380, 0x138f,
+0x13a0, 0x13f5,
+0x13f8, 0x13fd,
+0x1401, 0x166c,
+0x166f, 0x167f,
+0x1681, 0x169a,
+0x16a0, 0x16ea,
+0x16ee, 0x16f8,
+0x1700, 0x170c,
+0x170e, 0x1711,
+0x1720, 0x1731,
+0x1740, 0x1751,
+0x1760, 0x176c,
+0x176e, 0x1770,
+0x1780, 0x17b3,
+0x17d7, 0x17d7,
+0x17dc, 0x17dc,
+0x1820, 0x1877,
+0x1880, 0x18a8,
+0x18aa, 0x18aa,
+0x18b0, 0x18f5,
+0x1900, 0x191e,
+0x1950, 0x196d,
+0x1970, 0x1974,
+0x1980, 0x19ab,
+0x19b0, 0x19c9,
+0x1a00, 0x1a16,
+0x1a20, 0x1a54,
+0x1aa7, 0x1aa7,
+0x1b05, 0x1b33,
+0x1b45, 0x1b4b,
+0x1b83, 0x1ba0,
+0x1bae, 0x1baf,
+0x1bba, 0x1be5,
+0x1c00, 0x1c23,
+0x1c4d, 0x1c4f,
+0x1c5a, 0x1c7d,
+0x1ce9, 0x1cec,
+0x1cee, 0x1cf1,
+0x1cf5, 0x1cf6,
+0x1d00, 0x1dbf,
+0x1e00, 0x1f15,
+0x1f18, 0x1f1d,
+0x1f20, 0x1f45,
+0x1f48, 0x1f4d,
+0x1f50, 0x1f57,
+0x1f59, 0x1f59,
+0x1f5b, 0x1f5b,
+0x1f5d, 0x1f5d,
+0x1f5f, 0x1f7d,
+0x1f80, 0x1fb4,
+0x1fb6, 0x1fbc,
+0x1fbe, 0x1fbe,
+0x1fc2, 0x1fc4,
+0x1fc6, 0x1fcc,
+0x1fd0, 0x1fd3,
+0x1fd6, 0x1fdb,
+0x1fe0, 0x1fec,
+0x1ff2, 0x1ff4,
+0x1ff6, 0x1ffc,
+0x2071, 0x2071,
+0x207f, 0x207f,
+0x2090, 0x209c,
+0x2102, 0x2102,
+0x2107, 0x2107,
+0x210a, 0x2113,
+0x2115, 0x2115,
+0x2118, 0x211d,
+0x2124, 0x2124,
+0x2126, 0x2126,
+0x2128, 0x2128,
+0x212a, 0x2139,
+0x213c, 0x213f,
+0x2145, 0x2149,
+0x214e, 0x214e,
+0x2160, 0x2188,
+0x2c00, 0x2c2e,
+0x2c30, 0x2c5e,
+0x2c60, 0x2ce4,
+0x2ceb, 0x2cee,
+0x2cf2, 0x2cf3,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0x2d30, 0x2d67,
+0x2d6f, 0x2d6f,
+0x2d80, 0x2d96,
+0x2da0, 0x2da6,
+0x2da8, 0x2dae,
+0x2db0, 0x2db6,
+0x2db8, 0x2dbe,
+0x2dc0, 0x2dc6,
+0x2dc8, 0x2dce,
+0x2dd0, 0x2dd6,
+0x2dd8, 0x2dde,
+0x3005, 0x3007,
+0x3021, 0x3029,
+0x3031, 0x3035,
+0x3038, 0x303c,
+0x3041, 0x3096,
+0x309b, 0x309f,
+0x30a1, 0x30fa,
+0x30fc, 0x30ff,
+0x3105, 0x312d,
+0x3131, 0x318e,
+0x31a0, 0x31ba,
+0x31f0, 0x31ff,
+0x3400, 0x4db5,
+0x4e00, 0x9fd5,
+0xa000, 0xa48c,
+0xa4d0, 0xa4fd,
+0xa500, 0xa60c,
+0xa610, 0xa61f,
+0xa62a, 0xa62b,
+0xa640, 0xa66e,
+0xa67f, 0xa69d,
+0xa6a0, 0xa6ef,
+0xa717, 0xa71f,
+0xa722, 0xa788,
+0xa78b, 0xa7ad,
+0xa7b0, 0xa7b7,
+0xa7f7, 0xa801,
+0xa803, 0xa805,
+0xa807, 0xa80a,
+0xa80c, 0xa822,
+0xa840, 0xa873,
+0xa882, 0xa8b3,
+0xa8f2, 0xa8f7,
+0xa8fb, 0xa8fb,
+0xa8fd, 0xa8fd,
+0xa90a, 0xa925,
+0xa930, 0xa946,
+0xa960, 0xa97c,
+0xa984, 0xa9b2,
+0xa9cf, 0xa9cf,
+0xa9e0, 0xa9e4,
+0xa9e6, 0xa9ef,
+0xa9fa, 0xa9fe,
+0xaa00, 0xaa28,
+0xaa40, 0xaa42,
+0xaa44, 0xaa4b,
+0xaa60, 0xaa76,
+0xaa7a, 0xaa7a,
+0xaa7e, 0xaaaf,
+0xaab1, 0xaab1,
+0xaab5, 0xaab6,
+0xaab9, 0xaabd,
+0xaac0, 0xaac0,
+0xaac2, 0xaac2,
+0xaadb, 0xaadd,
+0xaae0, 0xaaea,
+0xaaf2, 0xaaf4,
+0xab01, 0xab06,
+0xab09, 0xab0e,
+0xab11, 0xab16,
+0xab20, 0xab26,
+0xab28, 0xab2e,
+0xab30, 0xab5a,
+0xab5c, 0xab65,
+0xab70, 0xabe2,
+0xac00, 0xd7a3,
+0xd7b0, 0xd7c6,
+0xd7cb, 0xd7fb,
+0xf900, 0xfa6d,
+0xfa70, 0xfad9,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xfb1d, 0xfb1d,
+0xfb1f, 0xfb28,
+0xfb2a, 0xfb36,
+0xfb38, 0xfb3c,
+0xfb3e, 0xfb3e,
+0xfb40, 0xfb41,
+0xfb43, 0xfb44,
+0xfb46, 0xfbb1,
+0xfbd3, 0xfd3d,
+0xfd50, 0xfd8f,
+0xfd92, 0xfdc7,
+0xfdf0, 0xfdfb,
+0xfe70, 0xfe74,
+0xfe76, 0xfefc,
+0xff21, 0xff3a,
+0xff41, 0xff5a,
+0xff66, 0xffbe,
+0xffc2, 0xffc7,
+0xffca, 0xffcf,
+0xffd2, 0xffd7,
+0xffda, 0xffdc,
+0x10000, 0x1000b,
+0x1000d, 0x10026,
+0x10028, 0x1003a,
+0x1003c, 0x1003d,
+0x1003f, 0x1004d,
+0x10050, 0x1005d,
+0x10080, 0x100fa,
+0x10140, 0x10174,
+0x10280, 0x1029c,
+0x102a0, 0x102d0,
+0x10300, 0x1031f,
+0x10330, 0x1034a,
+0x10350, 0x10375,
+0x10380, 0x1039d,
+0x103a0, 0x103c3,
+0x103c8, 0x103cf,
+0x103d1, 0x103d5,
+0x10400, 0x1049d,
+0x10500, 0x10527,
+0x10530, 0x10563,
+0x10600, 0x10736,
+0x10740, 0x10755,
+0x10760, 0x10767,
+0x10800, 0x10805,
+0x10808, 0x10808,
+0x1080a, 0x10835,
+0x10837, 0x10838,
+0x1083c, 0x1083c,
+0x1083f, 0x10855,
+0x10860, 0x10876,
+0x10880, 0x1089e,
+0x108e0, 0x108f2,
+0x108f4, 0x108f5,
+0x10900, 0x10915,
+0x10920, 0x10939,
+0x10980, 0x109b7,
+0x109be, 0x109bf,
+0x10a00, 0x10a00,
+0x10a10, 0x10a13,
+0x10a15, 0x10a17,
+0x10a19, 0x10a33,
+0x10a60, 0x10a7c,
+0x10a80, 0x10a9c,
+0x10ac0, 0x10ac7,
+0x10ac9, 0x10ae4,
+0x10b00, 0x10b35,
+0x10b40, 0x10b55,
+0x10b60, 0x10b72,
+0x10b80, 0x10b91,
+0x10c00, 0x10c48,
+0x10c80, 0x10cb2,
+0x10cc0, 0x10cf2,
+0x11003, 0x11037,
+0x11083, 0x110af,
+0x110d0, 0x110e8,
+0x11103, 0x11126,
+0x11150, 0x11172,
+0x11176, 0x11176,
+0x11183, 0x111b2,
+0x111c1, 0x111c4,
+0x111da, 0x111da,
+0x111dc, 0x111dc,
+0x11200, 0x11211,
+0x11213, 0x1122b,
+0x11280, 0x11286,
+0x11288, 0x11288,
+0x1128a, 0x1128d,
+0x1128f, 0x1129d,
+0x1129f, 0x112a8,
+0x112b0, 0x112de,
+0x11305, 0x1130c,
+0x1130f, 0x11310,
+0x11313, 0x11328,
+0x1132a, 0x11330,
+0x11332, 0x11333,
+0x11335, 0x11339,
+0x1133d, 0x1133d,
+0x11350, 0x11350,
+0x1135d, 0x11361,
+0x11480, 0x114af,
+0x114c4, 0x114c5,
+0x114c7, 0x114c7,
+0x11580, 0x115ae,
+0x115d8, 0x115db,
+0x11600, 0x1162f,
+0x11644, 0x11644,
+0x11680, 0x116aa,
+0x11700, 0x11719,
+0x118a0, 0x118df,
+0x118ff, 0x118ff,
+0x11ac0, 0x11af8,
+0x12000, 0x12399,
+0x12400, 0x1246e,
+0x12480, 0x12543,
+0x13000, 0x1342e,
+0x14400, 0x14646,
+0x16800, 0x16a38,
+0x16a40, 0x16a5e,
+0x16ad0, 0x16aed,
+0x16b00, 0x16b2f,
+0x16b40, 0x16b43,
+0x16b63, 0x16b77,
+0x16b7d, 0x16b8f,
+0x16f00, 0x16f44,
+0x16f50, 0x16f50,
+0x16f93, 0x16f9f,
+0x1b000, 0x1b001,
+0x1bc00, 0x1bc6a,
+0x1bc70, 0x1bc7c,
+0x1bc80, 0x1bc88,
+0x1bc90, 0x1bc99,
+0x1d400, 0x1d454,
+0x1d456, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d51e, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d552, 0x1d6a5,
+0x1d6a8, 0x1d6c0,
+0x1d6c2, 0x1d6da,
+0x1d6dc, 0x1d6fa,
+0x1d6fc, 0x1d714,
+0x1d716, 0x1d734,
+0x1d736, 0x1d74e,
+0x1d750, 0x1d76e,
+0x1d770, 0x1d788,
+0x1d78a, 0x1d7a8,
+0x1d7aa, 0x1d7c2,
+0x1d7c4, 0x1d7cb,
+0x1e800, 0x1e8c4,
+0x1ee00, 0x1ee03,
+0x1ee05, 0x1ee1f,
+0x1ee21, 0x1ee22,
+0x1ee24, 0x1ee24,
+0x1ee27, 0x1ee27,
+0x1ee29, 0x1ee32,
+0x1ee34, 0x1ee37,
+0x1ee39, 0x1ee39,
+0x1ee3b, 0x1ee3b,
+0x1ee42, 0x1ee42,
+0x1ee47, 0x1ee47,
+0x1ee49, 0x1ee49,
+0x1ee4b, 0x1ee4b,
+0x1ee4d, 0x1ee4f,
+0x1ee51, 0x1ee52,
+0x1ee54, 0x1ee54,
+0x1ee57, 0x1ee57,
+0x1ee59, 0x1ee59,
+0x1ee5b, 0x1ee5b,
+0x1ee5d, 0x1ee5d,
+0x1ee5f, 0x1ee5f,
+0x1ee61, 0x1ee62,
+0x1ee64, 0x1ee64,
+0x1ee67, 0x1ee6a,
+0x1ee6c, 0x1ee72,
+0x1ee74, 0x1ee77,
+0x1ee79, 0x1ee7c,
+0x1ee7e, 0x1ee7e,
+0x1ee80, 0x1ee89,
+0x1ee8b, 0x1ee9b,
+0x1eea1, 0x1eea3,
+0x1eea5, 0x1eea9,
+0x1eeab, 0x1eebb,
+0x20000, 0x2a6d6,
+0x2a700, 0x2b734,
+0x2b740, 0x2b81d,
+0x2b820, 0x2cea1,
+0x2f800, 0x2fa1d,
+}; /* END of CR_ID_Start */
+
+/* PROPERTY: 'Ideographic': Binary Property */
+static const OnigCodePoint
+CR_Ideographic[] = { 12,
+0x3006, 0x3007,
+0x3021, 0x3029,
+0x3038, 0x303a,
+0x3400, 0x4db5,
+0x4e00, 0x9fd5,
+0xf900, 0xfa6d,
+0xfa70, 0xfad9,
+0x20000, 0x2a6d6,
+0x2a700, 0x2b734,
+0x2b740, 0x2b81d,
+0x2b820, 0x2cea1,
+0x2f800, 0x2fa1d,
+}; /* END of CR_Ideographic */
+
+/* PROPERTY: 'Imperial_Aramaic': Script */
+static const OnigCodePoint
+CR_Imperial_Aramaic[] = { 2,
+0x10840, 0x10855,
+0x10857, 0x1085f,
+}; /* END of CR_Imperial_Aramaic */
+
+/* PROPERTY: 'Inherited': Script */
+static const OnigCodePoint
+CR_Inherited[] = { 27,
+0x0300, 0x036f,
+0x0485, 0x0486,
+0x064b, 0x0655,
+0x0670, 0x0670,
+0x0951, 0x0952,
+0x1ab0, 0x1abe,
+0x1cd0, 0x1cd2,
+0x1cd4, 0x1ce0,
+0x1ce2, 0x1ce8,
+0x1ced, 0x1ced,
+0x1cf4, 0x1cf4,
+0x1cf8, 0x1cf9,
+0x1dc0, 0x1df5,
+0x1dfc, 0x1dff,
+0x200c, 0x200d,
+0x20d0, 0x20f0,
+0x302a, 0x302d,
+0x3099, 0x309a,
+0xfe00, 0xfe0f,
+0xfe20, 0xfe2d,
+0x101fd, 0x101fd,
+0x102e0, 0x102e0,
+0x1d167, 0x1d169,
+0x1d17b, 0x1d182,
+0x1d185, 0x1d18b,
+0x1d1aa, 0x1d1ad,
+0xe0100, 0xe01ef,
+}; /* END of CR_Inherited */
+
+/* PROPERTY: 'Inscriptional_Pahlavi': Script */
+static const OnigCodePoint
+CR_Inscriptional_Pahlavi[] = { 2,
+0x10b60, 0x10b72,
+0x10b78, 0x10b7f,
+}; /* END of CR_Inscriptional_Pahlavi */
+
+/* PROPERTY: 'Inscriptional_Parthian': Script */
+static const OnigCodePoint
+CR_Inscriptional_Parthian[] = { 2,
+0x10b40, 0x10b55,
+0x10b58, 0x10b5f,
+}; /* END of CR_Inscriptional_Parthian */
+
+/* PROPERTY: 'Javanese': Script */
+static const OnigCodePoint
+CR_Javanese[] = { 3,
+0xa980, 0xa9cd,
+0xa9d0, 0xa9d9,
+0xa9de, 0xa9df,
+}; /* END of CR_Javanese */
+
+/* PROPERTY: 'Join_Control': Binary Property */
+static const OnigCodePoint
+CR_Join_Control[] = { 1,
+0x200c, 0x200d,
+}; /* END of CR_Join_Control */
+
+/* PROPERTY: 'Kaithi': Script */
+static const OnigCodePoint
+CR_Kaithi[] = { 1,
+0x11080, 0x110c1,
+}; /* END of CR_Kaithi */
+
+/* PROPERTY: 'Kannada': Script */
+static const OnigCodePoint
+CR_Kannada[] = { 14,
+0x0c81, 0x0c83,
+0x0c85, 0x0c8c,
+0x0c8e, 0x0c90,
+0x0c92, 0x0ca8,
+0x0caa, 0x0cb3,
+0x0cb5, 0x0cb9,
+0x0cbc, 0x0cc4,
+0x0cc6, 0x0cc8,
+0x0cca, 0x0ccd,
+0x0cd5, 0x0cd6,
+0x0cde, 0x0cde,
+0x0ce0, 0x0ce3,
+0x0ce6, 0x0cef,
+0x0cf1, 0x0cf2,
+}; /* END of CR_Kannada */
+
+/* PROPERTY: 'Katakana': Script */
+static const OnigCodePoint
+CR_Katakana[] = { 8,
+0x30a1, 0x30fa,
+0x30fd, 0x30ff,
+0x31f0, 0x31ff,
+0x32d0, 0x32fe,
+0x3300, 0x3357,
+0xff66, 0xff6f,
+0xff71, 0xff9d,
+0x1b000, 0x1b000,
+}; /* END of CR_Katakana */
+
+/* PROPERTY: 'Kayah_Li': Script */
+static const OnigCodePoint
+CR_Kayah_Li[] = { 2,
+0xa900, 0xa92d,
+0xa92f, 0xa92f,
+}; /* END of CR_Kayah_Li */
+
+/* PROPERTY: 'Kharoshthi': Script */
+static const OnigCodePoint
+CR_Kharoshthi[] = { 8,
+0x10a00, 0x10a03,
+0x10a05, 0x10a06,
+0x10a0c, 0x10a13,
+0x10a15, 0x10a17,
+0x10a19, 0x10a33,
+0x10a38, 0x10a3a,
+0x10a3f, 0x10a47,
+0x10a50, 0x10a58,
+}; /* END of CR_Kharoshthi */
+
+/* PROPERTY: 'Khmer': Script */
+static const OnigCodePoint
+CR_Khmer[] = { 4,
+0x1780, 0x17dd,
+0x17e0, 0x17e9,
+0x17f0, 0x17f9,
+0x19e0, 0x19ff,
+}; /* END of CR_Khmer */
+
+/* PROPERTY: 'Khojki': Script */
+static const OnigCodePoint
+CR_Khojki[] = { 2,
+0x11200, 0x11211,
+0x11213, 0x1123d,
+}; /* END of CR_Khojki */
+
+/* PROPERTY: 'Khudawadi': Script */
+static const OnigCodePoint
+CR_Khudawadi[] = { 2,
+0x112b0, 0x112ea,
+0x112f0, 0x112f9,
+}; /* END of CR_Khudawadi */
+
/* PROPERTY: 'L': Major Category */
static const OnigCodePoint
CR_L[] = { 554,
@@ -7354,6 +13841,109 @@ CR_LC[] = { 122,
0x1d7c4, 0x1d7cb,
}; /* END of CR_LC */
+/* PROPERTY: 'Lao': Script */
+static const OnigCodePoint
+CR_Lao[] = { 18,
+0x0e81, 0x0e82,
+0x0e84, 0x0e84,
+0x0e87, 0x0e88,
+0x0e8a, 0x0e8a,
+0x0e8d, 0x0e8d,
+0x0e94, 0x0e97,
+0x0e99, 0x0e9f,
+0x0ea1, 0x0ea3,
+0x0ea5, 0x0ea5,
+0x0ea7, 0x0ea7,
+0x0eaa, 0x0eab,
+0x0ead, 0x0eb9,
+0x0ebb, 0x0ebd,
+0x0ec0, 0x0ec4,
+0x0ec6, 0x0ec6,
+0x0ec8, 0x0ecd,
+0x0ed0, 0x0ed9,
+0x0edc, 0x0edf,
+}; /* END of CR_Lao */
+
+/* PROPERTY: 'Latin': Script */
+static const OnigCodePoint
+CR_Latin[] = { 31,
+0x0041, 0x005a,
+0x0061, 0x007a,
+0x00aa, 0x00aa,
+0x00ba, 0x00ba,
+0x00c0, 0x00d6,
+0x00d8, 0x00f6,
+0x00f8, 0x02b8,
+0x02e0, 0x02e4,
+0x1d00, 0x1d25,
+0x1d2c, 0x1d5c,
+0x1d62, 0x1d65,
+0x1d6b, 0x1d77,
+0x1d79, 0x1dbe,
+0x1e00, 0x1eff,
+0x2071, 0x2071,
+0x207f, 0x207f,
+0x2090, 0x209c,
+0x212a, 0x212b,
+0x2132, 0x2132,
+0x214e, 0x214e,
+0x2160, 0x2188,
+0x2c60, 0x2c7f,
+0xa722, 0xa787,
+0xa78b, 0xa7ad,
+0xa7b0, 0xa7b7,
+0xa7f7, 0xa7ff,
+0xab30, 0xab5a,
+0xab5c, 0xab64,
+0xfb00, 0xfb06,
+0xff21, 0xff3a,
+0xff41, 0xff5a,
+}; /* END of CR_Latin */
+
+/* PROPERTY: 'Lepcha': Script */
+static const OnigCodePoint
+CR_Lepcha[] = { 3,
+0x1c00, 0x1c37,
+0x1c3b, 0x1c49,
+0x1c4d, 0x1c4f,
+}; /* END of CR_Lepcha */
+
+/* PROPERTY: 'Limbu': Script */
+static const OnigCodePoint
+CR_Limbu[] = { 5,
+0x1900, 0x191e,
+0x1920, 0x192b,
+0x1930, 0x193b,
+0x1940, 0x1940,
+0x1944, 0x194f,
+}; /* END of CR_Limbu */
+
+/* PROPERTY: 'Linear_A': Script */
+static const OnigCodePoint
+CR_Linear_A[] = { 3,
+0x10600, 0x10736,
+0x10740, 0x10755,
+0x10760, 0x10767,
+}; /* END of CR_Linear_A */
+
+/* PROPERTY: 'Linear_B': Script */
+static const OnigCodePoint
+CR_Linear_B[] = { 7,
+0x10000, 0x1000b,
+0x1000d, 0x10026,
+0x10028, 0x1003a,
+0x1003c, 0x1003d,
+0x1003f, 0x1004d,
+0x10050, 0x1005d,
+0x10080, 0x100fa,
+}; /* END of CR_Linear_B */
+
+/* PROPERTY: 'Lisu': Script */
+static const OnigCodePoint
+CR_Lisu[] = { 1,
+0xa4d0, 0xa4ff,
+}; /* END of CR_Lisu */
+
/* PROPERTY: 'Ll': General Category */
static const OnigCodePoint
CR_Ll[] = { 630,
@@ -8488,6 +15078,21 @@ CR_Lo[] = { 433,
0x2f800, 0x2fa1d,
}; /* END of CR_Lo */
+/* PROPERTY: 'Logical_Order_Exception': Binary Property */
+static const OnigCodePoint
+CR_Logical_Order_Exception[] = { 7,
+0x0e40, 0x0e44,
+0x0ec0, 0x0ec4,
+0x19b5, 0x19b7,
+0x19ba, 0x19ba,
+0xaab5, 0xaab6,
+0xaab9, 0xaab9,
+0xaabb, 0xaabc,
+}; /* END of CR_Logical_Order_Exception */
+
+/* PROPERTY: 'Lowercase': Derived Property */
+#define CR_Lowercase CR_Lower
+
/* PROPERTY: 'Lt': General Category */
static const OnigCodePoint
CR_Lt[] = { 10,
@@ -9133,6 +15738,19 @@ CR_Lu[] = { 625,
0x1d7ca, 0x1d7ca,
}; /* END of CR_Lu */
+/* PROPERTY: 'Lycian': Script */
+static const OnigCodePoint
+CR_Lycian[] = { 1,
+0x10280, 0x1029c,
+}; /* END of CR_Lycian */
+
+/* PROPERTY: 'Lydian': Script */
+static const OnigCodePoint
+CR_Lydian[] = { 2,
+0x10920, 0x10939,
+0x1093f, 0x1093f,
+}; /* END of CR_Lydian */
+
/* PROPERTY: 'M': Major Category */
static const OnigCodePoint
CR_M[] = { 236,
@@ -9374,6 +15992,185 @@ CR_M[] = { 236,
0xe0100, 0xe01ef,
}; /* END of CR_M */
+/* PROPERTY: 'Mahajani': Script */
+static const OnigCodePoint
+CR_Mahajani[] = { 1,
+0x11150, 0x11176,
+}; /* END of CR_Mahajani */
+
+/* PROPERTY: 'Malayalam': Script */
+static const OnigCodePoint
+CR_Malayalam[] = { 11,
+0x0d01, 0x0d03,
+0x0d05, 0x0d0c,
+0x0d0e, 0x0d10,
+0x0d12, 0x0d3a,
+0x0d3d, 0x0d44,
+0x0d46, 0x0d48,
+0x0d4a, 0x0d4e,
+0x0d57, 0x0d57,
+0x0d5f, 0x0d63,
+0x0d66, 0x0d75,
+0x0d79, 0x0d7f,
+}; /* END of CR_Malayalam */
+
+/* PROPERTY: 'Mandaic': Script */
+static const OnigCodePoint
+CR_Mandaic[] = { 2,
+0x0840, 0x085b,
+0x085e, 0x085e,
+}; /* END of CR_Mandaic */
+
+/* PROPERTY: 'Manichaean': Script */
+static const OnigCodePoint
+CR_Manichaean[] = { 2,
+0x10ac0, 0x10ae6,
+0x10aeb, 0x10af6,
+}; /* END of CR_Manichaean */
+
+/* PROPERTY: 'Math': Derived Property */
+static const OnigCodePoint
+CR_Math[] = { 138,
+0x002b, 0x002b,
+0x003c, 0x003e,
+0x005e, 0x005e,
+0x007c, 0x007c,
+0x007e, 0x007e,
+0x00ac, 0x00ac,
+0x00b1, 0x00b1,
+0x00d7, 0x00d7,
+0x00f7, 0x00f7,
+0x03d0, 0x03d2,
+0x03d5, 0x03d5,
+0x03f0, 0x03f1,
+0x03f4, 0x03f6,
+0x0606, 0x0608,
+0x2016, 0x2016,
+0x2032, 0x2034,
+0x2040, 0x2040,
+0x2044, 0x2044,
+0x2052, 0x2052,
+0x2061, 0x2064,
+0x207a, 0x207e,
+0x208a, 0x208e,
+0x20d0, 0x20dc,
+0x20e1, 0x20e1,
+0x20e5, 0x20e6,
+0x20eb, 0x20ef,
+0x2102, 0x2102,
+0x2107, 0x2107,
+0x210a, 0x2113,
+0x2115, 0x2115,
+0x2118, 0x211d,
+0x2124, 0x2124,
+0x2128, 0x2129,
+0x212c, 0x212d,
+0x212f, 0x2131,
+0x2133, 0x2138,
+0x213c, 0x2149,
+0x214b, 0x214b,
+0x2190, 0x21a7,
+0x21a9, 0x21ae,
+0x21b0, 0x21b1,
+0x21b6, 0x21b7,
+0x21bc, 0x21db,
+0x21dd, 0x21dd,
+0x21e4, 0x21e5,
+0x21f4, 0x22ff,
+0x2308, 0x230b,
+0x2320, 0x2321,
+0x237c, 0x237c,
+0x239b, 0x23b5,
+0x23b7, 0x23b7,
+0x23d0, 0x23d0,
+0x23dc, 0x23e2,
+0x25a0, 0x25a1,
+0x25ae, 0x25b7,
+0x25bc, 0x25c1,
+0x25c6, 0x25c7,
+0x25ca, 0x25cb,
+0x25cf, 0x25d3,
+0x25e2, 0x25e2,
+0x25e4, 0x25e4,
+0x25e7, 0x25ec,
+0x25f8, 0x25ff,
+0x2605, 0x2606,
+0x2640, 0x2640,
+0x2642, 0x2642,
+0x2660, 0x2663,
+0x266d, 0x266f,
+0x27c0, 0x27ff,
+0x2900, 0x2aff,
+0x2b30, 0x2b44,
+0x2b47, 0x2b4c,
+0xfb29, 0xfb29,
+0xfe61, 0xfe66,
+0xfe68, 0xfe68,
+0xff0b, 0xff0b,
+0xff1c, 0xff1e,
+0xff3c, 0xff3c,
+0xff3e, 0xff3e,
+0xff5c, 0xff5c,
+0xff5e, 0xff5e,
+0xffe2, 0xffe2,
+0xffe9, 0xffec,
+0x1d400, 0x1d454,
+0x1d456, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d51e, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d552, 0x1d6a5,
+0x1d6a8, 0x1d7cb,
+0x1d7ce, 0x1d7ff,
+0x1ee00, 0x1ee03,
+0x1ee05, 0x1ee1f,
+0x1ee21, 0x1ee22,
+0x1ee24, 0x1ee24,
+0x1ee27, 0x1ee27,
+0x1ee29, 0x1ee32,
+0x1ee34, 0x1ee37,
+0x1ee39, 0x1ee39,
+0x1ee3b, 0x1ee3b,
+0x1ee42, 0x1ee42,
+0x1ee47, 0x1ee47,
+0x1ee49, 0x1ee49,
+0x1ee4b, 0x1ee4b,
+0x1ee4d, 0x1ee4f,
+0x1ee51, 0x1ee52,
+0x1ee54, 0x1ee54,
+0x1ee57, 0x1ee57,
+0x1ee59, 0x1ee59,
+0x1ee5b, 0x1ee5b,
+0x1ee5d, 0x1ee5d,
+0x1ee5f, 0x1ee5f,
+0x1ee61, 0x1ee62,
+0x1ee64, 0x1ee64,
+0x1ee67, 0x1ee6a,
+0x1ee6c, 0x1ee72,
+0x1ee74, 0x1ee77,
+0x1ee79, 0x1ee7c,
+0x1ee7e, 0x1ee7e,
+0x1ee80, 0x1ee89,
+0x1ee8b, 0x1ee9b,
+0x1eea1, 0x1eea3,
+0x1eea5, 0x1eea9,
+0x1eeab, 0x1eebb,
+0x1eef0, 0x1eef1,
+}; /* END of CR_Math */
+
/* PROPERTY: 'Mc': General Category */
static const OnigCodePoint
CR_Mc[] = { 147,
@@ -9536,6 +16333,43 @@ CR_Me[] = { 5,
0xa670, 0xa672,
}; /* END of CR_Me */
+/* PROPERTY: 'Meetei_Mayek': Script */
+static const OnigCodePoint
+CR_Meetei_Mayek[] = { 3,
+0xaae0, 0xaaf6,
+0xabc0, 0xabed,
+0xabf0, 0xabf9,
+}; /* END of CR_Meetei_Mayek */
+
+/* PROPERTY: 'Mende_Kikakui': Script */
+static const OnigCodePoint
+CR_Mende_Kikakui[] = { 2,
+0x1e800, 0x1e8c4,
+0x1e8c7, 0x1e8d6,
+}; /* END of CR_Mende_Kikakui */
+
+/* PROPERTY: 'Meroitic_Cursive': Script */
+static const OnigCodePoint
+CR_Meroitic_Cursive[] = { 3,
+0x109a0, 0x109b7,
+0x109bc, 0x109cf,
+0x109d2, 0x109ff,
+}; /* END of CR_Meroitic_Cursive */
+
+/* PROPERTY: 'Meroitic_Hieroglyphs': Script */
+static const OnigCodePoint
+CR_Meroitic_Hieroglyphs[] = { 1,
+0x10980, 0x1099f,
+}; /* END of CR_Meroitic_Hieroglyphs */
+
+/* PROPERTY: 'Miao': Script */
+static const OnigCodePoint
+CR_Miao[] = { 3,
+0x16f00, 0x16f44,
+0x16f50, 0x16f7e,
+0x16f8f, 0x16f9f,
+}; /* END of CR_Miao */
+
/* PROPERTY: 'Mn': General Category */
static const OnigCodePoint
CR_Mn[] = { 266,
@@ -9807,6 +16641,50 @@ CR_Mn[] = { 266,
0xe0100, 0xe01ef,
}; /* END of CR_Mn */
+/* PROPERTY: 'Modi': Script */
+static const OnigCodePoint
+CR_Modi[] = { 2,
+0x11600, 0x11644,
+0x11650, 0x11659,
+}; /* END of CR_Modi */
+
+/* PROPERTY: 'Mongolian': Script */
+static const OnigCodePoint
+CR_Mongolian[] = { 6,
+0x1800, 0x1801,
+0x1804, 0x1804,
+0x1806, 0x180e,
+0x1810, 0x1819,
+0x1820, 0x1877,
+0x1880, 0x18aa,
+}; /* END of CR_Mongolian */
+
+/* PROPERTY: 'Mro': Script */
+static const OnigCodePoint
+CR_Mro[] = { 3,
+0x16a40, 0x16a5e,
+0x16a60, 0x16a69,
+0x16a6e, 0x16a6f,
+}; /* END of CR_Mro */
+
+/* PROPERTY: 'Multani': Script */
+static const OnigCodePoint
+CR_Multani[] = { 5,
+0x11280, 0x11286,
+0x11288, 0x11288,
+0x1128a, 0x1128d,
+0x1128f, 0x1129d,
+0x1129f, 0x112a9,
+}; /* END of CR_Multani */
+
+/* PROPERTY: 'Myanmar': Script */
+static const OnigCodePoint
+CR_Myanmar[] = { 3,
+0x1000, 0x109f,
+0xa9e0, 0xa9fe,
+0xaa60, 0xaa7f,
+}; /* END of CR_Myanmar */
+
/* PROPERTY: 'N': Major Category */
static const OnigCodePoint
CR_N[] = { 111,
@@ -9923,9 +16801,31 @@ CR_N[] = { 111,
0x1f100, 0x1f10c,
}; /* END of CR_N */
+/* PROPERTY: 'Nabataean': Script */
+static const OnigCodePoint
+CR_Nabataean[] = { 2,
+0x10880, 0x1089e,
+0x108a7, 0x108af,
+}; /* END of CR_Nabataean */
+
/* PROPERTY: 'Nd': General Category */
#define CR_Nd CR_Digit
+/* PROPERTY: 'New_Tai_Lue': Script */
+static const OnigCodePoint
+CR_New_Tai_Lue[] = { 4,
+0x1980, 0x19ab,
+0x19b0, 0x19c9,
+0x19d0, 0x19da,
+0x19de, 0x19df,
+}; /* END of CR_New_Tai_Lue */
+
+/* PROPERTY: 'Nko': Script */
+static const OnigCodePoint
+CR_Nko[] = { 1,
+0x07c0, 0x07fa,
+}; /* END of CR_Nko */
+
/* PROPERTY: 'Nl': General Category */
static const OnigCodePoint
CR_Nl[] = { 12,
@@ -10006,9 +16906,597 @@ CR_No[] = { 58,
0x1f100, 0x1f10c,
}; /* END of CR_No */
+/* PROPERTY: 'Noncharacter_Code_Point': Binary Property */
+static const OnigCodePoint
+CR_Noncharacter_Code_Point[] = { 18,
+0xfdd0, 0xfdef,
+0xfffe, 0xffff,
+0x1fffe, 0x1ffff,
+0x2fffe, 0x2ffff,
+0x3fffe, 0x3ffff,
+0x4fffe, 0x4ffff,
+0x5fffe, 0x5ffff,
+0x6fffe, 0x6ffff,
+0x7fffe, 0x7ffff,
+0x8fffe, 0x8ffff,
+0x9fffe, 0x9ffff,
+0xafffe, 0xaffff,
+0xbfffe, 0xbffff,
+0xcfffe, 0xcffff,
+0xdfffe, 0xdffff,
+0xefffe, 0xeffff,
+0xffffe, 0xfffff,
+0x10fffe, 0x10ffff,
+}; /* END of CR_Noncharacter_Code_Point */
+
+/* PROPERTY: 'Ogham': Script */
+static const OnigCodePoint
+CR_Ogham[] = { 1,
+0x1680, 0x169c,
+}; /* END of CR_Ogham */
+
+/* PROPERTY: 'Ol_Chiki': Script */
+static const OnigCodePoint
+CR_Ol_Chiki[] = { 1,
+0x1c50, 0x1c7f,
+}; /* END of CR_Ol_Chiki */
+
+/* PROPERTY: 'Old_Hungarian': Script */
+static const OnigCodePoint
+CR_Old_Hungarian[] = { 3,
+0x10c80, 0x10cb2,
+0x10cc0, 0x10cf2,
+0x10cfa, 0x10cff,
+}; /* END of CR_Old_Hungarian */
+
+/* PROPERTY: 'Old_Italic': Script */
+static const OnigCodePoint
+CR_Old_Italic[] = { 1,
+0x10300, 0x10323,
+}; /* END of CR_Old_Italic */
+
+/* PROPERTY: 'Old_North_Arabian': Script */
+static const OnigCodePoint
+CR_Old_North_Arabian[] = { 1,
+0x10a80, 0x10a9f,
+}; /* END of CR_Old_North_Arabian */
+
+/* PROPERTY: 'Old_Permic': Script */
+static const OnigCodePoint
+CR_Old_Permic[] = { 1,
+0x10350, 0x1037a,
+}; /* END of CR_Old_Permic */
+
+/* PROPERTY: 'Old_Persian': Script */
+static const OnigCodePoint
+CR_Old_Persian[] = { 2,
+0x103a0, 0x103c3,
+0x103c8, 0x103d5,
+}; /* END of CR_Old_Persian */
+
+/* PROPERTY: 'Old_South_Arabian': Script */
+static const OnigCodePoint
+CR_Old_South_Arabian[] = { 1,
+0x10a60, 0x10a7f,
+}; /* END of CR_Old_South_Arabian */
+
+/* PROPERTY: 'Old_Turkic': Script */
+static const OnigCodePoint
+CR_Old_Turkic[] = { 1,
+0x10c00, 0x10c48,
+}; /* END of CR_Old_Turkic */
+
+/* PROPERTY: 'Oriya': Script */
+static const OnigCodePoint
+CR_Oriya[] = { 14,
+0x0b01, 0x0b03,
+0x0b05, 0x0b0c,
+0x0b0f, 0x0b10,
+0x0b13, 0x0b28,
+0x0b2a, 0x0b30,
+0x0b32, 0x0b33,
+0x0b35, 0x0b39,
+0x0b3c, 0x0b44,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4d,
+0x0b56, 0x0b57,
+0x0b5c, 0x0b5d,
+0x0b5f, 0x0b63,
+0x0b66, 0x0b77,
+}; /* END of CR_Oriya */
+
+/* PROPERTY: 'Osmanya': Script */
+static const OnigCodePoint
+CR_Osmanya[] = { 2,
+0x10480, 0x1049d,
+0x104a0, 0x104a9,
+}; /* END of CR_Osmanya */
+
+/* PROPERTY: 'Other_Alphabetic': Binary Property */
+static const OnigCodePoint
+CR_Other_Alphabetic[] = { 178,
+0x0345, 0x0345,
+0x05b0, 0x05bd,
+0x05bf, 0x05bf,
+0x05c1, 0x05c2,
+0x05c4, 0x05c5,
+0x05c7, 0x05c7,
+0x0610, 0x061a,
+0x064b, 0x0657,
+0x0659, 0x065f,
+0x0670, 0x0670,
+0x06d6, 0x06dc,
+0x06e1, 0x06e4,
+0x06e7, 0x06e8,
+0x06ed, 0x06ed,
+0x0711, 0x0711,
+0x0730, 0x073f,
+0x07a6, 0x07b0,
+0x0816, 0x0817,
+0x081b, 0x0823,
+0x0825, 0x0827,
+0x0829, 0x082c,
+0x08e3, 0x08e9,
+0x08f0, 0x0903,
+0x093a, 0x093b,
+0x093e, 0x094c,
+0x094e, 0x094f,
+0x0955, 0x0957,
+0x0962, 0x0963,
+0x0981, 0x0983,
+0x09be, 0x09c4,
+0x09c7, 0x09c8,
+0x09cb, 0x09cc,
+0x09d7, 0x09d7,
+0x09e2, 0x09e3,
+0x0a01, 0x0a03,
+0x0a3e, 0x0a42,
+0x0a47, 0x0a48,
+0x0a4b, 0x0a4c,
+0x0a51, 0x0a51,
+0x0a70, 0x0a71,
+0x0a75, 0x0a75,
+0x0a81, 0x0a83,
+0x0abe, 0x0ac5,
+0x0ac7, 0x0ac9,
+0x0acb, 0x0acc,
+0x0ae2, 0x0ae3,
+0x0b01, 0x0b03,
+0x0b3e, 0x0b44,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4c,
+0x0b56, 0x0b57,
+0x0b62, 0x0b63,
+0x0b82, 0x0b82,
+0x0bbe, 0x0bc2,
+0x0bc6, 0x0bc8,
+0x0bca, 0x0bcc,
+0x0bd7, 0x0bd7,
+0x0c00, 0x0c03,
+0x0c3e, 0x0c44,
+0x0c46, 0x0c48,
+0x0c4a, 0x0c4c,
+0x0c55, 0x0c56,
+0x0c62, 0x0c63,
+0x0c81, 0x0c83,
+0x0cbe, 0x0cc4,
+0x0cc6, 0x0cc8,
+0x0cca, 0x0ccc,
+0x0cd5, 0x0cd6,
+0x0ce2, 0x0ce3,
+0x0d01, 0x0d03,
+0x0d3e, 0x0d44,
+0x0d46, 0x0d48,
+0x0d4a, 0x0d4c,
+0x0d57, 0x0d57,
+0x0d62, 0x0d63,
+0x0d82, 0x0d83,
+0x0dcf, 0x0dd4,
+0x0dd6, 0x0dd6,
+0x0dd8, 0x0ddf,
+0x0df2, 0x0df3,
+0x0e31, 0x0e31,
+0x0e34, 0x0e3a,
+0x0e4d, 0x0e4d,
+0x0eb1, 0x0eb1,
+0x0eb4, 0x0eb9,
+0x0ebb, 0x0ebc,
+0x0ecd, 0x0ecd,
+0x0f71, 0x0f81,
+0x0f8d, 0x0f97,
+0x0f99, 0x0fbc,
+0x102b, 0x1036,
+0x1038, 0x1038,
+0x103b, 0x103e,
+0x1056, 0x1059,
+0x105e, 0x1060,
+0x1062, 0x1062,
+0x1067, 0x1068,
+0x1071, 0x1074,
+0x1082, 0x1086,
+0x109c, 0x109d,
+0x135f, 0x135f,
+0x1712, 0x1713,
+0x1732, 0x1733,
+0x1752, 0x1753,
+0x1772, 0x1773,
+0x17b6, 0x17c8,
+0x18a9, 0x18a9,
+0x1920, 0x192b,
+0x1930, 0x1938,
+0x1a17, 0x1a1b,
+0x1a55, 0x1a5e,
+0x1a61, 0x1a74,
+0x1b00, 0x1b04,
+0x1b35, 0x1b43,
+0x1b80, 0x1b82,
+0x1ba1, 0x1ba9,
+0x1bac, 0x1bad,
+0x1be7, 0x1bf1,
+0x1c24, 0x1c35,
+0x1cf2, 0x1cf3,
+0x1de7, 0x1df4,
+0x24b6, 0x24e9,
+0x2de0, 0x2dff,
+0xa674, 0xa67b,
+0xa69e, 0xa69f,
+0xa823, 0xa827,
+0xa880, 0xa881,
+0xa8b4, 0xa8c3,
+0xa926, 0xa92a,
+0xa947, 0xa952,
+0xa980, 0xa983,
+0xa9b4, 0xa9bf,
+0xaa29, 0xaa36,
+0xaa43, 0xaa43,
+0xaa4c, 0xaa4d,
+0xaab0, 0xaab0,
+0xaab2, 0xaab4,
+0xaab7, 0xaab8,
+0xaabe, 0xaabe,
+0xaaeb, 0xaaef,
+0xaaf5, 0xaaf5,
+0xabe3, 0xabea,
+0xfb1e, 0xfb1e,
+0x10376, 0x1037a,
+0x10a01, 0x10a03,
+0x10a05, 0x10a06,
+0x10a0c, 0x10a0f,
+0x11000, 0x11002,
+0x11038, 0x11045,
+0x11082, 0x11082,
+0x110b0, 0x110b8,
+0x11100, 0x11102,
+0x11127, 0x11132,
+0x11180, 0x11182,
+0x111b3, 0x111bf,
+0x1122c, 0x11234,
+0x11237, 0x11237,
+0x112df, 0x112e8,
+0x11300, 0x11303,
+0x1133e, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134c,
+0x11357, 0x11357,
+0x11362, 0x11363,
+0x114b0, 0x114c1,
+0x115af, 0x115b5,
+0x115b8, 0x115be,
+0x115dc, 0x115dd,
+0x11630, 0x1163e,
+0x11640, 0x11640,
+0x116ab, 0x116b5,
+0x1171d, 0x1172a,
+0x16b30, 0x16b36,
+0x16f51, 0x16f7e,
+0x1bc9e, 0x1bc9e,
+0x1f130, 0x1f149,
+0x1f150, 0x1f169,
+0x1f170, 0x1f189,
+}; /* END of CR_Other_Alphabetic */
+
+/* PROPERTY: 'Other_Default_Ignorable_Code_Point': Binary Property */
+static const OnigCodePoint
+CR_Other_Default_Ignorable_Code_Point[] = { 11,
+0x034f, 0x034f,
+0x115f, 0x1160,
+0x17b4, 0x17b5,
+0x2065, 0x2065,
+0x3164, 0x3164,
+0xffa0, 0xffa0,
+0xfff0, 0xfff8,
+0xe0000, 0xe0000,
+0xe0002, 0xe001f,
+0xe0080, 0xe00ff,
+0xe01f0, 0xe0fff,
+}; /* END of CR_Other_Default_Ignorable_Code_Point */
+
+/* PROPERTY: 'Other_Grapheme_Extend': Binary Property */
+static const OnigCodePoint
+CR_Other_Grapheme_Extend[] = { 22,
+0x09be, 0x09be,
+0x09d7, 0x09d7,
+0x0b3e, 0x0b3e,
+0x0b57, 0x0b57,
+0x0bbe, 0x0bbe,
+0x0bd7, 0x0bd7,
+0x0cc2, 0x0cc2,
+0x0cd5, 0x0cd6,
+0x0d3e, 0x0d3e,
+0x0d57, 0x0d57,
+0x0dcf, 0x0dcf,
+0x0ddf, 0x0ddf,
+0x200c, 0x200d,
+0x302e, 0x302f,
+0xff9e, 0xff9f,
+0x1133e, 0x1133e,
+0x11357, 0x11357,
+0x114b0, 0x114b0,
+0x114bd, 0x114bd,
+0x115af, 0x115af,
+0x1d165, 0x1d165,
+0x1d16e, 0x1d172,
+}; /* END of CR_Other_Grapheme_Extend */
+
+/* PROPERTY: 'Other_ID_Continue': Binary Property */
+static const OnigCodePoint
+CR_Other_ID_Continue[] = { 4,
+0x00b7, 0x00b7,
+0x0387, 0x0387,
+0x1369, 0x1371,
+0x19da, 0x19da,
+}; /* END of CR_Other_ID_Continue */
+
+/* PROPERTY: 'Other_ID_Start': Binary Property */
+static const OnigCodePoint
+CR_Other_ID_Start[] = { 3,
+0x2118, 0x2118,
+0x212e, 0x212e,
+0x309b, 0x309c,
+}; /* END of CR_Other_ID_Start */
+
+/* PROPERTY: 'Other_Lowercase': Binary Property */
+static const OnigCodePoint
+CR_Other_Lowercase[] = { 20,
+0x00aa, 0x00aa,
+0x00ba, 0x00ba,
+0x02b0, 0x02b8,
+0x02c0, 0x02c1,
+0x02e0, 0x02e4,
+0x0345, 0x0345,
+0x037a, 0x037a,
+0x1d2c, 0x1d6a,
+0x1d78, 0x1d78,
+0x1d9b, 0x1dbf,
+0x2071, 0x2071,
+0x207f, 0x207f,
+0x2090, 0x209c,
+0x2170, 0x217f,
+0x24d0, 0x24e9,
+0x2c7c, 0x2c7d,
+0xa69c, 0xa69d,
+0xa770, 0xa770,
+0xa7f8, 0xa7f9,
+0xab5c, 0xab5f,
+}; /* END of CR_Other_Lowercase */
+
+/* PROPERTY: 'Other_Math': Binary Property */
+static const OnigCodePoint
+CR_Other_Math[] = { 134,
+0x005e, 0x005e,
+0x03d0, 0x03d2,
+0x03d5, 0x03d5,
+0x03f0, 0x03f1,
+0x03f4, 0x03f5,
+0x2016, 0x2016,
+0x2032, 0x2034,
+0x2040, 0x2040,
+0x2061, 0x2064,
+0x207d, 0x207e,
+0x208d, 0x208e,
+0x20d0, 0x20dc,
+0x20e1, 0x20e1,
+0x20e5, 0x20e6,
+0x20eb, 0x20ef,
+0x2102, 0x2102,
+0x2107, 0x2107,
+0x210a, 0x2113,
+0x2115, 0x2115,
+0x2119, 0x211d,
+0x2124, 0x2124,
+0x2128, 0x2129,
+0x212c, 0x212d,
+0x212f, 0x2131,
+0x2133, 0x2138,
+0x213c, 0x213f,
+0x2145, 0x2149,
+0x2195, 0x2199,
+0x219c, 0x219f,
+0x21a1, 0x21a2,
+0x21a4, 0x21a5,
+0x21a7, 0x21a7,
+0x21a9, 0x21ad,
+0x21b0, 0x21b1,
+0x21b6, 0x21b7,
+0x21bc, 0x21cd,
+0x21d0, 0x21d1,
+0x21d3, 0x21d3,
+0x21d5, 0x21db,
+0x21dd, 0x21dd,
+0x21e4, 0x21e5,
+0x2308, 0x230b,
+0x23b4, 0x23b5,
+0x23b7, 0x23b7,
+0x23d0, 0x23d0,
+0x23e2, 0x23e2,
+0x25a0, 0x25a1,
+0x25ae, 0x25b6,
+0x25bc, 0x25c0,
+0x25c6, 0x25c7,
+0x25ca, 0x25cb,
+0x25cf, 0x25d3,
+0x25e2, 0x25e2,
+0x25e4, 0x25e4,
+0x25e7, 0x25ec,
+0x2605, 0x2606,
+0x2640, 0x2640,
+0x2642, 0x2642,
+0x2660, 0x2663,
+0x266d, 0x266e,
+0x27c5, 0x27c6,
+0x27e6, 0x27ef,
+0x2983, 0x2998,
+0x29d8, 0x29db,
+0x29fc, 0x29fd,
+0xfe61, 0xfe61,
+0xfe63, 0xfe63,
+0xfe68, 0xfe68,
+0xff3c, 0xff3c,
+0xff3e, 0xff3e,
+0x1d400, 0x1d454,
+0x1d456, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d51e, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d552, 0x1d6a5,
+0x1d6a8, 0x1d6c0,
+0x1d6c2, 0x1d6da,
+0x1d6dc, 0x1d6fa,
+0x1d6fc, 0x1d714,
+0x1d716, 0x1d734,
+0x1d736, 0x1d74e,
+0x1d750, 0x1d76e,
+0x1d770, 0x1d788,
+0x1d78a, 0x1d7a8,
+0x1d7aa, 0x1d7c2,
+0x1d7c4, 0x1d7cb,
+0x1d7ce, 0x1d7ff,
+0x1ee00, 0x1ee03,
+0x1ee05, 0x1ee1f,
+0x1ee21, 0x1ee22,
+0x1ee24, 0x1ee24,
+0x1ee27, 0x1ee27,
+0x1ee29, 0x1ee32,
+0x1ee34, 0x1ee37,
+0x1ee39, 0x1ee39,
+0x1ee3b, 0x1ee3b,
+0x1ee42, 0x1ee42,
+0x1ee47, 0x1ee47,
+0x1ee49, 0x1ee49,
+0x1ee4b, 0x1ee4b,
+0x1ee4d, 0x1ee4f,
+0x1ee51, 0x1ee52,
+0x1ee54, 0x1ee54,
+0x1ee57, 0x1ee57,
+0x1ee59, 0x1ee59,
+0x1ee5b, 0x1ee5b,
+0x1ee5d, 0x1ee5d,
+0x1ee5f, 0x1ee5f,
+0x1ee61, 0x1ee62,
+0x1ee64, 0x1ee64,
+0x1ee67, 0x1ee6a,
+0x1ee6c, 0x1ee72,
+0x1ee74, 0x1ee77,
+0x1ee79, 0x1ee7c,
+0x1ee7e, 0x1ee7e,
+0x1ee80, 0x1ee89,
+0x1ee8b, 0x1ee9b,
+0x1eea1, 0x1eea3,
+0x1eea5, 0x1eea9,
+0x1eeab, 0x1eebb,
+}; /* END of CR_Other_Math */
+
+/* PROPERTY: 'Other_Uppercase': Binary Property */
+static const OnigCodePoint
+CR_Other_Uppercase[] = { 5,
+0x2160, 0x216f,
+0x24b6, 0x24cf,
+0x1f130, 0x1f149,
+0x1f150, 0x1f169,
+0x1f170, 0x1f189,
+}; /* END of CR_Other_Uppercase */
+
/* PROPERTY: 'P': Major Category */
#define CR_P CR_Punct
+/* PROPERTY: 'Pahawh_Hmong': Script */
+static const OnigCodePoint
+CR_Pahawh_Hmong[] = { 5,
+0x16b00, 0x16b45,
+0x16b50, 0x16b59,
+0x16b5b, 0x16b61,
+0x16b63, 0x16b77,
+0x16b7d, 0x16b8f,
+}; /* END of CR_Pahawh_Hmong */
+
+/* PROPERTY: 'Palmyrene': Script */
+static const OnigCodePoint
+CR_Palmyrene[] = { 1,
+0x10860, 0x1087f,
+}; /* END of CR_Palmyrene */
+
+/* PROPERTY: 'Pattern_Syntax': Binary Property */
+static const OnigCodePoint
+CR_Pattern_Syntax[] = { 28,
+0x0021, 0x002f,
+0x003a, 0x0040,
+0x005b, 0x005e,
+0x0060, 0x0060,
+0x007b, 0x007e,
+0x00a1, 0x00a7,
+0x00a9, 0x00a9,
+0x00ab, 0x00ac,
+0x00ae, 0x00ae,
+0x00b0, 0x00b1,
+0x00b6, 0x00b6,
+0x00bb, 0x00bb,
+0x00bf, 0x00bf,
+0x00d7, 0x00d7,
+0x00f7, 0x00f7,
+0x2010, 0x2027,
+0x2030, 0x203e,
+0x2041, 0x2053,
+0x2055, 0x205e,
+0x2190, 0x245f,
+0x2500, 0x2775,
+0x2794, 0x2bff,
+0x2e00, 0x2e7f,
+0x3001, 0x3003,
+0x3008, 0x3020,
+0x3030, 0x3030,
+0xfd3e, 0xfd3f,
+0xfe45, 0xfe46,
+}; /* END of CR_Pattern_Syntax */
+
+/* PROPERTY: 'Pattern_White_Space': Binary Property */
+static const OnigCodePoint
+CR_Pattern_White_Space[] = { 5,
+0x0009, 0x000d,
+0x0020, 0x0020,
+0x0085, 0x0085,
+0x200e, 0x200f,
+0x2028, 0x2029,
+}; /* END of CR_Pattern_White_Space */
+
+/* PROPERTY: 'Pau_Cin_Hau': Script */
+static const OnigCodePoint
+CR_Pau_Cin_Hau[] = { 1,
+0x11ac0, 0x11af8,
+}; /* END of CR_Pau_Cin_Hau */
+
/* PROPERTY: 'Pc': General Category */
static const OnigCodePoint
CR_Pc[] = { 6,
@@ -10134,6 +17622,19 @@ CR_Pf[] = { 10,
0x2e21, 0x2e21,
}; /* END of CR_Pf */
+/* PROPERTY: 'Phags_Pa': Script */
+static const OnigCodePoint
+CR_Phags_Pa[] = { 1,
+0xa840, 0xa877,
+}; /* END of CR_Phags_Pa */
+
+/* PROPERTY: 'Phoenician': Script */
+static const OnigCodePoint
+CR_Phoenician[] = { 2,
+0x10900, 0x1091b,
+0x1091f, 0x1091f,
+}; /* END of CR_Phoenician */
+
/* PROPERTY: 'Pi': General Category */
static const OnigCodePoint
CR_Pi[] = { 11,
@@ -10392,6 +17893,54 @@ CR_Ps[] = { 75,
0xff62, 0xff62,
}; /* END of CR_Ps */
+/* PROPERTY: 'Psalter_Pahlavi': Script */
+static const OnigCodePoint
+CR_Psalter_Pahlavi[] = { 3,
+0x10b80, 0x10b91,
+0x10b99, 0x10b9c,
+0x10ba9, 0x10baf,
+}; /* END of CR_Psalter_Pahlavi */
+
+/* PROPERTY: 'Quotation_Mark': Binary Property */
+static const OnigCodePoint
+CR_Quotation_Mark[] = { 13,
+0x0022, 0x0022,
+0x0027, 0x0027,
+0x00ab, 0x00ab,
+0x00bb, 0x00bb,
+0x2018, 0x201f,
+0x2039, 0x203a,
+0x2e42, 0x2e42,
+0x300c, 0x300f,
+0x301d, 0x301f,
+0xfe41, 0xfe44,
+0xff02, 0xff02,
+0xff07, 0xff07,
+0xff62, 0xff63,
+}; /* END of CR_Quotation_Mark */
+
+/* PROPERTY: 'Radical': Binary Property */
+static const OnigCodePoint
+CR_Radical[] = { 3,
+0x2e80, 0x2e99,
+0x2e9b, 0x2ef3,
+0x2f00, 0x2fd5,
+}; /* END of CR_Radical */
+
+/* PROPERTY: 'Rejang': Script */
+static const OnigCodePoint
+CR_Rejang[] = { 2,
+0xa930, 0xa953,
+0xa95f, 0xa95f,
+}; /* END of CR_Rejang */
+
+/* PROPERTY: 'Runic': Script */
+static const OnigCodePoint
+CR_Runic[] = { 2,
+0x16a0, 0x16ea,
+0x16ee, 0x16f8,
+}; /* END of CR_Runic */
+
/* PROPERTY: 'S': Major Category */
static const OnigCodePoint
CR_S[] = { 214,
@@ -10611,6 +18160,89 @@ CR_S[] = { 214,
0x1f9c0, 0x1f9c0,
}; /* END of CR_S */
+/* PROPERTY: 'STerm': Binary Property */
+static const OnigCodePoint
+CR_STerm[] = { 64,
+0x0021, 0x0021,
+0x002e, 0x002e,
+0x003f, 0x003f,
+0x0589, 0x0589,
+0x061f, 0x061f,
+0x06d4, 0x06d4,
+0x0700, 0x0702,
+0x07f9, 0x07f9,
+0x0964, 0x0965,
+0x104a, 0x104b,
+0x1362, 0x1362,
+0x1367, 0x1368,
+0x166e, 0x166e,
+0x1735, 0x1736,
+0x1803, 0x1803,
+0x1809, 0x1809,
+0x1944, 0x1945,
+0x1aa8, 0x1aab,
+0x1b5a, 0x1b5b,
+0x1b5e, 0x1b5f,
+0x1c3b, 0x1c3c,
+0x1c7e, 0x1c7f,
+0x203c, 0x203d,
+0x2047, 0x2049,
+0x2e2e, 0x2e2e,
+0x2e3c, 0x2e3c,
+0x3002, 0x3002,
+0xa4ff, 0xa4ff,
+0xa60e, 0xa60f,
+0xa6f3, 0xa6f3,
+0xa6f7, 0xa6f7,
+0xa876, 0xa877,
+0xa8ce, 0xa8cf,
+0xa92f, 0xa92f,
+0xa9c8, 0xa9c9,
+0xaa5d, 0xaa5f,
+0xaaf0, 0xaaf1,
+0xabeb, 0xabeb,
+0xfe52, 0xfe52,
+0xfe56, 0xfe57,
+0xff01, 0xff01,
+0xff0e, 0xff0e,
+0xff1f, 0xff1f,
+0xff61, 0xff61,
+0x10a56, 0x10a57,
+0x11047, 0x11048,
+0x110be, 0x110c1,
+0x11141, 0x11143,
+0x111c5, 0x111c6,
+0x111cd, 0x111cd,
+0x111de, 0x111df,
+0x11238, 0x11239,
+0x1123b, 0x1123c,
+0x112a9, 0x112a9,
+0x115c2, 0x115c3,
+0x115c9, 0x115d7,
+0x11641, 0x11642,
+0x1173c, 0x1173e,
+0x16a6e, 0x16a6f,
+0x16af5, 0x16af5,
+0x16b37, 0x16b38,
+0x16b44, 0x16b44,
+0x1bc9f, 0x1bc9f,
+0x1da88, 0x1da88,
+}; /* END of CR_STerm */
+
+/* PROPERTY: 'Samaritan': Script */
+static const OnigCodePoint
+CR_Samaritan[] = { 2,
+0x0800, 0x082d,
+0x0830, 0x083e,
+}; /* END of CR_Samaritan */
+
+/* PROPERTY: 'Saurashtra': Script */
+static const OnigCodePoint
+CR_Saurashtra[] = { 2,
+0xa880, 0xa8c4,
+0xa8ce, 0xa8d9,
+}; /* END of CR_Saurashtra */
+
/* PROPERTY: 'Sc': General Category */
static const OnigCodePoint
CR_Sc[] = { 17,
@@ -10633,6 +18265,52 @@ CR_Sc[] = { 17,
0xffe5, 0xffe6,
}; /* END of CR_Sc */
+/* PROPERTY: 'Sharada': Script */
+static const OnigCodePoint
+CR_Sharada[] = { 2,
+0x11180, 0x111cd,
+0x111d0, 0x111df,
+}; /* END of CR_Sharada */
+
+/* PROPERTY: 'Shavian': Script */
+static const OnigCodePoint
+CR_Shavian[] = { 1,
+0x10450, 0x1047f,
+}; /* END of CR_Shavian */
+
+/* PROPERTY: 'Siddham': Script */
+static const OnigCodePoint
+CR_Siddham[] = { 2,
+0x11580, 0x115b5,
+0x115b8, 0x115dd,
+}; /* END of CR_Siddham */
+
+/* PROPERTY: 'SignWriting': Script */
+static const OnigCodePoint
+CR_SignWriting[] = { 3,
+0x1d800, 0x1da8b,
+0x1da9b, 0x1da9f,
+0x1daa1, 0x1daaf,
+}; /* END of CR_SignWriting */
+
+/* PROPERTY: 'Sinhala': Script */
+static const OnigCodePoint
+CR_Sinhala[] = { 13,
+0x0d82, 0x0d83,
+0x0d85, 0x0d96,
+0x0d9a, 0x0db1,
+0x0db3, 0x0dbb,
+0x0dbd, 0x0dbd,
+0x0dc0, 0x0dc6,
+0x0dca, 0x0dca,
+0x0dcf, 0x0dd4,
+0x0dd6, 0x0dd6,
+0x0dd8, 0x0ddf,
+0x0de6, 0x0def,
+0x0df2, 0x0df4,
+0x111e1, 0x111f4,
+}; /* END of CR_Sinhala */
+
/* PROPERTY: 'Sk': General Category */
static const OnigCodePoint
CR_Sk[] = { 29,
@@ -10911,3318 +18589,120 @@ CR_So[] = { 170,
0x1f9c0, 0x1f9c0,
}; /* END of CR_So */
-/* PROPERTY: 'Z': Major Category */
+/* PROPERTY: 'Soft_Dotted': Binary Property */
static const OnigCodePoint
-CR_Z[] = { 8,
-0x0020, 0x0020,
-0x00a0, 0x00a0,
-0x1680, 0x1680,
-0x2000, 0x200a,
-0x2028, 0x2029,
-0x202f, 0x202f,
-0x205f, 0x205f,
-0x3000, 0x3000,
-}; /* END of CR_Z */
+CR_Soft_Dotted[] = { 31,
+0x0069, 0x006a,
+0x012f, 0x012f,
+0x0249, 0x0249,
+0x0268, 0x0268,
+0x029d, 0x029d,
+0x02b2, 0x02b2,
+0x03f3, 0x03f3,
+0x0456, 0x0456,
+0x0458, 0x0458,
+0x1d62, 0x1d62,
+0x1d96, 0x1d96,
+0x1da4, 0x1da4,
+0x1da8, 0x1da8,
+0x1e2d, 0x1e2d,
+0x1ecb, 0x1ecb,
+0x2071, 0x2071,
+0x2148, 0x2149,
+0x2c7c, 0x2c7c,
+0x1d422, 0x1d423,
+0x1d456, 0x1d457,
+0x1d48a, 0x1d48b,
+0x1d4be, 0x1d4bf,
+0x1d4f2, 0x1d4f3,
+0x1d526, 0x1d527,
+0x1d55a, 0x1d55b,
+0x1d58e, 0x1d58f,
+0x1d5c2, 0x1d5c3,
+0x1d5f6, 0x1d5f7,
+0x1d62a, 0x1d62b,
+0x1d65e, 0x1d65f,
+0x1d692, 0x1d693,
+}; /* END of CR_Soft_Dotted */
-/* PROPERTY: 'Zl': General Category */
+/* PROPERTY: 'Sora_Sompeng': Script */
static const OnigCodePoint
-CR_Zl[] = { 1,
-0x2028, 0x2028,
-}; /* END of CR_Zl */
+CR_Sora_Sompeng[] = { 2,
+0x110d0, 0x110e8,
+0x110f0, 0x110f9,
+}; /* END of CR_Sora_Sompeng */
-/* PROPERTY: 'Zp': General Category */
+/* PROPERTY: 'Sundanese': Script */
static const OnigCodePoint
-CR_Zp[] = { 1,
-0x2029, 0x2029,
-}; /* END of CR_Zp */
+CR_Sundanese[] = { 2,
+0x1b80, 0x1bbf,
+0x1cc0, 0x1cc7,
+}; /* END of CR_Sundanese */
-/* PROPERTY: 'Zs': General Category */
+/* PROPERTY: 'Syloti_Nagri': Script */
static const OnigCodePoint
-CR_Zs[] = { 7,
-0x0020, 0x0020,
-0x00a0, 0x00a0,
-0x1680, 0x1680,
-0x2000, 0x200a,
-0x202f, 0x202f,
-0x205f, 0x205f,
-0x3000, 0x3000,
-}; /* END of CR_Zs */
+CR_Syloti_Nagri[] = { 1,
+0xa800, 0xa82b,
+}; /* END of CR_Syloti_Nagri */
-/* PROPERTY: 'Math': Derived Property */
+/* PROPERTY: 'Syriac': Script */
static const OnigCodePoint
-CR_Math[] = { 138,
-0x002b, 0x002b,
-0x003c, 0x003e,
-0x005e, 0x005e,
-0x007c, 0x007c,
-0x007e, 0x007e,
-0x00ac, 0x00ac,
-0x00b1, 0x00b1,
-0x00d7, 0x00d7,
-0x00f7, 0x00f7,
-0x03d0, 0x03d2,
-0x03d5, 0x03d5,
-0x03f0, 0x03f1,
-0x03f4, 0x03f6,
-0x0606, 0x0608,
-0x2016, 0x2016,
-0x2032, 0x2034,
-0x2040, 0x2040,
-0x2044, 0x2044,
-0x2052, 0x2052,
-0x2061, 0x2064,
-0x207a, 0x207e,
-0x208a, 0x208e,
-0x20d0, 0x20dc,
-0x20e1, 0x20e1,
-0x20e5, 0x20e6,
-0x20eb, 0x20ef,
-0x2102, 0x2102,
-0x2107, 0x2107,
-0x210a, 0x2113,
-0x2115, 0x2115,
-0x2118, 0x211d,
-0x2124, 0x2124,
-0x2128, 0x2129,
-0x212c, 0x212d,
-0x212f, 0x2131,
-0x2133, 0x2138,
-0x213c, 0x2149,
-0x214b, 0x214b,
-0x2190, 0x21a7,
-0x21a9, 0x21ae,
-0x21b0, 0x21b1,
-0x21b6, 0x21b7,
-0x21bc, 0x21db,
-0x21dd, 0x21dd,
-0x21e4, 0x21e5,
-0x21f4, 0x22ff,
-0x2308, 0x230b,
-0x2320, 0x2321,
-0x237c, 0x237c,
-0x239b, 0x23b5,
-0x23b7, 0x23b7,
-0x23d0, 0x23d0,
-0x23dc, 0x23e2,
-0x25a0, 0x25a1,
-0x25ae, 0x25b7,
-0x25bc, 0x25c1,
-0x25c6, 0x25c7,
-0x25ca, 0x25cb,
-0x25cf, 0x25d3,
-0x25e2, 0x25e2,
-0x25e4, 0x25e4,
-0x25e7, 0x25ec,
-0x25f8, 0x25ff,
-0x2605, 0x2606,
-0x2640, 0x2640,
-0x2642, 0x2642,
-0x2660, 0x2663,
-0x266d, 0x266f,
-0x27c0, 0x27ff,
-0x2900, 0x2aff,
-0x2b30, 0x2b44,
-0x2b47, 0x2b4c,
-0xfb29, 0xfb29,
-0xfe61, 0xfe66,
-0xfe68, 0xfe68,
-0xff0b, 0xff0b,
-0xff1c, 0xff1e,
-0xff3c, 0xff3c,
-0xff3e, 0xff3e,
-0xff5c, 0xff5c,
-0xff5e, 0xff5e,
-0xffe2, 0xffe2,
-0xffe9, 0xffec,
-0x1d400, 0x1d454,
-0x1d456, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d51e, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d7cb,
-0x1d7ce, 0x1d7ff,
-0x1ee00, 0x1ee03,
-0x1ee05, 0x1ee1f,
-0x1ee21, 0x1ee22,
-0x1ee24, 0x1ee24,
-0x1ee27, 0x1ee27,
-0x1ee29, 0x1ee32,
-0x1ee34, 0x1ee37,
-0x1ee39, 0x1ee39,
-0x1ee3b, 0x1ee3b,
-0x1ee42, 0x1ee42,
-0x1ee47, 0x1ee47,
-0x1ee49, 0x1ee49,
-0x1ee4b, 0x1ee4b,
-0x1ee4d, 0x1ee4f,
-0x1ee51, 0x1ee52,
-0x1ee54, 0x1ee54,
-0x1ee57, 0x1ee57,
-0x1ee59, 0x1ee59,
-0x1ee5b, 0x1ee5b,
-0x1ee5d, 0x1ee5d,
-0x1ee5f, 0x1ee5f,
-0x1ee61, 0x1ee62,
-0x1ee64, 0x1ee64,
-0x1ee67, 0x1ee6a,
-0x1ee6c, 0x1ee72,
-0x1ee74, 0x1ee77,
-0x1ee79, 0x1ee7c,
-0x1ee7e, 0x1ee7e,
-0x1ee80, 0x1ee89,
-0x1ee8b, 0x1ee9b,
-0x1eea1, 0x1eea3,
-0x1eea5, 0x1eea9,
-0x1eeab, 0x1eebb,
-0x1eef0, 0x1eef1,
-}; /* END of CR_Math */
-
-/* PROPERTY: 'Alphabetic': Derived Property */
-#define CR_Alphabetic CR_Alpha
-
-/* PROPERTY: 'Lowercase': Derived Property */
-#define CR_Lowercase CR_Lower
-
-/* PROPERTY: 'Uppercase': Derived Property */
-#define CR_Uppercase CR_Upper
+CR_Syriac[] = { 3,
+0x0700, 0x070d,
+0x070f, 0x074a,
+0x074d, 0x074f,
+}; /* END of CR_Syriac */
-/* PROPERTY: 'Cased': Derived Property */
+/* PROPERTY: 'Tagalog': Script */
static const OnigCodePoint
-CR_Cased[] = { 131,
-0x0041, 0x005a,
-0x0061, 0x007a,
-0x00aa, 0x00aa,
-0x00b5, 0x00b5,
-0x00ba, 0x00ba,
-0x00c0, 0x00d6,
-0x00d8, 0x00f6,
-0x00f8, 0x01ba,
-0x01bc, 0x01bf,
-0x01c4, 0x0293,
-0x0295, 0x02b8,
-0x02c0, 0x02c1,
-0x02e0, 0x02e4,
-0x0345, 0x0345,
-0x0370, 0x0373,
-0x0376, 0x0377,
-0x037a, 0x037d,
-0x037f, 0x037f,
-0x0386, 0x0386,
-0x0388, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x03a1,
-0x03a3, 0x03f5,
-0x03f7, 0x0481,
-0x048a, 0x052f,
-0x0531, 0x0556,
-0x0561, 0x0587,
-0x10a0, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x13a0, 0x13f5,
-0x13f8, 0x13fd,
-0x1d00, 0x1dbf,
-0x1e00, 0x1f15,
-0x1f18, 0x1f1d,
-0x1f20, 0x1f45,
-0x1f48, 0x1f4d,
-0x1f50, 0x1f57,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f7d,
-0x1f80, 0x1fb4,
-0x1fb6, 0x1fbc,
-0x1fbe, 0x1fbe,
-0x1fc2, 0x1fc4,
-0x1fc6, 0x1fcc,
-0x1fd0, 0x1fd3,
-0x1fd6, 0x1fdb,
-0x1fe0, 0x1fec,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffc,
-0x2071, 0x2071,
-0x207f, 0x207f,
-0x2090, 0x209c,
-0x2102, 0x2102,
-0x2107, 0x2107,
-0x210a, 0x2113,
-0x2115, 0x2115,
-0x2119, 0x211d,
-0x2124, 0x2124,
-0x2126, 0x2126,
-0x2128, 0x2128,
-0x212a, 0x212d,
-0x212f, 0x2134,
-0x2139, 0x2139,
-0x213c, 0x213f,
-0x2145, 0x2149,
-0x214e, 0x214e,
-0x2160, 0x217f,
-0x2183, 0x2184,
-0x24b6, 0x24e9,
-0x2c00, 0x2c2e,
-0x2c30, 0x2c5e,
-0x2c60, 0x2ce4,
-0x2ceb, 0x2cee,
-0x2cf2, 0x2cf3,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-0xa640, 0xa66d,
-0xa680, 0xa69d,
-0xa722, 0xa787,
-0xa78b, 0xa78e,
-0xa790, 0xa7ad,
-0xa7b0, 0xa7b7,
-0xa7f8, 0xa7fa,
-0xab30, 0xab5a,
-0xab5c, 0xab65,
-0xab70, 0xabbf,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xff21, 0xff3a,
-0xff41, 0xff5a,
-0x10400, 0x1044f,
-0x10c80, 0x10cb2,
-0x10cc0, 0x10cf2,
-0x118a0, 0x118df,
-0x1d400, 0x1d454,
-0x1d456, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d51e, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d6c0,
-0x1d6c2, 0x1d6da,
-0x1d6dc, 0x1d6fa,
-0x1d6fc, 0x1d714,
-0x1d716, 0x1d734,
-0x1d736, 0x1d74e,
-0x1d750, 0x1d76e,
-0x1d770, 0x1d788,
-0x1d78a, 0x1d7a8,
-0x1d7aa, 0x1d7c2,
-0x1d7c4, 0x1d7cb,
-0x1f130, 0x1f149,
-0x1f150, 0x1f169,
-0x1f170, 0x1f189,
-}; /* END of CR_Cased */
+CR_Tagalog[] = { 2,
+0x1700, 0x170c,
+0x170e, 0x1714,
+}; /* END of CR_Tagalog */
-/* PROPERTY: 'Case_Ignorable': Derived Property */
+/* PROPERTY: 'Tagbanwa': Script */
static const OnigCodePoint
-CR_Case_Ignorable[] = { 346,
-0x0027, 0x0027,
-0x002e, 0x002e,
-0x003a, 0x003a,
-0x005e, 0x005e,
-0x0060, 0x0060,
-0x00a8, 0x00a8,
-0x00ad, 0x00ad,
-0x00af, 0x00af,
-0x00b4, 0x00b4,
-0x00b7, 0x00b8,
-0x02b0, 0x036f,
-0x0374, 0x0375,
-0x037a, 0x037a,
-0x0384, 0x0385,
-0x0387, 0x0387,
-0x0483, 0x0489,
-0x0559, 0x0559,
-0x0591, 0x05bd,
-0x05bf, 0x05bf,
-0x05c1, 0x05c2,
-0x05c4, 0x05c5,
-0x05c7, 0x05c7,
-0x05f4, 0x05f4,
-0x0600, 0x0605,
-0x0610, 0x061a,
-0x061c, 0x061c,
-0x0640, 0x0640,
-0x064b, 0x065f,
-0x0670, 0x0670,
-0x06d6, 0x06dd,
-0x06df, 0x06e8,
-0x06ea, 0x06ed,
-0x070f, 0x070f,
-0x0711, 0x0711,
-0x0730, 0x074a,
-0x07a6, 0x07b0,
-0x07eb, 0x07f5,
-0x07fa, 0x07fa,
-0x0816, 0x082d,
-0x0859, 0x085b,
-0x08e3, 0x0902,
-0x093a, 0x093a,
-0x093c, 0x093c,
-0x0941, 0x0948,
-0x094d, 0x094d,
-0x0951, 0x0957,
-0x0962, 0x0963,
-0x0971, 0x0971,
-0x0981, 0x0981,
-0x09bc, 0x09bc,
-0x09c1, 0x09c4,
-0x09cd, 0x09cd,
-0x09e2, 0x09e3,
-0x0a01, 0x0a02,
-0x0a3c, 0x0a3c,
-0x0a41, 0x0a42,
-0x0a47, 0x0a48,
-0x0a4b, 0x0a4d,
-0x0a51, 0x0a51,
-0x0a70, 0x0a71,
-0x0a75, 0x0a75,
-0x0a81, 0x0a82,
-0x0abc, 0x0abc,
-0x0ac1, 0x0ac5,
-0x0ac7, 0x0ac8,
-0x0acd, 0x0acd,
-0x0ae2, 0x0ae3,
-0x0b01, 0x0b01,
-0x0b3c, 0x0b3c,
-0x0b3f, 0x0b3f,
-0x0b41, 0x0b44,
-0x0b4d, 0x0b4d,
-0x0b56, 0x0b56,
-0x0b62, 0x0b63,
-0x0b82, 0x0b82,
-0x0bc0, 0x0bc0,
-0x0bcd, 0x0bcd,
-0x0c00, 0x0c00,
-0x0c3e, 0x0c40,
-0x0c46, 0x0c48,
-0x0c4a, 0x0c4d,
-0x0c55, 0x0c56,
-0x0c62, 0x0c63,
-0x0c81, 0x0c81,
-0x0cbc, 0x0cbc,
-0x0cbf, 0x0cbf,
-0x0cc6, 0x0cc6,
-0x0ccc, 0x0ccd,
-0x0ce2, 0x0ce3,
-0x0d01, 0x0d01,
-0x0d41, 0x0d44,
-0x0d4d, 0x0d4d,
-0x0d62, 0x0d63,
-0x0dca, 0x0dca,
-0x0dd2, 0x0dd4,
-0x0dd6, 0x0dd6,
-0x0e31, 0x0e31,
-0x0e34, 0x0e3a,
-0x0e46, 0x0e4e,
-0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
-0x0ec6, 0x0ec6,
-0x0ec8, 0x0ecd,
-0x0f18, 0x0f19,
-0x0f35, 0x0f35,
-0x0f37, 0x0f37,
-0x0f39, 0x0f39,
-0x0f71, 0x0f7e,
-0x0f80, 0x0f84,
-0x0f86, 0x0f87,
-0x0f8d, 0x0f97,
-0x0f99, 0x0fbc,
-0x0fc6, 0x0fc6,
-0x102d, 0x1030,
-0x1032, 0x1037,
-0x1039, 0x103a,
-0x103d, 0x103e,
-0x1058, 0x1059,
-0x105e, 0x1060,
-0x1071, 0x1074,
-0x1082, 0x1082,
-0x1085, 0x1086,
-0x108d, 0x108d,
-0x109d, 0x109d,
-0x10fc, 0x10fc,
-0x135d, 0x135f,
-0x1712, 0x1714,
-0x1732, 0x1734,
-0x1752, 0x1753,
+CR_Tagbanwa[] = { 3,
+0x1760, 0x176c,
+0x176e, 0x1770,
0x1772, 0x1773,
-0x17b4, 0x17b5,
-0x17b7, 0x17bd,
-0x17c6, 0x17c6,
-0x17c9, 0x17d3,
-0x17d7, 0x17d7,
-0x17dd, 0x17dd,
-0x180b, 0x180e,
-0x1843, 0x1843,
-0x18a9, 0x18a9,
-0x1920, 0x1922,
-0x1927, 0x1928,
-0x1932, 0x1932,
-0x1939, 0x193b,
-0x1a17, 0x1a18,
-0x1a1b, 0x1a1b,
-0x1a56, 0x1a56,
-0x1a58, 0x1a5e,
-0x1a60, 0x1a60,
-0x1a62, 0x1a62,
-0x1a65, 0x1a6c,
-0x1a73, 0x1a7c,
-0x1a7f, 0x1a7f,
-0x1aa7, 0x1aa7,
-0x1ab0, 0x1abe,
-0x1b00, 0x1b03,
-0x1b34, 0x1b34,
-0x1b36, 0x1b3a,
-0x1b3c, 0x1b3c,
-0x1b42, 0x1b42,
-0x1b6b, 0x1b73,
-0x1b80, 0x1b81,
-0x1ba2, 0x1ba5,
-0x1ba8, 0x1ba9,
-0x1bab, 0x1bad,
-0x1be6, 0x1be6,
-0x1be8, 0x1be9,
-0x1bed, 0x1bed,
-0x1bef, 0x1bf1,
-0x1c2c, 0x1c33,
-0x1c36, 0x1c37,
-0x1c78, 0x1c7d,
-0x1cd0, 0x1cd2,
-0x1cd4, 0x1ce0,
-0x1ce2, 0x1ce8,
-0x1ced, 0x1ced,
-0x1cf4, 0x1cf4,
-0x1cf8, 0x1cf9,
-0x1d2c, 0x1d6a,
-0x1d78, 0x1d78,
-0x1d9b, 0x1df5,
-0x1dfc, 0x1dff,
-0x1fbd, 0x1fbd,
-0x1fbf, 0x1fc1,
-0x1fcd, 0x1fcf,
-0x1fdd, 0x1fdf,
-0x1fed, 0x1fef,
-0x1ffd, 0x1ffe,
-0x200b, 0x200f,
-0x2018, 0x2019,
-0x2024, 0x2024,
-0x2027, 0x2027,
-0x202a, 0x202e,
-0x2060, 0x2064,
-0x2066, 0x206f,
-0x2071, 0x2071,
-0x207f, 0x207f,
-0x2090, 0x209c,
-0x20d0, 0x20f0,
-0x2c7c, 0x2c7d,
-0x2cef, 0x2cf1,
-0x2d6f, 0x2d6f,
-0x2d7f, 0x2d7f,
-0x2de0, 0x2dff,
-0x2e2f, 0x2e2f,
-0x3005, 0x3005,
-0x302a, 0x302d,
-0x3031, 0x3035,
-0x303b, 0x303b,
-0x3099, 0x309e,
-0x30fc, 0x30fe,
-0xa015, 0xa015,
-0xa4f8, 0xa4fd,
-0xa60c, 0xa60c,
-0xa66f, 0xa672,
-0xa674, 0xa67d,
-0xa67f, 0xa67f,
-0xa69c, 0xa69f,
-0xa6f0, 0xa6f1,
-0xa700, 0xa721,
-0xa770, 0xa770,
-0xa788, 0xa78a,
-0xa7f8, 0xa7f9,
-0xa802, 0xa802,
-0xa806, 0xa806,
-0xa80b, 0xa80b,
-0xa825, 0xa826,
-0xa8c4, 0xa8c4,
-0xa8e0, 0xa8f1,
-0xa926, 0xa92d,
-0xa947, 0xa951,
-0xa980, 0xa982,
-0xa9b3, 0xa9b3,
-0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
-0xa9cf, 0xa9cf,
-0xa9e5, 0xa9e6,
-0xaa29, 0xaa2e,
-0xaa31, 0xaa32,
-0xaa35, 0xaa36,
-0xaa43, 0xaa43,
-0xaa4c, 0xaa4c,
-0xaa70, 0xaa70,
-0xaa7c, 0xaa7c,
-0xaab0, 0xaab0,
-0xaab2, 0xaab4,
-0xaab7, 0xaab8,
-0xaabe, 0xaabf,
-0xaac1, 0xaac1,
-0xaadd, 0xaadd,
-0xaaec, 0xaaed,
-0xaaf3, 0xaaf4,
-0xaaf6, 0xaaf6,
-0xab5b, 0xab5f,
-0xabe5, 0xabe5,
-0xabe8, 0xabe8,
-0xabed, 0xabed,
-0xfb1e, 0xfb1e,
-0xfbb2, 0xfbc1,
-0xfe00, 0xfe0f,
-0xfe13, 0xfe13,
-0xfe20, 0xfe2f,
-0xfe52, 0xfe52,
-0xfe55, 0xfe55,
-0xfeff, 0xfeff,
-0xff07, 0xff07,
-0xff0e, 0xff0e,
-0xff1a, 0xff1a,
-0xff3e, 0xff3e,
-0xff40, 0xff40,
-0xff70, 0xff70,
-0xff9e, 0xff9f,
-0xffe3, 0xffe3,
-0xfff9, 0xfffb,
-0x101fd, 0x101fd,
-0x102e0, 0x102e0,
-0x10376, 0x1037a,
-0x10a01, 0x10a03,
-0x10a05, 0x10a06,
-0x10a0c, 0x10a0f,
-0x10a38, 0x10a3a,
-0x10a3f, 0x10a3f,
-0x10ae5, 0x10ae6,
-0x11001, 0x11001,
-0x11038, 0x11046,
-0x1107f, 0x11081,
-0x110b3, 0x110b6,
-0x110b9, 0x110ba,
-0x110bd, 0x110bd,
-0x11100, 0x11102,
-0x11127, 0x1112b,
-0x1112d, 0x11134,
-0x11173, 0x11173,
-0x11180, 0x11181,
-0x111b6, 0x111be,
-0x111ca, 0x111cc,
-0x1122f, 0x11231,
-0x11234, 0x11234,
-0x11236, 0x11237,
-0x112df, 0x112df,
-0x112e3, 0x112ea,
-0x11300, 0x11301,
-0x1133c, 0x1133c,
-0x11340, 0x11340,
-0x11366, 0x1136c,
-0x11370, 0x11374,
-0x114b3, 0x114b8,
-0x114ba, 0x114ba,
-0x114bf, 0x114c0,
-0x114c2, 0x114c3,
-0x115b2, 0x115b5,
-0x115bc, 0x115bd,
-0x115bf, 0x115c0,
-0x115dc, 0x115dd,
-0x11633, 0x1163a,
-0x1163d, 0x1163d,
-0x1163f, 0x11640,
-0x116ab, 0x116ab,
-0x116ad, 0x116ad,
-0x116b0, 0x116b5,
-0x116b7, 0x116b7,
-0x1171d, 0x1171f,
-0x11722, 0x11725,
-0x11727, 0x1172b,
-0x16af0, 0x16af4,
-0x16b30, 0x16b36,
-0x16b40, 0x16b43,
-0x16f8f, 0x16f9f,
-0x1bc9d, 0x1bc9e,
-0x1bca0, 0x1bca3,
-0x1d167, 0x1d169,
-0x1d173, 0x1d182,
-0x1d185, 0x1d18b,
-0x1d1aa, 0x1d1ad,
-0x1d242, 0x1d244,
-0x1da00, 0x1da36,
-0x1da3b, 0x1da6c,
-0x1da75, 0x1da75,
-0x1da84, 0x1da84,
-0x1da9b, 0x1da9f,
-0x1daa1, 0x1daaf,
-0x1e8d0, 0x1e8d6,
-0x1f3fb, 0x1f3ff,
-0xe0001, 0xe0001,
-0xe0020, 0xe007f,
-0xe0100, 0xe01ef,
-}; /* END of CR_Case_Ignorable */
-
-/* PROPERTY: 'Changes_When_Lowercased': Derived Property */
-static const OnigCodePoint
-CR_Changes_When_Lowercased[] = { 588,
-0x0041, 0x005a,
-0x00c0, 0x00d6,
-0x00d8, 0x00de,
-0x0100, 0x0100,
-0x0102, 0x0102,
-0x0104, 0x0104,
-0x0106, 0x0106,
-0x0108, 0x0108,
-0x010a, 0x010a,
-0x010c, 0x010c,
-0x010e, 0x010e,
-0x0110, 0x0110,
-0x0112, 0x0112,
-0x0114, 0x0114,
-0x0116, 0x0116,
-0x0118, 0x0118,
-0x011a, 0x011a,
-0x011c, 0x011c,
-0x011e, 0x011e,
-0x0120, 0x0120,
-0x0122, 0x0122,
-0x0124, 0x0124,
-0x0126, 0x0126,
-0x0128, 0x0128,
-0x012a, 0x012a,
-0x012c, 0x012c,
-0x012e, 0x012e,
-0x0130, 0x0130,
-0x0132, 0x0132,
-0x0134, 0x0134,
-0x0136, 0x0136,
-0x0139, 0x0139,
-0x013b, 0x013b,
-0x013d, 0x013d,
-0x013f, 0x013f,
-0x0141, 0x0141,
-0x0143, 0x0143,
-0x0145, 0x0145,
-0x0147, 0x0147,
-0x014a, 0x014a,
-0x014c, 0x014c,
-0x014e, 0x014e,
-0x0150, 0x0150,
-0x0152, 0x0152,
-0x0154, 0x0154,
-0x0156, 0x0156,
-0x0158, 0x0158,
-0x015a, 0x015a,
-0x015c, 0x015c,
-0x015e, 0x015e,
-0x0160, 0x0160,
-0x0162, 0x0162,
-0x0164, 0x0164,
-0x0166, 0x0166,
-0x0168, 0x0168,
-0x016a, 0x016a,
-0x016c, 0x016c,
-0x016e, 0x016e,
-0x0170, 0x0170,
-0x0172, 0x0172,
-0x0174, 0x0174,
-0x0176, 0x0176,
-0x0178, 0x0179,
-0x017b, 0x017b,
-0x017d, 0x017d,
-0x0181, 0x0182,
-0x0184, 0x0184,
-0x0186, 0x0187,
-0x0189, 0x018b,
-0x018e, 0x0191,
-0x0193, 0x0194,
-0x0196, 0x0198,
-0x019c, 0x019d,
-0x019f, 0x01a0,
-0x01a2, 0x01a2,
-0x01a4, 0x01a4,
-0x01a6, 0x01a7,
-0x01a9, 0x01a9,
-0x01ac, 0x01ac,
-0x01ae, 0x01af,
-0x01b1, 0x01b3,
-0x01b5, 0x01b5,
-0x01b7, 0x01b8,
-0x01bc, 0x01bc,
-0x01c4, 0x01c5,
-0x01c7, 0x01c8,
-0x01ca, 0x01cb,
-0x01cd, 0x01cd,
-0x01cf, 0x01cf,
-0x01d1, 0x01d1,
-0x01d3, 0x01d3,
-0x01d5, 0x01d5,
-0x01d7, 0x01d7,
-0x01d9, 0x01d9,
-0x01db, 0x01db,
-0x01de, 0x01de,
-0x01e0, 0x01e0,
-0x01e2, 0x01e2,
-0x01e4, 0x01e4,
-0x01e6, 0x01e6,
-0x01e8, 0x01e8,
-0x01ea, 0x01ea,
-0x01ec, 0x01ec,
-0x01ee, 0x01ee,
-0x01f1, 0x01f2,
-0x01f4, 0x01f4,
-0x01f6, 0x01f8,
-0x01fa, 0x01fa,
-0x01fc, 0x01fc,
-0x01fe, 0x01fe,
-0x0200, 0x0200,
-0x0202, 0x0202,
-0x0204, 0x0204,
-0x0206, 0x0206,
-0x0208, 0x0208,
-0x020a, 0x020a,
-0x020c, 0x020c,
-0x020e, 0x020e,
-0x0210, 0x0210,
-0x0212, 0x0212,
-0x0214, 0x0214,
-0x0216, 0x0216,
-0x0218, 0x0218,
-0x021a, 0x021a,
-0x021c, 0x021c,
-0x021e, 0x021e,
-0x0220, 0x0220,
-0x0222, 0x0222,
-0x0224, 0x0224,
-0x0226, 0x0226,
-0x0228, 0x0228,
-0x022a, 0x022a,
-0x022c, 0x022c,
-0x022e, 0x022e,
-0x0230, 0x0230,
-0x0232, 0x0232,
-0x023a, 0x023b,
-0x023d, 0x023e,
-0x0241, 0x0241,
-0x0243, 0x0246,
-0x0248, 0x0248,
-0x024a, 0x024a,
-0x024c, 0x024c,
-0x024e, 0x024e,
-0x0370, 0x0370,
-0x0372, 0x0372,
-0x0376, 0x0376,
-0x037f, 0x037f,
-0x0386, 0x0386,
-0x0388, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x038f,
-0x0391, 0x03a1,
-0x03a3, 0x03ab,
-0x03cf, 0x03cf,
-0x03d8, 0x03d8,
-0x03da, 0x03da,
-0x03dc, 0x03dc,
-0x03de, 0x03de,
-0x03e0, 0x03e0,
-0x03e2, 0x03e2,
-0x03e4, 0x03e4,
-0x03e6, 0x03e6,
-0x03e8, 0x03e8,
-0x03ea, 0x03ea,
-0x03ec, 0x03ec,
-0x03ee, 0x03ee,
-0x03f4, 0x03f4,
-0x03f7, 0x03f7,
-0x03f9, 0x03fa,
-0x03fd, 0x042f,
-0x0460, 0x0460,
-0x0462, 0x0462,
-0x0464, 0x0464,
-0x0466, 0x0466,
-0x0468, 0x0468,
-0x046a, 0x046a,
-0x046c, 0x046c,
-0x046e, 0x046e,
-0x0470, 0x0470,
-0x0472, 0x0472,
-0x0474, 0x0474,
-0x0476, 0x0476,
-0x0478, 0x0478,
-0x047a, 0x047a,
-0x047c, 0x047c,
-0x047e, 0x047e,
-0x0480, 0x0480,
-0x048a, 0x048a,
-0x048c, 0x048c,
-0x048e, 0x048e,
-0x0490, 0x0490,
-0x0492, 0x0492,
-0x0494, 0x0494,
-0x0496, 0x0496,
-0x0498, 0x0498,
-0x049a, 0x049a,
-0x049c, 0x049c,
-0x049e, 0x049e,
-0x04a0, 0x04a0,
-0x04a2, 0x04a2,
-0x04a4, 0x04a4,
-0x04a6, 0x04a6,
-0x04a8, 0x04a8,
-0x04aa, 0x04aa,
-0x04ac, 0x04ac,
-0x04ae, 0x04ae,
-0x04b0, 0x04b0,
-0x04b2, 0x04b2,
-0x04b4, 0x04b4,
-0x04b6, 0x04b6,
-0x04b8, 0x04b8,
-0x04ba, 0x04ba,
-0x04bc, 0x04bc,
-0x04be, 0x04be,
-0x04c0, 0x04c1,
-0x04c3, 0x04c3,
-0x04c5, 0x04c5,
-0x04c7, 0x04c7,
-0x04c9, 0x04c9,
-0x04cb, 0x04cb,
-0x04cd, 0x04cd,
-0x04d0, 0x04d0,
-0x04d2, 0x04d2,
-0x04d4, 0x04d4,
-0x04d6, 0x04d6,
-0x04d8, 0x04d8,
-0x04da, 0x04da,
-0x04dc, 0x04dc,
-0x04de, 0x04de,
-0x04e0, 0x04e0,
-0x04e2, 0x04e2,
-0x04e4, 0x04e4,
-0x04e6, 0x04e6,
-0x04e8, 0x04e8,
-0x04ea, 0x04ea,
-0x04ec, 0x04ec,
-0x04ee, 0x04ee,
-0x04f0, 0x04f0,
-0x04f2, 0x04f2,
-0x04f4, 0x04f4,
-0x04f6, 0x04f6,
-0x04f8, 0x04f8,
-0x04fa, 0x04fa,
-0x04fc, 0x04fc,
-0x04fe, 0x04fe,
-0x0500, 0x0500,
-0x0502, 0x0502,
-0x0504, 0x0504,
-0x0506, 0x0506,
-0x0508, 0x0508,
-0x050a, 0x050a,
-0x050c, 0x050c,
-0x050e, 0x050e,
-0x0510, 0x0510,
-0x0512, 0x0512,
-0x0514, 0x0514,
-0x0516, 0x0516,
-0x0518, 0x0518,
-0x051a, 0x051a,
-0x051c, 0x051c,
-0x051e, 0x051e,
-0x0520, 0x0520,
-0x0522, 0x0522,
-0x0524, 0x0524,
-0x0526, 0x0526,
-0x0528, 0x0528,
-0x052a, 0x052a,
-0x052c, 0x052c,
-0x052e, 0x052e,
-0x0531, 0x0556,
-0x10a0, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x13a0, 0x13f5,
-0x1e00, 0x1e00,
-0x1e02, 0x1e02,
-0x1e04, 0x1e04,
-0x1e06, 0x1e06,
-0x1e08, 0x1e08,
-0x1e0a, 0x1e0a,
-0x1e0c, 0x1e0c,
-0x1e0e, 0x1e0e,
-0x1e10, 0x1e10,
-0x1e12, 0x1e12,
-0x1e14, 0x1e14,
-0x1e16, 0x1e16,
-0x1e18, 0x1e18,
-0x1e1a, 0x1e1a,
-0x1e1c, 0x1e1c,
-0x1e1e, 0x1e1e,
-0x1e20, 0x1e20,
-0x1e22, 0x1e22,
-0x1e24, 0x1e24,
-0x1e26, 0x1e26,
-0x1e28, 0x1e28,
-0x1e2a, 0x1e2a,
-0x1e2c, 0x1e2c,
-0x1e2e, 0x1e2e,
-0x1e30, 0x1e30,
-0x1e32, 0x1e32,
-0x1e34, 0x1e34,
-0x1e36, 0x1e36,
-0x1e38, 0x1e38,
-0x1e3a, 0x1e3a,
-0x1e3c, 0x1e3c,
-0x1e3e, 0x1e3e,
-0x1e40, 0x1e40,
-0x1e42, 0x1e42,
-0x1e44, 0x1e44,
-0x1e46, 0x1e46,
-0x1e48, 0x1e48,
-0x1e4a, 0x1e4a,
-0x1e4c, 0x1e4c,
-0x1e4e, 0x1e4e,
-0x1e50, 0x1e50,
-0x1e52, 0x1e52,
-0x1e54, 0x1e54,
-0x1e56, 0x1e56,
-0x1e58, 0x1e58,
-0x1e5a, 0x1e5a,
-0x1e5c, 0x1e5c,
-0x1e5e, 0x1e5e,
-0x1e60, 0x1e60,
-0x1e62, 0x1e62,
-0x1e64, 0x1e64,
-0x1e66, 0x1e66,
-0x1e68, 0x1e68,
-0x1e6a, 0x1e6a,
-0x1e6c, 0x1e6c,
-0x1e6e, 0x1e6e,
-0x1e70, 0x1e70,
-0x1e72, 0x1e72,
-0x1e74, 0x1e74,
-0x1e76, 0x1e76,
-0x1e78, 0x1e78,
-0x1e7a, 0x1e7a,
-0x1e7c, 0x1e7c,
-0x1e7e, 0x1e7e,
-0x1e80, 0x1e80,
-0x1e82, 0x1e82,
-0x1e84, 0x1e84,
-0x1e86, 0x1e86,
-0x1e88, 0x1e88,
-0x1e8a, 0x1e8a,
-0x1e8c, 0x1e8c,
-0x1e8e, 0x1e8e,
-0x1e90, 0x1e90,
-0x1e92, 0x1e92,
-0x1e94, 0x1e94,
-0x1e9e, 0x1e9e,
-0x1ea0, 0x1ea0,
-0x1ea2, 0x1ea2,
-0x1ea4, 0x1ea4,
-0x1ea6, 0x1ea6,
-0x1ea8, 0x1ea8,
-0x1eaa, 0x1eaa,
-0x1eac, 0x1eac,
-0x1eae, 0x1eae,
-0x1eb0, 0x1eb0,
-0x1eb2, 0x1eb2,
-0x1eb4, 0x1eb4,
-0x1eb6, 0x1eb6,
-0x1eb8, 0x1eb8,
-0x1eba, 0x1eba,
-0x1ebc, 0x1ebc,
-0x1ebe, 0x1ebe,
-0x1ec0, 0x1ec0,
-0x1ec2, 0x1ec2,
-0x1ec4, 0x1ec4,
-0x1ec6, 0x1ec6,
-0x1ec8, 0x1ec8,
-0x1eca, 0x1eca,
-0x1ecc, 0x1ecc,
-0x1ece, 0x1ece,
-0x1ed0, 0x1ed0,
-0x1ed2, 0x1ed2,
-0x1ed4, 0x1ed4,
-0x1ed6, 0x1ed6,
-0x1ed8, 0x1ed8,
-0x1eda, 0x1eda,
-0x1edc, 0x1edc,
-0x1ede, 0x1ede,
-0x1ee0, 0x1ee0,
-0x1ee2, 0x1ee2,
-0x1ee4, 0x1ee4,
-0x1ee6, 0x1ee6,
-0x1ee8, 0x1ee8,
-0x1eea, 0x1eea,
-0x1eec, 0x1eec,
-0x1eee, 0x1eee,
-0x1ef0, 0x1ef0,
-0x1ef2, 0x1ef2,
-0x1ef4, 0x1ef4,
-0x1ef6, 0x1ef6,
-0x1ef8, 0x1ef8,
-0x1efa, 0x1efa,
-0x1efc, 0x1efc,
-0x1efe, 0x1efe,
-0x1f08, 0x1f0f,
-0x1f18, 0x1f1d,
-0x1f28, 0x1f2f,
-0x1f38, 0x1f3f,
-0x1f48, 0x1f4d,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f5f,
-0x1f68, 0x1f6f,
-0x1f88, 0x1f8f,
-0x1f98, 0x1f9f,
-0x1fa8, 0x1faf,
-0x1fb8, 0x1fbc,
-0x1fc8, 0x1fcc,
-0x1fd8, 0x1fdb,
-0x1fe8, 0x1fec,
-0x1ff8, 0x1ffc,
-0x2126, 0x2126,
-0x212a, 0x212b,
-0x2132, 0x2132,
-0x2160, 0x216f,
-0x2183, 0x2183,
-0x24b6, 0x24cf,
-0x2c00, 0x2c2e,
-0x2c60, 0x2c60,
-0x2c62, 0x2c64,
-0x2c67, 0x2c67,
-0x2c69, 0x2c69,
-0x2c6b, 0x2c6b,
-0x2c6d, 0x2c70,
-0x2c72, 0x2c72,
-0x2c75, 0x2c75,
-0x2c7e, 0x2c80,
-0x2c82, 0x2c82,
-0x2c84, 0x2c84,
-0x2c86, 0x2c86,
-0x2c88, 0x2c88,
-0x2c8a, 0x2c8a,
-0x2c8c, 0x2c8c,
-0x2c8e, 0x2c8e,
-0x2c90, 0x2c90,
-0x2c92, 0x2c92,
-0x2c94, 0x2c94,
-0x2c96, 0x2c96,
-0x2c98, 0x2c98,
-0x2c9a, 0x2c9a,
-0x2c9c, 0x2c9c,
-0x2c9e, 0x2c9e,
-0x2ca0, 0x2ca0,
-0x2ca2, 0x2ca2,
-0x2ca4, 0x2ca4,
-0x2ca6, 0x2ca6,
-0x2ca8, 0x2ca8,
-0x2caa, 0x2caa,
-0x2cac, 0x2cac,
-0x2cae, 0x2cae,
-0x2cb0, 0x2cb0,
-0x2cb2, 0x2cb2,
-0x2cb4, 0x2cb4,
-0x2cb6, 0x2cb6,
-0x2cb8, 0x2cb8,
-0x2cba, 0x2cba,
-0x2cbc, 0x2cbc,
-0x2cbe, 0x2cbe,
-0x2cc0, 0x2cc0,
-0x2cc2, 0x2cc2,
-0x2cc4, 0x2cc4,
-0x2cc6, 0x2cc6,
-0x2cc8, 0x2cc8,
-0x2cca, 0x2cca,
-0x2ccc, 0x2ccc,
-0x2cce, 0x2cce,
-0x2cd0, 0x2cd0,
-0x2cd2, 0x2cd2,
-0x2cd4, 0x2cd4,
-0x2cd6, 0x2cd6,
-0x2cd8, 0x2cd8,
-0x2cda, 0x2cda,
-0x2cdc, 0x2cdc,
-0x2cde, 0x2cde,
-0x2ce0, 0x2ce0,
-0x2ce2, 0x2ce2,
-0x2ceb, 0x2ceb,
-0x2ced, 0x2ced,
-0x2cf2, 0x2cf2,
-0xa640, 0xa640,
-0xa642, 0xa642,
-0xa644, 0xa644,
-0xa646, 0xa646,
-0xa648, 0xa648,
-0xa64a, 0xa64a,
-0xa64c, 0xa64c,
-0xa64e, 0xa64e,
-0xa650, 0xa650,
-0xa652, 0xa652,
-0xa654, 0xa654,
-0xa656, 0xa656,
-0xa658, 0xa658,
-0xa65a, 0xa65a,
-0xa65c, 0xa65c,
-0xa65e, 0xa65e,
-0xa660, 0xa660,
-0xa662, 0xa662,
-0xa664, 0xa664,
-0xa666, 0xa666,
-0xa668, 0xa668,
-0xa66a, 0xa66a,
-0xa66c, 0xa66c,
-0xa680, 0xa680,
-0xa682, 0xa682,
-0xa684, 0xa684,
-0xa686, 0xa686,
-0xa688, 0xa688,
-0xa68a, 0xa68a,
-0xa68c, 0xa68c,
-0xa68e, 0xa68e,
-0xa690, 0xa690,
-0xa692, 0xa692,
-0xa694, 0xa694,
-0xa696, 0xa696,
-0xa698, 0xa698,
-0xa69a, 0xa69a,
-0xa722, 0xa722,
-0xa724, 0xa724,
-0xa726, 0xa726,
-0xa728, 0xa728,
-0xa72a, 0xa72a,
-0xa72c, 0xa72c,
-0xa72e, 0xa72e,
-0xa732, 0xa732,
-0xa734, 0xa734,
-0xa736, 0xa736,
-0xa738, 0xa738,
-0xa73a, 0xa73a,
-0xa73c, 0xa73c,
-0xa73e, 0xa73e,
-0xa740, 0xa740,
-0xa742, 0xa742,
-0xa744, 0xa744,
-0xa746, 0xa746,
-0xa748, 0xa748,
-0xa74a, 0xa74a,
-0xa74c, 0xa74c,
-0xa74e, 0xa74e,
-0xa750, 0xa750,
-0xa752, 0xa752,
-0xa754, 0xa754,
-0xa756, 0xa756,
-0xa758, 0xa758,
-0xa75a, 0xa75a,
-0xa75c, 0xa75c,
-0xa75e, 0xa75e,
-0xa760, 0xa760,
-0xa762, 0xa762,
-0xa764, 0xa764,
-0xa766, 0xa766,
-0xa768, 0xa768,
-0xa76a, 0xa76a,
-0xa76c, 0xa76c,
-0xa76e, 0xa76e,
-0xa779, 0xa779,
-0xa77b, 0xa77b,
-0xa77d, 0xa77e,
-0xa780, 0xa780,
-0xa782, 0xa782,
-0xa784, 0xa784,
-0xa786, 0xa786,
-0xa78b, 0xa78b,
-0xa78d, 0xa78d,
-0xa790, 0xa790,
-0xa792, 0xa792,
-0xa796, 0xa796,
-0xa798, 0xa798,
-0xa79a, 0xa79a,
-0xa79c, 0xa79c,
-0xa79e, 0xa79e,
-0xa7a0, 0xa7a0,
-0xa7a2, 0xa7a2,
-0xa7a4, 0xa7a4,
-0xa7a6, 0xa7a6,
-0xa7a8, 0xa7a8,
-0xa7aa, 0xa7ad,
-0xa7b0, 0xa7b4,
-0xa7b6, 0xa7b6,
-0xff21, 0xff3a,
-0x10400, 0x10427,
-0x10c80, 0x10cb2,
-0x118a0, 0x118bf,
-}; /* END of CR_Changes_When_Lowercased */
+}; /* END of CR_Tagbanwa */
-/* PROPERTY: 'Changes_When_Uppercased': Derived Property */
+/* PROPERTY: 'Tai_Le': Script */
static const OnigCodePoint
-CR_Changes_When_Uppercased[] = { 605,
-0x0061, 0x007a,
-0x00b5, 0x00b5,
-0x00df, 0x00f6,
-0x00f8, 0x00ff,
-0x0101, 0x0101,
-0x0103, 0x0103,
-0x0105, 0x0105,
-0x0107, 0x0107,
-0x0109, 0x0109,
-0x010b, 0x010b,
-0x010d, 0x010d,
-0x010f, 0x010f,
-0x0111, 0x0111,
-0x0113, 0x0113,
-0x0115, 0x0115,
-0x0117, 0x0117,
-0x0119, 0x0119,
-0x011b, 0x011b,
-0x011d, 0x011d,
-0x011f, 0x011f,
-0x0121, 0x0121,
-0x0123, 0x0123,
-0x0125, 0x0125,
-0x0127, 0x0127,
-0x0129, 0x0129,
-0x012b, 0x012b,
-0x012d, 0x012d,
-0x012f, 0x012f,
-0x0131, 0x0131,
-0x0133, 0x0133,
-0x0135, 0x0135,
-0x0137, 0x0137,
-0x013a, 0x013a,
-0x013c, 0x013c,
-0x013e, 0x013e,
-0x0140, 0x0140,
-0x0142, 0x0142,
-0x0144, 0x0144,
-0x0146, 0x0146,
-0x0148, 0x0149,
-0x014b, 0x014b,
-0x014d, 0x014d,
-0x014f, 0x014f,
-0x0151, 0x0151,
-0x0153, 0x0153,
-0x0155, 0x0155,
-0x0157, 0x0157,
-0x0159, 0x0159,
-0x015b, 0x015b,
-0x015d, 0x015d,
-0x015f, 0x015f,
-0x0161, 0x0161,
-0x0163, 0x0163,
-0x0165, 0x0165,
-0x0167, 0x0167,
-0x0169, 0x0169,
-0x016b, 0x016b,
-0x016d, 0x016d,
-0x016f, 0x016f,
-0x0171, 0x0171,
-0x0173, 0x0173,
-0x0175, 0x0175,
-0x0177, 0x0177,
-0x017a, 0x017a,
-0x017c, 0x017c,
-0x017e, 0x0180,
-0x0183, 0x0183,
-0x0185, 0x0185,
-0x0188, 0x0188,
-0x018c, 0x018c,
-0x0192, 0x0192,
-0x0195, 0x0195,
-0x0199, 0x019a,
-0x019e, 0x019e,
-0x01a1, 0x01a1,
-0x01a3, 0x01a3,
-0x01a5, 0x01a5,
-0x01a8, 0x01a8,
-0x01ad, 0x01ad,
-0x01b0, 0x01b0,
-0x01b4, 0x01b4,
-0x01b6, 0x01b6,
-0x01b9, 0x01b9,
-0x01bd, 0x01bd,
-0x01bf, 0x01bf,
-0x01c5, 0x01c6,
-0x01c8, 0x01c9,
-0x01cb, 0x01cc,
-0x01ce, 0x01ce,
-0x01d0, 0x01d0,
-0x01d2, 0x01d2,
-0x01d4, 0x01d4,
-0x01d6, 0x01d6,
-0x01d8, 0x01d8,
-0x01da, 0x01da,
-0x01dc, 0x01dd,
-0x01df, 0x01df,
-0x01e1, 0x01e1,
-0x01e3, 0x01e3,
-0x01e5, 0x01e5,
-0x01e7, 0x01e7,
-0x01e9, 0x01e9,
-0x01eb, 0x01eb,
-0x01ed, 0x01ed,
-0x01ef, 0x01f0,
-0x01f2, 0x01f3,
-0x01f5, 0x01f5,
-0x01f9, 0x01f9,
-0x01fb, 0x01fb,
-0x01fd, 0x01fd,
-0x01ff, 0x01ff,
-0x0201, 0x0201,
-0x0203, 0x0203,
-0x0205, 0x0205,
-0x0207, 0x0207,
-0x0209, 0x0209,
-0x020b, 0x020b,
-0x020d, 0x020d,
-0x020f, 0x020f,
-0x0211, 0x0211,
-0x0213, 0x0213,
-0x0215, 0x0215,
-0x0217, 0x0217,
-0x0219, 0x0219,
-0x021b, 0x021b,
-0x021d, 0x021d,
-0x021f, 0x021f,
-0x0223, 0x0223,
-0x0225, 0x0225,
-0x0227, 0x0227,
-0x0229, 0x0229,
-0x022b, 0x022b,
-0x022d, 0x022d,
-0x022f, 0x022f,
-0x0231, 0x0231,
-0x0233, 0x0233,
-0x023c, 0x023c,
-0x023f, 0x0240,
-0x0242, 0x0242,
-0x0247, 0x0247,
-0x0249, 0x0249,
-0x024b, 0x024b,
-0x024d, 0x024d,
-0x024f, 0x0254,
-0x0256, 0x0257,
-0x0259, 0x0259,
-0x025b, 0x025c,
-0x0260, 0x0261,
-0x0263, 0x0263,
-0x0265, 0x0266,
-0x0268, 0x0269,
-0x026b, 0x026c,
-0x026f, 0x026f,
-0x0271, 0x0272,
-0x0275, 0x0275,
-0x027d, 0x027d,
-0x0280, 0x0280,
-0x0283, 0x0283,
-0x0287, 0x028c,
-0x0292, 0x0292,
-0x029d, 0x029e,
-0x0345, 0x0345,
-0x0371, 0x0371,
-0x0373, 0x0373,
-0x0377, 0x0377,
-0x037b, 0x037d,
-0x0390, 0x0390,
-0x03ac, 0x03ce,
-0x03d0, 0x03d1,
-0x03d5, 0x03d7,
-0x03d9, 0x03d9,
-0x03db, 0x03db,
-0x03dd, 0x03dd,
-0x03df, 0x03df,
-0x03e1, 0x03e1,
-0x03e3, 0x03e3,
-0x03e5, 0x03e5,
-0x03e7, 0x03e7,
-0x03e9, 0x03e9,
-0x03eb, 0x03eb,
-0x03ed, 0x03ed,
-0x03ef, 0x03f3,
-0x03f5, 0x03f5,
-0x03f8, 0x03f8,
-0x03fb, 0x03fb,
-0x0430, 0x045f,
-0x0461, 0x0461,
-0x0463, 0x0463,
-0x0465, 0x0465,
-0x0467, 0x0467,
-0x0469, 0x0469,
-0x046b, 0x046b,
-0x046d, 0x046d,
-0x046f, 0x046f,
-0x0471, 0x0471,
-0x0473, 0x0473,
-0x0475, 0x0475,
-0x0477, 0x0477,
-0x0479, 0x0479,
-0x047b, 0x047b,
-0x047d, 0x047d,
-0x047f, 0x047f,
-0x0481, 0x0481,
-0x048b, 0x048b,
-0x048d, 0x048d,
-0x048f, 0x048f,
-0x0491, 0x0491,
-0x0493, 0x0493,
-0x0495, 0x0495,
-0x0497, 0x0497,
-0x0499, 0x0499,
-0x049b, 0x049b,
-0x049d, 0x049d,
-0x049f, 0x049f,
-0x04a1, 0x04a1,
-0x04a3, 0x04a3,
-0x04a5, 0x04a5,
-0x04a7, 0x04a7,
-0x04a9, 0x04a9,
-0x04ab, 0x04ab,
-0x04ad, 0x04ad,
-0x04af, 0x04af,
-0x04b1, 0x04b1,
-0x04b3, 0x04b3,
-0x04b5, 0x04b5,
-0x04b7, 0x04b7,
-0x04b9, 0x04b9,
-0x04bb, 0x04bb,
-0x04bd, 0x04bd,
-0x04bf, 0x04bf,
-0x04c2, 0x04c2,
-0x04c4, 0x04c4,
-0x04c6, 0x04c6,
-0x04c8, 0x04c8,
-0x04ca, 0x04ca,
-0x04cc, 0x04cc,
-0x04ce, 0x04cf,
-0x04d1, 0x04d1,
-0x04d3, 0x04d3,
-0x04d5, 0x04d5,
-0x04d7, 0x04d7,
-0x04d9, 0x04d9,
-0x04db, 0x04db,
-0x04dd, 0x04dd,
-0x04df, 0x04df,
-0x04e1, 0x04e1,
-0x04e3, 0x04e3,
-0x04e5, 0x04e5,
-0x04e7, 0x04e7,
-0x04e9, 0x04e9,
-0x04eb, 0x04eb,
-0x04ed, 0x04ed,
-0x04ef, 0x04ef,
-0x04f1, 0x04f1,
-0x04f3, 0x04f3,
-0x04f5, 0x04f5,
-0x04f7, 0x04f7,
-0x04f9, 0x04f9,
-0x04fb, 0x04fb,
-0x04fd, 0x04fd,
-0x04ff, 0x04ff,
-0x0501, 0x0501,
-0x0503, 0x0503,
-0x0505, 0x0505,
-0x0507, 0x0507,
-0x0509, 0x0509,
-0x050b, 0x050b,
-0x050d, 0x050d,
-0x050f, 0x050f,
-0x0511, 0x0511,
-0x0513, 0x0513,
-0x0515, 0x0515,
-0x0517, 0x0517,
-0x0519, 0x0519,
-0x051b, 0x051b,
-0x051d, 0x051d,
-0x051f, 0x051f,
-0x0521, 0x0521,
-0x0523, 0x0523,
-0x0525, 0x0525,
-0x0527, 0x0527,
-0x0529, 0x0529,
-0x052b, 0x052b,
-0x052d, 0x052d,
-0x052f, 0x052f,
-0x0561, 0x0587,
-0x13f8, 0x13fd,
-0x1d79, 0x1d79,
-0x1d7d, 0x1d7d,
-0x1e01, 0x1e01,
-0x1e03, 0x1e03,
-0x1e05, 0x1e05,
-0x1e07, 0x1e07,
-0x1e09, 0x1e09,
-0x1e0b, 0x1e0b,
-0x1e0d, 0x1e0d,
-0x1e0f, 0x1e0f,
-0x1e11, 0x1e11,
-0x1e13, 0x1e13,
-0x1e15, 0x1e15,
-0x1e17, 0x1e17,
-0x1e19, 0x1e19,
-0x1e1b, 0x1e1b,
-0x1e1d, 0x1e1d,
-0x1e1f, 0x1e1f,
-0x1e21, 0x1e21,
-0x1e23, 0x1e23,
-0x1e25, 0x1e25,
-0x1e27, 0x1e27,
-0x1e29, 0x1e29,
-0x1e2b, 0x1e2b,
-0x1e2d, 0x1e2d,
-0x1e2f, 0x1e2f,
-0x1e31, 0x1e31,
-0x1e33, 0x1e33,
-0x1e35, 0x1e35,
-0x1e37, 0x1e37,
-0x1e39, 0x1e39,
-0x1e3b, 0x1e3b,
-0x1e3d, 0x1e3d,
-0x1e3f, 0x1e3f,
-0x1e41, 0x1e41,
-0x1e43, 0x1e43,
-0x1e45, 0x1e45,
-0x1e47, 0x1e47,
-0x1e49, 0x1e49,
-0x1e4b, 0x1e4b,
-0x1e4d, 0x1e4d,
-0x1e4f, 0x1e4f,
-0x1e51, 0x1e51,
-0x1e53, 0x1e53,
-0x1e55, 0x1e55,
-0x1e57, 0x1e57,
-0x1e59, 0x1e59,
-0x1e5b, 0x1e5b,
-0x1e5d, 0x1e5d,
-0x1e5f, 0x1e5f,
-0x1e61, 0x1e61,
-0x1e63, 0x1e63,
-0x1e65, 0x1e65,
-0x1e67, 0x1e67,
-0x1e69, 0x1e69,
-0x1e6b, 0x1e6b,
-0x1e6d, 0x1e6d,
-0x1e6f, 0x1e6f,
-0x1e71, 0x1e71,
-0x1e73, 0x1e73,
-0x1e75, 0x1e75,
-0x1e77, 0x1e77,
-0x1e79, 0x1e79,
-0x1e7b, 0x1e7b,
-0x1e7d, 0x1e7d,
-0x1e7f, 0x1e7f,
-0x1e81, 0x1e81,
-0x1e83, 0x1e83,
-0x1e85, 0x1e85,
-0x1e87, 0x1e87,
-0x1e89, 0x1e89,
-0x1e8b, 0x1e8b,
-0x1e8d, 0x1e8d,
-0x1e8f, 0x1e8f,
-0x1e91, 0x1e91,
-0x1e93, 0x1e93,
-0x1e95, 0x1e9b,
-0x1ea1, 0x1ea1,
-0x1ea3, 0x1ea3,
-0x1ea5, 0x1ea5,
-0x1ea7, 0x1ea7,
-0x1ea9, 0x1ea9,
-0x1eab, 0x1eab,
-0x1ead, 0x1ead,
-0x1eaf, 0x1eaf,
-0x1eb1, 0x1eb1,
-0x1eb3, 0x1eb3,
-0x1eb5, 0x1eb5,
-0x1eb7, 0x1eb7,
-0x1eb9, 0x1eb9,
-0x1ebb, 0x1ebb,
-0x1ebd, 0x1ebd,
-0x1ebf, 0x1ebf,
-0x1ec1, 0x1ec1,
-0x1ec3, 0x1ec3,
-0x1ec5, 0x1ec5,
-0x1ec7, 0x1ec7,
-0x1ec9, 0x1ec9,
-0x1ecb, 0x1ecb,
-0x1ecd, 0x1ecd,
-0x1ecf, 0x1ecf,
-0x1ed1, 0x1ed1,
-0x1ed3, 0x1ed3,
-0x1ed5, 0x1ed5,
-0x1ed7, 0x1ed7,
-0x1ed9, 0x1ed9,
-0x1edb, 0x1edb,
-0x1edd, 0x1edd,
-0x1edf, 0x1edf,
-0x1ee1, 0x1ee1,
-0x1ee3, 0x1ee3,
-0x1ee5, 0x1ee5,
-0x1ee7, 0x1ee7,
-0x1ee9, 0x1ee9,
-0x1eeb, 0x1eeb,
-0x1eed, 0x1eed,
-0x1eef, 0x1eef,
-0x1ef1, 0x1ef1,
-0x1ef3, 0x1ef3,
-0x1ef5, 0x1ef5,
-0x1ef7, 0x1ef7,
-0x1ef9, 0x1ef9,
-0x1efb, 0x1efb,
-0x1efd, 0x1efd,
-0x1eff, 0x1f07,
-0x1f10, 0x1f15,
-0x1f20, 0x1f27,
-0x1f30, 0x1f37,
-0x1f40, 0x1f45,
-0x1f50, 0x1f57,
-0x1f60, 0x1f67,
-0x1f70, 0x1f7d,
-0x1f80, 0x1fb4,
-0x1fb6, 0x1fb7,
-0x1fbc, 0x1fbc,
-0x1fbe, 0x1fbe,
-0x1fc2, 0x1fc4,
-0x1fc6, 0x1fc7,
-0x1fcc, 0x1fcc,
-0x1fd0, 0x1fd3,
-0x1fd6, 0x1fd7,
-0x1fe0, 0x1fe7,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ff7,
-0x1ffc, 0x1ffc,
-0x214e, 0x214e,
-0x2170, 0x217f,
-0x2184, 0x2184,
-0x24d0, 0x24e9,
-0x2c30, 0x2c5e,
-0x2c61, 0x2c61,
-0x2c65, 0x2c66,
-0x2c68, 0x2c68,
-0x2c6a, 0x2c6a,
-0x2c6c, 0x2c6c,
-0x2c73, 0x2c73,
-0x2c76, 0x2c76,
-0x2c81, 0x2c81,
-0x2c83, 0x2c83,
-0x2c85, 0x2c85,
-0x2c87, 0x2c87,
-0x2c89, 0x2c89,
-0x2c8b, 0x2c8b,
-0x2c8d, 0x2c8d,
-0x2c8f, 0x2c8f,
-0x2c91, 0x2c91,
-0x2c93, 0x2c93,
-0x2c95, 0x2c95,
-0x2c97, 0x2c97,
-0x2c99, 0x2c99,
-0x2c9b, 0x2c9b,
-0x2c9d, 0x2c9d,
-0x2c9f, 0x2c9f,
-0x2ca1, 0x2ca1,
-0x2ca3, 0x2ca3,
-0x2ca5, 0x2ca5,
-0x2ca7, 0x2ca7,
-0x2ca9, 0x2ca9,
-0x2cab, 0x2cab,
-0x2cad, 0x2cad,
-0x2caf, 0x2caf,
-0x2cb1, 0x2cb1,
-0x2cb3, 0x2cb3,
-0x2cb5, 0x2cb5,
-0x2cb7, 0x2cb7,
-0x2cb9, 0x2cb9,
-0x2cbb, 0x2cbb,
-0x2cbd, 0x2cbd,
-0x2cbf, 0x2cbf,
-0x2cc1, 0x2cc1,
-0x2cc3, 0x2cc3,
-0x2cc5, 0x2cc5,
-0x2cc7, 0x2cc7,
-0x2cc9, 0x2cc9,
-0x2ccb, 0x2ccb,
-0x2ccd, 0x2ccd,
-0x2ccf, 0x2ccf,
-0x2cd1, 0x2cd1,
-0x2cd3, 0x2cd3,
-0x2cd5, 0x2cd5,
-0x2cd7, 0x2cd7,
-0x2cd9, 0x2cd9,
-0x2cdb, 0x2cdb,
-0x2cdd, 0x2cdd,
-0x2cdf, 0x2cdf,
-0x2ce1, 0x2ce1,
-0x2ce3, 0x2ce3,
-0x2cec, 0x2cec,
-0x2cee, 0x2cee,
-0x2cf3, 0x2cf3,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-0xa641, 0xa641,
-0xa643, 0xa643,
-0xa645, 0xa645,
-0xa647, 0xa647,
-0xa649, 0xa649,
-0xa64b, 0xa64b,
-0xa64d, 0xa64d,
-0xa64f, 0xa64f,
-0xa651, 0xa651,
-0xa653, 0xa653,
-0xa655, 0xa655,
-0xa657, 0xa657,
-0xa659, 0xa659,
-0xa65b, 0xa65b,
-0xa65d, 0xa65d,
-0xa65f, 0xa65f,
-0xa661, 0xa661,
-0xa663, 0xa663,
-0xa665, 0xa665,
-0xa667, 0xa667,
-0xa669, 0xa669,
-0xa66b, 0xa66b,
-0xa66d, 0xa66d,
-0xa681, 0xa681,
-0xa683, 0xa683,
-0xa685, 0xa685,
-0xa687, 0xa687,
-0xa689, 0xa689,
-0xa68b, 0xa68b,
-0xa68d, 0xa68d,
-0xa68f, 0xa68f,
-0xa691, 0xa691,
-0xa693, 0xa693,
-0xa695, 0xa695,
-0xa697, 0xa697,
-0xa699, 0xa699,
-0xa69b, 0xa69b,
-0xa723, 0xa723,
-0xa725, 0xa725,
-0xa727, 0xa727,
-0xa729, 0xa729,
-0xa72b, 0xa72b,
-0xa72d, 0xa72d,
-0xa72f, 0xa72f,
-0xa733, 0xa733,
-0xa735, 0xa735,
-0xa737, 0xa737,
-0xa739, 0xa739,
-0xa73b, 0xa73b,
-0xa73d, 0xa73d,
-0xa73f, 0xa73f,
-0xa741, 0xa741,
-0xa743, 0xa743,
-0xa745, 0xa745,
-0xa747, 0xa747,
-0xa749, 0xa749,
-0xa74b, 0xa74b,
-0xa74d, 0xa74d,
-0xa74f, 0xa74f,
-0xa751, 0xa751,
-0xa753, 0xa753,
-0xa755, 0xa755,
-0xa757, 0xa757,
-0xa759, 0xa759,
-0xa75b, 0xa75b,
-0xa75d, 0xa75d,
-0xa75f, 0xa75f,
-0xa761, 0xa761,
-0xa763, 0xa763,
-0xa765, 0xa765,
-0xa767, 0xa767,
-0xa769, 0xa769,
-0xa76b, 0xa76b,
-0xa76d, 0xa76d,
-0xa76f, 0xa76f,
-0xa77a, 0xa77a,
-0xa77c, 0xa77c,
-0xa77f, 0xa77f,
-0xa781, 0xa781,
-0xa783, 0xa783,
-0xa785, 0xa785,
-0xa787, 0xa787,
-0xa78c, 0xa78c,
-0xa791, 0xa791,
-0xa793, 0xa793,
-0xa797, 0xa797,
-0xa799, 0xa799,
-0xa79b, 0xa79b,
-0xa79d, 0xa79d,
-0xa79f, 0xa79f,
-0xa7a1, 0xa7a1,
-0xa7a3, 0xa7a3,
-0xa7a5, 0xa7a5,
-0xa7a7, 0xa7a7,
-0xa7a9, 0xa7a9,
-0xa7b5, 0xa7b5,
-0xa7b7, 0xa7b7,
-0xab53, 0xab53,
-0xab70, 0xabbf,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xff41, 0xff5a,
-0x10428, 0x1044f,
-0x10cc0, 0x10cf2,
-0x118c0, 0x118df,
-}; /* END of CR_Changes_When_Uppercased */
+CR_Tai_Le[] = { 2,
+0x1950, 0x196d,
+0x1970, 0x1974,
+}; /* END of CR_Tai_Le */
-/* PROPERTY: 'Changes_When_Titlecased': Derived Property */
+/* PROPERTY: 'Tai_Tham': Script */
static const OnigCodePoint
-CR_Changes_When_Titlecased[] = { 606,
-0x0061, 0x007a,
-0x00b5, 0x00b5,
-0x00df, 0x00f6,
-0x00f8, 0x00ff,
-0x0101, 0x0101,
-0x0103, 0x0103,
-0x0105, 0x0105,
-0x0107, 0x0107,
-0x0109, 0x0109,
-0x010b, 0x010b,
-0x010d, 0x010d,
-0x010f, 0x010f,
-0x0111, 0x0111,
-0x0113, 0x0113,
-0x0115, 0x0115,
-0x0117, 0x0117,
-0x0119, 0x0119,
-0x011b, 0x011b,
-0x011d, 0x011d,
-0x011f, 0x011f,
-0x0121, 0x0121,
-0x0123, 0x0123,
-0x0125, 0x0125,
-0x0127, 0x0127,
-0x0129, 0x0129,
-0x012b, 0x012b,
-0x012d, 0x012d,
-0x012f, 0x012f,
-0x0131, 0x0131,
-0x0133, 0x0133,
-0x0135, 0x0135,
-0x0137, 0x0137,
-0x013a, 0x013a,
-0x013c, 0x013c,
-0x013e, 0x013e,
-0x0140, 0x0140,
-0x0142, 0x0142,
-0x0144, 0x0144,
-0x0146, 0x0146,
-0x0148, 0x0149,
-0x014b, 0x014b,
-0x014d, 0x014d,
-0x014f, 0x014f,
-0x0151, 0x0151,
-0x0153, 0x0153,
-0x0155, 0x0155,
-0x0157, 0x0157,
-0x0159, 0x0159,
-0x015b, 0x015b,
-0x015d, 0x015d,
-0x015f, 0x015f,
-0x0161, 0x0161,
-0x0163, 0x0163,
-0x0165, 0x0165,
-0x0167, 0x0167,
-0x0169, 0x0169,
-0x016b, 0x016b,
-0x016d, 0x016d,
-0x016f, 0x016f,
-0x0171, 0x0171,
-0x0173, 0x0173,
-0x0175, 0x0175,
-0x0177, 0x0177,
-0x017a, 0x017a,
-0x017c, 0x017c,
-0x017e, 0x0180,
-0x0183, 0x0183,
-0x0185, 0x0185,
-0x0188, 0x0188,
-0x018c, 0x018c,
-0x0192, 0x0192,
-0x0195, 0x0195,
-0x0199, 0x019a,
-0x019e, 0x019e,
-0x01a1, 0x01a1,
-0x01a3, 0x01a3,
-0x01a5, 0x01a5,
-0x01a8, 0x01a8,
-0x01ad, 0x01ad,
-0x01b0, 0x01b0,
-0x01b4, 0x01b4,
-0x01b6, 0x01b6,
-0x01b9, 0x01b9,
-0x01bd, 0x01bd,
-0x01bf, 0x01bf,
-0x01c4, 0x01c4,
-0x01c6, 0x01c7,
-0x01c9, 0x01ca,
-0x01cc, 0x01cc,
-0x01ce, 0x01ce,
-0x01d0, 0x01d0,
-0x01d2, 0x01d2,
-0x01d4, 0x01d4,
-0x01d6, 0x01d6,
-0x01d8, 0x01d8,
-0x01da, 0x01da,
-0x01dc, 0x01dd,
-0x01df, 0x01df,
-0x01e1, 0x01e1,
-0x01e3, 0x01e3,
-0x01e5, 0x01e5,
-0x01e7, 0x01e7,
-0x01e9, 0x01e9,
-0x01eb, 0x01eb,
-0x01ed, 0x01ed,
-0x01ef, 0x01f1,
-0x01f3, 0x01f3,
-0x01f5, 0x01f5,
-0x01f9, 0x01f9,
-0x01fb, 0x01fb,
-0x01fd, 0x01fd,
-0x01ff, 0x01ff,
-0x0201, 0x0201,
-0x0203, 0x0203,
-0x0205, 0x0205,
-0x0207, 0x0207,
-0x0209, 0x0209,
-0x020b, 0x020b,
-0x020d, 0x020d,
-0x020f, 0x020f,
-0x0211, 0x0211,
-0x0213, 0x0213,
-0x0215, 0x0215,
-0x0217, 0x0217,
-0x0219, 0x0219,
-0x021b, 0x021b,
-0x021d, 0x021d,
-0x021f, 0x021f,
-0x0223, 0x0223,
-0x0225, 0x0225,
-0x0227, 0x0227,
-0x0229, 0x0229,
-0x022b, 0x022b,
-0x022d, 0x022d,
-0x022f, 0x022f,
-0x0231, 0x0231,
-0x0233, 0x0233,
-0x023c, 0x023c,
-0x023f, 0x0240,
-0x0242, 0x0242,
-0x0247, 0x0247,
-0x0249, 0x0249,
-0x024b, 0x024b,
-0x024d, 0x024d,
-0x024f, 0x0254,
-0x0256, 0x0257,
-0x0259, 0x0259,
-0x025b, 0x025c,
-0x0260, 0x0261,
-0x0263, 0x0263,
-0x0265, 0x0266,
-0x0268, 0x0269,
-0x026b, 0x026c,
-0x026f, 0x026f,
-0x0271, 0x0272,
-0x0275, 0x0275,
-0x027d, 0x027d,
-0x0280, 0x0280,
-0x0283, 0x0283,
-0x0287, 0x028c,
-0x0292, 0x0292,
-0x029d, 0x029e,
-0x0345, 0x0345,
-0x0371, 0x0371,
-0x0373, 0x0373,
-0x0377, 0x0377,
-0x037b, 0x037d,
-0x0390, 0x0390,
-0x03ac, 0x03ce,
-0x03d0, 0x03d1,
-0x03d5, 0x03d7,
-0x03d9, 0x03d9,
-0x03db, 0x03db,
-0x03dd, 0x03dd,
-0x03df, 0x03df,
-0x03e1, 0x03e1,
-0x03e3, 0x03e3,
-0x03e5, 0x03e5,
-0x03e7, 0x03e7,
-0x03e9, 0x03e9,
-0x03eb, 0x03eb,
-0x03ed, 0x03ed,
-0x03ef, 0x03f3,
-0x03f5, 0x03f5,
-0x03f8, 0x03f8,
-0x03fb, 0x03fb,
-0x0430, 0x045f,
-0x0461, 0x0461,
-0x0463, 0x0463,
-0x0465, 0x0465,
-0x0467, 0x0467,
-0x0469, 0x0469,
-0x046b, 0x046b,
-0x046d, 0x046d,
-0x046f, 0x046f,
-0x0471, 0x0471,
-0x0473, 0x0473,
-0x0475, 0x0475,
-0x0477, 0x0477,
-0x0479, 0x0479,
-0x047b, 0x047b,
-0x047d, 0x047d,
-0x047f, 0x047f,
-0x0481, 0x0481,
-0x048b, 0x048b,
-0x048d, 0x048d,
-0x048f, 0x048f,
-0x0491, 0x0491,
-0x0493, 0x0493,
-0x0495, 0x0495,
-0x0497, 0x0497,
-0x0499, 0x0499,
-0x049b, 0x049b,
-0x049d, 0x049d,
-0x049f, 0x049f,
-0x04a1, 0x04a1,
-0x04a3, 0x04a3,
-0x04a5, 0x04a5,
-0x04a7, 0x04a7,
-0x04a9, 0x04a9,
-0x04ab, 0x04ab,
-0x04ad, 0x04ad,
-0x04af, 0x04af,
-0x04b1, 0x04b1,
-0x04b3, 0x04b3,
-0x04b5, 0x04b5,
-0x04b7, 0x04b7,
-0x04b9, 0x04b9,
-0x04bb, 0x04bb,
-0x04bd, 0x04bd,
-0x04bf, 0x04bf,
-0x04c2, 0x04c2,
-0x04c4, 0x04c4,
-0x04c6, 0x04c6,
-0x04c8, 0x04c8,
-0x04ca, 0x04ca,
-0x04cc, 0x04cc,
-0x04ce, 0x04cf,
-0x04d1, 0x04d1,
-0x04d3, 0x04d3,
-0x04d5, 0x04d5,
-0x04d7, 0x04d7,
-0x04d9, 0x04d9,
-0x04db, 0x04db,
-0x04dd, 0x04dd,
-0x04df, 0x04df,
-0x04e1, 0x04e1,
-0x04e3, 0x04e3,
-0x04e5, 0x04e5,
-0x04e7, 0x04e7,
-0x04e9, 0x04e9,
-0x04eb, 0x04eb,
-0x04ed, 0x04ed,
-0x04ef, 0x04ef,
-0x04f1, 0x04f1,
-0x04f3, 0x04f3,
-0x04f5, 0x04f5,
-0x04f7, 0x04f7,
-0x04f9, 0x04f9,
-0x04fb, 0x04fb,
-0x04fd, 0x04fd,
-0x04ff, 0x04ff,
-0x0501, 0x0501,
-0x0503, 0x0503,
-0x0505, 0x0505,
-0x0507, 0x0507,
-0x0509, 0x0509,
-0x050b, 0x050b,
-0x050d, 0x050d,
-0x050f, 0x050f,
-0x0511, 0x0511,
-0x0513, 0x0513,
-0x0515, 0x0515,
-0x0517, 0x0517,
-0x0519, 0x0519,
-0x051b, 0x051b,
-0x051d, 0x051d,
-0x051f, 0x051f,
-0x0521, 0x0521,
-0x0523, 0x0523,
-0x0525, 0x0525,
-0x0527, 0x0527,
-0x0529, 0x0529,
-0x052b, 0x052b,
-0x052d, 0x052d,
-0x052f, 0x052f,
-0x0561, 0x0587,
-0x13f8, 0x13fd,
-0x1d79, 0x1d79,
-0x1d7d, 0x1d7d,
-0x1e01, 0x1e01,
-0x1e03, 0x1e03,
-0x1e05, 0x1e05,
-0x1e07, 0x1e07,
-0x1e09, 0x1e09,
-0x1e0b, 0x1e0b,
-0x1e0d, 0x1e0d,
-0x1e0f, 0x1e0f,
-0x1e11, 0x1e11,
-0x1e13, 0x1e13,
-0x1e15, 0x1e15,
-0x1e17, 0x1e17,
-0x1e19, 0x1e19,
-0x1e1b, 0x1e1b,
-0x1e1d, 0x1e1d,
-0x1e1f, 0x1e1f,
-0x1e21, 0x1e21,
-0x1e23, 0x1e23,
-0x1e25, 0x1e25,
-0x1e27, 0x1e27,
-0x1e29, 0x1e29,
-0x1e2b, 0x1e2b,
-0x1e2d, 0x1e2d,
-0x1e2f, 0x1e2f,
-0x1e31, 0x1e31,
-0x1e33, 0x1e33,
-0x1e35, 0x1e35,
-0x1e37, 0x1e37,
-0x1e39, 0x1e39,
-0x1e3b, 0x1e3b,
-0x1e3d, 0x1e3d,
-0x1e3f, 0x1e3f,
-0x1e41, 0x1e41,
-0x1e43, 0x1e43,
-0x1e45, 0x1e45,
-0x1e47, 0x1e47,
-0x1e49, 0x1e49,
-0x1e4b, 0x1e4b,
-0x1e4d, 0x1e4d,
-0x1e4f, 0x1e4f,
-0x1e51, 0x1e51,
-0x1e53, 0x1e53,
-0x1e55, 0x1e55,
-0x1e57, 0x1e57,
-0x1e59, 0x1e59,
-0x1e5b, 0x1e5b,
-0x1e5d, 0x1e5d,
-0x1e5f, 0x1e5f,
-0x1e61, 0x1e61,
-0x1e63, 0x1e63,
-0x1e65, 0x1e65,
-0x1e67, 0x1e67,
-0x1e69, 0x1e69,
-0x1e6b, 0x1e6b,
-0x1e6d, 0x1e6d,
-0x1e6f, 0x1e6f,
-0x1e71, 0x1e71,
-0x1e73, 0x1e73,
-0x1e75, 0x1e75,
-0x1e77, 0x1e77,
-0x1e79, 0x1e79,
-0x1e7b, 0x1e7b,
-0x1e7d, 0x1e7d,
-0x1e7f, 0x1e7f,
-0x1e81, 0x1e81,
-0x1e83, 0x1e83,
-0x1e85, 0x1e85,
-0x1e87, 0x1e87,
-0x1e89, 0x1e89,
-0x1e8b, 0x1e8b,
-0x1e8d, 0x1e8d,
-0x1e8f, 0x1e8f,
-0x1e91, 0x1e91,
-0x1e93, 0x1e93,
-0x1e95, 0x1e9b,
-0x1ea1, 0x1ea1,
-0x1ea3, 0x1ea3,
-0x1ea5, 0x1ea5,
-0x1ea7, 0x1ea7,
-0x1ea9, 0x1ea9,
-0x1eab, 0x1eab,
-0x1ead, 0x1ead,
-0x1eaf, 0x1eaf,
-0x1eb1, 0x1eb1,
-0x1eb3, 0x1eb3,
-0x1eb5, 0x1eb5,
-0x1eb7, 0x1eb7,
-0x1eb9, 0x1eb9,
-0x1ebb, 0x1ebb,
-0x1ebd, 0x1ebd,
-0x1ebf, 0x1ebf,
-0x1ec1, 0x1ec1,
-0x1ec3, 0x1ec3,
-0x1ec5, 0x1ec5,
-0x1ec7, 0x1ec7,
-0x1ec9, 0x1ec9,
-0x1ecb, 0x1ecb,
-0x1ecd, 0x1ecd,
-0x1ecf, 0x1ecf,
-0x1ed1, 0x1ed1,
-0x1ed3, 0x1ed3,
-0x1ed5, 0x1ed5,
-0x1ed7, 0x1ed7,
-0x1ed9, 0x1ed9,
-0x1edb, 0x1edb,
-0x1edd, 0x1edd,
-0x1edf, 0x1edf,
-0x1ee1, 0x1ee1,
-0x1ee3, 0x1ee3,
-0x1ee5, 0x1ee5,
-0x1ee7, 0x1ee7,
-0x1ee9, 0x1ee9,
-0x1eeb, 0x1eeb,
-0x1eed, 0x1eed,
-0x1eef, 0x1eef,
-0x1ef1, 0x1ef1,
-0x1ef3, 0x1ef3,
-0x1ef5, 0x1ef5,
-0x1ef7, 0x1ef7,
-0x1ef9, 0x1ef9,
-0x1efb, 0x1efb,
-0x1efd, 0x1efd,
-0x1eff, 0x1f07,
-0x1f10, 0x1f15,
-0x1f20, 0x1f27,
-0x1f30, 0x1f37,
-0x1f40, 0x1f45,
-0x1f50, 0x1f57,
-0x1f60, 0x1f67,
-0x1f70, 0x1f7d,
-0x1f80, 0x1f87,
-0x1f90, 0x1f97,
-0x1fa0, 0x1fa7,
-0x1fb0, 0x1fb4,
-0x1fb6, 0x1fb7,
-0x1fbe, 0x1fbe,
-0x1fc2, 0x1fc4,
-0x1fc6, 0x1fc7,
-0x1fd0, 0x1fd3,
-0x1fd6, 0x1fd7,
-0x1fe0, 0x1fe7,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ff7,
-0x214e, 0x214e,
-0x2170, 0x217f,
-0x2184, 0x2184,
-0x24d0, 0x24e9,
-0x2c30, 0x2c5e,
-0x2c61, 0x2c61,
-0x2c65, 0x2c66,
-0x2c68, 0x2c68,
-0x2c6a, 0x2c6a,
-0x2c6c, 0x2c6c,
-0x2c73, 0x2c73,
-0x2c76, 0x2c76,
-0x2c81, 0x2c81,
-0x2c83, 0x2c83,
-0x2c85, 0x2c85,
-0x2c87, 0x2c87,
-0x2c89, 0x2c89,
-0x2c8b, 0x2c8b,
-0x2c8d, 0x2c8d,
-0x2c8f, 0x2c8f,
-0x2c91, 0x2c91,
-0x2c93, 0x2c93,
-0x2c95, 0x2c95,
-0x2c97, 0x2c97,
-0x2c99, 0x2c99,
-0x2c9b, 0x2c9b,
-0x2c9d, 0x2c9d,
-0x2c9f, 0x2c9f,
-0x2ca1, 0x2ca1,
-0x2ca3, 0x2ca3,
-0x2ca5, 0x2ca5,
-0x2ca7, 0x2ca7,
-0x2ca9, 0x2ca9,
-0x2cab, 0x2cab,
-0x2cad, 0x2cad,
-0x2caf, 0x2caf,
-0x2cb1, 0x2cb1,
-0x2cb3, 0x2cb3,
-0x2cb5, 0x2cb5,
-0x2cb7, 0x2cb7,
-0x2cb9, 0x2cb9,
-0x2cbb, 0x2cbb,
-0x2cbd, 0x2cbd,
-0x2cbf, 0x2cbf,
-0x2cc1, 0x2cc1,
-0x2cc3, 0x2cc3,
-0x2cc5, 0x2cc5,
-0x2cc7, 0x2cc7,
-0x2cc9, 0x2cc9,
-0x2ccb, 0x2ccb,
-0x2ccd, 0x2ccd,
-0x2ccf, 0x2ccf,
-0x2cd1, 0x2cd1,
-0x2cd3, 0x2cd3,
-0x2cd5, 0x2cd5,
-0x2cd7, 0x2cd7,
-0x2cd9, 0x2cd9,
-0x2cdb, 0x2cdb,
-0x2cdd, 0x2cdd,
-0x2cdf, 0x2cdf,
-0x2ce1, 0x2ce1,
-0x2ce3, 0x2ce3,
-0x2cec, 0x2cec,
-0x2cee, 0x2cee,
-0x2cf3, 0x2cf3,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-0xa641, 0xa641,
-0xa643, 0xa643,
-0xa645, 0xa645,
-0xa647, 0xa647,
-0xa649, 0xa649,
-0xa64b, 0xa64b,
-0xa64d, 0xa64d,
-0xa64f, 0xa64f,
-0xa651, 0xa651,
-0xa653, 0xa653,
-0xa655, 0xa655,
-0xa657, 0xa657,
-0xa659, 0xa659,
-0xa65b, 0xa65b,
-0xa65d, 0xa65d,
-0xa65f, 0xa65f,
-0xa661, 0xa661,
-0xa663, 0xa663,
-0xa665, 0xa665,
-0xa667, 0xa667,
-0xa669, 0xa669,
-0xa66b, 0xa66b,
-0xa66d, 0xa66d,
-0xa681, 0xa681,
-0xa683, 0xa683,
-0xa685, 0xa685,
-0xa687, 0xa687,
-0xa689, 0xa689,
-0xa68b, 0xa68b,
-0xa68d, 0xa68d,
-0xa68f, 0xa68f,
-0xa691, 0xa691,
-0xa693, 0xa693,
-0xa695, 0xa695,
-0xa697, 0xa697,
-0xa699, 0xa699,
-0xa69b, 0xa69b,
-0xa723, 0xa723,
-0xa725, 0xa725,
-0xa727, 0xa727,
-0xa729, 0xa729,
-0xa72b, 0xa72b,
-0xa72d, 0xa72d,
-0xa72f, 0xa72f,
-0xa733, 0xa733,
-0xa735, 0xa735,
-0xa737, 0xa737,
-0xa739, 0xa739,
-0xa73b, 0xa73b,
-0xa73d, 0xa73d,
-0xa73f, 0xa73f,
-0xa741, 0xa741,
-0xa743, 0xa743,
-0xa745, 0xa745,
-0xa747, 0xa747,
-0xa749, 0xa749,
-0xa74b, 0xa74b,
-0xa74d, 0xa74d,
-0xa74f, 0xa74f,
-0xa751, 0xa751,
-0xa753, 0xa753,
-0xa755, 0xa755,
-0xa757, 0xa757,
-0xa759, 0xa759,
-0xa75b, 0xa75b,
-0xa75d, 0xa75d,
-0xa75f, 0xa75f,
-0xa761, 0xa761,
-0xa763, 0xa763,
-0xa765, 0xa765,
-0xa767, 0xa767,
-0xa769, 0xa769,
-0xa76b, 0xa76b,
-0xa76d, 0xa76d,
-0xa76f, 0xa76f,
-0xa77a, 0xa77a,
-0xa77c, 0xa77c,
-0xa77f, 0xa77f,
-0xa781, 0xa781,
-0xa783, 0xa783,
-0xa785, 0xa785,
-0xa787, 0xa787,
-0xa78c, 0xa78c,
-0xa791, 0xa791,
-0xa793, 0xa793,
-0xa797, 0xa797,
-0xa799, 0xa799,
-0xa79b, 0xa79b,
-0xa79d, 0xa79d,
-0xa79f, 0xa79f,
-0xa7a1, 0xa7a1,
-0xa7a3, 0xa7a3,
-0xa7a5, 0xa7a5,
-0xa7a7, 0xa7a7,
-0xa7a9, 0xa7a9,
-0xa7b5, 0xa7b5,
-0xa7b7, 0xa7b7,
-0xab53, 0xab53,
-0xab70, 0xabbf,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xff41, 0xff5a,
-0x10428, 0x1044f,
-0x10cc0, 0x10cf2,
-0x118c0, 0x118df,
-}; /* END of CR_Changes_When_Titlecased */
+CR_Tai_Tham[] = { 5,
+0x1a20, 0x1a5e,
+0x1a60, 0x1a7c,
+0x1a7f, 0x1a89,
+0x1a90, 0x1a99,
+0x1aa0, 0x1aad,
+}; /* END of CR_Tai_Tham */
-/* PROPERTY: 'Changes_When_Casefolded': Derived Property */
+/* PROPERTY: 'Tai_Viet': Script */
static const OnigCodePoint
-CR_Changes_When_Casefolded[] = { 600,
-0x0041, 0x005a,
-0x00b5, 0x00b5,
-0x00c0, 0x00d6,
-0x00d8, 0x00df,
-0x0100, 0x0100,
-0x0102, 0x0102,
-0x0104, 0x0104,
-0x0106, 0x0106,
-0x0108, 0x0108,
-0x010a, 0x010a,
-0x010c, 0x010c,
-0x010e, 0x010e,
-0x0110, 0x0110,
-0x0112, 0x0112,
-0x0114, 0x0114,
-0x0116, 0x0116,
-0x0118, 0x0118,
-0x011a, 0x011a,
-0x011c, 0x011c,
-0x011e, 0x011e,
-0x0120, 0x0120,
-0x0122, 0x0122,
-0x0124, 0x0124,
-0x0126, 0x0126,
-0x0128, 0x0128,
-0x012a, 0x012a,
-0x012c, 0x012c,
-0x012e, 0x012e,
-0x0130, 0x0130,
-0x0132, 0x0132,
-0x0134, 0x0134,
-0x0136, 0x0136,
-0x0139, 0x0139,
-0x013b, 0x013b,
-0x013d, 0x013d,
-0x013f, 0x013f,
-0x0141, 0x0141,
-0x0143, 0x0143,
-0x0145, 0x0145,
-0x0147, 0x0147,
-0x0149, 0x014a,
-0x014c, 0x014c,
-0x014e, 0x014e,
-0x0150, 0x0150,
-0x0152, 0x0152,
-0x0154, 0x0154,
-0x0156, 0x0156,
-0x0158, 0x0158,
-0x015a, 0x015a,
-0x015c, 0x015c,
-0x015e, 0x015e,
-0x0160, 0x0160,
-0x0162, 0x0162,
-0x0164, 0x0164,
-0x0166, 0x0166,
-0x0168, 0x0168,
-0x016a, 0x016a,
-0x016c, 0x016c,
-0x016e, 0x016e,
-0x0170, 0x0170,
-0x0172, 0x0172,
-0x0174, 0x0174,
-0x0176, 0x0176,
-0x0178, 0x0179,
-0x017b, 0x017b,
-0x017d, 0x017d,
-0x017f, 0x017f,
-0x0181, 0x0182,
-0x0184, 0x0184,
-0x0186, 0x0187,
-0x0189, 0x018b,
-0x018e, 0x0191,
-0x0193, 0x0194,
-0x0196, 0x0198,
-0x019c, 0x019d,
-0x019f, 0x01a0,
-0x01a2, 0x01a2,
-0x01a4, 0x01a4,
-0x01a6, 0x01a7,
-0x01a9, 0x01a9,
-0x01ac, 0x01ac,
-0x01ae, 0x01af,
-0x01b1, 0x01b3,
-0x01b5, 0x01b5,
-0x01b7, 0x01b8,
-0x01bc, 0x01bc,
-0x01c4, 0x01c5,
-0x01c7, 0x01c8,
-0x01ca, 0x01cb,
-0x01cd, 0x01cd,
-0x01cf, 0x01cf,
-0x01d1, 0x01d1,
-0x01d3, 0x01d3,
-0x01d5, 0x01d5,
-0x01d7, 0x01d7,
-0x01d9, 0x01d9,
-0x01db, 0x01db,
-0x01de, 0x01de,
-0x01e0, 0x01e0,
-0x01e2, 0x01e2,
-0x01e4, 0x01e4,
-0x01e6, 0x01e6,
-0x01e8, 0x01e8,
-0x01ea, 0x01ea,
-0x01ec, 0x01ec,
-0x01ee, 0x01ee,
-0x01f1, 0x01f2,
-0x01f4, 0x01f4,
-0x01f6, 0x01f8,
-0x01fa, 0x01fa,
-0x01fc, 0x01fc,
-0x01fe, 0x01fe,
-0x0200, 0x0200,
-0x0202, 0x0202,
-0x0204, 0x0204,
-0x0206, 0x0206,
-0x0208, 0x0208,
-0x020a, 0x020a,
-0x020c, 0x020c,
-0x020e, 0x020e,
-0x0210, 0x0210,
-0x0212, 0x0212,
-0x0214, 0x0214,
-0x0216, 0x0216,
-0x0218, 0x0218,
-0x021a, 0x021a,
-0x021c, 0x021c,
-0x021e, 0x021e,
-0x0220, 0x0220,
-0x0222, 0x0222,
-0x0224, 0x0224,
-0x0226, 0x0226,
-0x0228, 0x0228,
-0x022a, 0x022a,
-0x022c, 0x022c,
-0x022e, 0x022e,
-0x0230, 0x0230,
-0x0232, 0x0232,
-0x023a, 0x023b,
-0x023d, 0x023e,
-0x0241, 0x0241,
-0x0243, 0x0246,
-0x0248, 0x0248,
-0x024a, 0x024a,
-0x024c, 0x024c,
-0x024e, 0x024e,
-0x0345, 0x0345,
-0x0370, 0x0370,
-0x0372, 0x0372,
-0x0376, 0x0376,
-0x037f, 0x037f,
-0x0386, 0x0386,
-0x0388, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x038f,
-0x0391, 0x03a1,
-0x03a3, 0x03ab,
-0x03c2, 0x03c2,
-0x03cf, 0x03d1,
-0x03d5, 0x03d6,
-0x03d8, 0x03d8,
-0x03da, 0x03da,
-0x03dc, 0x03dc,
-0x03de, 0x03de,
-0x03e0, 0x03e0,
-0x03e2, 0x03e2,
-0x03e4, 0x03e4,
-0x03e6, 0x03e6,
-0x03e8, 0x03e8,
-0x03ea, 0x03ea,
-0x03ec, 0x03ec,
-0x03ee, 0x03ee,
-0x03f0, 0x03f1,
-0x03f4, 0x03f5,
-0x03f7, 0x03f7,
-0x03f9, 0x03fa,
-0x03fd, 0x042f,
-0x0460, 0x0460,
-0x0462, 0x0462,
-0x0464, 0x0464,
-0x0466, 0x0466,
-0x0468, 0x0468,
-0x046a, 0x046a,
-0x046c, 0x046c,
-0x046e, 0x046e,
-0x0470, 0x0470,
-0x0472, 0x0472,
-0x0474, 0x0474,
-0x0476, 0x0476,
-0x0478, 0x0478,
-0x047a, 0x047a,
-0x047c, 0x047c,
-0x047e, 0x047e,
-0x0480, 0x0480,
-0x048a, 0x048a,
-0x048c, 0x048c,
-0x048e, 0x048e,
-0x0490, 0x0490,
-0x0492, 0x0492,
-0x0494, 0x0494,
-0x0496, 0x0496,
-0x0498, 0x0498,
-0x049a, 0x049a,
-0x049c, 0x049c,
-0x049e, 0x049e,
-0x04a0, 0x04a0,
-0x04a2, 0x04a2,
-0x04a4, 0x04a4,
-0x04a6, 0x04a6,
-0x04a8, 0x04a8,
-0x04aa, 0x04aa,
-0x04ac, 0x04ac,
-0x04ae, 0x04ae,
-0x04b0, 0x04b0,
-0x04b2, 0x04b2,
-0x04b4, 0x04b4,
-0x04b6, 0x04b6,
-0x04b8, 0x04b8,
-0x04ba, 0x04ba,
-0x04bc, 0x04bc,
-0x04be, 0x04be,
-0x04c0, 0x04c1,
-0x04c3, 0x04c3,
-0x04c5, 0x04c5,
-0x04c7, 0x04c7,
-0x04c9, 0x04c9,
-0x04cb, 0x04cb,
-0x04cd, 0x04cd,
-0x04d0, 0x04d0,
-0x04d2, 0x04d2,
-0x04d4, 0x04d4,
-0x04d6, 0x04d6,
-0x04d8, 0x04d8,
-0x04da, 0x04da,
-0x04dc, 0x04dc,
-0x04de, 0x04de,
-0x04e0, 0x04e0,
-0x04e2, 0x04e2,
-0x04e4, 0x04e4,
-0x04e6, 0x04e6,
-0x04e8, 0x04e8,
-0x04ea, 0x04ea,
-0x04ec, 0x04ec,
-0x04ee, 0x04ee,
-0x04f0, 0x04f0,
-0x04f2, 0x04f2,
-0x04f4, 0x04f4,
-0x04f6, 0x04f6,
-0x04f8, 0x04f8,
-0x04fa, 0x04fa,
-0x04fc, 0x04fc,
-0x04fe, 0x04fe,
-0x0500, 0x0500,
-0x0502, 0x0502,
-0x0504, 0x0504,
-0x0506, 0x0506,
-0x0508, 0x0508,
-0x050a, 0x050a,
-0x050c, 0x050c,
-0x050e, 0x050e,
-0x0510, 0x0510,
-0x0512, 0x0512,
-0x0514, 0x0514,
-0x0516, 0x0516,
-0x0518, 0x0518,
-0x051a, 0x051a,
-0x051c, 0x051c,
-0x051e, 0x051e,
-0x0520, 0x0520,
-0x0522, 0x0522,
-0x0524, 0x0524,
-0x0526, 0x0526,
-0x0528, 0x0528,
-0x052a, 0x052a,
-0x052c, 0x052c,
-0x052e, 0x052e,
-0x0531, 0x0556,
-0x0587, 0x0587,
-0x10a0, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x13f8, 0x13fd,
-0x1e00, 0x1e00,
-0x1e02, 0x1e02,
-0x1e04, 0x1e04,
-0x1e06, 0x1e06,
-0x1e08, 0x1e08,
-0x1e0a, 0x1e0a,
-0x1e0c, 0x1e0c,
-0x1e0e, 0x1e0e,
-0x1e10, 0x1e10,
-0x1e12, 0x1e12,
-0x1e14, 0x1e14,
-0x1e16, 0x1e16,
-0x1e18, 0x1e18,
-0x1e1a, 0x1e1a,
-0x1e1c, 0x1e1c,
-0x1e1e, 0x1e1e,
-0x1e20, 0x1e20,
-0x1e22, 0x1e22,
-0x1e24, 0x1e24,
-0x1e26, 0x1e26,
-0x1e28, 0x1e28,
-0x1e2a, 0x1e2a,
-0x1e2c, 0x1e2c,
-0x1e2e, 0x1e2e,
-0x1e30, 0x1e30,
-0x1e32, 0x1e32,
-0x1e34, 0x1e34,
-0x1e36, 0x1e36,
-0x1e38, 0x1e38,
-0x1e3a, 0x1e3a,
-0x1e3c, 0x1e3c,
-0x1e3e, 0x1e3e,
-0x1e40, 0x1e40,
-0x1e42, 0x1e42,
-0x1e44, 0x1e44,
-0x1e46, 0x1e46,
-0x1e48, 0x1e48,
-0x1e4a, 0x1e4a,
-0x1e4c, 0x1e4c,
-0x1e4e, 0x1e4e,
-0x1e50, 0x1e50,
-0x1e52, 0x1e52,
-0x1e54, 0x1e54,
-0x1e56, 0x1e56,
-0x1e58, 0x1e58,
-0x1e5a, 0x1e5a,
-0x1e5c, 0x1e5c,
-0x1e5e, 0x1e5e,
-0x1e60, 0x1e60,
-0x1e62, 0x1e62,
-0x1e64, 0x1e64,
-0x1e66, 0x1e66,
-0x1e68, 0x1e68,
-0x1e6a, 0x1e6a,
-0x1e6c, 0x1e6c,
-0x1e6e, 0x1e6e,
-0x1e70, 0x1e70,
-0x1e72, 0x1e72,
-0x1e74, 0x1e74,
-0x1e76, 0x1e76,
-0x1e78, 0x1e78,
-0x1e7a, 0x1e7a,
-0x1e7c, 0x1e7c,
-0x1e7e, 0x1e7e,
-0x1e80, 0x1e80,
-0x1e82, 0x1e82,
-0x1e84, 0x1e84,
-0x1e86, 0x1e86,
-0x1e88, 0x1e88,
-0x1e8a, 0x1e8a,
-0x1e8c, 0x1e8c,
-0x1e8e, 0x1e8e,
-0x1e90, 0x1e90,
-0x1e92, 0x1e92,
-0x1e94, 0x1e94,
-0x1e9a, 0x1e9b,
-0x1e9e, 0x1e9e,
-0x1ea0, 0x1ea0,
-0x1ea2, 0x1ea2,
-0x1ea4, 0x1ea4,
-0x1ea6, 0x1ea6,
-0x1ea8, 0x1ea8,
-0x1eaa, 0x1eaa,
-0x1eac, 0x1eac,
-0x1eae, 0x1eae,
-0x1eb0, 0x1eb0,
-0x1eb2, 0x1eb2,
-0x1eb4, 0x1eb4,
-0x1eb6, 0x1eb6,
-0x1eb8, 0x1eb8,
-0x1eba, 0x1eba,
-0x1ebc, 0x1ebc,
-0x1ebe, 0x1ebe,
-0x1ec0, 0x1ec0,
-0x1ec2, 0x1ec2,
-0x1ec4, 0x1ec4,
-0x1ec6, 0x1ec6,
-0x1ec8, 0x1ec8,
-0x1eca, 0x1eca,
-0x1ecc, 0x1ecc,
-0x1ece, 0x1ece,
-0x1ed0, 0x1ed0,
-0x1ed2, 0x1ed2,
-0x1ed4, 0x1ed4,
-0x1ed6, 0x1ed6,
-0x1ed8, 0x1ed8,
-0x1eda, 0x1eda,
-0x1edc, 0x1edc,
-0x1ede, 0x1ede,
-0x1ee0, 0x1ee0,
-0x1ee2, 0x1ee2,
-0x1ee4, 0x1ee4,
-0x1ee6, 0x1ee6,
-0x1ee8, 0x1ee8,
-0x1eea, 0x1eea,
-0x1eec, 0x1eec,
-0x1eee, 0x1eee,
-0x1ef0, 0x1ef0,
-0x1ef2, 0x1ef2,
-0x1ef4, 0x1ef4,
-0x1ef6, 0x1ef6,
-0x1ef8, 0x1ef8,
-0x1efa, 0x1efa,
-0x1efc, 0x1efc,
-0x1efe, 0x1efe,
-0x1f08, 0x1f0f,
-0x1f18, 0x1f1d,
-0x1f28, 0x1f2f,
-0x1f38, 0x1f3f,
-0x1f48, 0x1f4d,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f5f,
-0x1f68, 0x1f6f,
-0x1f80, 0x1faf,
-0x1fb2, 0x1fb4,
-0x1fb7, 0x1fbc,
-0x1fc2, 0x1fc4,
-0x1fc7, 0x1fcc,
-0x1fd8, 0x1fdb,
-0x1fe8, 0x1fec,
-0x1ff2, 0x1ff4,
-0x1ff7, 0x1ffc,
-0x2126, 0x2126,
-0x212a, 0x212b,
-0x2132, 0x2132,
-0x2160, 0x216f,
-0x2183, 0x2183,
-0x24b6, 0x24cf,
-0x2c00, 0x2c2e,
-0x2c60, 0x2c60,
-0x2c62, 0x2c64,
-0x2c67, 0x2c67,
-0x2c69, 0x2c69,
-0x2c6b, 0x2c6b,
-0x2c6d, 0x2c70,
-0x2c72, 0x2c72,
-0x2c75, 0x2c75,
-0x2c7e, 0x2c80,
-0x2c82, 0x2c82,
-0x2c84, 0x2c84,
-0x2c86, 0x2c86,
-0x2c88, 0x2c88,
-0x2c8a, 0x2c8a,
-0x2c8c, 0x2c8c,
-0x2c8e, 0x2c8e,
-0x2c90, 0x2c90,
-0x2c92, 0x2c92,
-0x2c94, 0x2c94,
-0x2c96, 0x2c96,
-0x2c98, 0x2c98,
-0x2c9a, 0x2c9a,
-0x2c9c, 0x2c9c,
-0x2c9e, 0x2c9e,
-0x2ca0, 0x2ca0,
-0x2ca2, 0x2ca2,
-0x2ca4, 0x2ca4,
-0x2ca6, 0x2ca6,
-0x2ca8, 0x2ca8,
-0x2caa, 0x2caa,
-0x2cac, 0x2cac,
-0x2cae, 0x2cae,
-0x2cb0, 0x2cb0,
-0x2cb2, 0x2cb2,
-0x2cb4, 0x2cb4,
-0x2cb6, 0x2cb6,
-0x2cb8, 0x2cb8,
-0x2cba, 0x2cba,
-0x2cbc, 0x2cbc,
-0x2cbe, 0x2cbe,
-0x2cc0, 0x2cc0,
-0x2cc2, 0x2cc2,
-0x2cc4, 0x2cc4,
-0x2cc6, 0x2cc6,
-0x2cc8, 0x2cc8,
-0x2cca, 0x2cca,
-0x2ccc, 0x2ccc,
-0x2cce, 0x2cce,
-0x2cd0, 0x2cd0,
-0x2cd2, 0x2cd2,
-0x2cd4, 0x2cd4,
-0x2cd6, 0x2cd6,
-0x2cd8, 0x2cd8,
-0x2cda, 0x2cda,
-0x2cdc, 0x2cdc,
-0x2cde, 0x2cde,
-0x2ce0, 0x2ce0,
-0x2ce2, 0x2ce2,
-0x2ceb, 0x2ceb,
-0x2ced, 0x2ced,
-0x2cf2, 0x2cf2,
-0xa640, 0xa640,
-0xa642, 0xa642,
-0xa644, 0xa644,
-0xa646, 0xa646,
-0xa648, 0xa648,
-0xa64a, 0xa64a,
-0xa64c, 0xa64c,
-0xa64e, 0xa64e,
-0xa650, 0xa650,
-0xa652, 0xa652,
-0xa654, 0xa654,
-0xa656, 0xa656,
-0xa658, 0xa658,
-0xa65a, 0xa65a,
-0xa65c, 0xa65c,
-0xa65e, 0xa65e,
-0xa660, 0xa660,
-0xa662, 0xa662,
-0xa664, 0xa664,
-0xa666, 0xa666,
-0xa668, 0xa668,
-0xa66a, 0xa66a,
-0xa66c, 0xa66c,
-0xa680, 0xa680,
-0xa682, 0xa682,
-0xa684, 0xa684,
-0xa686, 0xa686,
-0xa688, 0xa688,
-0xa68a, 0xa68a,
-0xa68c, 0xa68c,
-0xa68e, 0xa68e,
-0xa690, 0xa690,
-0xa692, 0xa692,
-0xa694, 0xa694,
-0xa696, 0xa696,
-0xa698, 0xa698,
-0xa69a, 0xa69a,
-0xa722, 0xa722,
-0xa724, 0xa724,
-0xa726, 0xa726,
-0xa728, 0xa728,
-0xa72a, 0xa72a,
-0xa72c, 0xa72c,
-0xa72e, 0xa72e,
-0xa732, 0xa732,
-0xa734, 0xa734,
-0xa736, 0xa736,
-0xa738, 0xa738,
-0xa73a, 0xa73a,
-0xa73c, 0xa73c,
-0xa73e, 0xa73e,
-0xa740, 0xa740,
-0xa742, 0xa742,
-0xa744, 0xa744,
-0xa746, 0xa746,
-0xa748, 0xa748,
-0xa74a, 0xa74a,
-0xa74c, 0xa74c,
-0xa74e, 0xa74e,
-0xa750, 0xa750,
-0xa752, 0xa752,
-0xa754, 0xa754,
-0xa756, 0xa756,
-0xa758, 0xa758,
-0xa75a, 0xa75a,
-0xa75c, 0xa75c,
-0xa75e, 0xa75e,
-0xa760, 0xa760,
-0xa762, 0xa762,
-0xa764, 0xa764,
-0xa766, 0xa766,
-0xa768, 0xa768,
-0xa76a, 0xa76a,
-0xa76c, 0xa76c,
-0xa76e, 0xa76e,
-0xa779, 0xa779,
-0xa77b, 0xa77b,
-0xa77d, 0xa77e,
-0xa780, 0xa780,
-0xa782, 0xa782,
-0xa784, 0xa784,
-0xa786, 0xa786,
-0xa78b, 0xa78b,
-0xa78d, 0xa78d,
-0xa790, 0xa790,
-0xa792, 0xa792,
-0xa796, 0xa796,
-0xa798, 0xa798,
-0xa79a, 0xa79a,
-0xa79c, 0xa79c,
-0xa79e, 0xa79e,
-0xa7a0, 0xa7a0,
-0xa7a2, 0xa7a2,
-0xa7a4, 0xa7a4,
-0xa7a6, 0xa7a6,
-0xa7a8, 0xa7a8,
-0xa7aa, 0xa7ad,
-0xa7b0, 0xa7b4,
-0xa7b6, 0xa7b6,
-0xab70, 0xabbf,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xff21, 0xff3a,
-0x10400, 0x10427,
-0x10c80, 0x10cb2,
-0x118a0, 0x118bf,
-}; /* END of CR_Changes_When_Casefolded */
+CR_Tai_Viet[] = { 2,
+0xaa80, 0xaac2,
+0xaadb, 0xaadf,
+}; /* END of CR_Tai_Viet */
-/* PROPERTY: 'Changes_When_Casemapped': Derived Property */
+/* PROPERTY: 'Takri': Script */
static const OnigCodePoint
-CR_Changes_When_Casemapped[] = { 113,
-0x0041, 0x005a,
-0x0061, 0x007a,
-0x00b5, 0x00b5,
-0x00c0, 0x00d6,
-0x00d8, 0x00f6,
-0x00f8, 0x0137,
-0x0139, 0x018c,
-0x018e, 0x019a,
-0x019c, 0x01a9,
-0x01ac, 0x01b9,
-0x01bc, 0x01bd,
-0x01bf, 0x01bf,
-0x01c4, 0x0220,
-0x0222, 0x0233,
-0x023a, 0x0254,
-0x0256, 0x0257,
-0x0259, 0x0259,
-0x025b, 0x025c,
-0x0260, 0x0261,
-0x0263, 0x0263,
-0x0265, 0x0266,
-0x0268, 0x0269,
-0x026b, 0x026c,
-0x026f, 0x026f,
-0x0271, 0x0272,
-0x0275, 0x0275,
-0x027d, 0x027d,
-0x0280, 0x0280,
-0x0283, 0x0283,
-0x0287, 0x028c,
-0x0292, 0x0292,
-0x029d, 0x029e,
-0x0345, 0x0345,
-0x0370, 0x0373,
-0x0376, 0x0377,
-0x037b, 0x037d,
-0x037f, 0x037f,
-0x0386, 0x0386,
-0x0388, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x03a1,
-0x03a3, 0x03d1,
-0x03d5, 0x03f5,
-0x03f7, 0x03fb,
-0x03fd, 0x0481,
-0x048a, 0x052f,
-0x0531, 0x0556,
-0x0561, 0x0587,
-0x10a0, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x13a0, 0x13f5,
-0x13f8, 0x13fd,
-0x1d79, 0x1d79,
-0x1d7d, 0x1d7d,
-0x1e00, 0x1e9b,
-0x1e9e, 0x1e9e,
-0x1ea0, 0x1f15,
-0x1f18, 0x1f1d,
-0x1f20, 0x1f45,
-0x1f48, 0x1f4d,
-0x1f50, 0x1f57,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f7d,
-0x1f80, 0x1fb4,
-0x1fb6, 0x1fbc,
-0x1fbe, 0x1fbe,
-0x1fc2, 0x1fc4,
-0x1fc6, 0x1fcc,
-0x1fd0, 0x1fd3,
-0x1fd6, 0x1fdb,
-0x1fe0, 0x1fec,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffc,
-0x2126, 0x2126,
-0x212a, 0x212b,
-0x2132, 0x2132,
-0x214e, 0x214e,
-0x2160, 0x217f,
-0x2183, 0x2184,
-0x24b6, 0x24e9,
-0x2c00, 0x2c2e,
-0x2c30, 0x2c5e,
-0x2c60, 0x2c70,
-0x2c72, 0x2c73,
-0x2c75, 0x2c76,
-0x2c7e, 0x2ce3,
-0x2ceb, 0x2cee,
-0x2cf2, 0x2cf3,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-0xa640, 0xa66d,
-0xa680, 0xa69b,
-0xa722, 0xa72f,
-0xa732, 0xa76f,
-0xa779, 0xa787,
-0xa78b, 0xa78d,
-0xa790, 0xa793,
-0xa796, 0xa7ad,
-0xa7b0, 0xa7b7,
-0xab53, 0xab53,
-0xab70, 0xabbf,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xff21, 0xff3a,
-0xff41, 0xff5a,
-0x10400, 0x1044f,
-0x10c80, 0x10cb2,
-0x10cc0, 0x10cf2,
-0x118a0, 0x118df,
-}; /* END of CR_Changes_When_Casemapped */
+CR_Takri[] = { 2,
+0x11680, 0x116b7,
+0x116c0, 0x116c9,
+}; /* END of CR_Takri */
-/* PROPERTY: 'ID_Start': Derived Property */
+/* PROPERTY: 'Tamil': Script */
static const OnigCodePoint
-CR_ID_Start[] = { 555,
-0x0041, 0x005a,
-0x0061, 0x007a,
-0x00aa, 0x00aa,
-0x00b5, 0x00b5,
-0x00ba, 0x00ba,
-0x00c0, 0x00d6,
-0x00d8, 0x00f6,
-0x00f8, 0x02c1,
-0x02c6, 0x02d1,
-0x02e0, 0x02e4,
-0x02ec, 0x02ec,
-0x02ee, 0x02ee,
-0x0370, 0x0374,
-0x0376, 0x0377,
-0x037a, 0x037d,
-0x037f, 0x037f,
-0x0386, 0x0386,
-0x0388, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x03a1,
-0x03a3, 0x03f5,
-0x03f7, 0x0481,
-0x048a, 0x052f,
-0x0531, 0x0556,
-0x0559, 0x0559,
-0x0561, 0x0587,
-0x05d0, 0x05ea,
-0x05f0, 0x05f2,
-0x0620, 0x064a,
-0x066e, 0x066f,
-0x0671, 0x06d3,
-0x06d5, 0x06d5,
-0x06e5, 0x06e6,
-0x06ee, 0x06ef,
-0x06fa, 0x06fc,
-0x06ff, 0x06ff,
-0x0710, 0x0710,
-0x0712, 0x072f,
-0x074d, 0x07a5,
-0x07b1, 0x07b1,
-0x07ca, 0x07ea,
-0x07f4, 0x07f5,
-0x07fa, 0x07fa,
-0x0800, 0x0815,
-0x081a, 0x081a,
-0x0824, 0x0824,
-0x0828, 0x0828,
-0x0840, 0x0858,
-0x08a0, 0x08b4,
-0x0904, 0x0939,
-0x093d, 0x093d,
-0x0950, 0x0950,
-0x0958, 0x0961,
-0x0971, 0x0980,
-0x0985, 0x098c,
-0x098f, 0x0990,
-0x0993, 0x09a8,
-0x09aa, 0x09b0,
-0x09b2, 0x09b2,
-0x09b6, 0x09b9,
-0x09bd, 0x09bd,
-0x09ce, 0x09ce,
-0x09dc, 0x09dd,
-0x09df, 0x09e1,
-0x09f0, 0x09f1,
-0x0a05, 0x0a0a,
-0x0a0f, 0x0a10,
-0x0a13, 0x0a28,
-0x0a2a, 0x0a30,
-0x0a32, 0x0a33,
-0x0a35, 0x0a36,
-0x0a38, 0x0a39,
-0x0a59, 0x0a5c,
-0x0a5e, 0x0a5e,
-0x0a72, 0x0a74,
-0x0a85, 0x0a8d,
-0x0a8f, 0x0a91,
-0x0a93, 0x0aa8,
-0x0aaa, 0x0ab0,
-0x0ab2, 0x0ab3,
-0x0ab5, 0x0ab9,
-0x0abd, 0x0abd,
-0x0ad0, 0x0ad0,
-0x0ae0, 0x0ae1,
-0x0af9, 0x0af9,
-0x0b05, 0x0b0c,
-0x0b0f, 0x0b10,
-0x0b13, 0x0b28,
-0x0b2a, 0x0b30,
-0x0b32, 0x0b33,
-0x0b35, 0x0b39,
-0x0b3d, 0x0b3d,
-0x0b5c, 0x0b5d,
-0x0b5f, 0x0b61,
-0x0b71, 0x0b71,
-0x0b83, 0x0b83,
+CR_Tamil[] = { 16,
+0x0b82, 0x0b83,
0x0b85, 0x0b8a,
0x0b8e, 0x0b90,
0x0b92, 0x0b95,
@@ -14232,461 +18712,838 @@ CR_ID_Start[] = { 555,
0x0ba3, 0x0ba4,
0x0ba8, 0x0baa,
0x0bae, 0x0bb9,
+0x0bbe, 0x0bc2,
+0x0bc6, 0x0bc8,
+0x0bca, 0x0bcd,
0x0bd0, 0x0bd0,
+0x0bd7, 0x0bd7,
+0x0be6, 0x0bfa,
+}; /* END of CR_Tamil */
+
+/* PROPERTY: 'Telugu': Script */
+static const OnigCodePoint
+CR_Telugu[] = { 13,
+0x0c00, 0x0c03,
0x0c05, 0x0c0c,
0x0c0e, 0x0c10,
0x0c12, 0x0c28,
0x0c2a, 0x0c39,
-0x0c3d, 0x0c3d,
+0x0c3d, 0x0c44,
+0x0c46, 0x0c48,
+0x0c4a, 0x0c4d,
+0x0c55, 0x0c56,
0x0c58, 0x0c5a,
-0x0c60, 0x0c61,
-0x0c85, 0x0c8c,
-0x0c8e, 0x0c90,
-0x0c92, 0x0ca8,
-0x0caa, 0x0cb3,
-0x0cb5, 0x0cb9,
-0x0cbd, 0x0cbd,
-0x0cde, 0x0cde,
-0x0ce0, 0x0ce1,
-0x0cf1, 0x0cf2,
-0x0d05, 0x0d0c,
-0x0d0e, 0x0d10,
-0x0d12, 0x0d3a,
-0x0d3d, 0x0d3d,
-0x0d4e, 0x0d4e,
-0x0d5f, 0x0d61,
-0x0d7a, 0x0d7f,
-0x0d85, 0x0d96,
-0x0d9a, 0x0db1,
-0x0db3, 0x0dbb,
-0x0dbd, 0x0dbd,
-0x0dc0, 0x0dc6,
-0x0e01, 0x0e30,
-0x0e32, 0x0e33,
-0x0e40, 0x0e46,
-0x0e81, 0x0e82,
-0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
-0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
-0x0eb2, 0x0eb3,
-0x0ebd, 0x0ebd,
-0x0ec0, 0x0ec4,
-0x0ec6, 0x0ec6,
-0x0edc, 0x0edf,
-0x0f00, 0x0f00,
-0x0f40, 0x0f47,
+0x0c60, 0x0c63,
+0x0c66, 0x0c6f,
+0x0c78, 0x0c7f,
+}; /* END of CR_Telugu */
+
+/* PROPERTY: 'Terminal_Punctuation': Binary Property */
+static const OnigCodePoint
+CR_Terminal_Punctuation[] = { 90,
+0x0021, 0x0021,
+0x002c, 0x002c,
+0x002e, 0x002e,
+0x003a, 0x003b,
+0x003f, 0x003f,
+0x037e, 0x037e,
+0x0387, 0x0387,
+0x0589, 0x0589,
+0x05c3, 0x05c3,
+0x060c, 0x060c,
+0x061b, 0x061b,
+0x061f, 0x061f,
+0x06d4, 0x06d4,
+0x0700, 0x070a,
+0x070c, 0x070c,
+0x07f8, 0x07f9,
+0x0830, 0x083e,
+0x085e, 0x085e,
+0x0964, 0x0965,
+0x0e5a, 0x0e5b,
+0x0f08, 0x0f08,
+0x0f0d, 0x0f12,
+0x104a, 0x104b,
+0x1361, 0x1368,
+0x166d, 0x166e,
+0x16eb, 0x16ed,
+0x1735, 0x1736,
+0x17d4, 0x17d6,
+0x17da, 0x17da,
+0x1802, 0x1805,
+0x1808, 0x1809,
+0x1944, 0x1945,
+0x1aa8, 0x1aab,
+0x1b5a, 0x1b5b,
+0x1b5d, 0x1b5f,
+0x1c3b, 0x1c3f,
+0x1c7e, 0x1c7f,
+0x203c, 0x203d,
+0x2047, 0x2049,
+0x2e2e, 0x2e2e,
+0x2e3c, 0x2e3c,
+0x2e41, 0x2e41,
+0x3001, 0x3002,
+0xa4fe, 0xa4ff,
+0xa60d, 0xa60f,
+0xa6f3, 0xa6f7,
+0xa876, 0xa877,
+0xa8ce, 0xa8cf,
+0xa92f, 0xa92f,
+0xa9c7, 0xa9c9,
+0xaa5d, 0xaa5f,
+0xaadf, 0xaadf,
+0xaaf0, 0xaaf1,
+0xabeb, 0xabeb,
+0xfe50, 0xfe52,
+0xfe54, 0xfe57,
+0xff01, 0xff01,
+0xff0c, 0xff0c,
+0xff0e, 0xff0e,
+0xff1a, 0xff1b,
+0xff1f, 0xff1f,
+0xff61, 0xff61,
+0xff64, 0xff64,
+0x1039f, 0x1039f,
+0x103d0, 0x103d0,
+0x10857, 0x10857,
+0x1091f, 0x1091f,
+0x10a56, 0x10a57,
+0x10af0, 0x10af5,
+0x10b3a, 0x10b3f,
+0x10b99, 0x10b9c,
+0x11047, 0x1104d,
+0x110be, 0x110c1,
+0x11141, 0x11143,
+0x111c5, 0x111c6,
+0x111cd, 0x111cd,
+0x111de, 0x111df,
+0x11238, 0x1123c,
+0x112a9, 0x112a9,
+0x115c2, 0x115c5,
+0x115c9, 0x115d7,
+0x11641, 0x11642,
+0x1173c, 0x1173e,
+0x12470, 0x12474,
+0x16a6e, 0x16a6f,
+0x16af5, 0x16af5,
+0x16b37, 0x16b39,
+0x16b44, 0x16b44,
+0x1bc9f, 0x1bc9f,
+0x1da87, 0x1da8a,
+}; /* END of CR_Terminal_Punctuation */
+
+/* PROPERTY: 'Thaana': Script */
+static const OnigCodePoint
+CR_Thaana[] = { 1,
+0x0780, 0x07b1,
+}; /* END of CR_Thaana */
+
+/* PROPERTY: 'Thai': Script */
+static const OnigCodePoint
+CR_Thai[] = { 2,
+0x0e01, 0x0e3a,
+0x0e40, 0x0e5b,
+}; /* END of CR_Thai */
+
+/* PROPERTY: 'Tibetan': Script */
+static const OnigCodePoint
+CR_Tibetan[] = { 7,
+0x0f00, 0x0f47,
0x0f49, 0x0f6c,
-0x0f88, 0x0f8c,
-0x1000, 0x102a,
-0x103f, 0x103f,
-0x1050, 0x1055,
-0x105a, 0x105d,
-0x1061, 0x1061,
-0x1065, 0x1066,
-0x106e, 0x1070,
-0x1075, 0x1081,
-0x108e, 0x108e,
-0x10a0, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x10d0, 0x10fa,
-0x10fc, 0x1248,
-0x124a, 0x124d,
-0x1250, 0x1256,
-0x1258, 0x1258,
-0x125a, 0x125d,
-0x1260, 0x1288,
-0x128a, 0x128d,
-0x1290, 0x12b0,
-0x12b2, 0x12b5,
-0x12b8, 0x12be,
-0x12c0, 0x12c0,
-0x12c2, 0x12c5,
-0x12c8, 0x12d6,
-0x12d8, 0x1310,
-0x1312, 0x1315,
-0x1318, 0x135a,
-0x1380, 0x138f,
-0x13a0, 0x13f5,
-0x13f8, 0x13fd,
-0x1401, 0x166c,
-0x166f, 0x167f,
-0x1681, 0x169a,
-0x16a0, 0x16ea,
-0x16ee, 0x16f8,
-0x1700, 0x170c,
-0x170e, 0x1711,
-0x1720, 0x1731,
-0x1740, 0x1751,
-0x1760, 0x176c,
-0x176e, 0x1770,
-0x1780, 0x17b3,
-0x17d7, 0x17d7,
-0x17dc, 0x17dc,
-0x1820, 0x1877,
-0x1880, 0x18a8,
-0x18aa, 0x18aa,
-0x18b0, 0x18f5,
-0x1900, 0x191e,
-0x1950, 0x196d,
-0x1970, 0x1974,
-0x1980, 0x19ab,
-0x19b0, 0x19c9,
-0x1a00, 0x1a16,
-0x1a20, 0x1a54,
-0x1aa7, 0x1aa7,
-0x1b05, 0x1b33,
-0x1b45, 0x1b4b,
-0x1b83, 0x1ba0,
-0x1bae, 0x1baf,
-0x1bba, 0x1be5,
-0x1c00, 0x1c23,
-0x1c4d, 0x1c4f,
-0x1c5a, 0x1c7d,
-0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
-0x1cf5, 0x1cf6,
-0x1d00, 0x1dbf,
-0x1e00, 0x1f15,
-0x1f18, 0x1f1d,
-0x1f20, 0x1f45,
-0x1f48, 0x1f4d,
-0x1f50, 0x1f57,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f7d,
-0x1f80, 0x1fb4,
-0x1fb6, 0x1fbc,
-0x1fbe, 0x1fbe,
-0x1fc2, 0x1fc4,
-0x1fc6, 0x1fcc,
-0x1fd0, 0x1fd3,
-0x1fd6, 0x1fdb,
-0x1fe0, 0x1fec,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffc,
-0x2071, 0x2071,
-0x207f, 0x207f,
-0x2090, 0x209c,
-0x2102, 0x2102,
-0x2107, 0x2107,
-0x210a, 0x2113,
-0x2115, 0x2115,
-0x2118, 0x211d,
-0x2124, 0x2124,
-0x2126, 0x2126,
-0x2128, 0x2128,
-0x212a, 0x2139,
-0x213c, 0x213f,
-0x2145, 0x2149,
-0x214e, 0x214e,
-0x2160, 0x2188,
-0x2c00, 0x2c2e,
-0x2c30, 0x2c5e,
-0x2c60, 0x2ce4,
-0x2ceb, 0x2cee,
-0x2cf2, 0x2cf3,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
+0x0f71, 0x0f97,
+0x0f99, 0x0fbc,
+0x0fbe, 0x0fcc,
+0x0fce, 0x0fd4,
+0x0fd9, 0x0fda,
+}; /* END of CR_Tibetan */
+
+/* PROPERTY: 'Tifinagh': Script */
+static const OnigCodePoint
+CR_Tifinagh[] = { 3,
0x2d30, 0x2d67,
-0x2d6f, 0x2d6f,
-0x2d80, 0x2d96,
-0x2da0, 0x2da6,
-0x2da8, 0x2dae,
-0x2db0, 0x2db6,
-0x2db8, 0x2dbe,
-0x2dc0, 0x2dc6,
-0x2dc8, 0x2dce,
-0x2dd0, 0x2dd6,
-0x2dd8, 0x2dde,
-0x3005, 0x3007,
-0x3021, 0x3029,
-0x3031, 0x3035,
-0x3038, 0x303c,
-0x3041, 0x3096,
-0x309b, 0x309f,
-0x30a1, 0x30fa,
-0x30fc, 0x30ff,
-0x3105, 0x312d,
-0x3131, 0x318e,
-0x31a0, 0x31ba,
-0x31f0, 0x31ff,
+0x2d6f, 0x2d70,
+0x2d7f, 0x2d7f,
+}; /* END of CR_Tifinagh */
+
+/* PROPERTY: 'Tirhuta': Script */
+static const OnigCodePoint
+CR_Tirhuta[] = { 2,
+0x11480, 0x114c7,
+0x114d0, 0x114d9,
+}; /* END of CR_Tirhuta */
+
+/* PROPERTY: 'Ugaritic': Script */
+static const OnigCodePoint
+CR_Ugaritic[] = { 2,
+0x10380, 0x1039d,
+0x1039f, 0x1039f,
+}; /* END of CR_Ugaritic */
+
+/* PROPERTY: 'Unified_Ideograph': Binary Property */
+static const OnigCodePoint
+CR_Unified_Ideograph[] = { 13,
0x3400, 0x4db5,
0x4e00, 0x9fd5,
-0xa000, 0xa48c,
-0xa4d0, 0xa4fd,
-0xa500, 0xa60c,
-0xa610, 0xa61f,
-0xa62a, 0xa62b,
-0xa640, 0xa66e,
-0xa67f, 0xa69d,
-0xa6a0, 0xa6ef,
-0xa717, 0xa71f,
-0xa722, 0xa788,
-0xa78b, 0xa7ad,
-0xa7b0, 0xa7b7,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa822,
-0xa840, 0xa873,
-0xa882, 0xa8b3,
-0xa8f2, 0xa8f7,
-0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fd,
-0xa90a, 0xa925,
-0xa930, 0xa946,
-0xa960, 0xa97c,
-0xa984, 0xa9b2,
-0xa9cf, 0xa9cf,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9ef,
-0xa9fa, 0xa9fe,
-0xaa00, 0xaa28,
-0xaa40, 0xaa42,
-0xaa44, 0xaa4b,
-0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaaaf,
-0xaab1, 0xaab1,
-0xaab5, 0xaab6,
-0xaab9, 0xaabd,
-0xaac0, 0xaac0,
-0xaac2, 0xaac2,
-0xaadb, 0xaadd,
-0xaae0, 0xaaea,
-0xaaf2, 0xaaf4,
-0xab01, 0xab06,
-0xab09, 0xab0e,
-0xab11, 0xab16,
-0xab20, 0xab26,
-0xab28, 0xab2e,
-0xab30, 0xab5a,
-0xab5c, 0xab65,
-0xab70, 0xabe2,
-0xac00, 0xd7a3,
-0xd7b0, 0xd7c6,
-0xd7cb, 0xd7fb,
-0xf900, 0xfa6d,
-0xfa70, 0xfad9,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xfb1d, 0xfb1d,
-0xfb1f, 0xfb28,
-0xfb2a, 0xfb36,
-0xfb38, 0xfb3c,
-0xfb3e, 0xfb3e,
-0xfb40, 0xfb41,
-0xfb43, 0xfb44,
-0xfb46, 0xfbb1,
-0xfbd3, 0xfd3d,
-0xfd50, 0xfd8f,
-0xfd92, 0xfdc7,
-0xfdf0, 0xfdfb,
-0xfe70, 0xfe74,
-0xfe76, 0xfefc,
-0xff21, 0xff3a,
-0xff41, 0xff5a,
-0xff66, 0xffbe,
-0xffc2, 0xffc7,
-0xffca, 0xffcf,
-0xffd2, 0xffd7,
-0xffda, 0xffdc,
-0x10000, 0x1000b,
-0x1000d, 0x10026,
-0x10028, 0x1003a,
-0x1003c, 0x1003d,
-0x1003f, 0x1004d,
-0x10050, 0x1005d,
-0x10080, 0x100fa,
-0x10140, 0x10174,
-0x10280, 0x1029c,
-0x102a0, 0x102d0,
-0x10300, 0x1031f,
-0x10330, 0x1034a,
-0x10350, 0x10375,
-0x10380, 0x1039d,
-0x103a0, 0x103c3,
-0x103c8, 0x103cf,
-0x103d1, 0x103d5,
-0x10400, 0x1049d,
-0x10500, 0x10527,
-0x10530, 0x10563,
-0x10600, 0x10736,
-0x10740, 0x10755,
-0x10760, 0x10767,
-0x10800, 0x10805,
-0x10808, 0x10808,
-0x1080a, 0x10835,
-0x10837, 0x10838,
-0x1083c, 0x1083c,
-0x1083f, 0x10855,
-0x10860, 0x10876,
-0x10880, 0x1089e,
-0x108e0, 0x108f2,
-0x108f4, 0x108f5,
-0x10900, 0x10915,
-0x10920, 0x10939,
-0x10980, 0x109b7,
-0x109be, 0x109bf,
-0x10a00, 0x10a00,
-0x10a10, 0x10a13,
-0x10a15, 0x10a17,
-0x10a19, 0x10a33,
-0x10a60, 0x10a7c,
-0x10a80, 0x10a9c,
-0x10ac0, 0x10ac7,
-0x10ac9, 0x10ae4,
-0x10b00, 0x10b35,
-0x10b40, 0x10b55,
-0x10b60, 0x10b72,
-0x10b80, 0x10b91,
-0x10c00, 0x10c48,
-0x10c80, 0x10cb2,
-0x10cc0, 0x10cf2,
-0x11003, 0x11037,
-0x11083, 0x110af,
-0x110d0, 0x110e8,
-0x11103, 0x11126,
-0x11150, 0x11172,
-0x11176, 0x11176,
-0x11183, 0x111b2,
-0x111c1, 0x111c4,
-0x111da, 0x111da,
-0x111dc, 0x111dc,
-0x11200, 0x11211,
-0x11213, 0x1122b,
-0x11280, 0x11286,
-0x11288, 0x11288,
-0x1128a, 0x1128d,
-0x1128f, 0x1129d,
-0x1129f, 0x112a8,
-0x112b0, 0x112de,
-0x11305, 0x1130c,
-0x1130f, 0x11310,
-0x11313, 0x11328,
-0x1132a, 0x11330,
-0x11332, 0x11333,
-0x11335, 0x11339,
-0x1133d, 0x1133d,
-0x11350, 0x11350,
-0x1135d, 0x11361,
-0x11480, 0x114af,
-0x114c4, 0x114c5,
-0x114c7, 0x114c7,
-0x11580, 0x115ae,
-0x115d8, 0x115db,
-0x11600, 0x1162f,
-0x11644, 0x11644,
-0x11680, 0x116aa,
-0x11700, 0x11719,
-0x118a0, 0x118df,
-0x118ff, 0x118ff,
-0x11ac0, 0x11af8,
-0x12000, 0x12399,
-0x12400, 0x1246e,
-0x12480, 0x12543,
-0x13000, 0x1342e,
-0x14400, 0x14646,
-0x16800, 0x16a38,
-0x16a40, 0x16a5e,
-0x16ad0, 0x16aed,
-0x16b00, 0x16b2f,
-0x16b40, 0x16b43,
-0x16b63, 0x16b77,
-0x16b7d, 0x16b8f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f50,
-0x16f93, 0x16f9f,
-0x1b000, 0x1b001,
-0x1bc00, 0x1bc6a,
-0x1bc70, 0x1bc7c,
-0x1bc80, 0x1bc88,
-0x1bc90, 0x1bc99,
-0x1d400, 0x1d454,
-0x1d456, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d51e, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d6c0,
-0x1d6c2, 0x1d6da,
-0x1d6dc, 0x1d6fa,
-0x1d6fc, 0x1d714,
-0x1d716, 0x1d734,
-0x1d736, 0x1d74e,
-0x1d750, 0x1d76e,
-0x1d770, 0x1d788,
-0x1d78a, 0x1d7a8,
-0x1d7aa, 0x1d7c2,
-0x1d7c4, 0x1d7cb,
-0x1e800, 0x1e8c4,
-0x1ee00, 0x1ee03,
-0x1ee05, 0x1ee1f,
-0x1ee21, 0x1ee22,
-0x1ee24, 0x1ee24,
-0x1ee27, 0x1ee27,
-0x1ee29, 0x1ee32,
-0x1ee34, 0x1ee37,
-0x1ee39, 0x1ee39,
-0x1ee3b, 0x1ee3b,
-0x1ee42, 0x1ee42,
-0x1ee47, 0x1ee47,
-0x1ee49, 0x1ee49,
-0x1ee4b, 0x1ee4b,
-0x1ee4d, 0x1ee4f,
-0x1ee51, 0x1ee52,
-0x1ee54, 0x1ee54,
-0x1ee57, 0x1ee57,
-0x1ee59, 0x1ee59,
-0x1ee5b, 0x1ee5b,
-0x1ee5d, 0x1ee5d,
-0x1ee5f, 0x1ee5f,
-0x1ee61, 0x1ee62,
-0x1ee64, 0x1ee64,
-0x1ee67, 0x1ee6a,
-0x1ee6c, 0x1ee72,
-0x1ee74, 0x1ee77,
-0x1ee79, 0x1ee7c,
-0x1ee7e, 0x1ee7e,
-0x1ee80, 0x1ee89,
-0x1ee8b, 0x1ee9b,
-0x1eea1, 0x1eea3,
-0x1eea5, 0x1eea9,
-0x1eeab, 0x1eebb,
+0xfa0e, 0xfa0f,
+0xfa11, 0xfa11,
+0xfa13, 0xfa14,
+0xfa1f, 0xfa1f,
+0xfa21, 0xfa21,
+0xfa23, 0xfa24,
+0xfa27, 0xfa29,
0x20000, 0x2a6d6,
0x2a700, 0x2b734,
0x2b740, 0x2b81d,
0x2b820, 0x2cea1,
-0x2f800, 0x2fa1d,
-}; /* END of CR_ID_Start */
+}; /* END of CR_Unified_Ideograph */
-/* PROPERTY: 'ID_Continue': Derived Property */
+/* PROPERTY: 'Unknown': Script */
static const OnigCodePoint
-CR_ID_Continue[] = { 651,
+CR_Unknown[] = { 611,
+0x0378, 0x0379,
+0x0380, 0x0383,
+0x038b, 0x038b,
+0x038d, 0x038d,
+0x03a2, 0x03a2,
+0x0530, 0x0530,
+0x0557, 0x0558,
+0x0560, 0x0560,
+0x0588, 0x0588,
+0x058b, 0x058c,
+0x0590, 0x0590,
+0x05c8, 0x05cf,
+0x05eb, 0x05ef,
+0x05f5, 0x05ff,
+0x061d, 0x061d,
+0x070e, 0x070e,
+0x074b, 0x074c,
+0x07b2, 0x07bf,
+0x07fb, 0x07ff,
+0x082e, 0x082f,
+0x083f, 0x083f,
+0x085c, 0x085d,
+0x085f, 0x089f,
+0x08b5, 0x08e2,
+0x0984, 0x0984,
+0x098d, 0x098e,
+0x0991, 0x0992,
+0x09a9, 0x09a9,
+0x09b1, 0x09b1,
+0x09b3, 0x09b5,
+0x09ba, 0x09bb,
+0x09c5, 0x09c6,
+0x09c9, 0x09ca,
+0x09cf, 0x09d6,
+0x09d8, 0x09db,
+0x09de, 0x09de,
+0x09e4, 0x09e5,
+0x09fc, 0x0a00,
+0x0a04, 0x0a04,
+0x0a0b, 0x0a0e,
+0x0a11, 0x0a12,
+0x0a29, 0x0a29,
+0x0a31, 0x0a31,
+0x0a34, 0x0a34,
+0x0a37, 0x0a37,
+0x0a3a, 0x0a3b,
+0x0a3d, 0x0a3d,
+0x0a43, 0x0a46,
+0x0a49, 0x0a4a,
+0x0a4e, 0x0a50,
+0x0a52, 0x0a58,
+0x0a5d, 0x0a5d,
+0x0a5f, 0x0a65,
+0x0a76, 0x0a80,
+0x0a84, 0x0a84,
+0x0a8e, 0x0a8e,
+0x0a92, 0x0a92,
+0x0aa9, 0x0aa9,
+0x0ab1, 0x0ab1,
+0x0ab4, 0x0ab4,
+0x0aba, 0x0abb,
+0x0ac6, 0x0ac6,
+0x0aca, 0x0aca,
+0x0ace, 0x0acf,
+0x0ad1, 0x0adf,
+0x0ae4, 0x0ae5,
+0x0af2, 0x0af8,
+0x0afa, 0x0b00,
+0x0b04, 0x0b04,
+0x0b0d, 0x0b0e,
+0x0b11, 0x0b12,
+0x0b29, 0x0b29,
+0x0b31, 0x0b31,
+0x0b34, 0x0b34,
+0x0b3a, 0x0b3b,
+0x0b45, 0x0b46,
+0x0b49, 0x0b4a,
+0x0b4e, 0x0b55,
+0x0b58, 0x0b5b,
+0x0b5e, 0x0b5e,
+0x0b64, 0x0b65,
+0x0b78, 0x0b81,
+0x0b84, 0x0b84,
+0x0b8b, 0x0b8d,
+0x0b91, 0x0b91,
+0x0b96, 0x0b98,
+0x0b9b, 0x0b9b,
+0x0b9d, 0x0b9d,
+0x0ba0, 0x0ba2,
+0x0ba5, 0x0ba7,
+0x0bab, 0x0bad,
+0x0bba, 0x0bbd,
+0x0bc3, 0x0bc5,
+0x0bc9, 0x0bc9,
+0x0bce, 0x0bcf,
+0x0bd1, 0x0bd6,
+0x0bd8, 0x0be5,
+0x0bfb, 0x0bff,
+0x0c04, 0x0c04,
+0x0c0d, 0x0c0d,
+0x0c11, 0x0c11,
+0x0c29, 0x0c29,
+0x0c3a, 0x0c3c,
+0x0c45, 0x0c45,
+0x0c49, 0x0c49,
+0x0c4e, 0x0c54,
+0x0c57, 0x0c57,
+0x0c5b, 0x0c5f,
+0x0c64, 0x0c65,
+0x0c70, 0x0c77,
+0x0c80, 0x0c80,
+0x0c84, 0x0c84,
+0x0c8d, 0x0c8d,
+0x0c91, 0x0c91,
+0x0ca9, 0x0ca9,
+0x0cb4, 0x0cb4,
+0x0cba, 0x0cbb,
+0x0cc5, 0x0cc5,
+0x0cc9, 0x0cc9,
+0x0cce, 0x0cd4,
+0x0cd7, 0x0cdd,
+0x0cdf, 0x0cdf,
+0x0ce4, 0x0ce5,
+0x0cf0, 0x0cf0,
+0x0cf3, 0x0d00,
+0x0d04, 0x0d04,
+0x0d0d, 0x0d0d,
+0x0d11, 0x0d11,
+0x0d3b, 0x0d3c,
+0x0d45, 0x0d45,
+0x0d49, 0x0d49,
+0x0d4f, 0x0d56,
+0x0d58, 0x0d5e,
+0x0d64, 0x0d65,
+0x0d76, 0x0d78,
+0x0d80, 0x0d81,
+0x0d84, 0x0d84,
+0x0d97, 0x0d99,
+0x0db2, 0x0db2,
+0x0dbc, 0x0dbc,
+0x0dbe, 0x0dbf,
+0x0dc7, 0x0dc9,
+0x0dcb, 0x0dce,
+0x0dd5, 0x0dd5,
+0x0dd7, 0x0dd7,
+0x0de0, 0x0de5,
+0x0df0, 0x0df1,
+0x0df5, 0x0e00,
+0x0e3b, 0x0e3e,
+0x0e5c, 0x0e80,
+0x0e83, 0x0e83,
+0x0e85, 0x0e86,
+0x0e89, 0x0e89,
+0x0e8b, 0x0e8c,
+0x0e8e, 0x0e93,
+0x0e98, 0x0e98,
+0x0ea0, 0x0ea0,
+0x0ea4, 0x0ea4,
+0x0ea6, 0x0ea6,
+0x0ea8, 0x0ea9,
+0x0eac, 0x0eac,
+0x0eba, 0x0eba,
+0x0ebe, 0x0ebf,
+0x0ec5, 0x0ec5,
+0x0ec7, 0x0ec7,
+0x0ece, 0x0ecf,
+0x0eda, 0x0edb,
+0x0ee0, 0x0eff,
+0x0f48, 0x0f48,
+0x0f6d, 0x0f70,
+0x0f98, 0x0f98,
+0x0fbd, 0x0fbd,
+0x0fcd, 0x0fcd,
+0x0fdb, 0x0fff,
+0x10c6, 0x10c6,
+0x10c8, 0x10cc,
+0x10ce, 0x10cf,
+0x1249, 0x1249,
+0x124e, 0x124f,
+0x1257, 0x1257,
+0x1259, 0x1259,
+0x125e, 0x125f,
+0x1289, 0x1289,
+0x128e, 0x128f,
+0x12b1, 0x12b1,
+0x12b6, 0x12b7,
+0x12bf, 0x12bf,
+0x12c1, 0x12c1,
+0x12c6, 0x12c7,
+0x12d7, 0x12d7,
+0x1311, 0x1311,
+0x1316, 0x1317,
+0x135b, 0x135c,
+0x137d, 0x137f,
+0x139a, 0x139f,
+0x13f6, 0x13f7,
+0x13fe, 0x13ff,
+0x169d, 0x169f,
+0x16f9, 0x16ff,
+0x170d, 0x170d,
+0x1715, 0x171f,
+0x1737, 0x173f,
+0x1754, 0x175f,
+0x176d, 0x176d,
+0x1771, 0x1771,
+0x1774, 0x177f,
+0x17de, 0x17df,
+0x17ea, 0x17ef,
+0x17fa, 0x17ff,
+0x180f, 0x180f,
+0x181a, 0x181f,
+0x1878, 0x187f,
+0x18ab, 0x18af,
+0x18f6, 0x18ff,
+0x191f, 0x191f,
+0x192c, 0x192f,
+0x193c, 0x193f,
+0x1941, 0x1943,
+0x196e, 0x196f,
+0x1975, 0x197f,
+0x19ac, 0x19af,
+0x19ca, 0x19cf,
+0x19db, 0x19dd,
+0x1a1c, 0x1a1d,
+0x1a5f, 0x1a5f,
+0x1a7d, 0x1a7e,
+0x1a8a, 0x1a8f,
+0x1a9a, 0x1a9f,
+0x1aae, 0x1aaf,
+0x1abf, 0x1aff,
+0x1b4c, 0x1b4f,
+0x1b7d, 0x1b7f,
+0x1bf4, 0x1bfb,
+0x1c38, 0x1c3a,
+0x1c4a, 0x1c4c,
+0x1c80, 0x1cbf,
+0x1cc8, 0x1ccf,
+0x1cf7, 0x1cf7,
+0x1cfa, 0x1cff,
+0x1df6, 0x1dfb,
+0x1f16, 0x1f17,
+0x1f1e, 0x1f1f,
+0x1f46, 0x1f47,
+0x1f4e, 0x1f4f,
+0x1f58, 0x1f58,
+0x1f5a, 0x1f5a,
+0x1f5c, 0x1f5c,
+0x1f5e, 0x1f5e,
+0x1f7e, 0x1f7f,
+0x1fb5, 0x1fb5,
+0x1fc5, 0x1fc5,
+0x1fd4, 0x1fd5,
+0x1fdc, 0x1fdc,
+0x1ff0, 0x1ff1,
+0x1ff5, 0x1ff5,
+0x1fff, 0x1fff,
+0x2065, 0x2065,
+0x2072, 0x2073,
+0x208f, 0x208f,
+0x209d, 0x209f,
+0x20bf, 0x20cf,
+0x20f1, 0x20ff,
+0x218c, 0x218f,
+0x23fb, 0x23ff,
+0x2427, 0x243f,
+0x244b, 0x245f,
+0x2b74, 0x2b75,
+0x2b96, 0x2b97,
+0x2bba, 0x2bbc,
+0x2bc9, 0x2bc9,
+0x2bd2, 0x2beb,
+0x2bf0, 0x2bff,
+0x2c2f, 0x2c2f,
+0x2c5f, 0x2c5f,
+0x2cf4, 0x2cf8,
+0x2d26, 0x2d26,
+0x2d28, 0x2d2c,
+0x2d2e, 0x2d2f,
+0x2d68, 0x2d6e,
+0x2d71, 0x2d7e,
+0x2d97, 0x2d9f,
+0x2da7, 0x2da7,
+0x2daf, 0x2daf,
+0x2db7, 0x2db7,
+0x2dbf, 0x2dbf,
+0x2dc7, 0x2dc7,
+0x2dcf, 0x2dcf,
+0x2dd7, 0x2dd7,
+0x2ddf, 0x2ddf,
+0x2e43, 0x2e7f,
+0x2e9a, 0x2e9a,
+0x2ef4, 0x2eff,
+0x2fd6, 0x2fef,
+0x2ffc, 0x2fff,
+0x3040, 0x3040,
+0x3097, 0x3098,
+0x3100, 0x3104,
+0x312e, 0x3130,
+0x318f, 0x318f,
+0x31bb, 0x31bf,
+0x31e4, 0x31ef,
+0x321f, 0x321f,
+0x32ff, 0x32ff,
+0x4db6, 0x4dbf,
+0x9fd6, 0x9fff,
+0xa48d, 0xa48f,
+0xa4c7, 0xa4cf,
+0xa62c, 0xa63f,
+0xa6f8, 0xa6ff,
+0xa7ae, 0xa7af,
+0xa7b8, 0xa7f6,
+0xa82c, 0xa82f,
+0xa83a, 0xa83f,
+0xa878, 0xa87f,
+0xa8c5, 0xa8cd,
+0xa8da, 0xa8df,
+0xa8fe, 0xa8ff,
+0xa954, 0xa95e,
+0xa97d, 0xa97f,
+0xa9ce, 0xa9ce,
+0xa9da, 0xa9dd,
+0xa9ff, 0xa9ff,
+0xaa37, 0xaa3f,
+0xaa4e, 0xaa4f,
+0xaa5a, 0xaa5b,
+0xaac3, 0xaada,
+0xaaf7, 0xab00,
+0xab07, 0xab08,
+0xab0f, 0xab10,
+0xab17, 0xab1f,
+0xab27, 0xab27,
+0xab2f, 0xab2f,
+0xab66, 0xab6f,
+0xabee, 0xabef,
+0xabfa, 0xabff,
+0xd7a4, 0xd7af,
+0xd7c7, 0xd7ca,
+0xd7fc, 0xf8ff,
+0xfa6e, 0xfa6f,
+0xfada, 0xfaff,
+0xfb07, 0xfb12,
+0xfb18, 0xfb1c,
+0xfb37, 0xfb37,
+0xfb3d, 0xfb3d,
+0xfb3f, 0xfb3f,
+0xfb42, 0xfb42,
+0xfb45, 0xfb45,
+0xfbc2, 0xfbd2,
+0xfd40, 0xfd4f,
+0xfd90, 0xfd91,
+0xfdc8, 0xfdef,
+0xfdfe, 0xfdff,
+0xfe1a, 0xfe1f,
+0xfe53, 0xfe53,
+0xfe67, 0xfe67,
+0xfe6c, 0xfe6f,
+0xfe75, 0xfe75,
+0xfefd, 0xfefe,
+0xff00, 0xff00,
+0xffbf, 0xffc1,
+0xffc8, 0xffc9,
+0xffd0, 0xffd1,
+0xffd8, 0xffd9,
+0xffdd, 0xffdf,
+0xffe7, 0xffe7,
+0xffef, 0xfff8,
+0xfffe, 0xffff,
+0x1000c, 0x1000c,
+0x10027, 0x10027,
+0x1003b, 0x1003b,
+0x1003e, 0x1003e,
+0x1004e, 0x1004f,
+0x1005e, 0x1007f,
+0x100fb, 0x100ff,
+0x10103, 0x10106,
+0x10134, 0x10136,
+0x1018d, 0x1018f,
+0x1019c, 0x1019f,
+0x101a1, 0x101cf,
+0x101fe, 0x1027f,
+0x1029d, 0x1029f,
+0x102d1, 0x102df,
+0x102fc, 0x102ff,
+0x10324, 0x1032f,
+0x1034b, 0x1034f,
+0x1037b, 0x1037f,
+0x1039e, 0x1039e,
+0x103c4, 0x103c7,
+0x103d6, 0x103ff,
+0x1049e, 0x1049f,
+0x104aa, 0x104ff,
+0x10528, 0x1052f,
+0x10564, 0x1056e,
+0x10570, 0x105ff,
+0x10737, 0x1073f,
+0x10756, 0x1075f,
+0x10768, 0x107ff,
+0x10806, 0x10807,
+0x10809, 0x10809,
+0x10836, 0x10836,
+0x10839, 0x1083b,
+0x1083d, 0x1083e,
+0x10856, 0x10856,
+0x1089f, 0x108a6,
+0x108b0, 0x108df,
+0x108f3, 0x108f3,
+0x108f6, 0x108fa,
+0x1091c, 0x1091e,
+0x1093a, 0x1093e,
+0x10940, 0x1097f,
+0x109b8, 0x109bb,
+0x109d0, 0x109d1,
+0x10a04, 0x10a04,
+0x10a07, 0x10a0b,
+0x10a14, 0x10a14,
+0x10a18, 0x10a18,
+0x10a34, 0x10a37,
+0x10a3b, 0x10a3e,
+0x10a48, 0x10a4f,
+0x10a59, 0x10a5f,
+0x10aa0, 0x10abf,
+0x10ae7, 0x10aea,
+0x10af7, 0x10aff,
+0x10b36, 0x10b38,
+0x10b56, 0x10b57,
+0x10b73, 0x10b77,
+0x10b92, 0x10b98,
+0x10b9d, 0x10ba8,
+0x10bb0, 0x10bff,
+0x10c49, 0x10c7f,
+0x10cb3, 0x10cbf,
+0x10cf3, 0x10cf9,
+0x10d00, 0x10e5f,
+0x10e7f, 0x10fff,
+0x1104e, 0x11051,
+0x11070, 0x1107e,
+0x110c2, 0x110cf,
+0x110e9, 0x110ef,
+0x110fa, 0x110ff,
+0x11135, 0x11135,
+0x11144, 0x1114f,
+0x11177, 0x1117f,
+0x111ce, 0x111cf,
+0x111e0, 0x111e0,
+0x111f5, 0x111ff,
+0x11212, 0x11212,
+0x1123e, 0x1127f,
+0x11287, 0x11287,
+0x11289, 0x11289,
+0x1128e, 0x1128e,
+0x1129e, 0x1129e,
+0x112aa, 0x112af,
+0x112eb, 0x112ef,
+0x112fa, 0x112ff,
+0x11304, 0x11304,
+0x1130d, 0x1130e,
+0x11311, 0x11312,
+0x11329, 0x11329,
+0x11331, 0x11331,
+0x11334, 0x11334,
+0x1133a, 0x1133b,
+0x11345, 0x11346,
+0x11349, 0x1134a,
+0x1134e, 0x1134f,
+0x11351, 0x11356,
+0x11358, 0x1135c,
+0x11364, 0x11365,
+0x1136d, 0x1136f,
+0x11375, 0x1147f,
+0x114c8, 0x114cf,
+0x114da, 0x1157f,
+0x115b6, 0x115b7,
+0x115de, 0x115ff,
+0x11645, 0x1164f,
+0x1165a, 0x1167f,
+0x116b8, 0x116bf,
+0x116ca, 0x116ff,
+0x1171a, 0x1171c,
+0x1172c, 0x1172f,
+0x11740, 0x1189f,
+0x118f3, 0x118fe,
+0x11900, 0x11abf,
+0x11af9, 0x11fff,
+0x1239a, 0x123ff,
+0x1246f, 0x1246f,
+0x12475, 0x1247f,
+0x12544, 0x12fff,
+0x1342f, 0x143ff,
+0x14647, 0x167ff,
+0x16a39, 0x16a3f,
+0x16a5f, 0x16a5f,
+0x16a6a, 0x16a6d,
+0x16a70, 0x16acf,
+0x16aee, 0x16aef,
+0x16af6, 0x16aff,
+0x16b46, 0x16b4f,
+0x16b5a, 0x16b5a,
+0x16b62, 0x16b62,
+0x16b78, 0x16b7c,
+0x16b90, 0x16eff,
+0x16f45, 0x16f4f,
+0x16f7f, 0x16f8e,
+0x16fa0, 0x1afff,
+0x1b002, 0x1bbff,
+0x1bc6b, 0x1bc6f,
+0x1bc7d, 0x1bc7f,
+0x1bc89, 0x1bc8f,
+0x1bc9a, 0x1bc9b,
+0x1bca4, 0x1cfff,
+0x1d0f6, 0x1d0ff,
+0x1d127, 0x1d128,
+0x1d1e9, 0x1d1ff,
+0x1d246, 0x1d2ff,
+0x1d357, 0x1d35f,
+0x1d372, 0x1d3ff,
+0x1d455, 0x1d455,
+0x1d49d, 0x1d49d,
+0x1d4a0, 0x1d4a1,
+0x1d4a3, 0x1d4a4,
+0x1d4a7, 0x1d4a8,
+0x1d4ad, 0x1d4ad,
+0x1d4ba, 0x1d4ba,
+0x1d4bc, 0x1d4bc,
+0x1d4c4, 0x1d4c4,
+0x1d506, 0x1d506,
+0x1d50b, 0x1d50c,
+0x1d515, 0x1d515,
+0x1d51d, 0x1d51d,
+0x1d53a, 0x1d53a,
+0x1d53f, 0x1d53f,
+0x1d545, 0x1d545,
+0x1d547, 0x1d549,
+0x1d551, 0x1d551,
+0x1d6a6, 0x1d6a7,
+0x1d7cc, 0x1d7cd,
+0x1da8c, 0x1da9a,
+0x1daa0, 0x1daa0,
+0x1dab0, 0x1e7ff,
+0x1e8c5, 0x1e8c6,
+0x1e8d7, 0x1edff,
+0x1ee04, 0x1ee04,
+0x1ee20, 0x1ee20,
+0x1ee23, 0x1ee23,
+0x1ee25, 0x1ee26,
+0x1ee28, 0x1ee28,
+0x1ee33, 0x1ee33,
+0x1ee38, 0x1ee38,
+0x1ee3a, 0x1ee3a,
+0x1ee3c, 0x1ee41,
+0x1ee43, 0x1ee46,
+0x1ee48, 0x1ee48,
+0x1ee4a, 0x1ee4a,
+0x1ee4c, 0x1ee4c,
+0x1ee50, 0x1ee50,
+0x1ee53, 0x1ee53,
+0x1ee55, 0x1ee56,
+0x1ee58, 0x1ee58,
+0x1ee5a, 0x1ee5a,
+0x1ee5c, 0x1ee5c,
+0x1ee5e, 0x1ee5e,
+0x1ee60, 0x1ee60,
+0x1ee63, 0x1ee63,
+0x1ee65, 0x1ee66,
+0x1ee6b, 0x1ee6b,
+0x1ee73, 0x1ee73,
+0x1ee78, 0x1ee78,
+0x1ee7d, 0x1ee7d,
+0x1ee7f, 0x1ee7f,
+0x1ee8a, 0x1ee8a,
+0x1ee9c, 0x1eea0,
+0x1eea4, 0x1eea4,
+0x1eeaa, 0x1eeaa,
+0x1eebc, 0x1eeef,
+0x1eef2, 0x1efff,
+0x1f02c, 0x1f02f,
+0x1f094, 0x1f09f,
+0x1f0af, 0x1f0b0,
+0x1f0c0, 0x1f0c0,
+0x1f0d0, 0x1f0d0,
+0x1f0f6, 0x1f0ff,
+0x1f10d, 0x1f10f,
+0x1f12f, 0x1f12f,
+0x1f16c, 0x1f16f,
+0x1f19b, 0x1f1e5,
+0x1f203, 0x1f20f,
+0x1f23b, 0x1f23f,
+0x1f249, 0x1f24f,
+0x1f252, 0x1f2ff,
+0x1f57a, 0x1f57a,
+0x1f5a4, 0x1f5a4,
+0x1f6d1, 0x1f6df,
+0x1f6ed, 0x1f6ef,
+0x1f6f4, 0x1f6ff,
+0x1f774, 0x1f77f,
+0x1f7d5, 0x1f7ff,
+0x1f80c, 0x1f80f,
+0x1f848, 0x1f84f,
+0x1f85a, 0x1f85f,
+0x1f888, 0x1f88f,
+0x1f8ae, 0x1f90f,
+0x1f919, 0x1f97f,
+0x1f985, 0x1f9bf,
+0x1f9c1, 0x1ffff,
+0x2a6d7, 0x2a6ff,
+0x2b735, 0x2b73f,
+0x2b81e, 0x2b81f,
+0x2cea2, 0x2f7ff,
+0x2fa1e, 0xe0000,
+0xe0002, 0xe001f,
+0xe0080, 0xe00ff,
+0xe01f0, 0x10ffff,
+}; /* END of CR_Unknown */
+
+/* PROPERTY: 'Uppercase': Derived Property */
+#define CR_Uppercase CR_Upper
+
+/* PROPERTY: 'Vai': Script */
+static const OnigCodePoint
+CR_Vai[] = { 1,
+0xa500, 0xa62b,
+}; /* END of CR_Vai */
+
+/* PROPERTY: 'Variation_Selector': Binary Property */
+static const OnigCodePoint
+CR_Variation_Selector[] = { 3,
+0x180b, 0x180d,
+0xfe00, 0xfe0f,
+0xe0100, 0xe01ef,
+}; /* END of CR_Variation_Selector */
+
+/* PROPERTY: 'Warang_Citi': Script */
+static const OnigCodePoint
+CR_Warang_Citi[] = { 2,
+0x118a0, 0x118f2,
+0x118ff, 0x118ff,
+}; /* END of CR_Warang_Citi */
+
+/* PROPERTY: 'White_Space': Binary Property */
+#define CR_White_Space CR_Space
+
+/* PROPERTY: 'XID_Continue': Derived Property */
+static const OnigCodePoint
+CR_XID_Continue[] = { 658,
0x0030, 0x0039,
0x0041, 0x005a,
0x005f, 0x005f,
@@ -14704,7 +19561,7 @@ CR_ID_Continue[] = { 651,
0x02ee, 0x02ee,
0x0300, 0x0374,
0x0376, 0x0377,
-0x037a, 0x037d,
+0x037b, 0x037d,
0x037f, 0x037f,
0x0386, 0x038a,
0x038c, 0x038c,
@@ -15034,7 +19891,8 @@ CR_ID_Continue[] = { 651,
0x3031, 0x3035,
0x3038, 0x303c,
0x3041, 0x3096,
-0x3099, 0x309f,
+0x3099, 0x309a,
+0x309d, 0x309f,
0x30a1, 0x30fa,
0x30fc, 0x30ff,
0x3105, 0x312d,
@@ -15099,16 +19957,22 @@ CR_ID_Continue[] = { 651,
0xfb40, 0xfb41,
0xfb43, 0xfb44,
0xfb46, 0xfbb1,
-0xfbd3, 0xfd3d,
+0xfbd3, 0xfc5d,
+0xfc64, 0xfd3d,
0xfd50, 0xfd8f,
0xfd92, 0xfdc7,
-0xfdf0, 0xfdfb,
+0xfdf0, 0xfdf9,
0xfe00, 0xfe0f,
0xfe20, 0xfe2f,
0xfe33, 0xfe34,
0xfe4d, 0xfe4f,
-0xfe70, 0xfe74,
-0xfe76, 0xfefc,
+0xfe71, 0xfe71,
+0xfe73, 0xfe73,
+0xfe77, 0xfe77,
+0xfe79, 0xfe79,
+0xfe7b, 0xfe7b,
+0xfe7d, 0xfe7d,
+0xfe7f, 0xfefc,
0xff10, 0xff19,
0xff21, 0xff3a,
0xff3f, 0xff3f,
@@ -15338,7 +20202,7 @@ CR_ID_Continue[] = { 651,
0x2b820, 0x2cea1,
0x2f800, 0x2fa1d,
0xe0100, 0xe01ef,
-}; /* END of CR_ID_Continue */
+}; /* END of CR_XID_Continue */
/* PROPERTY: 'XID_Start': Derived Property */
static const OnigCodePoint
@@ -15907,2523 +20771,6 @@ CR_XID_Start[] = { 562,
0x2f800, 0x2fa1d,
}; /* END of CR_XID_Start */
-/* PROPERTY: 'XID_Continue': Derived Property */
-static const OnigCodePoint
-CR_XID_Continue[] = { 658,
-0x0030, 0x0039,
-0x0041, 0x005a,
-0x005f, 0x005f,
-0x0061, 0x007a,
-0x00aa, 0x00aa,
-0x00b5, 0x00b5,
-0x00b7, 0x00b7,
-0x00ba, 0x00ba,
-0x00c0, 0x00d6,
-0x00d8, 0x00f6,
-0x00f8, 0x02c1,
-0x02c6, 0x02d1,
-0x02e0, 0x02e4,
-0x02ec, 0x02ec,
-0x02ee, 0x02ee,
-0x0300, 0x0374,
-0x0376, 0x0377,
-0x037b, 0x037d,
-0x037f, 0x037f,
-0x0386, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x03a1,
-0x03a3, 0x03f5,
-0x03f7, 0x0481,
-0x0483, 0x0487,
-0x048a, 0x052f,
-0x0531, 0x0556,
-0x0559, 0x0559,
-0x0561, 0x0587,
-0x0591, 0x05bd,
-0x05bf, 0x05bf,
-0x05c1, 0x05c2,
-0x05c4, 0x05c5,
-0x05c7, 0x05c7,
-0x05d0, 0x05ea,
-0x05f0, 0x05f2,
-0x0610, 0x061a,
-0x0620, 0x0669,
-0x066e, 0x06d3,
-0x06d5, 0x06dc,
-0x06df, 0x06e8,
-0x06ea, 0x06fc,
-0x06ff, 0x06ff,
-0x0710, 0x074a,
-0x074d, 0x07b1,
-0x07c0, 0x07f5,
-0x07fa, 0x07fa,
-0x0800, 0x082d,
-0x0840, 0x085b,
-0x08a0, 0x08b4,
-0x08e3, 0x0963,
-0x0966, 0x096f,
-0x0971, 0x0983,
-0x0985, 0x098c,
-0x098f, 0x0990,
-0x0993, 0x09a8,
-0x09aa, 0x09b0,
-0x09b2, 0x09b2,
-0x09b6, 0x09b9,
-0x09bc, 0x09c4,
-0x09c7, 0x09c8,
-0x09cb, 0x09ce,
-0x09d7, 0x09d7,
-0x09dc, 0x09dd,
-0x09df, 0x09e3,
-0x09e6, 0x09f1,
-0x0a01, 0x0a03,
-0x0a05, 0x0a0a,
-0x0a0f, 0x0a10,
-0x0a13, 0x0a28,
-0x0a2a, 0x0a30,
-0x0a32, 0x0a33,
-0x0a35, 0x0a36,
-0x0a38, 0x0a39,
-0x0a3c, 0x0a3c,
-0x0a3e, 0x0a42,
-0x0a47, 0x0a48,
-0x0a4b, 0x0a4d,
-0x0a51, 0x0a51,
-0x0a59, 0x0a5c,
-0x0a5e, 0x0a5e,
-0x0a66, 0x0a75,
-0x0a81, 0x0a83,
-0x0a85, 0x0a8d,
-0x0a8f, 0x0a91,
-0x0a93, 0x0aa8,
-0x0aaa, 0x0ab0,
-0x0ab2, 0x0ab3,
-0x0ab5, 0x0ab9,
-0x0abc, 0x0ac5,
-0x0ac7, 0x0ac9,
-0x0acb, 0x0acd,
-0x0ad0, 0x0ad0,
-0x0ae0, 0x0ae3,
-0x0ae6, 0x0aef,
-0x0af9, 0x0af9,
-0x0b01, 0x0b03,
-0x0b05, 0x0b0c,
-0x0b0f, 0x0b10,
-0x0b13, 0x0b28,
-0x0b2a, 0x0b30,
-0x0b32, 0x0b33,
-0x0b35, 0x0b39,
-0x0b3c, 0x0b44,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4d,
-0x0b56, 0x0b57,
-0x0b5c, 0x0b5d,
-0x0b5f, 0x0b63,
-0x0b66, 0x0b6f,
-0x0b71, 0x0b71,
-0x0b82, 0x0b83,
-0x0b85, 0x0b8a,
-0x0b8e, 0x0b90,
-0x0b92, 0x0b95,
-0x0b99, 0x0b9a,
-0x0b9c, 0x0b9c,
-0x0b9e, 0x0b9f,
-0x0ba3, 0x0ba4,
-0x0ba8, 0x0baa,
-0x0bae, 0x0bb9,
-0x0bbe, 0x0bc2,
-0x0bc6, 0x0bc8,
-0x0bca, 0x0bcd,
-0x0bd0, 0x0bd0,
-0x0bd7, 0x0bd7,
-0x0be6, 0x0bef,
-0x0c00, 0x0c03,
-0x0c05, 0x0c0c,
-0x0c0e, 0x0c10,
-0x0c12, 0x0c28,
-0x0c2a, 0x0c39,
-0x0c3d, 0x0c44,
-0x0c46, 0x0c48,
-0x0c4a, 0x0c4d,
-0x0c55, 0x0c56,
-0x0c58, 0x0c5a,
-0x0c60, 0x0c63,
-0x0c66, 0x0c6f,
-0x0c81, 0x0c83,
-0x0c85, 0x0c8c,
-0x0c8e, 0x0c90,
-0x0c92, 0x0ca8,
-0x0caa, 0x0cb3,
-0x0cb5, 0x0cb9,
-0x0cbc, 0x0cc4,
-0x0cc6, 0x0cc8,
-0x0cca, 0x0ccd,
-0x0cd5, 0x0cd6,
-0x0cde, 0x0cde,
-0x0ce0, 0x0ce3,
-0x0ce6, 0x0cef,
-0x0cf1, 0x0cf2,
-0x0d01, 0x0d03,
-0x0d05, 0x0d0c,
-0x0d0e, 0x0d10,
-0x0d12, 0x0d3a,
-0x0d3d, 0x0d44,
-0x0d46, 0x0d48,
-0x0d4a, 0x0d4e,
-0x0d57, 0x0d57,
-0x0d5f, 0x0d63,
-0x0d66, 0x0d6f,
-0x0d7a, 0x0d7f,
-0x0d82, 0x0d83,
-0x0d85, 0x0d96,
-0x0d9a, 0x0db1,
-0x0db3, 0x0dbb,
-0x0dbd, 0x0dbd,
-0x0dc0, 0x0dc6,
-0x0dca, 0x0dca,
-0x0dcf, 0x0dd4,
-0x0dd6, 0x0dd6,
-0x0dd8, 0x0ddf,
-0x0de6, 0x0def,
-0x0df2, 0x0df3,
-0x0e01, 0x0e3a,
-0x0e40, 0x0e4e,
-0x0e50, 0x0e59,
-0x0e81, 0x0e82,
-0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
-0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
-0x0ec0, 0x0ec4,
-0x0ec6, 0x0ec6,
-0x0ec8, 0x0ecd,
-0x0ed0, 0x0ed9,
-0x0edc, 0x0edf,
-0x0f00, 0x0f00,
-0x0f18, 0x0f19,
-0x0f20, 0x0f29,
-0x0f35, 0x0f35,
-0x0f37, 0x0f37,
-0x0f39, 0x0f39,
-0x0f3e, 0x0f47,
-0x0f49, 0x0f6c,
-0x0f71, 0x0f84,
-0x0f86, 0x0f97,
-0x0f99, 0x0fbc,
-0x0fc6, 0x0fc6,
-0x1000, 0x1049,
-0x1050, 0x109d,
-0x10a0, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x10d0, 0x10fa,
-0x10fc, 0x1248,
-0x124a, 0x124d,
-0x1250, 0x1256,
-0x1258, 0x1258,
-0x125a, 0x125d,
-0x1260, 0x1288,
-0x128a, 0x128d,
-0x1290, 0x12b0,
-0x12b2, 0x12b5,
-0x12b8, 0x12be,
-0x12c0, 0x12c0,
-0x12c2, 0x12c5,
-0x12c8, 0x12d6,
-0x12d8, 0x1310,
-0x1312, 0x1315,
-0x1318, 0x135a,
-0x135d, 0x135f,
-0x1369, 0x1371,
-0x1380, 0x138f,
-0x13a0, 0x13f5,
-0x13f8, 0x13fd,
-0x1401, 0x166c,
-0x166f, 0x167f,
-0x1681, 0x169a,
-0x16a0, 0x16ea,
-0x16ee, 0x16f8,
-0x1700, 0x170c,
-0x170e, 0x1714,
-0x1720, 0x1734,
-0x1740, 0x1753,
-0x1760, 0x176c,
-0x176e, 0x1770,
-0x1772, 0x1773,
-0x1780, 0x17d3,
-0x17d7, 0x17d7,
-0x17dc, 0x17dd,
-0x17e0, 0x17e9,
-0x180b, 0x180d,
-0x1810, 0x1819,
-0x1820, 0x1877,
-0x1880, 0x18aa,
-0x18b0, 0x18f5,
-0x1900, 0x191e,
-0x1920, 0x192b,
-0x1930, 0x193b,
-0x1946, 0x196d,
-0x1970, 0x1974,
-0x1980, 0x19ab,
-0x19b0, 0x19c9,
-0x19d0, 0x19da,
-0x1a00, 0x1a1b,
-0x1a20, 0x1a5e,
-0x1a60, 0x1a7c,
-0x1a7f, 0x1a89,
-0x1a90, 0x1a99,
-0x1aa7, 0x1aa7,
-0x1ab0, 0x1abd,
-0x1b00, 0x1b4b,
-0x1b50, 0x1b59,
-0x1b6b, 0x1b73,
-0x1b80, 0x1bf3,
-0x1c00, 0x1c37,
-0x1c40, 0x1c49,
-0x1c4d, 0x1c7d,
-0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf6,
-0x1cf8, 0x1cf9,
-0x1d00, 0x1df5,
-0x1dfc, 0x1f15,
-0x1f18, 0x1f1d,
-0x1f20, 0x1f45,
-0x1f48, 0x1f4d,
-0x1f50, 0x1f57,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f7d,
-0x1f80, 0x1fb4,
-0x1fb6, 0x1fbc,
-0x1fbe, 0x1fbe,
-0x1fc2, 0x1fc4,
-0x1fc6, 0x1fcc,
-0x1fd0, 0x1fd3,
-0x1fd6, 0x1fdb,
-0x1fe0, 0x1fec,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffc,
-0x203f, 0x2040,
-0x2054, 0x2054,
-0x2071, 0x2071,
-0x207f, 0x207f,
-0x2090, 0x209c,
-0x20d0, 0x20dc,
-0x20e1, 0x20e1,
-0x20e5, 0x20f0,
-0x2102, 0x2102,
-0x2107, 0x2107,
-0x210a, 0x2113,
-0x2115, 0x2115,
-0x2118, 0x211d,
-0x2124, 0x2124,
-0x2126, 0x2126,
-0x2128, 0x2128,
-0x212a, 0x2139,
-0x213c, 0x213f,
-0x2145, 0x2149,
-0x214e, 0x214e,
-0x2160, 0x2188,
-0x2c00, 0x2c2e,
-0x2c30, 0x2c5e,
-0x2c60, 0x2ce4,
-0x2ceb, 0x2cf3,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-0x2d30, 0x2d67,
-0x2d6f, 0x2d6f,
-0x2d7f, 0x2d96,
-0x2da0, 0x2da6,
-0x2da8, 0x2dae,
-0x2db0, 0x2db6,
-0x2db8, 0x2dbe,
-0x2dc0, 0x2dc6,
-0x2dc8, 0x2dce,
-0x2dd0, 0x2dd6,
-0x2dd8, 0x2dde,
-0x2de0, 0x2dff,
-0x3005, 0x3007,
-0x3021, 0x302f,
-0x3031, 0x3035,
-0x3038, 0x303c,
-0x3041, 0x3096,
-0x3099, 0x309a,
-0x309d, 0x309f,
-0x30a1, 0x30fa,
-0x30fc, 0x30ff,
-0x3105, 0x312d,
-0x3131, 0x318e,
-0x31a0, 0x31ba,
-0x31f0, 0x31ff,
-0x3400, 0x4db5,
-0x4e00, 0x9fd5,
-0xa000, 0xa48c,
-0xa4d0, 0xa4fd,
-0xa500, 0xa60c,
-0xa610, 0xa62b,
-0xa640, 0xa66f,
-0xa674, 0xa67d,
-0xa67f, 0xa6f1,
-0xa717, 0xa71f,
-0xa722, 0xa788,
-0xa78b, 0xa7ad,
-0xa7b0, 0xa7b7,
-0xa7f7, 0xa827,
-0xa840, 0xa873,
-0xa880, 0xa8c4,
-0xa8d0, 0xa8d9,
-0xa8e0, 0xa8f7,
-0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fd,
-0xa900, 0xa92d,
-0xa930, 0xa953,
-0xa960, 0xa97c,
-0xa980, 0xa9c0,
-0xa9cf, 0xa9d9,
-0xa9e0, 0xa9fe,
-0xaa00, 0xaa36,
-0xaa40, 0xaa4d,
-0xaa50, 0xaa59,
-0xaa60, 0xaa76,
-0xaa7a, 0xaac2,
-0xaadb, 0xaadd,
-0xaae0, 0xaaef,
-0xaaf2, 0xaaf6,
-0xab01, 0xab06,
-0xab09, 0xab0e,
-0xab11, 0xab16,
-0xab20, 0xab26,
-0xab28, 0xab2e,
-0xab30, 0xab5a,
-0xab5c, 0xab65,
-0xab70, 0xabea,
-0xabec, 0xabed,
-0xabf0, 0xabf9,
-0xac00, 0xd7a3,
-0xd7b0, 0xd7c6,
-0xd7cb, 0xd7fb,
-0xf900, 0xfa6d,
-0xfa70, 0xfad9,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xfb1d, 0xfb28,
-0xfb2a, 0xfb36,
-0xfb38, 0xfb3c,
-0xfb3e, 0xfb3e,
-0xfb40, 0xfb41,
-0xfb43, 0xfb44,
-0xfb46, 0xfbb1,
-0xfbd3, 0xfc5d,
-0xfc64, 0xfd3d,
-0xfd50, 0xfd8f,
-0xfd92, 0xfdc7,
-0xfdf0, 0xfdf9,
-0xfe00, 0xfe0f,
-0xfe20, 0xfe2f,
-0xfe33, 0xfe34,
-0xfe4d, 0xfe4f,
-0xfe71, 0xfe71,
-0xfe73, 0xfe73,
-0xfe77, 0xfe77,
-0xfe79, 0xfe79,
-0xfe7b, 0xfe7b,
-0xfe7d, 0xfe7d,
-0xfe7f, 0xfefc,
-0xff10, 0xff19,
-0xff21, 0xff3a,
-0xff3f, 0xff3f,
-0xff41, 0xff5a,
-0xff66, 0xffbe,
-0xffc2, 0xffc7,
-0xffca, 0xffcf,
-0xffd2, 0xffd7,
-0xffda, 0xffdc,
-0x10000, 0x1000b,
-0x1000d, 0x10026,
-0x10028, 0x1003a,
-0x1003c, 0x1003d,
-0x1003f, 0x1004d,
-0x10050, 0x1005d,
-0x10080, 0x100fa,
-0x10140, 0x10174,
-0x101fd, 0x101fd,
-0x10280, 0x1029c,
-0x102a0, 0x102d0,
-0x102e0, 0x102e0,
-0x10300, 0x1031f,
-0x10330, 0x1034a,
-0x10350, 0x1037a,
-0x10380, 0x1039d,
-0x103a0, 0x103c3,
-0x103c8, 0x103cf,
-0x103d1, 0x103d5,
-0x10400, 0x1049d,
-0x104a0, 0x104a9,
-0x10500, 0x10527,
-0x10530, 0x10563,
-0x10600, 0x10736,
-0x10740, 0x10755,
-0x10760, 0x10767,
-0x10800, 0x10805,
-0x10808, 0x10808,
-0x1080a, 0x10835,
-0x10837, 0x10838,
-0x1083c, 0x1083c,
-0x1083f, 0x10855,
-0x10860, 0x10876,
-0x10880, 0x1089e,
-0x108e0, 0x108f2,
-0x108f4, 0x108f5,
-0x10900, 0x10915,
-0x10920, 0x10939,
-0x10980, 0x109b7,
-0x109be, 0x109bf,
-0x10a00, 0x10a03,
-0x10a05, 0x10a06,
-0x10a0c, 0x10a13,
-0x10a15, 0x10a17,
-0x10a19, 0x10a33,
-0x10a38, 0x10a3a,
-0x10a3f, 0x10a3f,
-0x10a60, 0x10a7c,
-0x10a80, 0x10a9c,
-0x10ac0, 0x10ac7,
-0x10ac9, 0x10ae6,
-0x10b00, 0x10b35,
-0x10b40, 0x10b55,
-0x10b60, 0x10b72,
-0x10b80, 0x10b91,
-0x10c00, 0x10c48,
-0x10c80, 0x10cb2,
-0x10cc0, 0x10cf2,
-0x11000, 0x11046,
-0x11066, 0x1106f,
-0x1107f, 0x110ba,
-0x110d0, 0x110e8,
-0x110f0, 0x110f9,
-0x11100, 0x11134,
-0x11136, 0x1113f,
-0x11150, 0x11173,
-0x11176, 0x11176,
-0x11180, 0x111c4,
-0x111ca, 0x111cc,
-0x111d0, 0x111da,
-0x111dc, 0x111dc,
-0x11200, 0x11211,
-0x11213, 0x11237,
-0x11280, 0x11286,
-0x11288, 0x11288,
-0x1128a, 0x1128d,
-0x1128f, 0x1129d,
-0x1129f, 0x112a8,
-0x112b0, 0x112ea,
-0x112f0, 0x112f9,
-0x11300, 0x11303,
-0x11305, 0x1130c,
-0x1130f, 0x11310,
-0x11313, 0x11328,
-0x1132a, 0x11330,
-0x11332, 0x11333,
-0x11335, 0x11339,
-0x1133c, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134d,
-0x11350, 0x11350,
-0x11357, 0x11357,
-0x1135d, 0x11363,
-0x11366, 0x1136c,
-0x11370, 0x11374,
-0x11480, 0x114c5,
-0x114c7, 0x114c7,
-0x114d0, 0x114d9,
-0x11580, 0x115b5,
-0x115b8, 0x115c0,
-0x115d8, 0x115dd,
-0x11600, 0x11640,
-0x11644, 0x11644,
-0x11650, 0x11659,
-0x11680, 0x116b7,
-0x116c0, 0x116c9,
-0x11700, 0x11719,
-0x1171d, 0x1172b,
-0x11730, 0x11739,
-0x118a0, 0x118e9,
-0x118ff, 0x118ff,
-0x11ac0, 0x11af8,
-0x12000, 0x12399,
-0x12400, 0x1246e,
-0x12480, 0x12543,
-0x13000, 0x1342e,
-0x14400, 0x14646,
-0x16800, 0x16a38,
-0x16a40, 0x16a5e,
-0x16a60, 0x16a69,
-0x16ad0, 0x16aed,
-0x16af0, 0x16af4,
-0x16b00, 0x16b36,
-0x16b40, 0x16b43,
-0x16b50, 0x16b59,
-0x16b63, 0x16b77,
-0x16b7d, 0x16b8f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f8f, 0x16f9f,
-0x1b000, 0x1b001,
-0x1bc00, 0x1bc6a,
-0x1bc70, 0x1bc7c,
-0x1bc80, 0x1bc88,
-0x1bc90, 0x1bc99,
-0x1bc9d, 0x1bc9e,
-0x1d165, 0x1d169,
-0x1d16d, 0x1d172,
-0x1d17b, 0x1d182,
-0x1d185, 0x1d18b,
-0x1d1aa, 0x1d1ad,
-0x1d242, 0x1d244,
-0x1d400, 0x1d454,
-0x1d456, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d51e, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d6c0,
-0x1d6c2, 0x1d6da,
-0x1d6dc, 0x1d6fa,
-0x1d6fc, 0x1d714,
-0x1d716, 0x1d734,
-0x1d736, 0x1d74e,
-0x1d750, 0x1d76e,
-0x1d770, 0x1d788,
-0x1d78a, 0x1d7a8,
-0x1d7aa, 0x1d7c2,
-0x1d7c4, 0x1d7cb,
-0x1d7ce, 0x1d7ff,
-0x1da00, 0x1da36,
-0x1da3b, 0x1da6c,
-0x1da75, 0x1da75,
-0x1da84, 0x1da84,
-0x1da9b, 0x1da9f,
-0x1daa1, 0x1daaf,
-0x1e800, 0x1e8c4,
-0x1e8d0, 0x1e8d6,
-0x1ee00, 0x1ee03,
-0x1ee05, 0x1ee1f,
-0x1ee21, 0x1ee22,
-0x1ee24, 0x1ee24,
-0x1ee27, 0x1ee27,
-0x1ee29, 0x1ee32,
-0x1ee34, 0x1ee37,
-0x1ee39, 0x1ee39,
-0x1ee3b, 0x1ee3b,
-0x1ee42, 0x1ee42,
-0x1ee47, 0x1ee47,
-0x1ee49, 0x1ee49,
-0x1ee4b, 0x1ee4b,
-0x1ee4d, 0x1ee4f,
-0x1ee51, 0x1ee52,
-0x1ee54, 0x1ee54,
-0x1ee57, 0x1ee57,
-0x1ee59, 0x1ee59,
-0x1ee5b, 0x1ee5b,
-0x1ee5d, 0x1ee5d,
-0x1ee5f, 0x1ee5f,
-0x1ee61, 0x1ee62,
-0x1ee64, 0x1ee64,
-0x1ee67, 0x1ee6a,
-0x1ee6c, 0x1ee72,
-0x1ee74, 0x1ee77,
-0x1ee79, 0x1ee7c,
-0x1ee7e, 0x1ee7e,
-0x1ee80, 0x1ee89,
-0x1ee8b, 0x1ee9b,
-0x1eea1, 0x1eea3,
-0x1eea5, 0x1eea9,
-0x1eeab, 0x1eebb,
-0x20000, 0x2a6d6,
-0x2a700, 0x2b734,
-0x2b740, 0x2b81d,
-0x2b820, 0x2cea1,
-0x2f800, 0x2fa1d,
-0xe0100, 0xe01ef,
-}; /* END of CR_XID_Continue */
-
-/* PROPERTY: 'Default_Ignorable_Code_Point': Derived Property */
-static const OnigCodePoint
-CR_Default_Ignorable_Code_Point[] = { 17,
-0x00ad, 0x00ad,
-0x034f, 0x034f,
-0x061c, 0x061c,
-0x115f, 0x1160,
-0x17b4, 0x17b5,
-0x180b, 0x180e,
-0x200b, 0x200f,
-0x202a, 0x202e,
-0x2060, 0x206f,
-0x3164, 0x3164,
-0xfe00, 0xfe0f,
-0xfeff, 0xfeff,
-0xffa0, 0xffa0,
-0xfff0, 0xfff8,
-0x1bca0, 0x1bca3,
-0x1d173, 0x1d17a,
-0xe0000, 0xe0fff,
-}; /* END of CR_Default_Ignorable_Code_Point */
-
-/* PROPERTY: 'Grapheme_Extend': Derived Property */
-static const OnigCodePoint
-CR_Grapheme_Extend[] = { 283,
-0x0300, 0x036f,
-0x0483, 0x0489,
-0x0591, 0x05bd,
-0x05bf, 0x05bf,
-0x05c1, 0x05c2,
-0x05c4, 0x05c5,
-0x05c7, 0x05c7,
-0x0610, 0x061a,
-0x064b, 0x065f,
-0x0670, 0x0670,
-0x06d6, 0x06dc,
-0x06df, 0x06e4,
-0x06e7, 0x06e8,
-0x06ea, 0x06ed,
-0x0711, 0x0711,
-0x0730, 0x074a,
-0x07a6, 0x07b0,
-0x07eb, 0x07f3,
-0x0816, 0x0819,
-0x081b, 0x0823,
-0x0825, 0x0827,
-0x0829, 0x082d,
-0x0859, 0x085b,
-0x08e3, 0x0902,
-0x093a, 0x093a,
-0x093c, 0x093c,
-0x0941, 0x0948,
-0x094d, 0x094d,
-0x0951, 0x0957,
-0x0962, 0x0963,
-0x0981, 0x0981,
-0x09bc, 0x09bc,
-0x09be, 0x09be,
-0x09c1, 0x09c4,
-0x09cd, 0x09cd,
-0x09d7, 0x09d7,
-0x09e2, 0x09e3,
-0x0a01, 0x0a02,
-0x0a3c, 0x0a3c,
-0x0a41, 0x0a42,
-0x0a47, 0x0a48,
-0x0a4b, 0x0a4d,
-0x0a51, 0x0a51,
-0x0a70, 0x0a71,
-0x0a75, 0x0a75,
-0x0a81, 0x0a82,
-0x0abc, 0x0abc,
-0x0ac1, 0x0ac5,
-0x0ac7, 0x0ac8,
-0x0acd, 0x0acd,
-0x0ae2, 0x0ae3,
-0x0b01, 0x0b01,
-0x0b3c, 0x0b3c,
-0x0b3e, 0x0b3f,
-0x0b41, 0x0b44,
-0x0b4d, 0x0b4d,
-0x0b56, 0x0b57,
-0x0b62, 0x0b63,
-0x0b82, 0x0b82,
-0x0bbe, 0x0bbe,
-0x0bc0, 0x0bc0,
-0x0bcd, 0x0bcd,
-0x0bd7, 0x0bd7,
-0x0c00, 0x0c00,
-0x0c3e, 0x0c40,
-0x0c46, 0x0c48,
-0x0c4a, 0x0c4d,
-0x0c55, 0x0c56,
-0x0c62, 0x0c63,
-0x0c81, 0x0c81,
-0x0cbc, 0x0cbc,
-0x0cbf, 0x0cbf,
-0x0cc2, 0x0cc2,
-0x0cc6, 0x0cc6,
-0x0ccc, 0x0ccd,
-0x0cd5, 0x0cd6,
-0x0ce2, 0x0ce3,
-0x0d01, 0x0d01,
-0x0d3e, 0x0d3e,
-0x0d41, 0x0d44,
-0x0d4d, 0x0d4d,
-0x0d57, 0x0d57,
-0x0d62, 0x0d63,
-0x0dca, 0x0dca,
-0x0dcf, 0x0dcf,
-0x0dd2, 0x0dd4,
-0x0dd6, 0x0dd6,
-0x0ddf, 0x0ddf,
-0x0e31, 0x0e31,
-0x0e34, 0x0e3a,
-0x0e47, 0x0e4e,
-0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
-0x0ec8, 0x0ecd,
-0x0f18, 0x0f19,
-0x0f35, 0x0f35,
-0x0f37, 0x0f37,
-0x0f39, 0x0f39,
-0x0f71, 0x0f7e,
-0x0f80, 0x0f84,
-0x0f86, 0x0f87,
-0x0f8d, 0x0f97,
-0x0f99, 0x0fbc,
-0x0fc6, 0x0fc6,
-0x102d, 0x1030,
-0x1032, 0x1037,
-0x1039, 0x103a,
-0x103d, 0x103e,
-0x1058, 0x1059,
-0x105e, 0x1060,
-0x1071, 0x1074,
-0x1082, 0x1082,
-0x1085, 0x1086,
-0x108d, 0x108d,
-0x109d, 0x109d,
-0x135d, 0x135f,
-0x1712, 0x1714,
-0x1732, 0x1734,
-0x1752, 0x1753,
-0x1772, 0x1773,
-0x17b4, 0x17b5,
-0x17b7, 0x17bd,
-0x17c6, 0x17c6,
-0x17c9, 0x17d3,
-0x17dd, 0x17dd,
-0x180b, 0x180d,
-0x18a9, 0x18a9,
-0x1920, 0x1922,
-0x1927, 0x1928,
-0x1932, 0x1932,
-0x1939, 0x193b,
-0x1a17, 0x1a18,
-0x1a1b, 0x1a1b,
-0x1a56, 0x1a56,
-0x1a58, 0x1a5e,
-0x1a60, 0x1a60,
-0x1a62, 0x1a62,
-0x1a65, 0x1a6c,
-0x1a73, 0x1a7c,
-0x1a7f, 0x1a7f,
-0x1ab0, 0x1abe,
-0x1b00, 0x1b03,
-0x1b34, 0x1b34,
-0x1b36, 0x1b3a,
-0x1b3c, 0x1b3c,
-0x1b42, 0x1b42,
-0x1b6b, 0x1b73,
-0x1b80, 0x1b81,
-0x1ba2, 0x1ba5,
-0x1ba8, 0x1ba9,
-0x1bab, 0x1bad,
-0x1be6, 0x1be6,
-0x1be8, 0x1be9,
-0x1bed, 0x1bed,
-0x1bef, 0x1bf1,
-0x1c2c, 0x1c33,
-0x1c36, 0x1c37,
-0x1cd0, 0x1cd2,
-0x1cd4, 0x1ce0,
-0x1ce2, 0x1ce8,
-0x1ced, 0x1ced,
-0x1cf4, 0x1cf4,
-0x1cf8, 0x1cf9,
-0x1dc0, 0x1df5,
-0x1dfc, 0x1dff,
-0x200c, 0x200d,
-0x20d0, 0x20f0,
-0x2cef, 0x2cf1,
-0x2d7f, 0x2d7f,
-0x2de0, 0x2dff,
-0x302a, 0x302f,
-0x3099, 0x309a,
-0xa66f, 0xa672,
-0xa674, 0xa67d,
-0xa69e, 0xa69f,
-0xa6f0, 0xa6f1,
-0xa802, 0xa802,
-0xa806, 0xa806,
-0xa80b, 0xa80b,
-0xa825, 0xa826,
-0xa8c4, 0xa8c4,
-0xa8e0, 0xa8f1,
-0xa926, 0xa92d,
-0xa947, 0xa951,
-0xa980, 0xa982,
-0xa9b3, 0xa9b3,
-0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
-0xa9e5, 0xa9e5,
-0xaa29, 0xaa2e,
-0xaa31, 0xaa32,
-0xaa35, 0xaa36,
-0xaa43, 0xaa43,
-0xaa4c, 0xaa4c,
-0xaa7c, 0xaa7c,
-0xaab0, 0xaab0,
-0xaab2, 0xaab4,
-0xaab7, 0xaab8,
-0xaabe, 0xaabf,
-0xaac1, 0xaac1,
-0xaaec, 0xaaed,
-0xaaf6, 0xaaf6,
-0xabe5, 0xabe5,
-0xabe8, 0xabe8,
-0xabed, 0xabed,
-0xfb1e, 0xfb1e,
-0xfe00, 0xfe0f,
-0xfe20, 0xfe2f,
-0xff9e, 0xff9f,
-0x101fd, 0x101fd,
-0x102e0, 0x102e0,
-0x10376, 0x1037a,
-0x10a01, 0x10a03,
-0x10a05, 0x10a06,
-0x10a0c, 0x10a0f,
-0x10a38, 0x10a3a,
-0x10a3f, 0x10a3f,
-0x10ae5, 0x10ae6,
-0x11001, 0x11001,
-0x11038, 0x11046,
-0x1107f, 0x11081,
-0x110b3, 0x110b6,
-0x110b9, 0x110ba,
-0x11100, 0x11102,
-0x11127, 0x1112b,
-0x1112d, 0x11134,
-0x11173, 0x11173,
-0x11180, 0x11181,
-0x111b6, 0x111be,
-0x111ca, 0x111cc,
-0x1122f, 0x11231,
-0x11234, 0x11234,
-0x11236, 0x11237,
-0x112df, 0x112df,
-0x112e3, 0x112ea,
-0x11300, 0x11301,
-0x1133c, 0x1133c,
-0x1133e, 0x1133e,
-0x11340, 0x11340,
-0x11357, 0x11357,
-0x11366, 0x1136c,
-0x11370, 0x11374,
-0x114b0, 0x114b0,
-0x114b3, 0x114b8,
-0x114ba, 0x114ba,
-0x114bd, 0x114bd,
-0x114bf, 0x114c0,
-0x114c2, 0x114c3,
-0x115af, 0x115af,
-0x115b2, 0x115b5,
-0x115bc, 0x115bd,
-0x115bf, 0x115c0,
-0x115dc, 0x115dd,
-0x11633, 0x1163a,
-0x1163d, 0x1163d,
-0x1163f, 0x11640,
-0x116ab, 0x116ab,
-0x116ad, 0x116ad,
-0x116b0, 0x116b5,
-0x116b7, 0x116b7,
-0x1171d, 0x1171f,
-0x11722, 0x11725,
-0x11727, 0x1172b,
-0x16af0, 0x16af4,
-0x16b30, 0x16b36,
-0x16f8f, 0x16f92,
-0x1bc9d, 0x1bc9e,
-0x1d165, 0x1d165,
-0x1d167, 0x1d169,
-0x1d16e, 0x1d172,
-0x1d17b, 0x1d182,
-0x1d185, 0x1d18b,
-0x1d1aa, 0x1d1ad,
-0x1d242, 0x1d244,
-0x1da00, 0x1da36,
-0x1da3b, 0x1da6c,
-0x1da75, 0x1da75,
-0x1da84, 0x1da84,
-0x1da9b, 0x1da9f,
-0x1daa1, 0x1daaf,
-0x1e8d0, 0x1e8d6,
-0xe0100, 0xe01ef,
-}; /* END of CR_Grapheme_Extend */
-
-/* PROPERTY: 'Grapheme_Base': Derived Property */
-static const OnigCodePoint
-CR_Grapheme_Base[] = { 743,
-0x0020, 0x007e,
-0x00a0, 0x00ac,
-0x00ae, 0x02ff,
-0x0370, 0x0377,
-0x037a, 0x037f,
-0x0384, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x03a1,
-0x03a3, 0x0482,
-0x048a, 0x052f,
-0x0531, 0x0556,
-0x0559, 0x055f,
-0x0561, 0x0587,
-0x0589, 0x058a,
-0x058d, 0x058f,
-0x05be, 0x05be,
-0x05c0, 0x05c0,
-0x05c3, 0x05c3,
-0x05c6, 0x05c6,
-0x05d0, 0x05ea,
-0x05f0, 0x05f4,
-0x0606, 0x060f,
-0x061b, 0x061b,
-0x061e, 0x064a,
-0x0660, 0x066f,
-0x0671, 0x06d5,
-0x06de, 0x06de,
-0x06e5, 0x06e6,
-0x06e9, 0x06e9,
-0x06ee, 0x070d,
-0x0710, 0x0710,
-0x0712, 0x072f,
-0x074d, 0x07a5,
-0x07b1, 0x07b1,
-0x07c0, 0x07ea,
-0x07f4, 0x07fa,
-0x0800, 0x0815,
-0x081a, 0x081a,
-0x0824, 0x0824,
-0x0828, 0x0828,
-0x0830, 0x083e,
-0x0840, 0x0858,
-0x085e, 0x085e,
-0x08a0, 0x08b4,
-0x0903, 0x0939,
-0x093b, 0x093b,
-0x093d, 0x0940,
-0x0949, 0x094c,
-0x094e, 0x0950,
-0x0958, 0x0961,
-0x0964, 0x0980,
-0x0982, 0x0983,
-0x0985, 0x098c,
-0x098f, 0x0990,
-0x0993, 0x09a8,
-0x09aa, 0x09b0,
-0x09b2, 0x09b2,
-0x09b6, 0x09b9,
-0x09bd, 0x09bd,
-0x09bf, 0x09c0,
-0x09c7, 0x09c8,
-0x09cb, 0x09cc,
-0x09ce, 0x09ce,
-0x09dc, 0x09dd,
-0x09df, 0x09e1,
-0x09e6, 0x09fb,
-0x0a03, 0x0a03,
-0x0a05, 0x0a0a,
-0x0a0f, 0x0a10,
-0x0a13, 0x0a28,
-0x0a2a, 0x0a30,
-0x0a32, 0x0a33,
-0x0a35, 0x0a36,
-0x0a38, 0x0a39,
-0x0a3e, 0x0a40,
-0x0a59, 0x0a5c,
-0x0a5e, 0x0a5e,
-0x0a66, 0x0a6f,
-0x0a72, 0x0a74,
-0x0a83, 0x0a83,
-0x0a85, 0x0a8d,
-0x0a8f, 0x0a91,
-0x0a93, 0x0aa8,
-0x0aaa, 0x0ab0,
-0x0ab2, 0x0ab3,
-0x0ab5, 0x0ab9,
-0x0abd, 0x0ac0,
-0x0ac9, 0x0ac9,
-0x0acb, 0x0acc,
-0x0ad0, 0x0ad0,
-0x0ae0, 0x0ae1,
-0x0ae6, 0x0af1,
-0x0af9, 0x0af9,
-0x0b02, 0x0b03,
-0x0b05, 0x0b0c,
-0x0b0f, 0x0b10,
-0x0b13, 0x0b28,
-0x0b2a, 0x0b30,
-0x0b32, 0x0b33,
-0x0b35, 0x0b39,
-0x0b3d, 0x0b3d,
-0x0b40, 0x0b40,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4c,
-0x0b5c, 0x0b5d,
-0x0b5f, 0x0b61,
-0x0b66, 0x0b77,
-0x0b83, 0x0b83,
-0x0b85, 0x0b8a,
-0x0b8e, 0x0b90,
-0x0b92, 0x0b95,
-0x0b99, 0x0b9a,
-0x0b9c, 0x0b9c,
-0x0b9e, 0x0b9f,
-0x0ba3, 0x0ba4,
-0x0ba8, 0x0baa,
-0x0bae, 0x0bb9,
-0x0bbf, 0x0bbf,
-0x0bc1, 0x0bc2,
-0x0bc6, 0x0bc8,
-0x0bca, 0x0bcc,
-0x0bd0, 0x0bd0,
-0x0be6, 0x0bfa,
-0x0c01, 0x0c03,
-0x0c05, 0x0c0c,
-0x0c0e, 0x0c10,
-0x0c12, 0x0c28,
-0x0c2a, 0x0c39,
-0x0c3d, 0x0c3d,
-0x0c41, 0x0c44,
-0x0c58, 0x0c5a,
-0x0c60, 0x0c61,
-0x0c66, 0x0c6f,
-0x0c78, 0x0c7f,
-0x0c82, 0x0c83,
-0x0c85, 0x0c8c,
-0x0c8e, 0x0c90,
-0x0c92, 0x0ca8,
-0x0caa, 0x0cb3,
-0x0cb5, 0x0cb9,
-0x0cbd, 0x0cbe,
-0x0cc0, 0x0cc1,
-0x0cc3, 0x0cc4,
-0x0cc7, 0x0cc8,
-0x0cca, 0x0ccb,
-0x0cde, 0x0cde,
-0x0ce0, 0x0ce1,
-0x0ce6, 0x0cef,
-0x0cf1, 0x0cf2,
-0x0d02, 0x0d03,
-0x0d05, 0x0d0c,
-0x0d0e, 0x0d10,
-0x0d12, 0x0d3a,
-0x0d3d, 0x0d3d,
-0x0d3f, 0x0d40,
-0x0d46, 0x0d48,
-0x0d4a, 0x0d4c,
-0x0d4e, 0x0d4e,
-0x0d5f, 0x0d61,
-0x0d66, 0x0d75,
-0x0d79, 0x0d7f,
-0x0d82, 0x0d83,
-0x0d85, 0x0d96,
-0x0d9a, 0x0db1,
-0x0db3, 0x0dbb,
-0x0dbd, 0x0dbd,
-0x0dc0, 0x0dc6,
-0x0dd0, 0x0dd1,
-0x0dd8, 0x0dde,
-0x0de6, 0x0def,
-0x0df2, 0x0df4,
-0x0e01, 0x0e30,
-0x0e32, 0x0e33,
-0x0e3f, 0x0e46,
-0x0e4f, 0x0e5b,
-0x0e81, 0x0e82,
-0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
-0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
-0x0eb2, 0x0eb3,
-0x0ebd, 0x0ebd,
-0x0ec0, 0x0ec4,
-0x0ec6, 0x0ec6,
-0x0ed0, 0x0ed9,
-0x0edc, 0x0edf,
-0x0f00, 0x0f17,
-0x0f1a, 0x0f34,
-0x0f36, 0x0f36,
-0x0f38, 0x0f38,
-0x0f3a, 0x0f47,
-0x0f49, 0x0f6c,
-0x0f7f, 0x0f7f,
-0x0f85, 0x0f85,
-0x0f88, 0x0f8c,
-0x0fbe, 0x0fc5,
-0x0fc7, 0x0fcc,
-0x0fce, 0x0fda,
-0x1000, 0x102c,
-0x1031, 0x1031,
-0x1038, 0x1038,
-0x103b, 0x103c,
-0x103f, 0x1057,
-0x105a, 0x105d,
-0x1061, 0x1070,
-0x1075, 0x1081,
-0x1083, 0x1084,
-0x1087, 0x108c,
-0x108e, 0x109c,
-0x109e, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x10d0, 0x1248,
-0x124a, 0x124d,
-0x1250, 0x1256,
-0x1258, 0x1258,
-0x125a, 0x125d,
-0x1260, 0x1288,
-0x128a, 0x128d,
-0x1290, 0x12b0,
-0x12b2, 0x12b5,
-0x12b8, 0x12be,
-0x12c0, 0x12c0,
-0x12c2, 0x12c5,
-0x12c8, 0x12d6,
-0x12d8, 0x1310,
-0x1312, 0x1315,
-0x1318, 0x135a,
-0x1360, 0x137c,
-0x1380, 0x1399,
-0x13a0, 0x13f5,
-0x13f8, 0x13fd,
-0x1400, 0x169c,
-0x16a0, 0x16f8,
-0x1700, 0x170c,
-0x170e, 0x1711,
-0x1720, 0x1731,
-0x1735, 0x1736,
-0x1740, 0x1751,
-0x1760, 0x176c,
-0x176e, 0x1770,
-0x1780, 0x17b3,
-0x17b6, 0x17b6,
-0x17be, 0x17c5,
-0x17c7, 0x17c8,
-0x17d4, 0x17dc,
-0x17e0, 0x17e9,
-0x17f0, 0x17f9,
-0x1800, 0x180a,
-0x1810, 0x1819,
-0x1820, 0x1877,
-0x1880, 0x18a8,
-0x18aa, 0x18aa,
-0x18b0, 0x18f5,
-0x1900, 0x191e,
-0x1923, 0x1926,
-0x1929, 0x192b,
-0x1930, 0x1931,
-0x1933, 0x1938,
-0x1940, 0x1940,
-0x1944, 0x196d,
-0x1970, 0x1974,
-0x1980, 0x19ab,
-0x19b0, 0x19c9,
-0x19d0, 0x19da,
-0x19de, 0x1a16,
-0x1a19, 0x1a1a,
-0x1a1e, 0x1a55,
-0x1a57, 0x1a57,
-0x1a61, 0x1a61,
-0x1a63, 0x1a64,
-0x1a6d, 0x1a72,
-0x1a80, 0x1a89,
-0x1a90, 0x1a99,
-0x1aa0, 0x1aad,
-0x1b04, 0x1b33,
-0x1b35, 0x1b35,
-0x1b3b, 0x1b3b,
-0x1b3d, 0x1b41,
-0x1b43, 0x1b4b,
-0x1b50, 0x1b6a,
-0x1b74, 0x1b7c,
-0x1b82, 0x1ba1,
-0x1ba6, 0x1ba7,
-0x1baa, 0x1baa,
-0x1bae, 0x1be5,
-0x1be7, 0x1be7,
-0x1bea, 0x1bec,
-0x1bee, 0x1bee,
-0x1bf2, 0x1bf3,
-0x1bfc, 0x1c2b,
-0x1c34, 0x1c35,
-0x1c3b, 0x1c49,
-0x1c4d, 0x1c7f,
-0x1cc0, 0x1cc7,
-0x1cd3, 0x1cd3,
-0x1ce1, 0x1ce1,
-0x1ce9, 0x1cec,
-0x1cee, 0x1cf3,
-0x1cf5, 0x1cf6,
-0x1d00, 0x1dbf,
-0x1e00, 0x1f15,
-0x1f18, 0x1f1d,
-0x1f20, 0x1f45,
-0x1f48, 0x1f4d,
-0x1f50, 0x1f57,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f7d,
-0x1f80, 0x1fb4,
-0x1fb6, 0x1fc4,
-0x1fc6, 0x1fd3,
-0x1fd6, 0x1fdb,
-0x1fdd, 0x1fef,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffe,
-0x2000, 0x200a,
-0x2010, 0x2027,
-0x202f, 0x205f,
-0x2070, 0x2071,
-0x2074, 0x208e,
-0x2090, 0x209c,
-0x20a0, 0x20be,
-0x2100, 0x218b,
-0x2190, 0x23fa,
-0x2400, 0x2426,
-0x2440, 0x244a,
-0x2460, 0x2b73,
-0x2b76, 0x2b95,
-0x2b98, 0x2bb9,
-0x2bbd, 0x2bc8,
-0x2bca, 0x2bd1,
-0x2bec, 0x2bef,
-0x2c00, 0x2c2e,
-0x2c30, 0x2c5e,
-0x2c60, 0x2cee,
-0x2cf2, 0x2cf3,
-0x2cf9, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-0x2d30, 0x2d67,
-0x2d6f, 0x2d70,
-0x2d80, 0x2d96,
-0x2da0, 0x2da6,
-0x2da8, 0x2dae,
-0x2db0, 0x2db6,
-0x2db8, 0x2dbe,
-0x2dc0, 0x2dc6,
-0x2dc8, 0x2dce,
-0x2dd0, 0x2dd6,
-0x2dd8, 0x2dde,
-0x2e00, 0x2e42,
-0x2e80, 0x2e99,
-0x2e9b, 0x2ef3,
-0x2f00, 0x2fd5,
-0x2ff0, 0x2ffb,
-0x3000, 0x3029,
-0x3030, 0x303f,
-0x3041, 0x3096,
-0x309b, 0x30ff,
-0x3105, 0x312d,
-0x3131, 0x318e,
-0x3190, 0x31ba,
-0x31c0, 0x31e3,
-0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
-0x4dc0, 0x9fd5,
-0xa000, 0xa48c,
-0xa490, 0xa4c6,
-0xa4d0, 0xa62b,
-0xa640, 0xa66e,
-0xa673, 0xa673,
-0xa67e, 0xa69d,
-0xa6a0, 0xa6ef,
-0xa6f2, 0xa6f7,
-0xa700, 0xa7ad,
-0xa7b0, 0xa7b7,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa824,
-0xa827, 0xa82b,
-0xa830, 0xa839,
-0xa840, 0xa877,
-0xa880, 0xa8c3,
-0xa8ce, 0xa8d9,
-0xa8f2, 0xa8fd,
-0xa900, 0xa925,
-0xa92e, 0xa946,
-0xa952, 0xa953,
-0xa95f, 0xa97c,
-0xa983, 0xa9b2,
-0xa9b4, 0xa9b5,
-0xa9ba, 0xa9bb,
-0xa9bd, 0xa9cd,
-0xa9cf, 0xa9d9,
-0xa9de, 0xa9e4,
-0xa9e6, 0xa9fe,
-0xaa00, 0xaa28,
-0xaa2f, 0xaa30,
-0xaa33, 0xaa34,
-0xaa40, 0xaa42,
-0xaa44, 0xaa4b,
-0xaa4d, 0xaa4d,
-0xaa50, 0xaa59,
-0xaa5c, 0xaa7b,
-0xaa7d, 0xaaaf,
-0xaab1, 0xaab1,
-0xaab5, 0xaab6,
-0xaab9, 0xaabd,
-0xaac0, 0xaac0,
-0xaac2, 0xaac2,
-0xaadb, 0xaaeb,
-0xaaee, 0xaaf5,
-0xab01, 0xab06,
-0xab09, 0xab0e,
-0xab11, 0xab16,
-0xab20, 0xab26,
-0xab28, 0xab2e,
-0xab30, 0xab65,
-0xab70, 0xabe4,
-0xabe6, 0xabe7,
-0xabe9, 0xabec,
-0xabf0, 0xabf9,
-0xac00, 0xd7a3,
-0xd7b0, 0xd7c6,
-0xd7cb, 0xd7fb,
-0xf900, 0xfa6d,
-0xfa70, 0xfad9,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xfb1d, 0xfb1d,
-0xfb1f, 0xfb36,
-0xfb38, 0xfb3c,
-0xfb3e, 0xfb3e,
-0xfb40, 0xfb41,
-0xfb43, 0xfb44,
-0xfb46, 0xfbc1,
-0xfbd3, 0xfd3f,
-0xfd50, 0xfd8f,
-0xfd92, 0xfdc7,
-0xfdf0, 0xfdfd,
-0xfe10, 0xfe19,
-0xfe30, 0xfe52,
-0xfe54, 0xfe66,
-0xfe68, 0xfe6b,
-0xfe70, 0xfe74,
-0xfe76, 0xfefc,
-0xff01, 0xff9d,
-0xffa0, 0xffbe,
-0xffc2, 0xffc7,
-0xffca, 0xffcf,
-0xffd2, 0xffd7,
-0xffda, 0xffdc,
-0xffe0, 0xffe6,
-0xffe8, 0xffee,
-0xfffc, 0xfffd,
-0x10000, 0x1000b,
-0x1000d, 0x10026,
-0x10028, 0x1003a,
-0x1003c, 0x1003d,
-0x1003f, 0x1004d,
-0x10050, 0x1005d,
-0x10080, 0x100fa,
-0x10100, 0x10102,
-0x10107, 0x10133,
-0x10137, 0x1018c,
-0x10190, 0x1019b,
-0x101a0, 0x101a0,
-0x101d0, 0x101fc,
-0x10280, 0x1029c,
-0x102a0, 0x102d0,
-0x102e1, 0x102fb,
-0x10300, 0x10323,
-0x10330, 0x1034a,
-0x10350, 0x10375,
-0x10380, 0x1039d,
-0x1039f, 0x103c3,
-0x103c8, 0x103d5,
-0x10400, 0x1049d,
-0x104a0, 0x104a9,
-0x10500, 0x10527,
-0x10530, 0x10563,
-0x1056f, 0x1056f,
-0x10600, 0x10736,
-0x10740, 0x10755,
-0x10760, 0x10767,
-0x10800, 0x10805,
-0x10808, 0x10808,
-0x1080a, 0x10835,
-0x10837, 0x10838,
-0x1083c, 0x1083c,
-0x1083f, 0x10855,
-0x10857, 0x1089e,
-0x108a7, 0x108af,
-0x108e0, 0x108f2,
-0x108f4, 0x108f5,
-0x108fb, 0x1091b,
-0x1091f, 0x10939,
-0x1093f, 0x1093f,
-0x10980, 0x109b7,
-0x109bc, 0x109cf,
-0x109d2, 0x10a00,
-0x10a10, 0x10a13,
-0x10a15, 0x10a17,
-0x10a19, 0x10a33,
-0x10a40, 0x10a47,
-0x10a50, 0x10a58,
-0x10a60, 0x10a9f,
-0x10ac0, 0x10ae4,
-0x10aeb, 0x10af6,
-0x10b00, 0x10b35,
-0x10b39, 0x10b55,
-0x10b58, 0x10b72,
-0x10b78, 0x10b91,
-0x10b99, 0x10b9c,
-0x10ba9, 0x10baf,
-0x10c00, 0x10c48,
-0x10c80, 0x10cb2,
-0x10cc0, 0x10cf2,
-0x10cfa, 0x10cff,
-0x10e60, 0x10e7e,
-0x11000, 0x11000,
-0x11002, 0x11037,
-0x11047, 0x1104d,
-0x11052, 0x1106f,
-0x11082, 0x110b2,
-0x110b7, 0x110b8,
-0x110bb, 0x110bc,
-0x110be, 0x110c1,
-0x110d0, 0x110e8,
-0x110f0, 0x110f9,
-0x11103, 0x11126,
-0x1112c, 0x1112c,
-0x11136, 0x11143,
-0x11150, 0x11172,
-0x11174, 0x11176,
-0x11182, 0x111b5,
-0x111bf, 0x111c9,
-0x111cd, 0x111cd,
-0x111d0, 0x111df,
-0x111e1, 0x111f4,
-0x11200, 0x11211,
-0x11213, 0x1122e,
-0x11232, 0x11233,
-0x11235, 0x11235,
-0x11238, 0x1123d,
-0x11280, 0x11286,
-0x11288, 0x11288,
-0x1128a, 0x1128d,
-0x1128f, 0x1129d,
-0x1129f, 0x112a9,
-0x112b0, 0x112de,
-0x112e0, 0x112e2,
-0x112f0, 0x112f9,
-0x11302, 0x11303,
-0x11305, 0x1130c,
-0x1130f, 0x11310,
-0x11313, 0x11328,
-0x1132a, 0x11330,
-0x11332, 0x11333,
-0x11335, 0x11339,
-0x1133d, 0x1133d,
-0x1133f, 0x1133f,
-0x11341, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134d,
-0x11350, 0x11350,
-0x1135d, 0x11363,
-0x11480, 0x114af,
-0x114b1, 0x114b2,
-0x114b9, 0x114b9,
-0x114bb, 0x114bc,
-0x114be, 0x114be,
-0x114c1, 0x114c1,
-0x114c4, 0x114c7,
-0x114d0, 0x114d9,
-0x11580, 0x115ae,
-0x115b0, 0x115b1,
-0x115b8, 0x115bb,
-0x115be, 0x115be,
-0x115c1, 0x115db,
-0x11600, 0x11632,
-0x1163b, 0x1163c,
-0x1163e, 0x1163e,
-0x11641, 0x11644,
-0x11650, 0x11659,
-0x11680, 0x116aa,
-0x116ac, 0x116ac,
-0x116ae, 0x116af,
-0x116b6, 0x116b6,
-0x116c0, 0x116c9,
-0x11700, 0x11719,
-0x11720, 0x11721,
-0x11726, 0x11726,
-0x11730, 0x1173f,
-0x118a0, 0x118f2,
-0x118ff, 0x118ff,
-0x11ac0, 0x11af8,
-0x12000, 0x12399,
-0x12400, 0x1246e,
-0x12470, 0x12474,
-0x12480, 0x12543,
-0x13000, 0x1342e,
-0x14400, 0x14646,
-0x16800, 0x16a38,
-0x16a40, 0x16a5e,
-0x16a60, 0x16a69,
-0x16a6e, 0x16a6f,
-0x16ad0, 0x16aed,
-0x16af5, 0x16af5,
-0x16b00, 0x16b2f,
-0x16b37, 0x16b45,
-0x16b50, 0x16b59,
-0x16b5b, 0x16b61,
-0x16b63, 0x16b77,
-0x16b7d, 0x16b8f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
-0x1b000, 0x1b001,
-0x1bc00, 0x1bc6a,
-0x1bc70, 0x1bc7c,
-0x1bc80, 0x1bc88,
-0x1bc90, 0x1bc99,
-0x1bc9c, 0x1bc9c,
-0x1bc9f, 0x1bc9f,
-0x1d000, 0x1d0f5,
-0x1d100, 0x1d126,
-0x1d129, 0x1d164,
-0x1d166, 0x1d166,
-0x1d16a, 0x1d16d,
-0x1d183, 0x1d184,
-0x1d18c, 0x1d1a9,
-0x1d1ae, 0x1d1e8,
-0x1d200, 0x1d241,
-0x1d245, 0x1d245,
-0x1d300, 0x1d356,
-0x1d360, 0x1d371,
-0x1d400, 0x1d454,
-0x1d456, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d51e, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d7cb,
-0x1d7ce, 0x1d9ff,
-0x1da37, 0x1da3a,
-0x1da6d, 0x1da74,
-0x1da76, 0x1da83,
-0x1da85, 0x1da8b,
-0x1e800, 0x1e8c4,
-0x1e8c7, 0x1e8cf,
-0x1ee00, 0x1ee03,
-0x1ee05, 0x1ee1f,
-0x1ee21, 0x1ee22,
-0x1ee24, 0x1ee24,
-0x1ee27, 0x1ee27,
-0x1ee29, 0x1ee32,
-0x1ee34, 0x1ee37,
-0x1ee39, 0x1ee39,
-0x1ee3b, 0x1ee3b,
-0x1ee42, 0x1ee42,
-0x1ee47, 0x1ee47,
-0x1ee49, 0x1ee49,
-0x1ee4b, 0x1ee4b,
-0x1ee4d, 0x1ee4f,
-0x1ee51, 0x1ee52,
-0x1ee54, 0x1ee54,
-0x1ee57, 0x1ee57,
-0x1ee59, 0x1ee59,
-0x1ee5b, 0x1ee5b,
-0x1ee5d, 0x1ee5d,
-0x1ee5f, 0x1ee5f,
-0x1ee61, 0x1ee62,
-0x1ee64, 0x1ee64,
-0x1ee67, 0x1ee6a,
-0x1ee6c, 0x1ee72,
-0x1ee74, 0x1ee77,
-0x1ee79, 0x1ee7c,
-0x1ee7e, 0x1ee7e,
-0x1ee80, 0x1ee89,
-0x1ee8b, 0x1ee9b,
-0x1eea1, 0x1eea3,
-0x1eea5, 0x1eea9,
-0x1eeab, 0x1eebb,
-0x1eef0, 0x1eef1,
-0x1f000, 0x1f02b,
-0x1f030, 0x1f093,
-0x1f0a0, 0x1f0ae,
-0x1f0b1, 0x1f0bf,
-0x1f0c1, 0x1f0cf,
-0x1f0d1, 0x1f0f5,
-0x1f100, 0x1f10c,
-0x1f110, 0x1f12e,
-0x1f130, 0x1f16b,
-0x1f170, 0x1f19a,
-0x1f1e6, 0x1f202,
-0x1f210, 0x1f23a,
-0x1f240, 0x1f248,
-0x1f250, 0x1f251,
-0x1f300, 0x1f579,
-0x1f57b, 0x1f5a3,
-0x1f5a5, 0x1f6d0,
-0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f3,
-0x1f700, 0x1f773,
-0x1f780, 0x1f7d4,
-0x1f800, 0x1f80b,
-0x1f810, 0x1f847,
-0x1f850, 0x1f859,
-0x1f860, 0x1f887,
-0x1f890, 0x1f8ad,
-0x1f910, 0x1f918,
-0x1f980, 0x1f984,
-0x1f9c0, 0x1f9c0,
-0x20000, 0x2a6d6,
-0x2a700, 0x2b734,
-0x2b740, 0x2b81d,
-0x2b820, 0x2cea1,
-0x2f800, 0x2fa1d,
-}; /* END of CR_Grapheme_Base */
-
-/* PROPERTY: 'Grapheme_Link': Derived Property */
-static const OnigCodePoint
-CR_Grapheme_Link[] = { 41,
-0x094d, 0x094d,
-0x09cd, 0x09cd,
-0x0a4d, 0x0a4d,
-0x0acd, 0x0acd,
-0x0b4d, 0x0b4d,
-0x0bcd, 0x0bcd,
-0x0c4d, 0x0c4d,
-0x0ccd, 0x0ccd,
-0x0d4d, 0x0d4d,
-0x0dca, 0x0dca,
-0x0e3a, 0x0e3a,
-0x0f84, 0x0f84,
-0x1039, 0x103a,
-0x1714, 0x1714,
-0x1734, 0x1734,
-0x17d2, 0x17d2,
-0x1a60, 0x1a60,
-0x1b44, 0x1b44,
-0x1baa, 0x1bab,
-0x1bf2, 0x1bf3,
-0x2d7f, 0x2d7f,
-0xa806, 0xa806,
-0xa8c4, 0xa8c4,
-0xa953, 0xa953,
-0xa9c0, 0xa9c0,
-0xaaf6, 0xaaf6,
-0xabed, 0xabed,
-0x10a3f, 0x10a3f,
-0x11046, 0x11046,
-0x1107f, 0x1107f,
-0x110b9, 0x110b9,
-0x11133, 0x11134,
-0x111c0, 0x111c0,
-0x11235, 0x11235,
-0x112ea, 0x112ea,
-0x1134d, 0x1134d,
-0x114c2, 0x114c2,
-0x115bf, 0x115bf,
-0x1163f, 0x1163f,
-0x116b6, 0x116b6,
-0x1172b, 0x1172b,
-}; /* END of CR_Grapheme_Link */
-
-/* PROPERTY: 'Common': Script */
-static const OnigCodePoint
-CR_Common[] = { 161,
-0x0000, 0x0040,
-0x005b, 0x0060,
-0x007b, 0x00a9,
-0x00ab, 0x00b9,
-0x00bb, 0x00bf,
-0x00d7, 0x00d7,
-0x00f7, 0x00f7,
-0x02b9, 0x02df,
-0x02e5, 0x02e9,
-0x02ec, 0x02ff,
-0x0374, 0x0374,
-0x037e, 0x037e,
-0x0385, 0x0385,
-0x0387, 0x0387,
-0x0589, 0x0589,
-0x0605, 0x0605,
-0x060c, 0x060c,
-0x061b, 0x061c,
-0x061f, 0x061f,
-0x0640, 0x0640,
-0x06dd, 0x06dd,
-0x0964, 0x0965,
-0x0e3f, 0x0e3f,
-0x0fd5, 0x0fd8,
-0x10fb, 0x10fb,
-0x16eb, 0x16ed,
-0x1735, 0x1736,
-0x1802, 0x1803,
-0x1805, 0x1805,
-0x1cd3, 0x1cd3,
-0x1ce1, 0x1ce1,
-0x1ce9, 0x1cec,
-0x1cee, 0x1cf3,
-0x1cf5, 0x1cf6,
-0x2000, 0x200b,
-0x200e, 0x2064,
-0x2066, 0x2070,
-0x2074, 0x207e,
-0x2080, 0x208e,
-0x20a0, 0x20be,
-0x2100, 0x2125,
-0x2127, 0x2129,
-0x212c, 0x2131,
-0x2133, 0x214d,
-0x214f, 0x215f,
-0x2189, 0x218b,
-0x2190, 0x23fa,
-0x2400, 0x2426,
-0x2440, 0x244a,
-0x2460, 0x27ff,
-0x2900, 0x2b73,
-0x2b76, 0x2b95,
-0x2b98, 0x2bb9,
-0x2bbd, 0x2bc8,
-0x2bca, 0x2bd1,
-0x2bec, 0x2bef,
-0x2e00, 0x2e42,
-0x2ff0, 0x2ffb,
-0x3000, 0x3004,
-0x3006, 0x3006,
-0x3008, 0x3020,
-0x3030, 0x3037,
-0x303c, 0x303f,
-0x309b, 0x309c,
-0x30a0, 0x30a0,
-0x30fb, 0x30fc,
-0x3190, 0x319f,
-0x31c0, 0x31e3,
-0x3220, 0x325f,
-0x327f, 0x32cf,
-0x3358, 0x33ff,
-0x4dc0, 0x4dff,
-0xa700, 0xa721,
-0xa788, 0xa78a,
-0xa830, 0xa839,
-0xa92e, 0xa92e,
-0xa9cf, 0xa9cf,
-0xab5b, 0xab5b,
-0xfd3e, 0xfd3f,
-0xfe10, 0xfe19,
-0xfe30, 0xfe52,
-0xfe54, 0xfe66,
-0xfe68, 0xfe6b,
-0xfeff, 0xfeff,
-0xff01, 0xff20,
-0xff3b, 0xff40,
-0xff5b, 0xff65,
-0xff70, 0xff70,
-0xff9e, 0xff9f,
-0xffe0, 0xffe6,
-0xffe8, 0xffee,
-0xfff9, 0xfffd,
-0x10100, 0x10102,
-0x10107, 0x10133,
-0x10137, 0x1013f,
-0x10190, 0x1019b,
-0x101d0, 0x101fc,
-0x102e1, 0x102fb,
-0x1bca0, 0x1bca3,
-0x1d000, 0x1d0f5,
-0x1d100, 0x1d126,
-0x1d129, 0x1d166,
-0x1d16a, 0x1d17a,
-0x1d183, 0x1d184,
-0x1d18c, 0x1d1a9,
-0x1d1ae, 0x1d1e8,
-0x1d300, 0x1d356,
-0x1d360, 0x1d371,
-0x1d400, 0x1d454,
-0x1d456, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d51e, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d7cb,
-0x1d7ce, 0x1d7ff,
-0x1f000, 0x1f02b,
-0x1f030, 0x1f093,
-0x1f0a0, 0x1f0ae,
-0x1f0b1, 0x1f0bf,
-0x1f0c1, 0x1f0cf,
-0x1f0d1, 0x1f0f5,
-0x1f100, 0x1f10c,
-0x1f110, 0x1f12e,
-0x1f130, 0x1f16b,
-0x1f170, 0x1f19a,
-0x1f1e6, 0x1f1ff,
-0x1f201, 0x1f202,
-0x1f210, 0x1f23a,
-0x1f240, 0x1f248,
-0x1f250, 0x1f251,
-0x1f300, 0x1f579,
-0x1f57b, 0x1f5a3,
-0x1f5a5, 0x1f6d0,
-0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f3,
-0x1f700, 0x1f773,
-0x1f780, 0x1f7d4,
-0x1f800, 0x1f80b,
-0x1f810, 0x1f847,
-0x1f850, 0x1f859,
-0x1f860, 0x1f887,
-0x1f890, 0x1f8ad,
-0x1f910, 0x1f918,
-0x1f980, 0x1f984,
-0x1f9c0, 0x1f9c0,
-0xe0001, 0xe0001,
-0xe0020, 0xe007f,
-}; /* END of CR_Common */
-
-/* PROPERTY: 'Latin': Script */
-static const OnigCodePoint
-CR_Latin[] = { 31,
-0x0041, 0x005a,
-0x0061, 0x007a,
-0x00aa, 0x00aa,
-0x00ba, 0x00ba,
-0x00c0, 0x00d6,
-0x00d8, 0x00f6,
-0x00f8, 0x02b8,
-0x02e0, 0x02e4,
-0x1d00, 0x1d25,
-0x1d2c, 0x1d5c,
-0x1d62, 0x1d65,
-0x1d6b, 0x1d77,
-0x1d79, 0x1dbe,
-0x1e00, 0x1eff,
-0x2071, 0x2071,
-0x207f, 0x207f,
-0x2090, 0x209c,
-0x212a, 0x212b,
-0x2132, 0x2132,
-0x214e, 0x214e,
-0x2160, 0x2188,
-0x2c60, 0x2c7f,
-0xa722, 0xa787,
-0xa78b, 0xa7ad,
-0xa7b0, 0xa7b7,
-0xa7f7, 0xa7ff,
-0xab30, 0xab5a,
-0xab5c, 0xab64,
-0xfb00, 0xfb06,
-0xff21, 0xff3a,
-0xff41, 0xff5a,
-}; /* END of CR_Latin */
-
-/* PROPERTY: 'Greek': Script */
-static const OnigCodePoint
-CR_Greek[] = { 36,
-0x0370, 0x0373,
-0x0375, 0x0377,
-0x037a, 0x037d,
-0x037f, 0x037f,
-0x0384, 0x0384,
-0x0386, 0x0386,
-0x0388, 0x038a,
-0x038c, 0x038c,
-0x038e, 0x03a1,
-0x03a3, 0x03e1,
-0x03f0, 0x03ff,
-0x1d26, 0x1d2a,
-0x1d5d, 0x1d61,
-0x1d66, 0x1d6a,
-0x1dbf, 0x1dbf,
-0x1f00, 0x1f15,
-0x1f18, 0x1f1d,
-0x1f20, 0x1f45,
-0x1f48, 0x1f4d,
-0x1f50, 0x1f57,
-0x1f59, 0x1f59,
-0x1f5b, 0x1f5b,
-0x1f5d, 0x1f5d,
-0x1f5f, 0x1f7d,
-0x1f80, 0x1fb4,
-0x1fb6, 0x1fc4,
-0x1fc6, 0x1fd3,
-0x1fd6, 0x1fdb,
-0x1fdd, 0x1fef,
-0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffe,
-0x2126, 0x2126,
-0xab65, 0xab65,
-0x10140, 0x1018c,
-0x101a0, 0x101a0,
-0x1d200, 0x1d245,
-}; /* END of CR_Greek */
-
-/* PROPERTY: 'Cyrillic': Script */
-static const OnigCodePoint
-CR_Cyrillic[] = { 7,
-0x0400, 0x0484,
-0x0487, 0x052f,
-0x1d2b, 0x1d2b,
-0x1d78, 0x1d78,
-0x2de0, 0x2dff,
-0xa640, 0xa69f,
-0xfe2e, 0xfe2f,
-}; /* END of CR_Cyrillic */
-
-/* PROPERTY: 'Armenian': Script */
-static const OnigCodePoint
-CR_Armenian[] = { 6,
-0x0531, 0x0556,
-0x0559, 0x055f,
-0x0561, 0x0587,
-0x058a, 0x058a,
-0x058d, 0x058f,
-0xfb13, 0xfb17,
-}; /* END of CR_Armenian */
-
-/* PROPERTY: 'Hebrew': Script */
-static const OnigCodePoint
-CR_Hebrew[] = { 9,
-0x0591, 0x05c7,
-0x05d0, 0x05ea,
-0x05f0, 0x05f4,
-0xfb1d, 0xfb36,
-0xfb38, 0xfb3c,
-0xfb3e, 0xfb3e,
-0xfb40, 0xfb41,
-0xfb43, 0xfb44,
-0xfb46, 0xfb4f,
-}; /* END of CR_Hebrew */
-
-/* PROPERTY: 'Arabic': Script */
-static const OnigCodePoint
-CR_Arabic[] = { 54,
-0x0600, 0x0604,
-0x0606, 0x060b,
-0x060d, 0x061a,
-0x061e, 0x061e,
-0x0620, 0x063f,
-0x0641, 0x064a,
-0x0656, 0x066f,
-0x0671, 0x06dc,
-0x06de, 0x06ff,
-0x0750, 0x077f,
-0x08a0, 0x08b4,
-0x08e3, 0x08ff,
-0xfb50, 0xfbc1,
-0xfbd3, 0xfd3d,
-0xfd50, 0xfd8f,
-0xfd92, 0xfdc7,
-0xfdf0, 0xfdfd,
-0xfe70, 0xfe74,
-0xfe76, 0xfefc,
-0x10e60, 0x10e7e,
-0x1ee00, 0x1ee03,
-0x1ee05, 0x1ee1f,
-0x1ee21, 0x1ee22,
-0x1ee24, 0x1ee24,
-0x1ee27, 0x1ee27,
-0x1ee29, 0x1ee32,
-0x1ee34, 0x1ee37,
-0x1ee39, 0x1ee39,
-0x1ee3b, 0x1ee3b,
-0x1ee42, 0x1ee42,
-0x1ee47, 0x1ee47,
-0x1ee49, 0x1ee49,
-0x1ee4b, 0x1ee4b,
-0x1ee4d, 0x1ee4f,
-0x1ee51, 0x1ee52,
-0x1ee54, 0x1ee54,
-0x1ee57, 0x1ee57,
-0x1ee59, 0x1ee59,
-0x1ee5b, 0x1ee5b,
-0x1ee5d, 0x1ee5d,
-0x1ee5f, 0x1ee5f,
-0x1ee61, 0x1ee62,
-0x1ee64, 0x1ee64,
-0x1ee67, 0x1ee6a,
-0x1ee6c, 0x1ee72,
-0x1ee74, 0x1ee77,
-0x1ee79, 0x1ee7c,
-0x1ee7e, 0x1ee7e,
-0x1ee80, 0x1ee89,
-0x1ee8b, 0x1ee9b,
-0x1eea1, 0x1eea3,
-0x1eea5, 0x1eea9,
-0x1eeab, 0x1eebb,
-0x1eef0, 0x1eef1,
-}; /* END of CR_Arabic */
-
-/* PROPERTY: 'Syriac': Script */
-static const OnigCodePoint
-CR_Syriac[] = { 3,
-0x0700, 0x070d,
-0x070f, 0x074a,
-0x074d, 0x074f,
-}; /* END of CR_Syriac */
-
-/* PROPERTY: 'Thaana': Script */
-static const OnigCodePoint
-CR_Thaana[] = { 1,
-0x0780, 0x07b1,
-}; /* END of CR_Thaana */
-
-/* PROPERTY: 'Devanagari': Script */
-static const OnigCodePoint
-CR_Devanagari[] = { 4,
-0x0900, 0x0950,
-0x0953, 0x0963,
-0x0966, 0x097f,
-0xa8e0, 0xa8fd,
-}; /* END of CR_Devanagari */
-
-/* PROPERTY: 'Bengali': Script */
-static const OnigCodePoint
-CR_Bengali[] = { 14,
-0x0980, 0x0983,
-0x0985, 0x098c,
-0x098f, 0x0990,
-0x0993, 0x09a8,
-0x09aa, 0x09b0,
-0x09b2, 0x09b2,
-0x09b6, 0x09b9,
-0x09bc, 0x09c4,
-0x09c7, 0x09c8,
-0x09cb, 0x09ce,
-0x09d7, 0x09d7,
-0x09dc, 0x09dd,
-0x09df, 0x09e3,
-0x09e6, 0x09fb,
-}; /* END of CR_Bengali */
-
-/* PROPERTY: 'Gurmukhi': Script */
-static const OnigCodePoint
-CR_Gurmukhi[] = { 16,
-0x0a01, 0x0a03,
-0x0a05, 0x0a0a,
-0x0a0f, 0x0a10,
-0x0a13, 0x0a28,
-0x0a2a, 0x0a30,
-0x0a32, 0x0a33,
-0x0a35, 0x0a36,
-0x0a38, 0x0a39,
-0x0a3c, 0x0a3c,
-0x0a3e, 0x0a42,
-0x0a47, 0x0a48,
-0x0a4b, 0x0a4d,
-0x0a51, 0x0a51,
-0x0a59, 0x0a5c,
-0x0a5e, 0x0a5e,
-0x0a66, 0x0a75,
-}; /* END of CR_Gurmukhi */
-
-/* PROPERTY: 'Gujarati': Script */
-static const OnigCodePoint
-CR_Gujarati[] = { 14,
-0x0a81, 0x0a83,
-0x0a85, 0x0a8d,
-0x0a8f, 0x0a91,
-0x0a93, 0x0aa8,
-0x0aaa, 0x0ab0,
-0x0ab2, 0x0ab3,
-0x0ab5, 0x0ab9,
-0x0abc, 0x0ac5,
-0x0ac7, 0x0ac9,
-0x0acb, 0x0acd,
-0x0ad0, 0x0ad0,
-0x0ae0, 0x0ae3,
-0x0ae6, 0x0af1,
-0x0af9, 0x0af9,
-}; /* END of CR_Gujarati */
-
-/* PROPERTY: 'Oriya': Script */
-static const OnigCodePoint
-CR_Oriya[] = { 14,
-0x0b01, 0x0b03,
-0x0b05, 0x0b0c,
-0x0b0f, 0x0b10,
-0x0b13, 0x0b28,
-0x0b2a, 0x0b30,
-0x0b32, 0x0b33,
-0x0b35, 0x0b39,
-0x0b3c, 0x0b44,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4d,
-0x0b56, 0x0b57,
-0x0b5c, 0x0b5d,
-0x0b5f, 0x0b63,
-0x0b66, 0x0b77,
-}; /* END of CR_Oriya */
-
-/* PROPERTY: 'Tamil': Script */
-static const OnigCodePoint
-CR_Tamil[] = { 16,
-0x0b82, 0x0b83,
-0x0b85, 0x0b8a,
-0x0b8e, 0x0b90,
-0x0b92, 0x0b95,
-0x0b99, 0x0b9a,
-0x0b9c, 0x0b9c,
-0x0b9e, 0x0b9f,
-0x0ba3, 0x0ba4,
-0x0ba8, 0x0baa,
-0x0bae, 0x0bb9,
-0x0bbe, 0x0bc2,
-0x0bc6, 0x0bc8,
-0x0bca, 0x0bcd,
-0x0bd0, 0x0bd0,
-0x0bd7, 0x0bd7,
-0x0be6, 0x0bfa,
-}; /* END of CR_Tamil */
-
-/* PROPERTY: 'Telugu': Script */
-static const OnigCodePoint
-CR_Telugu[] = { 13,
-0x0c00, 0x0c03,
-0x0c05, 0x0c0c,
-0x0c0e, 0x0c10,
-0x0c12, 0x0c28,
-0x0c2a, 0x0c39,
-0x0c3d, 0x0c44,
-0x0c46, 0x0c48,
-0x0c4a, 0x0c4d,
-0x0c55, 0x0c56,
-0x0c58, 0x0c5a,
-0x0c60, 0x0c63,
-0x0c66, 0x0c6f,
-0x0c78, 0x0c7f,
-}; /* END of CR_Telugu */
-
-/* PROPERTY: 'Kannada': Script */
-static const OnigCodePoint
-CR_Kannada[] = { 14,
-0x0c81, 0x0c83,
-0x0c85, 0x0c8c,
-0x0c8e, 0x0c90,
-0x0c92, 0x0ca8,
-0x0caa, 0x0cb3,
-0x0cb5, 0x0cb9,
-0x0cbc, 0x0cc4,
-0x0cc6, 0x0cc8,
-0x0cca, 0x0ccd,
-0x0cd5, 0x0cd6,
-0x0cde, 0x0cde,
-0x0ce0, 0x0ce3,
-0x0ce6, 0x0cef,
-0x0cf1, 0x0cf2,
-}; /* END of CR_Kannada */
-
-/* PROPERTY: 'Malayalam': Script */
-static const OnigCodePoint
-CR_Malayalam[] = { 11,
-0x0d01, 0x0d03,
-0x0d05, 0x0d0c,
-0x0d0e, 0x0d10,
-0x0d12, 0x0d3a,
-0x0d3d, 0x0d44,
-0x0d46, 0x0d48,
-0x0d4a, 0x0d4e,
-0x0d57, 0x0d57,
-0x0d5f, 0x0d63,
-0x0d66, 0x0d75,
-0x0d79, 0x0d7f,
-}; /* END of CR_Malayalam */
-
-/* PROPERTY: 'Sinhala': Script */
-static const OnigCodePoint
-CR_Sinhala[] = { 13,
-0x0d82, 0x0d83,
-0x0d85, 0x0d96,
-0x0d9a, 0x0db1,
-0x0db3, 0x0dbb,
-0x0dbd, 0x0dbd,
-0x0dc0, 0x0dc6,
-0x0dca, 0x0dca,
-0x0dcf, 0x0dd4,
-0x0dd6, 0x0dd6,
-0x0dd8, 0x0ddf,
-0x0de6, 0x0def,
-0x0df2, 0x0df4,
-0x111e1, 0x111f4,
-}; /* END of CR_Sinhala */
-
-/* PROPERTY: 'Thai': Script */
-static const OnigCodePoint
-CR_Thai[] = { 2,
-0x0e01, 0x0e3a,
-0x0e40, 0x0e5b,
-}; /* END of CR_Thai */
-
-/* PROPERTY: 'Lao': Script */
-static const OnigCodePoint
-CR_Lao[] = { 18,
-0x0e81, 0x0e82,
-0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
-0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
-0x0ec0, 0x0ec4,
-0x0ec6, 0x0ec6,
-0x0ec8, 0x0ecd,
-0x0ed0, 0x0ed9,
-0x0edc, 0x0edf,
-}; /* END of CR_Lao */
-
-/* PROPERTY: 'Tibetan': Script */
-static const OnigCodePoint
-CR_Tibetan[] = { 7,
-0x0f00, 0x0f47,
-0x0f49, 0x0f6c,
-0x0f71, 0x0f97,
-0x0f99, 0x0fbc,
-0x0fbe, 0x0fcc,
-0x0fce, 0x0fd4,
-0x0fd9, 0x0fda,
-}; /* END of CR_Tibetan */
-
-/* PROPERTY: 'Myanmar': Script */
-static const OnigCodePoint
-CR_Myanmar[] = { 3,
-0x1000, 0x109f,
-0xa9e0, 0xa9fe,
-0xaa60, 0xaa7f,
-}; /* END of CR_Myanmar */
-
-/* PROPERTY: 'Georgian': Script */
-static const OnigCodePoint
-CR_Georgian[] = { 8,
-0x10a0, 0x10c5,
-0x10c7, 0x10c7,
-0x10cd, 0x10cd,
-0x10d0, 0x10fa,
-0x10fc, 0x10ff,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-}; /* END of CR_Georgian */
-
-/* PROPERTY: 'Hangul': Script */
-static const OnigCodePoint
-CR_Hangul[] = { 14,
-0x1100, 0x11ff,
-0x302e, 0x302f,
-0x3131, 0x318e,
-0x3200, 0x321e,
-0x3260, 0x327e,
-0xa960, 0xa97c,
-0xac00, 0xd7a3,
-0xd7b0, 0xd7c6,
-0xd7cb, 0xd7fb,
-0xffa0, 0xffbe,
-0xffc2, 0xffc7,
-0xffca, 0xffcf,
-0xffd2, 0xffd7,
-0xffda, 0xffdc,
-}; /* END of CR_Hangul */
-
-/* PROPERTY: 'Ethiopic': Script */
-static const OnigCodePoint
-CR_Ethiopic[] = { 32,
-0x1200, 0x1248,
-0x124a, 0x124d,
-0x1250, 0x1256,
-0x1258, 0x1258,
-0x125a, 0x125d,
-0x1260, 0x1288,
-0x128a, 0x128d,
-0x1290, 0x12b0,
-0x12b2, 0x12b5,
-0x12b8, 0x12be,
-0x12c0, 0x12c0,
-0x12c2, 0x12c5,
-0x12c8, 0x12d6,
-0x12d8, 0x1310,
-0x1312, 0x1315,
-0x1318, 0x135a,
-0x135d, 0x137c,
-0x1380, 0x1399,
-0x2d80, 0x2d96,
-0x2da0, 0x2da6,
-0x2da8, 0x2dae,
-0x2db0, 0x2db6,
-0x2db8, 0x2dbe,
-0x2dc0, 0x2dc6,
-0x2dc8, 0x2dce,
-0x2dd0, 0x2dd6,
-0x2dd8, 0x2dde,
-0xab01, 0xab06,
-0xab09, 0xab0e,
-0xab11, 0xab16,
-0xab20, 0xab26,
-0xab28, 0xab2e,
-}; /* END of CR_Ethiopic */
-
-/* PROPERTY: 'Cherokee': Script */
-static const OnigCodePoint
-CR_Cherokee[] = { 3,
-0x13a0, 0x13f5,
-0x13f8, 0x13fd,
-0xab70, 0xabbf,
-}; /* END of CR_Cherokee */
-
-/* PROPERTY: 'Canadian_Aboriginal': Script */
-static const OnigCodePoint
-CR_Canadian_Aboriginal[] = { 2,
-0x1400, 0x167f,
-0x18b0, 0x18f5,
-}; /* END of CR_Canadian_Aboriginal */
-
-/* PROPERTY: 'Ogham': Script */
-static const OnigCodePoint
-CR_Ogham[] = { 1,
-0x1680, 0x169c,
-}; /* END of CR_Ogham */
-
-/* PROPERTY: 'Runic': Script */
-static const OnigCodePoint
-CR_Runic[] = { 2,
-0x16a0, 0x16ea,
-0x16ee, 0x16f8,
-}; /* END of CR_Runic */
-
-/* PROPERTY: 'Khmer': Script */
-static const OnigCodePoint
-CR_Khmer[] = { 4,
-0x1780, 0x17dd,
-0x17e0, 0x17e9,
-0x17f0, 0x17f9,
-0x19e0, 0x19ff,
-}; /* END of CR_Khmer */
-
-/* PROPERTY: 'Mongolian': Script */
-static const OnigCodePoint
-CR_Mongolian[] = { 6,
-0x1800, 0x1801,
-0x1804, 0x1804,
-0x1806, 0x180e,
-0x1810, 0x1819,
-0x1820, 0x1877,
-0x1880, 0x18aa,
-}; /* END of CR_Mongolian */
-
-/* PROPERTY: 'Hiragana': Script */
-static const OnigCodePoint
-CR_Hiragana[] = { 4,
-0x3041, 0x3096,
-0x309d, 0x309f,
-0x1b001, 0x1b001,
-0x1f200, 0x1f200,
-}; /* END of CR_Hiragana */
-
-/* PROPERTY: 'Katakana': Script */
-static const OnigCodePoint
-CR_Katakana[] = { 8,
-0x30a1, 0x30fa,
-0x30fd, 0x30ff,
-0x31f0, 0x31ff,
-0x32d0, 0x32fe,
-0x3300, 0x3357,
-0xff66, 0xff6f,
-0xff71, 0xff9d,
-0x1b000, 0x1b000,
-}; /* END of CR_Katakana */
-
-/* PROPERTY: 'Bopomofo': Script */
-static const OnigCodePoint
-CR_Bopomofo[] = { 3,
-0x02ea, 0x02eb,
-0x3105, 0x312d,
-0x31a0, 0x31ba,
-}; /* END of CR_Bopomofo */
-
-/* PROPERTY: 'Han': Script */
-static const OnigCodePoint
-CR_Han[] = { 16,
-0x2e80, 0x2e99,
-0x2e9b, 0x2ef3,
-0x2f00, 0x2fd5,
-0x3005, 0x3005,
-0x3007, 0x3007,
-0x3021, 0x3029,
-0x3038, 0x303b,
-0x3400, 0x4db5,
-0x4e00, 0x9fd5,
-0xf900, 0xfa6d,
-0xfa70, 0xfad9,
-0x20000, 0x2a6d6,
-0x2a700, 0x2b734,
-0x2b740, 0x2b81d,
-0x2b820, 0x2cea1,
-0x2f800, 0x2fa1d,
-}; /* END of CR_Han */
-
/* PROPERTY: 'Yi': Script */
static const OnigCodePoint
CR_Yi[] = { 2,
@@ -18431,2389 +20778,42 @@ CR_Yi[] = { 2,
0xa490, 0xa4c6,
}; /* END of CR_Yi */
-/* PROPERTY: 'Old_Italic': Script */
-static const OnigCodePoint
-CR_Old_Italic[] = { 1,
-0x10300, 0x10323,
-}; /* END of CR_Old_Italic */
-
-/* PROPERTY: 'Gothic': Script */
-static const OnigCodePoint
-CR_Gothic[] = { 1,
-0x10330, 0x1034a,
-}; /* END of CR_Gothic */
-
-/* PROPERTY: 'Deseret': Script */
-static const OnigCodePoint
-CR_Deseret[] = { 1,
-0x10400, 0x1044f,
-}; /* END of CR_Deseret */
-
-/* PROPERTY: 'Inherited': Script */
-static const OnigCodePoint
-CR_Inherited[] = { 27,
-0x0300, 0x036f,
-0x0485, 0x0486,
-0x064b, 0x0655,
-0x0670, 0x0670,
-0x0951, 0x0952,
-0x1ab0, 0x1abe,
-0x1cd0, 0x1cd2,
-0x1cd4, 0x1ce0,
-0x1ce2, 0x1ce8,
-0x1ced, 0x1ced,
-0x1cf4, 0x1cf4,
-0x1cf8, 0x1cf9,
-0x1dc0, 0x1df5,
-0x1dfc, 0x1dff,
-0x200c, 0x200d,
-0x20d0, 0x20f0,
-0x302a, 0x302d,
-0x3099, 0x309a,
-0xfe00, 0xfe0f,
-0xfe20, 0xfe2d,
-0x101fd, 0x101fd,
-0x102e0, 0x102e0,
-0x1d167, 0x1d169,
-0x1d17b, 0x1d182,
-0x1d185, 0x1d18b,
-0x1d1aa, 0x1d1ad,
-0xe0100, 0xe01ef,
-}; /* END of CR_Inherited */
-
-/* PROPERTY: 'Tagalog': Script */
-static const OnigCodePoint
-CR_Tagalog[] = { 2,
-0x1700, 0x170c,
-0x170e, 0x1714,
-}; /* END of CR_Tagalog */
-
-/* PROPERTY: 'Hanunoo': Script */
-static const OnigCodePoint
-CR_Hanunoo[] = { 1,
-0x1720, 0x1734,
-}; /* END of CR_Hanunoo */
-
-/* PROPERTY: 'Buhid': Script */
-static const OnigCodePoint
-CR_Buhid[] = { 1,
-0x1740, 0x1753,
-}; /* END of CR_Buhid */
-
-/* PROPERTY: 'Tagbanwa': Script */
-static const OnigCodePoint
-CR_Tagbanwa[] = { 3,
-0x1760, 0x176c,
-0x176e, 0x1770,
-0x1772, 0x1773,
-}; /* END of CR_Tagbanwa */
-
-/* PROPERTY: 'Limbu': Script */
-static const OnigCodePoint
-CR_Limbu[] = { 5,
-0x1900, 0x191e,
-0x1920, 0x192b,
-0x1930, 0x193b,
-0x1940, 0x1940,
-0x1944, 0x194f,
-}; /* END of CR_Limbu */
-
-/* PROPERTY: 'Tai_Le': Script */
-static const OnigCodePoint
-CR_Tai_Le[] = { 2,
-0x1950, 0x196d,
-0x1970, 0x1974,
-}; /* END of CR_Tai_Le */
-
-/* PROPERTY: 'Linear_B': Script */
-static const OnigCodePoint
-CR_Linear_B[] = { 7,
-0x10000, 0x1000b,
-0x1000d, 0x10026,
-0x10028, 0x1003a,
-0x1003c, 0x1003d,
-0x1003f, 0x1004d,
-0x10050, 0x1005d,
-0x10080, 0x100fa,
-}; /* END of CR_Linear_B */
-
-/* PROPERTY: 'Ugaritic': Script */
-static const OnigCodePoint
-CR_Ugaritic[] = { 2,
-0x10380, 0x1039d,
-0x1039f, 0x1039f,
-}; /* END of CR_Ugaritic */
-
-/* PROPERTY: 'Shavian': Script */
-static const OnigCodePoint
-CR_Shavian[] = { 1,
-0x10450, 0x1047f,
-}; /* END of CR_Shavian */
-
-/* PROPERTY: 'Osmanya': Script */
-static const OnigCodePoint
-CR_Osmanya[] = { 2,
-0x10480, 0x1049d,
-0x104a0, 0x104a9,
-}; /* END of CR_Osmanya */
-
-/* PROPERTY: 'Cypriot': Script */
-static const OnigCodePoint
-CR_Cypriot[] = { 6,
-0x10800, 0x10805,
-0x10808, 0x10808,
-0x1080a, 0x10835,
-0x10837, 0x10838,
-0x1083c, 0x1083c,
-0x1083f, 0x1083f,
-}; /* END of CR_Cypriot */
-
-/* PROPERTY: 'Braille': Script */
-static const OnigCodePoint
-CR_Braille[] = { 1,
-0x2800, 0x28ff,
-}; /* END of CR_Braille */
-
-/* PROPERTY: 'Buginese': Script */
-static const OnigCodePoint
-CR_Buginese[] = { 2,
-0x1a00, 0x1a1b,
-0x1a1e, 0x1a1f,
-}; /* END of CR_Buginese */
-
-/* PROPERTY: 'Coptic': Script */
-static const OnigCodePoint
-CR_Coptic[] = { 3,
-0x03e2, 0x03ef,
-0x2c80, 0x2cf3,
-0x2cf9, 0x2cff,
-}; /* END of CR_Coptic */
-
-/* PROPERTY: 'New_Tai_Lue': Script */
-static const OnigCodePoint
-CR_New_Tai_Lue[] = { 4,
-0x1980, 0x19ab,
-0x19b0, 0x19c9,
-0x19d0, 0x19da,
-0x19de, 0x19df,
-}; /* END of CR_New_Tai_Lue */
-
-/* PROPERTY: 'Glagolitic': Script */
-static const OnigCodePoint
-CR_Glagolitic[] = { 2,
-0x2c00, 0x2c2e,
-0x2c30, 0x2c5e,
-}; /* END of CR_Glagolitic */
-
-/* PROPERTY: 'Tifinagh': Script */
-static const OnigCodePoint
-CR_Tifinagh[] = { 3,
-0x2d30, 0x2d67,
-0x2d6f, 0x2d70,
-0x2d7f, 0x2d7f,
-}; /* END of CR_Tifinagh */
-
-/* PROPERTY: 'Syloti_Nagri': Script */
-static const OnigCodePoint
-CR_Syloti_Nagri[] = { 1,
-0xa800, 0xa82b,
-}; /* END of CR_Syloti_Nagri */
-
-/* PROPERTY: 'Old_Persian': Script */
-static const OnigCodePoint
-CR_Old_Persian[] = { 2,
-0x103a0, 0x103c3,
-0x103c8, 0x103d5,
-}; /* END of CR_Old_Persian */
-
-/* PROPERTY: 'Kharoshthi': Script */
-static const OnigCodePoint
-CR_Kharoshthi[] = { 8,
-0x10a00, 0x10a03,
-0x10a05, 0x10a06,
-0x10a0c, 0x10a13,
-0x10a15, 0x10a17,
-0x10a19, 0x10a33,
-0x10a38, 0x10a3a,
-0x10a3f, 0x10a47,
-0x10a50, 0x10a58,
-}; /* END of CR_Kharoshthi */
-
-/* PROPERTY: 'Balinese': Script */
-static const OnigCodePoint
-CR_Balinese[] = { 2,
-0x1b00, 0x1b4b,
-0x1b50, 0x1b7c,
-}; /* END of CR_Balinese */
-
-/* PROPERTY: 'Cuneiform': Script */
-static const OnigCodePoint
-CR_Cuneiform[] = { 4,
-0x12000, 0x12399,
-0x12400, 0x1246e,
-0x12470, 0x12474,
-0x12480, 0x12543,
-}; /* END of CR_Cuneiform */
-
-/* PROPERTY: 'Phoenician': Script */
-static const OnigCodePoint
-CR_Phoenician[] = { 2,
-0x10900, 0x1091b,
-0x1091f, 0x1091f,
-}; /* END of CR_Phoenician */
-
-/* PROPERTY: 'Phags_Pa': Script */
-static const OnigCodePoint
-CR_Phags_Pa[] = { 1,
-0xa840, 0xa877,
-}; /* END of CR_Phags_Pa */
-
-/* PROPERTY: 'Nko': Script */
-static const OnigCodePoint
-CR_Nko[] = { 1,
-0x07c0, 0x07fa,
-}; /* END of CR_Nko */
-
-/* PROPERTY: 'Sundanese': Script */
-static const OnigCodePoint
-CR_Sundanese[] = { 2,
-0x1b80, 0x1bbf,
-0x1cc0, 0x1cc7,
-}; /* END of CR_Sundanese */
-
-/* PROPERTY: 'Lepcha': Script */
-static const OnigCodePoint
-CR_Lepcha[] = { 3,
-0x1c00, 0x1c37,
-0x1c3b, 0x1c49,
-0x1c4d, 0x1c4f,
-}; /* END of CR_Lepcha */
-
-/* PROPERTY: 'Ol_Chiki': Script */
-static const OnigCodePoint
-CR_Ol_Chiki[] = { 1,
-0x1c50, 0x1c7f,
-}; /* END of CR_Ol_Chiki */
-
-/* PROPERTY: 'Vai': Script */
-static const OnigCodePoint
-CR_Vai[] = { 1,
-0xa500, 0xa62b,
-}; /* END of CR_Vai */
-
-/* PROPERTY: 'Saurashtra': Script */
-static const OnigCodePoint
-CR_Saurashtra[] = { 2,
-0xa880, 0xa8c4,
-0xa8ce, 0xa8d9,
-}; /* END of CR_Saurashtra */
-
-/* PROPERTY: 'Kayah_Li': Script */
-static const OnigCodePoint
-CR_Kayah_Li[] = { 2,
-0xa900, 0xa92d,
-0xa92f, 0xa92f,
-}; /* END of CR_Kayah_Li */
-
-/* PROPERTY: 'Rejang': Script */
-static const OnigCodePoint
-CR_Rejang[] = { 2,
-0xa930, 0xa953,
-0xa95f, 0xa95f,
-}; /* END of CR_Rejang */
-
-/* PROPERTY: 'Lycian': Script */
-static const OnigCodePoint
-CR_Lycian[] = { 1,
-0x10280, 0x1029c,
-}; /* END of CR_Lycian */
-
-/* PROPERTY: 'Carian': Script */
-static const OnigCodePoint
-CR_Carian[] = { 1,
-0x102a0, 0x102d0,
-}; /* END of CR_Carian */
-
-/* PROPERTY: 'Lydian': Script */
-static const OnigCodePoint
-CR_Lydian[] = { 2,
-0x10920, 0x10939,
-0x1093f, 0x1093f,
-}; /* END of CR_Lydian */
-
-/* PROPERTY: 'Cham': Script */
-static const OnigCodePoint
-CR_Cham[] = { 4,
-0xaa00, 0xaa36,
-0xaa40, 0xaa4d,
-0xaa50, 0xaa59,
-0xaa5c, 0xaa5f,
-}; /* END of CR_Cham */
-
-/* PROPERTY: 'Tai_Tham': Script */
-static const OnigCodePoint
-CR_Tai_Tham[] = { 5,
-0x1a20, 0x1a5e,
-0x1a60, 0x1a7c,
-0x1a7f, 0x1a89,
-0x1a90, 0x1a99,
-0x1aa0, 0x1aad,
-}; /* END of CR_Tai_Tham */
-
-/* PROPERTY: 'Tai_Viet': Script */
-static const OnigCodePoint
-CR_Tai_Viet[] = { 2,
-0xaa80, 0xaac2,
-0xaadb, 0xaadf,
-}; /* END of CR_Tai_Viet */
-
-/* PROPERTY: 'Avestan': Script */
-static const OnigCodePoint
-CR_Avestan[] = { 2,
-0x10b00, 0x10b35,
-0x10b39, 0x10b3f,
-}; /* END of CR_Avestan */
-
-/* PROPERTY: 'Egyptian_Hieroglyphs': Script */
-static const OnigCodePoint
-CR_Egyptian_Hieroglyphs[] = { 1,
-0x13000, 0x1342e,
-}; /* END of CR_Egyptian_Hieroglyphs */
-
-/* PROPERTY: 'Samaritan': Script */
-static const OnigCodePoint
-CR_Samaritan[] = { 2,
-0x0800, 0x082d,
-0x0830, 0x083e,
-}; /* END of CR_Samaritan */
-
-/* PROPERTY: 'Lisu': Script */
-static const OnigCodePoint
-CR_Lisu[] = { 1,
-0xa4d0, 0xa4ff,
-}; /* END of CR_Lisu */
-
-/* PROPERTY: 'Bamum': Script */
-static const OnigCodePoint
-CR_Bamum[] = { 2,
-0xa6a0, 0xa6f7,
-0x16800, 0x16a38,
-}; /* END of CR_Bamum */
-
-/* PROPERTY: 'Javanese': Script */
-static const OnigCodePoint
-CR_Javanese[] = { 3,
-0xa980, 0xa9cd,
-0xa9d0, 0xa9d9,
-0xa9de, 0xa9df,
-}; /* END of CR_Javanese */
-
-/* PROPERTY: 'Meetei_Mayek': Script */
-static const OnigCodePoint
-CR_Meetei_Mayek[] = { 3,
-0xaae0, 0xaaf6,
-0xabc0, 0xabed,
-0xabf0, 0xabf9,
-}; /* END of CR_Meetei_Mayek */
-
-/* PROPERTY: 'Imperial_Aramaic': Script */
-static const OnigCodePoint
-CR_Imperial_Aramaic[] = { 2,
-0x10840, 0x10855,
-0x10857, 0x1085f,
-}; /* END of CR_Imperial_Aramaic */
-
-/* PROPERTY: 'Old_South_Arabian': Script */
-static const OnigCodePoint
-CR_Old_South_Arabian[] = { 1,
-0x10a60, 0x10a7f,
-}; /* END of CR_Old_South_Arabian */
-
-/* PROPERTY: 'Inscriptional_Parthian': Script */
-static const OnigCodePoint
-CR_Inscriptional_Parthian[] = { 2,
-0x10b40, 0x10b55,
-0x10b58, 0x10b5f,
-}; /* END of CR_Inscriptional_Parthian */
-
-/* PROPERTY: 'Inscriptional_Pahlavi': Script */
-static const OnigCodePoint
-CR_Inscriptional_Pahlavi[] = { 2,
-0x10b60, 0x10b72,
-0x10b78, 0x10b7f,
-}; /* END of CR_Inscriptional_Pahlavi */
-
-/* PROPERTY: 'Old_Turkic': Script */
-static const OnigCodePoint
-CR_Old_Turkic[] = { 1,
-0x10c00, 0x10c48,
-}; /* END of CR_Old_Turkic */
-
-/* PROPERTY: 'Kaithi': Script */
-static const OnigCodePoint
-CR_Kaithi[] = { 1,
-0x11080, 0x110c1,
-}; /* END of CR_Kaithi */
-
-/* PROPERTY: 'Batak': Script */
-static const OnigCodePoint
-CR_Batak[] = { 2,
-0x1bc0, 0x1bf3,
-0x1bfc, 0x1bff,
-}; /* END of CR_Batak */
-
-/* PROPERTY: 'Brahmi': Script */
-static const OnigCodePoint
-CR_Brahmi[] = { 3,
-0x11000, 0x1104d,
-0x11052, 0x1106f,
-0x1107f, 0x1107f,
-}; /* END of CR_Brahmi */
-
-/* PROPERTY: 'Mandaic': Script */
-static const OnigCodePoint
-CR_Mandaic[] = { 2,
-0x0840, 0x085b,
-0x085e, 0x085e,
-}; /* END of CR_Mandaic */
-
-/* PROPERTY: 'Chakma': Script */
-static const OnigCodePoint
-CR_Chakma[] = { 2,
-0x11100, 0x11134,
-0x11136, 0x11143,
-}; /* END of CR_Chakma */
-
-/* PROPERTY: 'Meroitic_Cursive': Script */
-static const OnigCodePoint
-CR_Meroitic_Cursive[] = { 3,
-0x109a0, 0x109b7,
-0x109bc, 0x109cf,
-0x109d2, 0x109ff,
-}; /* END of CR_Meroitic_Cursive */
-
-/* PROPERTY: 'Meroitic_Hieroglyphs': Script */
-static const OnigCodePoint
-CR_Meroitic_Hieroglyphs[] = { 1,
-0x10980, 0x1099f,
-}; /* END of CR_Meroitic_Hieroglyphs */
-
-/* PROPERTY: 'Miao': Script */
-static const OnigCodePoint
-CR_Miao[] = { 3,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f8f, 0x16f9f,
-}; /* END of CR_Miao */
-
-/* PROPERTY: 'Sharada': Script */
-static const OnigCodePoint
-CR_Sharada[] = { 2,
-0x11180, 0x111cd,
-0x111d0, 0x111df,
-}; /* END of CR_Sharada */
-
-/* PROPERTY: 'Sora_Sompeng': Script */
-static const OnigCodePoint
-CR_Sora_Sompeng[] = { 2,
-0x110d0, 0x110e8,
-0x110f0, 0x110f9,
-}; /* END of CR_Sora_Sompeng */
-
-/* PROPERTY: 'Takri': Script */
-static const OnigCodePoint
-CR_Takri[] = { 2,
-0x11680, 0x116b7,
-0x116c0, 0x116c9,
-}; /* END of CR_Takri */
-
-/* PROPERTY: 'Caucasian_Albanian': Script */
-static const OnigCodePoint
-CR_Caucasian_Albanian[] = { 2,
-0x10530, 0x10563,
-0x1056f, 0x1056f,
-}; /* END of CR_Caucasian_Albanian */
-
-/* PROPERTY: 'Bassa_Vah': Script */
-static const OnigCodePoint
-CR_Bassa_Vah[] = { 2,
-0x16ad0, 0x16aed,
-0x16af0, 0x16af5,
-}; /* END of CR_Bassa_Vah */
-
-/* PROPERTY: 'Duployan': Script */
-static const OnigCodePoint
-CR_Duployan[] = { 5,
-0x1bc00, 0x1bc6a,
-0x1bc70, 0x1bc7c,
-0x1bc80, 0x1bc88,
-0x1bc90, 0x1bc99,
-0x1bc9c, 0x1bc9f,
-}; /* END of CR_Duployan */
-
-/* PROPERTY: 'Elbasan': Script */
-static const OnigCodePoint
-CR_Elbasan[] = { 1,
-0x10500, 0x10527,
-}; /* END of CR_Elbasan */
-
-/* PROPERTY: 'Grantha': Script */
-static const OnigCodePoint
-CR_Grantha[] = { 15,
-0x11300, 0x11303,
-0x11305, 0x1130c,
-0x1130f, 0x11310,
-0x11313, 0x11328,
-0x1132a, 0x11330,
-0x11332, 0x11333,
-0x11335, 0x11339,
-0x1133c, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134d,
-0x11350, 0x11350,
-0x11357, 0x11357,
-0x1135d, 0x11363,
-0x11366, 0x1136c,
-0x11370, 0x11374,
-}; /* END of CR_Grantha */
-
-/* PROPERTY: 'Pahawh_Hmong': Script */
-static const OnigCodePoint
-CR_Pahawh_Hmong[] = { 5,
-0x16b00, 0x16b45,
-0x16b50, 0x16b59,
-0x16b5b, 0x16b61,
-0x16b63, 0x16b77,
-0x16b7d, 0x16b8f,
-}; /* END of CR_Pahawh_Hmong */
-
-/* PROPERTY: 'Khojki': Script */
-static const OnigCodePoint
-CR_Khojki[] = { 2,
-0x11200, 0x11211,
-0x11213, 0x1123d,
-}; /* END of CR_Khojki */
-
-/* PROPERTY: 'Linear_A': Script */
-static const OnigCodePoint
-CR_Linear_A[] = { 3,
-0x10600, 0x10736,
-0x10740, 0x10755,
-0x10760, 0x10767,
-}; /* END of CR_Linear_A */
-
-/* PROPERTY: 'Mahajani': Script */
-static const OnigCodePoint
-CR_Mahajani[] = { 1,
-0x11150, 0x11176,
-}; /* END of CR_Mahajani */
-
-/* PROPERTY: 'Manichaean': Script */
-static const OnigCodePoint
-CR_Manichaean[] = { 2,
-0x10ac0, 0x10ae6,
-0x10aeb, 0x10af6,
-}; /* END of CR_Manichaean */
-
-/* PROPERTY: 'Mende_Kikakui': Script */
-static const OnigCodePoint
-CR_Mende_Kikakui[] = { 2,
-0x1e800, 0x1e8c4,
-0x1e8c7, 0x1e8d6,
-}; /* END of CR_Mende_Kikakui */
-
-/* PROPERTY: 'Modi': Script */
-static const OnigCodePoint
-CR_Modi[] = { 2,
-0x11600, 0x11644,
-0x11650, 0x11659,
-}; /* END of CR_Modi */
-
-/* PROPERTY: 'Mro': Script */
-static const OnigCodePoint
-CR_Mro[] = { 3,
-0x16a40, 0x16a5e,
-0x16a60, 0x16a69,
-0x16a6e, 0x16a6f,
-}; /* END of CR_Mro */
-
-/* PROPERTY: 'Old_North_Arabian': Script */
-static const OnigCodePoint
-CR_Old_North_Arabian[] = { 1,
-0x10a80, 0x10a9f,
-}; /* END of CR_Old_North_Arabian */
-
-/* PROPERTY: 'Nabataean': Script */
-static const OnigCodePoint
-CR_Nabataean[] = { 2,
-0x10880, 0x1089e,
-0x108a7, 0x108af,
-}; /* END of CR_Nabataean */
-
-/* PROPERTY: 'Palmyrene': Script */
-static const OnigCodePoint
-CR_Palmyrene[] = { 1,
-0x10860, 0x1087f,
-}; /* END of CR_Palmyrene */
-
-/* PROPERTY: 'Pau_Cin_Hau': Script */
-static const OnigCodePoint
-CR_Pau_Cin_Hau[] = { 1,
-0x11ac0, 0x11af8,
-}; /* END of CR_Pau_Cin_Hau */
-
-/* PROPERTY: 'Old_Permic': Script */
-static const OnigCodePoint
-CR_Old_Permic[] = { 1,
-0x10350, 0x1037a,
-}; /* END of CR_Old_Permic */
-
-/* PROPERTY: 'Psalter_Pahlavi': Script */
-static const OnigCodePoint
-CR_Psalter_Pahlavi[] = { 3,
-0x10b80, 0x10b91,
-0x10b99, 0x10b9c,
-0x10ba9, 0x10baf,
-}; /* END of CR_Psalter_Pahlavi */
-
-/* PROPERTY: 'Siddham': Script */
-static const OnigCodePoint
-CR_Siddham[] = { 2,
-0x11580, 0x115b5,
-0x115b8, 0x115dd,
-}; /* END of CR_Siddham */
-
-/* PROPERTY: 'Khudawadi': Script */
-static const OnigCodePoint
-CR_Khudawadi[] = { 2,
-0x112b0, 0x112ea,
-0x112f0, 0x112f9,
-}; /* END of CR_Khudawadi */
-
-/* PROPERTY: 'Tirhuta': Script */
-static const OnigCodePoint
-CR_Tirhuta[] = { 2,
-0x11480, 0x114c7,
-0x114d0, 0x114d9,
-}; /* END of CR_Tirhuta */
-
-/* PROPERTY: 'Warang_Citi': Script */
-static const OnigCodePoint
-CR_Warang_Citi[] = { 2,
-0x118a0, 0x118f2,
-0x118ff, 0x118ff,
-}; /* END of CR_Warang_Citi */
-
-/* PROPERTY: 'Ahom': Script */
-static const OnigCodePoint
-CR_Ahom[] = { 3,
-0x11700, 0x11719,
-0x1171d, 0x1172b,
-0x11730, 0x1173f,
-}; /* END of CR_Ahom */
-
-/* PROPERTY: 'Anatolian_Hieroglyphs': Script */
-static const OnigCodePoint
-CR_Anatolian_Hieroglyphs[] = { 1,
-0x14400, 0x14646,
-}; /* END of CR_Anatolian_Hieroglyphs */
-
-/* PROPERTY: 'Hatran': Script */
-static const OnigCodePoint
-CR_Hatran[] = { 3,
-0x108e0, 0x108f2,
-0x108f4, 0x108f5,
-0x108fb, 0x108ff,
-}; /* END of CR_Hatran */
-
-/* PROPERTY: 'Multani': Script */
-static const OnigCodePoint
-CR_Multani[] = { 5,
-0x11280, 0x11286,
-0x11288, 0x11288,
-0x1128a, 0x1128d,
-0x1128f, 0x1129d,
-0x1129f, 0x112a9,
-}; /* END of CR_Multani */
-
-/* PROPERTY: 'Old_Hungarian': Script */
-static const OnigCodePoint
-CR_Old_Hungarian[] = { 3,
-0x10c80, 0x10cb2,
-0x10cc0, 0x10cf2,
-0x10cfa, 0x10cff,
-}; /* END of CR_Old_Hungarian */
-
-/* PROPERTY: 'SignWriting': Script */
-static const OnigCodePoint
-CR_SignWriting[] = { 3,
-0x1d800, 0x1da8b,
-0x1da9b, 0x1da9f,
-0x1daa1, 0x1daaf,
-}; /* END of CR_SignWriting */
-
-/* PROPERTY: 'White_Space': Binary Property */
-#define CR_White_Space CR_Space
-
-/* PROPERTY: 'Bidi_Control': Binary Property */
-static const OnigCodePoint
-CR_Bidi_Control[] = { 4,
-0x061c, 0x061c,
-0x200e, 0x200f,
-0x202a, 0x202e,
-0x2066, 0x2069,
-}; /* END of CR_Bidi_Control */
-
-/* PROPERTY: 'Join_Control': Binary Property */
-static const OnigCodePoint
-CR_Join_Control[] = { 1,
-0x200c, 0x200d,
-}; /* END of CR_Join_Control */
-
-/* PROPERTY: 'Dash': Binary Property */
-static const OnigCodePoint
-CR_Dash[] = { 21,
-0x002d, 0x002d,
-0x058a, 0x058a,
-0x05be, 0x05be,
-0x1400, 0x1400,
-0x1806, 0x1806,
-0x2010, 0x2015,
-0x2053, 0x2053,
-0x207b, 0x207b,
-0x208b, 0x208b,
-0x2212, 0x2212,
-0x2e17, 0x2e17,
-0x2e1a, 0x2e1a,
-0x2e3a, 0x2e3b,
-0x2e40, 0x2e40,
-0x301c, 0x301c,
-0x3030, 0x3030,
-0x30a0, 0x30a0,
-0xfe31, 0xfe32,
-0xfe58, 0xfe58,
-0xfe63, 0xfe63,
-0xff0d, 0xff0d,
-}; /* END of CR_Dash */
-
-/* PROPERTY: 'Hyphen': Binary Property */
-static const OnigCodePoint
-CR_Hyphen[] = { 10,
-0x002d, 0x002d,
-0x00ad, 0x00ad,
-0x058a, 0x058a,
-0x1806, 0x1806,
-0x2010, 0x2011,
-0x2e17, 0x2e17,
-0x30fb, 0x30fb,
-0xfe63, 0xfe63,
-0xff0d, 0xff0d,
-0xff65, 0xff65,
-}; /* END of CR_Hyphen */
-
-/* PROPERTY: 'Quotation_Mark': Binary Property */
-static const OnigCodePoint
-CR_Quotation_Mark[] = { 13,
-0x0022, 0x0022,
-0x0027, 0x0027,
-0x00ab, 0x00ab,
-0x00bb, 0x00bb,
-0x2018, 0x201f,
-0x2039, 0x203a,
-0x2e42, 0x2e42,
-0x300c, 0x300f,
-0x301d, 0x301f,
-0xfe41, 0xfe44,
-0xff02, 0xff02,
-0xff07, 0xff07,
-0xff62, 0xff63,
-}; /* END of CR_Quotation_Mark */
-
-/* PROPERTY: 'Terminal_Punctuation': Binary Property */
-static const OnigCodePoint
-CR_Terminal_Punctuation[] = { 90,
-0x0021, 0x0021,
-0x002c, 0x002c,
-0x002e, 0x002e,
-0x003a, 0x003b,
-0x003f, 0x003f,
-0x037e, 0x037e,
-0x0387, 0x0387,
-0x0589, 0x0589,
-0x05c3, 0x05c3,
-0x060c, 0x060c,
-0x061b, 0x061b,
-0x061f, 0x061f,
-0x06d4, 0x06d4,
-0x0700, 0x070a,
-0x070c, 0x070c,
-0x07f8, 0x07f9,
-0x0830, 0x083e,
-0x085e, 0x085e,
-0x0964, 0x0965,
-0x0e5a, 0x0e5b,
-0x0f08, 0x0f08,
-0x0f0d, 0x0f12,
-0x104a, 0x104b,
-0x1361, 0x1368,
-0x166d, 0x166e,
-0x16eb, 0x16ed,
-0x1735, 0x1736,
-0x17d4, 0x17d6,
-0x17da, 0x17da,
-0x1802, 0x1805,
-0x1808, 0x1809,
-0x1944, 0x1945,
-0x1aa8, 0x1aab,
-0x1b5a, 0x1b5b,
-0x1b5d, 0x1b5f,
-0x1c3b, 0x1c3f,
-0x1c7e, 0x1c7f,
-0x203c, 0x203d,
-0x2047, 0x2049,
-0x2e2e, 0x2e2e,
-0x2e3c, 0x2e3c,
-0x2e41, 0x2e41,
-0x3001, 0x3002,
-0xa4fe, 0xa4ff,
-0xa60d, 0xa60f,
-0xa6f3, 0xa6f7,
-0xa876, 0xa877,
-0xa8ce, 0xa8cf,
-0xa92f, 0xa92f,
-0xa9c7, 0xa9c9,
-0xaa5d, 0xaa5f,
-0xaadf, 0xaadf,
-0xaaf0, 0xaaf1,
-0xabeb, 0xabeb,
-0xfe50, 0xfe52,
-0xfe54, 0xfe57,
-0xff01, 0xff01,
-0xff0c, 0xff0c,
-0xff0e, 0xff0e,
-0xff1a, 0xff1b,
-0xff1f, 0xff1f,
-0xff61, 0xff61,
-0xff64, 0xff64,
-0x1039f, 0x1039f,
-0x103d0, 0x103d0,
-0x10857, 0x10857,
-0x1091f, 0x1091f,
-0x10a56, 0x10a57,
-0x10af0, 0x10af5,
-0x10b3a, 0x10b3f,
-0x10b99, 0x10b9c,
-0x11047, 0x1104d,
-0x110be, 0x110c1,
-0x11141, 0x11143,
-0x111c5, 0x111c6,
-0x111cd, 0x111cd,
-0x111de, 0x111df,
-0x11238, 0x1123c,
-0x112a9, 0x112a9,
-0x115c2, 0x115c5,
-0x115c9, 0x115d7,
-0x11641, 0x11642,
-0x1173c, 0x1173e,
-0x12470, 0x12474,
-0x16a6e, 0x16a6f,
-0x16af5, 0x16af5,
-0x16b37, 0x16b39,
-0x16b44, 0x16b44,
-0x1bc9f, 0x1bc9f,
-0x1da87, 0x1da8a,
-}; /* END of CR_Terminal_Punctuation */
-
-/* PROPERTY: 'Other_Math': Binary Property */
-static const OnigCodePoint
-CR_Other_Math[] = { 134,
-0x005e, 0x005e,
-0x03d0, 0x03d2,
-0x03d5, 0x03d5,
-0x03f0, 0x03f1,
-0x03f4, 0x03f5,
-0x2016, 0x2016,
-0x2032, 0x2034,
-0x2040, 0x2040,
-0x2061, 0x2064,
-0x207d, 0x207e,
-0x208d, 0x208e,
-0x20d0, 0x20dc,
-0x20e1, 0x20e1,
-0x20e5, 0x20e6,
-0x20eb, 0x20ef,
-0x2102, 0x2102,
-0x2107, 0x2107,
-0x210a, 0x2113,
-0x2115, 0x2115,
-0x2119, 0x211d,
-0x2124, 0x2124,
-0x2128, 0x2129,
-0x212c, 0x212d,
-0x212f, 0x2131,
-0x2133, 0x2138,
-0x213c, 0x213f,
-0x2145, 0x2149,
-0x2195, 0x2199,
-0x219c, 0x219f,
-0x21a1, 0x21a2,
-0x21a4, 0x21a5,
-0x21a7, 0x21a7,
-0x21a9, 0x21ad,
-0x21b0, 0x21b1,
-0x21b6, 0x21b7,
-0x21bc, 0x21cd,
-0x21d0, 0x21d1,
-0x21d3, 0x21d3,
-0x21d5, 0x21db,
-0x21dd, 0x21dd,
-0x21e4, 0x21e5,
-0x2308, 0x230b,
-0x23b4, 0x23b5,
-0x23b7, 0x23b7,
-0x23d0, 0x23d0,
-0x23e2, 0x23e2,
-0x25a0, 0x25a1,
-0x25ae, 0x25b6,
-0x25bc, 0x25c0,
-0x25c6, 0x25c7,
-0x25ca, 0x25cb,
-0x25cf, 0x25d3,
-0x25e2, 0x25e2,
-0x25e4, 0x25e4,
-0x25e7, 0x25ec,
-0x2605, 0x2606,
-0x2640, 0x2640,
-0x2642, 0x2642,
-0x2660, 0x2663,
-0x266d, 0x266e,
-0x27c5, 0x27c6,
-0x27e6, 0x27ef,
-0x2983, 0x2998,
-0x29d8, 0x29db,
-0x29fc, 0x29fd,
-0xfe61, 0xfe61,
-0xfe63, 0xfe63,
-0xfe68, 0xfe68,
-0xff3c, 0xff3c,
-0xff3e, 0xff3e,
-0x1d400, 0x1d454,
-0x1d456, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d51e, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d6c0,
-0x1d6c2, 0x1d6da,
-0x1d6dc, 0x1d6fa,
-0x1d6fc, 0x1d714,
-0x1d716, 0x1d734,
-0x1d736, 0x1d74e,
-0x1d750, 0x1d76e,
-0x1d770, 0x1d788,
-0x1d78a, 0x1d7a8,
-0x1d7aa, 0x1d7c2,
-0x1d7c4, 0x1d7cb,
-0x1d7ce, 0x1d7ff,
-0x1ee00, 0x1ee03,
-0x1ee05, 0x1ee1f,
-0x1ee21, 0x1ee22,
-0x1ee24, 0x1ee24,
-0x1ee27, 0x1ee27,
-0x1ee29, 0x1ee32,
-0x1ee34, 0x1ee37,
-0x1ee39, 0x1ee39,
-0x1ee3b, 0x1ee3b,
-0x1ee42, 0x1ee42,
-0x1ee47, 0x1ee47,
-0x1ee49, 0x1ee49,
-0x1ee4b, 0x1ee4b,
-0x1ee4d, 0x1ee4f,
-0x1ee51, 0x1ee52,
-0x1ee54, 0x1ee54,
-0x1ee57, 0x1ee57,
-0x1ee59, 0x1ee59,
-0x1ee5b, 0x1ee5b,
-0x1ee5d, 0x1ee5d,
-0x1ee5f, 0x1ee5f,
-0x1ee61, 0x1ee62,
-0x1ee64, 0x1ee64,
-0x1ee67, 0x1ee6a,
-0x1ee6c, 0x1ee72,
-0x1ee74, 0x1ee77,
-0x1ee79, 0x1ee7c,
-0x1ee7e, 0x1ee7e,
-0x1ee80, 0x1ee89,
-0x1ee8b, 0x1ee9b,
-0x1eea1, 0x1eea3,
-0x1eea5, 0x1eea9,
-0x1eeab, 0x1eebb,
-}; /* END of CR_Other_Math */
-
-/* PROPERTY: 'Hex_Digit': Binary Property */
-static const OnigCodePoint
-CR_Hex_Digit[] = { 6,
-0x0030, 0x0039,
-0x0041, 0x0046,
-0x0061, 0x0066,
-0xff10, 0xff19,
-0xff21, 0xff26,
-0xff41, 0xff46,
-}; /* END of CR_Hex_Digit */
-
-/* PROPERTY: 'ASCII_Hex_Digit': Binary Property */
-#define CR_ASCII_Hex_Digit CR_XDigit
-
-/* PROPERTY: 'Other_Alphabetic': Binary Property */
-static const OnigCodePoint
-CR_Other_Alphabetic[] = { 178,
-0x0345, 0x0345,
-0x05b0, 0x05bd,
-0x05bf, 0x05bf,
-0x05c1, 0x05c2,
-0x05c4, 0x05c5,
-0x05c7, 0x05c7,
-0x0610, 0x061a,
-0x064b, 0x0657,
-0x0659, 0x065f,
-0x0670, 0x0670,
-0x06d6, 0x06dc,
-0x06e1, 0x06e4,
-0x06e7, 0x06e8,
-0x06ed, 0x06ed,
-0x0711, 0x0711,
-0x0730, 0x073f,
-0x07a6, 0x07b0,
-0x0816, 0x0817,
-0x081b, 0x0823,
-0x0825, 0x0827,
-0x0829, 0x082c,
-0x08e3, 0x08e9,
-0x08f0, 0x0903,
-0x093a, 0x093b,
-0x093e, 0x094c,
-0x094e, 0x094f,
-0x0955, 0x0957,
-0x0962, 0x0963,
-0x0981, 0x0983,
-0x09be, 0x09c4,
-0x09c7, 0x09c8,
-0x09cb, 0x09cc,
-0x09d7, 0x09d7,
-0x09e2, 0x09e3,
-0x0a01, 0x0a03,
-0x0a3e, 0x0a42,
-0x0a47, 0x0a48,
-0x0a4b, 0x0a4c,
-0x0a51, 0x0a51,
-0x0a70, 0x0a71,
-0x0a75, 0x0a75,
-0x0a81, 0x0a83,
-0x0abe, 0x0ac5,
-0x0ac7, 0x0ac9,
-0x0acb, 0x0acc,
-0x0ae2, 0x0ae3,
-0x0b01, 0x0b03,
-0x0b3e, 0x0b44,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4c,
-0x0b56, 0x0b57,
-0x0b62, 0x0b63,
-0x0b82, 0x0b82,
-0x0bbe, 0x0bc2,
-0x0bc6, 0x0bc8,
-0x0bca, 0x0bcc,
-0x0bd7, 0x0bd7,
-0x0c00, 0x0c03,
-0x0c3e, 0x0c44,
-0x0c46, 0x0c48,
-0x0c4a, 0x0c4c,
-0x0c55, 0x0c56,
-0x0c62, 0x0c63,
-0x0c81, 0x0c83,
-0x0cbe, 0x0cc4,
-0x0cc6, 0x0cc8,
-0x0cca, 0x0ccc,
-0x0cd5, 0x0cd6,
-0x0ce2, 0x0ce3,
-0x0d01, 0x0d03,
-0x0d3e, 0x0d44,
-0x0d46, 0x0d48,
-0x0d4a, 0x0d4c,
-0x0d57, 0x0d57,
-0x0d62, 0x0d63,
-0x0d82, 0x0d83,
-0x0dcf, 0x0dd4,
-0x0dd6, 0x0dd6,
-0x0dd8, 0x0ddf,
-0x0df2, 0x0df3,
-0x0e31, 0x0e31,
-0x0e34, 0x0e3a,
-0x0e4d, 0x0e4d,
-0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
-0x0ecd, 0x0ecd,
-0x0f71, 0x0f81,
-0x0f8d, 0x0f97,
-0x0f99, 0x0fbc,
-0x102b, 0x1036,
-0x1038, 0x1038,
-0x103b, 0x103e,
-0x1056, 0x1059,
-0x105e, 0x1060,
-0x1062, 0x1062,
-0x1067, 0x1068,
-0x1071, 0x1074,
-0x1082, 0x1086,
-0x109c, 0x109d,
-0x135f, 0x135f,
-0x1712, 0x1713,
-0x1732, 0x1733,
-0x1752, 0x1753,
-0x1772, 0x1773,
-0x17b6, 0x17c8,
-0x18a9, 0x18a9,
-0x1920, 0x192b,
-0x1930, 0x1938,
-0x1a17, 0x1a1b,
-0x1a55, 0x1a5e,
-0x1a61, 0x1a74,
-0x1b00, 0x1b04,
-0x1b35, 0x1b43,
-0x1b80, 0x1b82,
-0x1ba1, 0x1ba9,
-0x1bac, 0x1bad,
-0x1be7, 0x1bf1,
-0x1c24, 0x1c35,
-0x1cf2, 0x1cf3,
-0x1de7, 0x1df4,
-0x24b6, 0x24e9,
-0x2de0, 0x2dff,
-0xa674, 0xa67b,
-0xa69e, 0xa69f,
-0xa823, 0xa827,
-0xa880, 0xa881,
-0xa8b4, 0xa8c3,
-0xa926, 0xa92a,
-0xa947, 0xa952,
-0xa980, 0xa983,
-0xa9b4, 0xa9bf,
-0xaa29, 0xaa36,
-0xaa43, 0xaa43,
-0xaa4c, 0xaa4d,
-0xaab0, 0xaab0,
-0xaab2, 0xaab4,
-0xaab7, 0xaab8,
-0xaabe, 0xaabe,
-0xaaeb, 0xaaef,
-0xaaf5, 0xaaf5,
-0xabe3, 0xabea,
-0xfb1e, 0xfb1e,
-0x10376, 0x1037a,
-0x10a01, 0x10a03,
-0x10a05, 0x10a06,
-0x10a0c, 0x10a0f,
-0x11000, 0x11002,
-0x11038, 0x11045,
-0x11082, 0x11082,
-0x110b0, 0x110b8,
-0x11100, 0x11102,
-0x11127, 0x11132,
-0x11180, 0x11182,
-0x111b3, 0x111bf,
-0x1122c, 0x11234,
-0x11237, 0x11237,
-0x112df, 0x112e8,
-0x11300, 0x11303,
-0x1133e, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134c,
-0x11357, 0x11357,
-0x11362, 0x11363,
-0x114b0, 0x114c1,
-0x115af, 0x115b5,
-0x115b8, 0x115be,
-0x115dc, 0x115dd,
-0x11630, 0x1163e,
-0x11640, 0x11640,
-0x116ab, 0x116b5,
-0x1171d, 0x1172a,
-0x16b30, 0x16b36,
-0x16f51, 0x16f7e,
-0x1bc9e, 0x1bc9e,
-0x1f130, 0x1f149,
-0x1f150, 0x1f169,
-0x1f170, 0x1f189,
-}; /* END of CR_Other_Alphabetic */
-
-/* PROPERTY: 'Ideographic': Binary Property */
-static const OnigCodePoint
-CR_Ideographic[] = { 12,
-0x3006, 0x3007,
-0x3021, 0x3029,
-0x3038, 0x303a,
-0x3400, 0x4db5,
-0x4e00, 0x9fd5,
-0xf900, 0xfa6d,
-0xfa70, 0xfad9,
-0x20000, 0x2a6d6,
-0x2a700, 0x2b734,
-0x2b740, 0x2b81d,
-0x2b820, 0x2cea1,
-0x2f800, 0x2fa1d,
-}; /* END of CR_Ideographic */
-
-/* PROPERTY: 'Diacritic': Binary Property */
-static const OnigCodePoint
-CR_Diacritic[] = { 147,
-0x005e, 0x005e,
-0x0060, 0x0060,
-0x00a8, 0x00a8,
-0x00af, 0x00af,
-0x00b4, 0x00b4,
-0x00b7, 0x00b8,
-0x02b0, 0x034e,
-0x0350, 0x0357,
-0x035d, 0x0362,
-0x0374, 0x0375,
-0x037a, 0x037a,
-0x0384, 0x0385,
-0x0483, 0x0487,
-0x0559, 0x0559,
-0x0591, 0x05a1,
-0x05a3, 0x05bd,
-0x05bf, 0x05bf,
-0x05c1, 0x05c2,
-0x05c4, 0x05c4,
-0x064b, 0x0652,
-0x0657, 0x0658,
-0x06df, 0x06e0,
-0x06e5, 0x06e6,
-0x06ea, 0x06ec,
-0x0730, 0x074a,
-0x07a6, 0x07b0,
-0x07eb, 0x07f5,
-0x0818, 0x0819,
-0x08e3, 0x08fe,
-0x093c, 0x093c,
-0x094d, 0x094d,
-0x0951, 0x0954,
-0x0971, 0x0971,
-0x09bc, 0x09bc,
-0x09cd, 0x09cd,
-0x0a3c, 0x0a3c,
-0x0a4d, 0x0a4d,
-0x0abc, 0x0abc,
-0x0acd, 0x0acd,
-0x0b3c, 0x0b3c,
-0x0b4d, 0x0b4d,
-0x0bcd, 0x0bcd,
-0x0c4d, 0x0c4d,
-0x0cbc, 0x0cbc,
-0x0ccd, 0x0ccd,
-0x0d4d, 0x0d4d,
-0x0dca, 0x0dca,
-0x0e47, 0x0e4c,
-0x0e4e, 0x0e4e,
-0x0ec8, 0x0ecc,
-0x0f18, 0x0f19,
-0x0f35, 0x0f35,
-0x0f37, 0x0f37,
-0x0f39, 0x0f39,
-0x0f3e, 0x0f3f,
-0x0f82, 0x0f84,
-0x0f86, 0x0f87,
-0x0fc6, 0x0fc6,
-0x1037, 0x1037,
-0x1039, 0x103a,
-0x1087, 0x108d,
-0x108f, 0x108f,
-0x109a, 0x109b,
-0x17c9, 0x17d3,
-0x17dd, 0x17dd,
-0x1939, 0x193b,
-0x1a75, 0x1a7c,
-0x1a7f, 0x1a7f,
-0x1ab0, 0x1abd,
-0x1b34, 0x1b34,
-0x1b44, 0x1b44,
-0x1b6b, 0x1b73,
-0x1baa, 0x1bab,
-0x1c36, 0x1c37,
-0x1c78, 0x1c7d,
-0x1cd0, 0x1ce8,
-0x1ced, 0x1ced,
-0x1cf4, 0x1cf4,
-0x1cf8, 0x1cf9,
-0x1d2c, 0x1d6a,
-0x1dc4, 0x1dcf,
-0x1df5, 0x1df5,
-0x1dfd, 0x1dff,
-0x1fbd, 0x1fbd,
-0x1fbf, 0x1fc1,
-0x1fcd, 0x1fcf,
-0x1fdd, 0x1fdf,
-0x1fed, 0x1fef,
-0x1ffd, 0x1ffe,
-0x2cef, 0x2cf1,
-0x2e2f, 0x2e2f,
-0x302a, 0x302f,
-0x3099, 0x309c,
-0x30fc, 0x30fc,
-0xa66f, 0xa66f,
-0xa67c, 0xa67d,
-0xa67f, 0xa67f,
-0xa69c, 0xa69d,
-0xa6f0, 0xa6f1,
-0xa717, 0xa721,
-0xa788, 0xa788,
-0xa7f8, 0xa7f9,
-0xa8c4, 0xa8c4,
-0xa8e0, 0xa8f1,
-0xa92b, 0xa92e,
-0xa953, 0xa953,
-0xa9b3, 0xa9b3,
-0xa9c0, 0xa9c0,
-0xa9e5, 0xa9e5,
-0xaa7b, 0xaa7d,
-0xaabf, 0xaac2,
-0xaaf6, 0xaaf6,
-0xab5b, 0xab5f,
-0xabec, 0xabed,
-0xfb1e, 0xfb1e,
-0xfe20, 0xfe2f,
-0xff3e, 0xff3e,
-0xff40, 0xff40,
-0xff70, 0xff70,
-0xff9e, 0xff9f,
-0xffe3, 0xffe3,
-0x102e0, 0x102e0,
-0x10ae5, 0x10ae6,
-0x110b9, 0x110ba,
-0x11133, 0x11134,
-0x11173, 0x11173,
-0x111c0, 0x111c0,
-0x111ca, 0x111cc,
-0x11235, 0x11236,
-0x112e9, 0x112ea,
-0x1133c, 0x1133c,
-0x1134d, 0x1134d,
-0x11366, 0x1136c,
-0x11370, 0x11374,
-0x114c2, 0x114c3,
-0x115bf, 0x115c0,
-0x1163f, 0x1163f,
-0x116b6, 0x116b7,
-0x1172b, 0x1172b,
-0x16af0, 0x16af4,
-0x16f8f, 0x16f9f,
-0x1d167, 0x1d169,
-0x1d16d, 0x1d172,
-0x1d17b, 0x1d182,
-0x1d185, 0x1d18b,
-0x1d1aa, 0x1d1ad,
-0x1e8d0, 0x1e8d6,
-}; /* END of CR_Diacritic */
-
-/* PROPERTY: 'Extender': Binary Property */
-static const OnigCodePoint
-CR_Extender[] = { 26,
-0x00b7, 0x00b7,
-0x02d0, 0x02d1,
-0x0640, 0x0640,
-0x07fa, 0x07fa,
-0x0e46, 0x0e46,
-0x0ec6, 0x0ec6,
-0x180a, 0x180a,
-0x1843, 0x1843,
-0x1aa7, 0x1aa7,
-0x1c36, 0x1c36,
-0x1c7b, 0x1c7b,
-0x3005, 0x3005,
-0x3031, 0x3035,
-0x309d, 0x309e,
-0x30fc, 0x30fe,
-0xa015, 0xa015,
-0xa60c, 0xa60c,
-0xa9cf, 0xa9cf,
-0xa9e6, 0xa9e6,
-0xaa70, 0xaa70,
-0xaadd, 0xaadd,
-0xaaf3, 0xaaf4,
-0xff70, 0xff70,
-0x1135d, 0x1135d,
-0x115c6, 0x115c8,
-0x16b42, 0x16b43,
-}; /* END of CR_Extender */
-
-/* PROPERTY: 'Other_Lowercase': Binary Property */
-static const OnigCodePoint
-CR_Other_Lowercase[] = { 20,
-0x00aa, 0x00aa,
-0x00ba, 0x00ba,
-0x02b0, 0x02b8,
-0x02c0, 0x02c1,
-0x02e0, 0x02e4,
-0x0345, 0x0345,
-0x037a, 0x037a,
-0x1d2c, 0x1d6a,
-0x1d78, 0x1d78,
-0x1d9b, 0x1dbf,
-0x2071, 0x2071,
-0x207f, 0x207f,
-0x2090, 0x209c,
-0x2170, 0x217f,
-0x24d0, 0x24e9,
-0x2c7c, 0x2c7d,
-0xa69c, 0xa69d,
-0xa770, 0xa770,
-0xa7f8, 0xa7f9,
-0xab5c, 0xab5f,
-}; /* END of CR_Other_Lowercase */
-
-/* PROPERTY: 'Other_Uppercase': Binary Property */
-static const OnigCodePoint
-CR_Other_Uppercase[] = { 5,
-0x2160, 0x216f,
-0x24b6, 0x24cf,
-0x1f130, 0x1f149,
-0x1f150, 0x1f169,
-0x1f170, 0x1f189,
-}; /* END of CR_Other_Uppercase */
-
-/* PROPERTY: 'Noncharacter_Code_Point': Binary Property */
-static const OnigCodePoint
-CR_Noncharacter_Code_Point[] = { 18,
-0xfdd0, 0xfdef,
-0xfffe, 0xffff,
-0x1fffe, 0x1ffff,
-0x2fffe, 0x2ffff,
-0x3fffe, 0x3ffff,
-0x4fffe, 0x4ffff,
-0x5fffe, 0x5ffff,
-0x6fffe, 0x6ffff,
-0x7fffe, 0x7ffff,
-0x8fffe, 0x8ffff,
-0x9fffe, 0x9ffff,
-0xafffe, 0xaffff,
-0xbfffe, 0xbffff,
-0xcfffe, 0xcffff,
-0xdfffe, 0xdffff,
-0xefffe, 0xeffff,
-0xffffe, 0xfffff,
-0x10fffe, 0x10ffff,
-}; /* END of CR_Noncharacter_Code_Point */
-
-/* PROPERTY: 'Other_Grapheme_Extend': Binary Property */
-static const OnigCodePoint
-CR_Other_Grapheme_Extend[] = { 22,
-0x09be, 0x09be,
-0x09d7, 0x09d7,
-0x0b3e, 0x0b3e,
-0x0b57, 0x0b57,
-0x0bbe, 0x0bbe,
-0x0bd7, 0x0bd7,
-0x0cc2, 0x0cc2,
-0x0cd5, 0x0cd6,
-0x0d3e, 0x0d3e,
-0x0d57, 0x0d57,
-0x0dcf, 0x0dcf,
-0x0ddf, 0x0ddf,
-0x200c, 0x200d,
-0x302e, 0x302f,
-0xff9e, 0xff9f,
-0x1133e, 0x1133e,
-0x11357, 0x11357,
-0x114b0, 0x114b0,
-0x114bd, 0x114bd,
-0x115af, 0x115af,
-0x1d165, 0x1d165,
-0x1d16e, 0x1d172,
-}; /* END of CR_Other_Grapheme_Extend */
-
-/* PROPERTY: 'IDS_Binary_Operator': Binary Property */
-static const OnigCodePoint
-CR_IDS_Binary_Operator[] = { 2,
-0x2ff0, 0x2ff1,
-0x2ff4, 0x2ffb,
-}; /* END of CR_IDS_Binary_Operator */
-
-/* PROPERTY: 'IDS_Trinary_Operator': Binary Property */
-static const OnigCodePoint
-CR_IDS_Trinary_Operator[] = { 1,
-0x2ff2, 0x2ff3,
-}; /* END of CR_IDS_Trinary_Operator */
-
-/* PROPERTY: 'Radical': Binary Property */
-static const OnigCodePoint
-CR_Radical[] = { 3,
-0x2e80, 0x2e99,
-0x2e9b, 0x2ef3,
-0x2f00, 0x2fd5,
-}; /* END of CR_Radical */
-
-/* PROPERTY: 'Unified_Ideograph': Binary Property */
-static const OnigCodePoint
-CR_Unified_Ideograph[] = { 13,
-0x3400, 0x4db5,
-0x4e00, 0x9fd5,
-0xfa0e, 0xfa0f,
-0xfa11, 0xfa11,
-0xfa13, 0xfa14,
-0xfa1f, 0xfa1f,
-0xfa21, 0xfa21,
-0xfa23, 0xfa24,
-0xfa27, 0xfa29,
-0x20000, 0x2a6d6,
-0x2a700, 0x2b734,
-0x2b740, 0x2b81d,
-0x2b820, 0x2cea1,
-}; /* END of CR_Unified_Ideograph */
-
-/* PROPERTY: 'Other_Default_Ignorable_Code_Point': Binary Property */
-static const OnigCodePoint
-CR_Other_Default_Ignorable_Code_Point[] = { 11,
-0x034f, 0x034f,
-0x115f, 0x1160,
-0x17b4, 0x17b5,
-0x2065, 0x2065,
-0x3164, 0x3164,
-0xffa0, 0xffa0,
-0xfff0, 0xfff8,
-0xe0000, 0xe0000,
-0xe0002, 0xe001f,
-0xe0080, 0xe00ff,
-0xe01f0, 0xe0fff,
-}; /* END of CR_Other_Default_Ignorable_Code_Point */
-
-/* PROPERTY: 'Deprecated': Binary Property */
-static const OnigCodePoint
-CR_Deprecated[] = { 9,
-0x0149, 0x0149,
-0x0673, 0x0673,
-0x0f77, 0x0f77,
-0x0f79, 0x0f79,
-0x17a3, 0x17a4,
-0x206a, 0x206f,
-0x2329, 0x232a,
-0xe0001, 0xe0001,
-0xe007f, 0xe007f,
-}; /* END of CR_Deprecated */
-
-/* PROPERTY: 'Soft_Dotted': Binary Property */
-static const OnigCodePoint
-CR_Soft_Dotted[] = { 31,
-0x0069, 0x006a,
-0x012f, 0x012f,
-0x0249, 0x0249,
-0x0268, 0x0268,
-0x029d, 0x029d,
-0x02b2, 0x02b2,
-0x03f3, 0x03f3,
-0x0456, 0x0456,
-0x0458, 0x0458,
-0x1d62, 0x1d62,
-0x1d96, 0x1d96,
-0x1da4, 0x1da4,
-0x1da8, 0x1da8,
-0x1e2d, 0x1e2d,
-0x1ecb, 0x1ecb,
-0x2071, 0x2071,
-0x2148, 0x2149,
-0x2c7c, 0x2c7c,
-0x1d422, 0x1d423,
-0x1d456, 0x1d457,
-0x1d48a, 0x1d48b,
-0x1d4be, 0x1d4bf,
-0x1d4f2, 0x1d4f3,
-0x1d526, 0x1d527,
-0x1d55a, 0x1d55b,
-0x1d58e, 0x1d58f,
-0x1d5c2, 0x1d5c3,
-0x1d5f6, 0x1d5f7,
-0x1d62a, 0x1d62b,
-0x1d65e, 0x1d65f,
-0x1d692, 0x1d693,
-}; /* END of CR_Soft_Dotted */
-
-/* PROPERTY: 'Logical_Order_Exception': Binary Property */
-static const OnigCodePoint
-CR_Logical_Order_Exception[] = { 7,
-0x0e40, 0x0e44,
-0x0ec0, 0x0ec4,
-0x19b5, 0x19b7,
-0x19ba, 0x19ba,
-0xaab5, 0xaab6,
-0xaab9, 0xaab9,
-0xaabb, 0xaabc,
-}; /* END of CR_Logical_Order_Exception */
-
-/* PROPERTY: 'Other_ID_Start': Binary Property */
-static const OnigCodePoint
-CR_Other_ID_Start[] = { 3,
-0x2118, 0x2118,
-0x212e, 0x212e,
-0x309b, 0x309c,
-}; /* END of CR_Other_ID_Start */
-
-/* PROPERTY: 'Other_ID_Continue': Binary Property */
+/* PROPERTY: 'Z': Major Category */
static const OnigCodePoint
-CR_Other_ID_Continue[] = { 4,
-0x00b7, 0x00b7,
-0x0387, 0x0387,
-0x1369, 0x1371,
-0x19da, 0x19da,
-}; /* END of CR_Other_ID_Continue */
+CR_Z[] = { 8,
+0x0020, 0x0020,
+0x00a0, 0x00a0,
+0x1680, 0x1680,
+0x2000, 0x200a,
+0x2028, 0x2029,
+0x202f, 0x202f,
+0x205f, 0x205f,
+0x3000, 0x3000,
+}; /* END of CR_Z */
-/* PROPERTY: 'STerm': Binary Property */
+/* PROPERTY: 'Zl': General Category */
static const OnigCodePoint
-CR_STerm[] = { 64,
-0x0021, 0x0021,
-0x002e, 0x002e,
-0x003f, 0x003f,
-0x0589, 0x0589,
-0x061f, 0x061f,
-0x06d4, 0x06d4,
-0x0700, 0x0702,
-0x07f9, 0x07f9,
-0x0964, 0x0965,
-0x104a, 0x104b,
-0x1362, 0x1362,
-0x1367, 0x1368,
-0x166e, 0x166e,
-0x1735, 0x1736,
-0x1803, 0x1803,
-0x1809, 0x1809,
-0x1944, 0x1945,
-0x1aa8, 0x1aab,
-0x1b5a, 0x1b5b,
-0x1b5e, 0x1b5f,
-0x1c3b, 0x1c3c,
-0x1c7e, 0x1c7f,
-0x203c, 0x203d,
-0x2047, 0x2049,
-0x2e2e, 0x2e2e,
-0x2e3c, 0x2e3c,
-0x3002, 0x3002,
-0xa4ff, 0xa4ff,
-0xa60e, 0xa60f,
-0xa6f3, 0xa6f3,
-0xa6f7, 0xa6f7,
-0xa876, 0xa877,
-0xa8ce, 0xa8cf,
-0xa92f, 0xa92f,
-0xa9c8, 0xa9c9,
-0xaa5d, 0xaa5f,
-0xaaf0, 0xaaf1,
-0xabeb, 0xabeb,
-0xfe52, 0xfe52,
-0xfe56, 0xfe57,
-0xff01, 0xff01,
-0xff0e, 0xff0e,
-0xff1f, 0xff1f,
-0xff61, 0xff61,
-0x10a56, 0x10a57,
-0x11047, 0x11048,
-0x110be, 0x110c1,
-0x11141, 0x11143,
-0x111c5, 0x111c6,
-0x111cd, 0x111cd,
-0x111de, 0x111df,
-0x11238, 0x11239,
-0x1123b, 0x1123c,
-0x112a9, 0x112a9,
-0x115c2, 0x115c3,
-0x115c9, 0x115d7,
-0x11641, 0x11642,
-0x1173c, 0x1173e,
-0x16a6e, 0x16a6f,
-0x16af5, 0x16af5,
-0x16b37, 0x16b38,
-0x16b44, 0x16b44,
-0x1bc9f, 0x1bc9f,
-0x1da88, 0x1da88,
-}; /* END of CR_STerm */
+CR_Zl[] = { 1,
+0x2028, 0x2028,
+}; /* END of CR_Zl */
-/* PROPERTY: 'Variation_Selector': Binary Property */
+/* PROPERTY: 'Zp': General Category */
static const OnigCodePoint
-CR_Variation_Selector[] = { 3,
-0x180b, 0x180d,
-0xfe00, 0xfe0f,
-0xe0100, 0xe01ef,
-}; /* END of CR_Variation_Selector */
+CR_Zp[] = { 1,
+0x2029, 0x2029,
+}; /* END of CR_Zp */
-/* PROPERTY: 'Pattern_White_Space': Binary Property */
+/* PROPERTY: 'Zs': General Category */
static const OnigCodePoint
-CR_Pattern_White_Space[] = { 5,
-0x0009, 0x000d,
+CR_Zs[] = { 7,
0x0020, 0x0020,
-0x0085, 0x0085,
-0x200e, 0x200f,
-0x2028, 0x2029,
-}; /* END of CR_Pattern_White_Space */
-
-/* PROPERTY: 'Pattern_Syntax': Binary Property */
-static const OnigCodePoint
-CR_Pattern_Syntax[] = { 28,
-0x0021, 0x002f,
-0x003a, 0x0040,
-0x005b, 0x005e,
-0x0060, 0x0060,
-0x007b, 0x007e,
-0x00a1, 0x00a7,
-0x00a9, 0x00a9,
-0x00ab, 0x00ac,
-0x00ae, 0x00ae,
-0x00b0, 0x00b1,
-0x00b6, 0x00b6,
-0x00bb, 0x00bb,
-0x00bf, 0x00bf,
-0x00d7, 0x00d7,
-0x00f7, 0x00f7,
-0x2010, 0x2027,
-0x2030, 0x203e,
-0x2041, 0x2053,
-0x2055, 0x205e,
-0x2190, 0x245f,
-0x2500, 0x2775,
-0x2794, 0x2bff,
-0x2e00, 0x2e7f,
-0x3001, 0x3003,
-0x3008, 0x3020,
-0x3030, 0x3030,
-0xfd3e, 0xfd3f,
-0xfe45, 0xfe46,
-}; /* END of CR_Pattern_Syntax */
-
-/* PROPERTY: 'Unknown': Script */
-static const OnigCodePoint
-CR_Unknown[] = { 611,
-0x0378, 0x0379,
-0x0380, 0x0383,
-0x038b, 0x038b,
-0x038d, 0x038d,
-0x03a2, 0x03a2,
-0x0530, 0x0530,
-0x0557, 0x0558,
-0x0560, 0x0560,
-0x0588, 0x0588,
-0x058b, 0x058c,
-0x0590, 0x0590,
-0x05c8, 0x05cf,
-0x05eb, 0x05ef,
-0x05f5, 0x05ff,
-0x061d, 0x061d,
-0x070e, 0x070e,
-0x074b, 0x074c,
-0x07b2, 0x07bf,
-0x07fb, 0x07ff,
-0x082e, 0x082f,
-0x083f, 0x083f,
-0x085c, 0x085d,
-0x085f, 0x089f,
-0x08b5, 0x08e2,
-0x0984, 0x0984,
-0x098d, 0x098e,
-0x0991, 0x0992,
-0x09a9, 0x09a9,
-0x09b1, 0x09b1,
-0x09b3, 0x09b5,
-0x09ba, 0x09bb,
-0x09c5, 0x09c6,
-0x09c9, 0x09ca,
-0x09cf, 0x09d6,
-0x09d8, 0x09db,
-0x09de, 0x09de,
-0x09e4, 0x09e5,
-0x09fc, 0x0a00,
-0x0a04, 0x0a04,
-0x0a0b, 0x0a0e,
-0x0a11, 0x0a12,
-0x0a29, 0x0a29,
-0x0a31, 0x0a31,
-0x0a34, 0x0a34,
-0x0a37, 0x0a37,
-0x0a3a, 0x0a3b,
-0x0a3d, 0x0a3d,
-0x0a43, 0x0a46,
-0x0a49, 0x0a4a,
-0x0a4e, 0x0a50,
-0x0a52, 0x0a58,
-0x0a5d, 0x0a5d,
-0x0a5f, 0x0a65,
-0x0a76, 0x0a80,
-0x0a84, 0x0a84,
-0x0a8e, 0x0a8e,
-0x0a92, 0x0a92,
-0x0aa9, 0x0aa9,
-0x0ab1, 0x0ab1,
-0x0ab4, 0x0ab4,
-0x0aba, 0x0abb,
-0x0ac6, 0x0ac6,
-0x0aca, 0x0aca,
-0x0ace, 0x0acf,
-0x0ad1, 0x0adf,
-0x0ae4, 0x0ae5,
-0x0af2, 0x0af8,
-0x0afa, 0x0b00,
-0x0b04, 0x0b04,
-0x0b0d, 0x0b0e,
-0x0b11, 0x0b12,
-0x0b29, 0x0b29,
-0x0b31, 0x0b31,
-0x0b34, 0x0b34,
-0x0b3a, 0x0b3b,
-0x0b45, 0x0b46,
-0x0b49, 0x0b4a,
-0x0b4e, 0x0b55,
-0x0b58, 0x0b5b,
-0x0b5e, 0x0b5e,
-0x0b64, 0x0b65,
-0x0b78, 0x0b81,
-0x0b84, 0x0b84,
-0x0b8b, 0x0b8d,
-0x0b91, 0x0b91,
-0x0b96, 0x0b98,
-0x0b9b, 0x0b9b,
-0x0b9d, 0x0b9d,
-0x0ba0, 0x0ba2,
-0x0ba5, 0x0ba7,
-0x0bab, 0x0bad,
-0x0bba, 0x0bbd,
-0x0bc3, 0x0bc5,
-0x0bc9, 0x0bc9,
-0x0bce, 0x0bcf,
-0x0bd1, 0x0bd6,
-0x0bd8, 0x0be5,
-0x0bfb, 0x0bff,
-0x0c04, 0x0c04,
-0x0c0d, 0x0c0d,
-0x0c11, 0x0c11,
-0x0c29, 0x0c29,
-0x0c3a, 0x0c3c,
-0x0c45, 0x0c45,
-0x0c49, 0x0c49,
-0x0c4e, 0x0c54,
-0x0c57, 0x0c57,
-0x0c5b, 0x0c5f,
-0x0c64, 0x0c65,
-0x0c70, 0x0c77,
-0x0c80, 0x0c80,
-0x0c84, 0x0c84,
-0x0c8d, 0x0c8d,
-0x0c91, 0x0c91,
-0x0ca9, 0x0ca9,
-0x0cb4, 0x0cb4,
-0x0cba, 0x0cbb,
-0x0cc5, 0x0cc5,
-0x0cc9, 0x0cc9,
-0x0cce, 0x0cd4,
-0x0cd7, 0x0cdd,
-0x0cdf, 0x0cdf,
-0x0ce4, 0x0ce5,
-0x0cf0, 0x0cf0,
-0x0cf3, 0x0d00,
-0x0d04, 0x0d04,
-0x0d0d, 0x0d0d,
-0x0d11, 0x0d11,
-0x0d3b, 0x0d3c,
-0x0d45, 0x0d45,
-0x0d49, 0x0d49,
-0x0d4f, 0x0d56,
-0x0d58, 0x0d5e,
-0x0d64, 0x0d65,
-0x0d76, 0x0d78,
-0x0d80, 0x0d81,
-0x0d84, 0x0d84,
-0x0d97, 0x0d99,
-0x0db2, 0x0db2,
-0x0dbc, 0x0dbc,
-0x0dbe, 0x0dbf,
-0x0dc7, 0x0dc9,
-0x0dcb, 0x0dce,
-0x0dd5, 0x0dd5,
-0x0dd7, 0x0dd7,
-0x0de0, 0x0de5,
-0x0df0, 0x0df1,
-0x0df5, 0x0e00,
-0x0e3b, 0x0e3e,
-0x0e5c, 0x0e80,
-0x0e83, 0x0e83,
-0x0e85, 0x0e86,
-0x0e89, 0x0e89,
-0x0e8b, 0x0e8c,
-0x0e8e, 0x0e93,
-0x0e98, 0x0e98,
-0x0ea0, 0x0ea0,
-0x0ea4, 0x0ea4,
-0x0ea6, 0x0ea6,
-0x0ea8, 0x0ea9,
-0x0eac, 0x0eac,
-0x0eba, 0x0eba,
-0x0ebe, 0x0ebf,
-0x0ec5, 0x0ec5,
-0x0ec7, 0x0ec7,
-0x0ece, 0x0ecf,
-0x0eda, 0x0edb,
-0x0ee0, 0x0eff,
-0x0f48, 0x0f48,
-0x0f6d, 0x0f70,
-0x0f98, 0x0f98,
-0x0fbd, 0x0fbd,
-0x0fcd, 0x0fcd,
-0x0fdb, 0x0fff,
-0x10c6, 0x10c6,
-0x10c8, 0x10cc,
-0x10ce, 0x10cf,
-0x1249, 0x1249,
-0x124e, 0x124f,
-0x1257, 0x1257,
-0x1259, 0x1259,
-0x125e, 0x125f,
-0x1289, 0x1289,
-0x128e, 0x128f,
-0x12b1, 0x12b1,
-0x12b6, 0x12b7,
-0x12bf, 0x12bf,
-0x12c1, 0x12c1,
-0x12c6, 0x12c7,
-0x12d7, 0x12d7,
-0x1311, 0x1311,
-0x1316, 0x1317,
-0x135b, 0x135c,
-0x137d, 0x137f,
-0x139a, 0x139f,
-0x13f6, 0x13f7,
-0x13fe, 0x13ff,
-0x169d, 0x169f,
-0x16f9, 0x16ff,
-0x170d, 0x170d,
-0x1715, 0x171f,
-0x1737, 0x173f,
-0x1754, 0x175f,
-0x176d, 0x176d,
-0x1771, 0x1771,
-0x1774, 0x177f,
-0x17de, 0x17df,
-0x17ea, 0x17ef,
-0x17fa, 0x17ff,
-0x180f, 0x180f,
-0x181a, 0x181f,
-0x1878, 0x187f,
-0x18ab, 0x18af,
-0x18f6, 0x18ff,
-0x191f, 0x191f,
-0x192c, 0x192f,
-0x193c, 0x193f,
-0x1941, 0x1943,
-0x196e, 0x196f,
-0x1975, 0x197f,
-0x19ac, 0x19af,
-0x19ca, 0x19cf,
-0x19db, 0x19dd,
-0x1a1c, 0x1a1d,
-0x1a5f, 0x1a5f,
-0x1a7d, 0x1a7e,
-0x1a8a, 0x1a8f,
-0x1a9a, 0x1a9f,
-0x1aae, 0x1aaf,
-0x1abf, 0x1aff,
-0x1b4c, 0x1b4f,
-0x1b7d, 0x1b7f,
-0x1bf4, 0x1bfb,
-0x1c38, 0x1c3a,
-0x1c4a, 0x1c4c,
-0x1c80, 0x1cbf,
-0x1cc8, 0x1ccf,
-0x1cf7, 0x1cf7,
-0x1cfa, 0x1cff,
-0x1df6, 0x1dfb,
-0x1f16, 0x1f17,
-0x1f1e, 0x1f1f,
-0x1f46, 0x1f47,
-0x1f4e, 0x1f4f,
-0x1f58, 0x1f58,
-0x1f5a, 0x1f5a,
-0x1f5c, 0x1f5c,
-0x1f5e, 0x1f5e,
-0x1f7e, 0x1f7f,
-0x1fb5, 0x1fb5,
-0x1fc5, 0x1fc5,
-0x1fd4, 0x1fd5,
-0x1fdc, 0x1fdc,
-0x1ff0, 0x1ff1,
-0x1ff5, 0x1ff5,
-0x1fff, 0x1fff,
-0x2065, 0x2065,
-0x2072, 0x2073,
-0x208f, 0x208f,
-0x209d, 0x209f,
-0x20bf, 0x20cf,
-0x20f1, 0x20ff,
-0x218c, 0x218f,
-0x23fb, 0x23ff,
-0x2427, 0x243f,
-0x244b, 0x245f,
-0x2b74, 0x2b75,
-0x2b96, 0x2b97,
-0x2bba, 0x2bbc,
-0x2bc9, 0x2bc9,
-0x2bd2, 0x2beb,
-0x2bf0, 0x2bff,
-0x2c2f, 0x2c2f,
-0x2c5f, 0x2c5f,
-0x2cf4, 0x2cf8,
-0x2d26, 0x2d26,
-0x2d28, 0x2d2c,
-0x2d2e, 0x2d2f,
-0x2d68, 0x2d6e,
-0x2d71, 0x2d7e,
-0x2d97, 0x2d9f,
-0x2da7, 0x2da7,
-0x2daf, 0x2daf,
-0x2db7, 0x2db7,
-0x2dbf, 0x2dbf,
-0x2dc7, 0x2dc7,
-0x2dcf, 0x2dcf,
-0x2dd7, 0x2dd7,
-0x2ddf, 0x2ddf,
-0x2e43, 0x2e7f,
-0x2e9a, 0x2e9a,
-0x2ef4, 0x2eff,
-0x2fd6, 0x2fef,
-0x2ffc, 0x2fff,
-0x3040, 0x3040,
-0x3097, 0x3098,
-0x3100, 0x3104,
-0x312e, 0x3130,
-0x318f, 0x318f,
-0x31bb, 0x31bf,
-0x31e4, 0x31ef,
-0x321f, 0x321f,
-0x32ff, 0x32ff,
-0x4db6, 0x4dbf,
-0x9fd6, 0x9fff,
-0xa48d, 0xa48f,
-0xa4c7, 0xa4cf,
-0xa62c, 0xa63f,
-0xa6f8, 0xa6ff,
-0xa7ae, 0xa7af,
-0xa7b8, 0xa7f6,
-0xa82c, 0xa82f,
-0xa83a, 0xa83f,
-0xa878, 0xa87f,
-0xa8c5, 0xa8cd,
-0xa8da, 0xa8df,
-0xa8fe, 0xa8ff,
-0xa954, 0xa95e,
-0xa97d, 0xa97f,
-0xa9ce, 0xa9ce,
-0xa9da, 0xa9dd,
-0xa9ff, 0xa9ff,
-0xaa37, 0xaa3f,
-0xaa4e, 0xaa4f,
-0xaa5a, 0xaa5b,
-0xaac3, 0xaada,
-0xaaf7, 0xab00,
-0xab07, 0xab08,
-0xab0f, 0xab10,
-0xab17, 0xab1f,
-0xab27, 0xab27,
-0xab2f, 0xab2f,
-0xab66, 0xab6f,
-0xabee, 0xabef,
-0xabfa, 0xabff,
-0xd7a4, 0xd7af,
-0xd7c7, 0xd7ca,
-0xd7fc, 0xf8ff,
-0xfa6e, 0xfa6f,
-0xfada, 0xfaff,
-0xfb07, 0xfb12,
-0xfb18, 0xfb1c,
-0xfb37, 0xfb37,
-0xfb3d, 0xfb3d,
-0xfb3f, 0xfb3f,
-0xfb42, 0xfb42,
-0xfb45, 0xfb45,
-0xfbc2, 0xfbd2,
-0xfd40, 0xfd4f,
-0xfd90, 0xfd91,
-0xfdc8, 0xfdef,
-0xfdfe, 0xfdff,
-0xfe1a, 0xfe1f,
-0xfe53, 0xfe53,
-0xfe67, 0xfe67,
-0xfe6c, 0xfe6f,
-0xfe75, 0xfe75,
-0xfefd, 0xfefe,
-0xff00, 0xff00,
-0xffbf, 0xffc1,
-0xffc8, 0xffc9,
-0xffd0, 0xffd1,
-0xffd8, 0xffd9,
-0xffdd, 0xffdf,
-0xffe7, 0xffe7,
-0xffef, 0xfff8,
-0xfffe, 0xffff,
-0x1000c, 0x1000c,
-0x10027, 0x10027,
-0x1003b, 0x1003b,
-0x1003e, 0x1003e,
-0x1004e, 0x1004f,
-0x1005e, 0x1007f,
-0x100fb, 0x100ff,
-0x10103, 0x10106,
-0x10134, 0x10136,
-0x1018d, 0x1018f,
-0x1019c, 0x1019f,
-0x101a1, 0x101cf,
-0x101fe, 0x1027f,
-0x1029d, 0x1029f,
-0x102d1, 0x102df,
-0x102fc, 0x102ff,
-0x10324, 0x1032f,
-0x1034b, 0x1034f,
-0x1037b, 0x1037f,
-0x1039e, 0x1039e,
-0x103c4, 0x103c7,
-0x103d6, 0x103ff,
-0x1049e, 0x1049f,
-0x104aa, 0x104ff,
-0x10528, 0x1052f,
-0x10564, 0x1056e,
-0x10570, 0x105ff,
-0x10737, 0x1073f,
-0x10756, 0x1075f,
-0x10768, 0x107ff,
-0x10806, 0x10807,
-0x10809, 0x10809,
-0x10836, 0x10836,
-0x10839, 0x1083b,
-0x1083d, 0x1083e,
-0x10856, 0x10856,
-0x1089f, 0x108a6,
-0x108b0, 0x108df,
-0x108f3, 0x108f3,
-0x108f6, 0x108fa,
-0x1091c, 0x1091e,
-0x1093a, 0x1093e,
-0x10940, 0x1097f,
-0x109b8, 0x109bb,
-0x109d0, 0x109d1,
-0x10a04, 0x10a04,
-0x10a07, 0x10a0b,
-0x10a14, 0x10a14,
-0x10a18, 0x10a18,
-0x10a34, 0x10a37,
-0x10a3b, 0x10a3e,
-0x10a48, 0x10a4f,
-0x10a59, 0x10a5f,
-0x10aa0, 0x10abf,
-0x10ae7, 0x10aea,
-0x10af7, 0x10aff,
-0x10b36, 0x10b38,
-0x10b56, 0x10b57,
-0x10b73, 0x10b77,
-0x10b92, 0x10b98,
-0x10b9d, 0x10ba8,
-0x10bb0, 0x10bff,
-0x10c49, 0x10c7f,
-0x10cb3, 0x10cbf,
-0x10cf3, 0x10cf9,
-0x10d00, 0x10e5f,
-0x10e7f, 0x10fff,
-0x1104e, 0x11051,
-0x11070, 0x1107e,
-0x110c2, 0x110cf,
-0x110e9, 0x110ef,
-0x110fa, 0x110ff,
-0x11135, 0x11135,
-0x11144, 0x1114f,
-0x11177, 0x1117f,
-0x111ce, 0x111cf,
-0x111e0, 0x111e0,
-0x111f5, 0x111ff,
-0x11212, 0x11212,
-0x1123e, 0x1127f,
-0x11287, 0x11287,
-0x11289, 0x11289,
-0x1128e, 0x1128e,
-0x1129e, 0x1129e,
-0x112aa, 0x112af,
-0x112eb, 0x112ef,
-0x112fa, 0x112ff,
-0x11304, 0x11304,
-0x1130d, 0x1130e,
-0x11311, 0x11312,
-0x11329, 0x11329,
-0x11331, 0x11331,
-0x11334, 0x11334,
-0x1133a, 0x1133b,
-0x11345, 0x11346,
-0x11349, 0x1134a,
-0x1134e, 0x1134f,
-0x11351, 0x11356,
-0x11358, 0x1135c,
-0x11364, 0x11365,
-0x1136d, 0x1136f,
-0x11375, 0x1147f,
-0x114c8, 0x114cf,
-0x114da, 0x1157f,
-0x115b6, 0x115b7,
-0x115de, 0x115ff,
-0x11645, 0x1164f,
-0x1165a, 0x1167f,
-0x116b8, 0x116bf,
-0x116ca, 0x116ff,
-0x1171a, 0x1171c,
-0x1172c, 0x1172f,
-0x11740, 0x1189f,
-0x118f3, 0x118fe,
-0x11900, 0x11abf,
-0x11af9, 0x11fff,
-0x1239a, 0x123ff,
-0x1246f, 0x1246f,
-0x12475, 0x1247f,
-0x12544, 0x12fff,
-0x1342f, 0x143ff,
-0x14647, 0x167ff,
-0x16a39, 0x16a3f,
-0x16a5f, 0x16a5f,
-0x16a6a, 0x16a6d,
-0x16a70, 0x16acf,
-0x16aee, 0x16aef,
-0x16af6, 0x16aff,
-0x16b46, 0x16b4f,
-0x16b5a, 0x16b5a,
-0x16b62, 0x16b62,
-0x16b78, 0x16b7c,
-0x16b90, 0x16eff,
-0x16f45, 0x16f4f,
-0x16f7f, 0x16f8e,
-0x16fa0, 0x1afff,
-0x1b002, 0x1bbff,
-0x1bc6b, 0x1bc6f,
-0x1bc7d, 0x1bc7f,
-0x1bc89, 0x1bc8f,
-0x1bc9a, 0x1bc9b,
-0x1bca4, 0x1cfff,
-0x1d0f6, 0x1d0ff,
-0x1d127, 0x1d128,
-0x1d1e9, 0x1d1ff,
-0x1d246, 0x1d2ff,
-0x1d357, 0x1d35f,
-0x1d372, 0x1d3ff,
-0x1d455, 0x1d455,
-0x1d49d, 0x1d49d,
-0x1d4a0, 0x1d4a1,
-0x1d4a3, 0x1d4a4,
-0x1d4a7, 0x1d4a8,
-0x1d4ad, 0x1d4ad,
-0x1d4ba, 0x1d4ba,
-0x1d4bc, 0x1d4bc,
-0x1d4c4, 0x1d4c4,
-0x1d506, 0x1d506,
-0x1d50b, 0x1d50c,
-0x1d515, 0x1d515,
-0x1d51d, 0x1d51d,
-0x1d53a, 0x1d53a,
-0x1d53f, 0x1d53f,
-0x1d545, 0x1d545,
-0x1d547, 0x1d549,
-0x1d551, 0x1d551,
-0x1d6a6, 0x1d6a7,
-0x1d7cc, 0x1d7cd,
-0x1da8c, 0x1da9a,
-0x1daa0, 0x1daa0,
-0x1dab0, 0x1e7ff,
-0x1e8c5, 0x1e8c6,
-0x1e8d7, 0x1edff,
-0x1ee04, 0x1ee04,
-0x1ee20, 0x1ee20,
-0x1ee23, 0x1ee23,
-0x1ee25, 0x1ee26,
-0x1ee28, 0x1ee28,
-0x1ee33, 0x1ee33,
-0x1ee38, 0x1ee38,
-0x1ee3a, 0x1ee3a,
-0x1ee3c, 0x1ee41,
-0x1ee43, 0x1ee46,
-0x1ee48, 0x1ee48,
-0x1ee4a, 0x1ee4a,
-0x1ee4c, 0x1ee4c,
-0x1ee50, 0x1ee50,
-0x1ee53, 0x1ee53,
-0x1ee55, 0x1ee56,
-0x1ee58, 0x1ee58,
-0x1ee5a, 0x1ee5a,
-0x1ee5c, 0x1ee5c,
-0x1ee5e, 0x1ee5e,
-0x1ee60, 0x1ee60,
-0x1ee63, 0x1ee63,
-0x1ee65, 0x1ee66,
-0x1ee6b, 0x1ee6b,
-0x1ee73, 0x1ee73,
-0x1ee78, 0x1ee78,
-0x1ee7d, 0x1ee7d,
-0x1ee7f, 0x1ee7f,
-0x1ee8a, 0x1ee8a,
-0x1ee9c, 0x1eea0,
-0x1eea4, 0x1eea4,
-0x1eeaa, 0x1eeaa,
-0x1eebc, 0x1eeef,
-0x1eef2, 0x1efff,
-0x1f02c, 0x1f02f,
-0x1f094, 0x1f09f,
-0x1f0af, 0x1f0b0,
-0x1f0c0, 0x1f0c0,
-0x1f0d0, 0x1f0d0,
-0x1f0f6, 0x1f0ff,
-0x1f10d, 0x1f10f,
-0x1f12f, 0x1f12f,
-0x1f16c, 0x1f16f,
-0x1f19b, 0x1f1e5,
-0x1f203, 0x1f20f,
-0x1f23b, 0x1f23f,
-0x1f249, 0x1f24f,
-0x1f252, 0x1f2ff,
-0x1f57a, 0x1f57a,
-0x1f5a4, 0x1f5a4,
-0x1f6d1, 0x1f6df,
-0x1f6ed, 0x1f6ef,
-0x1f6f4, 0x1f6ff,
-0x1f774, 0x1f77f,
-0x1f7d5, 0x1f7ff,
-0x1f80c, 0x1f80f,
-0x1f848, 0x1f84f,
-0x1f85a, 0x1f85f,
-0x1f888, 0x1f88f,
-0x1f8ae, 0x1f90f,
-0x1f919, 0x1f97f,
-0x1f985, 0x1f9bf,
-0x1f9c1, 0x1ffff,
-0x2a6d7, 0x2a6ff,
-0x2b735, 0x2b73f,
-0x2b81e, 0x2b81f,
-0x2cea2, 0x2f7ff,
-0x2fa1e, 0xe0000,
-0xe0002, 0xe001f,
-0xe0080, 0xe00ff,
-0xe01f0, 0x10ffff,
-}; /* END of CR_Unknown */
+0x00a0, 0x00a0,
+0x1680, 0x1680,
+0x2000, 0x200a,
+0x202f, 0x202f,
+0x205f, 0x205f,
+0x3000, 0x3000,
+}; /* END of CR_Zs */
/* PROPERTY: 'In_Basic_Latin': Block */
#define CR_In_Basic_Latin CR_ASCII
@@ -22421,229 +22421,229 @@ const CodeRanges[] = {
CR_Word,
CR_Alnum,
CR_ASCII,
+ CR_ASCII_Hex_Digit,
+ CR_Ahom,
+ CR_Alphabetic,
+ CR_Anatolian_Hieroglyphs,
CR_Any,
+ CR_Arabic,
+ CR_Armenian,
CR_Assigned,
+ CR_Avestan,
+ CR_Balinese,
+ CR_Bamum,
+ CR_Bassa_Vah,
+ CR_Batak,
+ CR_Bengali,
+ CR_Bidi_Control,
+ CR_Bopomofo,
+ CR_Brahmi,
+ CR_Braille,
+ CR_Buginese,
+ CR_Buhid,
CR_C,
+ CR_Canadian_Aboriginal,
+ CR_Carian,
+ CR_Case_Ignorable,
+ CR_Cased,
+ CR_Caucasian_Albanian,
CR_Cc,
CR_Cf,
+ CR_Chakma,
+ CR_Cham,
+ CR_Changes_When_Casefolded,
+ CR_Changes_When_Casemapped,
+ CR_Changes_When_Lowercased,
+ CR_Changes_When_Titlecased,
+ CR_Changes_When_Uppercased,
+ CR_Cherokee,
CR_Cn,
CR_Co,
+ CR_Common,
+ CR_Coptic,
CR_Cs,
+ CR_Cuneiform,
+ CR_Cypriot,
+ CR_Cyrillic,
+ CR_Dash,
+ CR_Default_Ignorable_Code_Point,
+ CR_Deprecated,
+ CR_Deseret,
+ CR_Devanagari,
+ CR_Diacritic,
+ CR_Duployan,
+ CR_Egyptian_Hieroglyphs,
+ CR_Elbasan,
+ CR_Ethiopic,
+ CR_Extender,
+ CR_Georgian,
+ CR_Glagolitic,
+ CR_Gothic,
+ CR_Grantha,
+ CR_Grapheme_Base,
+ CR_Grapheme_Extend,
+ CR_Grapheme_Link,
+ CR_Greek,
+ CR_Gujarati,
+ CR_Gurmukhi,
+ CR_Han,
+ CR_Hangul,
+ CR_Hanunoo,
+ CR_Hatran,
+ CR_Hebrew,
+ CR_Hex_Digit,
+ CR_Hiragana,
+ CR_Hyphen,
+ CR_IDS_Binary_Operator,
+ CR_IDS_Trinary_Operator,
+ CR_ID_Continue,
+ CR_ID_Start,
+ CR_Ideographic,
+ CR_Imperial_Aramaic,
+ CR_Inherited,
+ CR_Inscriptional_Pahlavi,
+ CR_Inscriptional_Parthian,
+ CR_Javanese,
+ CR_Join_Control,
+ CR_Kaithi,
+ CR_Kannada,
+ CR_Katakana,
+ CR_Kayah_Li,
+ CR_Kharoshthi,
+ CR_Khmer,
+ CR_Khojki,
+ CR_Khudawadi,
CR_L,
CR_LC,
+ CR_Lao,
+ CR_Latin,
+ CR_Lepcha,
+ CR_Limbu,
+ CR_Linear_A,
+ CR_Linear_B,
+ CR_Lisu,
CR_Ll,
CR_Lm,
CR_Lo,
+ CR_Logical_Order_Exception,
+ CR_Lowercase,
CR_Lt,
CR_Lu,
+ CR_Lycian,
+ CR_Lydian,
CR_M,
+ CR_Mahajani,
+ CR_Malayalam,
+ CR_Mandaic,
+ CR_Manichaean,
+ CR_Math,
CR_Mc,
CR_Me,
+ CR_Meetei_Mayek,
+ CR_Mende_Kikakui,
+ CR_Meroitic_Cursive,
+ CR_Meroitic_Hieroglyphs,
+ CR_Miao,
CR_Mn,
+ CR_Modi,
+ CR_Mongolian,
+ CR_Mro,
+ CR_Multani,
+ CR_Myanmar,
CR_N,
+ CR_Nabataean,
CR_Nd,
+ CR_New_Tai_Lue,
+ CR_Nko,
CR_Nl,
CR_No,
+ CR_Noncharacter_Code_Point,
+ CR_Ogham,
+ CR_Ol_Chiki,
+ CR_Old_Hungarian,
+ CR_Old_Italic,
+ CR_Old_North_Arabian,
+ CR_Old_Permic,
+ CR_Old_Persian,
+ CR_Old_South_Arabian,
+ CR_Old_Turkic,
+ CR_Oriya,
+ CR_Osmanya,
+ CR_Other_Alphabetic,
+ CR_Other_Default_Ignorable_Code_Point,
+ CR_Other_Grapheme_Extend,
+ CR_Other_ID_Continue,
+ CR_Other_ID_Start,
+ CR_Other_Lowercase,
+ CR_Other_Math,
+ CR_Other_Uppercase,
CR_P,
+ CR_Pahawh_Hmong,
+ CR_Palmyrene,
+ CR_Pattern_Syntax,
+ CR_Pattern_White_Space,
+ CR_Pau_Cin_Hau,
CR_Pc,
CR_Pd,
CR_Pe,
CR_Pf,
+ CR_Phags_Pa,
+ CR_Phoenician,
CR_Pi,
CR_Po,
CR_Ps,
+ CR_Psalter_Pahlavi,
+ CR_Quotation_Mark,
+ CR_Radical,
+ CR_Rejang,
+ CR_Runic,
CR_S,
+ CR_STerm,
+ CR_Samaritan,
+ CR_Saurashtra,
CR_Sc,
+ CR_Sharada,
+ CR_Shavian,
+ CR_Siddham,
+ CR_SignWriting,
+ CR_Sinhala,
CR_Sk,
CR_Sm,
CR_So,
- CR_Z,
- CR_Zl,
- CR_Zp,
- CR_Zs,
- CR_Math,
- CR_Alphabetic,
- CR_Lowercase,
- CR_Uppercase,
- CR_Cased,
- CR_Case_Ignorable,
- CR_Changes_When_Lowercased,
- CR_Changes_When_Uppercased,
- CR_Changes_When_Titlecased,
- CR_Changes_When_Casefolded,
- CR_Changes_When_Casemapped,
- CR_ID_Start,
- CR_ID_Continue,
- CR_XID_Start,
- CR_XID_Continue,
- CR_Default_Ignorable_Code_Point,
- CR_Grapheme_Extend,
- CR_Grapheme_Base,
- CR_Grapheme_Link,
- CR_Common,
- CR_Latin,
- CR_Greek,
- CR_Cyrillic,
- CR_Armenian,
- CR_Hebrew,
- CR_Arabic,
+ CR_Soft_Dotted,
+ CR_Sora_Sompeng,
+ CR_Sundanese,
+ CR_Syloti_Nagri,
CR_Syriac,
- CR_Thaana,
- CR_Devanagari,
- CR_Bengali,
- CR_Gurmukhi,
- CR_Gujarati,
- CR_Oriya,
- CR_Tamil,
- CR_Telugu,
- CR_Kannada,
- CR_Malayalam,
- CR_Sinhala,
- CR_Thai,
- CR_Lao,
- CR_Tibetan,
- CR_Myanmar,
- CR_Georgian,
- CR_Hangul,
- CR_Ethiopic,
- CR_Cherokee,
- CR_Canadian_Aboriginal,
- CR_Ogham,
- CR_Runic,
- CR_Khmer,
- CR_Mongolian,
- CR_Hiragana,
- CR_Katakana,
- CR_Bopomofo,
- CR_Han,
- CR_Yi,
- CR_Old_Italic,
- CR_Gothic,
- CR_Deseret,
- CR_Inherited,
CR_Tagalog,
- CR_Hanunoo,
- CR_Buhid,
CR_Tagbanwa,
- CR_Limbu,
CR_Tai_Le,
- CR_Linear_B,
- CR_Ugaritic,
- CR_Shavian,
- CR_Osmanya,
- CR_Cypriot,
- CR_Braille,
- CR_Buginese,
- CR_Coptic,
- CR_New_Tai_Lue,
- CR_Glagolitic,
- CR_Tifinagh,
- CR_Syloti_Nagri,
- CR_Old_Persian,
- CR_Kharoshthi,
- CR_Balinese,
- CR_Cuneiform,
- CR_Phoenician,
- CR_Phags_Pa,
- CR_Nko,
- CR_Sundanese,
- CR_Lepcha,
- CR_Ol_Chiki,
- CR_Vai,
- CR_Saurashtra,
- CR_Kayah_Li,
- CR_Rejang,
- CR_Lycian,
- CR_Carian,
- CR_Lydian,
- CR_Cham,
CR_Tai_Tham,
CR_Tai_Viet,
- CR_Avestan,
- CR_Egyptian_Hieroglyphs,
- CR_Samaritan,
- CR_Lisu,
- CR_Bamum,
- CR_Javanese,
- CR_Meetei_Mayek,
- CR_Imperial_Aramaic,
- CR_Old_South_Arabian,
- CR_Inscriptional_Parthian,
- CR_Inscriptional_Pahlavi,
- CR_Old_Turkic,
- CR_Kaithi,
- CR_Batak,
- CR_Brahmi,
- CR_Mandaic,
- CR_Chakma,
- CR_Meroitic_Cursive,
- CR_Meroitic_Hieroglyphs,
- CR_Miao,
- CR_Sharada,
- CR_Sora_Sompeng,
CR_Takri,
- CR_Caucasian_Albanian,
- CR_Bassa_Vah,
- CR_Duployan,
- CR_Elbasan,
- CR_Grantha,
- CR_Pahawh_Hmong,
- CR_Khojki,
- CR_Linear_A,
- CR_Mahajani,
- CR_Manichaean,
- CR_Mende_Kikakui,
- CR_Modi,
- CR_Mro,
- CR_Old_North_Arabian,
- CR_Nabataean,
- CR_Palmyrene,
- CR_Pau_Cin_Hau,
- CR_Old_Permic,
- CR_Psalter_Pahlavi,
- CR_Siddham,
- CR_Khudawadi,
- CR_Tirhuta,
- CR_Warang_Citi,
- CR_Ahom,
- CR_Anatolian_Hieroglyphs,
- CR_Hatran,
- CR_Multani,
- CR_Old_Hungarian,
- CR_SignWriting,
- CR_White_Space,
- CR_Bidi_Control,
- CR_Join_Control,
- CR_Dash,
- CR_Hyphen,
- CR_Quotation_Mark,
+ CR_Tamil,
+ CR_Telugu,
CR_Terminal_Punctuation,
- CR_Other_Math,
- CR_Hex_Digit,
- CR_ASCII_Hex_Digit,
- CR_Other_Alphabetic,
- CR_Ideographic,
- CR_Diacritic,
- CR_Extender,
- CR_Other_Lowercase,
- CR_Other_Uppercase,
- CR_Noncharacter_Code_Point,
- CR_Other_Grapheme_Extend,
- CR_IDS_Binary_Operator,
- CR_IDS_Trinary_Operator,
- CR_Radical,
+ CR_Thaana,
+ CR_Thai,
+ CR_Tibetan,
+ CR_Tifinagh,
+ CR_Tirhuta,
+ CR_Ugaritic,
CR_Unified_Ideograph,
- CR_Other_Default_Ignorable_Code_Point,
- CR_Deprecated,
- CR_Soft_Dotted,
- CR_Logical_Order_Exception,
- CR_Other_ID_Start,
- CR_Other_ID_Continue,
- CR_STerm,
- CR_Variation_Selector,
- CR_Pattern_White_Space,
- CR_Pattern_Syntax,
CR_Unknown,
+ CR_Uppercase,
+ CR_Vai,
+ CR_Variation_Selector,
+ CR_Warang_Citi,
+ CR_White_Space,
+ CR_XID_Continue,
+ CR_XID_Start,
+ CR_Yi,
+ CR_Z,
+ CR_Zl,
+ CR_Zp,
+ CR_Zs,
CR_In_Basic_Latin,
CR_In_Latin_1_Supplement,
CR_In_Latin_Extended_A,
@@ -22909,6 +22909,9 @@ const CodeRanges[] = {
CR_In_No_Block,
};
+#define pool_offset(s) offsetof(struct unicode_prop_name_pool_t, unicode_prop_name_pool_str##s)
+
+
#define TOTAL_KEYWORDS 711
#define MIN_WORD_LENGTH 1
#define MAX_WORD_LENGTH 44
@@ -23000,7 +23003,7 @@ hash (register const char *str, register unsigned int len)
5163, 5163, 5163, 5163, 5163, 5163, 5163, 5163, 5163, 5163,
5163, 5163, 5163, 5163, 5163, 5163
};
- register unsigned int hval = len;
+ register int hval = len;
switch (hval)
{
@@ -23038,2261 +23041,3700 @@ hash (register const char *str, register unsigned int len)
return hval + asso_values[(unsigned char)str[len - 1]];
}
-const struct PropertyNameCtype *
+struct unicode_prop_name_pool_t
+ {
+ char unicode_prop_name_pool_str1[sizeof("n")];
+ char unicode_prop_name_pool_str3[sizeof("z")];
+ char unicode_prop_name_pool_str8[sizeof("zzzz")];
+ char unicode_prop_name_pool_str9[sizeof("mn")];
+ char unicode_prop_name_pool_str10[sizeof("cn")];
+ char unicode_prop_name_pool_str14[sizeof("ci")];
+ char unicode_prop_name_pool_str15[sizeof("m")];
+ char unicode_prop_name_pool_str17[sizeof("c")];
+ char unicode_prop_name_pool_str23[sizeof("inmanichaean")];
+ char unicode_prop_name_pool_str24[sizeof("mani")];
+ char unicode_prop_name_pool_str25[sizeof("mc")];
+ char unicode_prop_name_pool_str26[sizeof("cc")];
+ char unicode_prop_name_pool_str28[sizeof("qaai")];
+ char unicode_prop_name_pool_str34[sizeof("qaac")];
+ char unicode_prop_name_pool_str41[sizeof("incham")];
+ char unicode_prop_name_pool_str46[sizeof("mandaic")];
+ char unicode_prop_name_pool_str49[sizeof("sm")];
+ char unicode_prop_name_pool_str51[sizeof("sc")];
+ char unicode_prop_name_pool_str56[sizeof("cans")];
+ char unicode_prop_name_pool_str61[sizeof("ascii")];
+ char unicode_prop_name_pool_str64[sizeof("insamaritan")];
+ char unicode_prop_name_pool_str66[sizeof("incuneiform")];
+ char unicode_prop_name_pool_str67[sizeof("s")];
+ char unicode_prop_name_pool_str68[sizeof("inarmenian")];
+ char unicode_prop_name_pool_str69[sizeof("zs")];
+ char unicode_prop_name_pool_str76[sizeof("cs")];
+ char unicode_prop_name_pool_str85[sizeof("me")];
+ char unicode_prop_name_pool_str90[sizeof("incommonindicnumberforms")];
+ char unicode_prop_name_pool_str93[sizeof("inavestan")];
+ char unicode_prop_name_pool_str94[sizeof("inthai")];
+ char unicode_prop_name_pool_str103[sizeof("inipaextensions")];
+ char unicode_prop_name_pool_str108[sizeof("initialpunctuation")];
+ char unicode_prop_name_pool_str112[sizeof("inancientsymbols")];
+ char unicode_prop_name_pool_str114[sizeof("inthaana")];
+ char unicode_prop_name_pool_str116[sizeof("cf")];
+ char unicode_prop_name_pool_str118[sizeof("incuneiformnumbersandpunctuation")];
+ char unicode_prop_name_pool_str122[sizeof("mtei")];
+ char unicode_prop_name_pool_str124[sizeof("inspecials")];
+ char unicode_prop_name_pool_str133[sizeof("inmusicalsymbols")];
+ char unicode_prop_name_pool_str141[sizeof("inmiscellaneousmathematicalsymbolsa")];
+ char unicode_prop_name_pool_str145[sizeof("lm")];
+ char unicode_prop_name_pool_str146[sizeof("lina")];
+ char unicode_prop_name_pool_str147[sizeof("lc")];
+ char unicode_prop_name_pool_str149[sizeof("inlycian")];
+ char unicode_prop_name_pool_str155[sizeof("lana")];
+ char unicode_prop_name_pool_str157[sizeof("intaixuanjingsymbols")];
+ char unicode_prop_name_pool_str158[sizeof("inmyanmarextendeda")];
+ char unicode_prop_name_pool_str159[sizeof("alnum")];
+ char unicode_prop_name_pool_str161[sizeof("sterm")];
+ char unicode_prop_name_pool_str162[sizeof("intaitham")];
+ char unicode_prop_name_pool_str163[sizeof("intransportandmapsymbols")];
+ char unicode_prop_name_pool_str165[sizeof("taile")];
+ char unicode_prop_name_pool_str167[sizeof("inmalayalam")];
+ char unicode_prop_name_pool_str176[sizeof("inmiscellaneoussymbols")];
+ char unicode_prop_name_pool_str177[sizeof("incontrolpictures")];
+ char unicode_prop_name_pool_str185[sizeof("inmiscellaneoussymbolsandarrows")];
+ char unicode_prop_name_pool_str189[sizeof("inlineara")];
+ char unicode_prop_name_pool_str190[sizeof("inmiscellaneoussymbolsandpictographs")];
+ char unicode_prop_name_pool_str193[sizeof("sinhala")];
+ char unicode_prop_name_pool_str202[sizeof("taiviet")];
+ char unicode_prop_name_pool_str205[sizeof("ext")];
+ char unicode_prop_name_pool_str215[sizeof("latn")];
+ char unicode_prop_name_pool_str216[sizeof("latin")];
+ char unicode_prop_name_pool_str217[sizeof("ital")];
+ char unicode_prop_name_pool_str218[sizeof("intamil")];
+ char unicode_prop_name_pool_str220[sizeof("inmultani")];
+ char unicode_prop_name_pool_str222[sizeof("taml")];
+ char unicode_prop_name_pool_str229[sizeof("inrunic")];
+ char unicode_prop_name_pool_str230[sizeof("incarian")];
+ char unicode_prop_name_pool_str232[sizeof("armn")];
+ char unicode_prop_name_pool_str234[sizeof("armi")];
+ char unicode_prop_name_pool_str235[sizeof("cari")];
+ char unicode_prop_name_pool_str236[sizeof("inlatinextendedc")];
+ char unicode_prop_name_pool_str238[sizeof("armenian")];
+ char unicode_prop_name_pool_str239[sizeof("inmyanmar")];
+ char unicode_prop_name_pool_str240[sizeof("incyrillic")];
+ char unicode_prop_name_pool_str242[sizeof("inlatinextendeda")];
+ char unicode_prop_name_pool_str246[sizeof("carian")];
+ char unicode_prop_name_pool_str249[sizeof("intaile")];
+ char unicode_prop_name_pool_str253[sizeof("tale")];
+ char unicode_prop_name_pool_str256[sizeof("arabic")];
+ char unicode_prop_name_pool_str259[sizeof("l")];
+ char unicode_prop_name_pool_str260[sizeof("nl")];
+ char unicode_prop_name_pool_str261[sizeof("zl")];
+ char unicode_prop_name_pool_str263[sizeof("insyriac")];
+ char unicode_prop_name_pool_str265[sizeof("samr")];
+ char unicode_prop_name_pool_str267[sizeof("merc")];
+ char unicode_prop_name_pool_str269[sizeof("inlinearbideograms")];
+ char unicode_prop_name_pool_str272[sizeof("samaritan")];
+ char unicode_prop_name_pool_str273[sizeof("lt")];
+ char unicode_prop_name_pool_str276[sizeof("insharada")];
+ char unicode_prop_name_pool_str283[sizeof("inmeeteimayekextensions")];
+ char unicode_prop_name_pool_str292[sizeof("inruminumeralsymbols")];
+ char unicode_prop_name_pool_str295[sizeof("miao")];
+ char unicode_prop_name_pool_str296[sizeof("inlatinextendede")];
+ char unicode_prop_name_pool_str300[sizeof("zinh")];
+ char unicode_prop_name_pool_str304[sizeof("inahom")];
+ char unicode_prop_name_pool_str306[sizeof("incherokee")];
+ char unicode_prop_name_pool_str307[sizeof("han")];
+ char unicode_prop_name_pool_str310[sizeof("hani")];
+ char unicode_prop_name_pool_str311[sizeof("inosmanya")];
+ char unicode_prop_name_pool_str312[sizeof("inmiscellaneoustechnical")];
+ char unicode_prop_name_pool_str323[sizeof("cham")];
+ char unicode_prop_name_pool_str325[sizeof("inmahajani")];
+ char unicode_prop_name_pool_str326[sizeof("osma")];
+ char unicode_prop_name_pool_str329[sizeof("manichaean")];
+ char unicode_prop_name_pool_str330[sizeof("term")];
+ char unicode_prop_name_pool_str332[sizeof("sinh")];
+ char unicode_prop_name_pool_str342[sizeof("cntrl")];
+ char unicode_prop_name_pool_str347[sizeof("chakma")];
+ char unicode_prop_name_pool_str348[sizeof("insinhala")];
+ char unicode_prop_name_pool_str352[sizeof("tamil")];
+ char unicode_prop_name_pool_str353[sizeof("inethiopic")];
+ char unicode_prop_name_pool_str356[sizeof("connectorpunctuation")];
+ char unicode_prop_name_pool_str357[sizeof("shavian")];
+ char unicode_prop_name_pool_str361[sizeof("joinc")];
+ char unicode_prop_name_pool_str362[sizeof("inenclosedalphanumerics")];
+ char unicode_prop_name_pool_str368[sizeof("ahex")];
+ char unicode_prop_name_pool_str369[sizeof("inlatinextendedadditional")];
+ char unicode_prop_name_pool_str370[sizeof("lineara")];
+ char unicode_prop_name_pool_str377[sizeof("inenclosedcjklettersandmonths")];
+ char unicode_prop_name_pool_str378[sizeof("hex")];
+ char unicode_prop_name_pool_str381[sizeof("thai")];
+ char unicode_prop_name_pool_str382[sizeof("mahj")];
+ char unicode_prop_name_pool_str386[sizeof("math")];
+ char unicode_prop_name_pool_str389[sizeof("ll")];
+ char unicode_prop_name_pool_str390[sizeof("thaa")];
+ char unicode_prop_name_pool_str392[sizeof("hatran")];
+ char unicode_prop_name_pool_str399[sizeof("mahajani")];
+ char unicode_prop_name_pool_str400[sizeof("insinhalaarchaicnumbers")];
+ char unicode_prop_name_pool_str402[sizeof("taitham")];
+ char unicode_prop_name_pool_str403[sizeof("thaana")];
+ char unicode_prop_name_pool_str408[sizeof("ethi")];
+ char unicode_prop_name_pool_str409[sizeof("inenclosedalphanumericsupplement")];
+ char unicode_prop_name_pool_str414[sizeof("meroiticcursive")];
+ char unicode_prop_name_pool_str415[sizeof("inideographicdescriptioncharacters")];
+ char unicode_prop_name_pool_str419[sizeof("terminalpunctuation")];
+ char unicode_prop_name_pool_str426[sizeof("inemoticons")];
+ char unicode_prop_name_pool_str431[sizeof("intifinagh")];
+ char unicode_prop_name_pool_str433[sizeof("asciihexdigit")];
+ char unicode_prop_name_pool_str438[sizeof("tifinagh")];
+ char unicode_prop_name_pool_str451[sizeof("inearlydynasticcuneiform")];
+ char unicode_prop_name_pool_str457[sizeof("inopticalcharacterrecognition")];
+ char unicode_prop_name_pool_str479[sizeof("loe")];
+ char unicode_prop_name_pool_str486[sizeof("titlecaseletter")];
+ char unicode_prop_name_pool_str489[sizeof("inscriptionalparthian")];
+ char unicode_prop_name_pool_str510[sizeof("oriya")];
+ char unicode_prop_name_pool_str520[sizeof("hira")];
+ char unicode_prop_name_pool_str529[sizeof("sora")];
+ char unicode_prop_name_pool_str530[sizeof("mero")];
+ char unicode_prop_name_pool_str535[sizeof("inarrows")];
+ char unicode_prop_name_pool_str537[sizeof("inhiragana")];
+ char unicode_prop_name_pool_str544[sizeof("no")];
+ char unicode_prop_name_pool_str545[sizeof("inmahjongtiles")];
+ char unicode_prop_name_pool_str549[sizeof("innko")];
+ char unicode_prop_name_pool_str552[sizeof("co")];
+ char unicode_prop_name_pool_str553[sizeof("cher")];
+ char unicode_prop_name_pool_str556[sizeof("inmro")];
+ char unicode_prop_name_pool_str563[sizeof("common")];
+ char unicode_prop_name_pool_str564[sizeof("cwcm")];
+ char unicode_prop_name_pool_str568[sizeof("inmiao")];
+ char unicode_prop_name_pool_str573[sizeof("inscriptionalpahlavi")];
+ char unicode_prop_name_pool_str576[sizeof("inmathematicalalphanumericsymbols")];
+ char unicode_prop_name_pool_str577[sizeof("so")];
+ char unicode_prop_name_pool_str579[sizeof("hano")];
+ char unicode_prop_name_pool_str580[sizeof("tirh")];
+ char unicode_prop_name_pool_str584[sizeof("inhatran")];
+ char unicode_prop_name_pool_str585[sizeof("inolchiki")];
+ char unicode_prop_name_pool_str586[sizeof("ahom")];
+ char unicode_prop_name_pool_str588[sizeof("di")];
+ char unicode_prop_name_pool_str589[sizeof("hatr")];
+ char unicode_prop_name_pool_str591[sizeof("inogham")];
+ char unicode_prop_name_pool_str596[sizeof("intirhuta")];
+ char unicode_prop_name_pool_str601[sizeof("inmodi")];
+ char unicode_prop_name_pool_str603[sizeof("idc")];
+ char unicode_prop_name_pool_str604[sizeof("mand")];
+ char unicode_prop_name_pool_str608[sizeof("inmandaic")];
+ char unicode_prop_name_pool_str609[sizeof("dia")];
+ char unicode_prop_name_pool_str610[sizeof("cwcf")];
+ char unicode_prop_name_pool_str618[sizeof("xidc")];
+ char unicode_prop_name_pool_str621[sizeof("sind")];
+ char unicode_prop_name_pool_str622[sizeof("newline")];
+ char unicode_prop_name_pool_str631[sizeof("mend")];
+ char unicode_prop_name_pool_str635[sizeof("newtailue")];
+ char unicode_prop_name_pool_str638[sizeof("inshorthandformatcontrols")];
+ char unicode_prop_name_pool_str642[sizeof("anatolianhieroglyphs")];
+ char unicode_prop_name_pool_str643[sizeof("xids")];
+ char unicode_prop_name_pool_str653[sizeof("ids")];
+ char unicode_prop_name_pool_str659[sizeof("innewtailue")];
+ char unicode_prop_name_pool_str660[sizeof("insylotinagri")];
+ char unicode_prop_name_pool_str666[sizeof("insundanese")];
+ char unicode_prop_name_pool_str673[sizeof("lo")];
+ char unicode_prop_name_pool_str677[sizeof("indominotiles")];
+ char unicode_prop_name_pool_str678[sizeof("inlao")];
+ char unicode_prop_name_pool_str685[sizeof("lao")];
+ char unicode_prop_name_pool_str686[sizeof("laoo")];
+ char unicode_prop_name_pool_str687[sizeof("mongolian")];
+ char unicode_prop_name_pool_str690[sizeof("cwt")];
+ char unicode_prop_name_pool_str692[sizeof("idst")];
+ char unicode_prop_name_pool_str693[sizeof("format")];
+ char unicode_prop_name_pool_str696[sizeof("lineseparator")];
+ char unicode_prop_name_pool_str702[sizeof("letter")];
+ char unicode_prop_name_pool_str711[sizeof("idcontinue")];
+ char unicode_prop_name_pool_str714[sizeof("inanatolianhieroglyphs")];
+ char unicode_prop_name_pool_str723[sizeof("inlydian")];
+ char unicode_prop_name_pool_str725[sizeof("pi")];
+ char unicode_prop_name_pool_str726[sizeof("nchar")];
+ char unicode_prop_name_pool_str731[sizeof("inspacingmodifierletters")];
+ char unicode_prop_name_pool_str732[sizeof("oalpha")];
+ char unicode_prop_name_pool_str735[sizeof("indeseret")];
+ char unicode_prop_name_pool_str737[sizeof("pc")];
+ char unicode_prop_name_pool_str756[sizeof("xdigit")];
+ char unicode_prop_name_pool_str758[sizeof("inphaistosdisc")];
+ char unicode_prop_name_pool_str759[sizeof("joincontrol")];
+ char unicode_prop_name_pool_str760[sizeof("inlowsurrogates")];
+ char unicode_prop_name_pool_str762[sizeof("mro")];
+ char unicode_prop_name_pool_str763[sizeof("mroo")];
+ char unicode_prop_name_pool_str767[sizeof("xidstart")];
+ char unicode_prop_name_pool_str773[sizeof("wara")];
+ char unicode_prop_name_pool_str776[sizeof("inwarangciti")];
+ char unicode_prop_name_pool_str787[sizeof("ps")];
+ char unicode_prop_name_pool_str797[sizeof("pe")];
+ char unicode_prop_name_pool_str806[sizeof("cwl")];
+ char unicode_prop_name_pool_str816[sizeof("incoptic")];
+ char unicode_prop_name_pool_str824[sizeof("diacritic")];
+ char unicode_prop_name_pool_str827[sizeof("pf")];
+ char unicode_prop_name_pool_str844[sizeof("space")];
+ char unicode_prop_name_pool_str853[sizeof("hanunoo")];
+ char unicode_prop_name_pool_str856[sizeof("incyrillicextendeda")];
+ char unicode_prop_name_pool_str860[sizeof("odi")];
+ char unicode_prop_name_pool_str866[sizeof("modi")];
+ char unicode_prop_name_pool_str867[sizeof("oidc")];
+ char unicode_prop_name_pool_str868[sizeof("incopticepactnumbers")];
+ char unicode_prop_name_pool_str870[sizeof("palm")];
+ char unicode_prop_name_pool_str871[sizeof("insundanesesupplement")];
+ char unicode_prop_name_pool_str872[sizeof("patws")];
+ char unicode_prop_name_pool_str876[sizeof("inolditalic")];
+ char unicode_prop_name_pool_str877[sizeof("inlepcha")];
+ char unicode_prop_name_pool_str878[sizeof("shaw")];
+ char unicode_prop_name_pool_str880[sizeof("omath")];
+ char unicode_prop_name_pool_str886[sizeof("alpha")];
+ char unicode_prop_name_pool_str892[sizeof("oids")];
+ char unicode_prop_name_pool_str896[sizeof("control")];
+ char unicode_prop_name_pool_str897[sizeof("ideo")];
+ char unicode_prop_name_pool_str898[sizeof("lepc")];
+ char unicode_prop_name_pool_str899[sizeof("psalterpahlavi")];
+ char unicode_prop_name_pool_str900[sizeof("dsrt")];
+ char unicode_prop_name_pool_str902[sizeof("otheridcontinue")];
+ char unicode_prop_name_pool_str906[sizeof("inpalmyrene")];
+ char unicode_prop_name_pool_str907[sizeof("decimalnumber")];
+ char unicode_prop_name_pool_str915[sizeof("noncharactercodepoint")];
+ char unicode_prop_name_pool_str916[sizeof("idstart")];
+ char unicode_prop_name_pool_str917[sizeof("otheralphabetic")];
+ char unicode_prop_name_pool_str918[sizeof("letternumber")];
+ char unicode_prop_name_pool_str923[sizeof("dash")];
+ char unicode_prop_name_pool_str926[sizeof("xidcontinue")];
+ char unicode_prop_name_pool_str930[sizeof("finalpunctuation")];
+ char unicode_prop_name_pool_str931[sizeof("extender")];
+ char unicode_prop_name_pool_str935[sizeof("siddham")];
+ char unicode_prop_name_pool_str945[sizeof("inoldturkic")];
+ char unicode_prop_name_pool_str948[sizeof("sharada")];
+ char unicode_prop_name_pool_str951[sizeof("whitespace")];
+ char unicode_prop_name_pool_str956[sizeof("inmodifiertoneletters")];
+ char unicode_prop_name_pool_str958[sizeof("radical")];
+ char unicode_prop_name_pool_str960[sizeof("canadianaboriginal")];
+ char unicode_prop_name_pool_str969[sizeof("inethiopicextendeda")];
+ char unicode_prop_name_pool_str970[sizeof("imperialaramaic")];
+ char unicode_prop_name_pool_str978[sizeof("perm")];
+ char unicode_prop_name_pool_str979[sizeof("deseret")];
+ char unicode_prop_name_pool_str984[sizeof("casedletter")];
+ char unicode_prop_name_pool_str998[sizeof("inimperialaramaic")];
+ char unicode_prop_name_pool_str1001[sizeof("otheridstart")];
+ char unicode_prop_name_pool_str1006[sizeof("prti")];
+ char unicode_prop_name_pool_str1012[sizeof("cprt")];
+ char unicode_prop_name_pool_str1018[sizeof("othersymbol")];
+ char unicode_prop_name_pool_str1022[sizeof("coptic")];
+ char unicode_prop_name_pool_str1037[sizeof("otherlowercase")];
+ char unicode_prop_name_pool_str1038[sizeof("phnx")];
+ char unicode_prop_name_pool_str1042[sizeof("inphoenician")];
+ char unicode_prop_name_pool_str1049[sizeof("incaucasianalbanian")];
+ char unicode_prop_name_pool_str1050[sizeof("inlatin1supplement")];
+ char unicode_prop_name_pool_str1054[sizeof("xpeo")];
+ char unicode_prop_name_pool_str1058[sizeof("ininscriptionalparthian")];
+ char unicode_prop_name_pool_str1059[sizeof("ininscriptionalpahlavi")];
+ char unicode_prop_name_pool_str1060[sizeof("other")];
+ char unicode_prop_name_pool_str1061[sizeof("privateuse")];
+ char unicode_prop_name_pool_str1066[sizeof("othernumber")];
+ char unicode_prop_name_pool_str1071[sizeof("inenclosedideographicsupplement")];
+ char unicode_prop_name_pool_str1073[sizeof("copt")];
+ char unicode_prop_name_pool_str1078[sizeof("print")];
+ char unicode_prop_name_pool_str1080[sizeof("cuneiform")];
+ char unicode_prop_name_pool_str1081[sizeof("olditalic")];
+ char unicode_prop_name_pool_str1082[sizeof("xsux")];
+ char unicode_prop_name_pool_str1086[sizeof("inmongolian")];
+ char unicode_prop_name_pool_str1091[sizeof("inancientgreekmusicalnotation")];
+ char unicode_prop_name_pool_str1092[sizeof("sundanese")];
+ char unicode_prop_name_pool_str1093[sizeof("inoldnortharabian")];
+ char unicode_prop_name_pool_str1095[sizeof("patternsyntax")];
+ char unicode_prop_name_pool_str1098[sizeof("inherited")];
+ char unicode_prop_name_pool_str1099[sizeof("ingrantha")];
+ char unicode_prop_name_pool_str1100[sizeof("inphoneticextensions")];
+ char unicode_prop_name_pool_str1110[sizeof("saurashtra")];
+ char unicode_prop_name_pool_str1116[sizeof("inancientgreeknumbers")];
+ char unicode_prop_name_pool_str1122[sizeof("shrd")];
+ char unicode_prop_name_pool_str1126[sizeof("inoldsoutharabian")];
+ char unicode_prop_name_pool_str1127[sizeof("innabataean")];
+ char unicode_prop_name_pool_str1128[sizeof("inalphabeticpresentationforms")];
+ char unicode_prop_name_pool_str1129[sizeof("spaceseparator")];
+ char unicode_prop_name_pool_str1135[sizeof("olower")];
+ char unicode_prop_name_pool_str1137[sizeof("ingeneralpunctuation")];
+ char unicode_prop_name_pool_str1138[sizeof("inunifiedcanadianaboriginalsyllabics")];
+ char unicode_prop_name_pool_str1140[sizeof("bamum")];
+ char unicode_prop_name_pool_str1143[sizeof("inarabic")];
+ char unicode_prop_name_pool_str1147[sizeof("phli")];
+ char unicode_prop_name_pool_str1148[sizeof("inphoneticextensionssupplement")];
+ char unicode_prop_name_pool_str1150[sizeof("patternwhitespace")];
+ char unicode_prop_name_pool_str1152[sizeof("inbasiclatin")];
+ char unicode_prop_name_pool_str1154[sizeof("othermath")];
+ char unicode_prop_name_pool_str1155[sizeof("idsbinaryoperator")];
+ char unicode_prop_name_pool_str1156[sizeof("inmathematicaloperators")];
+ char unicode_prop_name_pool_str1157[sizeof("multani")];
+ char unicode_prop_name_pool_str1158[sizeof("ingujarati")];
+ char unicode_prop_name_pool_str1163[sizeof("inelbasan")];
+ char unicode_prop_name_pool_str1164[sizeof("inoldhungarian")];
+ char unicode_prop_name_pool_str1165[sizeof("innumberforms")];
+ char unicode_prop_name_pool_str1166[sizeof("nd")];
+ char unicode_prop_name_pool_str1168[sizeof("yi")];
+ char unicode_prop_name_pool_str1169[sizeof("lisu")];
+ char unicode_prop_name_pool_str1172[sizeof("yiii")];
+ char unicode_prop_name_pool_str1174[sizeof("inpsalterpahlavi")];
+ char unicode_prop_name_pool_str1178[sizeof("tagbanwa")];
+ char unicode_prop_name_pool_str1184[sizeof("bass")];
+ char unicode_prop_name_pool_str1189[sizeof("nbat")];
+ char unicode_prop_name_pool_str1190[sizeof("inbyzantinemusicalsymbols")];
+ char unicode_prop_name_pool_str1192[sizeof("closepunctuation")];
+ char unicode_prop_name_pool_str1194[sizeof("tfng")];
+ char unicode_prop_name_pool_str1195[sizeof("otherletter")];
+ char unicode_prop_name_pool_str1199[sizeof("sd")];
+ char unicode_prop_name_pool_str1202[sizeof("lowercase")];
+ char unicode_prop_name_pool_str1203[sizeof("sidd")];
+ char unicode_prop_name_pool_str1205[sizeof("nabataean")];
+ char unicode_prop_name_pool_str1207[sizeof("lepcha")];
+ char unicode_prop_name_pool_str1208[sizeof("inarabicpresentationformsa")];
+ char unicode_prop_name_pool_str1210[sizeof("modifierletter")];
+ char unicode_prop_name_pool_str1211[sizeof("intags")];
+ char unicode_prop_name_pool_str1212[sizeof("mult")];
+ char unicode_prop_name_pool_str1215[sizeof("insiddham")];
+ char unicode_prop_name_pool_str1216[sizeof("talu")];
+ char unicode_prop_name_pool_str1221[sizeof("cased")];
+ char unicode_prop_name_pool_str1223[sizeof("intibetan")];
+ char unicode_prop_name_pool_str1230[sizeof("separator")];
+ char unicode_prop_name_pool_str1232[sizeof("runic")];
+ char unicode_prop_name_pool_str1233[sizeof("inmiscellaneousmathematicalsymbolsb")];
+ char unicode_prop_name_pool_str1238[sizeof("linb")];
+ char unicode_prop_name_pool_str1239[sizeof("inbraillepatterns")];
+ char unicode_prop_name_pool_str1240[sizeof("oldpersian")];
+ char unicode_prop_name_pool_str1242[sizeof("inugaritic")];
+ char unicode_prop_name_pool_str1243[sizeof("telu")];
+ char unicode_prop_name_pool_str1245[sizeof("limb")];
+ char unicode_prop_name_pool_str1247[sizeof("oldpermic")];
+ char unicode_prop_name_pool_str1249[sizeof("bali")];
+ char unicode_prop_name_pool_str1250[sizeof("inmyanmarextendedb")];
+ char unicode_prop_name_pool_str1251[sizeof("tibt")];
+ char unicode_prop_name_pool_str1259[sizeof("saur")];
+ char unicode_prop_name_pool_str1263[sizeof("po")];
+ char unicode_prop_name_pool_str1265[sizeof("tibetan")];
+ char unicode_prop_name_pool_str1280[sizeof("insaurashtra")];
+ char unicode_prop_name_pool_str1284[sizeof("inbalinese")];
+ char unicode_prop_name_pool_str1285[sizeof("elba")];
+ char unicode_prop_name_pool_str1290[sizeof("bengali")];
+ char unicode_prop_name_pool_str1291[sizeof("gran")];
+ char unicode_prop_name_pool_str1295[sizeof("phoenician")];
+ char unicode_prop_name_pool_str1297[sizeof("ingurmukhi")];
+ char unicode_prop_name_pool_str1300[sizeof("caseignorable")];
+ char unicode_prop_name_pool_str1305[sizeof("lyci")];
+ char unicode_prop_name_pool_str1307[sizeof("inyijinghexagramsymbols")];
+ char unicode_prop_name_pool_str1309[sizeof("mlym")];
+ char unicode_prop_name_pool_str1316[sizeof("lycian")];
+ char unicode_prop_name_pool_str1321[sizeof("elbasan")];
+ char unicode_prop_name_pool_str1327[sizeof("balinese")];
+ char unicode_prop_name_pool_str1328[sizeof("narb")];
+ char unicode_prop_name_pool_str1330[sizeof("brai")];
+ char unicode_prop_name_pool_str1333[sizeof("insuttonsignwriting")];
+ char unicode_prop_name_pool_str1335[sizeof("insorasompeng")];
+ char unicode_prop_name_pool_str1336[sizeof("malayalam")];
+ char unicode_prop_name_pool_str1339[sizeof("arab")];
+ char unicode_prop_name_pool_str1341[sizeof("brahmi")];
+ char unicode_prop_name_pool_str1343[sizeof("incountingrodnumerals")];
+ char unicode_prop_name_pool_str1347[sizeof("rjng")];
+ char unicode_prop_name_pool_str1348[sizeof("mong")];
+ char unicode_prop_name_pool_str1352[sizeof("incyrillicsupplement")];
+ char unicode_prop_name_pool_str1359[sizeof("ogam")];
+ char unicode_prop_name_pool_str1361[sizeof("sarb")];
+ char unicode_prop_name_pool_str1362[sizeof("lower")];
+ char unicode_prop_name_pool_str1364[sizeof("inrejang")];
+ char unicode_prop_name_pool_str1370[sizeof("hmng")];
+ char unicode_prop_name_pool_str1373[sizeof("tirhuta")];
+ char unicode_prop_name_pool_str1374[sizeof("hang")];
+ char unicode_prop_name_pool_str1379[sizeof("wspace")];
+ char unicode_prop_name_pool_str1384[sizeof("inlatinextendedd")];
+ char unicode_prop_name_pool_str1387[sizeof("invai")];
+ char unicode_prop_name_pool_str1388[sizeof("incherokeesupplement")];
+ char unicode_prop_name_pool_str1390[sizeof("mymr")];
+ char unicode_prop_name_pool_str1394[sizeof("vai")];
+ char unicode_prop_name_pool_str1395[sizeof("vaii")];
+ char unicode_prop_name_pool_str1408[sizeof("ethiopic")];
+ char unicode_prop_name_pool_str1410[sizeof("sylotinagri")];
+ char unicode_prop_name_pool_str1415[sizeof("myanmar")];
+ char unicode_prop_name_pool_str1417[sizeof("syrc")];
+ char unicode_prop_name_pool_str1419[sizeof("inbrahmi")];
+ char unicode_prop_name_pool_str1423[sizeof("mathsymbol")];
+ char unicode_prop_name_pool_str1425[sizeof("runr")];
+ char unicode_prop_name_pool_str1431[sizeof("inshavian")];
+ char unicode_prop_name_pool_str1432[sizeof("gothic")];
+ char unicode_prop_name_pool_str1438[sizeof("syriac")];
+ char unicode_prop_name_pool_str1439[sizeof("p")];
+ char unicode_prop_name_pool_str1441[sizeof("zp")];
+ char unicode_prop_name_pool_str1442[sizeof("induployan")];
+ char unicode_prop_name_pool_str1444[sizeof("vs")];
+ char unicode_prop_name_pool_str1447[sizeof("ingreekandcoptic")];
+ char unicode_prop_name_pool_str1448[sizeof("ingothic")];
+ char unicode_prop_name_pool_str1451[sizeof("lowercaseletter")];
+ char unicode_prop_name_pool_str1455[sizeof("inoriya")];
+ char unicode_prop_name_pool_str1461[sizeof("grext")];
+ char unicode_prop_name_pool_str1462[sizeof("linearb")];
+ char unicode_prop_name_pool_str1463[sizeof("inyiradicals")];
+ char unicode_prop_name_pool_str1465[sizeof("inethiopicsupplement")];
+ char unicode_prop_name_pool_str1466[sizeof("inletterlikesymbols")];
+ char unicode_prop_name_pool_str1467[sizeof("ingeometricshapes")];
+ char unicode_prop_name_pool_str1469[sizeof("java")];
+ char unicode_prop_name_pool_str1470[sizeof("inblockelements")];
+ char unicode_prop_name_pool_str1472[sizeof("number")];
+ char unicode_prop_name_pool_str1473[sizeof("incombininghalfmarks")];
+ char unicode_prop_name_pool_str1474[sizeof("inbassavah")];
+ char unicode_prop_name_pool_str1489[sizeof("inlinearbsyllabary")];
+ char unicode_prop_name_pool_str1491[sizeof("osmanya")];
+ char unicode_prop_name_pool_str1495[sizeof("avst")];
+ char unicode_prop_name_pool_str1500[sizeof("hexdigit")];
+ char unicode_prop_name_pool_str1504[sizeof("injavanese")];
+ char unicode_prop_name_pool_str1513[sizeof("cyrl")];
+ char unicode_prop_name_pool_str1514[sizeof("avestan")];
+ char unicode_prop_name_pool_str1531[sizeof("intaiviet")];
+ char unicode_prop_name_pool_str1532[sizeof("inornamentaldingbats")];
+ char unicode_prop_name_pool_str1533[sizeof("tavt")];
+ char unicode_prop_name_pool_str1538[sizeof("javanese")];
+ char unicode_prop_name_pool_str1539[sizeof("inethiopicextended")];
+ char unicode_prop_name_pool_str1550[sizeof("inhalfwidthandfullwidthforms")];
+ char unicode_prop_name_pool_str1559[sizeof("ingeorgian")];
+ char unicode_prop_name_pool_str1561[sizeof("inarabicmathematicalalphabeticsymbols")];
+ char unicode_prop_name_pool_str1569[sizeof("hangul")];
+ char unicode_prop_name_pool_str1571[sizeof("insuperscriptsandsubscripts")];
+ char unicode_prop_name_pool_str1576[sizeof("inhanunoo")];
+ char unicode_prop_name_pool_str1578[sizeof("inhangulsyllables")];
+ char unicode_prop_name_pool_str1586[sizeof("inoldpersian")];
+ char unicode_prop_name_pool_str1589[sizeof("geor")];
+ char unicode_prop_name_pool_str1591[sizeof("otherpunctuation")];
+ char unicode_prop_name_pool_str1593[sizeof("inoldpermic")];
+ char unicode_prop_name_pool_str1598[sizeof("inalchemicalsymbols")];
+ char unicode_prop_name_pool_str1599[sizeof("sylo")];
+ char unicode_prop_name_pool_str1601[sizeof("hiragana")];
+ char unicode_prop_name_pool_str1604[sizeof("word")];
+ char unicode_prop_name_pool_str1612[sizeof("inmeroitichieroglyphs")];
+ char unicode_prop_name_pool_str1614[sizeof("insmallformvariants")];
+ char unicode_prop_name_pool_str1620[sizeof("sund")];
+ char unicode_prop_name_pool_str1621[sizeof("brah")];
+ char unicode_prop_name_pool_str1623[sizeof("insupplementalmathematicaloperators")];
+ char unicode_prop_name_pool_str1624[sizeof("glagolitic")];
+ char unicode_prop_name_pool_str1627[sizeof("braille")];
+ char unicode_prop_name_pool_str1639[sizeof("unassigned")];
+ char unicode_prop_name_pool_str1640[sizeof("sgnw")];
+ char unicode_prop_name_pool_str1644[sizeof("plrd")];
+ char unicode_prop_name_pool_str1648[sizeof("hebr")];
+ char unicode_prop_name_pool_str1649[sizeof("ogham")];
+ char unicode_prop_name_pool_str1654[sizeof("cyrillic")];
+ char unicode_prop_name_pool_str1658[sizeof("orya")];
+ char unicode_prop_name_pool_str1669[sizeof("grantha")];
+ char unicode_prop_name_pool_str1684[sizeof("invariationselectors")];
+ char unicode_prop_name_pool_str1693[sizeof("indingbats")];
+ char unicode_prop_name_pool_str1695[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];
+ char unicode_prop_name_pool_str1702[sizeof("inhanguljamoextendeda")];
+ char unicode_prop_name_pool_str1705[sizeof("goth")];
+ char unicode_prop_name_pool_str1706[sizeof("graphemebase")];
+ char unicode_prop_name_pool_str1708[sizeof("bidic")];
+ char unicode_prop_name_pool_str1717[sizeof("ogrext")];
+ char unicode_prop_name_pool_str1724[sizeof("idsb")];
+ char unicode_prop_name_pool_str1732[sizeof("invariationselectorssupplement")];
+ char unicode_prop_name_pool_str1733[sizeof("assigned")];
+ char unicode_prop_name_pool_str1737[sizeof("symbol")];
+ char unicode_prop_name_pool_str1741[sizeof("ingreekextended")];
+ char unicode_prop_name_pool_str1743[sizeof("pauc")];
+ char unicode_prop_name_pool_str1752[sizeof("meroitichieroglyphs")];
+ char unicode_prop_name_pool_str1754[sizeof("logicalorderexception")];
+ char unicode_prop_name_pool_str1771[sizeof("incurrencysymbols")];
+ char unicode_prop_name_pool_str1775[sizeof("inarabicextendeda")];
+ char unicode_prop_name_pool_str1783[sizeof("insupplementalarrowsc")];
+ char unicode_prop_name_pool_str1786[sizeof("insupplementalarrowsa")];
+ char unicode_prop_name_pool_str1788[sizeof("inkannada")];
+ char unicode_prop_name_pool_str1792[sizeof("kana")];
+ char unicode_prop_name_pool_str1793[sizeof("phagspa")];
+ char unicode_prop_name_pool_str1796[sizeof("cakm")];
+ char unicode_prop_name_pool_str1797[sizeof("digit")];
+ char unicode_prop_name_pool_str1802[sizeof("softdotted")];
+ char unicode_prop_name_pool_str1806[sizeof("inchakma")];
+ char unicode_prop_name_pool_str1818[sizeof("inphagspa")];
+ char unicode_prop_name_pool_str1822[sizeof("inhighprivateusesurrogates")];
+ char unicode_prop_name_pool_str1836[sizeof("warangciti")];
+ char unicode_prop_name_pool_str1844[sizeof("incjkcompatibilityforms")];
+ char unicode_prop_name_pool_str1847[sizeof("idstrinaryoperator")];
+ char unicode_prop_name_pool_str1849[sizeof("incjkcompatibilityideographs")];
+ char unicode_prop_name_pool_str1851[sizeof("inkaithi")];
+ char unicode_prop_name_pool_str1857[sizeof("takri")];
+ char unicode_prop_name_pool_str1864[sizeof("phlp")];
+ char unicode_prop_name_pool_str1865[sizeof("mendekikakui")];
+ char unicode_prop_name_pool_str1867[sizeof("punct")];
+ char unicode_prop_name_pool_str1870[sizeof("otherdefaultignorablecodepoint")];
+ char unicode_prop_name_pool_str1871[sizeof("inkatakana")];
+ char unicode_prop_name_pool_str1878[sizeof("graph")];
+ char unicode_prop_name_pool_str1879[sizeof("lydi")];
+ char unicode_prop_name_pool_str1885[sizeof("pd")];
+ char unicode_prop_name_pool_str1887[sizeof("incjkstrokes")];
+ char unicode_prop_name_pool_str1890[sizeof("lydian")];
+ char unicode_prop_name_pool_str1895[sizeof("sorasompeng")];
+ char unicode_prop_name_pool_str1897[sizeof("incjkcompatibilityideographssupplement")];
+ char unicode_prop_name_pool_str1900[sizeof("meeteimayek")];
+ char unicode_prop_name_pool_str1909[sizeof("otheruppercase")];
+ char unicode_prop_name_pool_str1912[sizeof("kali")];
+ char unicode_prop_name_pool_str1915[sizeof("inhanguljamo")];
+ char unicode_prop_name_pool_str1917[sizeof("ideographic")];
+ char unicode_prop_name_pool_str1935[sizeof("inmeeteimayek")];
+ char unicode_prop_name_pool_str1948[sizeof("incyrillicextendedb")];
+ char unicode_prop_name_pool_str1964[sizeof("hluw")];
+ char unicode_prop_name_pool_str1969[sizeof("patsyn")];
+ char unicode_prop_name_pool_str1972[sizeof("incombiningdiacriticalmarks")];
+ char unicode_prop_name_pool_str1973[sizeof("inarabicsupplement")];
+ char unicode_prop_name_pool_str1975[sizeof("inkanasupplement")];
+ char unicode_prop_name_pool_str1977[sizeof("deprecated")];
+ char unicode_prop_name_pool_str1978[sizeof("inverticalforms")];
+ char unicode_prop_name_pool_str1982[sizeof("incombiningdiacriticalmarksforsymbols")];
+ char unicode_prop_name_pool_str1987[sizeof("indevanagari")];
+ char unicode_prop_name_pool_str1989[sizeof("inbuhid")];
+ char unicode_prop_name_pool_str1991[sizeof("alphabetic")];
+ char unicode_prop_name_pool_str1995[sizeof("oldhungarian")];
+ char unicode_prop_name_pool_str1998[sizeof("mark")];
+ char unicode_prop_name_pool_str2005[sizeof("inkharoshthi")];
+ char unicode_prop_name_pool_str2011[sizeof("deva")];
+ char unicode_prop_name_pool_str2012[sizeof("invedicextensions")];
+ char unicode_prop_name_pool_str2019[sizeof("devanagari")];
+ char unicode_prop_name_pool_str2020[sizeof("incombiningdiacriticalmarkssupplement")];
+ char unicode_prop_name_pool_str2024[sizeof("ingeometricshapesextended")];
+ char unicode_prop_name_pool_str2030[sizeof("inkhmer")];
+ char unicode_prop_name_pool_str2034[sizeof("changeswhencasemapped")];
+ char unicode_prop_name_pool_str2058[sizeof("intakri")];
+ char unicode_prop_name_pool_str2061[sizeof("dep")];
+ char unicode_prop_name_pool_str2062[sizeof("takr")];
+ char unicode_prop_name_pool_str2080[sizeof("changeswhencasefolded")];
+ char unicode_prop_name_pool_str2082[sizeof("kaithi")];
+ char unicode_prop_name_pool_str2093[sizeof("phag")];
+ char unicode_prop_name_pool_str2104[sizeof("inpahawhhmong")];
+ char unicode_prop_name_pool_str2106[sizeof("bidicontrol")];
+ char unicode_prop_name_pool_str2116[sizeof("inkhojki")];
+ char unicode_prop_name_pool_str2126[sizeof("bamu")];
+ char unicode_prop_name_pool_str2127[sizeof("inbamum")];
+ char unicode_prop_name_pool_str2128[sizeof("changeswhentitlecased")];
+ char unicode_prop_name_pool_str2131[sizeof("inkhmersymbols")];
+ char unicode_prop_name_pool_str2132[sizeof("uideo")];
+ char unicode_prop_name_pool_str2133[sizeof("lu")];
+ char unicode_prop_name_pool_str2136[sizeof("kthi")];
+ char unicode_prop_name_pool_str2145[sizeof("limbu")];
+ char unicode_prop_name_pool_str2147[sizeof("defaultignorablecodepoint")];
+ char unicode_prop_name_pool_str2151[sizeof("inplayingcards")];
+ char unicode_prop_name_pool_str2153[sizeof("inhebrew")];
+ char unicode_prop_name_pool_str2161[sizeof("modifiersymbol")];
+ char unicode_prop_name_pool_str2167[sizeof("ugaritic")];
+ char unicode_prop_name_pool_str2172[sizeof("inlisu")];
+ char unicode_prop_name_pool_str2173[sizeof("inglagolitic")];
+ char unicode_prop_name_pool_str2175[sizeof("inprivateusearea")];
+ char unicode_prop_name_pool_str2178[sizeof("olck")];
+ char unicode_prop_name_pool_str2182[sizeof("inbengali")];
+ char unicode_prop_name_pool_str2185[sizeof("olchiki")];
+ char unicode_prop_name_pool_str2195[sizeof("caucasianalbanian")];
+ char unicode_prop_name_pool_str2210[sizeof("oldturkic")];
+ char unicode_prop_name_pool_str2211[sizeof("beng")];
+ char unicode_prop_name_pool_str2212[sizeof("intelugu")];
+ char unicode_prop_name_pool_str2218[sizeof("hyphen")];
+ char unicode_prop_name_pool_str2221[sizeof("inbuginese")];
+ char unicode_prop_name_pool_str2225[sizeof("intagalog")];
+ char unicode_prop_name_pool_str2240[sizeof("cypriot")];
+ char unicode_prop_name_pool_str2249[sizeof("inlimbu")];
+ char unicode_prop_name_pool_str2252[sizeof("graphemeextend")];
+ char unicode_prop_name_pool_str2255[sizeof("tagb")];
+ char unicode_prop_name_pool_str2259[sizeof("incypriotsyllabary")];
+ char unicode_prop_name_pool_str2263[sizeof("intagbanwa")];
+ char unicode_prop_name_pool_str2268[sizeof("inaegeannumbers")];
+ char unicode_prop_name_pool_str2275[sizeof("inkatakanaphoneticextensions")];
+ char unicode_prop_name_pool_str2276[sizeof("glag")];
+ char unicode_prop_name_pool_str2277[sizeof("combiningmark")];
+ char unicode_prop_name_pool_str2278[sizeof("palmyrene")];
+ char unicode_prop_name_pool_str2280[sizeof("khmr")];
+ char unicode_prop_name_pool_str2284[sizeof("khar")];
+ char unicode_prop_name_pool_str2292[sizeof("ugar")];
+ char unicode_prop_name_pool_str2300[sizeof("inarabicpresentationformsb")];
+ char unicode_prop_name_pool_str2304[sizeof("insupplementaryprivateuseareaa")];
+ char unicode_prop_name_pool_str2306[sizeof("variationselector")];
+ char unicode_prop_name_pool_str2311[sizeof("nko")];
+ char unicode_prop_name_pool_str2312[sizeof("nkoo")];
+ char unicode_prop_name_pool_str2330[sizeof("inbamumsupplement")];
+ char unicode_prop_name_pool_str2336[sizeof("tglg")];
+ char unicode_prop_name_pool_str2338[sizeof("any")];
+ char unicode_prop_name_pool_str2339[sizeof("enclosingmark")];
+ char unicode_prop_name_pool_str2348[sizeof("gujr")];
+ char unicode_prop_name_pool_str2358[sizeof("changeswhenlowercased")];
+ char unicode_prop_name_pool_str2363[sizeof("knda")];
+ char unicode_prop_name_pool_str2364[sizeof("hung")];
+ char unicode_prop_name_pool_str2365[sizeof("gujarati")];
+ char unicode_prop_name_pool_str2368[sizeof("bopo")];
+ char unicode_prop_name_pool_str2373[sizeof("inmendekikakui")];
+ char unicode_prop_name_pool_str2376[sizeof("inbopomofo")];
+ char unicode_prop_name_pool_str2386[sizeof("kharoshthi")];
+ char unicode_prop_name_pool_str2388[sizeof("kannada")];
+ char unicode_prop_name_pool_str2401[sizeof("khoj")];
+ char unicode_prop_name_pool_str2422[sizeof("cherokee")];
+ char unicode_prop_name_pool_str2426[sizeof("inlatinextendedb")];
+ char unicode_prop_name_pool_str2432[sizeof("dashpunctuation")];
+ char unicode_prop_name_pool_str2435[sizeof("dupl")];
+ char unicode_prop_name_pool_str2443[sizeof("inyisyllables")];
+ char unicode_prop_name_pool_str2451[sizeof("georgian")];
+ char unicode_prop_name_pool_str2453[sizeof("rejang")];
+ char unicode_prop_name_pool_str2455[sizeof("oupper")];
+ char unicode_prop_name_pool_str2477[sizeof("aghb")];
+ char unicode_prop_name_pool_str2491[sizeof("khmer")];
+ char unicode_prop_name_pool_str2494[sizeof("grbase")];
+ char unicode_prop_name_pool_str2503[sizeof("currencysymbol")];
+ char unicode_prop_name_pool_str2529[sizeof("incombiningdiacriticalmarksextended")];
+ char unicode_prop_name_pool_str2542[sizeof("spacingmark")];
+ char unicode_prop_name_pool_str2544[sizeof("orkh")];
+ char unicode_prop_name_pool_str2550[sizeof("cwu")];
+ char unicode_prop_name_pool_str2552[sizeof("hebrew")];
+ char unicode_prop_name_pool_str2570[sizeof("insupplementalpunctuation")];
+ char unicode_prop_name_pool_str2581[sizeof("oldnortharabian")];
+ char unicode_prop_name_pool_str2587[sizeof("incjksymbolsandpunctuation")];
+ char unicode_prop_name_pool_str2590[sizeof("othergraphemeextend")];
+ char unicode_prop_name_pool_str2613[sizeof("indevanagariextended")];
+ char unicode_prop_name_pool_str2621[sizeof("tagalog")];
+ char unicode_prop_name_pool_str2628[sizeof("surrogate")];
+ char unicode_prop_name_pool_str2650[sizeof("bopomofo")];
+ char unicode_prop_name_pool_str2679[sizeof("ingeorgiansupplement")];
+ char unicode_prop_name_pool_str2704[sizeof("uppercase")];
+ char unicode_prop_name_pool_str2711[sizeof("unifiedideograph")];
+ char unicode_prop_name_pool_str2742[sizeof("inpaucinhau")];
+ char unicode_prop_name_pool_str2743[sizeof("paucinhau")];
+ char unicode_prop_name_pool_str2774[sizeof("insupplementalsymbolsandpictographs")];
+ char unicode_prop_name_pool_str2792[sizeof("nonspacingmark")];
+ char unicode_prop_name_pool_str2794[sizeof("inhanguljamoextendedb")];
+ char unicode_prop_name_pool_str2802[sizeof("inhighsurrogates")];
+ char unicode_prop_name_pool_str2803[sizeof("punctuation")];
+ char unicode_prop_name_pool_str2834[sizeof("openpunctuation")];
+ char unicode_prop_name_pool_str2835[sizeof("bassavah")];
+ char unicode_prop_name_pool_str2864[sizeof("upper")];
+ char unicode_prop_name_pool_str2878[sizeof("insupplementalarrowsb")];
+ char unicode_prop_name_pool_str2879[sizeof("inkanbun")];
+ char unicode_prop_name_pool_str2918[sizeof("inkangxiradicals")];
+ char unicode_prop_name_pool_str2922[sizeof("inmeroiticcursive")];
+ char unicode_prop_name_pool_str2925[sizeof("signwriting")];
+ char unicode_prop_name_pool_str2928[sizeof("incjkradicalssupplement")];
+ char unicode_prop_name_pool_str2930[sizeof("pahawhhmong")];
+ char unicode_prop_name_pool_str2952[sizeof("inkayahli")];
+ char unicode_prop_name_pool_str2953[sizeof("uppercaseletter")];
+ char unicode_prop_name_pool_str2955[sizeof("batk")];
+ char unicode_prop_name_pool_str2960[sizeof("inbatak")];
+ char unicode_prop_name_pool_str2968[sizeof("incjkcompatibility")];
+ char unicode_prop_name_pool_str2983[sizeof("buhd")];
+ char unicode_prop_name_pool_str2989[sizeof("egyp")];
+ char unicode_prop_name_pool_str3009[sizeof("innoblock")];
+ char unicode_prop_name_pool_str3043[sizeof("inegyptianhieroglyphs")];
+ char unicode_prop_name_pool_str3084[sizeof("grek")];
+ char unicode_prop_name_pool_str3176[sizeof("bugi")];
+ char unicode_prop_name_pool_str3230[sizeof("changeswhenuppercased")];
+ char unicode_prop_name_pool_str3234[sizeof("paragraphseparator")];
+ char unicode_prop_name_pool_str3254[sizeof("buginese")];
+ char unicode_prop_name_pool_str3282[sizeof("guru")];
+ char unicode_prop_name_pool_str3299[sizeof("inbopomofoextended")];
+ char unicode_prop_name_pool_str3312[sizeof("telugu")];
+ char unicode_prop_name_pool_str3343[sizeof("quotationmark")];
+ char unicode_prop_name_pool_str3364[sizeof("inkhudawadi")];
+ char unicode_prop_name_pool_str3370[sizeof("kayahli")];
+ char unicode_prop_name_pool_str3372[sizeof("oldsoutharabian")];
+ char unicode_prop_name_pool_str3396[sizeof("insupplementaryprivateuseareab")];
+ char unicode_prop_name_pool_str3479[sizeof("inhangulcompatibilityjamo")];
+ char unicode_prop_name_pool_str3491[sizeof("zyyy")];
+ char unicode_prop_name_pool_str3555[sizeof("qmark")];
+ char unicode_prop_name_pool_str3566[sizeof("buhid")];
+ char unicode_prop_name_pool_str3567[sizeof("sk")];
+ char unicode_prop_name_pool_str3582[sizeof("unknown")];
+ char unicode_prop_name_pool_str3619[sizeof("khudawadi")];
+ char unicode_prop_name_pool_str3644[sizeof("katakana")];
+ char unicode_prop_name_pool_str3670[sizeof("incjkunifiedideographsextensionc")];
+ char unicode_prop_name_pool_str3673[sizeof("incjkunifiedideographsextensiona")];
+ char unicode_prop_name_pool_str3685[sizeof("incjkunifiedideographs")];
+ char unicode_prop_name_pool_str3700[sizeof("incjkunifiedideographsextensione")];
+ char unicode_prop_name_pool_str3743[sizeof("duployan")];
+ char unicode_prop_name_pool_str3763[sizeof("egyptianhieroglyphs")];
+ char unicode_prop_name_pool_str3853[sizeof("inboxdrawing")];
+ char unicode_prop_name_pool_str4106[sizeof("khojki")];
+ char unicode_prop_name_pool_str4244[sizeof("incjkunifiedideographsextensiond")];
+ char unicode_prop_name_pool_str4722[sizeof("batak")];
+ char unicode_prop_name_pool_str4765[sizeof("incjkunifiedideographsextensionb")];
+ char unicode_prop_name_pool_str4780[sizeof("blank")];
+ char unicode_prop_name_pool_str4851[sizeof("greek")];
+ char unicode_prop_name_pool_str4943[sizeof("grlink")];
+ char unicode_prop_name_pool_str5054[sizeof("gurmukhi")];
+ char unicode_prop_name_pool_str5162[sizeof("graphemelink")];
+ };
+static const struct unicode_prop_name_pool_t unicode_prop_name_pool_contents =
+ {
+ "n",
+ "z",
+ "zzzz",
+ "mn",
+ "cn",
+ "ci",
+ "m",
+ "c",
+ "inmanichaean",
+ "mani",
+ "mc",
+ "cc",
+ "qaai",
+ "qaac",
+ "incham",
+ "mandaic",
+ "sm",
+ "sc",
+ "cans",
+ "ascii",
+ "insamaritan",
+ "incuneiform",
+ "s",
+ "inarmenian",
+ "zs",
+ "cs",
+ "me",
+ "incommonindicnumberforms",
+ "inavestan",
+ "inthai",
+ "inipaextensions",
+ "initialpunctuation",
+ "inancientsymbols",
+ "inthaana",
+ "cf",
+ "incuneiformnumbersandpunctuation",
+ "mtei",
+ "inspecials",
+ "inmusicalsymbols",
+ "inmiscellaneousmathematicalsymbolsa",
+ "lm",
+ "lina",
+ "lc",
+ "inlycian",
+ "lana",
+ "intaixuanjingsymbols",
+ "inmyanmarextendeda",
+ "alnum",
+ "sterm",
+ "intaitham",
+ "intransportandmapsymbols",
+ "taile",
+ "inmalayalam",
+ "inmiscellaneoussymbols",
+ "incontrolpictures",
+ "inmiscellaneoussymbolsandarrows",
+ "inlineara",
+ "inmiscellaneoussymbolsandpictographs",
+ "sinhala",
+ "taiviet",
+ "ext",
+ "latn",
+ "latin",
+ "ital",
+ "intamil",
+ "inmultani",
+ "taml",
+ "inrunic",
+ "incarian",
+ "armn",
+ "armi",
+ "cari",
+ "inlatinextendedc",
+ "armenian",
+ "inmyanmar",
+ "incyrillic",
+ "inlatinextendeda",
+ "carian",
+ "intaile",
+ "tale",
+ "arabic",
+ "l",
+ "nl",
+ "zl",
+ "insyriac",
+ "samr",
+ "merc",
+ "inlinearbideograms",
+ "samaritan",
+ "lt",
+ "insharada",
+ "inmeeteimayekextensions",
+ "inruminumeralsymbols",
+ "miao",
+ "inlatinextendede",
+ "zinh",
+ "inahom",
+ "incherokee",
+ "han",
+ "hani",
+ "inosmanya",
+ "inmiscellaneoustechnical",
+ "cham",
+ "inmahajani",
+ "osma",
+ "manichaean",
+ "term",
+ "sinh",
+ "cntrl",
+ "chakma",
+ "insinhala",
+ "tamil",
+ "inethiopic",
+ "connectorpunctuation",
+ "shavian",
+ "joinc",
+ "inenclosedalphanumerics",
+ "ahex",
+ "inlatinextendedadditional",
+ "lineara",
+ "inenclosedcjklettersandmonths",
+ "hex",
+ "thai",
+ "mahj",
+ "math",
+ "ll",
+ "thaa",
+ "hatran",
+ "mahajani",
+ "insinhalaarchaicnumbers",
+ "taitham",
+ "thaana",
+ "ethi",
+ "inenclosedalphanumericsupplement",
+ "meroiticcursive",
+ "inideographicdescriptioncharacters",
+ "terminalpunctuation",
+ "inemoticons",
+ "intifinagh",
+ "asciihexdigit",
+ "tifinagh",
+ "inearlydynasticcuneiform",
+ "inopticalcharacterrecognition",
+ "loe",
+ "titlecaseletter",
+ "inscriptionalparthian",
+ "oriya",
+ "hira",
+ "sora",
+ "mero",
+ "inarrows",
+ "inhiragana",
+ "no",
+ "inmahjongtiles",
+ "innko",
+ "co",
+ "cher",
+ "inmro",
+ "common",
+ "cwcm",
+ "inmiao",
+ "inscriptionalpahlavi",
+ "inmathematicalalphanumericsymbols",
+ "so",
+ "hano",
+ "tirh",
+ "inhatran",
+ "inolchiki",
+ "ahom",
+ "di",
+ "hatr",
+ "inogham",
+ "intirhuta",
+ "inmodi",
+ "idc",
+ "mand",
+ "inmandaic",
+ "dia",
+ "cwcf",
+ "xidc",
+ "sind",
+ "newline",
+ "mend",
+ "newtailue",
+ "inshorthandformatcontrols",
+ "anatolianhieroglyphs",
+ "xids",
+ "ids",
+ "innewtailue",
+ "insylotinagri",
+ "insundanese",
+ "lo",
+ "indominotiles",
+ "inlao",
+ "lao",
+ "laoo",
+ "mongolian",
+ "cwt",
+ "idst",
+ "format",
+ "lineseparator",
+ "letter",
+ "idcontinue",
+ "inanatolianhieroglyphs",
+ "inlydian",
+ "pi",
+ "nchar",
+ "inspacingmodifierletters",
+ "oalpha",
+ "indeseret",
+ "pc",
+ "xdigit",
+ "inphaistosdisc",
+ "joincontrol",
+ "inlowsurrogates",
+ "mro",
+ "mroo",
+ "xidstart",
+ "wara",
+ "inwarangciti",
+ "ps",
+ "pe",
+ "cwl",
+ "incoptic",
+ "diacritic",
+ "pf",
+ "space",
+ "hanunoo",
+ "incyrillicextendeda",
+ "odi",
+ "modi",
+ "oidc",
+ "incopticepactnumbers",
+ "palm",
+ "insundanesesupplement",
+ "patws",
+ "inolditalic",
+ "inlepcha",
+ "shaw",
+ "omath",
+ "alpha",
+ "oids",
+ "control",
+ "ideo",
+ "lepc",
+ "psalterpahlavi",
+ "dsrt",
+ "otheridcontinue",
+ "inpalmyrene",
+ "decimalnumber",
+ "noncharactercodepoint",
+ "idstart",
+ "otheralphabetic",
+ "letternumber",
+ "dash",
+ "xidcontinue",
+ "finalpunctuation",
+ "extender",
+ "siddham",
+ "inoldturkic",
+ "sharada",
+ "whitespace",
+ "inmodifiertoneletters",
+ "radical",
+ "canadianaboriginal",
+ "inethiopicextendeda",
+ "imperialaramaic",
+ "perm",
+ "deseret",
+ "casedletter",
+ "inimperialaramaic",
+ "otheridstart",
+ "prti",
+ "cprt",
+ "othersymbol",
+ "coptic",
+ "otherlowercase",
+ "phnx",
+ "inphoenician",
+ "incaucasianalbanian",
+ "inlatin1supplement",
+ "xpeo",
+ "ininscriptionalparthian",
+ "ininscriptionalpahlavi",
+ "other",
+ "privateuse",
+ "othernumber",
+ "inenclosedideographicsupplement",
+ "copt",
+ "print",
+ "cuneiform",
+ "olditalic",
+ "xsux",
+ "inmongolian",
+ "inancientgreekmusicalnotation",
+ "sundanese",
+ "inoldnortharabian",
+ "patternsyntax",
+ "inherited",
+ "ingrantha",
+ "inphoneticextensions",
+ "saurashtra",
+ "inancientgreeknumbers",
+ "shrd",
+ "inoldsoutharabian",
+ "innabataean",
+ "inalphabeticpresentationforms",
+ "spaceseparator",
+ "olower",
+ "ingeneralpunctuation",
+ "inunifiedcanadianaboriginalsyllabics",
+ "bamum",
+ "inarabic",
+ "phli",
+ "inphoneticextensionssupplement",
+ "patternwhitespace",
+ "inbasiclatin",
+ "othermath",
+ "idsbinaryoperator",
+ "inmathematicaloperators",
+ "multani",
+ "ingujarati",
+ "inelbasan",
+ "inoldhungarian",
+ "innumberforms",
+ "nd",
+ "yi",
+ "lisu",
+ "yiii",
+ "inpsalterpahlavi",
+ "tagbanwa",
+ "bass",
+ "nbat",
+ "inbyzantinemusicalsymbols",
+ "closepunctuation",
+ "tfng",
+ "otherletter",
+ "sd",
+ "lowercase",
+ "sidd",
+ "nabataean",
+ "lepcha",
+ "inarabicpresentationformsa",
+ "modifierletter",
+ "intags",
+ "mult",
+ "insiddham",
+ "talu",
+ "cased",
+ "intibetan",
+ "separator",
+ "runic",
+ "inmiscellaneousmathematicalsymbolsb",
+ "linb",
+ "inbraillepatterns",
+ "oldpersian",
+ "inugaritic",
+ "telu",
+ "limb",
+ "oldpermic",
+ "bali",
+ "inmyanmarextendedb",
+ "tibt",
+ "saur",
+ "po",
+ "tibetan",
+ "insaurashtra",
+ "inbalinese",
+ "elba",
+ "bengali",
+ "gran",
+ "phoenician",
+ "ingurmukhi",
+ "caseignorable",
+ "lyci",
+ "inyijinghexagramsymbols",
+ "mlym",
+ "lycian",
+ "elbasan",
+ "balinese",
+ "narb",
+ "brai",
+ "insuttonsignwriting",
+ "insorasompeng",
+ "malayalam",
+ "arab",
+ "brahmi",
+ "incountingrodnumerals",
+ "rjng",
+ "mong",
+ "incyrillicsupplement",
+ "ogam",
+ "sarb",
+ "lower",
+ "inrejang",
+ "hmng",
+ "tirhuta",
+ "hang",
+ "wspace",
+ "inlatinextendedd",
+ "invai",
+ "incherokeesupplement",
+ "mymr",
+ "vai",
+ "vaii",
+ "ethiopic",
+ "sylotinagri",
+ "myanmar",
+ "syrc",
+ "inbrahmi",
+ "mathsymbol",
+ "runr",
+ "inshavian",
+ "gothic",
+ "syriac",
+ "p",
+ "zp",
+ "induployan",
+ "vs",
+ "ingreekandcoptic",
+ "ingothic",
+ "lowercaseletter",
+ "inoriya",
+ "grext",
+ "linearb",
+ "inyiradicals",
+ "inethiopicsupplement",
+ "inletterlikesymbols",
+ "ingeometricshapes",
+ "java",
+ "inblockelements",
+ "number",
+ "incombininghalfmarks",
+ "inbassavah",
+ "inlinearbsyllabary",
+ "osmanya",
+ "avst",
+ "hexdigit",
+ "injavanese",
+ "cyrl",
+ "avestan",
+ "intaiviet",
+ "inornamentaldingbats",
+ "tavt",
+ "javanese",
+ "inethiopicextended",
+ "inhalfwidthandfullwidthforms",
+ "ingeorgian",
+ "inarabicmathematicalalphabeticsymbols",
+ "hangul",
+ "insuperscriptsandsubscripts",
+ "inhanunoo",
+ "inhangulsyllables",
+ "inoldpersian",
+ "geor",
+ "otherpunctuation",
+ "inoldpermic",
+ "inalchemicalsymbols",
+ "sylo",
+ "hiragana",
+ "word",
+ "inmeroitichieroglyphs",
+ "insmallformvariants",
+ "sund",
+ "brah",
+ "insupplementalmathematicaloperators",
+ "glagolitic",
+ "braille",
+ "unassigned",
+ "sgnw",
+ "plrd",
+ "hebr",
+ "ogham",
+ "cyrillic",
+ "orya",
+ "grantha",
+ "invariationselectors",
+ "indingbats",
+ "inunifiedcanadianaboriginalsyllabicsextended",
+ "inhanguljamoextendeda",
+ "goth",
+ "graphemebase",
+ "bidic",
+ "ogrext",
+ "idsb",
+ "invariationselectorssupplement",
+ "assigned",
+ "symbol",
+ "ingreekextended",
+ "pauc",
+ "meroitichieroglyphs",
+ "logicalorderexception",
+ "incurrencysymbols",
+ "inarabicextendeda",
+ "insupplementalarrowsc",
+ "insupplementalarrowsa",
+ "inkannada",
+ "kana",
+ "phagspa",
+ "cakm",
+ "digit",
+ "softdotted",
+ "inchakma",
+ "inphagspa",
+ "inhighprivateusesurrogates",
+ "warangciti",
+ "incjkcompatibilityforms",
+ "idstrinaryoperator",
+ "incjkcompatibilityideographs",
+ "inkaithi",
+ "takri",
+ "phlp",
+ "mendekikakui",
+ "punct",
+ "otherdefaultignorablecodepoint",
+ "inkatakana",
+ "graph",
+ "lydi",
+ "pd",
+ "incjkstrokes",
+ "lydian",
+ "sorasompeng",
+ "incjkcompatibilityideographssupplement",
+ "meeteimayek",
+ "otheruppercase",
+ "kali",
+ "inhanguljamo",
+ "ideographic",
+ "inmeeteimayek",
+ "incyrillicextendedb",
+ "hluw",
+ "patsyn",
+ "incombiningdiacriticalmarks",
+ "inarabicsupplement",
+ "inkanasupplement",
+ "deprecated",
+ "inverticalforms",
+ "incombiningdiacriticalmarksforsymbols",
+ "indevanagari",
+ "inbuhid",
+ "alphabetic",
+ "oldhungarian",
+ "mark",
+ "inkharoshthi",
+ "deva",
+ "invedicextensions",
+ "devanagari",
+ "incombiningdiacriticalmarkssupplement",
+ "ingeometricshapesextended",
+ "inkhmer",
+ "changeswhencasemapped",
+ "intakri",
+ "dep",
+ "takr",
+ "changeswhencasefolded",
+ "kaithi",
+ "phag",
+ "inpahawhhmong",
+ "bidicontrol",
+ "inkhojki",
+ "bamu",
+ "inbamum",
+ "changeswhentitlecased",
+ "inkhmersymbols",
+ "uideo",
+ "lu",
+ "kthi",
+ "limbu",
+ "defaultignorablecodepoint",
+ "inplayingcards",
+ "inhebrew",
+ "modifiersymbol",
+ "ugaritic",
+ "inlisu",
+ "inglagolitic",
+ "inprivateusearea",
+ "olck",
+ "inbengali",
+ "olchiki",
+ "caucasianalbanian",
+ "oldturkic",
+ "beng",
+ "intelugu",
+ "hyphen",
+ "inbuginese",
+ "intagalog",
+ "cypriot",
+ "inlimbu",
+ "graphemeextend",
+ "tagb",
+ "incypriotsyllabary",
+ "intagbanwa",
+ "inaegeannumbers",
+ "inkatakanaphoneticextensions",
+ "glag",
+ "combiningmark",
+ "palmyrene",
+ "khmr",
+ "khar",
+ "ugar",
+ "inarabicpresentationformsb",
+ "insupplementaryprivateuseareaa",
+ "variationselector",
+ "nko",
+ "nkoo",
+ "inbamumsupplement",
+ "tglg",
+ "any",
+ "enclosingmark",
+ "gujr",
+ "changeswhenlowercased",
+ "knda",
+ "hung",
+ "gujarati",
+ "bopo",
+ "inmendekikakui",
+ "inbopomofo",
+ "kharoshthi",
+ "kannada",
+ "khoj",
+ "cherokee",
+ "inlatinextendedb",
+ "dashpunctuation",
+ "dupl",
+ "inyisyllables",
+ "georgian",
+ "rejang",
+ "oupper",
+ "aghb",
+ "khmer",
+ "grbase",
+ "currencysymbol",
+ "incombiningdiacriticalmarksextended",
+ "spacingmark",
+ "orkh",
+ "cwu",
+ "hebrew",
+ "insupplementalpunctuation",
+ "oldnortharabian",
+ "incjksymbolsandpunctuation",
+ "othergraphemeextend",
+ "indevanagariextended",
+ "tagalog",
+ "surrogate",
+ "bopomofo",
+ "ingeorgiansupplement",
+ "uppercase",
+ "unifiedideograph",
+ "inpaucinhau",
+ "paucinhau",
+ "insupplementalsymbolsandpictographs",
+ "nonspacingmark",
+ "inhanguljamoextendedb",
+ "inhighsurrogates",
+ "punctuation",
+ "openpunctuation",
+ "bassavah",
+ "upper",
+ "insupplementalarrowsb",
+ "inkanbun",
+ "inkangxiradicals",
+ "inmeroiticcursive",
+ "signwriting",
+ "incjkradicalssupplement",
+ "pahawhhmong",
+ "inkayahli",
+ "uppercaseletter",
+ "batk",
+ "inbatak",
+ "incjkcompatibility",
+ "buhd",
+ "egyp",
+ "innoblock",
+ "inegyptianhieroglyphs",
+ "grek",
+ "bugi",
+ "changeswhenuppercased",
+ "paragraphseparator",
+ "buginese",
+ "guru",
+ "inbopomofoextended",
+ "telugu",
+ "quotationmark",
+ "inkhudawadi",
+ "kayahli",
+ "oldsoutharabian",
+ "insupplementaryprivateuseareab",
+ "inhangulcompatibilityjamo",
+ "zyyy",
+ "qmark",
+ "buhid",
+ "sk",
+ "unknown",
+ "khudawadi",
+ "katakana",
+ "incjkunifiedideographsextensionc",
+ "incjkunifiedideographsextensiona",
+ "incjkunifiedideographs",
+ "incjkunifiedideographsextensione",
+ "duployan",
+ "egyptianhieroglyphs",
+ "inboxdrawing",
+ "khojki",
+ "incjkunifiedideographsextensiond",
+ "batak",
+ "incjkunifiedideographsextensionb",
+ "blank",
+ "greek",
+ "grlink",
+ "gurmukhi",
+ "graphemelink"
+ };
+#define unicode_prop_name_pool ((const char *) &unicode_prop_name_pool_contents)
+#ifdef __GNUC__
+__inline
+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
+#endif
+const struct PoolPropertyNameCtype *
unicode_lookup_property_name (register const char *str, register unsigned int len)
{
- static const struct PropertyNameCtype wordlist[] =
+ static const struct PoolPropertyNameCtype wordlist[] =
{
- {""},
+ {-1},
- {"n", 34},
- {""},
+ {pool_offset(1), 144},
+ {-1},
- {"z", 51},
- {""}, {""}, {""}, {""},
+ {pool_offset(3), 234},
+ {-1}, {-1}, {-1}, {-1},
- {"zzzz", 237},
+ {pool_offset(8), 225},
- {"mn", 33},
+ {pool_offset(9), 138},
- {"cn", 20},
- {""}, {""}, {""},
+ {pool_offset(10), 51},
+ {-1}, {-1}, {-1},
- {"ci", 60},
+ {pool_offset(14), 38},
- {"m", 30},
- {""},
+ {pool_offset(15), 125},
+ {-1},
- {"c", 17},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(17), 35},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmanichaean", 430},
+ {pool_offset(23), 430},
- {"mani", 185},
+ {pool_offset(24), 129},
- {"mc", 31},
+ {pool_offset(25), 131},
- {"cc", 18},
- {""},
+ {pool_offset(26), 41},
+ {-1},
- {"qaai", 114},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(28), 94},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"qaac", 128},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(34), 54},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"incham", 373},
- {""}, {""}, {""}, {""},
+ {pool_offset(41), 373},
+ {-1}, {-1}, {-1}, {-1},
- {"mandaic", 168},
- {""}, {""},
+ {pool_offset(46), 128},
+ {-1}, {-1},
- {"sm", 49},
- {""},
+ {pool_offset(49), 202},
+ {-1},
- {"sc", 47},
- {""}, {""}, {""}, {""},
+ {pool_offset(51), 195},
+ {-1}, {-1}, {-1}, {-1},
- {"cans", 101},
- {""}, {""}, {""}, {""},
+ {pool_offset(56), 36},
+ {-1}, {-1}, {-1}, {-1},
- {"ascii", 14},
- {""}, {""},
+ {pool_offset(61), 14},
+ {-1}, {-1},
- {"insamaritan", 255},
- {""},
+ {pool_offset(64), 255},
+ {-1},
- {"incuneiform", 456},
+ {pool_offset(66), 456},
- {"s", 46},
+ {pool_offset(67), 191},
- {"inarmenian", 248},
+ {pool_offset(68), 248},
- {"zs", 54},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(69), 237},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"cs", 22},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(76), 55},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"me", 32},
- {""}, {""}, {""}, {""},
+ {pool_offset(85), 132},
+ {-1}, {-1}, {-1}, {-1},
- {"incommonindicnumberforms", 364},
- {""}, {""},
+ {pool_offset(90), 364},
+ {-1}, {-1},
- {"inavestan", 431},
+ {pool_offset(93), 431},
- {"inthai", 268},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(94), 268},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inipaextensions", 242},
- {""}, {""}, {""}, {""},
+ {pool_offset(103), 242},
+ {-1}, {-1}, {-1}, {-1},
- {"initialpunctuation", 43},
- {""}, {""}, {""},
+ {pool_offset(108), 183},
+ {-1}, {-1}, {-1},
- {"inancientsymbols", 402},
- {""},
+ {pool_offset(112), 402},
+ {-1},
- {"inthaana", 253},
- {""},
+ {pool_offset(114), 253},
+ {-1},
- {"cf", 19},
- {""},
+ {pool_offset(116), 42},
+ {-1},
- {"incuneiformnumbersandpunctuation", 457},
- {""}, {""}, {""},
+ {pool_offset(118), 457},
+ {-1}, {-1}, {-1},
- {"mtei", 159},
- {""},
+ {pool_offset(122), 133},
+ {-1},
- {"inspecials", 397},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(124), 397},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmusicalsymbols", 470},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(133), 470},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmiscellaneousmathematicalsymbolsa", 323},
- {""}, {""}, {""},
+ {pool_offset(141), 323},
+ {-1}, {-1}, {-1},
- {"lm", 26},
+ {pool_offset(145), 117},
- {"lina", 183},
+ {pool_offset(146), 113},
- {"lc", 24},
- {""},
+ {pool_offset(147), 108},
+ {-1},
- {"inlycian", 404},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(149), 404},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"lana", 151},
- {""},
+ {pool_offset(155), 212},
+ {-1},
- {"intaixuanjingsymbols", 472},
+ {pool_offset(157), 472},
- {"inmyanmarextendeda", 374},
+ {pool_offset(158), 374},
- {"alnum", 13},
- {""},
+ {pool_offset(159), 13},
+ {-1},
- {"sterm", 233},
+ {pool_offset(161), 192},
- {"intaitham", 292},
+ {pool_offset(162), 292},
- {"intransportandmapsymbols", 486},
- {""},
+ {pool_offset(163), 486},
+ {-1},
- {"taile", 120},
- {""},
+ {pool_offset(165), 211},
+ {-1},
- {"inmalayalam", 266},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(167), 266},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmiscellaneoussymbols", 321},
+ {pool_offset(176), 321},
- {"incontrolpictures", 315},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(177), 315},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmiscellaneoussymbolsandarrows", 329},
- {""}, {""}, {""},
+ {pool_offset(185), 329},
+ {-1}, {-1}, {-1},
- {"inlineara", 417},
+ {pool_offset(189), 417},
- {"inmiscellaneoussymbolsandpictographs", 483},
- {""}, {""},
+ {pool_offset(190), 483},
+ {-1}, {-1},
- {"sinhala", 92},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(193), 200},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"taiviet", 152},
- {""}, {""},
+ {pool_offset(202), 213},
+ {-1}, {-1},
- {"ext", 218},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(205), 69},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"latn", 75},
+ {pool_offset(215), 110},
- {"latin", 75},
+ {pool_offset(216), 110},
- {"ital", 111},
+ {pool_offset(217), 155},
- {"intamil", 263},
- {""},
+ {pool_offset(218), 263},
+ {-1},
- {"inmultani", 446},
- {""},
+ {pool_offset(220), 446},
+ {-1},
- {"taml", 88},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(222), 215},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inrunic", 279},
+ {pool_offset(229), 279},
- {"incarian", 405},
- {""},
+ {pool_offset(230), 405},
+ {-1},
- {"armn", 78},
- {""},
+ {pool_offset(232), 21},
+ {-1},
- {"armi", 160},
+ {pool_offset(234), 93},
- {"cari", 148},
+ {pool_offset(235), 37},
- {"inlatinextendedc", 331},
- {""},
+ {pool_offset(236), 331},
+ {-1},
- {"armenian", 78},
+ {pool_offset(238), 21},
- {"inmyanmar", 271},
+ {pool_offset(239), 271},
- {"incyrillic", 246},
- {""},
+ {pool_offset(240), 246},
+ {-1},
- {"inlatinextendeda", 240},
- {""}, {""}, {""},
+ {pool_offset(242), 240},
+ {-1}, {-1}, {-1},
- {"carian", 148},
- {""}, {""},
+ {pool_offset(246), 37},
+ {-1}, {-1},
- {"intaile", 288},
- {""}, {""}, {""},
+ {pool_offset(249), 288},
+ {-1}, {-1}, {-1},
- {"tale", 120},
- {""}, {""},
+ {pool_offset(253), 211},
+ {-1}, {-1},
- {"arabic", 80},
- {""}, {""},
+ {pool_offset(256), 20},
+ {-1}, {-1},
- {"l", 23},
+ {pool_offset(259), 107},
- {"nl", 36},
+ {pool_offset(260), 149},
- {"zl", 52},
- {""},
+ {pool_offset(261), 235},
+ {-1},
- {"insyriac", 251},
- {""},
+ {pool_offset(263), 251},
+ {-1},
- {"samr", 155},
- {""},
+ {pool_offset(265), 193},
+ {-1},
- {"merc", 170},
- {""},
+ {pool_offset(267), 135},
+ {-1},
- {"inlinearbideograms", 399},
- {""}, {""},
+ {pool_offset(269), 399},
+ {-1}, {-1},
- {"samaritan", 155},
+ {pool_offset(272), 193},
- {"lt", 28},
- {""}, {""},
+ {pool_offset(273), 121},
+ {-1}, {-1},
- {"insharada", 443},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(276), 443},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmeeteimayekextensions", 376},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(283), 376},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inruminumeralsymbols", 437},
- {""}, {""},
+ {pool_offset(292), 437},
+ {-1}, {-1},
- {"miao", 172},
+ {pool_offset(295), 137},
- {"inlatinextendede", 378},
- {""}, {""}, {""},
+ {pool_offset(296), 378},
+ {-1}, {-1}, {-1},
- {"zinh", 114},
- {""}, {""}, {""},
+ {pool_offset(300), 94},
+ {-1}, {-1}, {-1},
- {"inahom", 453},
- {""},
+ {pool_offset(304), 453},
+ {-1},
- {"incherokee", 276},
+ {pool_offset(306), 276},
- {"han", 109},
- {""}, {""},
+ {pool_offset(307), 80},
+ {-1}, {-1},
- {"hani", 109},
+ {pool_offset(310), 80},
- {"inosmanya", 414},
+ {pool_offset(311), 414},
- {"inmiscellaneoustechnical", 314},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(312), 314},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
- {"cham", 150},
- {""},
+ {pool_offset(323), 44},
+ {-1},
- {"inmahajani", 442},
+ {pool_offset(325), 442},
- {"osma", 124},
- {""}, {""},
+ {pool_offset(326), 162},
+ {-1}, {-1},
- {"manichaean", 185},
+ {pool_offset(329), 129},
- {"term", 211},
- {""},
+ {pool_offset(330), 217},
+ {-1},
- {"sinh", 92},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(332), 200},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"cntrl", 3},
- {""}, {""}, {""}, {""},
+ {pool_offset(342), 3},
+ {-1}, {-1}, {-1}, {-1},
- {"chakma", 169},
+ {pool_offset(347), 43},
- {"insinhala", 267},
- {""}, {""}, {""},
+ {pool_offset(348), 267},
+ {-1}, {-1}, {-1},
- {"tamil", 88},
+ {pool_offset(352), 215},
- {"inethiopic", 274},
- {""}, {""},
+ {pool_offset(353), 274},
+ {-1}, {-1},
- {"connectorpunctuation", 39},
+ {pool_offset(356), 177},
- {"shavian", 123},
- {""}, {""}, {""},
+ {pool_offset(357), 197},
+ {-1}, {-1}, {-1},
- {"joinc", 207},
+ {pool_offset(361), 98},
- {"inenclosedalphanumerics", 317},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(362), 317},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"ahex", 214},
+ {pool_offset(368), 15},
- {"inlatinextendedadditional", 304},
+ {pool_offset(369), 304},
- {"lineara", 183},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(370), 113},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inenclosedcjklettersandmonths", 350},
+ {pool_offset(377), 350},
- {"hex", 213},
- {""}, {""},
+ {pool_offset(378), 85},
+ {-1}, {-1},
- {"thai", 93},
+ {pool_offset(381), 219},
- {"mahj", 184},
- {""}, {""}, {""},
+ {pool_offset(382), 126},
+ {-1}, {-1}, {-1},
- {"math", 55},
- {""}, {""},
+ {pool_offset(386), 130},
+ {-1}, {-1},
- {"ll", 25},
+ {pool_offset(389), 116},
- {"thaa", 82},
- {""},
+ {pool_offset(390), 218},
+ {-1},
- {"hatran", 201},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(392), 83},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"mahajani", 184},
+ {pool_offset(399), 126},
- {"insinhalaarchaicnumbers", 444},
- {""},
+ {pool_offset(400), 444},
+ {-1},
- {"taitham", 151},
+ {pool_offset(402), 212},
- {"thaana", 82},
- {""}, {""}, {""}, {""},
+ {pool_offset(403), 218},
+ {-1}, {-1}, {-1}, {-1},
- {"ethi", 99},
+ {pool_offset(408), 68},
- {"inenclosedalphanumericsupplement", 481},
- {""}, {""}, {""}, {""},
+ {pool_offset(409), 481},
+ {-1}, {-1}, {-1}, {-1},
- {"meroiticcursive", 170},
+ {pool_offset(414), 135},
- {"inideographicdescriptioncharacters", 340},
- {""}, {""}, {""},
+ {pool_offset(415), 340},
+ {-1}, {-1}, {-1},
- {"terminalpunctuation", 211},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(419), 217},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inemoticons", 484},
- {""}, {""}, {""}, {""},
+ {pool_offset(426), 484},
+ {-1}, {-1}, {-1}, {-1},
- {"intifinagh", 334},
- {""},
+ {pool_offset(431), 334},
+ {-1},
- {"asciihexdigit", 214},
- {""}, {""}, {""}, {""},
+ {pool_offset(433), 15},
+ {-1}, {-1}, {-1}, {-1},
- {"tifinagh", 131},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(438), 221},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"inearlydynasticcuneiform", 458},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(451), 458},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"inopticalcharacterrecognition", 316},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(457), 316},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"loe", 230},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(479), 119},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"titlecaseletter", 28},
- {""}, {""},
+ {pool_offset(486), 121},
+ {-1}, {-1},
- {"inscriptionalparthian", 162},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
+ {pool_offset(489), 96},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
- {"oriya", 87},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(510), 161},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"hira", 106},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(520), 86},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"sora", 174},
+ {pool_offset(529), 205},
- {"mero", 171},
- {""}, {""}, {""}, {""},
+ {pool_offset(530), 136},
+ {-1}, {-1}, {-1}, {-1},
- {"inarrows", 312},
- {""},
+ {pool_offset(535), 312},
+ {-1},
- {"inhiragana", 342},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(537), 342},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"no", 37},
+ {pool_offset(544), 150},
- {"inmahjongtiles", 478},
- {""}, {""}, {""},
+ {pool_offset(545), 478},
+ {-1}, {-1}, {-1},
- {"innko", 254},
- {""}, {""},
+ {pool_offset(549), 254},
+ {-1}, {-1},
- {"co", 21},
+ {pool_offset(552), 52},
- {"cher", 100},
- {""}, {""},
+ {pool_offset(553), 50},
+ {-1}, {-1},
- {"inmro", 462},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(556), 462},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"common", 74},
+ {pool_offset(563), 53},
- {"cwcm", 65},
- {""}, {""}, {""},
+ {pool_offset(564), 46},
+ {-1}, {-1}, {-1},
- {"inmiao", 465},
- {""}, {""}, {""}, {""},
+ {pool_offset(568), 465},
+ {-1}, {-1}, {-1}, {-1},
- {"inscriptionalpahlavi", 163},
- {""}, {""},
+ {pool_offset(573), 95},
+ {-1}, {-1},
- {"inmathematicalalphanumericsymbols", 474},
+ {pool_offset(576), 474},
- {"so", 50},
- {""},
+ {pool_offset(577), 203},
+ {-1},
- {"hano", 116},
+ {pool_offset(579), 82},
- {"tirh", 197},
- {""}, {""}, {""},
+ {pool_offset(580), 222},
+ {-1}, {-1}, {-1},
- {"inhatran", 422},
+ {pool_offset(584), 422},
- {"inolchiki", 298},
+ {pool_offset(585), 298},
- {"ahom", 199},
- {""},
+ {pool_offset(586), 16},
+ {-1},
- {"di", 70},
+ {pool_offset(588), 60},
- {"hatr", 201},
- {""},
+ {pool_offset(589), 83},
+ {-1},
- {"inogham", 278},
- {""}, {""}, {""}, {""},
+ {pool_offset(591), 278},
+ {-1}, {-1}, {-1}, {-1},
- {"intirhuta", 449},
- {""}, {""}, {""}, {""},
+ {pool_offset(596), 449},
+ {-1}, {-1}, {-1}, {-1},
- {"inmodi", 451},
- {""},
+ {pool_offset(601), 451},
+ {-1},
- {"idc", 67},
+ {pool_offset(603), 90},
- {"mand", 168},
- {""}, {""}, {""},
+ {pool_offset(604), 128},
+ {-1}, {-1}, {-1},
- {"inmandaic", 256},
+ {pool_offset(608), 256},
- {"dia", 217},
+ {pool_offset(609), 64},
- {"cwcf", 64},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(610), 45},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"xidc", 69},
- {""}, {""},
+ {pool_offset(618), 231},
+ {-1}, {-1},
- {"sind", 196},
+ {pool_offset(621), 106},
- {"newline", 0},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(622), 0},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"mend", 186},
- {""}, {""}, {""},
+ {pool_offset(631), 134},
+ {-1}, {-1}, {-1},
- {"newtailue", 129},
- {""}, {""},
+ {pool_offset(635), 147},
+ {-1}, {-1},
- {"inshorthandformatcontrols", 468},
- {""}, {""}, {""},
+ {pool_offset(638), 468},
+ {-1}, {-1}, {-1},
- {"anatolianhieroglyphs", 200},
+ {pool_offset(642), 18},
- {"xids", 68},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(643), 232},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"ids", 66},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(653), 91},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"innewtailue", 289},
+ {pool_offset(659), 289},
- {"insylotinagri", 363},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(660), 363},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"insundanese", 295},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(666), 295},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"lo", 27},
- {""}, {""}, {""},
+ {pool_offset(673), 118},
+ {-1}, {-1}, {-1},
- {"indominotiles", 479},
+ {pool_offset(677), 479},
- {"inlao", 269},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(678), 269},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"lao", 94},
+ {pool_offset(685), 109},
- {"laoo", 94},
+ {pool_offset(686), 109},
- {"mongolian", 105},
- {""}, {""},
+ {pool_offset(687), 140},
+ {-1}, {-1},
- {"cwt", 63},
- {""},
+ {pool_offset(690), 48},
+ {-1},
- {"idst", 224},
+ {pool_offset(692), 89},
- {"format", 19},
- {""}, {""},
+ {pool_offset(693), 42},
+ {-1}, {-1},
- {"lineseparator", 52},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(696), 235},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"letter", 23},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(702), 107},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"idcontinue", 67},
- {""}, {""},
+ {pool_offset(711), 90},
+ {-1}, {-1},
- {"inanatolianhieroglyphs", 460},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(714), 460},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inlydian", 424},
- {""},
+ {pool_offset(723), 424},
+ {-1},
- {"pi", 43},
+ {pool_offset(725), 183},
- {"nchar", 221},
- {""}, {""}, {""}, {""},
+ {pool_offset(726), 151},
+ {-1}, {-1}, {-1}, {-1},
- {"inspacingmodifierletters", 243},
+ {pool_offset(731), 243},
- {"oalpha", 215},
- {""}, {""},
+ {pool_offset(732), 163},
+ {-1}, {-1},
- {"indeseret", 412},
- {""},
+ {pool_offset(735), 412},
+ {-1},
- {"pc", 39},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(737), 177},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"xdigit", 11},
- {""},
+ {pool_offset(756), 11},
+ {-1},
- {"inphaistosdisc", 403},
+ {pool_offset(758), 403},
- {"joincontrol", 207},
+ {pool_offset(759), 98},
- {"inlowsurrogates", 385},
- {""},
+ {pool_offset(760), 385},
+ {-1},
- {"mro", 188},
+ {pool_offset(762), 141},
- {"mroo", 188},
- {""}, {""}, {""},
+ {pool_offset(763), 141},
+ {-1}, {-1}, {-1},
- {"xidstart", 68},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(767), 232},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"wara", 198},
- {""}, {""},
+ {pool_offset(773), 229},
+ {-1}, {-1},
- {"inwarangciti", 454},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(776), 454},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
- {"ps", 45},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(787), 185},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"pe", 41},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(797), 179},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"cwl", 61},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(806), 47},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"incoptic", 332},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(816), 332},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"diacritic", 217},
- {""}, {""},
+ {pool_offset(824), 64},
+ {-1}, {-1},
- {"pf", 42},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(827), 180},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"space", 9},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(844), 9},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"hanunoo", 116},
- {""}, {""},
+ {pool_offset(853), 82},
+ {-1}, {-1},
- {"incyrillicextendeda", 336},
- {""}, {""}, {""},
+ {pool_offset(856), 336},
+ {-1}, {-1}, {-1},
- {"odi", 227},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(860), 164},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"modi", 187},
+ {pool_offset(866), 139},
- {"oidc", 232},
+ {pool_offset(867), 166},
- {"incopticepactnumbers", 406},
- {""},
+ {pool_offset(868), 406},
+ {-1},
- {"palm", 191},
+ {pool_offset(870), 173},
- {"insundanesesupplement", 299},
+ {pool_offset(871), 299},
- {"patws", 235},
- {""}, {""}, {""},
+ {pool_offset(872), 175},
+ {-1}, {-1}, {-1},
- {"inolditalic", 407},
+ {pool_offset(876), 407},
- {"inlepcha", 297},
+ {pool_offset(877), 297},
- {"shaw", 123},
- {""},
+ {pool_offset(878), 197},
+ {-1},
- {"omath", 212},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(880), 169},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"alpha", 1},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(886), 1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"oids", 231},
- {""}, {""}, {""},
+ {pool_offset(892), 167},
+ {-1}, {-1}, {-1},
- {"control", 18},
+ {pool_offset(896), 41},
- {"ideo", 216},
+ {pool_offset(897), 92},
- {"lepc", 141},
+ {pool_offset(898), 111},
- {"psalterpahlavi", 194},
+ {pool_offset(899), 186},
- {"dsrt", 113},
- {""},
+ {pool_offset(900), 62},
+ {-1},
- {"otheridcontinue", 232},
- {""}, {""}, {""},
+ {pool_offset(902), 166},
+ {-1}, {-1}, {-1},
- {"inpalmyrene", 420},
+ {pool_offset(906), 420},
- {"decimalnumber", 35},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(907), 146},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"noncharactercodepoint", 221},
+ {pool_offset(915), 151},
- {"idstart", 66},
+ {pool_offset(916), 91},
- {"otheralphabetic", 215},
+ {pool_offset(917), 163},
- {"letternumber", 36},
- {""}, {""}, {""}, {""},
+ {pool_offset(918), 149},
+ {-1}, {-1}, {-1}, {-1},
- {"dash", 208},
- {""}, {""},
+ {pool_offset(923), 59},
+ {-1}, {-1},
- {"xidcontinue", 69},
- {""}, {""}, {""},
+ {pool_offset(926), 231},
+ {-1}, {-1}, {-1},
- {"finalpunctuation", 42},
+ {pool_offset(930), 180},
- {"extender", 218},
- {""}, {""}, {""},
+ {pool_offset(931), 69},
+ {-1}, {-1}, {-1},
- {"siddham", 195},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(935), 198},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inoldturkic", 435},
- {""}, {""},
+ {pool_offset(945), 435},
+ {-1}, {-1},
- {"sharada", 173},
- {""}, {""},
+ {pool_offset(948), 196},
+ {-1}, {-1},
- {"whitespace", 205},
- {""}, {""}, {""}, {""},
+ {pool_offset(951), 230},
+ {-1}, {-1}, {-1}, {-1},
- {"inmodifiertoneletters", 361},
- {""},
+ {pool_offset(956), 361},
+ {-1},
- {"radical", 225},
- {""},
+ {pool_offset(958), 188},
+ {-1},
- {"canadianaboriginal", 101},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(960), 36},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inethiopicextendeda", 377},
+ {pool_offset(969), 377},
- {"imperialaramaic", 160},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(970), 93},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"perm", 193},
+ {pool_offset(978), 157},
- {"deseret", 113},
- {""}, {""}, {""}, {""},
+ {pool_offset(979), 62},
+ {-1}, {-1}, {-1}, {-1},
- {"casedletter", 24},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
+ {pool_offset(984), 108},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1},
- {"inimperialaramaic", 419},
- {""}, {""},
+ {pool_offset(998), 419},
+ {-1}, {-1},
- {"otheridstart", 231},
- {""}, {""}, {""}, {""},
+ {pool_offset(1001), 167},
+ {-1}, {-1}, {-1}, {-1},
- {"prti", 162},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1006), 96},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"cprt", 125},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1012), 57},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"othersymbol", 50},
- {""}, {""}, {""},
+ {pool_offset(1018), 203},
+ {-1}, {-1}, {-1},
- {"coptic", 128},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1022), 54},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"otherlowercase", 219},
+ {pool_offset(1037), 168},
- {"phnx", 137},
- {""}, {""}, {""},
+ {pool_offset(1038), 182},
+ {-1}, {-1}, {-1},
- {"inphoenician", 423},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1042), 423},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"incaucasianalbanian", 416},
+ {pool_offset(1049), 416},
- {"inlatin1supplement", 239},
- {""}, {""}, {""},
+ {pool_offset(1050), 239},
+ {-1}, {-1}, {-1},
- {"xpeo", 133},
- {""}, {""}, {""},
+ {pool_offset(1054), 158},
+ {-1}, {-1}, {-1},
- {"ininscriptionalparthian", 432},
+ {pool_offset(1058), 432},
- {"ininscriptionalpahlavi", 433},
+ {pool_offset(1059), 433},
- {"other", 17},
+ {pool_offset(1060), 35},
- {"privateuse", 21},
- {""}, {""}, {""}, {""},
+ {pool_offset(1061), 52},
+ {-1}, {-1}, {-1}, {-1},
- {"othernumber", 37},
- {""}, {""}, {""}, {""},
+ {pool_offset(1066), 150},
+ {-1}, {-1}, {-1}, {-1},
- {"inenclosedideographicsupplement", 482},
- {""},
+ {pool_offset(1071), 482},
+ {-1},
- {"copt", 128},
- {""}, {""}, {""}, {""},
+ {pool_offset(1073), 54},
+ {-1}, {-1}, {-1}, {-1},
- {"print", 7},
- {""},
+ {pool_offset(1078), 7},
+ {-1},
- {"cuneiform", 136},
+ {pool_offset(1080), 56},
- {"olditalic", 111},
+ {pool_offset(1081), 155},
- {"xsux", 136},
- {""}, {""}, {""},
+ {pool_offset(1082), 56},
+ {-1}, {-1}, {-1},
- {"inmongolian", 285},
- {""}, {""}, {""}, {""},
+ {pool_offset(1086), 285},
+ {-1}, {-1}, {-1}, {-1},
- {"inancientgreekmusicalnotation", 471},
+ {pool_offset(1091), 471},
- {"sundanese", 140},
+ {pool_offset(1092), 206},
- {"inoldnortharabian", 429},
- {""},
+ {pool_offset(1093), 429},
+ {-1},
- {"patternsyntax", 236},
- {""}, {""},
+ {pool_offset(1095), 174},
+ {-1}, {-1},
- {"inherited", 114},
+ {pool_offset(1098), 94},
- {"ingrantha", 448},
+ {pool_offset(1099), 448},
- {"inphoneticextensions", 301},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1100), 301},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"saurashtra", 144},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1110), 194},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"inancientgreeknumbers", 401},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1116), 401},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"shrd", 173},
- {""}, {""}, {""},
+ {pool_offset(1122), 196},
+ {-1}, {-1}, {-1},
- {"inoldsoutharabian", 428},
+ {pool_offset(1126), 428},
- {"innabataean", 421},
+ {pool_offset(1127), 421},
- {"inalphabeticpresentationforms", 388},
+ {pool_offset(1128), 388},
- {"spaceseparator", 54},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1129), 237},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"olower", 219},
- {""},
+ {pool_offset(1135), 168},
+ {-1},
- {"ingeneralpunctuation", 306},
+ {pool_offset(1137), 306},
- {"inunifiedcanadianaboriginalsyllabics", 277},
- {""},
+ {pool_offset(1138), 277},
+ {-1},
- {"bamum", 157},
- {""}, {""},
+ {pool_offset(1140), 25},
+ {-1}, {-1},
- {"inarabic", 250},
- {""}, {""}, {""},
+ {pool_offset(1143), 250},
+ {-1}, {-1}, {-1},
- {"phli", 163},
+ {pool_offset(1147), 95},
- {"inphoneticextensionssupplement", 302},
- {""},
+ {pool_offset(1148), 302},
+ {-1},
- {"patternwhitespace", 235},
- {""},
+ {pool_offset(1150), 175},
+ {-1},
- {"inbasiclatin", 238},
- {""},
+ {pool_offset(1152), 238},
+ {-1},
- {"othermath", 212},
+ {pool_offset(1154), 169},
- {"idsbinaryoperator", 223},
+ {pool_offset(1155), 88},
- {"inmathematicaloperators", 313},
+ {pool_offset(1156), 313},
- {"multani", 202},
+ {pool_offset(1157), 142},
- {"ingujarati", 261},
- {""}, {""}, {""}, {""},
+ {pool_offset(1158), 261},
+ {-1}, {-1}, {-1}, {-1},
- {"inelbasan", 415},
+ {pool_offset(1163), 415},
- {"inoldhungarian", 436},
+ {pool_offset(1164), 436},
- {"innumberforms", 311},
+ {pool_offset(1165), 311},
- {"nd", 35},
- {""},
+ {pool_offset(1166), 146},
+ {-1},
- {"yi", 110},
+ {pool_offset(1168), 233},
- {"lisu", 156},
- {""}, {""},
+ {pool_offset(1169), 115},
+ {-1}, {-1},
- {"yiii", 110},
- {""},
+ {pool_offset(1172), 233},
+ {-1},
- {"inpsalterpahlavi", 434},
- {""}, {""}, {""},
+ {pool_offset(1174), 434},
+ {-1}, {-1}, {-1},
- {"tagbanwa", 118},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1178), 210},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"bass", 177},
- {""}, {""}, {""}, {""},
+ {pool_offset(1184), 26},
+ {-1}, {-1}, {-1}, {-1},
- {"nbat", 190},
+ {pool_offset(1189), 145},
- {"inbyzantinemusicalsymbols", 469},
- {""},
+ {pool_offset(1190), 469},
+ {-1},
- {"closepunctuation", 41},
- {""},
+ {pool_offset(1192), 179},
+ {-1},
- {"tfng", 131},
+ {pool_offset(1194), 221},
- {"otherletter", 27},
- {""}, {""}, {""},
+ {pool_offset(1195), 118},
+ {-1}, {-1}, {-1},
- {"sd", 229},
- {""}, {""},
+ {pool_offset(1199), 204},
+ {-1}, {-1},
- {"lowercase", 57},
+ {pool_offset(1202), 120},
- {"sidd", 195},
- {""},
+ {pool_offset(1203), 198},
+ {-1},
- {"nabataean", 190},
- {""},
+ {pool_offset(1205), 145},
+ {-1},
- {"lepcha", 141},
+ {pool_offset(1207), 111},
- {"inarabicpresentationformsa", 389},
- {""},
+ {pool_offset(1208), 389},
+ {-1},
- {"modifierletter", 26},
+ {pool_offset(1210), 117},
- {"intags", 496},
+ {pool_offset(1211), 496},
- {"mult", 202},
- {""}, {""},
+ {pool_offset(1212), 142},
+ {-1}, {-1},
- {"insiddham", 450},
+ {pool_offset(1215), 450},
- {"talu", 129},
- {""}, {""}, {""}, {""},
+ {pool_offset(1216), 147},
+ {-1}, {-1}, {-1}, {-1},
- {"cased", 59},
- {""},
+ {pool_offset(1221), 39},
+ {-1},
- {"intibetan", 270},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1223), 270},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"separator", 51},
- {""},
+ {pool_offset(1230), 234},
+ {-1},
- {"runic", 103},
+ {pool_offset(1232), 190},
- {"inmiscellaneousmathematicalsymbolsb", 327},
- {""}, {""}, {""}, {""},
+ {pool_offset(1233), 327},
+ {-1}, {-1}, {-1}, {-1},
- {"linb", 121},
+ {pool_offset(1238), 114},
- {"inbraillepatterns", 325},
+ {pool_offset(1239), 325},
- {"oldpersian", 133},
- {""},
+ {pool_offset(1240), 158},
+ {-1},
- {"inugaritic", 410},
+ {pool_offset(1242), 410},
- {"telu", 89},
- {""},
+ {pool_offset(1243), 216},
+ {-1},
- {"limb", 119},
- {""},
+ {pool_offset(1245), 112},
+ {-1},
- {"oldpermic", 193},
- {""},
+ {pool_offset(1247), 157},
+ {-1},
- {"bali", 135},
+ {pool_offset(1249), 24},
- {"inmyanmarextendedb", 372},
+ {pool_offset(1250), 372},
- {"tibt", 95},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1251), 220},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"saur", 144},
- {""}, {""}, {""},
+ {pool_offset(1259), 194},
+ {-1}, {-1}, {-1},
- {"po", 44},
- {""},
+ {pool_offset(1263), 184},
+ {-1},
- {"tibetan", 95},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1265), 220},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"insaurashtra", 366},
- {""}, {""}, {""},
+ {pool_offset(1280), 366},
+ {-1}, {-1}, {-1},
- {"inbalinese", 294},
+ {pool_offset(1284), 294},
- {"elba", 179},
- {""}, {""}, {""}, {""},
+ {pool_offset(1285), 67},
+ {-1}, {-1}, {-1}, {-1},
- {"bengali", 84},
+ {pool_offset(1290), 28},
- {"gran", 180},
- {""}, {""}, {""},
+ {pool_offset(1291), 73},
+ {-1}, {-1}, {-1},
- {"phoenician", 137},
- {""},
+ {pool_offset(1295), 182},
+ {-1},
- {"ingurmukhi", 260},
- {""}, {""},
+ {pool_offset(1297), 260},
+ {-1}, {-1},
- {"caseignorable", 60},
- {""}, {""}, {""}, {""},
+ {pool_offset(1300), 38},
+ {-1}, {-1}, {-1}, {-1},
- {"lyci", 147},
- {""},
+ {pool_offset(1305), 123},
+ {-1},
- {"inyijinghexagramsymbols", 353},
- {""},
+ {pool_offset(1307), 353},
+ {-1},
- {"mlym", 91},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1309), 127},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"lycian", 147},
- {""}, {""}, {""}, {""},
+ {pool_offset(1316), 123},
+ {-1}, {-1}, {-1}, {-1},
- {"elbasan", 179},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1321), 67},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"balinese", 135},
+ {pool_offset(1327), 24},
- {"narb", 189},
- {""},
+ {pool_offset(1328), 156},
+ {-1},
- {"brai", 126},
- {""}, {""},
+ {pool_offset(1330), 32},
+ {-1}, {-1},
- {"insuttonsignwriting", 475},
- {""},
+ {pool_offset(1333), 475},
+ {-1},
- {"insorasompeng", 440},
+ {pool_offset(1335), 440},
- {"malayalam", 91},
- {""}, {""},
+ {pool_offset(1336), 127},
+ {-1}, {-1},
- {"arab", 80},
- {""},
+ {pool_offset(1339), 20},
+ {-1},
- {"brahmi", 167},
- {""},
+ {pool_offset(1341), 31},
+ {-1},
- {"incountingrodnumerals", 473},
- {""}, {""}, {""},
+ {pool_offset(1343), 473},
+ {-1}, {-1}, {-1},
- {"rjng", 146},
+ {pool_offset(1347), 189},
- {"mong", 105},
- {""}, {""}, {""},
+ {pool_offset(1348), 140},
+ {-1}, {-1}, {-1},
- {"incyrillicsupplement", 247},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1352), 247},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"ogam", 102},
- {""},
+ {pool_offset(1359), 152},
+ {-1},
- {"sarb", 161},
+ {pool_offset(1361), 159},
- {"lower", 6},
- {""},
+ {pool_offset(1362), 6},
+ {-1},
- {"inrejang", 369},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1364), 369},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"hmng", 181},
- {""}, {""},
+ {pool_offset(1370), 172},
+ {-1}, {-1},
- {"tirhuta", 197},
+ {pool_offset(1373), 222},
- {"hang", 98},
- {""}, {""}, {""}, {""},
+ {pool_offset(1374), 81},
+ {-1}, {-1}, {-1}, {-1},
- {"wspace", 205},
- {""}, {""}, {""}, {""},
+ {pool_offset(1379), 230},
+ {-1}, {-1}, {-1}, {-1},
- {"inlatinextendedd", 362},
- {""}, {""},
+ {pool_offset(1384), 362},
+ {-1}, {-1},
- {"invai", 358},
+ {pool_offset(1387), 358},
- {"incherokeesupplement", 379},
- {""},
+ {pool_offset(1388), 379},
+ {-1},
- {"mymr", 96},
- {""}, {""}, {""},
+ {pool_offset(1390), 143},
+ {-1}, {-1}, {-1},
- {"vai", 143},
+ {pool_offset(1394), 227},
- {"vaii", 143},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(1395), 227},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"ethiopic", 99},
- {""},
+ {pool_offset(1408), 68},
+ {-1},
- {"sylotinagri", 132},
- {""}, {""}, {""}, {""},
+ {pool_offset(1410), 207},
+ {-1}, {-1}, {-1}, {-1},
- {"myanmar", 96},
- {""},
+ {pool_offset(1415), 143},
+ {-1},
- {"syrc", 81},
- {""},
+ {pool_offset(1417), 208},
+ {-1},
- {"inbrahmi", 438},
- {""}, {""}, {""},
+ {pool_offset(1419), 438},
+ {-1}, {-1}, {-1},
- {"mathsymbol", 49},
- {""},
+ {pool_offset(1423), 202},
+ {-1},
- {"runr", 103},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1425), 190},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"inshavian", 413},
+ {pool_offset(1431), 413},
- {"gothic", 112},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1432), 72},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"syriac", 81},
+ {pool_offset(1438), 208},
- {"p", 38},
- {""},
+ {pool_offset(1439), 171},
+ {-1},
- {"zp", 53},
+ {pool_offset(1441), 236},
- {"induployan", 467},
- {""},
+ {pool_offset(1442), 467},
+ {-1},
- {"vs", 234},
- {""}, {""},
+ {pool_offset(1444), 228},
+ {-1}, {-1},
- {"ingreekandcoptic", 245},
+ {pool_offset(1447), 245},
- {"ingothic", 408},
- {""}, {""},
+ {pool_offset(1448), 408},
+ {-1}, {-1},
- {"lowercaseletter", 25},
- {""}, {""}, {""},
+ {pool_offset(1451), 116},
+ {-1}, {-1}, {-1},
- {"inoriya", 262},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1455), 262},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"grext", 71},
+ {pool_offset(1461), 75},
- {"linearb", 121},
+ {pool_offset(1462), 114},
- {"inyiradicals", 356},
- {""},
+ {pool_offset(1463), 356},
+ {-1},
- {"inethiopicsupplement", 275},
+ {pool_offset(1465), 275},
- {"inletterlikesymbols", 310},
+ {pool_offset(1466), 310},
- {"ingeometricshapes", 320},
- {""},
+ {pool_offset(1467), 320},
+ {-1},
- {"java", 158},
+ {pool_offset(1469), 97},
- {"inblockelements", 319},
- {""},
+ {pool_offset(1470), 319},
+ {-1},
- {"number", 34},
+ {pool_offset(1472), 144},
- {"incombininghalfmarks", 392},
+ {pool_offset(1473), 392},
- {"inbassavah", 463},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1474), 463},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"inlinearbsyllabary", 398},
- {""},
+ {pool_offset(1489), 398},
+ {-1},
- {"osmanya", 124},
- {""}, {""}, {""},
+ {pool_offset(1491), 162},
+ {-1}, {-1}, {-1},
- {"avst", 153},
- {""}, {""}, {""}, {""},
+ {pool_offset(1495), 23},
+ {-1}, {-1}, {-1}, {-1},
- {"hexdigit", 213},
- {""}, {""}, {""},
+ {pool_offset(1500), 85},
+ {-1}, {-1}, {-1},
- {"injavanese", 371},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1504), 371},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"cyrl", 77},
+ {pool_offset(1513), 58},
- {"avestan", 153},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1514), 23},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"intaiviet", 375},
+ {pool_offset(1531), 375},
- {"inornamentaldingbats", 485},
+ {pool_offset(1532), 485},
- {"tavt", 152},
- {""}, {""}, {""}, {""},
+ {pool_offset(1533), 213},
+ {-1}, {-1}, {-1}, {-1},
- {"javanese", 158},
+ {pool_offset(1538), 97},
- {"inethiopicextended", 335},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(1539), 335},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
- {"inhalfwidthandfullwidthforms", 396},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1550), 396},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"ingeorgian", 272},
- {""},
+ {pool_offset(1559), 272},
+ {-1},
- {"inarabicmathematicalalphabeticsymbols", 477},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1561), 477},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"hangul", 98},
- {""},
+ {pool_offset(1569), 81},
+ {-1},
- {"insuperscriptsandsubscripts", 307},
- {""}, {""}, {""}, {""},
+ {pool_offset(1571), 307},
+ {-1}, {-1}, {-1}, {-1},
- {"inhanunoo", 281},
- {""},
+ {pool_offset(1576), 281},
+ {-1},
- {"inhangulsyllables", 381},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1578), 381},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inoldpersian", 411},
- {""}, {""},
+ {pool_offset(1586), 411},
+ {-1}, {-1},
- {"geor", 97},
- {""},
+ {pool_offset(1589), 70},
+ {-1},
- {"otherpunctuation", 44},
- {""},
+ {pool_offset(1591), 184},
+ {-1},
- {"inoldpermic", 409},
- {""}, {""}, {""}, {""},
+ {pool_offset(1593), 409},
+ {-1}, {-1}, {-1}, {-1},
- {"inalchemicalsymbols", 487},
+ {pool_offset(1598), 487},
- {"sylo", 132},
- {""},
+ {pool_offset(1599), 207},
+ {-1},
- {"hiragana", 106},
- {""}, {""},
+ {pool_offset(1601), 86},
+ {-1}, {-1},
- {"word", 12},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1604), 12},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmeroitichieroglyphs", 425},
- {""},
+ {pool_offset(1612), 425},
+ {-1},
- {"insmallformvariants", 394},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1614), 394},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"sund", 140},
+ {pool_offset(1620), 206},
- {"brah", 167},
- {""},
+ {pool_offset(1621), 31},
+ {-1},
- {"insupplementalmathematicaloperators", 328},
+ {pool_offset(1623), 328},
- {"glagolitic", 130},
- {""}, {""},
+ {pool_offset(1624), 71},
+ {-1}, {-1},
- {"braille", 126},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
+ {pool_offset(1627), 32},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
- {"unassigned", 20},
+ {pool_offset(1639), 51},
- {"sgnw", 204},
- {""}, {""}, {""},
+ {pool_offset(1640), 199},
+ {-1}, {-1}, {-1},
- {"plrd", 172},
- {""}, {""}, {""},
+ {pool_offset(1644), 137},
+ {-1}, {-1}, {-1},
- {"hebr", 79},
+ {pool_offset(1648), 84},
- {"ogham", 102},
- {""}, {""}, {""}, {""},
+ {pool_offset(1649), 152},
+ {-1}, {-1}, {-1}, {-1},
- {"cyrillic", 77},
- {""}, {""}, {""},
+ {pool_offset(1654), 58},
+ {-1}, {-1}, {-1},
- {"orya", 87},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(1658), 161},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
- {"grantha", 180},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1669), 73},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"invariationselectors", 390},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1684), 390},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"indingbats", 322},
- {""},
+ {pool_offset(1693), 322},
+ {-1},
- {"inunifiedcanadianaboriginalsyllabicsextended", 286},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1695), 286},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inhanguljamoextendeda", 370},
- {""}, {""},
+ {pool_offset(1702), 370},
+ {-1}, {-1},
- {"goth", 112},
+ {pool_offset(1705), 72},
- {"graphemebase", 72},
- {""},
+ {pool_offset(1706), 74},
+ {-1},
- {"bidic", 206},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1708), 29},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"ogrext", 222},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1717), 165},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"idsb", 223},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1724), 88},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"invariationselectorssupplement", 497},
+ {pool_offset(1732), 497},
- {"assigned", 16},
- {""}, {""}, {""},
+ {pool_offset(1733), 22},
+ {-1}, {-1}, {-1},
- {"symbol", 46},
- {""}, {""}, {""},
+ {pool_offset(1737), 191},
+ {-1}, {-1}, {-1},
- {"ingreekextended", 305},
- {""},
+ {pool_offset(1741), 305},
+ {-1},
- {"pauc", 192},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1743), 176},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"meroitichieroglyphs", 171},
- {""},
+ {pool_offset(1752), 136},
+ {-1},
- {"logicalorderexception", 230},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1754), 119},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"incurrencysymbols", 308},
- {""}, {""}, {""},
+ {pool_offset(1771), 308},
+ {-1}, {-1}, {-1},
- {"inarabicextendeda", 257},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1775), 257},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"insupplementalarrowsc", 489},
- {""}, {""},
+ {pool_offset(1783), 489},
+ {-1}, {-1},
- {"insupplementalarrowsa", 324},
- {""},
+ {pool_offset(1786), 324},
+ {-1},
- {"inkannada", 265},
- {""}, {""}, {""},
+ {pool_offset(1788), 265},
+ {-1}, {-1}, {-1},
- {"kana", 107},
+ {pool_offset(1792), 101},
- {"phagspa", 138},
- {""}, {""},
+ {pool_offset(1793), 181},
+ {-1}, {-1},
- {"cakm", 169},
+ {pool_offset(1796), 43},
- {"digit", 4},
- {""}, {""}, {""}, {""},
+ {pool_offset(1797), 4},
+ {-1}, {-1}, {-1}, {-1},
- {"softdotted", 229},
- {""}, {""}, {""},
+ {pool_offset(1802), 204},
+ {-1}, {-1}, {-1},
- {"inchakma", 441},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
+ {pool_offset(1806), 441},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
- {"inphagspa", 365},
- {""}, {""}, {""},
+ {pool_offset(1818), 365},
+ {-1}, {-1}, {-1},
- {"inhighprivateusesurrogates", 384},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
+ {pool_offset(1822), 384},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1},
- {"warangciti", 198},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1836), 229},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"incjkcompatibilityforms", 393},
- {""}, {""},
+ {pool_offset(1844), 393},
+ {-1}, {-1},
- {"idstrinaryoperator", 224},
- {""},
+ {pool_offset(1847), 89},
+ {-1},
- {"incjkcompatibilityideographs", 387},
- {""},
+ {pool_offset(1849), 387},
+ {-1},
- {"inkaithi", 439},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1851), 439},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"takri", 175},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1857), 214},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"phlp", 194},
+ {pool_offset(1864), 186},
- {"mendekikakui", 186},
- {""},
+ {pool_offset(1865), 134},
+ {-1},
- {"punct", 8},
- {""}, {""},
+ {pool_offset(1867), 8},
+ {-1}, {-1},
- {"otherdefaultignorablecodepoint", 227},
+ {pool_offset(1870), 164},
- {"inkatakana", 343},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1871), 343},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"graph", 5},
+ {pool_offset(1878), 5},
- {"lydi", 149},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1879), 124},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"pd", 40},
- {""},
+ {pool_offset(1885), 178},
+ {-1},
- {"incjkstrokes", 348},
- {""}, {""},
+ {pool_offset(1887), 348},
+ {-1}, {-1},
- {"lydian", 149},
- {""}, {""}, {""}, {""},
+ {pool_offset(1890), 124},
+ {-1}, {-1}, {-1}, {-1},
- {"sorasompeng", 174},
- {""},
+ {pool_offset(1895), 205},
+ {-1},
- {"incjkcompatibilityideographssupplement", 495},
- {""}, {""},
+ {pool_offset(1897), 495},
+ {-1}, {-1},
- {"meeteimayek", 159},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1900), 133},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"otheruppercase", 220},
- {""}, {""},
+ {pool_offset(1909), 170},
+ {-1}, {-1},
- {"kali", 145},
- {""}, {""},
+ {pool_offset(1912), 102},
+ {-1}, {-1},
- {"inhanguljamo", 273},
- {""},
+ {pool_offset(1915), 273},
+ {-1},
- {"ideographic", 216},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1917), 92},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inmeeteimayek", 380},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(1935), 380},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"incyrillicextendedb", 359},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1948), 359},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"hluw", 200},
- {""}, {""}, {""}, {""},
+ {pool_offset(1964), 18},
+ {-1}, {-1}, {-1}, {-1},
- {"patsyn", 236},
- {""}, {""},
+ {pool_offset(1969), 174},
+ {-1}, {-1},
- {"incombiningdiacriticalmarks", 244},
+ {pool_offset(1972), 244},
- {"inarabicsupplement", 252},
- {""},
+ {pool_offset(1973), 252},
+ {-1},
- {"inkanasupplement", 466},
- {""},
+ {pool_offset(1975), 466},
+ {-1},
- {"deprecated", 228},
+ {pool_offset(1977), 61},
- {"inverticalforms", 391},
- {""}, {""}, {""},
+ {pool_offset(1978), 391},
+ {-1}, {-1}, {-1},
- {"incombiningdiacriticalmarksforsymbols", 309},
- {""}, {""}, {""}, {""},
+ {pool_offset(1982), 309},
+ {-1}, {-1}, {-1}, {-1},
- {"indevanagari", 258},
- {""},
+ {pool_offset(1987), 258},
+ {-1},
- {"inbuhid", 282},
- {""},
+ {pool_offset(1989), 282},
+ {-1},
- {"alphabetic", 56},
- {""}, {""}, {""},
+ {pool_offset(1991), 17},
+ {-1}, {-1}, {-1},
- {"oldhungarian", 203},
- {""}, {""},
+ {pool_offset(1995), 154},
+ {-1}, {-1},
- {"mark", 30},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(1998), 125},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inkharoshthi", 427},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2005), 427},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"deva", 83},
+ {pool_offset(2011), 63},
- {"invedicextensions", 300},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2012), 300},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"devanagari", 83},
+ {pool_offset(2019), 63},
- {"incombiningdiacriticalmarkssupplement", 303},
- {""}, {""}, {""},
+ {pool_offset(2020), 303},
+ {-1}, {-1}, {-1},
- {"ingeometricshapesextended", 488},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2024), 488},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"inkhmer", 284},
- {""}, {""}, {""},
+ {pool_offset(2030), 284},
+ {-1}, {-1}, {-1},
- {"changeswhencasemapped", 65},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2034), 46},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"intakri", 452},
- {""}, {""},
+ {pool_offset(2058), 452},
+ {-1}, {-1},
- {"dep", 228},
+ {pool_offset(2061), 61},
- {"takr", 175},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2062), 214},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"changeswhencasefolded", 64},
- {""},
+ {pool_offset(2080), 45},
+ {-1},
- {"kaithi", 165},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(2082), 99},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
- {"phag", 138},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(2093), 181},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
- {"inpahawhhmong", 464},
- {""},
+ {pool_offset(2104), 464},
+ {-1},
- {"bidicontrol", 206},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2106), 29},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inkhojki", 445},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2116), 445},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"bamu", 157},
+ {pool_offset(2126), 25},
- {"inbamum", 360},
+ {pool_offset(2127), 360},
- {"changeswhentitlecased", 63},
- {""}, {""},
+ {pool_offset(2128), 48},
+ {-1}, {-1},
- {"inkhmersymbols", 290},
+ {pool_offset(2131), 290},
- {"uideo", 226},
+ {pool_offset(2132), 224},
- {"lu", 29},
- {""}, {""},
+ {pool_offset(2133), 122},
+ {-1}, {-1},
- {"kthi", 165},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2136), 99},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"limbu", 119},
- {""},
+ {pool_offset(2145), 112},
+ {-1},
- {"defaultignorablecodepoint", 70},
- {""}, {""}, {""},
+ {pool_offset(2147), 60},
+ {-1}, {-1}, {-1},
- {"inplayingcards", 480},
- {""},
+ {pool_offset(2151), 480},
+ {-1},
- {"inhebrew", 249},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2153), 249},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"modifiersymbol", 48},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2161), 201},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"ugaritic", 122},
- {""}, {""}, {""}, {""},
+ {pool_offset(2167), 223},
+ {-1}, {-1}, {-1}, {-1},
- {"inlisu", 357},
+ {pool_offset(2172), 357},
- {"inglagolitic", 330},
- {""},
+ {pool_offset(2173), 330},
+ {-1},
- {"inprivateusearea", 386},
- {""}, {""},
+ {pool_offset(2175), 386},
+ {-1}, {-1},
- {"olck", 142},
- {""}, {""}, {""},
+ {pool_offset(2178), 153},
+ {-1}, {-1}, {-1},
- {"inbengali", 259},
- {""}, {""},
+ {pool_offset(2182), 259},
+ {-1}, {-1},
- {"olchiki", 142},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2185), 153},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"caucasianalbanian", 176},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2195), 40},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"oldturkic", 164},
+ {pool_offset(2210), 160},
- {"beng", 84},
+ {pool_offset(2211), 28},
- {"intelugu", 264},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2212), 264},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"hyphen", 209},
- {""}, {""},
+ {pool_offset(2218), 87},
+ {-1}, {-1},
- {"inbuginese", 291},
- {""}, {""}, {""},
+ {pool_offset(2221), 291},
+ {-1}, {-1}, {-1},
- {"intagalog", 280},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2225), 280},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"cypriot", 125},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2240), 57},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inlimbu", 287},
- {""}, {""},
+ {pool_offset(2249), 287},
+ {-1}, {-1},
- {"graphemeextend", 71},
- {""}, {""},
+ {pool_offset(2252), 75},
+ {-1}, {-1},
- {"tagb", 118},
- {""}, {""}, {""},
+ {pool_offset(2255), 210},
+ {-1}, {-1}, {-1},
- {"incypriotsyllabary", 418},
- {""}, {""}, {""},
+ {pool_offset(2259), 418},
+ {-1}, {-1}, {-1},
- {"intagbanwa", 283},
- {""}, {""}, {""}, {""},
+ {pool_offset(2263), 283},
+ {-1}, {-1}, {-1}, {-1},
- {"inaegeannumbers", 400},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2268), 400},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inkatakanaphoneticextensions", 349},
+ {pool_offset(2275), 349},
- {"glag", 130},
+ {pool_offset(2276), 71},
- {"combiningmark", 30},
+ {pool_offset(2277), 125},
- {"palmyrene", 191},
- {""},
+ {pool_offset(2278), 173},
+ {-1},
- {"khmr", 104},
- {""}, {""}, {""},
+ {pool_offset(2280), 104},
+ {-1}, {-1}, {-1},
- {"khar", 134},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2284), 103},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"ugar", 122},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2292), 223},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inarabicpresentationformsb", 395},
- {""}, {""}, {""},
+ {pool_offset(2300), 395},
+ {-1}, {-1}, {-1},
- {"insupplementaryprivateuseareaa", 498},
- {""},
+ {pool_offset(2304), 498},
+ {-1},
- {"variationselector", 234},
- {""}, {""}, {""}, {""},
+ {pool_offset(2306), 228},
+ {-1}, {-1}, {-1}, {-1},
- {"nko", 139},
+ {pool_offset(2311), 148},
- {"nkoo", 139},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2312), 148},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inbamumsupplement", 461},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2330), 461},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"tglg", 115},
- {""},
+ {pool_offset(2336), 209},
+ {-1},
- {"any", 15},
+ {pool_offset(2338), 19},
- {"enclosingmark", 32},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2339), 132},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"gujr", 86},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2348), 78},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"changeswhenlowercased", 61},
- {""}, {""}, {""}, {""},
+ {pool_offset(2358), 47},
+ {-1}, {-1}, {-1}, {-1},
- {"knda", 90},
+ {pool_offset(2363), 100},
- {"hung", 203},
+ {pool_offset(2364), 154},
- {"gujarati", 86},
- {""}, {""},
+ {pool_offset(2365), 78},
+ {-1}, {-1},
- {"bopo", 108},
- {""}, {""}, {""}, {""},
+ {pool_offset(2368), 30},
+ {-1}, {-1}, {-1}, {-1},
- {"inmendekikakui", 476},
- {""}, {""},
+ {pool_offset(2373), 476},
+ {-1}, {-1},
- {"inbopomofo", 344},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2376), 344},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"kharoshthi", 134},
- {""},
+ {pool_offset(2386), 103},
+ {-1},
- {"kannada", 90},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(2388), 100},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"khoj", 182},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
+ {pool_offset(2401), 105},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
- {"cherokee", 100},
- {""}, {""}, {""},
+ {pool_offset(2422), 50},
+ {-1}, {-1}, {-1},
- {"inlatinextendedb", 241},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2426), 241},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"dashpunctuation", 40},
- {""}, {""},
+ {pool_offset(2432), 178},
+ {-1}, {-1},
- {"dupl", 178},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2435), 65},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"inyisyllables", 355},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2443), 355},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"georgian", 97},
- {""},
+ {pool_offset(2451), 70},
+ {-1},
- {"rejang", 146},
- {""},
+ {pool_offset(2453), 189},
+ {-1},
- {"oupper", 220},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(2455), 170},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"aghb", 176},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
+ {pool_offset(2477), 40},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1},
- {"khmer", 104},
- {""}, {""},
+ {pool_offset(2491), 104},
+ {-1}, {-1},
- {"grbase", 72},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2494), 74},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"currencysymbol", 47},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2503), 195},
+ {-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},
- {"incombiningdiacriticalmarksextended", 293},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(2529), 293},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"spacingmark", 31},
- {""},
+ {pool_offset(2542), 131},
+ {-1},
- {"orkh", 164},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2544), 160},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"cwu", 62},
- {""},
+ {pool_offset(2550), 49},
+ {-1},
- {"hebrew", 79},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2552), 84},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"insupplementalpunctuation", 337},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(2570), 337},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
- {"oldnortharabian", 189},
- {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2581), 156},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"incjksymbolsandpunctuation", 341},
- {""}, {""},
+ {pool_offset(2587), 341},
+ {-1}, {-1},
- {"othergraphemeextend", 222},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
+ {pool_offset(2590), 165},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1},
- {"indevanagariextended", 367},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2613), 367},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"tagalog", 115},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2621), 209},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"surrogate", 22},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(2628), 55},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
- {"bopomofo", 108},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {pool_offset(2650), 30},
+ {-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},
- {"ingeorgiansupplement", 333},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2679), 333},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"uppercase", 58},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {pool_offset(2704), 226},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
- {"unifiedideograph", 226},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(2711), 224},
+ {-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},
- {"inpaucinhau", 455},
+ {pool_offset(2742), 455},
- {"paucinhau", 192},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {pool_offset(2743), 176},
+ {-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},
- {"insupplementalsymbolsandpictographs", 490},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"nonspacingmark", 33},
- {""},
-
- {"inhanguljamoextendedb", 382},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"inhighsurrogates", 383},
-
- {"punctuation", 38},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
-
- {"openpunctuation", 45},
-
- {"bassavah", 177},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"upper", 10},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-
- {"insupplementalarrowsb", 326},
-
- {"inkanbun", 346},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-
- {"inkangxiradicals", 339},
- {""}, {""}, {""},
-
- {"inmeroiticcursive", 426},
- {""}, {""},
-
- {"signwriting", 204},
- {""}, {""},
-
- {"incjkradicalssupplement", 338},
- {""},
-
- {"pahawhhmong", 181},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
-
- {"inkayahli", 368},
-
- {"uppercaseletter", 29},
- {""},
-
- {"batk", 166},
- {""}, {""}, {""}, {""},
-
- {"inbatak", 296},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"incjkcompatibility", 351},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-
- {"buhd", 117},
- {""}, {""}, {""}, {""}, {""},
-
- {"egyp", 154},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"innoblock", 500},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
-
- {"inegyptianhieroglyphs", 459},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-
- {"grek", 76},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"bugi", 127},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"changeswhenuppercased", 62},
- {""}, {""}, {""},
-
- {"paragraphseparator", 53},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"buginese", 127},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"guru", 85},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"inbopomofoextended", 347},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
-
- {"telugu", 89},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
-
- {"quotationmark", 210},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-
- {"inkhudawadi", 447},
- {""}, {""}, {""}, {""}, {""},
-
- {"kayahli", 145},
- {""},
-
- {"oldsoutharabian", 161},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-
- {"insupplementaryprivateuseareab", 499},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"inhangulcompatibilityjamo", 345},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-
- {"zyyy", 74},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"qmark", 210},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"buhid", 117},
-
- {"sk", 48},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-
- {"unknown", 237},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"khudawadi", 196},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
-
- {"katakana", 107},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"incjkunifiedideographsextensionc", 492},
- {""}, {""},
-
- {"incjkunifiedideographsextensiona", 352},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-
- {"incjkunifiedideographs", 354},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-
- {"incjkunifiedideographsextensione", 494},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
-
- {"duployan", 178},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"egyptianhieroglyphs", 154},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"inboxdrawing", 318},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"khojki", 182},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-
- {"incjkunifiedideographsextensiond", 493},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"batak", 166},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
-
- {"incjkunifiedideographsextensionb", 491},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-
- {"blank", 2},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"greek", 76},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-
- {"grlink", 73},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-
- {"gurmukhi", 85},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-
- {"graphemelink", 73}
+ {pool_offset(2774), 490},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(2792), 138},
+ {-1},
+
+ {pool_offset(2794), 382},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(2802), 383},
+
+ {pool_offset(2803), 171},
+ {-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},
+
+ {pool_offset(2834), 185},
+
+ {pool_offset(2835), 26},
+ {-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},
+
+ {pool_offset(2864), 10},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(2878), 326},
+
+ {pool_offset(2879), 346},
+ {-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}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
+
+ {pool_offset(2918), 339},
+ {-1}, {-1}, {-1},
+
+ {pool_offset(2922), 426},
+ {-1}, {-1},
+
+ {pool_offset(2925), 199},
+ {-1}, {-1},
+
+ {pool_offset(2928), 338},
+ {-1},
+
+ {pool_offset(2930), 172},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
+
+ {pool_offset(2952), 368},
+
+ {pool_offset(2953), 122},
+ {-1},
+
+ {pool_offset(2955), 27},
+ {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(2960), 296},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(2968), 351},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(2983), 34},
+ {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(2989), 66},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
+
+ {pool_offset(3009), 500},
+ {-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}, {-1},
+
+ {pool_offset(3043), 459},
+ {-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}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3084), 77},
+ {-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}, {-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}, {-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},
+
+ {pool_offset(3176), 33},
+ {-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}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3230), 49},
+ {-1}, {-1}, {-1},
+
+ {pool_offset(3234), 236},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
+
+ {pool_offset(3254), 33},
+ {-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},
+
+ {pool_offset(3282), 79},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3299), 347},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1},
+
+ {pool_offset(3312), 216},
+ {-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},
+
+ {pool_offset(3343), 187},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
+
+ {pool_offset(3364), 447},
+ {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3370), 102},
+ {-1},
+
+ {pool_offset(3372), 159},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3396), 499},
+ {-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}, {-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}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
+
+ {pool_offset(3479), 345},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
+
+ {pool_offset(3491), 53},
+ {-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}, {-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},
+
+ {pool_offset(3555), 187},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
+
+ {pool_offset(3566), 34},
+
+ {pool_offset(3567), 201},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3582), 225},
+ {-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}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3619), 106},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3644), 101},
+ {-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},
+
+ {pool_offset(3670), 492},
+ {-1}, {-1},
+
+ {pool_offset(3673), 352},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
+
+ {pool_offset(3685), 354},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3700), 494},
+ {-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}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(3743), 65},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1},
+
+ {pool_offset(3763), 66},
+ {-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}, {-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}, {-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},
+
+ {pool_offset(3853), 318},
+ {-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}, {-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}, {-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}, {-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}, {-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}, {-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}, {-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}, {-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},
+
+ {pool_offset(4106), 105},
+ {-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}, {-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}, {-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}, {-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}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
+
+ {pool_offset(4244), 493},
+ {-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}, {-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}, {-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}, {-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}, {-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}, {-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}, {-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}, {-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}, {-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},
+ {-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}, {-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}, {-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}, {-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}, {-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}, {-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},
+
+ {pool_offset(4722), 27},
+ {-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}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(4765), 491},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(4780), 2},
+ {-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}, {-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}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(4851), 77},
+ {-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}, {-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}, {-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},
+
+ {pool_offset(4943), 76},
+ {-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}, {-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}, {-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}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+ {-1}, {-1},
+
+ {pool_offset(5054), 79},
+ {-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}, {-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}, {-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}, {-1}, {-1}, {-1},
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+ {pool_offset(5162), 76}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
- unsigned int key = hash (str, len);
+ register int key = hash (str, len);
- if (key <= MAX_HASH_VALUE)
+ if (key <= MAX_HASH_VALUE && key >= 0)
{
- register const char *s = wordlist[key].name;
-
- if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
- return &wordlist[key];
+ register int o = wordlist[key].name;
+ if (o >= 0)
+ {
+ register const char *s = o + unicode_prop_name_pool;
+
+ if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
+ return &wordlist[key];
+ }
}
}
return 0;
diff --git a/ext/mbstring/oniguruma/src/unicode_property_data_posix.c b/ext/mbstring/oniguruma/src/unicode_property_data_posix.c
index 83aabc60be..fffe2ef107 100644
--- a/ext/mbstring/oniguruma/src/unicode_property_data_posix.c
+++ b/ext/mbstring/oniguruma/src/unicode_property_data_posix.c
@@ -1,5 +1,5 @@
-/* ANSI-C code produced by gperf version 3.0.3 */
-/* Command-line: /Library/Developer/CommandLineTools/usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case -N unicode_lookup_property_name --output-file gperf.tmp unicode_property_data_posix.gperf */
+/* ANSI-C code produced by gperf version 3.0.4 */
+/* Command-line: gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf.tmp unicode_property_data_posix.gperf */
/* Computed positions: -k'1,3' */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -4785,6 +4785,9 @@ const CodeRanges[] = {
CR_ASCII,
};
+#define pool_offset(s) offsetof(struct unicode_prop_name_pool_t, unicode_prop_name_pool_str##s)
+
+
#define TOTAL_KEYWORDS 15
#define MIN_WORD_LENGTH 4
#define MAX_WORD_LENGTH 7
@@ -4879,54 +4882,101 @@ hash (register const char *str, register unsigned int len)
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]];
}
-const struct PropertyNameCtype *
+struct unicode_prop_name_pool_t
+ {
+ char unicode_prop_name_pool_str5[sizeof("print")];
+ char unicode_prop_name_pool_str6[sizeof("punct")];
+ char unicode_prop_name_pool_str7[sizeof("alpha")];
+ char unicode_prop_name_pool_str8[sizeof("alnum")];
+ char unicode_prop_name_pool_str9[sizeof("xdigit")];
+ char unicode_prop_name_pool_str10[sizeof("newline")];
+ char unicode_prop_name_pool_str11[sizeof("upper")];
+ char unicode_prop_name_pool_str12[sizeof("ascii")];
+ char unicode_prop_name_pool_str13[sizeof("cntrl")];
+ char unicode_prop_name_pool_str14[sizeof("space")];
+ char unicode_prop_name_pool_str15[sizeof("word")];
+ char unicode_prop_name_pool_str16[sizeof("lower")];
+ char unicode_prop_name_pool_str17[sizeof("graph")];
+ char unicode_prop_name_pool_str18[sizeof("digit")];
+ char unicode_prop_name_pool_str19[sizeof("blank")];
+ };
+static const struct unicode_prop_name_pool_t unicode_prop_name_pool_contents =
+ {
+ "print",
+ "punct",
+ "alpha",
+ "alnum",
+ "xdigit",
+ "newline",
+ "upper",
+ "ascii",
+ "cntrl",
+ "space",
+ "word",
+ "lower",
+ "graph",
+ "digit",
+ "blank"
+ };
+#define unicode_prop_name_pool ((const char *) &unicode_prop_name_pool_contents)
+#ifdef __GNUC__
+__inline
+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
+#endif
+const struct PoolPropertyNameCtype *
unicode_lookup_property_name (register const char *str, register unsigned int len)
{
- static const struct PropertyNameCtype wordlist[] =
+ static const struct PoolPropertyNameCtype wordlist[] =
{
- {""}, {""}, {""}, {""}, {""},
+ {-1}, {-1}, {-1}, {-1}, {-1},
- {"print", 7},
+ {pool_offset(5), 7},
- {"punct", 8},
+ {pool_offset(6), 8},
- {"alpha", 1},
+ {pool_offset(7), 1},
- {"alnum", 13},
+ {pool_offset(8), 13},
- {"xdigit", 11},
+ {pool_offset(9), 11},
- {"newline", 0},
+ {pool_offset(10), 0},
- {"upper", 10},
+ {pool_offset(11), 10},
- {"ascii", 14},
+ {pool_offset(12), 14},
- {"cntrl", 3},
+ {pool_offset(13), 3},
- {"space", 9},
+ {pool_offset(14), 9},
- {"word", 12},
+ {pool_offset(15), 12},
- {"lower", 6},
+ {pool_offset(16), 6},
- {"graph", 5},
+ {pool_offset(17), 5},
- {"digit", 4},
+ {pool_offset(18), 4},
- {"blank", 2}
+ {pool_offset(19), 2}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
- unsigned int key = hash (str, len);
+ register int key = hash (str, len);
- if (key <= MAX_HASH_VALUE)
+ if (key <= MAX_HASH_VALUE && key >= 0)
{
- register const char *s = wordlist[key].name;
+ register int o = wordlist[key].name;
+ if (o >= 0)
+ {
+ register const char *s = o + unicode_prop_name_pool;
- if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
- return &wordlist[key];
+ if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strncmp (str, s, len) && s[len] == '\0')
+ return &wordlist[key];
+ }
}
}
return 0;
diff --git a/ext/mbstring/oniguruma/src/utf8.c b/ext/mbstring/oniguruma/src/utf8.c
index 219b7eacea..e5e59b2914 100644
--- a/ext/mbstring/oniguruma/src/utf8.c
+++ b/ext/mbstring/oniguruma/src/utf8.c
@@ -2,7 +2,7 @@
utf8.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2016 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2017 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -90,6 +90,7 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
return TRUE;
}
+#if 0
static int
is_mbc_newline(const UChar* p, const UChar* end)
{
@@ -114,6 +115,7 @@ is_mbc_newline(const UChar* p, const UChar* end)
return 0;
}
+#endif
static OnigCodePoint
mbc_to_code(const UChar* p, const UChar* end)
@@ -122,7 +124,7 @@ mbc_to_code(const UChar* p, const UChar* end)
OnigCodePoint n;
len = mbc_enc_len(p);
- if (len > end - p) len = end - p;
+ if (len > (int )(end - p)) len = (int )(end - p);
c = *p++;
if (len > 1) {
@@ -214,7 +216,7 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
}
*p++ = UTF8_TRAIL0(code);
- return p - buf;
+ return (int )(p - buf);
}
}
@@ -246,43 +248,6 @@ mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
}
}
-#if 0
-static int
-is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp, const UChar* end)
-{
- const UChar* p = *pp;
-
- if (ONIGENC_IS_MBC_ASCII(p)) {
- (*pp)++;
- return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
- }
- else {
- (*pp) += enclen(ONIG_ENCODING_UTF8, p);
-
- if (*p == 0xc3) {
- int c = *(p + 1);
- if (c >= 0x80) {
- if (c <= (UChar )0x9e) { /* upper */
- if (c == (UChar )0x97) return FALSE;
- return TRUE;
- }
- else if (c >= (UChar )0xa0 && c <= (UChar )0xbe) { /* lower */
- if (c == (UChar )'\267') return FALSE;
- return TRUE;
- }
- else if (c == (UChar )0x9f &&
- (flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
- return TRUE;
- }
- }
- }
- }
-
- return FALSE;
-}
-#endif
-
-
static int
get_ctype_code_range(OnigCtype ctype, OnigCodePoint *sb_out,
const OnigCodePoint* ranges[])
@@ -317,7 +282,7 @@ OnigEncodingType OnigEncodingUTF8 = {
"UTF-8", /* name */
6, /* max byte length */
1, /* min byte length */
- is_mbc_newline,
+ onigenc_is_mbc_newline_0x0a,
mbc_to_code,
code_to_mbclen,
code_to_mbc,