]> granicus.if.org Git - php/commitdiff
Update to Oniguruma 6.7.1
authorChristoph M. Becker <cmbecker69@gmx.de>
Tue, 6 Mar 2018 13:15:14 +0000 (14:15 +0100)
committerChristoph M. Becker <cmbecker69@gmx.de>
Sat, 10 Mar 2018 00:07:00 +0000 (01:07 +0100)
We also apply the still relevant parts of `oniguruma.patch` and update
the patch accordingly.

44 files changed:
NEWS
ext/mbstring/config.w32
ext/mbstring/oniguruma.patch
ext/mbstring/oniguruma/HISTORY
ext/mbstring/oniguruma/INSTALL
ext/mbstring/oniguruma/README
ext/mbstring/oniguruma/README.md
ext/mbstring/oniguruma/README_japanese [moved from ext/mbstring/oniguruma/README.ja with 95% similarity]
ext/mbstring/oniguruma/doc/API
ext/mbstring/oniguruma/doc/API.ja
ext/mbstring/oniguruma/doc/FAQ
ext/mbstring/oniguruma/doc/FAQ.ja
ext/mbstring/oniguruma/doc/RE
ext/mbstring/oniguruma/doc/RE.ja
ext/mbstring/oniguruma/doc/UNICODE_PROPERTIES
ext/mbstring/oniguruma/index.html
ext/mbstring/oniguruma/index_ja.html
ext/mbstring/oniguruma/src/big5.c
ext/mbstring/oniguruma/src/euc_jp.c
ext/mbstring/oniguruma/src/onigposix.h
ext/mbstring/oniguruma/src/oniguruma.h
ext/mbstring/oniguruma/src/regcomp.c
ext/mbstring/oniguruma/src/regenc.c
ext/mbstring/oniguruma/src/regenc.h
ext/mbstring/oniguruma/src/regerror.c
ext/mbstring/oniguruma/src/regexec.c
ext/mbstring/oniguruma/src/regext.c
ext/mbstring/oniguruma/src/reggnu.c
ext/mbstring/oniguruma/src/regint.h
ext/mbstring/oniguruma/src/regparse.c
ext/mbstring/oniguruma/src/regparse.h
ext/mbstring/oniguruma/src/regposix.c
ext/mbstring/oniguruma/src/regsyntax.c
ext/mbstring/oniguruma/src/regversion.c
ext/mbstring/oniguruma/src/sjis.c
ext/mbstring/oniguruma/src/st.c
ext/mbstring/oniguruma/src/unicode.c
ext/mbstring/oniguruma/src/unicode_egcb_data.c [new file with mode: 0644]
ext/mbstring/oniguruma/src/unicode_fold1_key.c
ext/mbstring/oniguruma/src/unicode_fold2_key.c
ext/mbstring/oniguruma/src/unicode_fold3_key.c
ext/mbstring/oniguruma/src/unicode_property_data.c
ext/mbstring/oniguruma/src/unicode_property_data_posix.c
ext/mbstring/oniguruma/src/utf8.c

diff --git a/NEWS b/NEWS
index a342d750488785b57d81634f24b6abf5b1d333da..6ab58e57ff988b2ddc378fb540646ddc3a946719 100644 (file)
--- 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)
index 11fc88ebeecffd98da09e674a53d3e025b906170..13e1e12605b74be094045233bd018970945dc34c 100644 (file)
@@ -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);
index 7c21f622fbfb0c3fe10cf904c9f77252b65c94a3..aa248839cf207cca444f340c1a99054483b5d309 100644 (file)
@@ -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\r
- #define SIZEOF_FLOAT 4\r
- #define SIZEOF_DOUBLE 8\r
+ #define SIZEOF_VOIDP 4
+ #define SIZEOF_FLOAT 4
+ #define SIZEOF_DOUBLE 8
 +#define SIZEOF_SIZE_T 4
- #define HAVE_PROTOTYPES 1\r
- #define TOKEN_PASTE(x,y) x##y\r
- #define HAVE_STDARG_PROTOTYPES 1\r
-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\r
- #define SIZEOF_FLOAT 4\r
- #define SIZEOF_DOUBLE 8\r
+ #define SIZEOF_VOIDP 8
+ #define SIZEOF_FLOAT 4
+ #define SIZEOF_DOUBLE 8
 +#define SIZEOF_SIZE_T 8
- #define HAVE_PROTOTYPES 1\r
- #define TOKEN_PASTE(x,y) x##y\r
- #define HAVE_STDARG_PROTOTYPES 1\r
-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
index 74004e9743b82dbec1024cf65b04118d796ebf90..4eee81ce7be105effd389ebcc2830ac355547111 100644 (file)
@@ -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()
index 2099840756e6302d837dcd51b5dcd6262f7adb16..8865734f81b136629e961c230380423899c75794 100644 (file)
@@ -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.
index a3d3ab487a6fea7ccdb396adda473f33300e1fcb..e4d9e1a1dd10cb4f796d0d8745c42e2febad8435 100644 (file)
@@ -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>
index a3abc750ac6dddd847a7d6b0e7abe0415cc5d7fe..da997a6ae4b8ac983ca6de500dcc53c8bad1995b 100644 (file)
@@ -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
similarity index 95%
rename from ext/mbstring/oniguruma/README.ja
rename to ext/mbstring/oniguruma/README_japanese
index 826a8e74df18daf5a170f2de92a00cc87ea37ed2..28da31b4aaf1ff469bbad68dc266b6b5df7fae97 100644 (file)
@@ -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>
index d12a46b9977257d322e5f486c7a88491a6faabe5..801e2ac5c314fbf8ea3a9c092f50991d8e5a2e63 100644 (file)
@@ -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.
index dcc7317b0ae2aa9d1ae2c2f158cce2ce6ab349cc..d73186c0f65f85e200d2b4021bf0ffa4f6f92693 100644 (file)
@@ -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:              エラーメッセージを格納する領域
+                          (å¿\85è¦\81ã\81ªã\82µã\82¤ã\82º: 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:         ä½\9cæ\88\90ã\81\95ã\82\8cã\81\9fæ­£è¦\8f表ç\8f¾ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\82\92è¿\94ã\81\99ã\82¢ã\83\89ã\83¬ã\82¹
+  2 pattern:     正規表現パターン文字列
+  3 pattern_end: æ­£è¦\8f表ç\8f¾ã\83\91ã\82¿ã\83¼ã\83³æ\96\87å­\97å\88\97ã\81®çµ\82端ã\82¢ã\83\89ã\83¬ã\82¹(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
       ONIG_ENCODING_BIG5          Big5
       ONIG_ENCODING_GB18030       GB18030
 
-      ¤Þ¤¿¤Ï¡¢¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿OnigEncodingType¥Ç¡¼¥¿¤Î¥¢¥É¥ì¥¹
+      ã\81¾ã\81\9fã\81¯ã\80\81ã\83¦ã\83¼ã\82¶ã\81\8cå®\9a義ã\81\97ã\81\9fOnigEncodingTypeã\83\87ã\83¼ã\82¿ã\81®ã\82¢ã\83\89ã\83¬ã\82¹
 
-  6 syntax:     Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡÄêµÁ
+  6 syntax:     正規表現パターン文法定義
 
       ONIG_SYNTAX_ASIS              plain text
       ONIG_SYNTAX_POSIX_BASIC       POSIX Basic RE
       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¥Ç¡¼¥¿¤Î¥¢¥É¥ì¥¹
+      ã\81¾ã\81\9fã\81¯ã\80\81ã\83¦ã\83¼ã\82¶ã\81\8cå®\9a義ã\81\97ã\81\9fOnigSyntaxTypeã\83\87ã\83¼ã\82¿ã\81®ã\82¢ã\83\89ã\83¬ã\82¹
 
-  7 err_info: ¥¨¥é¡¼¾ðÊó¤òÊÖ¤¹¤¿¤á¤Î¥¢¥É¥ì¥¹
-              onig_error_code_to_str()¤Î»°ÈÖÌܤΰú¿ô¤È¤·¤Æ»ÈÍѤ¹¤ë
+  7 err_info: ã\82¨ã\83©ã\83¼æ\83\85å ±ã\82\92è¿\94ã\81\99ã\81\9fã\82\81ã\81®ã\82¢ã\83\89ã\83¬ã\82¹
+              onig_error_code_to_str()の三番目の引数として使用する
 
 
 
             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:         ä½\9cæ\88\90ã\81\95ã\82\8cã\81\9fæ­£è¦\8f表ç\8f¾ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\82\92è¿\94ã\81\99ã\82¢ã\83\89ã\83¬ã\82¹
+  2 pattern:     正規表現パターン文字列
+  3 pattern_end: æ­£è¦\8f表ç\8f¾ã\83\91ã\82¿ã\83¼ã\83³æ\96\87å­\97å\88\97ã\81®çµ\82端ã\82¢ã\83\89ã\83¬ã\82¹(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:     ã\83\91ã\82¿ã\83¼ã\83³æ\96\87å­\97å\88\97ã\81®æ\96\87å­\97ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°
+    ci->target_enc:      å¯¾è±¡æ\96\87å­\97å\88\97ã\81®æ\96\87å­\97ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°
+    ci->syntax:          正規表現パターン文法定義
+    ci->option:          正規表現コンパイル時オプション
+    ci->case_fold_flag:  ONIG_OPTION_IGNORECASEモードでの
+                         æ\96\87å­\97æ\9b\96æ\98§ã\83\9eã\83\83ã\83\81æ\8c\87å®\9aã\83\93ã\83\83ã\83\88ã\83\95ã\83©ã\82°
 
-       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:    ã\82¨ã\83©ã\83¼æ\83\85å ±ã\82\92è¿\94ã\81\99ã\81\9fã\82\81ã\81®ã\82¢ã\83\89ã\83¬ã\82¹
+                 onig_error_code_to_str()の三番目の引数として使用する
 
 
-  °Û¤Ê¤ëʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÁȤ߹ç¤ï¤»¤Ï¡¢°Ê²¼¤Î¾ì¹ç¤Ë¤Î¤ßµö¤µ¤ì¤ë¡£
+  異なる文字エンコーディングの組み合わせは、以下の場合にのみ許される。
 
     pattern_enc: ASCII, ISO_8859_1
     target_enc:  UTF16_BE, UTF16_LE, UTF32_BE, UTF32_LE
 
 # 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:    æ¤\9c索対象æ\96\87å­\97å\88\97ã\81®çµ\82端ã\82¢ã\83\89ã\83¬ã\82¹
+  4 start:  æ¤\9c索対象æ\96\87å­\97å\88\97ã\81®æ¤\9cç´¢å\85\88é ­ä½\8dç½®ã\82¢ã\83\89ã\83¬ã\82¹
+  5 range:  æ¤\9c索対象æ\96\87å­\97å\88\97ã\81®æ¤\9cç´¢çµ\82äº\86ä½\8dç½®ã\82¢ã\83\89ã\83¬ã\82¹
+    前方探索  (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:    æ¤\9c索対象æ\96\87å­\97å\88\97ã\81®çµ\82端ã\82¢ã\83\89ã\83¬ã\82¹
+  4 at:     æ¤\9c索対象æ\96\87å­\97å\88\97ã\81®æ¤\9cç´¢ã\82¢ã\83\89ã\83¬ã\82¹
+  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,
                 int (*scan_callback)(int, int, OnigRegion*, void*),
                 void* callback_arg)
 
-  Àµµ¬É½¸½¤Çʸ»úÎó¤ò¥¹¥­¥ã¥ó¤·¤Æ¡¢¥Þ¥Ã¥Á¥ó¥°¤¹¤ëËè¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¡£
+  正規表現で文字列をスキャンして、マッチングする毎にコールバック関数を呼び出す。
 
-  Àµ¾ï½ªÎ»: ¥Þ¥Ã¥Á²ó¿ô (0²ó¤â´Þ¤á¤ë)
-  ¥¨¥é¡¼:   ¥¨¥é¡¼¥³¡¼¥É (< 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:    æ¤\9c索対象æ\96\87å­\97å\88\97ã\81®çµ\82端ã\82¢ã\83\89ã\83¬ã\82¹
+  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:      æ\96°ã\81\97ã\81\84ã\82µã\82¤ã\82º
 
 
 # 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:  æ\8d\95ç\8d²å¼\8fé\9b\86å\90\88\82°ã\83«ã\83¼ã\83\97\90\8dã\81®çµ\82端ã\82¢ã\83\89ã\83¬ã\82¹
+  4 num_list:  ç\95ªå\8f·ã\83ªã\82¹ã\83\88ã\82\92è¿\94ã\81\99ã\82¢ã\83\89ã\83¬ã\82¹
 
 
 # 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:  æ\8d\95ç\8d²å¼\8fé\9b\86å\90\88\82°ã\83«ã\83¼ã\83\97\90\8dã\81®çµ\82端ã\82¢ã\83\89ã\83¬ã\82¹
+  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)
 # 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:      ã\82³ã\83¼ã\83«ã\83\90ã\83\83ã\82¯ã\82\92è¡\8cã\81ªã\81\86ã\82¿ã\82¤ã\83\9fã\83³ã\82°
 
     ONIG_TRAVERSE_CALLBACK_AT_FIRST:
-        ºÇ½é¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤·¤Æ¡¢»Ò¥Î¡¼¥É¤ò½ä²ó
+        最初にコールバックして、子ノードを巡回
     ONIG_TRAVERSE_CALLBACK_AT_LAST:
-        »Ò¥Î¡¼¥É¤ò½ä²ó¤·¤Æ¡¢¥³¡¼¥ë¥Ð¥Ã¥¯
+        å­\90ã\83\8eã\83¼ã\83\89ã\82\92å·¡å\9b\9eã\81\97ã\81¦ã\80\81ã\82³ã\83¼ã\83«ã\83\90ã\83\83ã\82¯
     ONIG_TRAVERSE_CALLBACK_AT_BOTH:
-        ºÇ½é¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤·¤Æ¡¢»Ò¥Î¡¼¥É¤ò½ä²ó¡¢ºÇ¸å¤Ë¤â¤¦°ìÅÙ¥³¡¼¥ë¥Ð¥Ã¥¯
+        æ\9c\80å\88\9dã\81«ã\82³ã\83¼ã\83«ã\83\90ã\83\83ã\82¯ã\81\97ã\81¦ã\80\81å­\90ã\83\8eã\83¼ã\83\89ã\82\92å·¡å\9b\9eã\80\81æ\9c\80å¾\8cã\81«ã\82\82ã\81\86ä¸\80度ã\82³ã\83¼ã\83«ã\83\90ã\83\83ã\82¯
 
-  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:    ã\82³ã\83¼ã\83«ã\83\90ã\83\83ã\82¯ã\81\8cå\91¼ã\81³å\87ºã\81\95ã\82\8cã\81\9fã\82¿ã\82¤ã\83\9fã\83³ã\82°
                       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:   æ\96\87å­\97ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°
+  2 start: æ\96\87å­\97å\88\97ã\81®å\85\88é ­ã\82¢ã\83\89ã\83¬ã\82¹
+  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:   æ\96\87å­\97ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°
+  2 start: æ\96\87å­\97å\88\97ã\81®å\85\88é ­ã\82¢ã\83\89ã\83¬ã\82¹
+  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:   æ\96\87å­\97ã\82¨ã\83³ã\82³ã\83¼ã\83\87ã\82£ã\83³ã\82°
+  2 start: æ\96\87å­\97å\88\97ã\81®å\85\88é ­ã\82¢ã\83\89ã\83¬ã\82¹
+  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)
 # 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
           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ã\83\95ã\83©ã\82°
 
 
 # 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
index c00f0304537eeb268cdc8362199211e901844b6b..dfbd7fac798f90b1b279c2ee7cc7c352b4da46d4 100644 (file)
@@ -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
index b8f4aa92d861e91f6b19aac0af567f71604a1d73..ffb25f4a6c9a1833c06b2affa633b7eeafae3f35 100644 (file)
@@ -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
index 168541597c0f3a5a3f76b0ced05bcd5e72ddf9ef..64f9bb241cd4da99eb17ce50ebee9968e16a2aaa 100644 (file)
@@ -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.
index 5c09100400992e32c019e1f4d67a55ef1c3fd06c..4679818ac23d11789025fe59c81d9944fbd8dd46 100644 (file)
@@ -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. 基本要素
 
-  \       ÂàÈò½¤¾þ (¥¨¥¹¥±¡¼¥×)  Àµµ¬É½¸½µ­¹æ¤ÎÍ­¸ú/̵¸ú¤ÎÀ©¸æ
-  |       ÁªÂò»Ò
-  (...)   ¼°½¸¹ç   (¥°¥ë¡¼¥×)
-  [...]   Ê¸»ú½¸¹ç (ʸ»ú¥¯¥é¥¹)
+  \       退避修飾 (エスケープ)  正規表現記号の有効/無効の制御
+  |       選択子
+  (...)   式集合   (グループ)
+  [...]   æ\96\87å­\97é\9b\86å\90\88 (æ\96\87å­\97ã\82¯ã\83©ã\82¹)
 
 
-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
 
     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
                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, ...
 
     \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}
 
 
 
-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. Æȼ«³ÈÄ¥µ¡Ç½
+è£\9cè¨\98 2. ç\8b¬è\87ªæ\8b¡å¼µæ©\9fè\83½
 
-   + 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¤ÈÈæ³Ó¤·¤Æ¸ºß¤·¤Ê¤¤µ¡Ç½
+è£\9cè¨\98 3. Perl 5.8.0ã\81¨æ¯\94è¼\83ã\81\97ã\81¦å­\98å\9c¨ã\81\97ã\81ªã\81\84æ©\9fè\83½
 
    + \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. ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤¬¡¢´ûÄêÃͤǤÏÍ­¸ú¤Ë¤·¤Æ¤¤¤Ê¤¤µ¡Ç½
+è£\9cè¨\98 5. å®\9fè£\85ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81\8cã\80\81æ\97¢å®\9aå\80¤ã\81§ã\81¯æ\9c\89å\8a¹ã\81«ã\81\97ã\81¦ã\81\84ã\81ªã\81\84æ©\9fè\83½
 
-   + Êá³ÍÍúÎò»²¾È
+   + 捕獲履歴参照
 
-     (?@...) ¤È (?@<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"
 
-     ¤³¤ì¤òÄ´¤Ù¤ë¤³¤È¤Ï²Äǽ¤Ç¤Ï¤¢¤ë¤¬¡¢ÃÙ¤¯¤Ê¤ë¤Î¤Ç¹Ô¤Ê¤ï¤Ê¤¤¡£
+     これを調べることは可能ではあるが、遅くなるので行なわない。
 
-     Ê¸»úÎó¤È¤·¤Æ¡¢¤½¤Î¤è¤¦¤Ê¥Ð¥¤¥ÈÎó¤ò»ØÄꤷ¤¿¾ì¹ç¤ÎÆ°ºî¤ÏÊݾڤ·¤Ê¤¤¡£
+     文字列として、そのようなバイト列を指定した場合の動作は保証しない。
 
-½ª¤ê
+終り
index dedc6587c851973d822d9065adbff79aeb9c6977..8521f0c72c65ac0546188799dbca9fd0cbb3c06b 100644 (file)
 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
index 79e4de0e0fdccd790a3b19bd589a90083a5fa80e..f2c81768f966dc5f9f26b764628c2e511098b8c4 100755 (executable)
@@ -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>
 <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>
index 7070dfe243b15000f627ac804b397b346fd7375a..8beadd814ba985a2238d296312793a9e950a9385 100644 (file)
@@ -8,7 +8,7 @@
 <h1>鬼車</h1>
 
 <p>
-(c) K.Kosako, 最終更新: 2017/05/26
+(c) K.Kosako, 最終更新: 2018/01/26
 </p>
 
 <dl>
 <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>
index 8a6bc1f02f56b8a59110388ee9edd7eb2a72d82b..bc713abdd30766fa561a45125cf8262c1e5182ff 100644 (file)
@@ -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;
index 6626f144977bc1c55c13cd1559cdc5524af0f7c7..42c3bcea431eded711c547b033b6a7b814e8f1cb 100644 (file)
@@ -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);
       }
     }
   }
index 2af371751c927f7210df30763b5394a4f2b78d44..da0f9195cb17c97ea73a2f11e313ad588efe9ca1 100644 (file)
@@ -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 */
 
index 7e5b3dfacb23f7adb8b572ee38ffbcc36907a6f6..946b20c74a2a4fc651d1eb8143c120bac3664577 100644 (file)
@@ -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));
index 69a5b96f873ccead8454086244c5411b1f25ca85..7217432f6e046f6ad0679ad3118378b5fc92fb4c 100644 (file)
@@ -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
 
 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 ENCLOSURE_OPTION:
+    r = compile_option_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_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(qn->target, reg);
+      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;
 
@@ -1499,89 +1493,163 @@ compile_anchor_node(AnchorNode* node, regex_t* reg)
   return r;
 }
 
+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 NT_ENCLOSE:
-    r = compile_length_enclose_node(NENCLOSE(node), reg);
+  case NODE_ENCLOSURE:
+    r = compile_length_enclosure_node(ENCLOSURE_(node), reg);
     break;
 
-  case NT_ANCHOR:
-    r = compile_length_anchor_node(NANCHOR(node), reg);
+  case NODE_ANCHOR:
+    r = compile_length_anchor_node(ANCHOR_(node), reg);
+    break;
+
+  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 NODE_ENCLOSURE:
+    r = compile_enclosure_node(ENCLOSURE_(node), reg, env);
     break;
 
-  case NT_ENCLOSE:
-    r = compile_enclose_node(NENCLOSE(node), reg);
+  case NODE_ANCHOR:
+    r = compile_anchor_node(ANCHOR_(node), reg, env);
     break;
 
-  case NT_ANCHOR:
-    r = compile_anchor_node(NANCHOR(node), reg);
+  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 ONIGENC_CTYPE_WORD:
-          if (NCTYPE(y)->not == 0) {
-            if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {
-              for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
+      case NODE_CTYPE:
+        switch (CTYPE_(y)->ctype) {
+        case CTYPE_ANYCHAR:
+          return 0;
+          break;
+
+        case ONIGENC_CTYPE_WORD:
+          if (CTYPE_(y)->not == 0) {
+            if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {
+              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,384 +2584,511 @@ 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);
+  case NODE_CTYPE:
+  case NODE_CCLASS:
+    len = ONIGENC_MBC_MAXLEN_DIST(env->enc);
     break;
 
-  case NT_CCLASS:
-  case NT_CANY:
-    *max = 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;
+  }
+
   return r;
 }
 
 
-#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 (en->type == ENCLOSURE_MEMORY) {
+        if (NODE_IS_RECURSION(node) && NODE_IS_CALLED(node)) {
+          int ret;
+
+          NODE_STATUS_ADD(node, NST_MARK1);
 
-      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);
+          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,228 +3164,154 @@ 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;
-  }
-
-  return r;
-}
-
-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;
+      state1 = state;
+      if (NODE_IS_RECURSION(node))
+        state1 |= IN_RECURSION;
 
-#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;
-        }
+      ret = recursive_call_check_trav(NODE_BODY(node), 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;
+      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;
         }
-        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;
-        }
-        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;
+        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;
         }
       }
-#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);
+  AnchorNode* an = ANCHOR_(node);
 
-  /* fprintf(stderr, "setup_look_behind: %x\n", (int )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,408 +3736,806 @@ 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;
 
-  case NT_ALT:
-    {
-      int ret;
-      do {
-        ret = setup_comb_exp_check(NCAR(node), state, env);
-        r |= ret;
-      } while (ret >= 0 && IS_NOT_NULL(node = NCDR(node)));
+#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_QTFR:
+  case NODE_QUANT:
     {
-      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;
-                  }
-                }
-              }
-            }
-          }
-        }
+      QuantNode* qn = QUANT_(node);
+      if (qn->upper != 0) {
+        r = quantifiers_memory_node_info(NODE_BODY(node));
       }
+    }
+    break;
 
-      if (state & CEC_IN_FINITE_REPEAT) {
-        qn->comb_exp_check_num = -1;
-      }
-      else {
-        if (IS_REPEAT_INFINITE(qn->upper)) {
-          var_num = CEC_INFINITE_NUM;
-          child_state |= CEC_IN_INFINITE_REPEAT;
-        }
-        else {
-          var_num = qn->upper - qn->lower;
+  case NODE_ENCLOSURE:
+    {
+      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;
 
-        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 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;
 
-      r = setup_comb_exp_check(target, child_state, env);
-      r |= add_state;
+    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 (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 NT_ENCLOSE:
-    {
-      EncloseNode* en = NENCLOSE(node);
+  case NODE_QUANT:
+    setup_call2_call(NODE_BODY(node));
+    break;
 
-      switch (en->type) {
-      case ENCLOSE_MEMORY:
-        {
-          if (env->curr_max_regnum < en->regnum)
-            env->curr_max_regnum = en->regnum;
+  case NODE_ANCHOR:
+    if (ANCHOR_HAS_BODY(ANCHOR_(node)))
+      setup_call2_call(NODE_BODY(node));
+    break;
+
+  case NODE_ENCLOSURE:
+    {
+      EnclosureNode* en = ENCLOSURE_(node);
 
-          r = setup_comb_exp_check(en->target, state, env);
+      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);
         }
-        break;
+      }
+      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 {
+        setup_call2_call(NODE_BODY(node));
+      }
+    }
+    break;
 
-      default:
-        r = setup_comb_exp_check(en->target, state, env);
-        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;
 
-#ifdef USE_SUBEXP_CALL
-  case NT_CALL:
-    if (IS_CALL_RECURSION(NCALL(node)))
-      env->has_recursion = 1;
+  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 = setup_comb_exp_check(NCALL(node)->target, state, env);
+      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--;
+        }
+        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;
+
+  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;
-#endif
 
   default:
+    r = 0;
     break;
   }
 
   return r;
 }
-#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)
 
-/* setup_tree does the following work.
- 1. check empty loop. (set qn->target_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].
- 5. find invalid patterns in look-behind.
- 6. expand repeated string.
- */
 static int
-setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
+setup_call2(Node* node)
 {
-  int type;
   int r = 0;
 
-  type = NTYPE(node);
-  switch (type) {
-  case NT_LIST:
+  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));
+
     {
-      Node* prev = NULL_NODE;
-      do {
-        r = setup_tree(NCAR(node), reg, state, env);
-        if (IS_NOT_NULL(prev) && r == 0) {
-          r = next_setup(prev, NCAR(node), reg);
+      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;
         }
-        prev = NCAR(node);
-      } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+        if (IS_NOT_NULL(en->te.Else))
+          r = setup_call2(en->te.Else);
+      }
     }
     break;
 
-  case NT_ALT:
+  case NODE_CALL:
+    if (! NODE_IS_IN_ZERO_REPEAT(node)) {
+      setup_call2_call(node);
+    }
+    break;
+
+  default:
+    break;
+  }
+
+  return r;
+}
+
+
+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 {
-      r = setup_tree(NCAR(node), reg, (state | IN_ALT), env);
-    } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
+      setup_called_state_call(NODE_CAR(node), state);
+    } while (IS_NOT_NULL(node = NODE_CDR(node)));
     break;
 
-  case NT_CCLASS:
+  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_STR:
-    if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {
-      r = expand_case_fold_string(node, reg);
+  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_call(NODE_ANCHOR_BODY(an), state);
+        break;
+      default:
+        break;
+      }
     }
     break;
 
-  case NT_CTYPE:
-  case NT_CANY:
+  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;
 
-#ifdef USE_SUBEXP_CALL
-  case NT_CALL:
+  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 NT_BREF:
+  case NODE_ENCLOSURE:
     {
-      int i;
-      int* p;
-      Node** nodes = SCANENV_MEM_NODES(env);
-      BRefNode* br = NBREF(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]);
-#ifdef USE_BACKREF_WITH_LEVEL
-        if (IS_BACKREF_NEST_LEVEL(br)) {
-          BIT_STATUS_ON_AT(env->bt_mem_end, p[i]);
-        }
-#endif
-        SET_ENCLOSE_STATUS(nodes[p[i]], NST_MEM_BACKREFED);
+      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 NT_QTFR:
+  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:
     {
-      OnigLen d;
-      QtfrNode* qn = NQTFR(node);
-      Node* target = qn->target;
+      AnchorNode* an = ANCHOR_(node);
 
-      if ((state & IN_REPEAT) != 0) {
-        qn->state |= NST_IN_REPEAT;
+      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:
+        break;
       }
+    }
+    break;
 
-      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;
-          }
+  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
-#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;  /* /(?:)+/ ==> // */
-            }
-          }
+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
+    }
+  }
 
-      state |= IN_REPEAT;
-      if (qn->lower != qn->upper)
-        state |= IN_VAR_REPEAT;
-      r = setup_tree(target, reg, state, env);
-      if (r) break;
+  if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+    state |= IN_REAL_REPEAT;
+  if (qn->lower != qn->upper)
+    state |= IN_VAR_REPEAT;
 
-      /* expand string */
+  r = setup_tree(body, reg, state, env);
+  if (r != 0) return r;
+
+  /* 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: */
-          }
+  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->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);
-        }
+  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;
       }
-#endif
     }
-    break;
+    else {
+      qn->head_exact = get_head_value_node(NODE_BODY(node), 1, reg);
+    }
+  }
+#endif
 
-  case NT_ENCLOSE:
-    {
-      EncloseNode* en = NENCLOSE(node);
+  return r;
+}
 
-      switch (en->type) {
-      case ENCLOSE_OPTION:
-        {
-          OnigOptionType options = reg->options;
-          reg->options = NENCLOSE(node)->option;
-          r = setup_tree(NENCLOSE(node)->target, reg, state, env);
-          reg->options = options;
-        }
-        break;
+/* setup_tree does the following work.
+ 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].
+ 5. find invalid patterns in look-behind.
+ 6. expand repeated string.
+ */
+static int
+setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
+{
+  int r = 0;
 
-      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); */
+  switch (NODE_TYPE(node)) {
+  case NODE_LIST:
+    {
+      Node* prev = NULL_NODE;
+      do {
+        r = setup_tree(NODE_CAR(node), reg, state, env);
+        if (IS_NOT_NULL(prev) && r == 0) {
+          r = next_setup(prev, NODE_CAR(node), reg);
         }
-        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);
-        break;
+        prev = NODE_CAR(node);
+      } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
+    }
+    break;
 
-      case ENCLOSE_STOP_BACKTRACK:
-        {
-          Node* target = en->target;
-          r = setup_tree(target, reg, state, env);
-          if (NTYPE(target) == NT_QTFR) {
-            QtfrNode* tqn = NQTFR(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);
-            }
-          }
-        }
-        break;
-      }
+  case NODE_ALT:
+    do {
+      r = setup_tree(NODE_CAR(node), reg, (state | IN_ALT), env);
+    } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
+    break;
+
+  case NODE_STRING:
+    if (IS_IGNORECASE(reg->options) && !NODE_STRING_IS_RAW(node)) {
+      r = expand_case_fold_string(node, reg);
     }
     break;
 
-  case NT_ANCHOR:
+  case NODE_BACKREF:
     {
-      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;
+      int i;
+      int* p;
+      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;
+        MEM_STATUS_ON(env->backrefed_mem, p[i]);
+        MEM_STATUS_ON(env->bt_mem_start, p[i]);
+#ifdef USE_BACKREF_WITH_LEVEL
+        if (NODE_IS_NEST_LEVEL(node)) {
+          MEM_STATUS_ON(env->bt_mem_end, p[i]);
+        }
+#endif
+      }
+    }
+    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 )
+  case NODE_ENCLOSURE:
+    {
+      EnclosureNode* en = ENCLOSURE_(node);
 
-#define ALLOWED_ENCLOSE_IN_LB       ( ENCLOSE_MEMORY | ENCLOSE_OPTION )
-#define ALLOWED_ENCLOSE_IN_LB_NOT   ENCLOSE_OPTION
+      switch (en->type) {
+      case ENCLOSURE_OPTION:
+        {
+          OnigOptionType options = reg->options;
+          reg->options = ENCLOSURE_(node)->o.options;
+          r = setup_tree(NODE_BODY(node), reg, state, env);
+          reg->options = options;
+        }
+        break;
 
-#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 )
+      case ENCLOSURE_MEMORY:
+#ifdef USE_CALL
+        state |= en->m.called_state;
+#endif
 
-#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 )
+        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);
+        }
+        r = setup_tree(NODE_BODY(node), reg, state, env);
+        break;
 
-      case ANCHOR_LOOK_BEHIND:
+      case ENCLOSURE_STOP_BACKTRACK:
         {
-          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);
+          Node* target = NODE_BODY(node);
+          r = setup_tree(target, reg, state, env);
+          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... */
+              if (NODE_IS_SIMPLE_TYPE(NODE_BODY(target)))
+                NODE_STATUS_ADD(node, NST_STOP_BT_SIMPLE_REPEAT);
+            }
+          }
         }
         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)
 {
index 9d8e5abe2f408934a7c51550c2033cab1c7eca39..7ded5a81e44c75f7ae0e65d2ad121947e5756f72 100644 (file)
@@ -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
@@ -840,6 +840,16 @@ onigenc_minimum_property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)
   return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
 }
 
+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)
index ff4b04b2661a89f0ed2a7821b2bad33c4ced5d21..cda3bcd8feb8bc028e476933a531aa51a8266077 100644 (file)
@@ -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 */
index dad91c15abcf3a9a1078978932a05e5c5ba873d6..4c10d065f9860b83ce080fc6cd3b8084bf0a0731 100644 (file)
@@ -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++;
       }
     }
 
index 6796e58fceabb187b28c1a1bb9ef3ddea8e6d10a..45fbc69f0a47da1b3228f4563179fd96736be327 100644 (file)
@@ -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
 
 #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;
index 1903174e5d3a96d904cd514b1459e0227a05bc09..996d043f568ef62ab6868b771ce9e418acfa70a8 100644 (file)
@@ -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;
index 1de82fb078d2daa33209fbac8c53f132b884facd..50eb9b434e1278fac86b3e86457e724ecf886627 100644 (file)
@@ -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;
index 4c9853b39dcb7ae727227b6ba5e3c8d30a95a8bd..95c8446c03bb54ebc6bc32752728f477de6412ec 100644 (file)
@@ -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
 #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__) || \
 
 /* 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__)
 #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
 /* */
 #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
 #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
 #endif
 #endif
 
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
 #ifdef __BORLANDC__
 #include <malloc.h>
 #endif
 # 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
 #ifdef MAX
 #undef MAX
 #endif
+
 #define MIN(a,b) (((a)>(b))?(b):(a))
 #define MAX(a,b) (((a)<(b))?(b):(a))
 
 #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{\
 #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;
index 55b94af43b0a12bd509d058fec7ac2eca2e500ab..0d29bb27c308c7b0130c377ab783a0fa395c9fdd 100644 (file)
@@ -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"
 
 #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;
+}
+
+static Node*
+node_new_anychar_with_fixed_option(OnigOptionType option)
+{
+  CtypeNode* ct;
+  Node* node;
 
-  SET_NTYPE(node, NT_CANY);
+  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;
-  return node;
-}
+  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_enclosure(int type)
+{
+  return node_new_enclosure(type);
+}
+
+static Node*
+node_new_enclosure_if_else(Node* cond, Node* Then, Node* Else)
+{
+  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)
+    NODE_STATUS_ADD(node, NST_NAMED_GROUP);
+
+  return node;
+}
+
+static Node*
+node_new_option(OnigOptionType option)
+{
+  Node* node = node_new_enclosure(ENCLOSURE_OPTION);
+  CHECK_NULL_RETURN(node);
+  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;
 
-extern Node*
-onig_node_new_enclose(int type)
-{
-  return node_new_enclose(type);
-}
+  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;
 
-static Node*
-node_new_enclose_memory(OnigOptionType option, int is_named)
-{
-  Node* node = node_new_enclose(ENCLOSE_MEMORY);
-  CHECK_NULL_RETURN(node);
-  if (is_named != 0)
-    SET_ENCLOSE_STATUS(node, NST_NAMED_GROUP);
+  ns[3] = NULL_NODE;
+  ns[5] = NULL_NODE;
 
-#ifdef USE_SUBEXP_CALL
-  NENCLOSE(node)->option = option;
-#endif
-  return node;
-}
+  r = node_new_update_var_gimmick(&ns[3], UPDATE_VAR_S_FROM_STACK, id2, env);
+  if (r != 0) goto err;
 
-static Node*
-node_new_option(OnigOptionType option)
-{
-  Node* node = node_new_enclose(ENCLOSE_OPTION);
-  CHECK_NULL_RETURN(node);
-  NENCLOSE(node)->option = option;
-  return node;
+  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,30 +4651,106 @@ 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;
 
-    default:
-      /* string */
-      break;
+    default:
+      /* string */
+      break;
+    }
+  }
+
+#ifdef USE_VARIABLE_META_CHARS
+ out:
+#endif
+  *src = p;
+  return tok->type;
+}
+
+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[])
+{
+  int i, r;
+  OnigCodePoint j;
+
+  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 >= sb_out) {
+          if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {
+            r = add_code_range_to_buf(&(cc->mbuf), j,
+                                      ONIGENC_CODE_RANGE_TO(mbr, i));
+            if (r != 0) return r;
+            i++;
+          }
+
+          goto sb_end;
+        }
+        BITSET_SET_BIT(cc->bs, j);
+      }
+    }
+
+  sb_end:
+    for ( ; i < n; i++) {
+      r = add_code_range_to_buf(&(cc->mbuf),
+                                ONIGENC_CODE_RANGE_FROM(mbr, i),
+                                ONIGENC_CODE_RANGE_TO(mbr, i));
+      if (r != 0) return r;
+    }
+  }
+  else {
+    OnigCodePoint prev = 0;
+
+    for (i = 0; i < n; i++) {
+      for (j = prev; j < ONIGENC_CODE_RANGE_FROM(mbr, i); j++) {
+        if (j >= sb_out) {
+          goto sb_end2;
+        }
+        BITSET_SET_BIT(cc->bs, j);
+      }
+      prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;
+    }
+    for (j = prev; j < sb_out; j++) {
+      BITSET_SET_BIT(cc->bs, j);
+    }
+
+  sb_end2:
+    prev = sb_out;
+
+    for (i = 0; i < n; i++) {
+      if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) {
+        r = add_code_range_to_buf(&(cc->mbuf), prev,
+                                  ONIGENC_CODE_RANGE_FROM(mbr, i) - 1);
+        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;
   }
 
-#ifdef USE_VARIABLE_META_CHARS
- out:
-#endif
-  *src = p;
-  return tok->type;
+ end:
+  return 0;
 }
 
 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[])
+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);
 
@@ -3780,10 +4758,12 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
     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)) {
-            r = add_code_range_to_buf(&(cc->mbuf), j,
-                                      ONIGENC_CODE_RANGE_TO(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++;
           }
@@ -3796,9 +4776,11 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
 
   sb_end:
     for ( ; i < n; i++) {
-      r = add_code_range_to_buf(&(cc->mbuf),
-                                ONIGENC_CODE_RANGE_FROM(mbr, i),
-                                ONIGENC_CODE_RANGE_TO(mbr, 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;
     }
   }
@@ -3806,13 +4788,21 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
     OnigCodePoint prev = 0;
 
     for (i = 0; i < n; i++) {
-      for (j = prev; j < ONIGENC_CODE_RANGE_FROM(mbr, i); j++) {
-        if (j >= sb_out) {
-          goto sb_end2;
+      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) + 1;
+      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);
@@ -3822,39 +4812,58 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
     prev = sb_out;
 
     for (i = 0; i < n; i++) {
-      if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) {
-        r = add_code_range_to_buf(&(cc->mbuf), prev,
-                                  ONIGENC_CODE_RANGE_FROM(mbr, i) - 1);
+      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) + 1;
-    }
-    if (prev < 0x7fffffff) {
-      r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff);
-      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;
index c9d1fe8a6ec4f496d0f8131ad49800f592db952f..a07e187487788988a557b06de4de7d1fd0daabd5 100644 (file)
@@ -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
 #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 */
index bbe52dc0f16dbb1f647d6ddc25857cf4b792ec1f..608c031c1f979e6aae3180d7daabe17c3e1f78b5 100644 (file)
@@ -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 }
   };
index 0a4d1da3757d7a4da27aacea60f53e7d2fd06fbf..3817d388238643d30368db6ce51a3b4321d83c7d 100644 (file)
@@ -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;
index 245a001b57b7ac3908af2d0740c73684ebf7b5f9..03754e772894db784d12e2389bb07653261e9157 100644 (file)
@@ -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);
index 153e7ca2e0de60ebcfdac5d47531f2730d464793..88b8d0299cbbfac59ffc45129904e676e8c76b5c 100644 (file)
@@ -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) {
index d4fe867f9e35d42c1db845240abad9367c515989..e5fd1a15d9e689d2a93734bc36a7f980f2d68bbd 100644 (file)
@@ -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;
 }
index 8812ca2fd0f308633973e3ad9592a50056707a41..e58593789ecdb41df75dca32cc6a530970be63c5 100644 (file)
@@ -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
 
 #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 (file)
index 0000000..2304407
--- /dev/null
@@ -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 }
+};
index 21512118e6511cabfe29462e96afbdf8f67e3936..ffaa661726f40d4a6444ccb0445b5d5417dc3afc 100644 (file)
@@ -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,
 
index 07cfa4ec5ec9c1ec929299de3fe0447e64a0ac04..8a45c9d96f708d360e3f8f9d9e2013d31dd23e39 100644 (file)
@@ -69,7 +69,7 @@ __attribute__ ((__gnu_inline__))
 int
 unicode_fold2_key(OnigCodePoint codes[])
 {
-  static const int wordlist[] =
+  static const short int wordlist[] =
     {
 
       101,
index 1b4d9d41b7b3692c1b1fac3844efcd3a65684ebe..deb9d222e6171456ba556b8f4be605f251899b6c 100644 (file)
@@ -69,7 +69,7 @@ __attribute__ ((__gnu_inline__))
 int
 unicode_fold3_key(OnigCodePoint codes[])
 {
-  static const int wordlist[] =
+  static const short int wordlist[] =
     {
 
       62,
index 4ca438fea6d6ac62f1593b91b5cfec40ba837029..b25392b84694b1cc46cdb8c3249da95d15136be0 100644 (file)
@@ -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,7403 +6199,1283 @@ CR_C[] = { 616,
 0xe01f0, 0x10ffff,
 }; /* END of CR_C */
 
-/* PROPERTY: 'Cc': General Category */
-#define CR_Cc CR_Cntrl
+/* PROPERTY: 'Canadian_Aboriginal': Script */
+static const OnigCodePoint
+CR_Canadian_Aboriginal[] = { 2,
+0x1400, 0x167f,
+0x18b0, 0x18f5,
+}; /* END of CR_Canadian_Aboriginal */
 
-/* PROPERTY: 'Cf': General Category */
+/* PROPERTY: 'Carian': Script */
 static const OnigCodePoint
-CR_Cf[] = { 17,
+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,
-0x06dd, 0x06dd,
+0x0640, 0x0640,
+0x064b, 0x065f,
+0x0670, 0x0670,
+0x06d6, 0x06dd,
+0x06df, 0x06e8,
+0x06ea, 0x06ed,
 0x070f, 0x070f,
-0x180e, 0x180e,
-0x200b, 0x200f,
-0x202a, 0x202e,
-0x2060, 0x2064,
-0x2066, 0x206f,
-0xfeff, 0xfeff,
-0xfff9, 0xfffb,
-0x110bd, 0x110bd,
-0x1bca0, 0x1bca3,
-0x1d173, 0x1d17a,
-0xe0001, 0xe0001,
-0xe0020, 0xe007f,
-}; /* END of CR_Cf */
-
-/* PROPERTY: 'Cn': General Category */
-static const OnigCodePoint
-CR_Cn[] = { 613,
-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, 0xd7ff,
-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, 0xeffff,
-0xffffe, 0xfffff,
-0x10fffe, 0x10ffff,
-}; /* END of CR_Cn */
-
-/* PROPERTY: 'Co': General Category */
-static const OnigCodePoint
-CR_Co[] = { 3,
-0xe000, 0xf8ff,
-0xf0000, 0xffffd,
-0x100000, 0x10fffd,
-}; /* END of CR_Co */
-
-/* PROPERTY: 'Cs': General Category */
-static const OnigCodePoint
-CR_Cs[] = { 1,
-0xd800, 0xdfff,
-}; /* END of CR_Cs */
-
-/* PROPERTY: 'L': Major Category */
-static const OnigCodePoint
-CR_L[] = { 554,
-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,
-0x16f1, 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,
-0x2119, 0x211d,
-0x2124, 0x2124,
-0x2126, 0x2126,
-0x2128, 0x2128,
-0x212a, 0x212d,
-0x212f, 0x2139,
-0x213c, 0x213f,
-0x2145, 0x2149,
-0x214e, 0x214e,
-0x2183, 0x2184,
-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,
-0x2e2f, 0x2e2f,
-0x3005, 0x3006,
-0x3031, 0x3035,
-0x303b, 0x303c,
-0x3041, 0x3096,
-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, 0xa61f,
-0xa62a, 0xa62b,
-0xa640, 0xa66e,
-0xa67f, 0xa69d,
-0xa6a0, 0xa6e5,
-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,
-0x10280, 0x1029c,
-0x102a0, 0x102d0,
-0x10300, 0x1031f,
-0x10330, 0x10340,
-0x10342, 0x10349,
-0x10350, 0x10375,
-0x10380, 0x1039d,
-0x103a0, 0x103c3,
-0x103c8, 0x103cf,
-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,
-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_L */
-
-/* PROPERTY: 'LC': General Category */
-static const OnigCodePoint
-CR_LC[] = { 122,
-0x0041, 0x005a,
-0x0061, 0x007a,
-0x00b5, 0x00b5,
-0x00c0, 0x00d6,
-0x00d8, 0x00f6,
-0x00f8, 0x01ba,
-0x01bc, 0x01bf,
-0x01c4, 0x0293,
-0x0295, 0x02af,
-0x0370, 0x0373,
-0x0376, 0x0377,
-0x037b, 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, 0x1d2b,
-0x1d6b, 0x1d77,
-0x1d79, 0x1d9a,
-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,
-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,
-0x2183, 0x2184,
-0x2c00, 0x2c2e,
-0x2c30, 0x2c5e,
-0x2c60, 0x2c7b,
-0x2c7e, 0x2ce4,
-0x2ceb, 0x2cee,
-0x2cf2, 0x2cf3,
-0x2d00, 0x2d25,
-0x2d27, 0x2d27,
-0x2d2d, 0x2d2d,
-0xa640, 0xa66d,
-0xa680, 0xa69b,
-0xa722, 0xa76f,
-0xa771, 0xa787,
-0xa78b, 0xa78e,
-0xa790, 0xa7ad,
-0xa7b0, 0xa7b7,
-0xa7fa, 0xa7fa,
-0xab30, 0xab5a,
-0xab60, 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,
-}; /* END of CR_LC */
-
-/* PROPERTY: 'Ll': General Category */
-static const OnigCodePoint
-CR_Ll[] = { 630,
-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, 0x0138,
-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, 0x018d,
-0x0192, 0x0192,
-0x0195, 0x0195,
-0x0199, 0x019b,
-0x019e, 0x019e,
-0x01a1, 0x01a1,
-0x01a3, 0x01a3,
-0x01a5, 0x01a5,
-0x01a8, 0x01a8,
-0x01aa, 0x01ab,
-0x01ad, 0x01ad,
-0x01b0, 0x01b0,
-0x01b4, 0x01b4,
-0x01b6, 0x01b6,
-0x01b9, 0x01ba,
-0x01bd, 0x01bf,
-0x01c6, 0x01c6,
-0x01c9, 0x01c9,
-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, 0x01f0,
-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,
-0x0221, 0x0221,
-0x0223, 0x0223,
-0x0225, 0x0225,
-0x0227, 0x0227,
-0x0229, 0x0229,
-0x022b, 0x022b,
-0x022d, 0x022d,
-0x022f, 0x022f,
-0x0231, 0x0231,
-0x0233, 0x0239,
-0x023c, 0x023c,
-0x023f, 0x0240,
-0x0242, 0x0242,
-0x0247, 0x0247,
-0x0249, 0x0249,
-0x024b, 0x024b,
-0x024d, 0x024d,
-0x024f, 0x0293,
-0x0295, 0x02af,
-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, 0x03fc,
-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,
-0x1d00, 0x1d2b,
-0x1d6b, 0x1d77,
-0x1d79, 0x1d9a,
-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, 0x1e9d,
-0x1e9f, 0x1e9f,
-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,
-0x210a, 0x210a,
-0x210e, 0x210f,
-0x2113, 0x2113,
-0x212f, 0x212f,
-0x2134, 0x2134,
-0x2139, 0x2139,
-0x213c, 0x213d,
-0x2146, 0x2149,
-0x214e, 0x214e,
-0x2184, 0x2184,
-0x2c30, 0x2c5e,
-0x2c61, 0x2c61,
-0x2c65, 0x2c66,
-0x2c68, 0x2c68,
-0x2c6a, 0x2c6a,
-0x2c6c, 0x2c6c,
-0x2c71, 0x2c71,
-0x2c73, 0x2c74,
-0x2c76, 0x2c7b,
-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, 0x2ce4,
-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, 0xa731,
-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,
-0xa771, 0xa778,
-0xa77a, 0xa77a,
-0xa77c, 0xa77c,
-0xa77f, 0xa77f,
-0xa781, 0xa781,
-0xa783, 0xa783,
-0xa785, 0xa785,
-0xa787, 0xa787,
-0xa78c, 0xa78c,
-0xa78e, 0xa78e,
-0xa791, 0xa791,
-0xa793, 0xa795,
-0xa797, 0xa797,
-0xa799, 0xa799,
-0xa79b, 0xa79b,
-0xa79d, 0xa79d,
-0xa79f, 0xa79f,
-0xa7a1, 0xa7a1,
-0xa7a3, 0xa7a3,
-0xa7a5, 0xa7a5,
-0xa7a7, 0xa7a7,
-0xa7a9, 0xa7a9,
-0xa7b5, 0xa7b5,
-0xa7b7, 0xa7b7,
-0xa7fa, 0xa7fa,
-0xab30, 0xab5a,
-0xab60, 0xab65,
-0xab70, 0xabbf,
-0xfb00, 0xfb06,
-0xfb13, 0xfb17,
-0xff41, 0xff5a,
-0x10428, 0x1044f,
-0x10cc0, 0x10cf2,
-0x118c0, 0x118df,
-0x1d41a, 0x1d433,
-0x1d44e, 0x1d454,
-0x1d456, 0x1d467,
-0x1d482, 0x1d49b,
-0x1d4b6, 0x1d4b9,
-0x1d4bb, 0x1d4bb,
-0x1d4bd, 0x1d4c3,
-0x1d4c5, 0x1d4cf,
-0x1d4ea, 0x1d503,
-0x1d51e, 0x1d537,
-0x1d552, 0x1d56b,
-0x1d586, 0x1d59f,
-0x1d5ba, 0x1d5d3,
-0x1d5ee, 0x1d607,
-0x1d622, 0x1d63b,
-0x1d656, 0x1d66f,
-0x1d68a, 0x1d6a5,
-0x1d6c2, 0x1d6da,
-0x1d6dc, 0x1d6e1,
-0x1d6fc, 0x1d714,
-0x1d716, 0x1d71b,
-0x1d736, 0x1d74e,
-0x1d750, 0x1d755,
-0x1d770, 0x1d788,
-0x1d78a, 0x1d78f,
-0x1d7aa, 0x1d7c2,
-0x1d7c4, 0x1d7c9,
-0x1d7cb, 0x1d7cb,
-}; /* END of CR_Ll */
-
-/* PROPERTY: 'Lm': General Category */
-static const OnigCodePoint
-CR_Lm[] = { 56,
-0x02b0, 0x02c1,
-0x02c6, 0x02d1,
-0x02e0, 0x02e4,
-0x02ec, 0x02ec,
-0x02ee, 0x02ee,
-0x0374, 0x0374,
-0x037a, 0x037a,
-0x0559, 0x0559,
-0x0640, 0x0640,
-0x06e5, 0x06e6,
-0x07f4, 0x07f5,
-0x07fa, 0x07fa,
-0x081a, 0x081a,
-0x0824, 0x0824,
-0x0828, 0x0828,
-0x0971, 0x0971,
-0x0e46, 0x0e46,
-0x0ec6, 0x0ec6,
-0x10fc, 0x10fc,
-0x17d7, 0x17d7,
-0x1843, 0x1843,
-0x1aa7, 0x1aa7,
-0x1c78, 0x1c7d,
-0x1d2c, 0x1d6a,
-0x1d78, 0x1d78,
-0x1d9b, 0x1dbf,
-0x2071, 0x2071,
-0x207f, 0x207f,
-0x2090, 0x209c,
-0x2c7c, 0x2c7d,
-0x2d6f, 0x2d6f,
-0x2e2f, 0x2e2f,
-0x3005, 0x3005,
-0x3031, 0x3035,
-0x303b, 0x303b,
-0x309d, 0x309e,
-0x30fc, 0x30fe,
-0xa015, 0xa015,
-0xa4f8, 0xa4fd,
-0xa60c, 0xa60c,
-0xa67f, 0xa67f,
-0xa69c, 0xa69d,
-0xa717, 0xa71f,
-0xa770, 0xa770,
-0xa788, 0xa788,
-0xa7f8, 0xa7f9,
-0xa9cf, 0xa9cf,
-0xa9e6, 0xa9e6,
-0xaa70, 0xaa70,
-0xaadd, 0xaadd,
-0xaaf3, 0xaaf4,
-0xab5c, 0xab5f,
-0xff70, 0xff70,
-0xff9e, 0xff9f,
-0x16b40, 0x16b43,
-0x16f93, 0x16f9f,
-}; /* END of CR_Lm */
-
-/* PROPERTY: 'Lo': General Category */
-static const OnigCodePoint
-CR_Lo[] = { 433,
-0x00aa, 0x00aa,
-0x00ba, 0x00ba,
-0x01bb, 0x01bb,
-0x01c0, 0x01c3,
-0x0294, 0x0294,
-0x05d0, 0x05ea,
-0x05f0, 0x05f2,
-0x0620, 0x063f,
-0x0641, 0x064a,
-0x066e, 0x066f,
-0x0671, 0x06d3,
-0x06d5, 0x06d5,
-0x06ee, 0x06ef,
-0x06fa, 0x06fc,
-0x06ff, 0x06ff,
-0x0710, 0x0710,
-0x0712, 0x072f,
-0x074d, 0x07a5,
-0x07b1, 0x07b1,
-0x07ca, 0x07ea,
-0x0800, 0x0815,
-0x0840, 0x0858,
-0x08a0, 0x08b4,
-0x0904, 0x0939,
-0x093d, 0x093d,
-0x0950, 0x0950,
-0x0958, 0x0961,
-0x0972, 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, 0x0e45,
-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,
-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,
-0x10d0, 0x10fa,
-0x10fd, 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,
-0x1401, 0x166c,
-0x166f, 0x167f,
-0x1681, 0x169a,
-0x16a0, 0x16ea,
-0x16f1, 0x16f8,
-0x1700, 0x170c,
-0x170e, 0x1711,
-0x1720, 0x1731,
-0x1740, 0x1751,
-0x1760, 0x176c,
-0x176e, 0x1770,
-0x1780, 0x17b3,
-0x17dc, 0x17dc,
-0x1820, 0x1842,
-0x1844, 0x1877,
-0x1880, 0x18a8,
-0x18aa, 0x18aa,
-0x18b0, 0x18f5,
-0x1900, 0x191e,
-0x1950, 0x196d,
-0x1970, 0x1974,
-0x1980, 0x19ab,
-0x19b0, 0x19c9,
-0x1a00, 0x1a16,
-0x1a20, 0x1a54,
-0x1b05, 0x1b33,
-0x1b45, 0x1b4b,
-0x1b83, 0x1ba0,
-0x1bae, 0x1baf,
-0x1bba, 0x1be5,
-0x1c00, 0x1c23,
-0x1c4d, 0x1c4f,
-0x1c5a, 0x1c77,
-0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
-0x1cf5, 0x1cf6,
-0x2135, 0x2138,
-0x2d30, 0x2d67,
-0x2d80, 0x2d96,
-0x2da0, 0x2da6,
-0x2da8, 0x2dae,
-0x2db0, 0x2db6,
-0x2db8, 0x2dbe,
-0x2dc0, 0x2dc6,
-0x2dc8, 0x2dce,
-0x2dd0, 0x2dd6,
-0x2dd8, 0x2dde,
-0x3006, 0x3006,
-0x303c, 0x303c,
-0x3041, 0x3096,
-0x309f, 0x309f,
-0x30a1, 0x30fa,
-0x30ff, 0x30ff,
-0x3105, 0x312d,
-0x3131, 0x318e,
-0x31a0, 0x31ba,
-0x31f0, 0x31ff,
-0x3400, 0x4db5,
-0x4e00, 0x9fd5,
-0xa000, 0xa014,
-0xa016, 0xa48c,
-0xa4d0, 0xa4f7,
-0xa500, 0xa60b,
-0xa610, 0xa61f,
-0xa62a, 0xa62b,
-0xa66e, 0xa66e,
-0xa6a0, 0xa6e5,
-0xa78f, 0xa78f,
-0xa7f7, 0xa7f7,
-0xa7fb, 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,
-0xa9e0, 0xa9e4,
-0xa9e7, 0xa9ef,
-0xa9fa, 0xa9fe,
-0xaa00, 0xaa28,
-0xaa40, 0xaa42,
-0xaa44, 0xaa4b,
-0xaa60, 0xaa6f,
-0xaa71, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaaaf,
-0xaab1, 0xaab1,
-0xaab5, 0xaab6,
-0xaab9, 0xaabd,
-0xaac0, 0xaac0,
-0xaac2, 0xaac2,
-0xaadb, 0xaadc,
-0xaae0, 0xaaea,
-0xaaf2, 0xaaf2,
-0xab01, 0xab06,
-0xab09, 0xab0e,
-0xab11, 0xab16,
-0xab20, 0xab26,
-0xab28, 0xab2e,
-0xabc0, 0xabe2,
-0xac00, 0xd7a3,
-0xd7b0, 0xd7c6,
-0xd7cb, 0xd7fb,
-0xf900, 0xfa6d,
-0xfa70, 0xfad9,
-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,
-0xff66, 0xff6f,
-0xff71, 0xff9d,
-0xffa0, 0xffbe,
-0xffc2, 0xffc7,
-0xffca, 0xffcf,
-0xffd2, 0xffd7,
-0xffda, 0xffdc,
-0x10000, 0x1000b,
-0x1000d, 0x10026,
-0x10028, 0x1003a,
-0x1003c, 0x1003d,
-0x1003f, 0x1004d,
-0x10050, 0x1005d,
-0x10080, 0x100fa,
-0x10280, 0x1029c,
-0x102a0, 0x102d0,
-0x10300, 0x1031f,
-0x10330, 0x10340,
-0x10342, 0x10349,
-0x10350, 0x10375,
-0x10380, 0x1039d,
-0x103a0, 0x103c3,
-0x103c8, 0x103cf,
-0x10450, 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,
-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,
-0x118ff, 0x118ff,
-0x11ac0, 0x11af8,
-0x12000, 0x12399,
-0x12480, 0x12543,
-0x13000, 0x1342e,
-0x14400, 0x14646,
-0x16800, 0x16a38,
-0x16a40, 0x16a5e,
-0x16ad0, 0x16aed,
-0x16b00, 0x16b2f,
-0x16b63, 0x16b77,
-0x16b7d, 0x16b8f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f50,
-0x1b000, 0x1b001,
-0x1bc00, 0x1bc6a,
-0x1bc70, 0x1bc7c,
-0x1bc80, 0x1bc88,
-0x1bc90, 0x1bc99,
-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_Lo */
-
-/* PROPERTY: 'Lt': General Category */
-static const OnigCodePoint
-CR_Lt[] = { 10,
-0x01c5, 0x01c5,
-0x01c8, 0x01c8,
-0x01cb, 0x01cb,
-0x01f2, 0x01f2,
-0x1f88, 0x1f8f,
-0x1f98, 0x1f9f,
-0x1fa8, 0x1faf,
-0x1fbc, 0x1fbc,
-0x1fcc, 0x1fcc,
-0x1ffc, 0x1ffc,
-}; /* END of CR_Lt */
-
-/* PROPERTY: 'Lu': General Category */
-static const OnigCodePoint
-CR_Lu[] = { 625,
-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, 0x01c4,
-0x01c7, 0x01c7,
-0x01ca, 0x01ca,
-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, 0x01f1,
-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,
-0x03d2, 0x03d4,
-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,
-0x1fb8, 0x1fbb,
-0x1fc8, 0x1fcb,
-0x1fd8, 0x1fdb,
-0x1fe8, 0x1fec,
-0x1ff8, 0x1ffb,
-0x2102, 0x2102,
-0x2107, 0x2107,
-0x210b, 0x210d,
-0x2110, 0x2112,
-0x2115, 0x2115,
-0x2119, 0x211d,
-0x2124, 0x2124,
-0x2126, 0x2126,
-0x2128, 0x2128,
-0x212a, 0x212d,
-0x2130, 0x2133,
-0x213e, 0x213f,
-0x2145, 0x2145,
-0x2183, 0x2183,
-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,
-0x1d400, 0x1d419,
-0x1d434, 0x1d44d,
-0x1d468, 0x1d481,
-0x1d49c, 0x1d49c,
-0x1d49e, 0x1d49f,
-0x1d4a2, 0x1d4a2,
-0x1d4a5, 0x1d4a6,
-0x1d4a9, 0x1d4ac,
-0x1d4ae, 0x1d4b5,
-0x1d4d0, 0x1d4e9,
-0x1d504, 0x1d505,
-0x1d507, 0x1d50a,
-0x1d50d, 0x1d514,
-0x1d516, 0x1d51c,
-0x1d538, 0x1d539,
-0x1d53b, 0x1d53e,
-0x1d540, 0x1d544,
-0x1d546, 0x1d546,
-0x1d54a, 0x1d550,
-0x1d56c, 0x1d585,
-0x1d5a0, 0x1d5b9,
-0x1d5d4, 0x1d5ed,
-0x1d608, 0x1d621,
-0x1d63c, 0x1d655,
-0x1d670, 0x1d689,
-0x1d6a8, 0x1d6c0,
-0x1d6e2, 0x1d6fa,
-0x1d71c, 0x1d734,
-0x1d756, 0x1d76e,
-0x1d790, 0x1d7a8,
-0x1d7ca, 0x1d7ca,
-}; /* END of CR_Lu */
-
-/* PROPERTY: 'M': Major Category */
-static const OnigCodePoint
-CR_M[] = { 236,
-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, 0x0903,
-0x093a, 0x093c,
-0x093e, 0x094f,
-0x0951, 0x0957,
-0x0962, 0x0963,
-0x0981, 0x0983,
-0x09bc, 0x09bc,
-0x09be, 0x09c4,
-0x09c7, 0x09c8,
-0x09cb, 0x09cd,
-0x09d7, 0x09d7,
-0x09e2, 0x09e3,
-0x0a01, 0x0a03,
-0x0a3c, 0x0a3c,
-0x0a3e, 0x0a42,
-0x0a47, 0x0a48,
-0x0a4b, 0x0a4d,
-0x0a51, 0x0a51,
-0x0a70, 0x0a71,
-0x0a75, 0x0a75,
-0x0a81, 0x0a83,
-0x0abc, 0x0abc,
-0x0abe, 0x0ac5,
-0x0ac7, 0x0ac9,
-0x0acb, 0x0acd,
-0x0ae2, 0x0ae3,
-0x0b01, 0x0b03,
-0x0b3c, 0x0b3c,
-0x0b3e, 0x0b44,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4d,
-0x0b56, 0x0b57,
-0x0b62, 0x0b63,
-0x0b82, 0x0b82,
-0x0bbe, 0x0bc2,
-0x0bc6, 0x0bc8,
-0x0bca, 0x0bcd,
-0x0bd7, 0x0bd7,
-0x0c00, 0x0c03,
-0x0c3e, 0x0c44,
-0x0c46, 0x0c48,
-0x0c4a, 0x0c4d,
-0x0c55, 0x0c56,
-0x0c62, 0x0c63,
-0x0c81, 0x0c83,
-0x0cbc, 0x0cbc,
-0x0cbe, 0x0cc4,
-0x0cc6, 0x0cc8,
-0x0cca, 0x0ccd,
-0x0cd5, 0x0cd6,
-0x0ce2, 0x0ce3,
-0x0d01, 0x0d03,
-0x0d3e, 0x0d44,
-0x0d46, 0x0d48,
-0x0d4a, 0x0d4d,
-0x0d57, 0x0d57,
-0x0d62, 0x0d63,
-0x0d82, 0x0d83,
-0x0dca, 0x0dca,
-0x0dcf, 0x0dd4,
-0x0dd6, 0x0dd6,
-0x0dd8, 0x0ddf,
-0x0df2, 0x0df3,
-0x0e31, 0x0e31,
-0x0e34, 0x0e3a,
-0x0e47, 0x0e4e,
-0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
-0x0ec8, 0x0ecd,
-0x0f18, 0x0f19,
-0x0f35, 0x0f35,
-0x0f37, 0x0f37,
-0x0f39, 0x0f39,
-0x0f3e, 0x0f3f,
-0x0f71, 0x0f84,
-0x0f86, 0x0f87,
-0x0f8d, 0x0f97,
-0x0f99, 0x0fbc,
-0x0fc6, 0x0fc6,
-0x102b, 0x103e,
-0x1056, 0x1059,
-0x105e, 0x1060,
-0x1062, 0x1064,
-0x1067, 0x106d,
-0x1071, 0x1074,
-0x1082, 0x108d,
-0x108f, 0x108f,
-0x109a, 0x109d,
-0x135d, 0x135f,
-0x1712, 0x1714,
-0x1732, 0x1734,
-0x1752, 0x1753,
-0x1772, 0x1773,
-0x17b4, 0x17d3,
-0x17dd, 0x17dd,
-0x180b, 0x180d,
-0x18a9, 0x18a9,
-0x1920, 0x192b,
-0x1930, 0x193b,
-0x1a17, 0x1a1b,
-0x1a55, 0x1a5e,
-0x1a60, 0x1a7c,
-0x1a7f, 0x1a7f,
-0x1ab0, 0x1abe,
-0x1b00, 0x1b04,
-0x1b34, 0x1b44,
-0x1b6b, 0x1b73,
-0x1b80, 0x1b82,
-0x1ba1, 0x1bad,
-0x1be6, 0x1bf3,
-0x1c24, 0x1c37,
-0x1cd0, 0x1cd2,
-0x1cd4, 0x1ce8,
-0x1ced, 0x1ced,
-0x1cf2, 0x1cf4,
-0x1cf8, 0x1cf9,
-0x1dc0, 0x1df5,
-0x1dfc, 0x1dff,
-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,
-0xa823, 0xa827,
-0xa880, 0xa881,
-0xa8b4, 0xa8c4,
-0xa8e0, 0xa8f1,
-0xa926, 0xa92d,
-0xa947, 0xa953,
-0xa980, 0xa983,
-0xa9b3, 0xa9c0,
-0xa9e5, 0xa9e5,
-0xaa29, 0xaa36,
-0xaa43, 0xaa43,
-0xaa4c, 0xaa4d,
-0xaa7b, 0xaa7d,
-0xaab0, 0xaab0,
-0xaab2, 0xaab4,
-0xaab7, 0xaab8,
-0xaabe, 0xaabf,
-0xaac1, 0xaac1,
-0xaaeb, 0xaaef,
-0xaaf5, 0xaaf6,
-0xabe3, 0xabea,
-0xabec, 0xabed,
-0xfb1e, 0xfb1e,
-0xfe00, 0xfe0f,
-0xfe20, 0xfe2f,
-0x101fd, 0x101fd,
-0x102e0, 0x102e0,
-0x10376, 0x1037a,
-0x10a01, 0x10a03,
-0x10a05, 0x10a06,
-0x10a0c, 0x10a0f,
-0x10a38, 0x10a3a,
-0x10a3f, 0x10a3f,
-0x10ae5, 0x10ae6,
-0x11000, 0x11002,
-0x11038, 0x11046,
-0x1107f, 0x11082,
-0x110b0, 0x110ba,
-0x11100, 0x11102,
-0x11127, 0x11134,
-0x11173, 0x11173,
-0x11180, 0x11182,
-0x111b3, 0x111c0,
-0x111ca, 0x111cc,
-0x1122c, 0x11237,
-0x112df, 0x112ea,
-0x11300, 0x11303,
-0x1133c, 0x1133c,
-0x1133e, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134d,
-0x11357, 0x11357,
-0x11362, 0x11363,
-0x11366, 0x1136c,
-0x11370, 0x11374,
-0x114b0, 0x114c3,
-0x115af, 0x115b5,
-0x115b8, 0x115c0,
-0x115dc, 0x115dd,
-0x11630, 0x11640,
-0x116ab, 0x116b7,
-0x1171d, 0x1172b,
-0x16af0, 0x16af4,
-0x16b30, 0x16b36,
-0x16f51, 0x16f7e,
-0x16f8f, 0x16f92,
-0x1bc9d, 0x1bc9e,
-0x1d165, 0x1d169,
-0x1d16d, 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_M */
-
-/* PROPERTY: 'Mc': General Category */
-static const OnigCodePoint
-CR_Mc[] = { 147,
-0x0903, 0x0903,
-0x093b, 0x093b,
-0x093e, 0x0940,
-0x0949, 0x094c,
-0x094e, 0x094f,
-0x0982, 0x0983,
-0x09be, 0x09c0,
-0x09c7, 0x09c8,
-0x09cb, 0x09cc,
-0x09d7, 0x09d7,
-0x0a03, 0x0a03,
-0x0a3e, 0x0a40,
-0x0a83, 0x0a83,
-0x0abe, 0x0ac0,
-0x0ac9, 0x0ac9,
-0x0acb, 0x0acc,
-0x0b02, 0x0b03,
-0x0b3e, 0x0b3e,
-0x0b40, 0x0b40,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4c,
-0x0b57, 0x0b57,
-0x0bbe, 0x0bbf,
-0x0bc1, 0x0bc2,
-0x0bc6, 0x0bc8,
-0x0bca, 0x0bcc,
-0x0bd7, 0x0bd7,
-0x0c01, 0x0c03,
-0x0c41, 0x0c44,
-0x0c82, 0x0c83,
-0x0cbe, 0x0cbe,
-0x0cc0, 0x0cc4,
-0x0cc7, 0x0cc8,
-0x0cca, 0x0ccb,
-0x0cd5, 0x0cd6,
-0x0d02, 0x0d03,
-0x0d3e, 0x0d40,
-0x0d46, 0x0d48,
-0x0d4a, 0x0d4c,
-0x0d57, 0x0d57,
-0x0d82, 0x0d83,
-0x0dcf, 0x0dd1,
-0x0dd8, 0x0ddf,
-0x0df2, 0x0df3,
-0x0f3e, 0x0f3f,
-0x0f7f, 0x0f7f,
-0x102b, 0x102c,
-0x1031, 0x1031,
-0x1038, 0x1038,
-0x103b, 0x103c,
-0x1056, 0x1057,
-0x1062, 0x1064,
-0x1067, 0x106d,
-0x1083, 0x1084,
-0x1087, 0x108c,
-0x108f, 0x108f,
-0x109a, 0x109c,
-0x17b6, 0x17b6,
-0x17be, 0x17c5,
-0x17c7, 0x17c8,
-0x1923, 0x1926,
-0x1929, 0x192b,
-0x1930, 0x1931,
-0x1933, 0x1938,
-0x1a19, 0x1a1a,
-0x1a55, 0x1a55,
-0x1a57, 0x1a57,
-0x1a61, 0x1a61,
-0x1a63, 0x1a64,
-0x1a6d, 0x1a72,
-0x1b04, 0x1b04,
-0x1b35, 0x1b35,
-0x1b3b, 0x1b3b,
-0x1b3d, 0x1b41,
-0x1b43, 0x1b44,
-0x1b82, 0x1b82,
-0x1ba1, 0x1ba1,
-0x1ba6, 0x1ba7,
-0x1baa, 0x1baa,
-0x1be7, 0x1be7,
-0x1bea, 0x1bec,
-0x1bee, 0x1bee,
-0x1bf2, 0x1bf3,
-0x1c24, 0x1c2b,
-0x1c34, 0x1c35,
-0x1ce1, 0x1ce1,
-0x1cf2, 0x1cf3,
-0x302e, 0x302f,
-0xa823, 0xa824,
-0xa827, 0xa827,
-0xa880, 0xa881,
-0xa8b4, 0xa8c3,
-0xa952, 0xa953,
-0xa983, 0xa983,
-0xa9b4, 0xa9b5,
-0xa9ba, 0xa9bb,
-0xa9bd, 0xa9c0,
-0xaa2f, 0xaa30,
-0xaa33, 0xaa34,
-0xaa4d, 0xaa4d,
-0xaa7b, 0xaa7b,
-0xaa7d, 0xaa7d,
-0xaaeb, 0xaaeb,
-0xaaee, 0xaaef,
-0xaaf5, 0xaaf5,
-0xabe3, 0xabe4,
-0xabe6, 0xabe7,
-0xabe9, 0xabea,
-0xabec, 0xabec,
-0x11000, 0x11000,
-0x11002, 0x11002,
-0x11082, 0x11082,
-0x110b0, 0x110b2,
-0x110b7, 0x110b8,
-0x1112c, 0x1112c,
-0x11182, 0x11182,
-0x111b3, 0x111b5,
-0x111bf, 0x111c0,
-0x1122c, 0x1122e,
-0x11232, 0x11233,
-0x11235, 0x11235,
-0x112e0, 0x112e2,
-0x11302, 0x11303,
-0x1133e, 0x1133f,
-0x11341, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134d,
-0x11357, 0x11357,
-0x11362, 0x11363,
-0x114b0, 0x114b2,
-0x114b9, 0x114b9,
-0x114bb, 0x114be,
-0x114c1, 0x114c1,
-0x115af, 0x115b1,
-0x115b8, 0x115bb,
-0x115be, 0x115be,
-0x11630, 0x11632,
-0x1163b, 0x1163c,
-0x1163e, 0x1163e,
-0x116ac, 0x116ac,
-0x116ae, 0x116af,
-0x116b6, 0x116b6,
-0x11720, 0x11721,
-0x11726, 0x11726,
-0x16f51, 0x16f7e,
-0x1d165, 0x1d166,
-0x1d16d, 0x1d172,
-}; /* END of CR_Mc */
-
-/* PROPERTY: 'Me': General Category */
-static const OnigCodePoint
-CR_Me[] = { 5,
-0x0488, 0x0489,
-0x1abe, 0x1abe,
-0x20dd, 0x20e0,
-0x20e2, 0x20e4,
-0xa670, 0xa672,
-}; /* END of CR_Me */
-
-/* PROPERTY: 'Mn': General Category */
-static const OnigCodePoint
-CR_Mn[] = { 266,
-0x0300, 0x036f,
-0x0483, 0x0487,
-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,
-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,
-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, 0x1abd,
-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,
-0x20d0, 0x20dc,
-0x20e1, 0x20e1,
-0x20e5, 0x20f0,
-0x2cef, 0x2cf1,
-0x2d7f, 0x2d7f,
-0x2de0, 0x2dff,
-0x302a, 0x302d,
-0x3099, 0x309a,
-0xa66f, 0xa66f,
-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,
-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,
-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,
-0x16f8f, 0x16f92,
-0x1bc9d, 0x1bc9e,
-0x1d167, 0x1d169,
-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_Mn */
-
-/* PROPERTY: 'N': Major Category */
-static const OnigCodePoint
-CR_N[] = { 111,
-0x0030, 0x0039,
-0x00b2, 0x00b3,
-0x00b9, 0x00b9,
-0x00bc, 0x00be,
-0x0660, 0x0669,
-0x06f0, 0x06f9,
-0x07c0, 0x07c9,
-0x0966, 0x096f,
-0x09e6, 0x09ef,
-0x09f4, 0x09f9,
-0x0a66, 0x0a6f,
-0x0ae6, 0x0aef,
-0x0b66, 0x0b6f,
-0x0b72, 0x0b77,
-0x0be6, 0x0bf2,
-0x0c66, 0x0c6f,
-0x0c78, 0x0c7e,
-0x0ce6, 0x0cef,
-0x0d66, 0x0d75,
-0x0de6, 0x0def,
-0x0e50, 0x0e59,
-0x0ed0, 0x0ed9,
-0x0f20, 0x0f33,
-0x1040, 0x1049,
-0x1090, 0x1099,
-0x1369, 0x137c,
-0x16ee, 0x16f0,
-0x17e0, 0x17e9,
-0x17f0, 0x17f9,
-0x1810, 0x1819,
-0x1946, 0x194f,
-0x19d0, 0x19da,
-0x1a80, 0x1a89,
-0x1a90, 0x1a99,
-0x1b50, 0x1b59,
-0x1bb0, 0x1bb9,
-0x1c40, 0x1c49,
-0x1c50, 0x1c59,
-0x2070, 0x2070,
-0x2074, 0x2079,
-0x2080, 0x2089,
-0x2150, 0x2182,
-0x2185, 0x2189,
-0x2460, 0x249b,
-0x24ea, 0x24ff,
-0x2776, 0x2793,
-0x2cfd, 0x2cfd,
-0x3007, 0x3007,
-0x3021, 0x3029,
-0x3038, 0x303a,
-0x3192, 0x3195,
-0x3220, 0x3229,
-0x3248, 0x324f,
-0x3251, 0x325f,
-0x3280, 0x3289,
-0x32b1, 0x32bf,
-0xa620, 0xa629,
-0xa6e6, 0xa6ef,
-0xa830, 0xa835,
-0xa8d0, 0xa8d9,
-0xa900, 0xa909,
-0xa9d0, 0xa9d9,
-0xa9f0, 0xa9f9,
-0xaa50, 0xaa59,
-0xabf0, 0xabf9,
-0xff10, 0xff19,
-0x10107, 0x10133,
-0x10140, 0x10178,
-0x1018a, 0x1018b,
-0x102e1, 0x102fb,
-0x10320, 0x10323,
-0x10341, 0x10341,
-0x1034a, 0x1034a,
-0x103d1, 0x103d5,
-0x104a0, 0x104a9,
-0x10858, 0x1085f,
-0x10879, 0x1087f,
-0x108a7, 0x108af,
-0x108fb, 0x108ff,
-0x10916, 0x1091b,
-0x109bc, 0x109bd,
-0x109c0, 0x109cf,
-0x109d2, 0x109ff,
-0x10a40, 0x10a47,
-0x10a7d, 0x10a7e,
-0x10a9d, 0x10a9f,
-0x10aeb, 0x10aef,
-0x10b58, 0x10b5f,
-0x10b78, 0x10b7f,
-0x10ba9, 0x10baf,
-0x10cfa, 0x10cff,
-0x10e60, 0x10e7e,
-0x11052, 0x1106f,
-0x110f0, 0x110f9,
-0x11136, 0x1113f,
-0x111d0, 0x111d9,
-0x111e1, 0x111f4,
-0x112f0, 0x112f9,
-0x114d0, 0x114d9,
-0x11650, 0x11659,
-0x116c0, 0x116c9,
-0x11730, 0x1173b,
-0x118e0, 0x118f2,
-0x12400, 0x1246e,
-0x16a60, 0x16a69,
-0x16b50, 0x16b59,
-0x16b5b, 0x16b61,
-0x1d360, 0x1d371,
-0x1d7ce, 0x1d7ff,
-0x1e8c7, 0x1e8cf,
-0x1f100, 0x1f10c,
-}; /* END of CR_N */
-
-/* PROPERTY: 'Nd': General Category */
-#define CR_Nd CR_Digit
-
-/* PROPERTY: 'Nl': General Category */
-static const OnigCodePoint
-CR_Nl[] = { 12,
-0x16ee, 0x16f0,
-0x2160, 0x2182,
-0x2185, 0x2188,
-0x3007, 0x3007,
-0x3021, 0x3029,
-0x3038, 0x303a,
-0xa6e6, 0xa6ef,
-0x10140, 0x10174,
-0x10341, 0x10341,
-0x1034a, 0x1034a,
-0x103d1, 0x103d5,
-0x12400, 0x1246e,
-}; /* END of CR_Nl */
-
-/* PROPERTY: 'No': General Category */
-static const OnigCodePoint
-CR_No[] = { 58,
-0x00b2, 0x00b3,
-0x00b9, 0x00b9,
-0x00bc, 0x00be,
-0x09f4, 0x09f9,
-0x0b72, 0x0b77,
-0x0bf0, 0x0bf2,
-0x0c78, 0x0c7e,
-0x0d70, 0x0d75,
-0x0f2a, 0x0f33,
-0x1369, 0x137c,
-0x17f0, 0x17f9,
-0x19da, 0x19da,
-0x2070, 0x2070,
-0x2074, 0x2079,
-0x2080, 0x2089,
-0x2150, 0x215f,
-0x2189, 0x2189,
-0x2460, 0x249b,
-0x24ea, 0x24ff,
-0x2776, 0x2793,
-0x2cfd, 0x2cfd,
-0x3192, 0x3195,
-0x3220, 0x3229,
-0x3248, 0x324f,
-0x3251, 0x325f,
-0x3280, 0x3289,
-0x32b1, 0x32bf,
-0xa830, 0xa835,
-0x10107, 0x10133,
-0x10175, 0x10178,
-0x1018a, 0x1018b,
-0x102e1, 0x102fb,
-0x10320, 0x10323,
-0x10858, 0x1085f,
-0x10879, 0x1087f,
-0x108a7, 0x108af,
-0x108fb, 0x108ff,
-0x10916, 0x1091b,
-0x109bc, 0x109bd,
-0x109c0, 0x109cf,
-0x109d2, 0x109ff,
-0x10a40, 0x10a47,
-0x10a7d, 0x10a7e,
-0x10a9d, 0x10a9f,
-0x10aeb, 0x10aef,
-0x10b58, 0x10b5f,
-0x10b78, 0x10b7f,
-0x10ba9, 0x10baf,
-0x10cfa, 0x10cff,
-0x10e60, 0x10e7e,
-0x11052, 0x11065,
-0x111e1, 0x111f4,
-0x1173a, 0x1173b,
-0x118ea, 0x118f2,
-0x16b5b, 0x16b61,
-0x1d360, 0x1d371,
-0x1e8c7, 0x1e8cf,
-0x1f100, 0x1f10c,
-}; /* END of CR_No */
-
-/* PROPERTY: 'P': Major Category */
-#define CR_P CR_Punct
-
-/* PROPERTY: 'Pc': General Category */
-static const OnigCodePoint
-CR_Pc[] = { 6,
-0x005f, 0x005f,
-0x203f, 0x2040,
-0x2054, 0x2054,
-0xfe33, 0xfe34,
-0xfe4d, 0xfe4f,
-0xff3f, 0xff3f,
-}; /* END of CR_Pc */
-
-/* PROPERTY: 'Pd': General Category */
-static const OnigCodePoint
-CR_Pd[] = { 17,
-0x002d, 0x002d,
-0x058a, 0x058a,
-0x05be, 0x05be,
-0x1400, 0x1400,
-0x1806, 0x1806,
-0x2010, 0x2015,
-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_Pd */
-
-/* PROPERTY: 'Pe': General Category */
-static const OnigCodePoint
-CR_Pe[] = { 72,
-0x0029, 0x0029,
-0x005d, 0x005d,
-0x007d, 0x007d,
-0x0f3b, 0x0f3b,
-0x0f3d, 0x0f3d,
-0x169c, 0x169c,
-0x2046, 0x2046,
-0x207e, 0x207e,
-0x208e, 0x208e,
-0x2309, 0x2309,
-0x230b, 0x230b,
-0x232a, 0x232a,
-0x2769, 0x2769,
-0x276b, 0x276b,
-0x276d, 0x276d,
-0x276f, 0x276f,
-0x2771, 0x2771,
-0x2773, 0x2773,
-0x2775, 0x2775,
-0x27c6, 0x27c6,
-0x27e7, 0x27e7,
-0x27e9, 0x27e9,
-0x27eb, 0x27eb,
-0x27ed, 0x27ed,
-0x27ef, 0x27ef,
-0x2984, 0x2984,
-0x2986, 0x2986,
-0x2988, 0x2988,
-0x298a, 0x298a,
-0x298c, 0x298c,
-0x298e, 0x298e,
-0x2990, 0x2990,
-0x2992, 0x2992,
-0x2994, 0x2994,
-0x2996, 0x2996,
-0x2998, 0x2998,
-0x29d9, 0x29d9,
-0x29db, 0x29db,
-0x29fd, 0x29fd,
-0x2e23, 0x2e23,
-0x2e25, 0x2e25,
-0x2e27, 0x2e27,
-0x2e29, 0x2e29,
-0x3009, 0x3009,
-0x300b, 0x300b,
-0x300d, 0x300d,
-0x300f, 0x300f,
-0x3011, 0x3011,
-0x3015, 0x3015,
-0x3017, 0x3017,
-0x3019, 0x3019,
-0x301b, 0x301b,
-0x301e, 0x301f,
-0xfd3e, 0xfd3e,
-0xfe18, 0xfe18,
-0xfe36, 0xfe36,
-0xfe38, 0xfe38,
-0xfe3a, 0xfe3a,
-0xfe3c, 0xfe3c,
-0xfe3e, 0xfe3e,
-0xfe40, 0xfe40,
-0xfe42, 0xfe42,
-0xfe44, 0xfe44,
-0xfe48, 0xfe48,
-0xfe5a, 0xfe5a,
-0xfe5c, 0xfe5c,
-0xfe5e, 0xfe5e,
-0xff09, 0xff09,
-0xff3d, 0xff3d,
-0xff5d, 0xff5d,
-0xff60, 0xff60,
-0xff63, 0xff63,
-}; /* END of CR_Pe */
-
-/* PROPERTY: 'Pf': General Category */
-static const OnigCodePoint
-CR_Pf[] = { 10,
-0x00bb, 0x00bb,
-0x2019, 0x2019,
-0x201d, 0x201d,
-0x203a, 0x203a,
-0x2e03, 0x2e03,
-0x2e05, 0x2e05,
-0x2e0a, 0x2e0a,
-0x2e0d, 0x2e0d,
-0x2e1d, 0x2e1d,
-0x2e21, 0x2e21,
-}; /* END of CR_Pf */
-
-/* PROPERTY: 'Pi': General Category */
-static const OnigCodePoint
-CR_Pi[] = { 11,
-0x00ab, 0x00ab,
-0x2018, 0x2018,
-0x201b, 0x201c,
-0x201f, 0x201f,
-0x2039, 0x2039,
-0x2e02, 0x2e02,
-0x2e04, 0x2e04,
-0x2e09, 0x2e09,
-0x2e0c, 0x2e0c,
-0x2e1c, 0x2e1c,
-0x2e20, 0x2e20,
-}; /* END of CR_Pi */
-
-/* PROPERTY: 'Po': General Category */
-static const OnigCodePoint
-CR_Po[] = { 157,
-0x0021, 0x0023,
-0x0025, 0x0027,
-0x002a, 0x002a,
-0x002c, 0x002c,
-0x002e, 0x002f,
-0x003a, 0x003b,
-0x003f, 0x0040,
-0x005c, 0x005c,
-0x00a1, 0x00a1,
-0x00a7, 0x00a7,
-0x00b6, 0x00b7,
-0x00bf, 0x00bf,
-0x037e, 0x037e,
-0x0387, 0x0387,
-0x055a, 0x055f,
-0x0589, 0x0589,
-0x05c0, 0x05c0,
-0x05c3, 0x05c3,
-0x05c6, 0x05c6,
-0x05f3, 0x05f4,
-0x0609, 0x060a,
-0x060c, 0x060d,
-0x061b, 0x061b,
-0x061e, 0x061f,
-0x066a, 0x066d,
-0x06d4, 0x06d4,
-0x0700, 0x070d,
-0x07f7, 0x07f9,
-0x0830, 0x083e,
-0x085e, 0x085e,
-0x0964, 0x0965,
-0x0970, 0x0970,
-0x0af0, 0x0af0,
-0x0df4, 0x0df4,
-0x0e4f, 0x0e4f,
-0x0e5a, 0x0e5b,
-0x0f04, 0x0f12,
-0x0f14, 0x0f14,
-0x0f85, 0x0f85,
-0x0fd0, 0x0fd4,
-0x0fd9, 0x0fda,
-0x104a, 0x104f,
-0x10fb, 0x10fb,
-0x1360, 0x1368,
-0x166d, 0x166e,
-0x16eb, 0x16ed,
-0x1735, 0x1736,
-0x17d4, 0x17d6,
-0x17d8, 0x17da,
-0x1800, 0x1805,
-0x1807, 0x180a,
-0x1944, 0x1945,
-0x1a1e, 0x1a1f,
-0x1aa0, 0x1aa6,
-0x1aa8, 0x1aad,
-0x1b5a, 0x1b60,
-0x1bfc, 0x1bff,
-0x1c3b, 0x1c3f,
-0x1c7e, 0x1c7f,
-0x1cc0, 0x1cc7,
-0x1cd3, 0x1cd3,
-0x2016, 0x2017,
-0x2020, 0x2027,
-0x2030, 0x2038,
-0x203b, 0x203e,
-0x2041, 0x2043,
-0x2047, 0x2051,
-0x2053, 0x2053,
-0x2055, 0x205e,
-0x2cf9, 0x2cfc,
-0x2cfe, 0x2cff,
-0x2d70, 0x2d70,
-0x2e00, 0x2e01,
-0x2e06, 0x2e08,
-0x2e0b, 0x2e0b,
-0x2e0e, 0x2e16,
-0x2e18, 0x2e19,
-0x2e1b, 0x2e1b,
-0x2e1e, 0x2e1f,
-0x2e2a, 0x2e2e,
-0x2e30, 0x2e39,
-0x2e3c, 0x2e3f,
-0x2e41, 0x2e41,
-0x3001, 0x3003,
-0x303d, 0x303d,
-0x30fb, 0x30fb,
-0xa4fe, 0xa4ff,
-0xa60d, 0xa60f,
-0xa673, 0xa673,
-0xa67e, 0xa67e,
-0xa6f2, 0xa6f7,
-0xa874, 0xa877,
-0xa8ce, 0xa8cf,
-0xa8f8, 0xa8fa,
-0xa8fc, 0xa8fc,
-0xa92e, 0xa92f,
-0xa95f, 0xa95f,
-0xa9c1, 0xa9cd,
-0xa9de, 0xa9df,
-0xaa5c, 0xaa5f,
-0xaade, 0xaadf,
-0xaaf0, 0xaaf1,
-0xabeb, 0xabeb,
-0xfe10, 0xfe16,
-0xfe19, 0xfe19,
-0xfe30, 0xfe30,
-0xfe45, 0xfe46,
-0xfe49, 0xfe4c,
-0xfe50, 0xfe52,
-0xfe54, 0xfe57,
-0xfe5f, 0xfe61,
-0xfe68, 0xfe68,
-0xfe6a, 0xfe6b,
-0xff01, 0xff03,
-0xff05, 0xff07,
-0xff0a, 0xff0a,
-0xff0c, 0xff0c,
-0xff0e, 0xff0f,
-0xff1a, 0xff1b,
-0xff1f, 0xff20,
-0xff3c, 0xff3c,
-0xff61, 0xff61,
-0xff64, 0xff65,
-0x10100, 0x10102,
-0x1039f, 0x1039f,
-0x103d0, 0x103d0,
-0x1056f, 0x1056f,
-0x10857, 0x10857,
-0x1091f, 0x1091f,
-0x1093f, 0x1093f,
-0x10a50, 0x10a58,
-0x10a7f, 0x10a7f,
-0x10af0, 0x10af6,
-0x10b39, 0x10b3f,
-0x10b99, 0x10b9c,
-0x11047, 0x1104d,
-0x110bb, 0x110bc,
-0x110be, 0x110c1,
-0x11140, 0x11143,
-0x11174, 0x11175,
-0x111c5, 0x111c9,
-0x111cd, 0x111cd,
-0x111db, 0x111db,
-0x111dd, 0x111df,
-0x11238, 0x1123d,
-0x112a9, 0x112a9,
-0x114c6, 0x114c6,
-0x115c1, 0x115d7,
-0x11641, 0x11643,
-0x1173c, 0x1173e,
-0x12470, 0x12474,
-0x16a6e, 0x16a6f,
-0x16af5, 0x16af5,
-0x16b37, 0x16b3b,
-0x16b44, 0x16b44,
-0x1bc9f, 0x1bc9f,
-0x1da87, 0x1da8b,
-}; /* END of CR_Po */
-
-/* PROPERTY: 'Ps': General Category */
-static const OnigCodePoint
-CR_Ps[] = { 75,
-0x0028, 0x0028,
-0x005b, 0x005b,
-0x007b, 0x007b,
-0x0f3a, 0x0f3a,
-0x0f3c, 0x0f3c,
-0x169b, 0x169b,
-0x201a, 0x201a,
-0x201e, 0x201e,
-0x2045, 0x2045,
-0x207d, 0x207d,
-0x208d, 0x208d,
-0x2308, 0x2308,
-0x230a, 0x230a,
-0x2329, 0x2329,
-0x2768, 0x2768,
-0x276a, 0x276a,
-0x276c, 0x276c,
-0x276e, 0x276e,
-0x2770, 0x2770,
-0x2772, 0x2772,
-0x2774, 0x2774,
-0x27c5, 0x27c5,
-0x27e6, 0x27e6,
-0x27e8, 0x27e8,
-0x27ea, 0x27ea,
-0x27ec, 0x27ec,
-0x27ee, 0x27ee,
-0x2983, 0x2983,
-0x2985, 0x2985,
-0x2987, 0x2987,
-0x2989, 0x2989,
-0x298b, 0x298b,
-0x298d, 0x298d,
-0x298f, 0x298f,
-0x2991, 0x2991,
-0x2993, 0x2993,
-0x2995, 0x2995,
-0x2997, 0x2997,
-0x29d8, 0x29d8,
-0x29da, 0x29da,
-0x29fc, 0x29fc,
-0x2e22, 0x2e22,
-0x2e24, 0x2e24,
-0x2e26, 0x2e26,
-0x2e28, 0x2e28,
-0x2e42, 0x2e42,
-0x3008, 0x3008,
-0x300a, 0x300a,
-0x300c, 0x300c,
-0x300e, 0x300e,
-0x3010, 0x3010,
-0x3014, 0x3014,
-0x3016, 0x3016,
-0x3018, 0x3018,
-0x301a, 0x301a,
-0x301d, 0x301d,
-0xfd3f, 0xfd3f,
-0xfe17, 0xfe17,
-0xfe35, 0xfe35,
-0xfe37, 0xfe37,
-0xfe39, 0xfe39,
-0xfe3b, 0xfe3b,
-0xfe3d, 0xfe3d,
-0xfe3f, 0xfe3f,
-0xfe41, 0xfe41,
-0xfe43, 0xfe43,
-0xfe47, 0xfe47,
-0xfe59, 0xfe59,
-0xfe5b, 0xfe5b,
-0xfe5d, 0xfe5d,
-0xff08, 0xff08,
-0xff3b, 0xff3b,
-0xff5b, 0xff5b,
-0xff5f, 0xff5f,
-0xff62, 0xff62,
-}; /* END of CR_Ps */
-
-/* PROPERTY: 'S': Major Category */
-static const OnigCodePoint
-CR_S[] = { 214,
-0x0024, 0x0024,
-0x002b, 0x002b,
-0x003c, 0x003e,
-0x005e, 0x005e,
-0x0060, 0x0060,
-0x007c, 0x007c,
-0x007e, 0x007e,
-0x00a2, 0x00a6,
-0x00a8, 0x00a9,
-0x00ac, 0x00ac,
-0x00ae, 0x00b1,
-0x00b4, 0x00b4,
-0x00b8, 0x00b8,
-0x00d7, 0x00d7,
-0x00f7, 0x00f7,
-0x02c2, 0x02c5,
-0x02d2, 0x02df,
-0x02e5, 0x02eb,
-0x02ed, 0x02ed,
-0x02ef, 0x02ff,
-0x0375, 0x0375,
-0x0384, 0x0385,
-0x03f6, 0x03f6,
-0x0482, 0x0482,
-0x058d, 0x058f,
-0x0606, 0x0608,
-0x060b, 0x060b,
-0x060e, 0x060f,
-0x06de, 0x06de,
-0x06e9, 0x06e9,
-0x06fd, 0x06fe,
-0x07f6, 0x07f6,
-0x09f2, 0x09f3,
-0x09fa, 0x09fb,
-0x0af1, 0x0af1,
-0x0b70, 0x0b70,
-0x0bf3, 0x0bfa,
-0x0c7f, 0x0c7f,
-0x0d79, 0x0d79,
-0x0e3f, 0x0e3f,
-0x0f01, 0x0f03,
-0x0f13, 0x0f13,
-0x0f15, 0x0f17,
-0x0f1a, 0x0f1f,
-0x0f34, 0x0f34,
-0x0f36, 0x0f36,
-0x0f38, 0x0f38,
-0x0fbe, 0x0fc5,
-0x0fc7, 0x0fcc,
-0x0fce, 0x0fcf,
-0x0fd5, 0x0fd8,
-0x109e, 0x109f,
-0x1390, 0x1399,
-0x17db, 0x17db,
-0x1940, 0x1940,
-0x19de, 0x19ff,
-0x1b61, 0x1b6a,
-0x1b74, 0x1b7c,
-0x1fbd, 0x1fbd,
-0x1fbf, 0x1fc1,
-0x1fcd, 0x1fcf,
-0x1fdd, 0x1fdf,
-0x1fed, 0x1fef,
-0x1ffd, 0x1ffe,
-0x2044, 0x2044,
-0x2052, 0x2052,
-0x207a, 0x207c,
-0x208a, 0x208c,
-0x20a0, 0x20be,
-0x2100, 0x2101,
-0x2103, 0x2106,
-0x2108, 0x2109,
-0x2114, 0x2114,
-0x2116, 0x2118,
-0x211e, 0x2123,
-0x2125, 0x2125,
-0x2127, 0x2127,
-0x2129, 0x2129,
-0x212e, 0x212e,
-0x213a, 0x213b,
-0x2140, 0x2144,
-0x214a, 0x214d,
-0x214f, 0x214f,
-0x218a, 0x218b,
-0x2190, 0x2307,
-0x230c, 0x2328,
-0x232b, 0x23fa,
-0x2400, 0x2426,
-0x2440, 0x244a,
-0x249c, 0x24e9,
-0x2500, 0x2767,
-0x2794, 0x27c4,
-0x27c7, 0x27e5,
-0x27f0, 0x2982,
-0x2999, 0x29d7,
-0x29dc, 0x29fb,
-0x29fe, 0x2b73,
-0x2b76, 0x2b95,
-0x2b98, 0x2bb9,
-0x2bbd, 0x2bc8,
-0x2bca, 0x2bd1,
-0x2bec, 0x2bef,
-0x2ce5, 0x2cea,
-0x2e80, 0x2e99,
-0x2e9b, 0x2ef3,
-0x2f00, 0x2fd5,
-0x2ff0, 0x2ffb,
-0x3004, 0x3004,
-0x3012, 0x3013,
-0x3020, 0x3020,
-0x3036, 0x3037,
-0x303e, 0x303f,
-0x309b, 0x309c,
-0x3190, 0x3191,
-0x3196, 0x319f,
-0x31c0, 0x31e3,
-0x3200, 0x321e,
-0x322a, 0x3247,
-0x3250, 0x3250,
-0x3260, 0x327f,
-0x328a, 0x32b0,
-0x32c0, 0x32fe,
-0x3300, 0x33ff,
-0x4dc0, 0x4dff,
-0xa490, 0xa4c6,
-0xa700, 0xa716,
-0xa720, 0xa721,
-0xa789, 0xa78a,
-0xa828, 0xa82b,
-0xa836, 0xa839,
-0xaa77, 0xaa79,
-0xab5b, 0xab5b,
-0xfb29, 0xfb29,
-0xfbb2, 0xfbc1,
-0xfdfc, 0xfdfd,
-0xfe62, 0xfe62,
-0xfe64, 0xfe66,
-0xfe69, 0xfe69,
-0xff04, 0xff04,
-0xff0b, 0xff0b,
-0xff1c, 0xff1e,
-0xff3e, 0xff3e,
-0xff40, 0xff40,
-0xff5c, 0xff5c,
-0xff5e, 0xff5e,
-0xffe0, 0xffe6,
-0xffe8, 0xffee,
-0xfffc, 0xfffd,
-0x10137, 0x1013f,
-0x10179, 0x10189,
-0x1018c, 0x1018c,
-0x10190, 0x1019b,
-0x101a0, 0x101a0,
-0x101d0, 0x101fc,
-0x10877, 0x10878,
-0x10ac8, 0x10ac8,
-0x1173f, 0x1173f,
-0x16b3c, 0x16b3f,
-0x16b45, 0x16b45,
-0x1bc9c, 0x1bc9c,
-0x1d000, 0x1d0f5,
-0x1d100, 0x1d126,
-0x1d129, 0x1d164,
-0x1d16a, 0x1d16c,
-0x1d183, 0x1d184,
-0x1d18c, 0x1d1a9,
-0x1d1ae, 0x1d1e8,
-0x1d200, 0x1d241,
-0x1d245, 0x1d245,
-0x1d300, 0x1d356,
-0x1d6c1, 0x1d6c1,
-0x1d6db, 0x1d6db,
-0x1d6fb, 0x1d6fb,
-0x1d715, 0x1d715,
-0x1d735, 0x1d735,
-0x1d74f, 0x1d74f,
-0x1d76f, 0x1d76f,
-0x1d789, 0x1d789,
-0x1d7a9, 0x1d7a9,
-0x1d7c3, 0x1d7c3,
-0x1d800, 0x1d9ff,
-0x1da37, 0x1da3a,
-0x1da6d, 0x1da74,
-0x1da76, 0x1da83,
-0x1da85, 0x1da86,
-0x1eef0, 0x1eef1,
-0x1f000, 0x1f02b,
-0x1f030, 0x1f093,
-0x1f0a0, 0x1f0ae,
-0x1f0b1, 0x1f0bf,
-0x1f0c1, 0x1f0cf,
-0x1f0d1, 0x1f0f5,
-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,
-}; /* END of CR_S */
-
-/* PROPERTY: 'Sc': General Category */
-static const OnigCodePoint
-CR_Sc[] = { 17,
-0x0024, 0x0024,
-0x00a2, 0x00a5,
-0x058f, 0x058f,
-0x060b, 0x060b,
-0x09f2, 0x09f3,
-0x09fb, 0x09fb,
-0x0af1, 0x0af1,
-0x0bf9, 0x0bf9,
-0x0e3f, 0x0e3f,
-0x17db, 0x17db,
-0x20a0, 0x20be,
-0xa838, 0xa838,
-0xfdfc, 0xfdfc,
-0xfe69, 0xfe69,
-0xff04, 0xff04,
-0xffe0, 0xffe1,
-0xffe5, 0xffe6,
-}; /* END of CR_Sc */
-
-/* PROPERTY: 'Sk': General Category */
-static const OnigCodePoint
-CR_Sk[] = { 29,
-0x005e, 0x005e,
-0x0060, 0x0060,
-0x00a8, 0x00a8,
-0x00af, 0x00af,
-0x00b4, 0x00b4,
-0x00b8, 0x00b8,
-0x02c2, 0x02c5,
-0x02d2, 0x02df,
-0x02e5, 0x02eb,
-0x02ed, 0x02ed,
-0x02ef, 0x02ff,
-0x0375, 0x0375,
-0x0384, 0x0385,
-0x1fbd, 0x1fbd,
-0x1fbf, 0x1fc1,
-0x1fcd, 0x1fcf,
-0x1fdd, 0x1fdf,
-0x1fed, 0x1fef,
-0x1ffd, 0x1ffe,
-0x309b, 0x309c,
-0xa700, 0xa716,
-0xa720, 0xa721,
-0xa789, 0xa78a,
-0xab5b, 0xab5b,
-0xfbb2, 0xfbc1,
-0xff3e, 0xff3e,
-0xff40, 0xff40,
-0xffe3, 0xffe3,
-0x1f3fb, 0x1f3ff,
-}; /* END of CR_Sk */
-
-/* PROPERTY: 'Sm': General Category */
-static const OnigCodePoint
-CR_Sm[] = { 64,
-0x002b, 0x002b,
-0x003c, 0x003e,
-0x007c, 0x007c,
-0x007e, 0x007e,
-0x00ac, 0x00ac,
-0x00b1, 0x00b1,
-0x00d7, 0x00d7,
-0x00f7, 0x00f7,
-0x03f6, 0x03f6,
-0x0606, 0x0608,
-0x2044, 0x2044,
-0x2052, 0x2052,
-0x207a, 0x207c,
-0x208a, 0x208c,
-0x2118, 0x2118,
-0x2140, 0x2144,
-0x214b, 0x214b,
-0x2190, 0x2194,
-0x219a, 0x219b,
-0x21a0, 0x21a0,
-0x21a3, 0x21a3,
-0x21a6, 0x21a6,
-0x21ae, 0x21ae,
-0x21ce, 0x21cf,
-0x21d2, 0x21d2,
-0x21d4, 0x21d4,
-0x21f4, 0x22ff,
-0x2320, 0x2321,
-0x237c, 0x237c,
-0x239b, 0x23b3,
-0x23dc, 0x23e1,
-0x25b7, 0x25b7,
-0x25c1, 0x25c1,
-0x25f8, 0x25ff,
-0x266f, 0x266f,
-0x27c0, 0x27c4,
-0x27c7, 0x27e5,
-0x27f0, 0x27ff,
-0x2900, 0x2982,
-0x2999, 0x29d7,
-0x29dc, 0x29fb,
-0x29fe, 0x2aff,
-0x2b30, 0x2b44,
-0x2b47, 0x2b4c,
-0xfb29, 0xfb29,
-0xfe62, 0xfe62,
-0xfe64, 0xfe66,
-0xff0b, 0xff0b,
-0xff1c, 0xff1e,
-0xff5c, 0xff5c,
-0xff5e, 0xff5e,
-0xffe2, 0xffe2,
-0xffe9, 0xffec,
-0x1d6c1, 0x1d6c1,
-0x1d6db, 0x1d6db,
-0x1d6fb, 0x1d6fb,
-0x1d715, 0x1d715,
-0x1d735, 0x1d735,
-0x1d74f, 0x1d74f,
-0x1d76f, 0x1d76f,
-0x1d789, 0x1d789,
-0x1d7a9, 0x1d7a9,
-0x1d7c3, 0x1d7c3,
-0x1eef0, 0x1eef1,
-}; /* END of CR_Sm */
-
-/* PROPERTY: 'So': General Category */
-static const OnigCodePoint
-CR_So[] = { 170,
-0x00a6, 0x00a6,
-0x00a9, 0x00a9,
-0x00ae, 0x00ae,
-0x00b0, 0x00b0,
-0x0482, 0x0482,
-0x058d, 0x058e,
-0x060e, 0x060f,
-0x06de, 0x06de,
-0x06e9, 0x06e9,
-0x06fd, 0x06fe,
-0x07f6, 0x07f6,
-0x09fa, 0x09fa,
-0x0b70, 0x0b70,
-0x0bf3, 0x0bf8,
-0x0bfa, 0x0bfa,
-0x0c7f, 0x0c7f,
-0x0d79, 0x0d79,
-0x0f01, 0x0f03,
-0x0f13, 0x0f13,
-0x0f15, 0x0f17,
-0x0f1a, 0x0f1f,
-0x0f34, 0x0f34,
-0x0f36, 0x0f36,
-0x0f38, 0x0f38,
-0x0fbe, 0x0fc5,
-0x0fc7, 0x0fcc,
-0x0fce, 0x0fcf,
-0x0fd5, 0x0fd8,
-0x109e, 0x109f,
-0x1390, 0x1399,
-0x1940, 0x1940,
-0x19de, 0x19ff,
-0x1b61, 0x1b6a,
-0x1b74, 0x1b7c,
-0x2100, 0x2101,
-0x2103, 0x2106,
-0x2108, 0x2109,
-0x2114, 0x2114,
-0x2116, 0x2117,
-0x211e, 0x2123,
-0x2125, 0x2125,
-0x2127, 0x2127,
-0x2129, 0x2129,
-0x212e, 0x212e,
-0x213a, 0x213b,
-0x214a, 0x214a,
-0x214c, 0x214d,
-0x214f, 0x214f,
-0x218a, 0x218b,
-0x2195, 0x2199,
-0x219c, 0x219f,
-0x21a1, 0x21a2,
-0x21a4, 0x21a5,
-0x21a7, 0x21ad,
-0x21af, 0x21cd,
-0x21d0, 0x21d1,
-0x21d3, 0x21d3,
-0x21d5, 0x21f3,
-0x2300, 0x2307,
-0x230c, 0x231f,
-0x2322, 0x2328,
-0x232b, 0x237b,
-0x237d, 0x239a,
-0x23b4, 0x23db,
-0x23e2, 0x23fa,
-0x2400, 0x2426,
-0x2440, 0x244a,
-0x249c, 0x24e9,
-0x2500, 0x25b6,
-0x25b8, 0x25c0,
-0x25c2, 0x25f7,
-0x2600, 0x266e,
-0x2670, 0x2767,
-0x2794, 0x27bf,
-0x2800, 0x28ff,
-0x2b00, 0x2b2f,
-0x2b45, 0x2b46,
-0x2b4d, 0x2b73,
-0x2b76, 0x2b95,
-0x2b98, 0x2bb9,
-0x2bbd, 0x2bc8,
-0x2bca, 0x2bd1,
-0x2bec, 0x2bef,
-0x2ce5, 0x2cea,
-0x2e80, 0x2e99,
-0x2e9b, 0x2ef3,
-0x2f00, 0x2fd5,
-0x2ff0, 0x2ffb,
-0x3004, 0x3004,
-0x3012, 0x3013,
-0x3020, 0x3020,
-0x3036, 0x3037,
-0x303e, 0x303f,
-0x3190, 0x3191,
-0x3196, 0x319f,
-0x31c0, 0x31e3,
-0x3200, 0x321e,
-0x322a, 0x3247,
-0x3250, 0x3250,
-0x3260, 0x327f,
-0x328a, 0x32b0,
-0x32c0, 0x32fe,
-0x3300, 0x33ff,
-0x4dc0, 0x4dff,
-0xa490, 0xa4c6,
-0xa828, 0xa82b,
-0xa836, 0xa837,
-0xa839, 0xa839,
-0xaa77, 0xaa79,
-0xfdfd, 0xfdfd,
-0xffe4, 0xffe4,
-0xffe8, 0xffe8,
-0xffed, 0xffee,
-0xfffc, 0xfffd,
-0x10137, 0x1013f,
-0x10179, 0x10189,
-0x1018c, 0x1018c,
-0x10190, 0x1019b,
-0x101a0, 0x101a0,
-0x101d0, 0x101fc,
-0x10877, 0x10878,
-0x10ac8, 0x10ac8,
-0x1173f, 0x1173f,
-0x16b3c, 0x16b3f,
-0x16b45, 0x16b45,
-0x1bc9c, 0x1bc9c,
-0x1d000, 0x1d0f5,
-0x1d100, 0x1d126,
-0x1d129, 0x1d164,
-0x1d16a, 0x1d16c,
-0x1d183, 0x1d184,
-0x1d18c, 0x1d1a9,
-0x1d1ae, 0x1d1e8,
-0x1d200, 0x1d241,
-0x1d245, 0x1d245,
-0x1d300, 0x1d356,
-0x1d800, 0x1d9ff,
-0x1da37, 0x1da3a,
-0x1da6d, 0x1da74,
-0x1da76, 0x1da83,
-0x1da85, 0x1da86,
-0x1f000, 0x1f02b,
-0x1f030, 0x1f093,
-0x1f0a0, 0x1f0ae,
-0x1f0b1, 0x1f0bf,
-0x1f0c1, 0x1f0cf,
-0x1f0d1, 0x1f0f5,
-0x1f110, 0x1f12e,
-0x1f130, 0x1f16b,
-0x1f170, 0x1f19a,
-0x1f1e6, 0x1f202,
-0x1f210, 0x1f23a,
-0x1f240, 0x1f248,
-0x1f250, 0x1f251,
-0x1f300, 0x1f3fa,
-0x1f400, 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,
-}; /* END of CR_So */
-
-/* PROPERTY: 'Z': Major Category */
-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 */
-
-/* PROPERTY: 'Zl': General Category */
-static const OnigCodePoint
-CR_Zl[] = { 1,
-0x2028, 0x2028,
-}; /* END of CR_Zl */
-
-/* PROPERTY: 'Zp': General Category */
-static const OnigCodePoint
-CR_Zp[] = { 1,
-0x2029, 0x2029,
-}; /* END of CR_Zp */
-
-/* PROPERTY: 'Zs': General Category */
-static const OnigCodePoint
-CR_Zs[] = { 7,
-0x0020, 0x0020,
-0x00a0, 0x00a0,
-0x1680, 0x1680,
-0x2000, 0x200a,
-0x202f, 0x202f,
-0x205f, 0x205f,
-0x3000, 0x3000,
-}; /* END of CR_Zs */
-
-/* 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: '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
-
-/* 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: '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: '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_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: '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,
+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
+
+/* PROPERTY: 'Cf': General Category */
+static const OnigCodePoint
+CR_Cf[] = { 17,
+0x00ad, 0x00ad,
+0x0600, 0x0605,
+0x061c, 0x061c,
+0x06dd, 0x06dd,
+0x070f, 0x070f,
+0x180e, 0x180e,
+0x200b, 0x200f,
+0x202a, 0x202e,
+0x2060, 0x2064,
+0x2066, 0x206f,
+0xfeff, 0xfeff,
+0xfff9, 0xfffb,
+0x110bd, 0x110bd,
+0x1bca0, 0x1bca3,
+0x1d173, 0x1d17a,
+0xe0001, 0xe0001,
+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,
-0x10428, 0x1044f,
+0x10400, 0x1044f,
+0x10c80, 0x10cb2,
 0x10cc0, 0x10cf2,
-0x118c0, 0x118df,
-}; /* END of CR_Changes_When_Titlecased */
+0x118a0, 0x118df,
+}; /* END of CR_Changes_When_Casemapped */
 
-/* PROPERTY: 'Changes_When_Casefolded': Derived Property */
+/* PROPERTY: 'Changes_When_Lowercased': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Casefolded[] = { 600,
+CR_Changes_When_Lowercased[] = { 588,
 0x0041, 0x005a,
-0x00b5, 0x00b5,
 0x00c0, 0x00d6,
-0x00d8, 0x00df,
+0x00d8, 0x00de,
 0x0100, 0x0100,
 0x0102, 0x0102,
 0x0104, 0x0104,
@@ -13444,7 +7512,7 @@ CR_Changes_When_Casefolded[] = { 600,
 0x0143, 0x0143,
 0x0145, 0x0145,
 0x0147, 0x0147,
-0x0149, 0x014a,
+0x014a, 0x014a,
 0x014c, 0x014c,
 0x014e, 0x014e,
 0x0150, 0x0150,
@@ -13470,7 +7538,6 @@ CR_Changes_When_Casefolded[] = { 600,
 0x0178, 0x0179,
 0x017b, 0x017b,
 0x017d, 0x017d,
-0x017f, 0x017f,
 0x0181, 0x0182,
 0x0184, 0x0184,
 0x0186, 0x0187,
@@ -13550,7 +7617,6 @@ CR_Changes_When_Casefolded[] = { 600,
 0x024a, 0x024a,
 0x024c, 0x024c,
 0x024e, 0x024e,
-0x0345, 0x0345,
 0x0370, 0x0370,
 0x0372, 0x0372,
 0x0376, 0x0376,
@@ -13561,9 +7627,7 @@ CR_Changes_When_Casefolded[] = { 600,
 0x038e, 0x038f,
 0x0391, 0x03a1,
 0x03a3, 0x03ab,
-0x03c2, 0x03c2,
-0x03cf, 0x03d1,
-0x03d5, 0x03d6,
+0x03cf, 0x03cf,
 0x03d8, 0x03d8,
 0x03da, 0x03da,
 0x03dc, 0x03dc,
@@ -13576,8 +7640,7 @@ CR_Changes_When_Casefolded[] = { 600,
 0x03ea, 0x03ea,
 0x03ec, 0x03ec,
 0x03ee, 0x03ee,
-0x03f0, 0x03f1,
-0x03f4, 0x03f5,
+0x03f4, 0x03f4,
 0x03f7, 0x03f7,
 0x03f9, 0x03fa,
 0x03fd, 0x042f,
@@ -13681,11 +7744,10 @@ CR_Changes_When_Casefolded[] = { 600,
 0x052c, 0x052c,
 0x052e, 0x052e,
 0x0531, 0x0556,
-0x0587, 0x0587,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
-0x13f8, 0x13fd,
+0x13a0, 0x13f5,
 0x1e00, 0x1e00,
 0x1e02, 0x1e02,
 0x1e04, 0x1e04,
@@ -13761,7 +7823,6 @@ CR_Changes_When_Casefolded[] = { 600,
 0x1e90, 0x1e90,
 0x1e92, 0x1e92,
 0x1e94, 0x1e94,
-0x1e9a, 0x1e9b,
 0x1e9e, 0x1e9e,
 0x1ea0, 0x1ea0,
 0x1ea2, 0x1ea2,
@@ -13821,15 +7882,14 @@ CR_Changes_When_Casefolded[] = { 600,
 0x1f5d, 0x1f5d,
 0x1f5f, 0x1f5f,
 0x1f68, 0x1f6f,
-0x1f80, 0x1faf,
-0x1fb2, 0x1fb4,
-0x1fb7, 0x1fbc,
-0x1fc2, 0x1fc4,
-0x1fc7, 0x1fcc,
+0x1f88, 0x1f8f,
+0x1f98, 0x1f9f,
+0x1fa8, 0x1faf,
+0x1fb8, 0x1fbc,
+0x1fc8, 0x1fcc,
 0x1fd8, 0x1fdb,
 0x1fe8, 0x1fec,
-0x1ff2, 0x1ff4,
-0x1ff7, 0x1ffc,
+0x1ff8, 0x1ffc,
 0x2126, 0x2126,
 0x212a, 0x212b,
 0x2132, 0x2132,
@@ -13997,190 +8057,2499 @@ CR_Changes_When_Casefolded[] = { 600,
 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,
-0xff21, 0xff3a,
-0x10400, 0x10427,
-0x10c80, 0x10cb2,
-0x118a0, 0x118bf,
-}; /* END of CR_Changes_When_Casefolded */
+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,
+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, 0xd7ff,
+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, 0xeffff,
+0xffffe, 0xfffff,
+0x10fffe, 0x10ffff,
+}; /* END of CR_Cn */
+
+/* PROPERTY: 'Co': General Category */
+static const OnigCodePoint
+CR_Co[] = { 3,
+0xe000, 0xf8ff,
+0xf0000, 0xffffd,
+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: 'Changes_When_Casemapped': Derived Property */
+/* PROPERTY: 'Duployan': 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,
+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,
-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,
+0x10d0, 0x10fa,
+0x10fc, 0x10ff,
 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 */
+}; /* END of CR_Georgian */
 
-/* PROPERTY: 'ID_Start': Derived Property */
+/* PROPERTY: 'Glagolitic': 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,
+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, 0x03f5,
-0x03f7, 0x0481,
+0x03a3, 0x0482,
 0x048a, 0x052f,
 0x0531, 0x0556,
-0x0559, 0x0559,
+0x0559, 0x055f,
 0x0561, 0x0587,
+0x0589, 0x058a,
+0x058d, 0x058f,
+0x05be, 0x05be,
+0x05c0, 0x05c0,
+0x05c3, 0x05c3,
+0x05c6, 0x05c6,
 0x05d0, 0x05ea,
-0x05f0, 0x05f2,
-0x0620, 0x064a,
-0x066e, 0x066f,
-0x0671, 0x06d3,
-0x06d5, 0x06d5,
+0x05f0, 0x05f4,
+0x0606, 0x060f,
+0x061b, 0x061b,
+0x061e, 0x064a,
+0x0660, 0x066f,
+0x0671, 0x06d5,
+0x06de, 0x06de,
 0x06e5, 0x06e6,
-0x06ee, 0x06ef,
-0x06fa, 0x06fc,
-0x06ff, 0x06ff,
+0x06e9, 0x06e9,
+0x06ee, 0x070d,
 0x0710, 0x0710,
 0x0712, 0x072f,
 0x074d, 0x07a5,
 0x07b1, 0x07b1,
-0x07ca, 0x07ea,
-0x07f4, 0x07f5,
-0x07fa, 0x07fa,
+0x07c0, 0x07ea,
+0x07f4, 0x07fa,
 0x0800, 0x0815,
 0x081a, 0x081a,
 0x0824, 0x0824,
 0x0828, 0x0828,
+0x0830, 0x083e,
 0x0840, 0x0858,
+0x085e, 0x085e,
 0x08a0, 0x08b4,
-0x0904, 0x0939,
-0x093d, 0x093d,
-0x0950, 0x0950,
+0x0903, 0x0939,
+0x093b, 0x093b,
+0x093d, 0x0940,
+0x0949, 0x094c,
+0x094e, 0x0950,
 0x0958, 0x0961,
-0x0971, 0x0980,
+0x0964, 0x0980,
+0x0982, 0x0983,
 0x0985, 0x098c,
 0x098f, 0x0990,
 0x0993, 0x09a8,
@@ -14188,10 +10557,14 @@ CR_ID_Start[] = { 555,
 0x09b2, 0x09b2,
 0x09b6, 0x09b9,
 0x09bd, 0x09bd,
+0x09bf, 0x09c0,
+0x09c7, 0x09c8,
+0x09cb, 0x09cc,
 0x09ce, 0x09ce,
 0x09dc, 0x09dd,
 0x09df, 0x09e1,
-0x09f0, 0x09f1,
+0x09e6, 0x09fb,
+0x0a03, 0x0a03,
 0x0a05, 0x0a0a,
 0x0a0f, 0x0a10,
 0x0a13, 0x0a28,
@@ -14199,19 +10572,26 @@ CR_ID_Start[] = { 555,
 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, 0x0abd,
+0x0abd, 0x0ac0,
+0x0ac9, 0x0ac9,
+0x0acb, 0x0acc,
 0x0ad0, 0x0ad0,
 0x0ae0, 0x0ae1,
+0x0ae6, 0x0af1,
 0x0af9, 0x0af9,
+0x0b02, 0x0b03,
 0x0b05, 0x0b0c,
 0x0b0f, 0x0b10,
 0x0b13, 0x0b28,
@@ -14219,9 +10599,12 @@ CR_ID_Start[] = { 555,
 0x0b32, 0x0b33,
 0x0b35, 0x0b39,
 0x0b3d, 0x0b3d,
+0x0b40, 0x0b40,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4c,
 0x0b5c, 0x0b5d,
 0x0b5f, 0x0b61,
-0x0b71, 0x0b71,
+0x0b66, 0x0b77,
 0x0b83, 0x0b83,
 0x0b85, 0x0b8a,
 0x0b8e, 0x0b90,
@@ -14232,38 +10615,64 @@ CR_ID_Start[] = { 555,
 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, 0x0cbd,
+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,
-0x0d7a, 0x0d7f,
+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,
-0x0e40, 0x0e46,
+0x0e3f, 0x0e46,
+0x0e4f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
 0x0e87, 0x0e88,
@@ -14280,25 +10689,35 @@ CR_ID_Start[] = { 555,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
+0x0ed0, 0x0ed9,
 0x0edc, 0x0edf,
-0x0f00, 0x0f00,
-0x0f40, 0x0f47,
+0x0f00, 0x0f17,
+0x0f1a, 0x0f34,
+0x0f36, 0x0f36,
+0x0f38, 0x0f38,
+0x0f3a, 0x0f47,
 0x0f49, 0x0f6c,
+0x0f7f, 0x0f7f,
+0x0f85, 0x0f85,
 0x0f88, 0x0f8c,
-0x1000, 0x102a,
-0x103f, 0x103f,
-0x1050, 0x1055,
+0x0fbe, 0x0fc5,
+0x0fc7, 0x0fcc,
+0x0fce, 0x0fda,
+0x1000, 0x102c,
+0x1031, 0x1031,
+0x1038, 0x1038,
+0x103b, 0x103c,
+0x103f, 0x1057,
 0x105a, 0x105d,
-0x1061, 0x1061,
-0x1065, 0x1066,
-0x106e, 0x1070,
+0x1061, 0x1070,
 0x1075, 0x1081,
-0x108e, 0x108e,
-0x10a0, 0x10c5,
+0x1083, 0x1084,
+0x1087, 0x108c,
+0x108e, 0x109c,
+0x109e, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
-0x10d0, 0x10fa,
-0x10fc, 0x1248,
+0x10d0, 0x1248,
 0x124a, 0x124d,
 0x1250, 0x1256,
 0x1258, 0x1258,
@@ -14314,45 +10733,77 @@ CR_ID_Start[] = { 555,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x1380, 0x138f,
+0x1360, 0x137c,
+0x1380, 0x1399,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
-0x1401, 0x166c,
-0x166f, 0x167f,
-0x1681, 0x169a,
-0x16a0, 0x16ea,
-0x16ee, 0x16f8,
+0x1400, 0x169c,
+0x16a0, 0x16f8,
 0x1700, 0x170c,
 0x170e, 0x1711,
 0x1720, 0x1731,
+0x1735, 0x1736,
 0x1740, 0x1751,
 0x1760, 0x176c,
 0x176e, 0x1770,
 0x1780, 0x17b3,
-0x17d7, 0x17d7,
-0x17dc, 0x17dc,
+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,
-0x1950, 0x196d,
+0x1923, 0x1926,
+0x1929, 0x192b,
+0x1930, 0x1931,
+0x1933, 0x1938,
+0x1940, 0x1940,
+0x1944, 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,
+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, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
@@ -14365,41 +10816,38 @@ CR_ID_Start[] = { 555,
 0x1f5d, 0x1f5d,
 0x1f5f, 0x1f7d,
 0x1f80, 0x1fb4,
-0x1fb6, 0x1fbc,
-0x1fbe, 0x1fbe,
-0x1fc2, 0x1fc4,
-0x1fc6, 0x1fcc,
-0x1fd0, 0x1fd3,
+0x1fb6, 0x1fc4,
+0x1fc6, 0x1fd3,
 0x1fd6, 0x1fdb,
-0x1fe0, 0x1fec,
+0x1fdd, 0x1fef,
 0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffc,
-0x2071, 0x2071,
-0x207f, 0x207f,
+0x1ff6, 0x1ffe,
+0x2000, 0x200a,
+0x2010, 0x2027,
+0x202f, 0x205f,
+0x2070, 0x2071,
+0x2074, 0x208e,
 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,
+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, 0x2ce4,
-0x2ceb, 0x2cee,
+0x2c60, 0x2cee,
 0x2cf2, 0x2cf3,
-0x2d00, 0x2d25,
+0x2cf9, 0x2d25,
 0x2d27, 0x2d27,
 0x2d2d, 0x2d2d,
 0x2d30, 0x2d67,
-0x2d6f, 0x2d6f,
+0x2d6f, 0x2d70,
 0x2d80, 0x2d96,
 0x2da0, 0x2da6,
 0x2da8, 0x2dae,
@@ -14409,71 +10857,80 @@ CR_ID_Start[] = { 555,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x3005, 0x3007,
-0x3021, 0x3029,
-0x3031, 0x3035,
-0x3038, 0x303c,
+0x2e00, 0x2e42,
+0x2e80, 0x2e99,
+0x2e9b, 0x2ef3,
+0x2f00, 0x2fd5,
+0x2ff0, 0x2ffb,
+0x3000, 0x3029,
+0x3030, 0x303f,
 0x3041, 0x3096,
-0x309b, 0x309f,
-0x30a1, 0x30fa,
-0x30fc, 0x30ff,
+0x309b, 0x30ff,
 0x3105, 0x312d,
 0x3131, 0x318e,
-0x31a0, 0x31ba,
-0x31f0, 0x31ff,
-0x3400, 0x4db5,
-0x4e00, 0x9fd5,
+0x3190, 0x31ba,
+0x31c0, 0x31e3,
+0x31f0, 0x321e,
+0x3220, 0x32fe,
+0x3300, 0x4db5,
+0x4dc0, 0x9fd5,
 0xa000, 0xa48c,
-0xa4d0, 0xa4fd,
-0xa500, 0xa60c,
-0xa610, 0xa61f,
-0xa62a, 0xa62b,
+0xa490, 0xa4c6,
+0xa4d0, 0xa62b,
 0xa640, 0xa66e,
-0xa67f, 0xa69d,
+0xa673, 0xa673,
+0xa67e, 0xa69d,
 0xa6a0, 0xa6ef,
-0xa717, 0xa71f,
-0xa722, 0xa788,
-0xa78b, 0xa7ad,
+0xa6f2, 0xa6f7,
+0xa700, 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,
+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,
-0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaaaf,
+0xaa4d, 0xaa4d,
+0xaa50, 0xaa59,
+0xaa5c, 0xaa7b,
+0xaa7d, 0xaaaf,
 0xaab1, 0xaab1,
 0xaab5, 0xaab6,
 0xaab9, 0xaabd,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
-0xaadb, 0xaadd,
-0xaae0, 0xaaea,
-0xaaf2, 0xaaf4,
+0xaadb, 0xaaeb,
+0xaaee, 0xaaf5,
 0xab01, 0xab06,
 0xab09, 0xab0e,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab5a,
-0xab5c, 0xab65,
-0xab70, 0xabe2,
+0xab30, 0xab65,
+0xab70, 0xabe4,
+0xabe6, 0xabe7,
+0xabe9, 0xabec,
+0xabf0, 0xabf9,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
 0xd7cb, 0xd7fb,
@@ -14482,26 +10939,31 @@ CR_ID_Start[] = { 555,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
 0xfb1d, 0xfb1d,
-0xfb1f, 0xfb28,
-0xfb2a, 0xfb36,
+0xfb1f, 0xfb36,
 0xfb38, 0xfb3c,
 0xfb3e, 0xfb3e,
 0xfb40, 0xfb41,
 0xfb43, 0xfb44,
-0xfb46, 0xfbb1,
-0xfbd3, 0xfd3d,
+0xfb46, 0xfbc1,
+0xfbd3, 0xfd3f,
 0xfd50, 0xfd8f,
 0xfd92, 0xfdc7,
-0xfdf0, 0xfdfb,
+0xfdf0, 0xfdfd,
+0xfe10, 0xfe19,
+0xfe30, 0xfe52,
+0xfe54, 0xfe66,
+0xfe68, 0xfe6b,
 0xfe70, 0xfe74,
 0xfe76, 0xfefc,
-0xff21, 0xff3a,
-0xff41, 0xff5a,
-0xff66, 0xffbe,
+0xff01, 0xff9d,
+0xffa0, 0xffbe,
 0xffc2, 0xffc7,
 0xffca, 0xffcf,
 0xffd2, 0xffd7,
 0xffda, 0xffdc,
+0xffe0, 0xffe6,
+0xffe8, 0xffee,
+0xfffc, 0xfffd,
 0x10000, 0x1000b,
 0x1000d, 0x10026,
 0x10028, 0x1003a,
@@ -14509,19 +10971,26 @@ CR_ID_Start[] = { 555,
 0x1003f, 0x1004d,
 0x10050, 0x1005d,
 0x10080, 0x100fa,
-0x10140, 0x10174,
+0x10100, 0x10102,
+0x10107, 0x10133,
+0x10137, 0x1018c,
+0x10190, 0x1019b,
+0x101a0, 0x101a0,
+0x101d0, 0x101fc,
 0x10280, 0x1029c,
 0x102a0, 0x102d0,
-0x10300, 0x1031f,
+0x102e1, 0x102fb,
+0x10300, 0x10323,
 0x10330, 0x1034a,
 0x10350, 0x10375,
 0x10380, 0x1039d,
-0x103a0, 0x103c3,
-0x103c8, 0x103cf,
-0x103d1, 0x103d5,
+0x1039f, 0x103c3,
+0x103c8, 0x103d5,
 0x10400, 0x1049d,
+0x104a0, 0x104a9,
 0x10500, 0x10527,
 0x10530, 0x10563,
+0x1056f, 0x1056f,
 0x10600, 0x10736,
 0x10740, 0x10755,
 0x10760, 0x10767,
@@ -14531,47 +11000,69 @@ CR_ID_Start[] = { 555,
 0x10837, 0x10838,
 0x1083c, 0x1083c,
 0x1083f, 0x10855,
-0x10860, 0x10876,
-0x10880, 0x1089e,
+0x10857, 0x1089e,
+0x108a7, 0x108af,
 0x108e0, 0x108f2,
 0x108f4, 0x108f5,
-0x10900, 0x10915,
-0x10920, 0x10939,
+0x108fb, 0x1091b,
+0x1091f, 0x10939,
+0x1093f, 0x1093f,
 0x10980, 0x109b7,
-0x109be, 0x109bf,
-0x10a00, 0x10a00,
+0x109bc, 0x109cf,
+0x109d2, 0x10a00,
 0x10a10, 0x10a13,
 0x10a15, 0x10a17,
 0x10a19, 0x10a33,
-0x10a60, 0x10a7c,
-0x10a80, 0x10a9c,
-0x10ac0, 0x10ac7,
-0x10ac9, 0x10ae4,
+0x10a40, 0x10a47,
+0x10a50, 0x10a58,
+0x10a60, 0x10a9f,
+0x10ac0, 0x10ae4,
+0x10aeb, 0x10af6,
 0x10b00, 0x10b35,
-0x10b40, 0x10b55,
-0x10b60, 0x10b72,
-0x10b80, 0x10b91,
+0x10b39, 0x10b55,
+0x10b58, 0x10b72,
+0x10b78, 0x10b91,
+0x10b99, 0x10b9c,
+0x10ba9, 0x10baf,
 0x10c00, 0x10c48,
 0x10c80, 0x10cb2,
 0x10cc0, 0x10cf2,
-0x11003, 0x11037,
-0x11083, 0x110af,
+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,
-0x11176, 0x11176,
-0x11183, 0x111b2,
-0x111c1, 0x111c4,
-0x111da, 0x111da,
-0x111dc, 0x111dc,
+0x11174, 0x11176,
+0x11182, 0x111b5,
+0x111bf, 0x111c9,
+0x111cd, 0x111cd,
+0x111d0, 0x111df,
+0x111e1, 0x111f4,
 0x11200, 0x11211,
-0x11213, 0x1122b,
+0x11213, 0x1122e,
+0x11232, 0x11233,
+0x11235, 0x11235,
+0x11238, 0x1123d,
 0x11280, 0x11286,
 0x11288, 0x11288,
 0x1128a, 0x1128d,
 0x1128f, 0x1129d,
-0x1129f, 0x112a8,
+0x1129f, 0x112a9,
 0x112b0, 0x112de,
+0x112e0, 0x112e2,
+0x112f0, 0x112f9,
+0x11302, 0x11303,
 0x11305, 0x1130c,
 0x1130f, 0x11310,
 0x11313, 0x11328,
@@ -14579,40 +11070,82 @@ CR_ID_Start[] = { 555,
 0x11332, 0x11333,
 0x11335, 0x11339,
 0x1133d, 0x1133d,
+0x1133f, 0x1133f,
+0x11341, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134d,
 0x11350, 0x11350,
-0x1135d, 0x11361,
+0x1135d, 0x11363,
 0x11480, 0x114af,
-0x114c4, 0x114c5,
-0x114c7, 0x114c7,
+0x114b1, 0x114b2,
+0x114b9, 0x114b9,
+0x114bb, 0x114bc,
+0x114be, 0x114be,
+0x114c1, 0x114c1,
+0x114c4, 0x114c7,
+0x114d0, 0x114d9,
 0x11580, 0x115ae,
-0x115d8, 0x115db,
-0x11600, 0x1162f,
-0x11644, 0x11644,
+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,
-0x118a0, 0x118df,
+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,
-0x16b40, 0x16b43,
+0x16b37, 0x16b45,
+0x16b50, 0x16b59,
+0x16b5b, 0x16b61,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16f00, 0x16f44,
-0x16f50, 0x16f50,
+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,
@@ -14632,18 +11165,14 @@ CR_ID_Start[] = { 555,
 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,
+0x1d6a8, 0x1d7cb,
+0x1d7ce, 0x1d9ff,
+0x1da37, 0x1da3a,
+0x1da6d, 0x1da74,
+0x1da76, 0x1da83,
+0x1da85, 0x1da8b,
 0x1e800, 0x1e8c4,
+0x1e8c7, 0x1e8cf,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -14677,676 +11206,584 @@ CR_ID_Start[] = { 555,
 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_ID_Start */
+}; /* END of CR_Grapheme_Base */
 
-/* PROPERTY: 'ID_Continue': Derived Property */
+/* PROPERTY: 'Grapheme_Extend': 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,
+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,
-0x09dc, 0x09dd,
-0x09df, 0x09e3,
-0x09e6, 0x09f1,
-0x0a01, 0x0a03,
-0x0a05, 0x0a0a,
-0x0a0f, 0x0a10,
-0x0a13, 0x0a28,
-0x0a2a, 0x0a30,
-0x0a32, 0x0a33,
-0x0a35, 0x0a36,
-0x0a38, 0x0a39,
+0x09e2, 0x09e3,
+0x0a01, 0x0a02,
 0x0a3c, 0x0a3c,
-0x0a3e, 0x0a42,
+0x0a41, 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,
+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,
-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,
+0x0b62, 0x0b63,
+0x0b82, 0x0b82,
+0x0bbe, 0x0bbe,
+0x0bc0, 0x0bc0,
+0x0bcd, 0x0bcd,
 0x0bd7, 0x0bd7,
-0x0be6, 0x0bef,
-0x0c00, 0x0c03,
-0x0c05, 0x0c0c,
-0x0c0e, 0x0c10,
-0x0c12, 0x0c28,
-0x0c2a, 0x0c39,
-0x0c3d, 0x0c44,
+0x0c00, 0x0c00,
+0x0c3e, 0x0c40,
 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,
+0x0c62, 0x0c63,
+0x0c81, 0x0c81,
+0x0cbc, 0x0cbc,
+0x0cbf, 0x0cbf,
+0x0cc2, 0x0cc2,
+0x0cc6, 0x0cc6,
+0x0ccc, 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,
+0x0ce2, 0x0ce3,
+0x0d01, 0x0d01,
+0x0d3e, 0x0d3e,
+0x0d41, 0x0d44,
+0x0d4d, 0x0d4d,
 0x0d57, 0x0d57,
-0x0d5f, 0x0d63,
-0x0d66, 0x0d6f,
-0x0d7a, 0x0d7f,
-0x0d82, 0x0d83,
-0x0d85, 0x0d96,
-0x0d9a, 0x0db1,
-0x0db3, 0x0dbb,
-0x0dbd, 0x0dbd,
-0x0dc0, 0x0dc6,
+0x0d62, 0x0d63,
 0x0dca, 0x0dca,
-0x0dcf, 0x0dd4,
+0x0dcf, 0x0dcf,
+0x0dd2, 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,
+0x0ddf, 0x0ddf,
+0x0e31, 0x0e31,
+0x0e34, 0x0e3a,
+0x0e47, 0x0e4e,
+0x0eb1, 0x0eb1,
+0x0eb4, 0x0eb9,
+0x0ebb, 0x0ebc,
 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,
+0x0f71, 0x0f7e,
+0x0f80, 0x0f84,
+0x0f86, 0x0f87,
+0x0f8d, 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,
+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,
-0x1780, 0x17d3,
-0x17d7, 0x17d7,
-0x17dc, 0x17dd,
-0x17e0, 0x17e9,
+0x17b4, 0x17b5,
+0x17b7, 0x17bd,
+0x17c6, 0x17c6,
+0x17c9, 0x17d3,
+0x17dd, 0x17dd,
 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,
+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, 0x1bf3,
-0x1c00, 0x1c37,
-0x1c40, 0x1c49,
-0x1c4d, 0x1c7d,
+0x1b80, 0x1b81,
+0x1ba2, 0x1ba5,
+0x1ba8, 0x1ba9,
+0x1bab, 0x1bad,
+0x1be6, 0x1be6,
+0x1be8, 0x1be9,
+0x1bed, 0x1bed,
+0x1bef, 0x1bf1,
+0x1c2c, 0x1c33,
+0x1c36, 0x1c37,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf6,
+0x1cd4, 0x1ce0,
+0x1ce2, 0x1ce8,
+0x1ced, 0x1ced,
+0x1cf4, 0x1cf4,
 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,
+0x1dc0, 0x1df5,
+0x1dfc, 0x1dff,
+0x200c, 0x200d,
+0x20d0, 0x20f0,
+0x2cef, 0x2cf1,
+0x2d7f, 0x2d7f,
 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,
+0x302a, 0x302f,
+0x3099, 0x309a,
+0xa66f, 0xa672,
 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,
+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,
-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,
+0x10376, 0x1037a,
+0x10a01, 0x10a03,
 0x10a05, 0x10a06,
-0x10a0c, 0x10a13,
-0x10a15, 0x10a17,
-0x10a19, 0x10a33,
+0x10a0c, 0x10a0f,
 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,
+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,
-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,
+0x1122f, 0x11231,
+0x11234, 0x11234,
+0x11236, 0x11237,
+0x112df, 0x112df,
+0x112e3, 0x112ea,
+0x11300, 0x11301,
+0x1133c, 0x1133c,
+0x1133e, 0x1133e,
+0x11340, 0x11340,
 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,
+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,
-0xe0100, 0xe01ef,
-}; /* END of CR_ID_Continue */
+}; /* 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: 'XID_Start': Derived Property */
+/* PROPERTY: 'IDS_Trinary_Operator': Binary Property */
 static const OnigCodePoint
-CR_XID_Start[] = { 562,
+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,
@@ -15355,59 +11792,58 @@ CR_XID_Start[] = { 562,
 0x02e0, 0x02e4,
 0x02ec, 0x02ec,
 0x02ee, 0x02ee,
-0x0370, 0x0374,
+0x0300, 0x0374,
 0x0376, 0x0377,
-0x037b, 0x037d,
+0x037a, 0x037d,
 0x037f, 0x037f,
-0x0386, 0x0386,
-0x0388, 0x038a,
+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,
-0x0620, 0x064a,
-0x066e, 0x066f,
-0x0671, 0x06d3,
-0x06d5, 0x06d5,
-0x06e5, 0x06e6,
-0x06ee, 0x06ef,
-0x06fa, 0x06fc,
+0x0610, 0x061a,
+0x0620, 0x0669,
+0x066e, 0x06d3,
+0x06d5, 0x06dc,
+0x06df, 0x06e8,
+0x06ea, 0x06fc,
 0x06ff, 0x06ff,
-0x0710, 0x0710,
-0x0712, 0x072f,
-0x074d, 0x07a5,
-0x07b1, 0x07b1,
-0x07ca, 0x07ea,
-0x07f4, 0x07f5,
+0x0710, 0x074a,
+0x074d, 0x07b1,
+0x07c0, 0x07f5,
 0x07fa, 0x07fa,
-0x0800, 0x0815,
-0x081a, 0x081a,
-0x0824, 0x0824,
-0x0828, 0x0828,
-0x0840, 0x0858,
+0x0800, 0x082d,
+0x0840, 0x085b,
 0x08a0, 0x08b4,
-0x0904, 0x0939,
-0x093d, 0x093d,
-0x0950, 0x0950,
-0x0958, 0x0961,
-0x0971, 0x0980,
+0x08e3, 0x0963,
+0x0966, 0x096f,
+0x0971, 0x0983,
 0x0985, 0x098c,
 0x098f, 0x0990,
 0x0993, 0x09a8,
 0x09aa, 0x09b0,
 0x09b2, 0x09b2,
 0x09b6, 0x09b9,
-0x09bd, 0x09bd,
-0x09ce, 0x09ce,
+0x09bc, 0x09c4,
+0x09c7, 0x09c8,
+0x09cb, 0x09ce,
+0x09d7, 0x09d7,
 0x09dc, 0x09dd,
-0x09df, 0x09e1,
-0x09f0, 0x09f1,
+0x09df, 0x09e3,
+0x09e6, 0x09f1,
+0x0a01, 0x0a03,
 0x0a05, 0x0a0a,
 0x0a0f, 0x0a10,
 0x0a13, 0x0a28,
@@ -15415,30 +11851,44 @@ CR_XID_Start[] = { 562,
 0x0a32, 0x0a33,
 0x0a35, 0x0a36,
 0x0a38, 0x0a39,
+0x0a3c, 0x0a3c,
+0x0a3e, 0x0a42,
+0x0a47, 0x0a48,
+0x0a4b, 0x0a4d,
+0x0a51, 0x0a51,
 0x0a59, 0x0a5c,
 0x0a5e, 0x0a5e,
-0x0a72, 0x0a74,
+0x0a66, 0x0a75,
+0x0a81, 0x0a83,
 0x0a85, 0x0a8d,
 0x0a8f, 0x0a91,
 0x0a93, 0x0aa8,
 0x0aaa, 0x0ab0,
 0x0ab2, 0x0ab3,
 0x0ab5, 0x0ab9,
-0x0abd, 0x0abd,
+0x0abc, 0x0ac5,
+0x0ac7, 0x0ac9,
+0x0acb, 0x0acd,
 0x0ad0, 0x0ad0,
-0x0ae0, 0x0ae1,
+0x0ae0, 0x0ae3,
+0x0ae6, 0x0aef,
 0x0af9, 0x0af9,
+0x0b01, 0x0b03,
 0x0b05, 0x0b0c,
 0x0b0f, 0x0b10,
 0x0b13, 0x0b28,
 0x0b2a, 0x0b30,
 0x0b32, 0x0b33,
 0x0b35, 0x0b39,
-0x0b3d, 0x0b3d,
+0x0b3c, 0x0b44,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4d,
+0x0b56, 0x0b57,
 0x0b5c, 0x0b5d,
-0x0b5f, 0x0b61,
+0x0b5f, 0x0b63,
+0x0b66, 0x0b6f,
 0x0b71, 0x0b71,
-0x0b83, 0x0b83,
+0x0b82, 0x0b83,
 0x0b85, 0x0b8a,
 0x0b8e, 0x0b90,
 0x0b92, 0x0b95,
@@ -15448,38 +11898,64 @@ CR_XID_Start[] = { 562,
 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, 0x0c3d,
+0x0c3d, 0x0c44,
+0x0c46, 0x0c48,
+0x0c4a, 0x0c4d,
+0x0c55, 0x0c56,
 0x0c58, 0x0c5a,
-0x0c60, 0x0c61,
+0x0c60, 0x0c63,
+0x0c66, 0x0c6f,
+0x0c81, 0x0c83,
 0x0c85, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
 0x0cb5, 0x0cb9,
-0x0cbd, 0x0cbd,
+0x0cbc, 0x0cc4,
+0x0cc6, 0x0cc8,
+0x0cca, 0x0ccd,
+0x0cd5, 0x0cd6,
 0x0cde, 0x0cde,
-0x0ce0, 0x0ce1,
+0x0ce0, 0x0ce3,
+0x0ce6, 0x0cef,
 0x0cf1, 0x0cf2,
+0x0d01, 0x0d03,
 0x0d05, 0x0d0c,
 0x0d0e, 0x0d10,
 0x0d12, 0x0d3a,
-0x0d3d, 0x0d3d,
-0x0d4e, 0x0d4e,
-0x0d5f, 0x0d61,
+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,
-0x0e01, 0x0e30,
-0x0e32, 0x0e32,
-0x0e40, 0x0e46,
+0x0dca, 0x0dca,
+0x0dcf, 0x0dd4,
+0x0dd6, 0x0dd6,
+0x0dd8, 0x0ddf,
+0x0de6, 0x0def,
+0x0df2, 0x0df3,
+0x0e01, 0x0e3a,
+0x0e40, 0x0e4e,
+0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
 0x0e87, 0x0e88,
@@ -15491,25 +11967,27 @@ CR_XID_Start[] = { 562,
 0x0ea5, 0x0ea5,
 0x0ea7, 0x0ea7,
 0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
-0x0eb2, 0x0eb2,
-0x0ebd, 0x0ebd,
+0x0ead, 0x0eb9,
+0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
+0x0ec8, 0x0ecd,
+0x0ed0, 0x0ed9,
 0x0edc, 0x0edf,
 0x0f00, 0x0f00,
-0x0f40, 0x0f47,
+0x0f18, 0x0f19,
+0x0f20, 0x0f29,
+0x0f35, 0x0f35,
+0x0f37, 0x0f37,
+0x0f39, 0x0f39,
+0x0f3e, 0x0f47,
 0x0f49, 0x0f6c,
-0x0f88, 0x0f8c,
-0x1000, 0x102a,
-0x103f, 0x103f,
-0x1050, 0x1055,
-0x105a, 0x105d,
-0x1061, 0x1061,
-0x1065, 0x1066,
-0x106e, 0x1070,
-0x1075, 0x1081,
-0x108e, 0x108e,
+0x0f71, 0x0f84,
+0x0f86, 0x0f97,
+0x0f99, 0x0fbc,
+0x0fc6, 0x0fc6,
+0x1000, 0x1049,
+0x1050, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -15530,6 +12008,8 @@ CR_XID_Start[] = { 562,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
+0x135d, 0x135f,
+0x1369, 0x1371,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -15539,39 +12019,48 @@ CR_XID_Start[] = { 562,
 0x16a0, 0x16ea,
 0x16ee, 0x16f8,
 0x1700, 0x170c,
-0x170e, 0x1711,
-0x1720, 0x1731,
-0x1740, 0x1751,
+0x170e, 0x1714,
+0x1720, 0x1734,
+0x1740, 0x1753,
 0x1760, 0x176c,
 0x176e, 0x1770,
-0x1780, 0x17b3,
+0x1772, 0x1773,
+0x1780, 0x17d3,
 0x17d7, 0x17d7,
-0x17dc, 0x17dc,
+0x17dc, 0x17dd,
+0x17e0, 0x17e9,
+0x180b, 0x180d,
+0x1810, 0x1819,
 0x1820, 0x1877,
-0x1880, 0x18a8,
-0x18aa, 0x18aa,
+0x1880, 0x18aa,
 0x18b0, 0x18f5,
 0x1900, 0x191e,
-0x1950, 0x196d,
+0x1920, 0x192b,
+0x1930, 0x193b,
+0x1946, 0x196d,
 0x1970, 0x1974,
 0x1980, 0x19ab,
 0x19b0, 0x19c9,
-0x1a00, 0x1a16,
-0x1a20, 0x1a54,
+0x19d0, 0x19da,
+0x1a00, 0x1a1b,
+0x1a20, 0x1a5e,
+0x1a60, 0x1a7c,
+0x1a7f, 0x1a89,
+0x1a90, 0x1a99,
 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,
+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,
@@ -15590,9 +12079,14 @@ CR_XID_Start[] = { 562,
 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,
@@ -15609,14 +12103,13 @@ CR_XID_Start[] = { 562,
 0x2c00, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2ce4,
-0x2ceb, 0x2cee,
-0x2cf2, 0x2cf3,
+0x2ceb, 0x2cf3,
 0x2d00, 0x2d25,
 0x2d27, 0x2d27,
 0x2d2d, 0x2d2d,
 0x2d30, 0x2d67,
 0x2d6f, 0x2d6f,
-0x2d80, 0x2d96,
+0x2d7f, 0x2d96,
 0x2da0, 0x2da6,
 0x2da8, 0x2dae,
 0x2db0, 0x2db6,
@@ -15625,12 +12118,13 @@ CR_XID_Start[] = { 562,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
+0x2de0, 0x2dff,
 0x3005, 0x3007,
-0x3021, 0x3029,
+0x3021, 0x302f,
 0x3031, 0x3035,
 0x3038, 0x303c,
 0x3041, 0x3096,
-0x309d, 0x309f,
+0x3099, 0x309f,
 0x30a1, 0x30fa,
 0x30fc, 0x30ff,
 0x3105, 0x312d,
@@ -15642,46 +12136,35 @@ CR_XID_Start[] = { 562,
 0xa000, 0xa48c,
 0xa4d0, 0xa4fd,
 0xa500, 0xa60c,
-0xa610, 0xa61f,
-0xa62a, 0xa62b,
-0xa640, 0xa66e,
-0xa67f, 0xa69d,
-0xa6a0, 0xa6ef,
+0xa610, 0xa62b,
+0xa640, 0xa66f,
+0xa674, 0xa67d,
+0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
 0xa78b, 0xa7ad,
 0xa7b0, 0xa7b7,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa822,
+0xa7f7, 0xa827,
 0xa840, 0xa873,
-0xa882, 0xa8b3,
-0xa8f2, 0xa8f7,
+0xa880, 0xa8c4,
+0xa8d0, 0xa8d9,
+0xa8e0, 0xa8f7,
 0xa8fb, 0xa8fb,
 0xa8fd, 0xa8fd,
-0xa90a, 0xa925,
-0xa930, 0xa946,
+0xa900, 0xa92d,
+0xa930, 0xa953,
 0xa960, 0xa97c,
-0xa984, 0xa9b2,
-0xa9cf, 0xa9cf,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9ef,
-0xa9fa, 0xa9fe,
-0xaa00, 0xaa28,
-0xaa40, 0xaa42,
-0xaa44, 0xaa4b,
+0xa980, 0xa9c0,
+0xa9cf, 0xa9d9,
+0xa9e0, 0xa9fe,
+0xaa00, 0xaa36,
+0xaa40, 0xaa4d,
+0xaa50, 0xaa59,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaaaf,
-0xaab1, 0xaab1,
-0xaab5, 0xaab6,
-0xaab9, 0xaabd,
-0xaac0, 0xaac0,
-0xaac2, 0xaac2,
+0xaa7a, 0xaac2,
 0xaadb, 0xaadd,
-0xaae0, 0xaaea,
-0xaaf2, 0xaaf4,
+0xaae0, 0xaaef,
+0xaaf2, 0xaaf6,
 0xab01, 0xab06,
 0xab09, 0xab0e,
 0xab11, 0xab16,
@@ -15689,7 +12172,9 @@ CR_XID_Start[] = { 562,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
 0xab5c, 0xab65,
-0xab70, 0xabe2,
+0xab70, 0xabea,
+0xabec, 0xabed,
+0xabf0, 0xabf9,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
 0xd7cb, 0xd7fb,
@@ -15697,30 +12182,28 @@ CR_XID_Start[] = { 562,
 0xfa70, 0xfad9,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
-0xfb1d, 0xfb1d,
-0xfb1f, 0xfb28,
+0xfb1d, 0xfb28,
 0xfb2a, 0xfb36,
 0xfb38, 0xfb3c,
 0xfb3e, 0xfb3e,
 0xfb40, 0xfb41,
 0xfb43, 0xfb44,
 0xfb46, 0xfbb1,
-0xfbd3, 0xfc5d,
-0xfc64, 0xfd3d,
+0xfbd3, 0xfd3d,
 0xfd50, 0xfd8f,
 0xfd92, 0xfdc7,
-0xfdf0, 0xfdf9,
-0xfe71, 0xfe71,
-0xfe73, 0xfe73,
-0xfe77, 0xfe77,
-0xfe79, 0xfe79,
-0xfe7b, 0xfe7b,
-0xfe7d, 0xfe7d,
-0xfe7f, 0xfefc,
+0xfdf0, 0xfdfb,
+0xfe00, 0xfe0f,
+0xfe20, 0xfe2f,
+0xfe33, 0xfe34,
+0xfe4d, 0xfe4f,
+0xfe70, 0xfe74,
+0xfe76, 0xfefc,
+0xff10, 0xff19,
 0xff21, 0xff3a,
+0xff3f, 0xff3f,
 0xff41, 0xff5a,
-0xff66, 0xff9d,
-0xffa0, 0xffbe,
+0xff66, 0xffbe,
 0xffc2, 0xffc7,
 0xffca, 0xffcf,
 0xffd2, 0xffd7,
@@ -15733,16 +12216,19 @@ CR_XID_Start[] = { 562,
 0x10050, 0x1005d,
 0x10080, 0x100fa,
 0x10140, 0x10174,
+0x101fd, 0x101fd,
 0x10280, 0x1029c,
 0x102a0, 0x102d0,
+0x102e0, 0x102e0,
 0x10300, 0x1031f,
 0x10330, 0x1034a,
-0x10350, 0x10375,
+0x10350, 0x1037a,
 0x10380, 0x1039d,
 0x103a0, 0x103c3,
 0x103c8, 0x103cf,
 0x103d1, 0x103d5,
 0x10400, 0x1049d,
+0x104a0, 0x104a9,
 0x10500, 0x10527,
 0x10530, 0x10563,
 0x10600, 0x10736,
@@ -15762,14 +12248,17 @@ CR_XID_Start[] = { 562,
 0x10920, 0x10939,
 0x10980, 0x109b7,
 0x109be, 0x109bf,
-0x10a00, 0x10a00,
-0x10a10, 0x10a13,
+0x10a00, 0x10a03,
+0x10a05, 0x10a06,
+0x10a0c, 0x10a13,
 0x10a15, 0x10a17,
 0x10a19, 0x10a33,
+0x10a38, 0x10a3a,
+0x10a3f, 0x10a3f,
 0x10a60, 0x10a7c,
 0x10a80, 0x10a9c,
 0x10ac0, 0x10ac7,
-0x10ac9, 0x10ae4,
+0x10ac9, 0x10ae6,
 0x10b00, 0x10b35,
 0x10b40, 0x10b55,
 0x10b60, 0x10b72,
@@ -15777,43 +12266,58 @@ CR_XID_Start[] = { 562,
 0x10c00, 0x10c48,
 0x10c80, 0x10cb2,
 0x10cc0, 0x10cf2,
-0x11003, 0x11037,
-0x11083, 0x110af,
+0x11000, 0x11046,
+0x11066, 0x1106f,
+0x1107f, 0x110ba,
 0x110d0, 0x110e8,
-0x11103, 0x11126,
-0x11150, 0x11172,
+0x110f0, 0x110f9,
+0x11100, 0x11134,
+0x11136, 0x1113f,
+0x11150, 0x11173,
 0x11176, 0x11176,
-0x11183, 0x111b2,
-0x111c1, 0x111c4,
-0x111da, 0x111da,
+0x11180, 0x111c4,
+0x111ca, 0x111cc,
+0x111d0, 0x111da,
 0x111dc, 0x111dc,
 0x11200, 0x11211,
-0x11213, 0x1122b,
+0x11213, 0x11237,
 0x11280, 0x11286,
 0x11288, 0x11288,
 0x1128a, 0x1128d,
 0x1128f, 0x1129d,
 0x1129f, 0x112a8,
-0x112b0, 0x112de,
+0x112b0, 0x112ea,
+0x112f0, 0x112f9,
+0x11300, 0x11303,
 0x11305, 0x1130c,
 0x1130f, 0x11310,
 0x11313, 0x11328,
 0x1132a, 0x11330,
 0x11332, 0x11333,
 0x11335, 0x11339,
-0x1133d, 0x1133d,
+0x1133c, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134d,
 0x11350, 0x11350,
-0x1135d, 0x11361,
-0x11480, 0x114af,
-0x114c4, 0x114c5,
+0x11357, 0x11357,
+0x1135d, 0x11363,
+0x11366, 0x1136c,
+0x11370, 0x11374,
+0x11480, 0x114c5,
 0x114c7, 0x114c7,
-0x11580, 0x115ae,
-0x115d8, 0x115db,
-0x11600, 0x1162f,
+0x114d0, 0x114d9,
+0x11580, 0x115b5,
+0x115b8, 0x115c0,
+0x115d8, 0x115dd,
+0x11600, 0x11640,
 0x11644, 0x11644,
-0x11680, 0x116aa,
+0x11650, 0x11659,
+0x11680, 0x116b7,
+0x116c0, 0x116c9,
 0x11700, 0x11719,
-0x118a0, 0x118df,
+0x1171d, 0x1172b,
+0x11730, 0x11739,
+0x118a0, 0x118e9,
 0x118ff, 0x118ff,
 0x11ac0, 0x11af8,
 0x12000, 0x12399,
@@ -15823,19 +12327,29 @@ CR_XID_Start[] = { 562,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
+0x16a60, 0x16a69,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b2f,
+0x16af0, 0x16af4,
+0x16b00, 0x16b36,
 0x16b40, 0x16b43,
+0x16b50, 0x16b59,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16f00, 0x16f44,
-0x16f50, 0x16f50,
-0x16f93, 0x16f9f,
+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,
@@ -15866,7 +12380,15 @@ CR_XID_Start[] = { 562,
 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,
@@ -15905,18 +12427,16 @@ CR_XID_Start[] = { 562,
 0x2b740, 0x2b81d,
 0x2b820, 0x2cea1,
 0x2f800, 0x2fa1d,
-}; /* END of CR_XID_Start */
+0xe0100, 0xe01ef,
+}; /* END of CR_ID_Continue */
 
-/* PROPERTY: 'XID_Continue': Derived Property */
+/* PROPERTY: 'ID_Start': Derived Property */
 static const OnigCodePoint
-CR_XID_Continue[] = { 658,
-0x0030, 0x0039,
+CR_ID_Start[] = { 555,
 0x0041, 0x005a,
-0x005f, 0x005f,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
 0x00b5, 0x00b5,
-0x00b7, 0x00b7,
 0x00ba, 0x00ba,
 0x00c0, 0x00d6,
 0x00d8, 0x00f6,
@@ -15925,58 +12445,59 @@ CR_XID_Continue[] = { 658,
 0x02e0, 0x02e4,
 0x02ec, 0x02ec,
 0x02ee, 0x02ee,
-0x0300, 0x0374,
+0x0370, 0x0374,
 0x0376, 0x0377,
-0x037b, 0x037d,
+0x037a, 0x037d,
 0x037f, 0x037f,
-0x0386, 0x038a,
+0x0386, 0x0386,
+0x0388, 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,
+0x0620, 0x064a,
+0x066e, 0x066f,
+0x0671, 0x06d3,
+0x06d5, 0x06d5,
+0x06e5, 0x06e6,
+0x06ee, 0x06ef,
+0x06fa, 0x06fc,
 0x06ff, 0x06ff,
-0x0710, 0x074a,
-0x074d, 0x07b1,
-0x07c0, 0x07f5,
+0x0710, 0x0710,
+0x0712, 0x072f,
+0x074d, 0x07a5,
+0x07b1, 0x07b1,
+0x07ca, 0x07ea,
+0x07f4, 0x07f5,
 0x07fa, 0x07fa,
-0x0800, 0x082d,
-0x0840, 0x085b,
+0x0800, 0x0815,
+0x081a, 0x081a,
+0x0824, 0x0824,
+0x0828, 0x0828,
+0x0840, 0x0858,
 0x08a0, 0x08b4,
-0x08e3, 0x0963,
-0x0966, 0x096f,
-0x0971, 0x0983,
+0x0904, 0x0939,
+0x093d, 0x093d,
+0x0950, 0x0950,
+0x0958, 0x0961,
+0x0971, 0x0980,
 0x0985, 0x098c,
 0x098f, 0x0990,
 0x0993, 0x09a8,
 0x09aa, 0x09b0,
 0x09b2, 0x09b2,
 0x09b6, 0x09b9,
-0x09bc, 0x09c4,
-0x09c7, 0x09c8,
-0x09cb, 0x09ce,
-0x09d7, 0x09d7,
+0x09bd, 0x09bd,
+0x09ce, 0x09ce,
 0x09dc, 0x09dd,
-0x09df, 0x09e3,
-0x09e6, 0x09f1,
-0x0a01, 0x0a03,
+0x09df, 0x09e1,
+0x09f0, 0x09f1,
 0x0a05, 0x0a0a,
 0x0a0f, 0x0a10,
 0x0a13, 0x0a28,
@@ -15984,44 +12505,30 @@ CR_XID_Continue[] = { 658,
 0x0a32, 0x0a33,
 0x0a35, 0x0a36,
 0x0a38, 0x0a39,
-0x0a3c, 0x0a3c,
-0x0a3e, 0x0a42,
-0x0a47, 0x0a48,
-0x0a4b, 0x0a4d,
-0x0a51, 0x0a51,
 0x0a59, 0x0a5c,
 0x0a5e, 0x0a5e,
-0x0a66, 0x0a75,
-0x0a81, 0x0a83,
+0x0a72, 0x0a74,
 0x0a85, 0x0a8d,
 0x0a8f, 0x0a91,
 0x0a93, 0x0aa8,
 0x0aaa, 0x0ab0,
 0x0ab2, 0x0ab3,
 0x0ab5, 0x0ab9,
-0x0abc, 0x0ac5,
-0x0ac7, 0x0ac9,
-0x0acb, 0x0acd,
+0x0abd, 0x0abd,
 0x0ad0, 0x0ad0,
-0x0ae0, 0x0ae3,
-0x0ae6, 0x0aef,
+0x0ae0, 0x0ae1,
 0x0af9, 0x0af9,
-0x0b01, 0x0b03,
 0x0b05, 0x0b0c,
 0x0b0f, 0x0b10,
 0x0b13, 0x0b28,
 0x0b2a, 0x0b30,
-0x0b32, 0x0b33,
-0x0b35, 0x0b39,
-0x0b3c, 0x0b44,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4d,
-0x0b56, 0x0b57,
+0x0b32, 0x0b33,
+0x0b35, 0x0b39,
+0x0b3d, 0x0b3d,
 0x0b5c, 0x0b5d,
-0x0b5f, 0x0b63,
-0x0b66, 0x0b6f,
+0x0b5f, 0x0b61,
 0x0b71, 0x0b71,
-0x0b82, 0x0b83,
+0x0b83, 0x0b83,
 0x0b85, 0x0b8a,
 0x0b8e, 0x0b90,
 0x0b92, 0x0b95,
@@ -16031,64 +12538,38 @@ CR_XID_Continue[] = { 658,
 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,
+0x0c3d, 0x0c3d,
 0x0c58, 0x0c5a,
-0x0c60, 0x0c63,
-0x0c66, 0x0c6f,
-0x0c81, 0x0c83,
+0x0c60, 0x0c61,
 0x0c85, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
 0x0cb5, 0x0cb9,
-0x0cbc, 0x0cc4,
-0x0cc6, 0x0cc8,
-0x0cca, 0x0ccd,
-0x0cd5, 0x0cd6,
+0x0cbd, 0x0cbd,
 0x0cde, 0x0cde,
-0x0ce0, 0x0ce3,
-0x0ce6, 0x0cef,
+0x0ce0, 0x0ce1,
 0x0cf1, 0x0cf2,
-0x0d01, 0x0d03,
 0x0d05, 0x0d0c,
 0x0d0e, 0x0d10,
 0x0d12, 0x0d3a,
-0x0d3d, 0x0d44,
-0x0d46, 0x0d48,
-0x0d4a, 0x0d4e,
-0x0d57, 0x0d57,
-0x0d5f, 0x0d63,
-0x0d66, 0x0d6f,
+0x0d3d, 0x0d3d,
+0x0d4e, 0x0d4e,
+0x0d5f, 0x0d61,
 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,
+0x0e01, 0x0e30,
+0x0e32, 0x0e33,
+0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
 0x0e87, 0x0e88,
@@ -16100,27 +12581,25 @@ CR_XID_Continue[] = { 658,
 0x0ea5, 0x0ea5,
 0x0ea7, 0x0ea7,
 0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ead, 0x0eb0,
+0x0eb2, 0x0eb3,
+0x0ebd, 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,
+0x0f40, 0x0f47,
 0x0f49, 0x0f6c,
-0x0f71, 0x0f84,
-0x0f86, 0x0f97,
-0x0f99, 0x0fbc,
-0x0fc6, 0x0fc6,
-0x1000, 0x1049,
-0x1050, 0x109d,
+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,
@@ -16141,8 +12620,6 @@ CR_XID_Continue[] = { 658,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135d, 0x135f,
-0x1369, 0x1371,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -16152,48 +12629,39 @@ CR_XID_Continue[] = { 658,
 0x16a0, 0x16ea,
 0x16ee, 0x16f8,
 0x1700, 0x170c,
-0x170e, 0x1714,
-0x1720, 0x1734,
-0x1740, 0x1753,
+0x170e, 0x1711,
+0x1720, 0x1731,
+0x1740, 0x1751,
 0x1760, 0x176c,
 0x176e, 0x1770,
-0x1772, 0x1773,
-0x1780, 0x17d3,
+0x1780, 0x17b3,
 0x17d7, 0x17d7,
-0x17dc, 0x17dd,
-0x17e0, 0x17e9,
-0x180b, 0x180d,
-0x1810, 0x1819,
+0x17dc, 0x17dc,
 0x1820, 0x1877,
-0x1880, 0x18aa,
+0x1880, 0x18a8,
+0x18aa, 0x18aa,
 0x18b0, 0x18f5,
 0x1900, 0x191e,
-0x1920, 0x192b,
-0x1930, 0x193b,
-0x1946, 0x196d,
+0x1950, 0x196d,
 0x1970, 0x1974,
 0x1980, 0x19ab,
 0x19b0, 0x19c9,
-0x19d0, 0x19da,
-0x1a00, 0x1a1b,
-0x1a20, 0x1a5e,
-0x1a60, 0x1a7c,
-0x1a7f, 0x1a89,
-0x1a90, 0x1a99,
+0x1a00, 0x1a16,
+0x1a20, 0x1a54,
 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,
+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,
@@ -16212,14 +12680,9 @@ CR_XID_Continue[] = { 658,
 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,
@@ -16236,13 +12699,14 @@ CR_XID_Continue[] = { 658,
 0x2c00, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2ce4,
-0x2ceb, 0x2cf3,
+0x2ceb, 0x2cee,
+0x2cf2, 0x2cf3,
 0x2d00, 0x2d25,
 0x2d27, 0x2d27,
 0x2d2d, 0x2d2d,
 0x2d30, 0x2d67,
 0x2d6f, 0x2d6f,
-0x2d7f, 0x2d96,
+0x2d80, 0x2d96,
 0x2da0, 0x2da6,
 0x2da8, 0x2dae,
 0x2db0, 0x2db6,
@@ -16251,14 +12715,12 @@ CR_XID_Continue[] = { 658,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2dff,
 0x3005, 0x3007,
-0x3021, 0x302f,
+0x3021, 0x3029,
 0x3031, 0x3035,
 0x3038, 0x303c,
 0x3041, 0x3096,
-0x3099, 0x309a,
-0x309d, 0x309f,
+0x309b, 0x309f,
 0x30a1, 0x30fa,
 0x30fc, 0x30ff,
 0x3105, 0x312d,
@@ -16270,35 +12732,46 @@ CR_XID_Continue[] = { 658,
 0xa000, 0xa48c,
 0xa4d0, 0xa4fd,
 0xa500, 0xa60c,
-0xa610, 0xa62b,
-0xa640, 0xa66f,
-0xa674, 0xa67d,
-0xa67f, 0xa6f1,
+0xa610, 0xa61f,
+0xa62a, 0xa62b,
+0xa640, 0xa66e,
+0xa67f, 0xa69d,
+0xa6a0, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
 0xa78b, 0xa7ad,
 0xa7b0, 0xa7b7,
-0xa7f7, 0xa827,
+0xa7f7, 0xa801,
+0xa803, 0xa805,
+0xa807, 0xa80a,
+0xa80c, 0xa822,
 0xa840, 0xa873,
-0xa880, 0xa8c4,
-0xa8d0, 0xa8d9,
-0xa8e0, 0xa8f7,
+0xa882, 0xa8b3,
+0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
 0xa8fd, 0xa8fd,
-0xa900, 0xa92d,
-0xa930, 0xa953,
+0xa90a, 0xa925,
+0xa930, 0xa946,
 0xa960, 0xa97c,
-0xa980, 0xa9c0,
-0xa9cf, 0xa9d9,
-0xa9e0, 0xa9fe,
-0xaa00, 0xaa36,
-0xaa40, 0xaa4d,
-0xaa50, 0xaa59,
+0xa984, 0xa9b2,
+0xa9cf, 0xa9cf,
+0xa9e0, 0xa9e4,
+0xa9e6, 0xa9ef,
+0xa9fa, 0xa9fe,
+0xaa00, 0xaa28,
+0xaa40, 0xaa42,
+0xaa44, 0xaa4b,
 0xaa60, 0xaa76,
-0xaa7a, 0xaac2,
+0xaa7a, 0xaa7a,
+0xaa7e, 0xaaaf,
+0xaab1, 0xaab1,
+0xaab5, 0xaab6,
+0xaab9, 0xaabd,
+0xaac0, 0xaac0,
+0xaac2, 0xaac2,
 0xaadb, 0xaadd,
-0xaae0, 0xaaef,
-0xaaf2, 0xaaf6,
+0xaae0, 0xaaea,
+0xaaf2, 0xaaf4,
 0xab01, 0xab06,
 0xab09, 0xab0e,
 0xab11, 0xab16,
@@ -16306,9 +12779,7 @@ CR_XID_Continue[] = { 658,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
 0xab5c, 0xab65,
-0xab70, 0xabea,
-0xabec, 0xabed,
-0xabf0, 0xabf9,
+0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
 0xd7cb, 0xd7fb,
@@ -16316,32 +12787,21 @@ CR_XID_Continue[] = { 658,
 0xfa70, 0xfad9,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
-0xfb1d, 0xfb28,
+0xfb1d, 0xfb1d,
+0xfb1f, 0xfb28,
 0xfb2a, 0xfb36,
 0xfb38, 0xfb3c,
 0xfb3e, 0xfb3e,
 0xfb40, 0xfb41,
 0xfb43, 0xfb44,
 0xfb46, 0xfbb1,
-0xfbd3, 0xfc5d,
-0xfc64, 0xfd3d,
+0xfbd3, 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,
+0xfdf0, 0xfdfb,
+0xfe70, 0xfe74,
+0xfe76, 0xfefc,
 0xff21, 0xff3a,
-0xff3f, 0xff3f,
 0xff41, 0xff5a,
 0xff66, 0xffbe,
 0xffc2, 0xffc7,
@@ -16356,19 +12816,16 @@ CR_XID_Continue[] = { 658,
 0x10050, 0x1005d,
 0x10080, 0x100fa,
 0x10140, 0x10174,
-0x101fd, 0x101fd,
 0x10280, 0x1029c,
 0x102a0, 0x102d0,
-0x102e0, 0x102e0,
 0x10300, 0x1031f,
 0x10330, 0x1034a,
-0x10350, 0x1037a,
+0x10350, 0x10375,
 0x10380, 0x1039d,
 0x103a0, 0x103c3,
 0x103c8, 0x103cf,
 0x103d1, 0x103d5,
 0x10400, 0x1049d,
-0x104a0, 0x104a9,
 0x10500, 0x10527,
 0x10530, 0x10563,
 0x10600, 0x10736,
@@ -16388,17 +12845,14 @@ CR_XID_Continue[] = { 658,
 0x10920, 0x10939,
 0x10980, 0x109b7,
 0x109be, 0x109bf,
-0x10a00, 0x10a03,
-0x10a05, 0x10a06,
-0x10a0c, 0x10a13,
+0x10a00, 0x10a00,
+0x10a10, 0x10a13,
 0x10a15, 0x10a17,
 0x10a19, 0x10a33,
-0x10a38, 0x10a3a,
-0x10a3f, 0x10a3f,
 0x10a60, 0x10a7c,
 0x10a80, 0x10a9c,
 0x10ac0, 0x10ac7,
-0x10ac9, 0x10ae6,
+0x10ac9, 0x10ae4,
 0x10b00, 0x10b35,
 0x10b40, 0x10b55,
 0x10b60, 0x10b72,
@@ -16406,58 +12860,43 @@ CR_XID_Continue[] = { 658,
 0x10c00, 0x10c48,
 0x10c80, 0x10cb2,
 0x10cc0, 0x10cf2,
-0x11000, 0x11046,
-0x11066, 0x1106f,
-0x1107f, 0x110ba,
+0x11003, 0x11037,
+0x11083, 0x110af,
 0x110d0, 0x110e8,
-0x110f0, 0x110f9,
-0x11100, 0x11134,
-0x11136, 0x1113f,
-0x11150, 0x11173,
+0x11103, 0x11126,
+0x11150, 0x11172,
 0x11176, 0x11176,
-0x11180, 0x111c4,
-0x111ca, 0x111cc,
-0x111d0, 0x111da,
+0x11183, 0x111b2,
+0x111c1, 0x111c4,
+0x111da, 0x111da,
 0x111dc, 0x111dc,
 0x11200, 0x11211,
-0x11213, 0x11237,
+0x11213, 0x1122b,
 0x11280, 0x11286,
 0x11288, 0x11288,
 0x1128a, 0x1128d,
 0x1128f, 0x1129d,
 0x1129f, 0x112a8,
-0x112b0, 0x112ea,
-0x112f0, 0x112f9,
-0x11300, 0x11303,
+0x112b0, 0x112de,
 0x11305, 0x1130c,
 0x1130f, 0x11310,
 0x11313, 0x11328,
 0x1132a, 0x11330,
 0x11332, 0x11333,
 0x11335, 0x11339,
-0x1133c, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134d,
+0x1133d, 0x1133d,
 0x11350, 0x11350,
-0x11357, 0x11357,
-0x1135d, 0x11363,
-0x11366, 0x1136c,
-0x11370, 0x11374,
-0x11480, 0x114c5,
+0x1135d, 0x11361,
+0x11480, 0x114af,
+0x114c4, 0x114c5,
 0x114c7, 0x114c7,
-0x114d0, 0x114d9,
-0x11580, 0x115b5,
-0x115b8, 0x115c0,
-0x115d8, 0x115dd,
-0x11600, 0x11640,
+0x11580, 0x115ae,
+0x115d8, 0x115db,
+0x11600, 0x1162f,
 0x11644, 0x11644,
-0x11650, 0x11659,
-0x11680, 0x116b7,
-0x116c0, 0x116c9,
+0x11680, 0x116aa,
 0x11700, 0x11719,
-0x1171d, 0x1172b,
-0x11730, 0x11739,
-0x118a0, 0x118e9,
+0x118a0, 0x118df,
 0x118ff, 0x118ff,
 0x11ac0, 0x11af8,
 0x12000, 0x12399,
@@ -16467,29 +12906,19 @@ CR_XID_Continue[] = { 658,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
-0x16a60, 0x16a69,
 0x16ad0, 0x16aed,
-0x16af0, 0x16af4,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
-0x16b50, 0x16b59,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f8f, 0x16f9f,
+0x16f50, 0x16f50,
+0x16f93, 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,
@@ -16520,15 +12949,7 @@ CR_XID_Continue[] = { 658,
 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,
@@ -16567,192 +12988,41 @@ CR_XID_Continue[] = { 658,
 0x2b740, 0x2b81d,
 0x2b820, 0x2cea1,
 0x2f800, 0x2fa1d,
-0xe0100, 0xe01ef,
-}; /* END of CR_XID_Continue */
+}; /* END of CR_ID_Start */
 
-/* PROPERTY: 'Default_Ignorable_Code_Point': Derived Property */
+/* PROPERTY: 'Ideographic': Binary 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 */
+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: 'Grapheme_Extend': Derived Property */
+/* PROPERTY: 'Imperial_Aramaic': Script */
 static const OnigCodePoint
-CR_Grapheme_Extend[] = { 283,
+CR_Imperial_Aramaic[] = { 2,
+0x10840, 0x10855,
+0x10857, 0x1085f,
+}; /* END of CR_Imperial_Aramaic */
+
+/* PROPERTY: 'Inherited': Script */
+static const OnigCodePoint
+CR_Inherited[] = { 27,
 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,
+0x0485, 0x0486,
+0x064b, 0x0655,
+0x0670, 0x0670,
+0x0951, 0x0952,
 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,
@@ -16763,178 +13033,185 @@ CR_Grapheme_Extend[] = { 283,
 0x1dfc, 0x1dff,
 0x200c, 0x200d,
 0x20d0, 0x20f0,
-0x2cef, 0x2cf1,
-0x2d7f, 0x2d7f,
-0x2de0, 0x2dff,
-0x302a, 0x302f,
+0x302a, 0x302d,
 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,
+0xfe20, 0xfe2d,
 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 */
+}; /* END of CR_Inherited */
 
-/* PROPERTY: 'Grapheme_Base': Derived Property */
+/* PROPERTY: 'Inscriptional_Pahlavi': Script */
 static const OnigCodePoint
-CR_Grapheme_Base[] = { 743,
-0x0020, 0x007e,
-0x00a0, 0x00ac,
-0x00ae, 0x02ff,
-0x0370, 0x0377,
-0x037a, 0x037f,
-0x0384, 0x038a,
+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,
+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, 0x0482,
+0x03a3, 0x03f5,
+0x03f7, 0x0481,
 0x048a, 0x052f,
 0x0531, 0x0556,
-0x0559, 0x055f,
+0x0559, 0x0559,
 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,
+0x05f0, 0x05f2,
+0x0620, 0x064a,
+0x066e, 0x066f,
+0x0671, 0x06d3,
+0x06d5, 0x06d5,
 0x06e5, 0x06e6,
-0x06e9, 0x06e9,
-0x06ee, 0x070d,
+0x06ee, 0x06ef,
+0x06fa, 0x06fc,
+0x06ff, 0x06ff,
 0x0710, 0x0710,
 0x0712, 0x072f,
 0x074d, 0x07a5,
 0x07b1, 0x07b1,
-0x07c0, 0x07ea,
-0x07f4, 0x07fa,
+0x07ca, 0x07ea,
+0x07f4, 0x07f5,
+0x07fa, 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,
+0x0904, 0x0939,
+0x093d, 0x093d,
+0x0950, 0x0950,
 0x0958, 0x0961,
-0x0964, 0x0980,
-0x0982, 0x0983,
+0x0971, 0x0980,
 0x0985, 0x098c,
 0x098f, 0x0990,
 0x0993, 0x09a8,
@@ -16942,14 +13219,10 @@ CR_Grapheme_Base[] = { 743,
 0x09b2, 0x09b2,
 0x09b6, 0x09b9,
 0x09bd, 0x09bd,
-0x09bf, 0x09c0,
-0x09c7, 0x09c8,
-0x09cb, 0x09cc,
 0x09ce, 0x09ce,
 0x09dc, 0x09dd,
 0x09df, 0x09e1,
-0x09e6, 0x09fb,
-0x0a03, 0x0a03,
+0x09f0, 0x09f1,
 0x0a05, 0x0a0a,
 0x0a0f, 0x0a10,
 0x0a13, 0x0a28,
@@ -16957,26 +13230,19 @@ CR_Grapheme_Base[] = { 743,
 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,
+0x0abd, 0x0abd,
 0x0ad0, 0x0ad0,
 0x0ae0, 0x0ae1,
-0x0ae6, 0x0af1,
 0x0af9, 0x0af9,
-0x0b02, 0x0b03,
 0x0b05, 0x0b0c,
 0x0b0f, 0x0b10,
 0x0b13, 0x0b28,
@@ -16984,12 +13250,9 @@ CR_Grapheme_Base[] = { 743,
 0x0b32, 0x0b33,
 0x0b35, 0x0b39,
 0x0b3d, 0x0b3d,
-0x0b40, 0x0b40,
-0x0b47, 0x0b48,
-0x0b4b, 0x0b4c,
 0x0b5c, 0x0b5d,
 0x0b5f, 0x0b61,
-0x0b66, 0x0b77,
+0x0b71, 0x0b71,
 0x0b83, 0x0b83,
 0x0b85, 0x0b8a,
 0x0b8e, 0x0b90,
@@ -17000,64 +13263,38 @@ CR_Grapheme_Base[] = { 743,
 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,
+0x0cbd, 0x0cbd,
 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,
+0x0d7a, 0x0d7f,
 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,
+0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
 0x0e87, 0x0e88,
@@ -17074,35 +13311,25 @@ CR_Grapheme_Base[] = { 743,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
-0x0ed0, 0x0ed9,
 0x0edc, 0x0edf,
-0x0f00, 0x0f17,
-0x0f1a, 0x0f34,
-0x0f36, 0x0f36,
-0x0f38, 0x0f38,
-0x0f3a, 0x0f47,
+0x0f00, 0x0f00,
+0x0f40, 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,
+0x1000, 0x102a,
+0x103f, 0x103f,
+0x1050, 0x1055,
 0x105a, 0x105d,
-0x1061, 0x1070,
+0x1061, 0x1061,
+0x1065, 0x1066,
+0x106e, 0x1070,
 0x1075, 0x1081,
-0x1083, 0x1084,
-0x1087, 0x108c,
-0x108e, 0x109c,
-0x109e, 0x10c5,
+0x108e, 0x108e,
+0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
-0x10d0, 0x1248,
+0x10d0, 0x10fa,
+0x10fc, 0x1248,
 0x124a, 0x124d,
 0x1250, 0x1256,
 0x1258, 0x1258,
@@ -17118,77 +13345,45 @@ CR_Grapheme_Base[] = { 743,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x1360, 0x137c,
-0x1380, 0x1399,
+0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
-0x1400, 0x169c,
-0x16a0, 0x16f8,
+0x1401, 0x166c,
+0x166f, 0x167f,
+0x1681, 0x169a,
+0x16a0, 0x16ea,
+0x16f1, 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,
+0x17d7, 0x17d7,
+0x17dc, 0x17dc,
 0x1820, 0x1877,
 0x1880, 0x18a8,
 0x18aa, 0x18aa,
 0x18b0, 0x18f5,
 0x1900, 0x191e,
-0x1923, 0x1926,
-0x1929, 0x192b,
-0x1930, 0x1931,
-0x1933, 0x1938,
-0x1940, 0x1940,
-0x1944, 0x196d,
+0x1950, 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,
+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, 0x1cf3,
+0x1cee, 0x1cf1,
 0x1cf5, 0x1cf6,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
@@ -17201,38 +13396,42 @@ CR_Grapheme_Base[] = { 743,
 0x1f5d, 0x1f5d,
 0x1f5f, 0x1f7d,
 0x1f80, 0x1fb4,
-0x1fb6, 0x1fc4,
-0x1fc6, 0x1fd3,
+0x1fb6, 0x1fbc,
+0x1fbe, 0x1fbe,
+0x1fc2, 0x1fc4,
+0x1fc6, 0x1fcc,
+0x1fd0, 0x1fd3,
 0x1fd6, 0x1fdb,
-0x1fdd, 0x1fef,
+0x1fe0, 0x1fec,
 0x1ff2, 0x1ff4,
-0x1ff6, 0x1ffe,
-0x2000, 0x200a,
-0x2010, 0x2027,
-0x202f, 0x205f,
-0x2070, 0x2071,
-0x2074, 0x208e,
+0x1ff6, 0x1ffc,
+0x2071, 0x2071,
+0x207f, 0x207f,
 0x2090, 0x209c,
-0x20a0, 0x20be,
-0x2100, 0x218b,
-0x2190, 0x23fa,
-0x2400, 0x2426,
-0x2440, 0x244a,
-0x2460, 0x2b73,
-0x2b76, 0x2b95,
-0x2b98, 0x2bb9,
-0x2bbd, 0x2bc8,
-0x2bca, 0x2bd1,
-0x2bec, 0x2bef,
+0x2102, 0x2102,
+0x2107, 0x2107,
+0x210a, 0x2113,
+0x2115, 0x2115,
+0x2119, 0x211d,
+0x2124, 0x2124,
+0x2126, 0x2126,
+0x2128, 0x2128,
+0x212a, 0x212d,
+0x212f, 0x2139,
+0x213c, 0x213f,
+0x2145, 0x2149,
+0x214e, 0x214e,
+0x2183, 0x2184,
 0x2c00, 0x2c2e,
 0x2c30, 0x2c5e,
-0x2c60, 0x2cee,
+0x2c60, 0x2ce4,
+0x2ceb, 0x2cee,
 0x2cf2, 0x2cf3,
-0x2cf9, 0x2d25,
+0x2d00, 0x2d25,
 0x2d27, 0x2d27,
 0x2d2d, 0x2d2d,
 0x2d30, 0x2d67,
-0x2d6f, 0x2d70,
+0x2d6f, 0x2d6f,
 0x2d80, 0x2d96,
 0x2da0, 0x2da6,
 0x2da8, 0x2dae,
@@ -17242,80 +13441,71 @@ CR_Grapheme_Base[] = { 743,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2e00, 0x2e42,
-0x2e80, 0x2e99,
-0x2e9b, 0x2ef3,
-0x2f00, 0x2fd5,
-0x2ff0, 0x2ffb,
-0x3000, 0x3029,
-0x3030, 0x303f,
+0x2e2f, 0x2e2f,
+0x3005, 0x3006,
+0x3031, 0x3035,
+0x303b, 0x303c,
 0x3041, 0x3096,
-0x309b, 0x30ff,
+0x309d, 0x309f,
+0x30a1, 0x30fa,
+0x30fc, 0x30ff,
 0x3105, 0x312d,
 0x3131, 0x318e,
-0x3190, 0x31ba,
-0x31c0, 0x31e3,
-0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
-0x4dc0, 0x9fd5,
+0x31a0, 0x31ba,
+0x31f0, 0x31ff,
+0x3400, 0x4db5,
+0x4e00, 0x9fd5,
 0xa000, 0xa48c,
-0xa490, 0xa4c6,
-0xa4d0, 0xa62b,
+0xa4d0, 0xa4fd,
+0xa500, 0xa60c,
+0xa610, 0xa61f,
+0xa62a, 0xa62b,
 0xa640, 0xa66e,
-0xa673, 0xa673,
-0xa67e, 0xa69d,
-0xa6a0, 0xa6ef,
-0xa6f2, 0xa6f7,
-0xa700, 0xa7ad,
+0xa67f, 0xa69d,
+0xa6a0, 0xa6e5,
+0xa717, 0xa71f,
+0xa722, 0xa788,
+0xa78b, 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,
+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,
-0xaa2f, 0xaa30,
-0xaa33, 0xaa34,
 0xaa40, 0xaa42,
 0xaa44, 0xaa4b,
-0xaa4d, 0xaa4d,
-0xaa50, 0xaa59,
-0xaa5c, 0xaa7b,
-0xaa7d, 0xaaaf,
+0xaa60, 0xaa76,
+0xaa7a, 0xaa7a,
+0xaa7e, 0xaaaf,
 0xaab1, 0xaab1,
 0xaab5, 0xaab6,
 0xaab9, 0xaabd,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
-0xaadb, 0xaaeb,
-0xaaee, 0xaaf5,
+0xaadb, 0xaadd,
+0xaae0, 0xaaea,
+0xaaf2, 0xaaf4,
 0xab01, 0xab06,
 0xab09, 0xab0e,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
-0xab70, 0xabe4,
-0xabe6, 0xabe7,
-0xabe9, 0xabec,
-0xabf0, 0xabf9,
+0xab30, 0xab5a,
+0xab5c, 0xab65,
+0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
 0xd7cb, 0xd7fb,
@@ -17324,31 +13514,26 @@ CR_Grapheme_Base[] = { 743,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
 0xfb1d, 0xfb1d,
-0xfb1f, 0xfb36,
+0xfb1f, 0xfb28,
+0xfb2a, 0xfb36,
 0xfb38, 0xfb3c,
 0xfb3e, 0xfb3e,
 0xfb40, 0xfb41,
 0xfb43, 0xfb44,
-0xfb46, 0xfbc1,
-0xfbd3, 0xfd3f,
+0xfb46, 0xfbb1,
+0xfbd3, 0xfd3d,
 0xfd50, 0xfd8f,
 0xfd92, 0xfdc7,
-0xfdf0, 0xfdfd,
-0xfe10, 0xfe19,
-0xfe30, 0xfe52,
-0xfe54, 0xfe66,
-0xfe68, 0xfe6b,
+0xfdf0, 0xfdfb,
 0xfe70, 0xfe74,
 0xfe76, 0xfefc,
-0xff01, 0xff9d,
-0xffa0, 0xffbe,
+0xff21, 0xff3a,
+0xff41, 0xff5a,
+0xff66, 0xffbe,
 0xffc2, 0xffc7,
 0xffca, 0xffcf,
 0xffd2, 0xffd7,
 0xffda, 0xffdc,
-0xffe0, 0xffe6,
-0xffe8, 0xffee,
-0xfffc, 0xfffd,
 0x10000, 0x1000b,
 0x1000d, 0x10026,
 0x10028, 0x1003a,
@@ -17356,26 +13541,18 @@ CR_Grapheme_Base[] = { 743,
 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,
+0x10300, 0x1031f,
+0x10330, 0x10340,
+0x10342, 0x10349,
 0x10350, 0x10375,
 0x10380, 0x1039d,
-0x1039f, 0x103c3,
-0x103c8, 0x103d5,
+0x103a0, 0x103c3,
+0x103c8, 0x103cf,
 0x10400, 0x1049d,
-0x104a0, 0x104a9,
 0x10500, 0x10527,
 0x10530, 0x10563,
-0x1056f, 0x1056f,
 0x10600, 0x10736,
 0x10740, 0x10755,
 0x10760, 0x10767,
@@ -17385,69 +13562,47 @@ CR_Grapheme_Base[] = { 743,
 0x10837, 0x10838,
 0x1083c, 0x1083c,
 0x1083f, 0x10855,
-0x10857, 0x1089e,
-0x108a7, 0x108af,
+0x10860, 0x10876,
+0x10880, 0x1089e,
 0x108e0, 0x108f2,
 0x108f4, 0x108f5,
-0x108fb, 0x1091b,
-0x1091f, 0x10939,
-0x1093f, 0x1093f,
+0x10900, 0x10915,
+0x10920, 0x10939,
 0x10980, 0x109b7,
-0x109bc, 0x109cf,
-0x109d2, 0x10a00,
+0x109be, 0x109bf,
+0x10a00, 0x10a00,
 0x10a10, 0x10a13,
 0x10a15, 0x10a17,
 0x10a19, 0x10a33,
-0x10a40, 0x10a47,
-0x10a50, 0x10a58,
-0x10a60, 0x10a9f,
-0x10ac0, 0x10ae4,
-0x10aeb, 0x10af6,
+0x10a60, 0x10a7c,
+0x10a80, 0x10a9c,
+0x10ac0, 0x10ac7,
+0x10ac9, 0x10ae4,
 0x10b00, 0x10b35,
-0x10b39, 0x10b55,
-0x10b58, 0x10b72,
-0x10b78, 0x10b91,
-0x10b99, 0x10b9c,
-0x10ba9, 0x10baf,
+0x10b40, 0x10b55,
+0x10b60, 0x10b72,
+0x10b80, 0x10b91,
 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,
+0x11003, 0x11037,
+0x11083, 0x110af,
 0x110d0, 0x110e8,
-0x110f0, 0x110f9,
 0x11103, 0x11126,
-0x1112c, 0x1112c,
-0x11136, 0x11143,
 0x11150, 0x11172,
-0x11174, 0x11176,
-0x11182, 0x111b5,
-0x111bf, 0x111c9,
-0x111cd, 0x111cd,
-0x111d0, 0x111df,
-0x111e1, 0x111f4,
+0x11176, 0x11176,
+0x11183, 0x111b2,
+0x111c1, 0x111c4,
+0x111da, 0x111da,
+0x111dc, 0x111dc,
 0x11200, 0x11211,
-0x11213, 0x1122e,
-0x11232, 0x11233,
-0x11235, 0x11235,
-0x11238, 0x1123d,
+0x11213, 0x1122b,
 0x11280, 0x11286,
 0x11288, 0x11288,
 0x1128a, 0x1128d,
 0x1128f, 0x1129d,
-0x1129f, 0x112a9,
+0x1129f, 0x112a8,
 0x112b0, 0x112de,
-0x112e0, 0x112e2,
-0x112f0, 0x112f9,
-0x11302, 0x11303,
 0x11305, 0x1130c,
 0x1130f, 0x11310,
 0x11313, 0x11328,
@@ -17455,82 +13610,39 @@ CR_Grapheme_Base[] = { 743,
 0x11332, 0x11333,
 0x11335, 0x11339,
 0x1133d, 0x1133d,
-0x1133f, 0x1133f,
-0x11341, 0x11344,
-0x11347, 0x11348,
-0x1134b, 0x1134d,
 0x11350, 0x11350,
-0x1135d, 0x11363,
+0x1135d, 0x11361,
 0x11480, 0x114af,
-0x114b1, 0x114b2,
-0x114b9, 0x114b9,
-0x114bb, 0x114bc,
-0x114be, 0x114be,
-0x114c1, 0x114c1,
-0x114c4, 0x114c7,
-0x114d0, 0x114d9,
+0x114c4, 0x114c5,
+0x114c7, 0x114c7,
 0x11580, 0x115ae,
-0x115b0, 0x115b1,
-0x115b8, 0x115bb,
-0x115be, 0x115be,
-0x115c1, 0x115db,
-0x11600, 0x11632,
-0x1163b, 0x1163c,
-0x1163e, 0x1163e,
-0x11641, 0x11644,
-0x11650, 0x11659,
+0x115d8, 0x115db,
+0x11600, 0x1162f,
+0x11644, 0x11644,
 0x11680, 0x116aa,
-0x116ac, 0x116ac,
-0x116ae, 0x116af,
-0x116b6, 0x116b6,
-0x116c0, 0x116c9,
 0x11700, 0x11719,
-0x11720, 0x11721,
-0x11726, 0x11726,
-0x11730, 0x1173f,
-0x118a0, 0x118f2,
+0x118a0, 0x118df,
 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,
+0x16ad0, 0x16aed,
+0x16b00, 0x16b2f,
+0x16b40, 0x16b43,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f50, 0x16f50,
 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,
@@ -17550,14 +13662,18 @@ CR_Grapheme_Base[] = { 743,
 0x1d546, 0x1d546,
 0x1d54a, 0x1d550,
 0x1d552, 0x1d6a5,
-0x1d6a8, 0x1d7cb,
-0x1d7ce, 0x1d9ff,
-0x1da37, 0x1da3a,
-0x1da6d, 0x1da74,
-0x1da76, 0x1da83,
-0x1da85, 0x1da8b,
+0x1d6a8, 0x1d6c0,
+0x1d6c2, 0x1d6da,
+0x1d6dc, 0x1d6fa,
+0x1d6fc, 0x1d714,
+0x1d716, 0x1d734,
+0x1d736, 0x1d74e,
+0x1d750, 0x1d76e,
+0x1d770, 0x1d788,
+0x1d78a, 0x1d7a8,
+0x1d7aa, 0x1d7c2,
+0x1d7c4, 0x1d7cb,
 0x1e800, 0x1e8c4,
-0x1e8c7, 0x1e8cf,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -17591,200 +13707,108 @@ CR_Grapheme_Base[] = { 743,
 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 */
+}; /* END of CR_L */
 
-/* PROPERTY: 'Common': Script */
+/* PROPERTY: 'LC': General Category */
 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,
+CR_LC[] = { 122,
+0x0041, 0x005a,
+0x0061, 0x007a,
+0x00b5, 0x00b5,
+0x00c0, 0x00d6,
+0x00d8, 0x00f6,
+0x00f8, 0x01ba,
+0x01bc, 0x01bf,
+0x01c4, 0x0293,
+0x0295, 0x02af,
+0x0370, 0x0373,
+0x0376, 0x0377,
+0x037b, 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, 0x1d2b,
+0x1d6b, 0x1d77,
+0x1d79, 0x1d9a,
+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,
+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,
+0x2183, 0x2184,
+0x2c00, 0x2c2e,
+0x2c30, 0x2c5e,
+0x2c60, 0x2c7b,
+0x2c7e, 0x2ce4,
+0x2ceb, 0x2cee,
+0x2cf2, 0x2cf3,
+0x2d00, 0x2d25,
+0x2d27, 0x2d27,
+0x2d2d, 0x2d2d,
+0xa640, 0xa66d,
+0xa680, 0xa69b,
+0xa722, 0xa76f,
+0xa771, 0xa787,
+0xa78b, 0xa78e,
+0xa790, 0xa7ad,
+0xa7b0, 0xa7b7,
+0xa7fa, 0xa7fa,
+0xab30, 0xab5a,
+0xab60, 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,
@@ -17794,271 +13818,870 @@ CR_Common[] = { 161,
 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 */
+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,
+}; /* 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,
+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, 0x0138,
+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, 0x018d,
+0x0192, 0x0192,
+0x0195, 0x0195,
+0x0199, 0x019b,
+0x019e, 0x019e,
+0x01a1, 0x01a1,
+0x01a3, 0x01a3,
+0x01a5, 0x01a5,
+0x01a8, 0x01a8,
+0x01aa, 0x01ab,
+0x01ad, 0x01ad,
+0x01b0, 0x01b0,
+0x01b4, 0x01b4,
+0x01b6, 0x01b6,
+0x01b9, 0x01ba,
+0x01bd, 0x01bf,
+0x01c6, 0x01c6,
+0x01c9, 0x01c9,
+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, 0x01f0,
+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,
+0x0221, 0x0221,
+0x0223, 0x0223,
+0x0225, 0x0225,
+0x0227, 0x0227,
+0x0229, 0x0229,
+0x022b, 0x022b,
+0x022d, 0x022d,
+0x022f, 0x022f,
+0x0231, 0x0231,
+0x0233, 0x0239,
+0x023c, 0x023c,
+0x023f, 0x0240,
+0x0242, 0x0242,
+0x0247, 0x0247,
+0x0249, 0x0249,
+0x024b, 0x024b,
+0x024d, 0x024d,
+0x024f, 0x0293,
+0x0295, 0x02af,
+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, 0x03fc,
+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,
+0x1d00, 0x1d2b,
+0x1d6b, 0x1d77,
+0x1d79, 0x1d9a,
+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, 0x1e9d,
+0x1e9f, 0x1e9f,
+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,
+0x210a, 0x210a,
+0x210e, 0x210f,
+0x2113, 0x2113,
+0x212f, 0x212f,
+0x2134, 0x2134,
+0x2139, 0x2139,
+0x213c, 0x213d,
+0x2146, 0x2149,
+0x214e, 0x214e,
+0x2184, 0x2184,
+0x2c30, 0x2c5e,
+0x2c61, 0x2c61,
+0x2c65, 0x2c66,
+0x2c68, 0x2c68,
+0x2c6a, 0x2c6a,
+0x2c6c, 0x2c6c,
+0x2c71, 0x2c71,
+0x2c73, 0x2c74,
+0x2c76, 0x2c7b,
+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, 0x2ce4,
+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, 0xa731,
+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,
+0xa771, 0xa778,
+0xa77a, 0xa77a,
+0xa77c, 0xa77c,
+0xa77f, 0xa77f,
+0xa781, 0xa781,
+0xa783, 0xa783,
+0xa785, 0xa785,
+0xa787, 0xa787,
+0xa78c, 0xa78c,
+0xa78e, 0xa78e,
+0xa791, 0xa791,
+0xa793, 0xa795,
+0xa797, 0xa797,
+0xa799, 0xa799,
+0xa79b, 0xa79b,
+0xa79d, 0xa79d,
+0xa79f, 0xa79f,
+0xa7a1, 0xa7a1,
+0xa7a3, 0xa7a3,
+0xa7a5, 0xa7a5,
+0xa7a7, 0xa7a7,
+0xa7a9, 0xa7a9,
+0xa7b5, 0xa7b5,
+0xa7b7, 0xa7b7,
+0xa7fa, 0xa7fa,
+0xab30, 0xab5a,
+0xab60, 0xab65,
+0xab70, 0xabbf,
+0xfb00, 0xfb06,
+0xfb13, 0xfb17,
+0xff41, 0xff5a,
+0x10428, 0x1044f,
+0x10cc0, 0x10cf2,
+0x118c0, 0x118df,
+0x1d41a, 0x1d433,
+0x1d44e, 0x1d454,
+0x1d456, 0x1d467,
+0x1d482, 0x1d49b,
+0x1d4b6, 0x1d4b9,
+0x1d4bb, 0x1d4bb,
+0x1d4bd, 0x1d4c3,
+0x1d4c5, 0x1d4cf,
+0x1d4ea, 0x1d503,
+0x1d51e, 0x1d537,
+0x1d552, 0x1d56b,
+0x1d586, 0x1d59f,
+0x1d5ba, 0x1d5d3,
+0x1d5ee, 0x1d607,
+0x1d622, 0x1d63b,
+0x1d656, 0x1d66f,
+0x1d68a, 0x1d6a5,
+0x1d6c2, 0x1d6da,
+0x1d6dc, 0x1d6e1,
+0x1d6fc, 0x1d714,
+0x1d716, 0x1d71b,
+0x1d736, 0x1d74e,
+0x1d750, 0x1d755,
+0x1d770, 0x1d788,
+0x1d78a, 0x1d78f,
+0x1d7aa, 0x1d7c2,
+0x1d7c4, 0x1d7c9,
+0x1d7cb, 0x1d7cb,
+}; /* END of CR_Ll */
 
-/* PROPERTY: 'Latin': Script */
+/* PROPERTY: 'Lm': General Category */
 static const OnigCodePoint
-CR_Latin[] = { 31,
-0x0041, 0x005a,
-0x0061, 0x007a,
-0x00aa, 0x00aa,
-0x00ba, 0x00ba,
-0x00c0, 0x00d6,
-0x00d8, 0x00f6,
-0x00f8, 0x02b8,
+CR_Lm[] = { 56,
+0x02b0, 0x02c1,
+0x02c6, 0x02d1,
 0x02e0, 0x02e4,
-0x1d00, 0x1d25,
-0x1d2c, 0x1d5c,
-0x1d62, 0x1d65,
-0x1d6b, 0x1d77,
-0x1d79, 0x1dbe,
-0x1e00, 0x1eff,
+0x02ec, 0x02ec,
+0x02ee, 0x02ee,
+0x0374, 0x0374,
+0x037a, 0x037a,
+0x0559, 0x0559,
+0x0640, 0x0640,
+0x06e5, 0x06e6,
+0x07f4, 0x07f5,
+0x07fa, 0x07fa,
+0x081a, 0x081a,
+0x0824, 0x0824,
+0x0828, 0x0828,
+0x0971, 0x0971,
+0x0e46, 0x0e46,
+0x0ec6, 0x0ec6,
+0x10fc, 0x10fc,
+0x17d7, 0x17d7,
+0x1843, 0x1843,
+0x1aa7, 0x1aa7,
+0x1c78, 0x1c7d,
+0x1d2c, 0x1d6a,
+0x1d78, 0x1d78,
+0x1d9b, 0x1dbf,
 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 */
+0x2c7c, 0x2c7d,
+0x2d6f, 0x2d6f,
+0x2e2f, 0x2e2f,
+0x3005, 0x3005,
+0x3031, 0x3035,
+0x303b, 0x303b,
+0x309d, 0x309e,
+0x30fc, 0x30fe,
+0xa015, 0xa015,
+0xa4f8, 0xa4fd,
+0xa60c, 0xa60c,
+0xa67f, 0xa67f,
+0xa69c, 0xa69d,
+0xa717, 0xa71f,
+0xa770, 0xa770,
+0xa788, 0xa788,
+0xa7f8, 0xa7f9,
+0xa9cf, 0xa9cf,
+0xa9e6, 0xa9e6,
+0xaa70, 0xaa70,
+0xaadd, 0xaadd,
+0xaaf3, 0xaaf4,
+0xab5c, 0xab5f,
+0xff70, 0xff70,
+0xff9e, 0xff9f,
+0x16b40, 0x16b43,
+0x16f93, 0x16f9f,
+}; /* END of CR_Lm */
 
-/* PROPERTY: 'Arabic': Script */
+/* PROPERTY: 'Lo': General Category */
 static const OnigCodePoint
-CR_Arabic[] = { 54,
-0x0600, 0x0604,
-0x0606, 0x060b,
-0x060d, 0x061a,
-0x061e, 0x061e,
+CR_Lo[] = { 433,
+0x00aa, 0x00aa,
+0x00ba, 0x00ba,
+0x01bb, 0x01bb,
+0x01c0, 0x01c3,
+0x0294, 0x0294,
+0x05d0, 0x05ea,
+0x05f0, 0x05f2,
 0x0620, 0x063f,
 0x0641, 0x064a,
-0x0656, 0x066f,
-0x0671, 0x06dc,
-0x06de, 0x06ff,
-0x0750, 0x077f,
+0x066e, 0x066f,
+0x0671, 0x06d3,
+0x06d5, 0x06d5,
+0x06ee, 0x06ef,
+0x06fa, 0x06fc,
+0x06ff, 0x06ff,
+0x0710, 0x0710,
+0x0712, 0x072f,
+0x074d, 0x07a5,
+0x07b1, 0x07b1,
+0x07ca, 0x07ea,
+0x0800, 0x0815,
+0x0840, 0x0858,
 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,
+0x0904, 0x0939,
+0x093d, 0x093d,
+0x0950, 0x0950,
+0x0958, 0x0961,
+0x0972, 0x0980,
 0x0985, 0x098c,
 0x098f, 0x0990,
 0x0993, 0x09a8,
 0x09aa, 0x09b0,
 0x09b2, 0x09b2,
 0x09b6, 0x09b9,
-0x09bc, 0x09c4,
-0x09c7, 0x09c8,
-0x09cb, 0x09ce,
-0x09d7, 0x09d7,
+0x09bd, 0x09bd,
+0x09ce, 0x09ce,
 0x09dc, 0x09dd,
-0x09df, 0x09e3,
-0x09e6, 0x09fb,
-}; /* END of CR_Bengali */
-
-/* PROPERTY: 'Gurmukhi': Script */
-static const OnigCodePoint
-CR_Gurmukhi[] = { 16,
-0x0a01, 0x0a03,
+0x09df, 0x09e1,
+0x09f0, 0x09f1,
 0x0a05, 0x0a0a,
 0x0a0f, 0x0a10,
 0x0a13, 0x0a28,
@@ -18066,58 +14689,30 @@ CR_Gurmukhi[] = { 16,
 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,
+0x0a72, 0x0a74,
 0x0a85, 0x0a8d,
 0x0a8f, 0x0a91,
 0x0a93, 0x0aa8,
 0x0aaa, 0x0ab0,
 0x0ab2, 0x0ab3,
 0x0ab5, 0x0ab9,
-0x0abc, 0x0ac5,
-0x0ac7, 0x0ac9,
-0x0acb, 0x0acd,
+0x0abd, 0x0abd,
 0x0ad0, 0x0ad0,
-0x0ae0, 0x0ae3,
-0x0ae6, 0x0af1,
+0x0ae0, 0x0ae1,
 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,
+0x0b3d, 0x0b3d,
 0x0b5c, 0x0b5d,
-0x0b5f, 0x0b63,
-0x0b66, 0x0b77,
-}; /* END of CR_Oriya */
-
-/* PROPERTY: 'Tamil': Script */
-static const OnigCodePoint
-CR_Tamil[] = { 16,
-0x0b82, 0x0b83,
+0x0b5f, 0x0b61,
+0x0b71, 0x0b71,
+0x0b83, 0x0b83,
 0x0b85, 0x0b8a,
 0x0b8e, 0x0b90,
 0x0b92, 0x0b95,
@@ -18127,95 +14722,38 @@ CR_Tamil[] = { 16,
 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,
+0x0c3d, 0x0c3d,
 0x0c58, 0x0c5a,
-0x0c60, 0x0c63,
-0x0c66, 0x0c6f,
-0x0c78, 0x0c7f,
-}; /* END of CR_Telugu */
-
-/* PROPERTY: 'Kannada': Script */
-static const OnigCodePoint
-CR_Kannada[] = { 14,
-0x0c81, 0x0c83,
+0x0c60, 0x0c61,
 0x0c85, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
 0x0cb5, 0x0cb9,
-0x0cbc, 0x0cc4,
-0x0cc6, 0x0cc8,
-0x0cca, 0x0ccd,
-0x0cd5, 0x0cd6,
+0x0cbd, 0x0cbd,
 0x0cde, 0x0cde,
-0x0ce0, 0x0ce3,
-0x0ce6, 0x0cef,
+0x0ce0, 0x0ce1,
 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,
+0x0d3d, 0x0d3d,
+0x0d4e, 0x0d4e,
+0x0d5f, 0x0d61,
+0x0d7a, 0x0d7f,
 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,
+0x0e01, 0x0e30,
+0x0e32, 0x0e33,
+0x0e40, 0x0e45,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
 0x0e87, 0x0e88,
@@ -18226,72 +14764,27 @@ CR_Lao[] = { 18,
 0x0ea1, 0x0ea3,
 0x0ea5, 0x0ea5,
 0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0eaa, 0x0eab,
+0x0ead, 0x0eb0,
+0x0eb2, 0x0eb3,
+0x0ebd, 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,
+0x0f00, 0x0f00,
+0x0f40, 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,
+0x0f88, 0x0f8c,
+0x1000, 0x102a,
+0x103f, 0x103f,
+0x1050, 0x1055,
+0x105a, 0x105d,
+0x1061, 0x1061,
+0x1065, 0x1066,
+0x106e, 0x1070,
+0x1075, 0x1081,
+0x108e, 0x108e,
 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,
+0x10fd, 0x1248,
 0x124a, 0x124d,
 0x1250, 0x1256,
 0x1258, 0x1258,
@@ -18307,227 +14800,139 @@ CR_Ethiopic[] = { 32,
 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,
-0xa000, 0xa48c,
-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,
+0x1380, 0x138f,
+0x1401, 0x166c,
+0x166f, 0x167f,
+0x1681, 0x169a,
+0x16a0, 0x16ea,
+0x16f1, 0x16f8,
 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,
+0x170e, 0x1711,
+0x1720, 0x1731,
+0x1740, 0x1751,
 0x1760, 0x176c,
 0x176e, 0x1770,
-0x1772, 0x1773,
-}; /* END of CR_Tagbanwa */
-
-/* PROPERTY: 'Limbu': Script */
-static const OnigCodePoint
-CR_Limbu[] = { 5,
+0x1780, 0x17b3,
+0x17dc, 0x17dc,
+0x1820, 0x1842,
+0x1844, 0x1877,
+0x1880, 0x18a8,
+0x18aa, 0x18aa,
+0x18b0, 0x18f5,
 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,
+0x1980, 0x19ab,
+0x19b0, 0x19c9,
+0x1a00, 0x1a16,
+0x1a20, 0x1a54,
+0x1b05, 0x1b33,
+0x1b45, 0x1b4b,
+0x1b83, 0x1ba0,
+0x1bae, 0x1baf,
+0x1bba, 0x1be5,
+0x1c00, 0x1c23,
+0x1c4d, 0x1c4f,
+0x1c5a, 0x1c77,
+0x1ce9, 0x1cec,
+0x1cee, 0x1cf1,
+0x1cf5, 0x1cf6,
+0x2135, 0x2138,
+0x2d30, 0x2d67,
+0x2d80, 0x2d96,
+0x2da0, 0x2da6,
+0x2da8, 0x2dae,
+0x2db0, 0x2db6,
+0x2db8, 0x2dbe,
+0x2dc0, 0x2dc6,
+0x2dc8, 0x2dce,
+0x2dd0, 0x2dd6,
+0x2dd8, 0x2dde,
+0x3006, 0x3006,
+0x303c, 0x303c,
+0x3041, 0x3096,
+0x309f, 0x309f,
+0x30a1, 0x30fa,
+0x30ff, 0x30ff,
+0x3105, 0x312d,
+0x3131, 0x318e,
+0x31a0, 0x31ba,
+0x31f0, 0x31ff,
+0x3400, 0x4db5,
+0x4e00, 0x9fd5,
+0xa000, 0xa014,
+0xa016, 0xa48c,
+0xa4d0, 0xa4f7,
+0xa500, 0xa60b,
+0xa610, 0xa61f,
+0xa62a, 0xa62b,
+0xa66e, 0xa66e,
+0xa6a0, 0xa6e5,
+0xa78f, 0xa78f,
+0xa7f7, 0xa7f7,
+0xa7fb, 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,
+0xa9e0, 0xa9e4,
+0xa9e7, 0xa9ef,
+0xa9fa, 0xa9fe,
+0xaa00, 0xaa28,
+0xaa40, 0xaa42,
+0xaa44, 0xaa4b,
+0xaa60, 0xaa6f,
+0xaa71, 0xaa76,
+0xaa7a, 0xaa7a,
+0xaa7e, 0xaaaf,
+0xaab1, 0xaab1,
+0xaab5, 0xaab6,
+0xaab9, 0xaabd,
+0xaac0, 0xaac0,
+0xaac2, 0xaac2,
+0xaadb, 0xaadc,
+0xaae0, 0xaaea,
+0xaaf2, 0xaaf2,
+0xab01, 0xab06,
+0xab09, 0xab0e,
+0xab11, 0xab16,
+0xab20, 0xab26,
+0xab28, 0xab2e,
+0xabc0, 0xabe2,
+0xac00, 0xd7a3,
+0xd7b0, 0xd7c6,
+0xd7cb, 0xd7fb,
+0xf900, 0xfa6d,
+0xfa70, 0xfad9,
+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,
+0xff66, 0xff6f,
+0xff71, 0xff9d,
+0xffa0, 0xffbe,
+0xffc2, 0xffc7,
+0xffca, 0xffcf,
+0xffd2, 0xffd7,
+0xffda, 0xffdc,
 0x10000, 0x1000b,
 0x1000d, 0x10026,
 0x10028, 0x1003a,
@@ -18535,192 +14940,803 @@ CR_Linear_B[] = { 7,
 0x1003f, 0x1004d,
 0x10050, 0x1005d,
 0x10080, 0x100fa,
-}; /* END of CR_Linear_B */
-
-/* PROPERTY: 'Ugaritic': Script */
-static const OnigCodePoint
-CR_Ugaritic[] = { 2,
+0x10280, 0x1029c,
+0x102a0, 0x102d0,
+0x10300, 0x1031f,
+0x10330, 0x10340,
+0x10342, 0x10349,
+0x10350, 0x10375,
 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,
+0x103a0, 0x103c3,
+0x103c8, 0x103cf,
+0x10450, 0x1049d,
+0x10500, 0x10527,
+0x10530, 0x10563,
+0x10600, 0x10736,
+0x10740, 0x10755,
+0x10760, 0x10767,
 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 */
+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,
+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,
+0x118ff, 0x118ff,
+0x11ac0, 0x11af8,
+0x12000, 0x12399,
+0x12480, 0x12543,
+0x13000, 0x1342e,
+0x14400, 0x14646,
+0x16800, 0x16a38,
+0x16a40, 0x16a5e,
+0x16ad0, 0x16aed,
+0x16b00, 0x16b2f,
+0x16b63, 0x16b77,
+0x16b7d, 0x16b8f,
+0x16f00, 0x16f44,
+0x16f50, 0x16f50,
+0x1b000, 0x1b001,
+0x1bc00, 0x1bc6a,
+0x1bc70, 0x1bc7c,
+0x1bc80, 0x1bc88,
+0x1bc90, 0x1bc99,
+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_Lo */
 
-/* PROPERTY: 'Buginese': Script */
+/* PROPERTY: 'Logical_Order_Exception': Binary Property */
 static const OnigCodePoint
-CR_Buginese[] = { 2,
-0x1a00, 0x1a1b,
-0x1a1e, 0x1a1f,
-}; /* END of CR_Buginese */
+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: 'Coptic': Script */
-static const OnigCodePoint
-CR_Coptic[] = { 3,
-0x03e2, 0x03ef,
-0x2c80, 0x2cf3,
-0x2cf9, 0x2cff,
-}; /* END of CR_Coptic */
+/* PROPERTY: 'Lowercase': Derived Property */
+#define CR_Lowercase CR_Lower
 
-/* PROPERTY: 'New_Tai_Lue': Script */
+/* PROPERTY: 'Lt': General Category */
 static const OnigCodePoint
-CR_New_Tai_Lue[] = { 4,
-0x1980, 0x19ab,
-0x19b0, 0x19c9,
-0x19d0, 0x19da,
-0x19de, 0x19df,
-}; /* END of CR_New_Tai_Lue */
+CR_Lt[] = { 10,
+0x01c5, 0x01c5,
+0x01c8, 0x01c8,
+0x01cb, 0x01cb,
+0x01f2, 0x01f2,
+0x1f88, 0x1f8f,
+0x1f98, 0x1f9f,
+0x1fa8, 0x1faf,
+0x1fbc, 0x1fbc,
+0x1fcc, 0x1fcc,
+0x1ffc, 0x1ffc,
+}; /* END of CR_Lt */
 
-/* PROPERTY: 'Glagolitic': Script */
+/* PROPERTY: 'Lu': General Category */
 static const OnigCodePoint
-CR_Glagolitic[] = { 2,
+CR_Lu[] = { 625,
+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, 0x01c4,
+0x01c7, 0x01c7,
+0x01ca, 0x01ca,
+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, 0x01f1,
+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,
+0x03d2, 0x03d4,
+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,
+0x1fb8, 0x1fbb,
+0x1fc8, 0x1fcb,
+0x1fd8, 0x1fdb,
+0x1fe8, 0x1fec,
+0x1ff8, 0x1ffb,
+0x2102, 0x2102,
+0x2107, 0x2107,
+0x210b, 0x210d,
+0x2110, 0x2112,
+0x2115, 0x2115,
+0x2119, 0x211d,
+0x2124, 0x2124,
+0x2126, 0x2126,
+0x2128, 0x2128,
+0x212a, 0x212d,
+0x2130, 0x2133,
+0x213e, 0x213f,
+0x2145, 0x2145,
+0x2183, 0x2183,
 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 */
+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,
+0x1d400, 0x1d419,
+0x1d434, 0x1d44d,
+0x1d468, 0x1d481,
+0x1d49c, 0x1d49c,
+0x1d49e, 0x1d49f,
+0x1d4a2, 0x1d4a2,
+0x1d4a5, 0x1d4a6,
+0x1d4a9, 0x1d4ac,
+0x1d4ae, 0x1d4b5,
+0x1d4d0, 0x1d4e9,
+0x1d504, 0x1d505,
+0x1d507, 0x1d50a,
+0x1d50d, 0x1d514,
+0x1d516, 0x1d51c,
+0x1d538, 0x1d539,
+0x1d53b, 0x1d53e,
+0x1d540, 0x1d544,
+0x1d546, 0x1d546,
+0x1d54a, 0x1d550,
+0x1d56c, 0x1d585,
+0x1d5a0, 0x1d5b9,
+0x1d5d4, 0x1d5ed,
+0x1d608, 0x1d621,
+0x1d63c, 0x1d655,
+0x1d670, 0x1d689,
+0x1d6a8, 0x1d6c0,
+0x1d6e2, 0x1d6fa,
+0x1d71c, 0x1d734,
+0x1d756, 0x1d76e,
+0x1d790, 0x1d7a8,
+0x1d7ca, 0x1d7ca,
+}; /* END of CR_Lu */
 
 /* PROPERTY: 'Lycian': Script */
 static const OnigCodePoint
@@ -18728,12 +15744,6 @@ 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,
@@ -18741,72 +15751,587 @@ CR_Lydian[] = { 2,
 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 */
+/* PROPERTY: 'M': Major Category */
 static const OnigCodePoint
-CR_Tai_Tham[] = { 5,
-0x1a20, 0x1a5e,
+CR_M[] = { 236,
+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, 0x0903,
+0x093a, 0x093c,
+0x093e, 0x094f,
+0x0951, 0x0957,
+0x0962, 0x0963,
+0x0981, 0x0983,
+0x09bc, 0x09bc,
+0x09be, 0x09c4,
+0x09c7, 0x09c8,
+0x09cb, 0x09cd,
+0x09d7, 0x09d7,
+0x09e2, 0x09e3,
+0x0a01, 0x0a03,
+0x0a3c, 0x0a3c,
+0x0a3e, 0x0a42,
+0x0a47, 0x0a48,
+0x0a4b, 0x0a4d,
+0x0a51, 0x0a51,
+0x0a70, 0x0a71,
+0x0a75, 0x0a75,
+0x0a81, 0x0a83,
+0x0abc, 0x0abc,
+0x0abe, 0x0ac5,
+0x0ac7, 0x0ac9,
+0x0acb, 0x0acd,
+0x0ae2, 0x0ae3,
+0x0b01, 0x0b03,
+0x0b3c, 0x0b3c,
+0x0b3e, 0x0b44,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4d,
+0x0b56, 0x0b57,
+0x0b62, 0x0b63,
+0x0b82, 0x0b82,
+0x0bbe, 0x0bc2,
+0x0bc6, 0x0bc8,
+0x0bca, 0x0bcd,
+0x0bd7, 0x0bd7,
+0x0c00, 0x0c03,
+0x0c3e, 0x0c44,
+0x0c46, 0x0c48,
+0x0c4a, 0x0c4d,
+0x0c55, 0x0c56,
+0x0c62, 0x0c63,
+0x0c81, 0x0c83,
+0x0cbc, 0x0cbc,
+0x0cbe, 0x0cc4,
+0x0cc6, 0x0cc8,
+0x0cca, 0x0ccd,
+0x0cd5, 0x0cd6,
+0x0ce2, 0x0ce3,
+0x0d01, 0x0d03,
+0x0d3e, 0x0d44,
+0x0d46, 0x0d48,
+0x0d4a, 0x0d4d,
+0x0d57, 0x0d57,
+0x0d62, 0x0d63,
+0x0d82, 0x0d83,
+0x0dca, 0x0dca,
+0x0dcf, 0x0dd4,
+0x0dd6, 0x0dd6,
+0x0dd8, 0x0ddf,
+0x0df2, 0x0df3,
+0x0e31, 0x0e31,
+0x0e34, 0x0e3a,
+0x0e47, 0x0e4e,
+0x0eb1, 0x0eb1,
+0x0eb4, 0x0eb9,
+0x0ebb, 0x0ebc,
+0x0ec8, 0x0ecd,
+0x0f18, 0x0f19,
+0x0f35, 0x0f35,
+0x0f37, 0x0f37,
+0x0f39, 0x0f39,
+0x0f3e, 0x0f3f,
+0x0f71, 0x0f84,
+0x0f86, 0x0f87,
+0x0f8d, 0x0f97,
+0x0f99, 0x0fbc,
+0x0fc6, 0x0fc6,
+0x102b, 0x103e,
+0x1056, 0x1059,
+0x105e, 0x1060,
+0x1062, 0x1064,
+0x1067, 0x106d,
+0x1071, 0x1074,
+0x1082, 0x108d,
+0x108f, 0x108f,
+0x109a, 0x109d,
+0x135d, 0x135f,
+0x1712, 0x1714,
+0x1732, 0x1734,
+0x1752, 0x1753,
+0x1772, 0x1773,
+0x17b4, 0x17d3,
+0x17dd, 0x17dd,
+0x180b, 0x180d,
+0x18a9, 0x18a9,
+0x1920, 0x192b,
+0x1930, 0x193b,
+0x1a17, 0x1a1b,
+0x1a55, 0x1a5e,
 0x1a60, 0x1a7c,
-0x1a7f, 0x1a89,
-0x1a90, 0x1a99,
-0x1aa0, 0x1aad,
-}; /* END of CR_Tai_Tham */
+0x1a7f, 0x1a7f,
+0x1ab0, 0x1abe,
+0x1b00, 0x1b04,
+0x1b34, 0x1b44,
+0x1b6b, 0x1b73,
+0x1b80, 0x1b82,
+0x1ba1, 0x1bad,
+0x1be6, 0x1bf3,
+0x1c24, 0x1c37,
+0x1cd0, 0x1cd2,
+0x1cd4, 0x1ce8,
+0x1ced, 0x1ced,
+0x1cf2, 0x1cf4,
+0x1cf8, 0x1cf9,
+0x1dc0, 0x1df5,
+0x1dfc, 0x1dff,
+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,
+0xa823, 0xa827,
+0xa880, 0xa881,
+0xa8b4, 0xa8c4,
+0xa8e0, 0xa8f1,
+0xa926, 0xa92d,
+0xa947, 0xa953,
+0xa980, 0xa983,
+0xa9b3, 0xa9c0,
+0xa9e5, 0xa9e5,
+0xaa29, 0xaa36,
+0xaa43, 0xaa43,
+0xaa4c, 0xaa4d,
+0xaa7b, 0xaa7d,
+0xaab0, 0xaab0,
+0xaab2, 0xaab4,
+0xaab7, 0xaab8,
+0xaabe, 0xaabf,
+0xaac1, 0xaac1,
+0xaaeb, 0xaaef,
+0xaaf5, 0xaaf6,
+0xabe3, 0xabea,
+0xabec, 0xabed,
+0xfb1e, 0xfb1e,
+0xfe00, 0xfe0f,
+0xfe20, 0xfe2f,
+0x101fd, 0x101fd,
+0x102e0, 0x102e0,
+0x10376, 0x1037a,
+0x10a01, 0x10a03,
+0x10a05, 0x10a06,
+0x10a0c, 0x10a0f,
+0x10a38, 0x10a3a,
+0x10a3f, 0x10a3f,
+0x10ae5, 0x10ae6,
+0x11000, 0x11002,
+0x11038, 0x11046,
+0x1107f, 0x11082,
+0x110b0, 0x110ba,
+0x11100, 0x11102,
+0x11127, 0x11134,
+0x11173, 0x11173,
+0x11180, 0x11182,
+0x111b3, 0x111c0,
+0x111ca, 0x111cc,
+0x1122c, 0x11237,
+0x112df, 0x112ea,
+0x11300, 0x11303,
+0x1133c, 0x1133c,
+0x1133e, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134d,
+0x11357, 0x11357,
+0x11362, 0x11363,
+0x11366, 0x1136c,
+0x11370, 0x11374,
+0x114b0, 0x114c3,
+0x115af, 0x115b5,
+0x115b8, 0x115c0,
+0x115dc, 0x115dd,
+0x11630, 0x11640,
+0x116ab, 0x116b7,
+0x1171d, 0x1172b,
+0x16af0, 0x16af4,
+0x16b30, 0x16b36,
+0x16f51, 0x16f7e,
+0x16f8f, 0x16f92,
+0x1bc9d, 0x1bc9e,
+0x1d165, 0x1d169,
+0x1d16d, 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_M */
 
-/* PROPERTY: 'Tai_Viet': Script */
+/* PROPERTY: 'Mahajani': Script */
 static const OnigCodePoint
-CR_Tai_Viet[] = { 2,
-0xaa80, 0xaac2,
-0xaadb, 0xaadf,
-}; /* END of CR_Tai_Viet */
+CR_Mahajani[] = { 1,
+0x11150, 0x11176,
+}; /* END of CR_Mahajani */
 
-/* PROPERTY: 'Avestan': Script */
+/* PROPERTY: 'Malayalam': Script */
 static const OnigCodePoint
-CR_Avestan[] = { 2,
-0x10b00, 0x10b35,
-0x10b39, 0x10b3f,
-}; /* END of CR_Avestan */
+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: 'Egyptian_Hieroglyphs': Script */
+/* PROPERTY: 'Mandaic': Script */
 static const OnigCodePoint
-CR_Egyptian_Hieroglyphs[] = { 1,
-0x13000, 0x1342e,
-}; /* END of CR_Egyptian_Hieroglyphs */
+CR_Mandaic[] = { 2,
+0x0840, 0x085b,
+0x085e, 0x085e,
+}; /* END of CR_Mandaic */
 
-/* PROPERTY: 'Samaritan': Script */
+/* PROPERTY: 'Manichaean': Script */
 static const OnigCodePoint
-CR_Samaritan[] = { 2,
-0x0800, 0x082d,
-0x0830, 0x083e,
-}; /* END of CR_Samaritan */
+CR_Manichaean[] = { 2,
+0x10ac0, 0x10ae6,
+0x10aeb, 0x10af6,
+}; /* END of CR_Manichaean */
 
-/* PROPERTY: 'Lisu': Script */
+/* PROPERTY: 'Math': Derived Property */
 static const OnigCodePoint
-CR_Lisu[] = { 1,
-0xa4d0, 0xa4ff,
-}; /* END of CR_Lisu */
+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: 'Bamum': Script */
+/* PROPERTY: 'Mc': General Category */
 static const OnigCodePoint
-CR_Bamum[] = { 2,
-0xa6a0, 0xa6f7,
-0x16800, 0x16a38,
-}; /* END of CR_Bamum */
+CR_Mc[] = { 147,
+0x0903, 0x0903,
+0x093b, 0x093b,
+0x093e, 0x0940,
+0x0949, 0x094c,
+0x094e, 0x094f,
+0x0982, 0x0983,
+0x09be, 0x09c0,
+0x09c7, 0x09c8,
+0x09cb, 0x09cc,
+0x09d7, 0x09d7,
+0x0a03, 0x0a03,
+0x0a3e, 0x0a40,
+0x0a83, 0x0a83,
+0x0abe, 0x0ac0,
+0x0ac9, 0x0ac9,
+0x0acb, 0x0acc,
+0x0b02, 0x0b03,
+0x0b3e, 0x0b3e,
+0x0b40, 0x0b40,
+0x0b47, 0x0b48,
+0x0b4b, 0x0b4c,
+0x0b57, 0x0b57,
+0x0bbe, 0x0bbf,
+0x0bc1, 0x0bc2,
+0x0bc6, 0x0bc8,
+0x0bca, 0x0bcc,
+0x0bd7, 0x0bd7,
+0x0c01, 0x0c03,
+0x0c41, 0x0c44,
+0x0c82, 0x0c83,
+0x0cbe, 0x0cbe,
+0x0cc0, 0x0cc4,
+0x0cc7, 0x0cc8,
+0x0cca, 0x0ccb,
+0x0cd5, 0x0cd6,
+0x0d02, 0x0d03,
+0x0d3e, 0x0d40,
+0x0d46, 0x0d48,
+0x0d4a, 0x0d4c,
+0x0d57, 0x0d57,
+0x0d82, 0x0d83,
+0x0dcf, 0x0dd1,
+0x0dd8, 0x0ddf,
+0x0df2, 0x0df3,
+0x0f3e, 0x0f3f,
+0x0f7f, 0x0f7f,
+0x102b, 0x102c,
+0x1031, 0x1031,
+0x1038, 0x1038,
+0x103b, 0x103c,
+0x1056, 0x1057,
+0x1062, 0x1064,
+0x1067, 0x106d,
+0x1083, 0x1084,
+0x1087, 0x108c,
+0x108f, 0x108f,
+0x109a, 0x109c,
+0x17b6, 0x17b6,
+0x17be, 0x17c5,
+0x17c7, 0x17c8,
+0x1923, 0x1926,
+0x1929, 0x192b,
+0x1930, 0x1931,
+0x1933, 0x1938,
+0x1a19, 0x1a1a,
+0x1a55, 0x1a55,
+0x1a57, 0x1a57,
+0x1a61, 0x1a61,
+0x1a63, 0x1a64,
+0x1a6d, 0x1a72,
+0x1b04, 0x1b04,
+0x1b35, 0x1b35,
+0x1b3b, 0x1b3b,
+0x1b3d, 0x1b41,
+0x1b43, 0x1b44,
+0x1b82, 0x1b82,
+0x1ba1, 0x1ba1,
+0x1ba6, 0x1ba7,
+0x1baa, 0x1baa,
+0x1be7, 0x1be7,
+0x1bea, 0x1bec,
+0x1bee, 0x1bee,
+0x1bf2, 0x1bf3,
+0x1c24, 0x1c2b,
+0x1c34, 0x1c35,
+0x1ce1, 0x1ce1,
+0x1cf2, 0x1cf3,
+0x302e, 0x302f,
+0xa823, 0xa824,
+0xa827, 0xa827,
+0xa880, 0xa881,
+0xa8b4, 0xa8c3,
+0xa952, 0xa953,
+0xa983, 0xa983,
+0xa9b4, 0xa9b5,
+0xa9ba, 0xa9bb,
+0xa9bd, 0xa9c0,
+0xaa2f, 0xaa30,
+0xaa33, 0xaa34,
+0xaa4d, 0xaa4d,
+0xaa7b, 0xaa7b,
+0xaa7d, 0xaa7d,
+0xaaeb, 0xaaeb,
+0xaaee, 0xaaef,
+0xaaf5, 0xaaf5,
+0xabe3, 0xabe4,
+0xabe6, 0xabe7,
+0xabe9, 0xabea,
+0xabec, 0xabec,
+0x11000, 0x11000,
+0x11002, 0x11002,
+0x11082, 0x11082,
+0x110b0, 0x110b2,
+0x110b7, 0x110b8,
+0x1112c, 0x1112c,
+0x11182, 0x11182,
+0x111b3, 0x111b5,
+0x111bf, 0x111c0,
+0x1122c, 0x1122e,
+0x11232, 0x11233,
+0x11235, 0x11235,
+0x112e0, 0x112e2,
+0x11302, 0x11303,
+0x1133e, 0x1133f,
+0x11341, 0x11344,
+0x11347, 0x11348,
+0x1134b, 0x1134d,
+0x11357, 0x11357,
+0x11362, 0x11363,
+0x114b0, 0x114b2,
+0x114b9, 0x114b9,
+0x114bb, 0x114be,
+0x114c1, 0x114c1,
+0x115af, 0x115b1,
+0x115b8, 0x115bb,
+0x115be, 0x115be,
+0x11630, 0x11632,
+0x1163b, 0x1163c,
+0x1163e, 0x1163e,
+0x116ac, 0x116ac,
+0x116ae, 0x116af,
+0x116b6, 0x116b6,
+0x11720, 0x11721,
+0x11726, 0x11726,
+0x16f51, 0x16f7e,
+0x1d165, 0x1d166,
+0x1d16d, 0x1d172,
+}; /* END of CR_Mc */
 
-/* PROPERTY: 'Javanese': Script */
+/* PROPERTY: 'Me': General Category */
 static const OnigCodePoint
-CR_Javanese[] = { 3,
-0xa980, 0xa9cd,
-0xa9d0, 0xa9d9,
-0xa9de, 0xa9df,
-}; /* END of CR_Javanese */
+CR_Me[] = { 5,
+0x0488, 0x0489,
+0x1abe, 0x1abe,
+0x20dd, 0x20e0,
+0x20e2, 0x20e4,
+0xa670, 0xa672,
+}; /* END of CR_Me */
 
 /* PROPERTY: 'Meetei_Mayek': Script */
 static const OnigCodePoint
@@ -18816,251 +16341,625 @@ CR_Meetei_Mayek[] = { 3,
 0xabf0, 0xabf9,
 }; /* END of CR_Meetei_Mayek */
 
-/* PROPERTY: 'Imperial_Aramaic': Script */
+/* PROPERTY: 'Mende_Kikakui': Script */
 static const OnigCodePoint
-CR_Imperial_Aramaic[] = { 2,
-0x10840, 0x10855,
-0x10857, 0x1085f,
-}; /* END of CR_Imperial_Aramaic */
+CR_Mende_Kikakui[] = { 2,
+0x1e800, 0x1e8c4,
+0x1e8c7, 0x1e8d6,
+}; /* END of CR_Mende_Kikakui */
 
-/* PROPERTY: 'Old_South_Arabian': Script */
+/* PROPERTY: 'Meroitic_Cursive': Script */
 static const OnigCodePoint
-CR_Old_South_Arabian[] = { 1,
-0x10a60, 0x10a7f,
-}; /* END of CR_Old_South_Arabian */
+CR_Meroitic_Cursive[] = { 3,
+0x109a0, 0x109b7,
+0x109bc, 0x109cf,
+0x109d2, 0x109ff,
+}; /* END of CR_Meroitic_Cursive */
 
-/* PROPERTY: 'Inscriptional_Parthian': Script */
+/* PROPERTY: 'Meroitic_Hieroglyphs': Script */
 static const OnigCodePoint
-CR_Inscriptional_Parthian[] = { 2,
-0x10b40, 0x10b55,
-0x10b58, 0x10b5f,
-}; /* END of CR_Inscriptional_Parthian */
+CR_Meroitic_Hieroglyphs[] = { 1,
+0x10980, 0x1099f,
+}; /* END of CR_Meroitic_Hieroglyphs */
 
-/* PROPERTY: 'Inscriptional_Pahlavi': Script */
+/* PROPERTY: 'Miao': Script */
 static const OnigCodePoint
-CR_Inscriptional_Pahlavi[] = { 2,
-0x10b60, 0x10b72,
-0x10b78, 0x10b7f,
-}; /* END of CR_Inscriptional_Pahlavi */
+CR_Miao[] = { 3,
+0x16f00, 0x16f44,
+0x16f50, 0x16f7e,
+0x16f8f, 0x16f9f,
+}; /* END of CR_Miao */
 
-/* PROPERTY: 'Old_Turkic': Script */
+/* PROPERTY: 'Mn': General Category */
 static const OnigCodePoint
-CR_Old_Turkic[] = { 1,
-0x10c00, 0x10c48,
-}; /* END of CR_Old_Turkic */
+CR_Mn[] = { 266,
+0x0300, 0x036f,
+0x0483, 0x0487,
+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,
+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,
+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, 0x1abd,
+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,
+0x20d0, 0x20dc,
+0x20e1, 0x20e1,
+0x20e5, 0x20f0,
+0x2cef, 0x2cf1,
+0x2d7f, 0x2d7f,
+0x2de0, 0x2dff,
+0x302a, 0x302d,
+0x3099, 0x309a,
+0xa66f, 0xa66f,
+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,
+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,
+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,
+0x16f8f, 0x16f92,
+0x1bc9d, 0x1bc9e,
+0x1d167, 0x1d169,
+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_Mn */
 
-/* PROPERTY: 'Kaithi': Script */
+/* PROPERTY: 'Modi': Script */
 static const OnigCodePoint
-CR_Kaithi[] = { 1,
-0x11080, 0x110c1,
-}; /* END of CR_Kaithi */
+CR_Modi[] = { 2,
+0x11600, 0x11644,
+0x11650, 0x11659,
+}; /* END of CR_Modi */
 
-/* PROPERTY: 'Batak': Script */
+/* PROPERTY: 'Mongolian': Script */
 static const OnigCodePoint
-CR_Batak[] = { 2,
-0x1bc0, 0x1bf3,
-0x1bfc, 0x1bff,
-}; /* END of CR_Batak */
+CR_Mongolian[] = { 6,
+0x1800, 0x1801,
+0x1804, 0x1804,
+0x1806, 0x180e,
+0x1810, 0x1819,
+0x1820, 0x1877,
+0x1880, 0x18aa,
+}; /* END of CR_Mongolian */
 
-/* PROPERTY: 'Brahmi': Script */
+/* PROPERTY: 'Mro': Script */
 static const OnigCodePoint
-CR_Brahmi[] = { 3,
-0x11000, 0x1104d,
-0x11052, 0x1106f,
-0x1107f, 0x1107f,
-}; /* END of CR_Brahmi */
+CR_Mro[] = { 3,
+0x16a40, 0x16a5e,
+0x16a60, 0x16a69,
+0x16a6e, 0x16a6f,
+}; /* END of CR_Mro */
 
-/* PROPERTY: 'Mandaic': Script */
+/* PROPERTY: 'Multani': Script */
 static const OnigCodePoint
-CR_Mandaic[] = { 2,
-0x0840, 0x085b,
-0x085e, 0x085e,
-}; /* END of CR_Mandaic */
+CR_Multani[] = { 5,
+0x11280, 0x11286,
+0x11288, 0x11288,
+0x1128a, 0x1128d,
+0x1128f, 0x1129d,
+0x1129f, 0x112a9,
+}; /* END of CR_Multani */
 
-/* PROPERTY: 'Chakma': Script */
+/* PROPERTY: 'Myanmar': Script */
 static const OnigCodePoint
-CR_Chakma[] = { 2,
-0x11100, 0x11134,
-0x11136, 0x11143,
-}; /* END of CR_Chakma */
+CR_Myanmar[] = { 3,
+0x1000, 0x109f,
+0xa9e0, 0xa9fe,
+0xaa60, 0xaa7f,
+}; /* END of CR_Myanmar */
 
-/* PROPERTY: 'Meroitic_Cursive': Script */
+/* PROPERTY: 'N': Major Category */
 static const OnigCodePoint
-CR_Meroitic_Cursive[] = { 3,
-0x109a0, 0x109b7,
-0x109bc, 0x109cf,
+CR_N[] = { 111,
+0x0030, 0x0039,
+0x00b2, 0x00b3,
+0x00b9, 0x00b9,
+0x00bc, 0x00be,
+0x0660, 0x0669,
+0x06f0, 0x06f9,
+0x07c0, 0x07c9,
+0x0966, 0x096f,
+0x09e6, 0x09ef,
+0x09f4, 0x09f9,
+0x0a66, 0x0a6f,
+0x0ae6, 0x0aef,
+0x0b66, 0x0b6f,
+0x0b72, 0x0b77,
+0x0be6, 0x0bf2,
+0x0c66, 0x0c6f,
+0x0c78, 0x0c7e,
+0x0ce6, 0x0cef,
+0x0d66, 0x0d75,
+0x0de6, 0x0def,
+0x0e50, 0x0e59,
+0x0ed0, 0x0ed9,
+0x0f20, 0x0f33,
+0x1040, 0x1049,
+0x1090, 0x1099,
+0x1369, 0x137c,
+0x16ee, 0x16f0,
+0x17e0, 0x17e9,
+0x17f0, 0x17f9,
+0x1810, 0x1819,
+0x1946, 0x194f,
+0x19d0, 0x19da,
+0x1a80, 0x1a89,
+0x1a90, 0x1a99,
+0x1b50, 0x1b59,
+0x1bb0, 0x1bb9,
+0x1c40, 0x1c49,
+0x1c50, 0x1c59,
+0x2070, 0x2070,
+0x2074, 0x2079,
+0x2080, 0x2089,
+0x2150, 0x2182,
+0x2185, 0x2189,
+0x2460, 0x249b,
+0x24ea, 0x24ff,
+0x2776, 0x2793,
+0x2cfd, 0x2cfd,
+0x3007, 0x3007,
+0x3021, 0x3029,
+0x3038, 0x303a,
+0x3192, 0x3195,
+0x3220, 0x3229,
+0x3248, 0x324f,
+0x3251, 0x325f,
+0x3280, 0x3289,
+0x32b1, 0x32bf,
+0xa620, 0xa629,
+0xa6e6, 0xa6ef,
+0xa830, 0xa835,
+0xa8d0, 0xa8d9,
+0xa900, 0xa909,
+0xa9d0, 0xa9d9,
+0xa9f0, 0xa9f9,
+0xaa50, 0xaa59,
+0xabf0, 0xabf9,
+0xff10, 0xff19,
+0x10107, 0x10133,
+0x10140, 0x10178,
+0x1018a, 0x1018b,
+0x102e1, 0x102fb,
+0x10320, 0x10323,
+0x10341, 0x10341,
+0x1034a, 0x1034a,
+0x103d1, 0x103d5,
+0x104a0, 0x104a9,
+0x10858, 0x1085f,
+0x10879, 0x1087f,
+0x108a7, 0x108af,
+0x108fb, 0x108ff,
+0x10916, 0x1091b,
+0x109bc, 0x109bd,
+0x109c0, 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,
+0x10a40, 0x10a47,
+0x10a7d, 0x10a7e,
+0x10a9d, 0x10a9f,
+0x10aeb, 0x10aef,
+0x10b58, 0x10b5f,
+0x10b78, 0x10b7f,
+0x10ba9, 0x10baf,
+0x10cfa, 0x10cff,
+0x10e60, 0x10e7e,
+0x11052, 0x1106f,
 0x110f0, 0x110f9,
-}; /* END of CR_Sora_Sompeng */
-
-/* PROPERTY: 'Takri': Script */
-static const OnigCodePoint
-CR_Takri[] = { 2,
-0x11680, 0x116b7,
+0x11136, 0x1113f,
+0x111d0, 0x111d9,
+0x111e1, 0x111f4,
+0x112f0, 0x112f9,
+0x114d0, 0x114d9,
+0x11650, 0x11659,
 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,
+0x11730, 0x1173b,
+0x118e0, 0x118f2,
+0x12400, 0x1246e,
+0x16a60, 0x16a69,
 0x16b50, 0x16b59,
 0x16b5b, 0x16b61,
-0x16b63, 0x16b77,
-0x16b7d, 0x16b8f,
-}; /* END of CR_Pahawh_Hmong */
+0x1d360, 0x1d371,
+0x1d7ce, 0x1d7ff,
+0x1e8c7, 0x1e8cf,
+0x1f100, 0x1f10c,
+}; /* END of CR_N */
 
-/* PROPERTY: 'Khojki': Script */
+/* PROPERTY: 'Nabataean': Script */
 static const OnigCodePoint
-CR_Khojki[] = { 2,
-0x11200, 0x11211,
-0x11213, 0x1123d,
-}; /* END of CR_Khojki */
+CR_Nabataean[] = { 2,
+0x10880, 0x1089e,
+0x108a7, 0x108af,
+}; /* END of CR_Nabataean */
 
-/* PROPERTY: 'Linear_A': Script */
+/* PROPERTY: 'Nd': General Category */
+#define CR_Nd CR_Digit
+
+/* PROPERTY: 'New_Tai_Lue': Script */
 static const OnigCodePoint
-CR_Linear_A[] = { 3,
-0x10600, 0x10736,
-0x10740, 0x10755,
-0x10760, 0x10767,
-}; /* END of CR_Linear_A */
+CR_New_Tai_Lue[] = { 4,
+0x1980, 0x19ab,
+0x19b0, 0x19c9,
+0x19d0, 0x19da,
+0x19de, 0x19df,
+}; /* END of CR_New_Tai_Lue */
 
-/* PROPERTY: 'Mahajani': Script */
+/* PROPERTY: 'Nko': Script */
 static const OnigCodePoint
-CR_Mahajani[] = { 1,
-0x11150, 0x11176,
-}; /* END of CR_Mahajani */
+CR_Nko[] = { 1,
+0x07c0, 0x07fa,
+}; /* END of CR_Nko */
 
-/* PROPERTY: 'Manichaean': Script */
+/* PROPERTY: 'Nl': General Category */
 static const OnigCodePoint
-CR_Manichaean[] = { 2,
-0x10ac0, 0x10ae6,
-0x10aeb, 0x10af6,
-}; /* END of CR_Manichaean */
+CR_Nl[] = { 12,
+0x16ee, 0x16f0,
+0x2160, 0x2182,
+0x2185, 0x2188,
+0x3007, 0x3007,
+0x3021, 0x3029,
+0x3038, 0x303a,
+0xa6e6, 0xa6ef,
+0x10140, 0x10174,
+0x10341, 0x10341,
+0x1034a, 0x1034a,
+0x103d1, 0x103d5,
+0x12400, 0x1246e,
+}; /* END of CR_Nl */
 
-/* PROPERTY: 'Mende_Kikakui': Script */
+/* PROPERTY: 'No': General Category */
 static const OnigCodePoint
-CR_Mende_Kikakui[] = { 2,
-0x1e800, 0x1e8c4,
-0x1e8c7, 0x1e8d6,
-}; /* END of CR_Mende_Kikakui */
+CR_No[] = { 58,
+0x00b2, 0x00b3,
+0x00b9, 0x00b9,
+0x00bc, 0x00be,
+0x09f4, 0x09f9,
+0x0b72, 0x0b77,
+0x0bf0, 0x0bf2,
+0x0c78, 0x0c7e,
+0x0d70, 0x0d75,
+0x0f2a, 0x0f33,
+0x1369, 0x137c,
+0x17f0, 0x17f9,
+0x19da, 0x19da,
+0x2070, 0x2070,
+0x2074, 0x2079,
+0x2080, 0x2089,
+0x2150, 0x215f,
+0x2189, 0x2189,
+0x2460, 0x249b,
+0x24ea, 0x24ff,
+0x2776, 0x2793,
+0x2cfd, 0x2cfd,
+0x3192, 0x3195,
+0x3220, 0x3229,
+0x3248, 0x324f,
+0x3251, 0x325f,
+0x3280, 0x3289,
+0x32b1, 0x32bf,
+0xa830, 0xa835,
+0x10107, 0x10133,
+0x10175, 0x10178,
+0x1018a, 0x1018b,
+0x102e1, 0x102fb,
+0x10320, 0x10323,
+0x10858, 0x1085f,
+0x10879, 0x1087f,
+0x108a7, 0x108af,
+0x108fb, 0x108ff,
+0x10916, 0x1091b,
+0x109bc, 0x109bd,
+0x109c0, 0x109cf,
+0x109d2, 0x109ff,
+0x10a40, 0x10a47,
+0x10a7d, 0x10a7e,
+0x10a9d, 0x10a9f,
+0x10aeb, 0x10aef,
+0x10b58, 0x10b5f,
+0x10b78, 0x10b7f,
+0x10ba9, 0x10baf,
+0x10cfa, 0x10cff,
+0x10e60, 0x10e7e,
+0x11052, 0x11065,
+0x111e1, 0x111f4,
+0x1173a, 0x1173b,
+0x118ea, 0x118f2,
+0x16b5b, 0x16b61,
+0x1d360, 0x1d371,
+0x1e8c7, 0x1e8cf,
+0x1f100, 0x1f10c,
+}; /* END of CR_No */
 
-/* PROPERTY: 'Modi': Script */
+/* PROPERTY: 'Noncharacter_Code_Point': Binary Property */
 static const OnigCodePoint
-CR_Modi[] = { 2,
-0x11600, 0x11644,
-0x11650, 0x11659,
-}; /* END of CR_Modi */
+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: 'Mro': Script */
+/* PROPERTY: 'Ogham': Script */
 static const OnigCodePoint
-CR_Mro[] = { 3,
-0x16a40, 0x16a5e,
-0x16a60, 0x16a69,
-0x16a6e, 0x16a6f,
-}; /* END of CR_Mro */
+CR_Ogham[] = { 1,
+0x1680, 0x169c,
+}; /* END of CR_Ogham */
 
-/* PROPERTY: 'Old_North_Arabian': Script */
+/* PROPERTY: 'Ol_Chiki': Script */
 static const OnigCodePoint
-CR_Old_North_Arabian[] = { 1,
-0x10a80, 0x10a9f,
-}; /* END of CR_Old_North_Arabian */
+CR_Ol_Chiki[] = { 1,
+0x1c50, 0x1c7f,
+}; /* END of CR_Ol_Chiki */
 
-/* PROPERTY: 'Nabataean': Script */
+/* PROPERTY: 'Old_Hungarian': Script */
 static const OnigCodePoint
-CR_Nabataean[] = { 2,
-0x10880, 0x1089e,
-0x108a7, 0x108af,
-}; /* END of CR_Nabataean */
+CR_Old_Hungarian[] = { 3,
+0x10c80, 0x10cb2,
+0x10cc0, 0x10cf2,
+0x10cfa, 0x10cff,
+}; /* END of CR_Old_Hungarian */
 
-/* PROPERTY: 'Palmyrene': Script */
+/* PROPERTY: 'Old_Italic': Script */
 static const OnigCodePoint
-CR_Palmyrene[] = { 1,
-0x10860, 0x1087f,
-}; /* END of CR_Palmyrene */
+CR_Old_Italic[] = { 1,
+0x10300, 0x10323,
+}; /* END of CR_Old_Italic */
 
-/* PROPERTY: 'Pau_Cin_Hau': Script */
+/* PROPERTY: 'Old_North_Arabian': Script */
 static const OnigCodePoint
-CR_Pau_Cin_Hau[] = { 1,
-0x11ac0, 0x11af8,
-}; /* END of CR_Pau_Cin_Hau */
+CR_Old_North_Arabian[] = { 1,
+0x10a80, 0x10a9f,
+}; /* END of CR_Old_North_Arabian */
 
 /* PROPERTY: 'Old_Permic': Script */
 static const OnigCodePoint
@@ -19068,261 +16967,318 @@ 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 */
+/* PROPERTY: 'Old_Persian': Script */
 static const OnigCodePoint
-CR_Ahom[] = { 3,
-0x11700, 0x11719,
-0x1171d, 0x1172b,
-0x11730, 0x1173f,
-}; /* END of CR_Ahom */
+CR_Old_Persian[] = { 2,
+0x103a0, 0x103c3,
+0x103c8, 0x103d5,
+}; /* END of CR_Old_Persian */
 
-/* PROPERTY: 'Anatolian_Hieroglyphs': Script */
+/* PROPERTY: 'Old_South_Arabian': Script */
 static const OnigCodePoint
-CR_Anatolian_Hieroglyphs[] = { 1,
-0x14400, 0x14646,
-}; /* END of CR_Anatolian_Hieroglyphs */
+CR_Old_South_Arabian[] = { 1,
+0x10a60, 0x10a7f,
+}; /* END of CR_Old_South_Arabian */
 
-/* PROPERTY: 'Hatran': Script */
+/* PROPERTY: 'Old_Turkic': Script */
 static const OnigCodePoint
-CR_Hatran[] = { 3,
-0x108e0, 0x108f2,
-0x108f4, 0x108f5,
-0x108fb, 0x108ff,
-}; /* END of CR_Hatran */
+CR_Old_Turkic[] = { 1,
+0x10c00, 0x10c48,
+}; /* END of CR_Old_Turkic */
 
-/* PROPERTY: 'Multani': Script */
+/* PROPERTY: 'Oriya': Script */
 static const OnigCodePoint
-CR_Multani[] = { 5,
-0x11280, 0x11286,
-0x11288, 0x11288,
-0x1128a, 0x1128d,
-0x1128f, 0x1129d,
-0x1129f, 0x112a9,
-}; /* END of CR_Multani */
+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: 'Old_Hungarian': Script */
+/* PROPERTY: 'Osmanya': Script */
 static const OnigCodePoint
-CR_Old_Hungarian[] = { 3,
-0x10c80, 0x10cb2,
-0x10cc0, 0x10cf2,
-0x10cfa, 0x10cff,
-}; /* END of CR_Old_Hungarian */
+CR_Osmanya[] = { 2,
+0x10480, 0x1049d,
+0x104a0, 0x104a9,
+}; /* END of CR_Osmanya */
 
-/* PROPERTY: 'SignWriting': Script */
+/* PROPERTY: 'Other_Alphabetic': Binary Property */
 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
+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: 'Bidi_Control': Binary Property */
+/* PROPERTY: 'Other_Default_Ignorable_Code_Point': Binary Property */
 static const OnigCodePoint
-CR_Bidi_Control[] = { 4,
-0x061c, 0x061c,
-0x200e, 0x200f,
-0x202a, 0x202e,
-0x2066, 0x2069,
-}; /* END of CR_Bidi_Control */
+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: 'Join_Control': Binary Property */
+/* PROPERTY: 'Other_Grapheme_Extend': Binary Property */
 static const OnigCodePoint
-CR_Join_Control[] = { 1,
+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,
-}; /* 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 */
+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: 'Hyphen': Binary Property */
+/* PROPERTY: 'Other_ID_Continue': 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 */
+CR_Other_ID_Continue[] = { 4,
+0x00b7, 0x00b7,
+0x0387, 0x0387,
+0x1369, 0x1371,
+0x19da, 0x19da,
+}; /* END of CR_Other_ID_Continue */
 
-/* PROPERTY: 'Quotation_Mark': Binary Property */
+/* PROPERTY: 'Other_ID_Start': 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 */
+CR_Other_ID_Start[] = { 3,
+0x2118, 0x2118,
+0x212e, 0x212e,
+0x309b, 0x309c,
+}; /* END of CR_Other_ID_Start */
 
-/* PROPERTY: 'Terminal_Punctuation': Binary Property */
+/* PROPERTY: 'Other_Lowercase': 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 */
+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
@@ -19463,556 +17419,1175 @@ CR_Other_Math[] = { 134,
 0x1eeab, 0x1eebb,
 }; /* END of CR_Other_Math */
 
-/* PROPERTY: 'Hex_Digit': Binary Property */
+/* 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_Hex_Digit[] = { 6,
-0x0030, 0x0039,
-0x0041, 0x0046,
-0x0061, 0x0066,
-0xff10, 0xff19,
-0xff21, 0xff26,
-0xff41, 0xff46,
-}; /* END of CR_Hex_Digit */
+CR_Pattern_White_Space[] = { 5,
+0x0009, 0x000d,
+0x0020, 0x0020,
+0x0085, 0x0085,
+0x200e, 0x200f,
+0x2028, 0x2029,
+}; /* END of CR_Pattern_White_Space */
 
-/* PROPERTY: 'ASCII_Hex_Digit': Binary Property */
-#define CR_ASCII_Hex_Digit CR_XDigit
+/* PROPERTY: 'Pau_Cin_Hau': Script */
+static const OnigCodePoint
+CR_Pau_Cin_Hau[] = { 1,
+0x11ac0, 0x11af8,
+}; /* END of CR_Pau_Cin_Hau */
 
-/* PROPERTY: 'Other_Alphabetic': Binary Property */
+/* PROPERTY: 'Pc': General Category */
 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 */
+CR_Pc[] = { 6,
+0x005f, 0x005f,
+0x203f, 0x2040,
+0x2054, 0x2054,
+0xfe33, 0xfe34,
+0xfe4d, 0xfe4f,
+0xff3f, 0xff3f,
+}; /* END of CR_Pc */
+
+/* PROPERTY: 'Pd': General Category */
+static const OnigCodePoint
+CR_Pd[] = { 17,
+0x002d, 0x002d,
+0x058a, 0x058a,
+0x05be, 0x05be,
+0x1400, 0x1400,
+0x1806, 0x1806,
+0x2010, 0x2015,
+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_Pd */
+
+/* PROPERTY: 'Pe': General Category */
+static const OnigCodePoint
+CR_Pe[] = { 72,
+0x0029, 0x0029,
+0x005d, 0x005d,
+0x007d, 0x007d,
+0x0f3b, 0x0f3b,
+0x0f3d, 0x0f3d,
+0x169c, 0x169c,
+0x2046, 0x2046,
+0x207e, 0x207e,
+0x208e, 0x208e,
+0x2309, 0x2309,
+0x230b, 0x230b,
+0x232a, 0x232a,
+0x2769, 0x2769,
+0x276b, 0x276b,
+0x276d, 0x276d,
+0x276f, 0x276f,
+0x2771, 0x2771,
+0x2773, 0x2773,
+0x2775, 0x2775,
+0x27c6, 0x27c6,
+0x27e7, 0x27e7,
+0x27e9, 0x27e9,
+0x27eb, 0x27eb,
+0x27ed, 0x27ed,
+0x27ef, 0x27ef,
+0x2984, 0x2984,
+0x2986, 0x2986,
+0x2988, 0x2988,
+0x298a, 0x298a,
+0x298c, 0x298c,
+0x298e, 0x298e,
+0x2990, 0x2990,
+0x2992, 0x2992,
+0x2994, 0x2994,
+0x2996, 0x2996,
+0x2998, 0x2998,
+0x29d9, 0x29d9,
+0x29db, 0x29db,
+0x29fd, 0x29fd,
+0x2e23, 0x2e23,
+0x2e25, 0x2e25,
+0x2e27, 0x2e27,
+0x2e29, 0x2e29,
+0x3009, 0x3009,
+0x300b, 0x300b,
+0x300d, 0x300d,
+0x300f, 0x300f,
+0x3011, 0x3011,
+0x3015, 0x3015,
+0x3017, 0x3017,
+0x3019, 0x3019,
+0x301b, 0x301b,
+0x301e, 0x301f,
+0xfd3e, 0xfd3e,
+0xfe18, 0xfe18,
+0xfe36, 0xfe36,
+0xfe38, 0xfe38,
+0xfe3a, 0xfe3a,
+0xfe3c, 0xfe3c,
+0xfe3e, 0xfe3e,
+0xfe40, 0xfe40,
+0xfe42, 0xfe42,
+0xfe44, 0xfe44,
+0xfe48, 0xfe48,
+0xfe5a, 0xfe5a,
+0xfe5c, 0xfe5c,
+0xfe5e, 0xfe5e,
+0xff09, 0xff09,
+0xff3d, 0xff3d,
+0xff5d, 0xff5d,
+0xff60, 0xff60,
+0xff63, 0xff63,
+}; /* END of CR_Pe */
+
+/* PROPERTY: 'Pf': General Category */
+static const OnigCodePoint
+CR_Pf[] = { 10,
+0x00bb, 0x00bb,
+0x2019, 0x2019,
+0x201d, 0x201d,
+0x203a, 0x203a,
+0x2e03, 0x2e03,
+0x2e05, 0x2e05,
+0x2e0a, 0x2e0a,
+0x2e0d, 0x2e0d,
+0x2e1d, 0x2e1d,
+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,
+0x00ab, 0x00ab,
+0x2018, 0x2018,
+0x201b, 0x201c,
+0x201f, 0x201f,
+0x2039, 0x2039,
+0x2e02, 0x2e02,
+0x2e04, 0x2e04,
+0x2e09, 0x2e09,
+0x2e0c, 0x2e0c,
+0x2e1c, 0x2e1c,
+0x2e20, 0x2e20,
+}; /* END of CR_Pi */
+
+/* PROPERTY: 'Po': General Category */
+static const OnigCodePoint
+CR_Po[] = { 157,
+0x0021, 0x0023,
+0x0025, 0x0027,
+0x002a, 0x002a,
+0x002c, 0x002c,
+0x002e, 0x002f,
+0x003a, 0x003b,
+0x003f, 0x0040,
+0x005c, 0x005c,
+0x00a1, 0x00a1,
+0x00a7, 0x00a7,
+0x00b6, 0x00b7,
+0x00bf, 0x00bf,
+0x037e, 0x037e,
+0x0387, 0x0387,
+0x055a, 0x055f,
+0x0589, 0x0589,
+0x05c0, 0x05c0,
+0x05c3, 0x05c3,
+0x05c6, 0x05c6,
+0x05f3, 0x05f4,
+0x0609, 0x060a,
+0x060c, 0x060d,
+0x061b, 0x061b,
+0x061e, 0x061f,
+0x066a, 0x066d,
+0x06d4, 0x06d4,
+0x0700, 0x070d,
+0x07f7, 0x07f9,
+0x0830, 0x083e,
+0x085e, 0x085e,
+0x0964, 0x0965,
+0x0970, 0x0970,
+0x0af0, 0x0af0,
+0x0df4, 0x0df4,
+0x0e4f, 0x0e4f,
+0x0e5a, 0x0e5b,
+0x0f04, 0x0f12,
+0x0f14, 0x0f14,
+0x0f85, 0x0f85,
+0x0fd0, 0x0fd4,
+0x0fd9, 0x0fda,
+0x104a, 0x104f,
+0x10fb, 0x10fb,
+0x1360, 0x1368,
+0x166d, 0x166e,
+0x16eb, 0x16ed,
+0x1735, 0x1736,
+0x17d4, 0x17d6,
+0x17d8, 0x17da,
+0x1800, 0x1805,
+0x1807, 0x180a,
+0x1944, 0x1945,
+0x1a1e, 0x1a1f,
+0x1aa0, 0x1aa6,
+0x1aa8, 0x1aad,
+0x1b5a, 0x1b60,
+0x1bfc, 0x1bff,
+0x1c3b, 0x1c3f,
+0x1c7e, 0x1c7f,
+0x1cc0, 0x1cc7,
+0x1cd3, 0x1cd3,
+0x2016, 0x2017,
+0x2020, 0x2027,
+0x2030, 0x2038,
+0x203b, 0x203e,
+0x2041, 0x2043,
+0x2047, 0x2051,
+0x2053, 0x2053,
+0x2055, 0x205e,
+0x2cf9, 0x2cfc,
+0x2cfe, 0x2cff,
+0x2d70, 0x2d70,
+0x2e00, 0x2e01,
+0x2e06, 0x2e08,
+0x2e0b, 0x2e0b,
+0x2e0e, 0x2e16,
+0x2e18, 0x2e19,
+0x2e1b, 0x2e1b,
+0x2e1e, 0x2e1f,
+0x2e2a, 0x2e2e,
+0x2e30, 0x2e39,
+0x2e3c, 0x2e3f,
+0x2e41, 0x2e41,
+0x3001, 0x3003,
+0x303d, 0x303d,
+0x30fb, 0x30fb,
+0xa4fe, 0xa4ff,
+0xa60d, 0xa60f,
+0xa673, 0xa673,
+0xa67e, 0xa67e,
+0xa6f2, 0xa6f7,
+0xa874, 0xa877,
+0xa8ce, 0xa8cf,
+0xa8f8, 0xa8fa,
+0xa8fc, 0xa8fc,
+0xa92e, 0xa92f,
+0xa95f, 0xa95f,
+0xa9c1, 0xa9cd,
+0xa9de, 0xa9df,
+0xaa5c, 0xaa5f,
+0xaade, 0xaadf,
+0xaaf0, 0xaaf1,
+0xabeb, 0xabeb,
+0xfe10, 0xfe16,
+0xfe19, 0xfe19,
+0xfe30, 0xfe30,
+0xfe45, 0xfe46,
+0xfe49, 0xfe4c,
+0xfe50, 0xfe52,
+0xfe54, 0xfe57,
+0xfe5f, 0xfe61,
+0xfe68, 0xfe68,
+0xfe6a, 0xfe6b,
+0xff01, 0xff03,
+0xff05, 0xff07,
+0xff0a, 0xff0a,
+0xff0c, 0xff0c,
+0xff0e, 0xff0f,
+0xff1a, 0xff1b,
+0xff1f, 0xff20,
+0xff3c, 0xff3c,
+0xff61, 0xff61,
+0xff64, 0xff65,
+0x10100, 0x10102,
+0x1039f, 0x1039f,
+0x103d0, 0x103d0,
+0x1056f, 0x1056f,
+0x10857, 0x10857,
+0x1091f, 0x1091f,
+0x1093f, 0x1093f,
+0x10a50, 0x10a58,
+0x10a7f, 0x10a7f,
+0x10af0, 0x10af6,
+0x10b39, 0x10b3f,
+0x10b99, 0x10b9c,
+0x11047, 0x1104d,
+0x110bb, 0x110bc,
+0x110be, 0x110c1,
+0x11140, 0x11143,
+0x11174, 0x11175,
+0x111c5, 0x111c9,
+0x111cd, 0x111cd,
+0x111db, 0x111db,
+0x111dd, 0x111df,
+0x11238, 0x1123d,
+0x112a9, 0x112a9,
+0x114c6, 0x114c6,
+0x115c1, 0x115d7,
+0x11641, 0x11643,
+0x1173c, 0x1173e,
+0x12470, 0x12474,
+0x16a6e, 0x16a6f,
+0x16af5, 0x16af5,
+0x16b37, 0x16b3b,
+0x16b44, 0x16b44,
+0x1bc9f, 0x1bc9f,
+0x1da87, 0x1da8b,
+}; /* END of CR_Po */
 
-/* PROPERTY: 'Ideographic': Binary Property */
+/* PROPERTY: 'Ps': General Category */
 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 */
+CR_Ps[] = { 75,
+0x0028, 0x0028,
+0x005b, 0x005b,
+0x007b, 0x007b,
+0x0f3a, 0x0f3a,
+0x0f3c, 0x0f3c,
+0x169b, 0x169b,
+0x201a, 0x201a,
+0x201e, 0x201e,
+0x2045, 0x2045,
+0x207d, 0x207d,
+0x208d, 0x208d,
+0x2308, 0x2308,
+0x230a, 0x230a,
+0x2329, 0x2329,
+0x2768, 0x2768,
+0x276a, 0x276a,
+0x276c, 0x276c,
+0x276e, 0x276e,
+0x2770, 0x2770,
+0x2772, 0x2772,
+0x2774, 0x2774,
+0x27c5, 0x27c5,
+0x27e6, 0x27e6,
+0x27e8, 0x27e8,
+0x27ea, 0x27ea,
+0x27ec, 0x27ec,
+0x27ee, 0x27ee,
+0x2983, 0x2983,
+0x2985, 0x2985,
+0x2987, 0x2987,
+0x2989, 0x2989,
+0x298b, 0x298b,
+0x298d, 0x298d,
+0x298f, 0x298f,
+0x2991, 0x2991,
+0x2993, 0x2993,
+0x2995, 0x2995,
+0x2997, 0x2997,
+0x29d8, 0x29d8,
+0x29da, 0x29da,
+0x29fc, 0x29fc,
+0x2e22, 0x2e22,
+0x2e24, 0x2e24,
+0x2e26, 0x2e26,
+0x2e28, 0x2e28,
+0x2e42, 0x2e42,
+0x3008, 0x3008,
+0x300a, 0x300a,
+0x300c, 0x300c,
+0x300e, 0x300e,
+0x3010, 0x3010,
+0x3014, 0x3014,
+0x3016, 0x3016,
+0x3018, 0x3018,
+0x301a, 0x301a,
+0x301d, 0x301d,
+0xfd3f, 0xfd3f,
+0xfe17, 0xfe17,
+0xfe35, 0xfe35,
+0xfe37, 0xfe37,
+0xfe39, 0xfe39,
+0xfe3b, 0xfe3b,
+0xfe3d, 0xfe3d,
+0xfe3f, 0xfe3f,
+0xfe41, 0xfe41,
+0xfe43, 0xfe43,
+0xfe47, 0xfe47,
+0xfe59, 0xfe59,
+0xfe5b, 0xfe5b,
+0xfe5d, 0xfe5d,
+0xff08, 0xff08,
+0xff3b, 0xff3b,
+0xff5b, 0xff5b,
+0xff5f, 0xff5f,
+0xff62, 0xff62,
+}; /* END of CR_Ps */
 
-/* PROPERTY: 'Diacritic': Binary Property */
+/* PROPERTY: 'Psalter_Pahlavi': Script */
 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,
+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,
+0x0024, 0x0024,
+0x002b, 0x002b,
+0x003c, 0x003e,
+0x005e, 0x005e,
+0x0060, 0x0060,
+0x007c, 0x007c,
+0x007e, 0x007e,
+0x00a2, 0x00a6,
+0x00a8, 0x00a9,
+0x00ac, 0x00ac,
+0x00ae, 0x00b1,
+0x00b4, 0x00b4,
+0x00b8, 0x00b8,
+0x00d7, 0x00d7,
+0x00f7, 0x00f7,
+0x02c2, 0x02c5,
+0x02d2, 0x02df,
+0x02e5, 0x02eb,
+0x02ed, 0x02ed,
+0x02ef, 0x02ff,
+0x0375, 0x0375,
+0x0384, 0x0385,
+0x03f6, 0x03f6,
+0x0482, 0x0482,
+0x058d, 0x058f,
+0x0606, 0x0608,
+0x060b, 0x060b,
+0x060e, 0x060f,
+0x06de, 0x06de,
+0x06e9, 0x06e9,
+0x06fd, 0x06fe,
+0x07f6, 0x07f6,
+0x09f2, 0x09f3,
+0x09fa, 0x09fb,
+0x0af1, 0x0af1,
+0x0b70, 0x0b70,
+0x0bf3, 0x0bfa,
+0x0c7f, 0x0c7f,
+0x0d79, 0x0d79,
+0x0e3f, 0x0e3f,
+0x0f01, 0x0f03,
+0x0f13, 0x0f13,
+0x0f15, 0x0f17,
+0x0f1a, 0x0f1f,
+0x0f34, 0x0f34,
+0x0f36, 0x0f36,
+0x0f38, 0x0f38,
+0x0fbe, 0x0fc5,
+0x0fc7, 0x0fcc,
+0x0fce, 0x0fcf,
+0x0fd5, 0x0fd8,
+0x109e, 0x109f,
+0x1390, 0x1399,
+0x17db, 0x17db,
+0x1940, 0x1940,
+0x19de, 0x19ff,
+0x1b61, 0x1b6a,
+0x1b74, 0x1b7c,
 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,
+0x2044, 0x2044,
+0x2052, 0x2052,
+0x207a, 0x207c,
+0x208a, 0x208c,
+0x20a0, 0x20be,
+0x2100, 0x2101,
+0x2103, 0x2106,
+0x2108, 0x2109,
+0x2114, 0x2114,
+0x2116, 0x2118,
+0x211e, 0x2123,
+0x2125, 0x2125,
+0x2127, 0x2127,
+0x2129, 0x2129,
+0x212e, 0x212e,
+0x213a, 0x213b,
+0x2140, 0x2144,
+0x214a, 0x214d,
+0x214f, 0x214f,
+0x218a, 0x218b,
+0x2190, 0x2307,
+0x230c, 0x2328,
+0x232b, 0x23fa,
+0x2400, 0x2426,
+0x2440, 0x244a,
+0x249c, 0x24e9,
+0x2500, 0x2767,
+0x2794, 0x27c4,
+0x27c7, 0x27e5,
+0x27f0, 0x2982,
+0x2999, 0x29d7,
+0x29dc, 0x29fb,
+0x29fe, 0x2b73,
+0x2b76, 0x2b95,
+0x2b98, 0x2bb9,
+0x2bbd, 0x2bc8,
+0x2bca, 0x2bd1,
+0x2bec, 0x2bef,
+0x2ce5, 0x2cea,
+0x2e80, 0x2e99,
+0x2e9b, 0x2ef3,
+0x2f00, 0x2fd5,
+0x2ff0, 0x2ffb,
+0x3004, 0x3004,
+0x3012, 0x3013,
+0x3020, 0x3020,
+0x3036, 0x3037,
+0x303e, 0x303f,
+0x309b, 0x309c,
+0x3190, 0x3191,
+0x3196, 0x319f,
+0x31c0, 0x31e3,
+0x3200, 0x321e,
+0x322a, 0x3247,
+0x3250, 0x3250,
+0x3260, 0x327f,
+0x328a, 0x32b0,
+0x32c0, 0x32fe,
+0x3300, 0x33ff,
+0x4dc0, 0x4dff,
+0xa490, 0xa4c6,
+0xa700, 0xa716,
+0xa720, 0xa721,
+0xa789, 0xa78a,
+0xa828, 0xa82b,
+0xa836, 0xa839,
+0xaa77, 0xaa79,
+0xab5b, 0xab5b,
+0xfb29, 0xfb29,
+0xfbb2, 0xfbc1,
+0xfdfc, 0xfdfd,
+0xfe62, 0xfe62,
+0xfe64, 0xfe66,
+0xfe69, 0xfe69,
+0xff04, 0xff04,
+0xff0b, 0xff0b,
+0xff1c, 0xff1e,
 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 */
+0xff5c, 0xff5c,
+0xff5e, 0xff5e,
+0xffe0, 0xffe6,
+0xffe8, 0xffee,
+0xfffc, 0xfffd,
+0x10137, 0x1013f,
+0x10179, 0x10189,
+0x1018c, 0x1018c,
+0x10190, 0x1019b,
+0x101a0, 0x101a0,
+0x101d0, 0x101fc,
+0x10877, 0x10878,
+0x10ac8, 0x10ac8,
+0x1173f, 0x1173f,
+0x16b3c, 0x16b3f,
+0x16b45, 0x16b45,
+0x1bc9c, 0x1bc9c,
+0x1d000, 0x1d0f5,
+0x1d100, 0x1d126,
+0x1d129, 0x1d164,
+0x1d16a, 0x1d16c,
+0x1d183, 0x1d184,
+0x1d18c, 0x1d1a9,
+0x1d1ae, 0x1d1e8,
+0x1d200, 0x1d241,
+0x1d245, 0x1d245,
+0x1d300, 0x1d356,
+0x1d6c1, 0x1d6c1,
+0x1d6db, 0x1d6db,
+0x1d6fb, 0x1d6fb,
+0x1d715, 0x1d715,
+0x1d735, 0x1d735,
+0x1d74f, 0x1d74f,
+0x1d76f, 0x1d76f,
+0x1d789, 0x1d789,
+0x1d7a9, 0x1d7a9,
+0x1d7c3, 0x1d7c3,
+0x1d800, 0x1d9ff,
+0x1da37, 0x1da3a,
+0x1da6d, 0x1da74,
+0x1da76, 0x1da83,
+0x1da85, 0x1da86,
+0x1eef0, 0x1eef1,
+0x1f000, 0x1f02b,
+0x1f030, 0x1f093,
+0x1f0a0, 0x1f0ae,
+0x1f0b1, 0x1f0bf,
+0x1f0c1, 0x1f0cf,
+0x1f0d1, 0x1f0f5,
+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,
+}; /* END of CR_S */
 
-/* PROPERTY: 'Extender': Binary Property */
+/* PROPERTY: 'STerm': 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 */
+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: 'Other_Lowercase': Binary Property */
+/* PROPERTY: 'Samaritan': Script */
 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 */
+CR_Samaritan[] = { 2,
+0x0800, 0x082d,
+0x0830, 0x083e,
+}; /* END of CR_Samaritan */
 
-/* PROPERTY: 'Other_Uppercase': Binary Property */
+/* PROPERTY: 'Saurashtra': Script */
 static const OnigCodePoint
-CR_Other_Uppercase[] = { 5,
-0x2160, 0x216f,
-0x24b6, 0x24cf,
-0x1f130, 0x1f149,
-0x1f150, 0x1f169,
-0x1f170, 0x1f189,
-}; /* END of CR_Other_Uppercase */
+CR_Saurashtra[] = { 2,
+0xa880, 0xa8c4,
+0xa8ce, 0xa8d9,
+}; /* END of CR_Saurashtra */
 
-/* PROPERTY: 'Noncharacter_Code_Point': Binary Property */
+/* PROPERTY: 'Sc': General Category */
 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 */
+CR_Sc[] = { 17,
+0x0024, 0x0024,
+0x00a2, 0x00a5,
+0x058f, 0x058f,
+0x060b, 0x060b,
+0x09f2, 0x09f3,
+0x09fb, 0x09fb,
+0x0af1, 0x0af1,
+0x0bf9, 0x0bf9,
+0x0e3f, 0x0e3f,
+0x17db, 0x17db,
+0x20a0, 0x20be,
+0xa838, 0xa838,
+0xfdfc, 0xfdfc,
+0xfe69, 0xfe69,
+0xff04, 0xff04,
+0xffe0, 0xffe1,
+0xffe5, 0xffe6,
+}; /* END of CR_Sc */
 
-/* PROPERTY: 'Other_Grapheme_Extend': Binary Property */
+/* PROPERTY: 'Sharada': Script */
 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 */
+CR_Sharada[] = { 2,
+0x11180, 0x111cd,
+0x111d0, 0x111df,
+}; /* END of CR_Sharada */
 
-/* PROPERTY: 'IDS_Binary_Operator': Binary Property */
+/* PROPERTY: 'Shavian': Script */
 static const OnigCodePoint
-CR_IDS_Binary_Operator[] = { 2,
-0x2ff0, 0x2ff1,
-0x2ff4, 0x2ffb,
-}; /* END of CR_IDS_Binary_Operator */
+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: 'IDS_Trinary_Operator': Binary Property */
+/* PROPERTY: 'Sk': General Category */
 static const OnigCodePoint
-CR_IDS_Trinary_Operator[] = { 1,
-0x2ff2, 0x2ff3,
-}; /* END of CR_IDS_Trinary_Operator */
+CR_Sk[] = { 29,
+0x005e, 0x005e,
+0x0060, 0x0060,
+0x00a8, 0x00a8,
+0x00af, 0x00af,
+0x00b4, 0x00b4,
+0x00b8, 0x00b8,
+0x02c2, 0x02c5,
+0x02d2, 0x02df,
+0x02e5, 0x02eb,
+0x02ed, 0x02ed,
+0x02ef, 0x02ff,
+0x0375, 0x0375,
+0x0384, 0x0385,
+0x1fbd, 0x1fbd,
+0x1fbf, 0x1fc1,
+0x1fcd, 0x1fcf,
+0x1fdd, 0x1fdf,
+0x1fed, 0x1fef,
+0x1ffd, 0x1ffe,
+0x309b, 0x309c,
+0xa700, 0xa716,
+0xa720, 0xa721,
+0xa789, 0xa78a,
+0xab5b, 0xab5b,
+0xfbb2, 0xfbc1,
+0xff3e, 0xff3e,
+0xff40, 0xff40,
+0xffe3, 0xffe3,
+0x1f3fb, 0x1f3ff,
+}; /* END of CR_Sk */
 
-/* PROPERTY: 'Radical': Binary Property */
+/* PROPERTY: 'Sm': General Category */
 static const OnigCodePoint
-CR_Radical[] = { 3,
+CR_Sm[] = { 64,
+0x002b, 0x002b,
+0x003c, 0x003e,
+0x007c, 0x007c,
+0x007e, 0x007e,
+0x00ac, 0x00ac,
+0x00b1, 0x00b1,
+0x00d7, 0x00d7,
+0x00f7, 0x00f7,
+0x03f6, 0x03f6,
+0x0606, 0x0608,
+0x2044, 0x2044,
+0x2052, 0x2052,
+0x207a, 0x207c,
+0x208a, 0x208c,
+0x2118, 0x2118,
+0x2140, 0x2144,
+0x214b, 0x214b,
+0x2190, 0x2194,
+0x219a, 0x219b,
+0x21a0, 0x21a0,
+0x21a3, 0x21a3,
+0x21a6, 0x21a6,
+0x21ae, 0x21ae,
+0x21ce, 0x21cf,
+0x21d2, 0x21d2,
+0x21d4, 0x21d4,
+0x21f4, 0x22ff,
+0x2320, 0x2321,
+0x237c, 0x237c,
+0x239b, 0x23b3,
+0x23dc, 0x23e1,
+0x25b7, 0x25b7,
+0x25c1, 0x25c1,
+0x25f8, 0x25ff,
+0x266f, 0x266f,
+0x27c0, 0x27c4,
+0x27c7, 0x27e5,
+0x27f0, 0x27ff,
+0x2900, 0x2982,
+0x2999, 0x29d7,
+0x29dc, 0x29fb,
+0x29fe, 0x2aff,
+0x2b30, 0x2b44,
+0x2b47, 0x2b4c,
+0xfb29, 0xfb29,
+0xfe62, 0xfe62,
+0xfe64, 0xfe66,
+0xff0b, 0xff0b,
+0xff1c, 0xff1e,
+0xff5c, 0xff5c,
+0xff5e, 0xff5e,
+0xffe2, 0xffe2,
+0xffe9, 0xffec,
+0x1d6c1, 0x1d6c1,
+0x1d6db, 0x1d6db,
+0x1d6fb, 0x1d6fb,
+0x1d715, 0x1d715,
+0x1d735, 0x1d735,
+0x1d74f, 0x1d74f,
+0x1d76f, 0x1d76f,
+0x1d789, 0x1d789,
+0x1d7a9, 0x1d7a9,
+0x1d7c3, 0x1d7c3,
+0x1eef0, 0x1eef1,
+}; /* END of CR_Sm */
+
+/* PROPERTY: 'So': General Category */
+static const OnigCodePoint
+CR_So[] = { 170,
+0x00a6, 0x00a6,
+0x00a9, 0x00a9,
+0x00ae, 0x00ae,
+0x00b0, 0x00b0,
+0x0482, 0x0482,
+0x058d, 0x058e,
+0x060e, 0x060f,
+0x06de, 0x06de,
+0x06e9, 0x06e9,
+0x06fd, 0x06fe,
+0x07f6, 0x07f6,
+0x09fa, 0x09fa,
+0x0b70, 0x0b70,
+0x0bf3, 0x0bf8,
+0x0bfa, 0x0bfa,
+0x0c7f, 0x0c7f,
+0x0d79, 0x0d79,
+0x0f01, 0x0f03,
+0x0f13, 0x0f13,
+0x0f15, 0x0f17,
+0x0f1a, 0x0f1f,
+0x0f34, 0x0f34,
+0x0f36, 0x0f36,
+0x0f38, 0x0f38,
+0x0fbe, 0x0fc5,
+0x0fc7, 0x0fcc,
+0x0fce, 0x0fcf,
+0x0fd5, 0x0fd8,
+0x109e, 0x109f,
+0x1390, 0x1399,
+0x1940, 0x1940,
+0x19de, 0x19ff,
+0x1b61, 0x1b6a,
+0x1b74, 0x1b7c,
+0x2100, 0x2101,
+0x2103, 0x2106,
+0x2108, 0x2109,
+0x2114, 0x2114,
+0x2116, 0x2117,
+0x211e, 0x2123,
+0x2125, 0x2125,
+0x2127, 0x2127,
+0x2129, 0x2129,
+0x212e, 0x212e,
+0x213a, 0x213b,
+0x214a, 0x214a,
+0x214c, 0x214d,
+0x214f, 0x214f,
+0x218a, 0x218b,
+0x2195, 0x2199,
+0x219c, 0x219f,
+0x21a1, 0x21a2,
+0x21a4, 0x21a5,
+0x21a7, 0x21ad,
+0x21af, 0x21cd,
+0x21d0, 0x21d1,
+0x21d3, 0x21d3,
+0x21d5, 0x21f3,
+0x2300, 0x2307,
+0x230c, 0x231f,
+0x2322, 0x2328,
+0x232b, 0x237b,
+0x237d, 0x239a,
+0x23b4, 0x23db,
+0x23e2, 0x23fa,
+0x2400, 0x2426,
+0x2440, 0x244a,
+0x249c, 0x24e9,
+0x2500, 0x25b6,
+0x25b8, 0x25c0,
+0x25c2, 0x25f7,
+0x2600, 0x266e,
+0x2670, 0x2767,
+0x2794, 0x27bf,
+0x2800, 0x28ff,
+0x2b00, 0x2b2f,
+0x2b45, 0x2b46,
+0x2b4d, 0x2b73,
+0x2b76, 0x2b95,
+0x2b98, 0x2bb9,
+0x2bbd, 0x2bc8,
+0x2bca, 0x2bd1,
+0x2bec, 0x2bef,
+0x2ce5, 0x2cea,
 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 */
+0x2ff0, 0x2ffb,
+0x3004, 0x3004,
+0x3012, 0x3013,
+0x3020, 0x3020,
+0x3036, 0x3037,
+0x303e, 0x303f,
+0x3190, 0x3191,
+0x3196, 0x319f,
+0x31c0, 0x31e3,
+0x3200, 0x321e,
+0x322a, 0x3247,
+0x3250, 0x3250,
+0x3260, 0x327f,
+0x328a, 0x32b0,
+0x32c0, 0x32fe,
+0x3300, 0x33ff,
+0x4dc0, 0x4dff,
+0xa490, 0xa4c6,
+0xa828, 0xa82b,
+0xa836, 0xa837,
+0xa839, 0xa839,
+0xaa77, 0xaa79,
+0xfdfd, 0xfdfd,
+0xffe4, 0xffe4,
+0xffe8, 0xffe8,
+0xffed, 0xffee,
+0xfffc, 0xfffd,
+0x10137, 0x1013f,
+0x10179, 0x10189,
+0x1018c, 0x1018c,
+0x10190, 0x1019b,
+0x101a0, 0x101a0,
+0x101d0, 0x101fc,
+0x10877, 0x10878,
+0x10ac8, 0x10ac8,
+0x1173f, 0x1173f,
+0x16b3c, 0x16b3f,
+0x16b45, 0x16b45,
+0x1bc9c, 0x1bc9c,
+0x1d000, 0x1d0f5,
+0x1d100, 0x1d126,
+0x1d129, 0x1d164,
+0x1d16a, 0x1d16c,
+0x1d183, 0x1d184,
+0x1d18c, 0x1d1a9,
+0x1d1ae, 0x1d1e8,
+0x1d200, 0x1d241,
+0x1d245, 0x1d245,
+0x1d300, 0x1d356,
+0x1d800, 0x1d9ff,
+0x1da37, 0x1da3a,
+0x1da6d, 0x1da74,
+0x1da76, 0x1da83,
+0x1da85, 0x1da86,
+0x1f000, 0x1f02b,
+0x1f030, 0x1f093,
+0x1f0a0, 0x1f0ae,
+0x1f0b1, 0x1f0bf,
+0x1f0c1, 0x1f0cf,
+0x1f0d1, 0x1f0f5,
+0x1f110, 0x1f12e,
+0x1f130, 0x1f16b,
+0x1f170, 0x1f19a,
+0x1f1e6, 0x1f202,
+0x1f210, 0x1f23a,
+0x1f240, 0x1f248,
+0x1f250, 0x1f251,
+0x1f300, 0x1f3fa,
+0x1f400, 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,
+}; /* END of CR_So */
 
 /* PROPERTY: 'Soft_Dotted': Binary Property */
 static const OnigCodePoint
@@ -20050,154 +18625,278 @@ CR_Soft_Dotted[] = { 31,
 0x1d692, 0x1d693,
 }; /* END of CR_Soft_Dotted */
 
-/* PROPERTY: 'Logical_Order_Exception': Binary Property */
+/* PROPERTY: 'Sora_Sompeng': Script */
 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 */
+CR_Sora_Sompeng[] = { 2,
+0x110d0, 0x110e8,
+0x110f0, 0x110f9,
+}; /* END of CR_Sora_Sompeng */
 
-/* PROPERTY: 'Other_ID_Start': Binary Property */
+/* PROPERTY: 'Sundanese': Script */
 static const OnigCodePoint
-CR_Other_ID_Start[] = { 3,
-0x2118, 0x2118,
-0x212e, 0x212e,
-0x309b, 0x309c,
-}; /* END of CR_Other_ID_Start */
+CR_Sundanese[] = { 2,
+0x1b80, 0x1bbf,
+0x1cc0, 0x1cc7,
+}; /* END of CR_Sundanese */
 
-/* PROPERTY: 'Other_ID_Continue': Binary Property */
+/* PROPERTY: 'Syloti_Nagri': Script */
 static const OnigCodePoint
-CR_Other_ID_Continue[] = { 4,
-0x00b7, 0x00b7,
-0x0387, 0x0387,
-0x1369, 0x1371,
-0x19da, 0x19da,
-}; /* END of CR_Other_ID_Continue */
+CR_Syloti_Nagri[] = { 1,
+0xa800, 0xa82b,
+}; /* END of CR_Syloti_Nagri */
 
-/* PROPERTY: 'STerm': Binary Property */
+/* PROPERTY: 'Syriac': Script */
 static const OnigCodePoint
-CR_STerm[] = { 64,
+CR_Syriac[] = { 3,
+0x0700, 0x070d,
+0x070f, 0x074a,
+0x074d, 0x074f,
+}; /* END of CR_Syriac */
+
+/* PROPERTY: 'Tagalog': Script */
+static const OnigCodePoint
+CR_Tagalog[] = { 2,
+0x1700, 0x170c,
+0x170e, 0x1714,
+}; /* END of CR_Tagalog */
+
+/* PROPERTY: 'Tagbanwa': Script */
+static const OnigCodePoint
+CR_Tagbanwa[] = { 3,
+0x1760, 0x176c,
+0x176e, 0x1770,
+0x1772, 0x1773,
+}; /* END of CR_Tagbanwa */
+
+/* PROPERTY: 'Tai_Le': Script */
+static const OnigCodePoint
+CR_Tai_Le[] = { 2,
+0x1950, 0x196d,
+0x1970, 0x1974,
+}; /* END of CR_Tai_Le */
+
+/* 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: 'Takri': Script */
+static const OnigCodePoint
+CR_Takri[] = { 2,
+0x11680, 0x116b7,
+0x116c0, 0x116c9,
+}; /* END of CR_Takri */
+
+/* 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: '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, 0x0702,
-0x07f9, 0x07f9,
+0x0700, 0x070a,
+0x070c, 0x070c,
+0x07f8, 0x07f9,
+0x0830, 0x083e,
+0x085e, 0x085e,
 0x0964, 0x0965,
+0x0e5a, 0x0e5b,
+0x0f08, 0x0f08,
+0x0f0d, 0x0f12,
 0x104a, 0x104b,
-0x1362, 0x1362,
-0x1367, 0x1368,
-0x166e, 0x166e,
+0x1361, 0x1368,
+0x166d, 0x166e,
+0x16eb, 0x16ed,
 0x1735, 0x1736,
-0x1803, 0x1803,
-0x1809, 0x1809,
+0x17d4, 0x17d6,
+0x17da, 0x17da,
+0x1802, 0x1805,
+0x1808, 0x1809,
 0x1944, 0x1945,
 0x1aa8, 0x1aab,
 0x1b5a, 0x1b5b,
-0x1b5e, 0x1b5f,
-0x1c3b, 0x1c3c,
+0x1b5d, 0x1b5f,
+0x1c3b, 0x1c3f,
 0x1c7e, 0x1c7f,
 0x203c, 0x203d,
 0x2047, 0x2049,
 0x2e2e, 0x2e2e,
 0x2e3c, 0x2e3c,
-0x3002, 0x3002,
-0xa4ff, 0xa4ff,
-0xa60e, 0xa60f,
-0xa6f3, 0xa6f3,
-0xa6f7, 0xa6f7,
+0x2e41, 0x2e41,
+0x3001, 0x3002,
+0xa4fe, 0xa4ff,
+0xa60d, 0xa60f,
+0xa6f3, 0xa6f7,
 0xa876, 0xa877,
 0xa8ce, 0xa8cf,
 0xa92f, 0xa92f,
-0xa9c8, 0xa9c9,
+0xa9c7, 0xa9c9,
 0xaa5d, 0xaa5f,
+0xaadf, 0xaadf,
 0xaaf0, 0xaaf1,
 0xabeb, 0xabeb,
-0xfe52, 0xfe52,
-0xfe56, 0xfe57,
+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,
-0x11047, 0x11048,
+0x10af0, 0x10af5,
+0x10b3a, 0x10b3f,
+0x10b99, 0x10b9c,
+0x11047, 0x1104d,
 0x110be, 0x110c1,
 0x11141, 0x11143,
 0x111c5, 0x111c6,
 0x111cd, 0x111cd,
 0x111de, 0x111df,
-0x11238, 0x11239,
-0x1123b, 0x1123c,
+0x11238, 0x1123c,
 0x112a9, 0x112a9,
-0x115c2, 0x115c3,
+0x115c2, 0x115c5,
 0x115c9, 0x115d7,
 0x11641, 0x11642,
 0x1173c, 0x1173e,
+0x12470, 0x12474,
 0x16a6e, 0x16a6f,
 0x16af5, 0x16af5,
-0x16b37, 0x16b38,
+0x16b37, 0x16b39,
 0x16b44, 0x16b44,
 0x1bc9f, 0x1bc9f,
-0x1da88, 0x1da88,
-}; /* END of CR_STerm */
+0x1da87, 0x1da8a,
+}; /* END of CR_Terminal_Punctuation */
 
-/* PROPERTY: 'Variation_Selector': Binary Property */
+/* PROPERTY: 'Thaana': Script */
 static const OnigCodePoint
-CR_Variation_Selector[] = { 3,
-0x180b, 0x180d,
-0xfe00, 0xfe0f,
-0xe0100, 0xe01ef,
-}; /* END of CR_Variation_Selector */
+CR_Thaana[] = { 1,
+0x0780, 0x07b1,
+}; /* END of CR_Thaana */
 
-/* PROPERTY: 'Pattern_White_Space': Binary Property */
+/* PROPERTY: 'Thai': Script */
 static const OnigCodePoint
-CR_Pattern_White_Space[] = { 5,
-0x0009, 0x000d,
-0x0020, 0x0020,
-0x0085, 0x0085,
-0x200e, 0x200f,
-0x2028, 0x2029,
-}; /* END of CR_Pattern_White_Space */
+CR_Thai[] = { 2,
+0x0e01, 0x0e3a,
+0x0e40, 0x0e5b,
+}; /* END of CR_Thai */
 
-/* PROPERTY: 'Pattern_Syntax': Binary Property */
+/* PROPERTY: 'Tibetan': Script */
 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 */
+CR_Tibetan[] = { 7,
+0x0f00, 0x0f47,
+0x0f49, 0x0f6c,
+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, 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,
+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: 'Unknown': Script */
 static const OnigCodePoint
@@ -20815,6 +19514,1307 @@ CR_Unknown[] = { 611,
 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,
+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: 'XID_Start': Derived Property */
+static const OnigCodePoint
+CR_XID_Start[] = { 562,
+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,
+0x037b, 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, 0x0e32,
+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, 0x0eb2,
+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,
+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, 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, 0xfc5d,
+0xfc64, 0xfd3d,
+0xfd50, 0xfd8f,
+0xfd92, 0xfdc7,
+0xfdf0, 0xfdf9,
+0xfe71, 0xfe71,
+0xfe73, 0xfe73,
+0xfe77, 0xfe77,
+0xfe79, 0xfe79,
+0xfe7b, 0xfe7b,
+0xfe7d, 0xfe7d,
+0xfe7f, 0xfefc,
+0xff21, 0xff3a,
+0xff41, 0xff5a,
+0xff66, 0xff9d,
+0xffa0, 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_XID_Start */
+
+/* PROPERTY: 'Yi': Script */
+static const OnigCodePoint
+CR_Yi[] = { 2,
+0xa000, 0xa48c,
+0xa490, 0xa4c6,
+}; /* END of CR_Yi */
+
+/* PROPERTY: 'Z': Major Category */
+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 */
+
+/* PROPERTY: 'Zl': General Category */
+static const OnigCodePoint
+CR_Zl[] = { 1,
+0x2028, 0x2028,
+}; /* END of CR_Zl */
+
+/* PROPERTY: 'Zp': General Category */
+static const OnigCodePoint
+CR_Zp[] = { 1,
+0x2029, 0x2029,
+}; /* END of CR_Zp */
+
+/* PROPERTY: 'Zs': General Category */
+static const OnigCodePoint
+CR_Zs[] = { 7,
+0x0020, 0x0020,
+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;
index 83aabc60be51dbb7ce01e4cea66bb6b924fd74a1..fffe2ef107ed466296080010e3ab2d640960adea 100644 (file)
@@ -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;
index 219b7eacead089c0db79becd6d68c33527b66d8e..e5e59b291484197d956bd3b499e0ce7a059fbe11 100644 (file)
@@ -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,