MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf\r
MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf\r
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf\r
- MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.inf\r
\r
MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf\r
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf\r
+++ /dev/null
-sndgk393 AT ybb DOT ne DOT jp (K.Kosako)\r
+++ /dev/null
-Oniguruma LICENSE\r
------------------\r
-\r
-/*-\r
- * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
+++ /dev/null
-/** @file\r
-\r
- Provide intrinsics within Oniguruma\r
-\r
- Copyright (c) 2015, Hewlett-Packard Development Company, L.P.<BR>\r
-\r
- This program and the accompanying materials are licensed and made available\r
- under the terms and conditions of the BSD License that accompanies this\r
- distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
- WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-**/\r
-\r
-#include <Library/BaseMemoryLib.h>\r
-\r
-//\r
-// From CryptoPkg/IntrinsicLib\r
-//\r
-\r
-/* Copies bytes between buffers */\r
-#pragma function(memcpy)\r
-void * memcpy (void *dest, const void *src, unsigned int count)\r
-{\r
- return CopyMem (dest, src, (UINTN)count);\r
-}\r
-\r
-/* Sets buffers to a specified character */\r
-#pragma function(memset)\r
-void * memset (void *dest, char ch, unsigned int count)\r
-{\r
- //\r
- // NOTE: Here we use one base implementation for memset, instead of the direct\r
- // optimized SetMem() wrapper. Because the IntrinsicLib has to be built\r
- // without whole program optimization option, and there will be some\r
- // potential register usage errors when calling other optimized codes.\r
- //\r
-\r
- //\r
- // Declare the local variables that actually move the data elements as\r
- // volatile to prevent the optimizer from replacing this function with\r
- // the intrinsic memset()\r
- //\r
- volatile UINT8 *Pointer;\r
-\r
- Pointer = (UINT8 *)dest;\r
- while (count-- != 0) {\r
- *(Pointer++) = ch;\r
- }\r
-\r
- return dest;\r
-}\r
+++ /dev/null
-/** @file\r
- \r
- Module to rewrite stdlib references within Oniguruma\r
-\r
- Copyright (c) 2014-2015, Hewlett-Packard Development Company, L.P.<BR>\r
-\r
- This program and the accompanying materials are licensed and made available\r
- under the terms and conditions of the BSD License that accompanies this\r
- distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
- WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-**/\r
-#include "OnigurumaUefiPort.h"\r
-\r
-int sprintf(char *str, char const *fmt, ...)\r
-{\r
- VA_LIST Marker;\r
- int NumberOfPrinted;\r
-\r
- VA_START (Marker, fmt);\r
- NumberOfPrinted = (int)AsciiVSPrint (str, 1000000, fmt, Marker);\r
- VA_END (Marker);\r
-\r
- return NumberOfPrinted;\r
-}\r
-\r
-int OnigStrCmp (char* Str1, char* Str2)\r
-{\r
- return (int)AsciiStrCmp (Str1, Str2);\r
-}\r
+++ /dev/null
-/** @file\r
- \r
- Module to rewrite stdlib references within Oniguruma\r
-\r
- Copyright (c) 2014-2015, Hewlett-Packard Development Company, L.P.<BR>\r
-\r
- This program and the accompanying materials are licensed and made available\r
- under the terms and conditions of the BSD License that accompanies this\r
- distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
- WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-**/\r
-#ifndef ONIGURUMA_UEFI_PORT_H\r
-#define ONIGURUMA_UEFI_PORT_H\r
-\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PrintLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/DebugLib.h>\r
-\r
-#undef _WIN32\r
-#define P_(args) args\r
-\r
-#define SIZEOF_LONG sizeof(long)\r
-#define SIZEOF_INT sizeof(int)\r
-typedef UINTN size_t;\r
-\r
-#define malloc(n) AllocatePool(n)\r
-#define calloc(n,s) AllocateZeroPool((n)*(s))\r
-#define free(p) FreePool(p)\r
-#define realloc(OldPtr,NewSize,OldSize) ReallocatePool(OldSize,NewSize,OldPtr)\r
-#define xmemmove(Dest,Src,Length) CopyMem(Dest,Src,Length)\r
-#define xmemcpy(Dest,Src,Length) CopyMem(Dest,Src,Length)\r
-#define xmemset(Buffer,Value,Length) SetMem(Buffer,Length,Value)\r
-\r
-#define va_init_list(a,b) VA_START(a,b)\r
-#define va_list VA_LIST\r
-#define va_arg(a,b) VA_ARG(a,b)\r
-#define va_end(a) VA_END(a)\r
-\r
-#define FILE VOID\r
-#define stdout NULL\r
-#define fprintf(...)\r
-#define fputs(a,b)\r
-#define vsnprintf (int)AsciiVSPrint\r
-#define _vsnprintf vsnprintf\r
-\r
-#define setlocale(a,b)\r
-#define LC_ALL 0\r
-\r
-//#define MAX_STRING_SIZE 0x1000\r
-#define strlen_s(String,MaxSize) AsciiStrnLenS (String, MaxSize)\r
-#define strcat_s(Dest,MaxSize,Src) AsciiStrCatS (Dest, MaxSize, Src)\r
-#define strncpy_s(Dest,MaxSize,Src,Length) AsciiStrnCpyS (Dest, MaxSize, Src, Length)\r
-#define strcmp OnigStrCmp\r
-\r
-int OnigStrCmp (char* Str1, char* Str2);\r
-\r
-int sprintf (char *str, char const *fmt, ...);\r
-\r
-#define exit(n) ASSERT(FALSE);\r
-\r
-#endif // !ONIGURUMA_UEFI_PORT_H\r
+++ /dev/null
-README 2007/05/31\r
-\r
-Oniguruma ---- (C) K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
-\r
-http://www.geocities.jp/kosako3/oniguruma/\r
-\r
-Oniguruma is a regular expressions library.\r
-The characteristics of this library is that different character encoding\r
-for every regular expression object can be specified.\r
-\r
-Supported character encodings:\r
-\r
- ASCII, UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE,\r
- EUC-JP, EUC-TW, EUC-KR, EUC-CN,\r
- Shift_JIS, Big5, GB18030, KOI8-R, CP1251,\r
- ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5,\r
- ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10,\r
- ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16\r
-\r
-* GB18030: contributed by KUBO Takehiro\r
-* CP1251: contributed by Byte\r
-------------------------------------------------------------\r
-\r
-License\r
-\r
- BSD license.\r
-\r
-\r
-Install\r
-\r
- Case 1: Unix and Cygwin platform\r
-\r
- 1. ./configure\r
- 2. make\r
- 3. make install\r
-\r
- * uninstall\r
-\r
- make uninstall\r
-\r
- * test (ASCII/EUC-JP)\r
-\r
- make atest\r
-\r
- * configuration check\r
-\r
- onig-config --cflags\r
- onig-config --libs\r
- onig-config --prefix\r
- onig-config --exec-prefix\r
-\r
-\r
-\r
- Case 2: Win32 platform (VC++)\r
-\r
- 1. copy win32\Makefile Makefile\r
- 2. copy win32\config.h config.h\r
- 3. nmake\r
-\r
- onig_s.lib: static link library\r
- onig.dll: dynamic link library\r
-\r
- * test (ASCII/Shift_JIS)\r
- 4. copy win32\testc.c testc.c\r
- 5. nmake ctest\r
-\r
-\r
-\r
-Regular Expressions\r
-\r
- See doc/RE (or doc/RE.ja for Japanese).\r
-\r
-\r
-Usage\r
-\r
- Include oniguruma.h in your program. (Oniguruma API)\r
- See doc/API for Oniguruma API.\r
-\r
- If you want to disable UChar type (== unsigned char) definition\r
- in oniguruma.h, define ONIG_ESCAPE_UCHAR_COLLISION and then \r
- include oniguruma.h.\r
-\r
- If you want to disable regex_t type definition in oniguruma.h,\r
- define ONIG_ESCAPE_REGEX_T_COLLISION and then include oniguruma.h.\r
-\r
- Example of the compiling/linking command line in Unix or Cygwin,\r
- (prefix == /usr/local case)\r
-\r
- cc sample.c -L/usr/local/lib -lonig\r
-\r
-\r
- If you want to use static link library(onig_s.lib) in Win32,\r
- add option -DONIG_EXTERN=extern to C compiler.\r
-\r
-\r
-\r
-Sample Programs\r
-\r
- sample/simple.c example of the minimum (Oniguruma API)\r
- sample/names.c example of the named group callback.\r
- sample/encode.c example of some encodings.\r
- sample/listcap.c example of the capture history.\r
- sample/posix.c POSIX API sample.\r
- sample/sql.c example of the variable meta characters.\r
- (SQL-like pattern matching)\r
-\r
-Test Programs\r
- sample/syntax.c Perl, Java and ASIS syntax test.\r
- sample/crnl.c --enable-crnl-as-line-terminator test\r
-\r
-\r
-Source Files\r
-\r
- oniguruma.h Oniguruma API header file. (public)\r
- onig-config.in configuration check program template.\r
-\r
- regenc.h character encodings framework header file.\r
- regint.h internal definitions\r
- regparse.h internal definitions for regparse.c and regcomp.c\r
- regcomp.c compiling and optimization functions\r
- regenc.c character encodings framework.\r
- regerror.c error message function\r
- regext.c extended API functions. (deluxe version API)\r
- regexec.c search and match functions\r
- regparse.c parsing functions.\r
- regsyntax.c pattern syntax functions and built-in syntax definitions.\r
- regtrav.c capture history tree data traverse functions.\r
- regversion.c version info function.\r
- st.h hash table functions header file\r
- st.c hash table functions\r
-\r
- oniggnu.h GNU regex API header file. (public)\r
- reggnu.c GNU regex API functions\r
-\r
- onigposix.h POSIX API header file. (public)\r
- regposerr.c POSIX error message function.\r
- regposix.c POSIX API functions.\r
-\r
- enc/mktable.c character type table generator.\r
- enc/ascii.c ASCII encoding.\r
- enc/euc_jp.c EUC-JP encoding.\r
- enc/euc_tw.c EUC-TW encoding.\r
- enc/euc_kr.c EUC-KR, EUC-CN encoding.\r
- enc/sjis.c Shift_JIS encoding.\r
- enc/big5.c Big5 encoding.\r
- enc/gb18030.c GB18030 encoding.\r
- enc/koi8.c KOI8 encoding.\r
- enc/koi8_r.c KOI8-R encoding.\r
- enc/cp1251.c CP1251 encoding.\r
- enc/iso8859_1.c ISO-8859-1 encoding. (Latin-1)\r
- enc/iso8859_2.c ISO-8859-2 encoding. (Latin-2)\r
- enc/iso8859_3.c ISO-8859-3 encoding. (Latin-3)\r
- enc/iso8859_4.c ISO-8859-4 encoding. (Latin-4)\r
- enc/iso8859_5.c ISO-8859-5 encoding. (Cyrillic)\r
- enc/iso8859_6.c ISO-8859-6 encoding. (Arabic)\r
- enc/iso8859_7.c ISO-8859-7 encoding. (Greek)\r
- enc/iso8859_8.c ISO-8859-8 encoding. (Hebrew)\r
- enc/iso8859_9.c ISO-8859-9 encoding. (Latin-5 or Turkish)\r
- enc/iso8859_10.c ISO-8859-10 encoding. (Latin-6 or Nordic)\r
- enc/iso8859_11.c ISO-8859-11 encoding. (Thai)\r
- enc/iso8859_13.c ISO-8859-13 encoding. (Latin-7 or Baltic Rim)\r
- enc/iso8859_14.c ISO-8859-14 encoding. (Latin-8 or Celtic)\r
- enc/iso8859_15.c ISO-8859-15 encoding. (Latin-9 or West European with Euro)\r
- enc/iso8859_16.c ISO-8859-16 encoding.\r
- (Latin-10 or South-Eastern European with Euro)\r
- enc/utf8.c UTF-8 encoding.\r
- enc/utf16_be.c UTF-16BE encoding.\r
- enc/utf16_le.c UTF-16LE encoding.\r
- enc/utf32_be.c UTF-32BE encoding.\r
- enc/utf32_le.c UTF-32LE encoding.\r
- enc/unicode.c Unicode information data.\r
-\r
- win32/Makefile Makefile for Win32 (VC++)\r
- win32/config.h config.h for Win32\r
-\r
-\r
-\r
-ToDo\r
-\r
- ? case fold flag: Katakana <-> Hiragana.\r
- ? add ONIG_OPTION_NOTBOS/NOTEOS. (\A, \z, \Z)\r
- ?? \X (== \PM\pM*)\r
- ?? implement syntax behavior ONIG_SYN_CONTEXT_INDEP_ANCHORS.\r
- ?? transmission stopper. (return ONIG_STOP from match_at())\r
-\r
-and I'm thankful to Akinori MUSHA.\r
-\r
-\r
-Mail Address: K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
+++ /dev/null
-/**********************************************************************\r
- ascii.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regenc.h"\r
-\r
-static int\r
-ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype)\r
-{\r
- if (code < 128)\r
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);\r
- else\r
- return FALSE;\r
-}\r
-\r
-OnigEncodingType OnigEncodingASCII = {\r
- onigenc_single_byte_mbc_enc_len,\r
- "US-ASCII", /* name */\r
- 1, /* max byte length */\r
- 1, /* min byte length */\r
- onigenc_is_mbc_newline_0x0a,\r
- onigenc_single_byte_mbc_to_code,\r
- onigenc_single_byte_code_to_mbclen,\r
- onigenc_single_byte_code_to_mbc,\r
- onigenc_ascii_mbc_case_fold,\r
- onigenc_ascii_apply_all_case_fold,\r
- onigenc_ascii_get_case_fold_codes_by_str,\r
- onigenc_minimum_property_name_to_ctype,\r
- ascii_is_code_ctype,\r
- onigenc_not_support_get_ctype_code_range,\r
- onigenc_single_byte_left_adjust_char_head,\r
- onigenc_always_true_is_allowed_reverse_match\r
-};\r
+++ /dev/null
-/**********************************************************************\r
- unicode.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2013 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-#define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code,ctype) \\r
- ((EncUNICODE_ISO_8859_1_CtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)\r
-#if 0\r
-#define ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(code,cbit) \\r
- ((EncUNICODE_ISO_8859_1_CtypeTable[code] & (cbit)) != 0)\r
-#endif\r
-\r
-static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256] = {\r
- 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
- 0x4008, 0x428c, 0x4289, 0x4288, 0x4288, 0x4288, 0x4008, 0x4008,\r
- 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
- 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
- 0x4284, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
- 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
- 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0,\r
- 0x78b0, 0x78b0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
- 0x41a0, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x74a2,\r
- 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
- 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
- 0x74a2, 0x74a2, 0x74a2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x51a0,\r
- 0x41a0, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x70e2,\r
- 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
- 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
- 0x70e2, 0x70e2, 0x70e2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x4008,\r
- 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008,\r
- 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
- 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
- 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\r
- 0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0,\r
- 0x00a0, 0x00a0, 0x30e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0,\r
- 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x30e2, 0x00a0, 0x01a0,\r
- 0x00a0, 0x10a0, 0x30e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0,\r
- 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,\r
- 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,\r
- 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x00a0,\r
- 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x30e2,\r
- 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,\r
- 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,\r
- 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x00a0,\r
- 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2\r
-};\r
-\r
-/* 'NEWLINE' */\r
-static const OnigCodePoint CR_NEWLINE[] = {\r
- 1,\r
- 0x000a, 0x000a\r
-}; /* CR_NEWLINE */\r
-\r
-/* 'Alpha': [[:Alpha:]] */\r
-static const OnigCodePoint CR_Alpha[] = {\r
- 418,\r
- 0x0041, 0x005a,\r
- 0x0061, 0x007a,\r
- 0x00aa, 0x00aa,\r
- 0x00b5, 0x00b5,\r
- 0x00ba, 0x00ba,\r
- 0x00c0, 0x00d6,\r
- 0x00d8, 0x00f6,\r
- 0x00f8, 0x0241,\r
- 0x0250, 0x02c1,\r
- 0x02c6, 0x02d1,\r
- 0x02e0, 0x02e4,\r
- 0x02ee, 0x02ee,\r
- 0x0300, 0x036f,\r
- 0x037a, 0x037a,\r
- 0x0386, 0x0386,\r
- 0x0388, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x03f5,\r
- 0x03f7, 0x0481,\r
- 0x0483, 0x0486,\r
- 0x0488, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x0559,\r
- 0x0561, 0x0587,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05bd,\r
- 0x05bf, 0x05bf,\r
- 0x05c1, 0x05c2,\r
- 0x05c4, 0x05c5,\r
- 0x05c7, 0x05c7,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f2,\r
- 0x0610, 0x0615,\r
- 0x0621, 0x063a,\r
- 0x0640, 0x065e,\r
- 0x066e, 0x06d3,\r
- 0x06d5, 0x06dc,\r
- 0x06de, 0x06e8,\r
- 0x06ea, 0x06ef,\r
- 0x06fa, 0x06fc,\r
- 0x06ff, 0x06ff,\r
- 0x0710, 0x074a,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07b1,\r
- 0x0901, 0x0939,\r
- 0x093c, 0x094d,\r
- 0x0950, 0x0954,\r
- 0x0958, 0x0963,\r
- 0x097d, 0x097d,\r
- 0x0981, 0x0983,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bc, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09ce,\r
- 0x09d7, 0x09d7,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e3,\r
- 0x09f0, 0x09f1,\r
- 0x0a01, 0x0a03,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a70, 0x0a74,\r
- 0x0a81, 0x0a83,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abc, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae3,\r
- 0x0b01, 0x0b03,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3c, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b71, 0x0b71,\r
- 0x0b82, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0c01, 0x0c03,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c60, 0x0c61,\r
- 0x0c82, 0x0c83,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbc, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0d02, 0x0d03,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d60, 0x0d61,\r
- 0x0d82, 0x0d83,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df3,\r
- 0x0e01, 0x0e3a,\r
- 0x0e40, 0x0e4e,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb9,\r
- 0x0ebb, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0ec8, 0x0ecd,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f00,\r
- 0x0f18, 0x0f19,\r
- 0x0f35, 0x0f35,\r
- 0x0f37, 0x0f37,\r
- 0x0f39, 0x0f39,\r
- 0x0f3e, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f71, 0x0f84,\r
- 0x0f86, 0x0f8b,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fc6, 0x0fc6,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1050, 0x1059,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fa,\r
- 0x10fc, 0x10fc,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x135f, 0x135f,\r
- 0x1380, 0x138f,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x166c,\r
- 0x166f, 0x1676,\r
- 0x1681, 0x169a,\r
- 0x16a0, 0x16ea,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1714,\r
- 0x1720, 0x1734,\r
- 0x1740, 0x1753,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1772, 0x1773,\r
- 0x1780, 0x17b3,\r
- 0x17b6, 0x17d3,\r
- 0x17d7, 0x17d7,\r
- 0x17dc, 0x17dd,\r
- 0x180b, 0x180d,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a9,\r
- 0x1900, 0x191c,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x1950, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19b0, 0x19c9,\r
- 0x1a00, 0x1a1b,\r
- 0x1d00, 0x1dc3,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fbc,\r
- 0x1fbe, 0x1fbe,\r
- 0x1fc2, 0x1fc4,\r
- 0x1fc6, 0x1fcc,\r
- 0x1fd0, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fe0, 0x1fec,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffc,\r
- 0x2071, 0x2071,\r
- 0x207f, 0x207f,\r
- 0x2090, 0x2094,\r
- 0x20d0, 0x20eb,\r
- 0x2102, 0x2102,\r
- 0x2107, 0x2107,\r
- 0x210a, 0x2113,\r
- 0x2115, 0x2115,\r
- 0x2119, 0x211d,\r
- 0x2124, 0x2124,\r
- 0x2126, 0x2126,\r
- 0x2128, 0x2128,\r
- 0x212a, 0x212d,\r
- 0x212f, 0x2131,\r
- 0x2133, 0x2139,\r
- 0x213c, 0x213f,\r
- 0x2145, 0x2149,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e,\r
- 0x2c80, 0x2ce4,\r
- 0x2d00, 0x2d25,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x3005, 0x3006,\r
- 0x302a, 0x302f,\r
- 0x3031, 0x3035,\r
- 0x303b, 0x303c,\r
- 0x3041, 0x3096,\r
- 0x3099, 0x309a,\r
- 0x309d, 0x309f,\r
- 0x30a1, 0x30fa,\r
- 0x30fc, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x31a0, 0x31b7,\r
- 0x31f0, 0x31ff,\r
- 0x3400, 0x4db5,\r
- 0x4e00, 0x9fbb,\r
- 0xa000, 0xa48c,\r
- 0xa800, 0xa827,\r
- 0xac00, 0xd7a3,\r
- 0xf900, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xfb1d, 0xfb28,\r
- 0xfb2a, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3d,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfb,\r
- 0xfe00, 0xfe0f,\r
- 0xfe20, 0xfe23,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xff21, 0xff3a,\r
- 0xff41, 0xff5a,\r
- 0xff66, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10300, 0x1031e,\r
- 0x10330, 0x10349,\r
- 0x10380, 0x1039d,\r
- 0x103a0, 0x103c3,\r
- 0x103c8, 0x103cf,\r
- 0x10400, 0x1049d,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a3f,\r
- 0x1d165, 0x1d169,\r
- 0x1d16d, 0x1d172,\r
- 0x1d17b, 0x1d182,\r
- 0x1d185, 0x1d18b,\r
- 0x1d1aa, 0x1d1ad,\r
- 0x1d242, 0x1d244,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d6c0,\r
- 0x1d6c2, 0x1d6da,\r
- 0x1d6dc, 0x1d6fa,\r
- 0x1d6fc, 0x1d714,\r
- 0x1d716, 0x1d734,\r
- 0x1d736, 0x1d74e,\r
- 0x1d750, 0x1d76e,\r
- 0x1d770, 0x1d788,\r
- 0x1d78a, 0x1d7a8,\r
- 0x1d7aa, 0x1d7c2,\r
- 0x1d7c4, 0x1d7c9,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d,\r
- 0xe0100, 0xe01ef\r
-}; /* CR_Alpha */\r
-\r
-/* 'Blank': [[:Blank:]] */\r
-static const OnigCodePoint CR_Blank[] = {\r
- 9,\r
- 0x0009, 0x0009,\r
- 0x0020, 0x0020,\r
- 0x00a0, 0x00a0,\r
- 0x1680, 0x1680,\r
- 0x180e, 0x180e,\r
- 0x2000, 0x200a,\r
- 0x202f, 0x202f,\r
- 0x205f, 0x205f,\r
- 0x3000, 0x3000\r
-}; /* CR_Blank */\r
-\r
-/* 'Cntrl': [[:Cntrl:]] */\r
-static const OnigCodePoint CR_Cntrl[] = {\r
- 19,\r
- 0x0000, 0x001f,\r
- 0x007f, 0x009f,\r
- 0x00ad, 0x00ad,\r
- 0x0600, 0x0603,\r
- 0x06dd, 0x06dd,\r
- 0x070f, 0x070f,\r
- 0x17b4, 0x17b5,\r
- 0x200b, 0x200f,\r
- 0x202a, 0x202e,\r
- 0x2060, 0x2063,\r
- 0x206a, 0x206f,\r
- 0xd800, 0xf8ff,\r
- 0xfeff, 0xfeff,\r
- 0xfff9, 0xfffb,\r
- 0x1d173, 0x1d17a,\r
- 0xe0001, 0xe0001,\r
- 0xe0020, 0xe007f,\r
- 0xf0000, 0xffffd,\r
- 0x100000, 0x10fffd\r
-}; /* CR_Cntrl */\r
-\r
-/* 'Digit': [[:Digit:]] */\r
-static const OnigCodePoint CR_Digit[] = {\r
- 23,\r
- 0x0030, 0x0039,\r
- 0x0660, 0x0669,\r
- 0x06f0, 0x06f9,\r
- 0x0966, 0x096f,\r
- 0x09e6, 0x09ef,\r
- 0x0a66, 0x0a6f,\r
- 0x0ae6, 0x0aef,\r
- 0x0b66, 0x0b6f,\r
- 0x0be6, 0x0bef,\r
- 0x0c66, 0x0c6f,\r
- 0x0ce6, 0x0cef,\r
- 0x0d66, 0x0d6f,\r
- 0x0e50, 0x0e59,\r
- 0x0ed0, 0x0ed9,\r
- 0x0f20, 0x0f29,\r
- 0x1040, 0x1049,\r
- 0x17e0, 0x17e9,\r
- 0x1810, 0x1819,\r
- 0x1946, 0x194f,\r
- 0x19d0, 0x19d9,\r
- 0xff10, 0xff19,\r
- 0x104a0, 0x104a9,\r
- 0x1d7ce, 0x1d7ff\r
-}; /* CR_Digit */\r
-\r
-/* 'Graph': [[:Graph:]] */\r
-static const OnigCodePoint CR_Graph[] = {\r
- 424,\r
- 0x0021, 0x007e,\r
- 0x00a1, 0x0241,\r
- 0x0250, 0x036f,\r
- 0x0374, 0x0375,\r
- 0x037a, 0x037a,\r
- 0x037e, 0x037e,\r
- 0x0384, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x0486,\r
- 0x0488, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x055f,\r
- 0x0561, 0x0587,\r
- 0x0589, 0x058a,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05c7,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f4,\r
- 0x0600, 0x0603,\r
- 0x060b, 0x0615,\r
- 0x061b, 0x061b,\r
- 0x061e, 0x061f,\r
- 0x0621, 0x063a,\r
- 0x0640, 0x065e,\r
- 0x0660, 0x070d,\r
- 0x070f, 0x074a,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07b1,\r
- 0x0901, 0x0939,\r
- 0x093c, 0x094d,\r
- 0x0950, 0x0954,\r
- 0x0958, 0x0970,\r
- 0x097d, 0x097d,\r
- 0x0981, 0x0983,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bc, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09ce,\r
- 0x09d7, 0x09d7,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e3,\r
- 0x09e6, 0x09fa,\r
- 0x0a01, 0x0a03,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a66, 0x0a74,\r
- 0x0a81, 0x0a83,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abc, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae3,\r
- 0x0ae6, 0x0aef,\r
- 0x0af1, 0x0af1,\r
- 0x0b01, 0x0b03,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3c, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b66, 0x0b71,\r
- 0x0b82, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0be6, 0x0bfa,\r
- 0x0c01, 0x0c03,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c60, 0x0c61,\r
- 0x0c66, 0x0c6f,\r
- 0x0c82, 0x0c83,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbc, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0ce6, 0x0cef,\r
- 0x0d02, 0x0d03,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d60, 0x0d61,\r
- 0x0d66, 0x0d6f,\r
- 0x0d82, 0x0d83,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df4,\r
- 0x0e01, 0x0e3a,\r
- 0x0e3f, 0x0e5b,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb9,\r
- 0x0ebb, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0ec8, 0x0ecd,\r
- 0x0ed0, 0x0ed9,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f71, 0x0f8b,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fbe, 0x0fcc,\r
- 0x0fcf, 0x0fd1,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1040, 0x1059,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fc,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x135f, 0x137c,\r
- 0x1380, 0x1399,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x1676,\r
- 0x1681, 0x169c,\r
- 0x16a0, 0x16f0,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1714,\r
- 0x1720, 0x1736,\r
- 0x1740, 0x1753,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1772, 0x1773,\r
- 0x1780, 0x17dd,\r
- 0x17e0, 0x17e9,\r
- 0x17f0, 0x17f9,\r
- 0x1800, 0x180d,\r
- 0x1810, 0x1819,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a9,\r
- 0x1900, 0x191c,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x1940, 0x1940,\r
- 0x1944, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19b0, 0x19c9,\r
- 0x19d0, 0x19d9,\r
- 0x19de, 0x1a1b,\r
- 0x1a1e, 0x1a1f,\r
- 0x1d00, 0x1dc3,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fc4,\r
- 0x1fc6, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fdd, 0x1fef,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffe,\r
- 0x200b, 0x2027,\r
- 0x202a, 0x202e,\r
- 0x2030, 0x205e,\r
- 0x2060, 0x2063,\r
- 0x206a, 0x2071,\r
- 0x2074, 0x208e,\r
- 0x2090, 0x2094,\r
- 0x20a0, 0x20b5,\r
- 0x20d0, 0x20eb,\r
- 0x2100, 0x214c,\r
- 0x2153, 0x2183,\r
- 0x2190, 0x23db,\r
- 0x2400, 0x2426,\r
- 0x2440, 0x244a,\r
- 0x2460, 0x269c,\r
- 0x26a0, 0x26b1,\r
- 0x2701, 0x2704,\r
- 0x2706, 0x2709,\r
- 0x270c, 0x2727,\r
- 0x2729, 0x274b,\r
- 0x274d, 0x274d,\r
- 0x274f, 0x2752,\r
- 0x2756, 0x2756,\r
- 0x2758, 0x275e,\r
- 0x2761, 0x2794,\r
- 0x2798, 0x27af,\r
- 0x27b1, 0x27be,\r
- 0x27c0, 0x27c6,\r
- 0x27d0, 0x27eb,\r
- 0x27f0, 0x2b13,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e,\r
- 0x2c80, 0x2cea,\r
- 0x2cf9, 0x2d25,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x2e00, 0x2e17,\r
- 0x2e1c, 0x2e1d,\r
- 0x2e80, 0x2e99,\r
- 0x2e9b, 0x2ef3,\r
- 0x2f00, 0x2fd5,\r
- 0x2ff0, 0x2ffb,\r
- 0x3001, 0x303f,\r
- 0x3041, 0x3096,\r
- 0x3099, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x3190, 0x31b7,\r
- 0x31c0, 0x31cf,\r
- 0x31f0, 0x321e,\r
- 0x3220, 0x3243,\r
- 0x3250, 0x32fe,\r
- 0x3300, 0x4db5,\r
- 0x4dc0, 0x9fbb,\r
- 0xa000, 0xa48c,\r
- 0xa490, 0xa4c6,\r
- 0xa700, 0xa716,\r
- 0xa800, 0xa82b,\r
- 0xac00, 0xd7a3,\r
- 0xe000, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xfb1d, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3f,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfd,\r
- 0xfe00, 0xfe19,\r
- 0xfe20, 0xfe23,\r
- 0xfe30, 0xfe52,\r
- 0xfe54, 0xfe66,\r
- 0xfe68, 0xfe6b,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xfeff, 0xfeff,\r
- 0xff01, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0xffe0, 0xffe6,\r
- 0xffe8, 0xffee,\r
- 0xfff9, 0xfffd,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10100, 0x10102,\r
- 0x10107, 0x10133,\r
- 0x10137, 0x1018a,\r
- 0x10300, 0x1031e,\r
- 0x10320, 0x10323,\r
- 0x10330, 0x1034a,\r
- 0x10380, 0x1039d,\r
- 0x1039f, 0x103c3,\r
- 0x103c8, 0x103d5,\r
- 0x10400, 0x1049d,\r
- 0x104a0, 0x104a9,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a47,\r
- 0x10a50, 0x10a58,\r
- 0x1d000, 0x1d0f5,\r
- 0x1d100, 0x1d126,\r
- 0x1d12a, 0x1d1dd,\r
- 0x1d200, 0x1d245,\r
- 0x1d300, 0x1d356,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d7c9,\r
- 0x1d7ce, 0x1d7ff,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d,\r
- 0xe0001, 0xe0001,\r
- 0xe0020, 0xe007f,\r
- 0xe0100, 0xe01ef,\r
- 0xf0000, 0xffffd,\r
- 0x100000, 0x10fffd\r
-}; /* CR_Graph */\r
-\r
-/* 'Lower': [[:Lower:]] */\r
-static const OnigCodePoint CR_Lower[] = {\r
- 480,\r
- 0x0061, 0x007a,\r
- 0x00aa, 0x00aa,\r
- 0x00b5, 0x00b5,\r
- 0x00ba, 0x00ba,\r
- 0x00df, 0x00f6,\r
- 0x00f8, 0x00ff,\r
- 0x0101, 0x0101,\r
- 0x0103, 0x0103,\r
- 0x0105, 0x0105,\r
- 0x0107, 0x0107,\r
- 0x0109, 0x0109,\r
- 0x010b, 0x010b,\r
- 0x010d, 0x010d,\r
- 0x010f, 0x010f,\r
- 0x0111, 0x0111,\r
- 0x0113, 0x0113,\r
- 0x0115, 0x0115,\r
- 0x0117, 0x0117,\r
- 0x0119, 0x0119,\r
- 0x011b, 0x011b,\r
- 0x011d, 0x011d,\r
- 0x011f, 0x011f,\r
- 0x0121, 0x0121,\r
- 0x0123, 0x0123,\r
- 0x0125, 0x0125,\r
- 0x0127, 0x0127,\r
- 0x0129, 0x0129,\r
- 0x012b, 0x012b,\r
- 0x012d, 0x012d,\r
- 0x012f, 0x012f,\r
- 0x0131, 0x0131,\r
- 0x0133, 0x0133,\r
- 0x0135, 0x0135,\r
- 0x0137, 0x0138,\r
- 0x013a, 0x013a,\r
- 0x013c, 0x013c,\r
- 0x013e, 0x013e,\r
- 0x0140, 0x0140,\r
- 0x0142, 0x0142,\r
- 0x0144, 0x0144,\r
- 0x0146, 0x0146,\r
- 0x0148, 0x0149,\r
- 0x014b, 0x014b,\r
- 0x014d, 0x014d,\r
- 0x014f, 0x014f,\r
- 0x0151, 0x0151,\r
- 0x0153, 0x0153,\r
- 0x0155, 0x0155,\r
- 0x0157, 0x0157,\r
- 0x0159, 0x0159,\r
- 0x015b, 0x015b,\r
- 0x015d, 0x015d,\r
- 0x015f, 0x015f,\r
- 0x0161, 0x0161,\r
- 0x0163, 0x0163,\r
- 0x0165, 0x0165,\r
- 0x0167, 0x0167,\r
- 0x0169, 0x0169,\r
- 0x016b, 0x016b,\r
- 0x016d, 0x016d,\r
- 0x016f, 0x016f,\r
- 0x0171, 0x0171,\r
- 0x0173, 0x0173,\r
- 0x0175, 0x0175,\r
- 0x0177, 0x0177,\r
- 0x017a, 0x017a,\r
- 0x017c, 0x017c,\r
- 0x017e, 0x0180,\r
- 0x0183, 0x0183,\r
- 0x0185, 0x0185,\r
- 0x0188, 0x0188,\r
- 0x018c, 0x018d,\r
- 0x0192, 0x0192,\r
- 0x0195, 0x0195,\r
- 0x0199, 0x019b,\r
- 0x019e, 0x019e,\r
- 0x01a1, 0x01a1,\r
- 0x01a3, 0x01a3,\r
- 0x01a5, 0x01a5,\r
- 0x01a8, 0x01a8,\r
- 0x01aa, 0x01ab,\r
- 0x01ad, 0x01ad,\r
- 0x01b0, 0x01b0,\r
- 0x01b4, 0x01b4,\r
- 0x01b6, 0x01b6,\r
- 0x01b9, 0x01ba,\r
- 0x01bd, 0x01bf,\r
- 0x01c6, 0x01c6,\r
- 0x01c9, 0x01c9,\r
- 0x01cc, 0x01cc,\r
- 0x01ce, 0x01ce,\r
- 0x01d0, 0x01d0,\r
- 0x01d2, 0x01d2,\r
- 0x01d4, 0x01d4,\r
- 0x01d6, 0x01d6,\r
- 0x01d8, 0x01d8,\r
- 0x01da, 0x01da,\r
- 0x01dc, 0x01dd,\r
- 0x01df, 0x01df,\r
- 0x01e1, 0x01e1,\r
- 0x01e3, 0x01e3,\r
- 0x01e5, 0x01e5,\r
- 0x01e7, 0x01e7,\r
- 0x01e9, 0x01e9,\r
- 0x01eb, 0x01eb,\r
- 0x01ed, 0x01ed,\r
- 0x01ef, 0x01f0,\r
- 0x01f3, 0x01f3,\r
- 0x01f5, 0x01f5,\r
- 0x01f9, 0x01f9,\r
- 0x01fb, 0x01fb,\r
- 0x01fd, 0x01fd,\r
- 0x01ff, 0x01ff,\r
- 0x0201, 0x0201,\r
- 0x0203, 0x0203,\r
- 0x0205, 0x0205,\r
- 0x0207, 0x0207,\r
- 0x0209, 0x0209,\r
- 0x020b, 0x020b,\r
- 0x020d, 0x020d,\r
- 0x020f, 0x020f,\r
- 0x0211, 0x0211,\r
- 0x0213, 0x0213,\r
- 0x0215, 0x0215,\r
- 0x0217, 0x0217,\r
- 0x0219, 0x0219,\r
- 0x021b, 0x021b,\r
- 0x021d, 0x021d,\r
- 0x021f, 0x021f,\r
- 0x0221, 0x0221,\r
- 0x0223, 0x0223,\r
- 0x0225, 0x0225,\r
- 0x0227, 0x0227,\r
- 0x0229, 0x0229,\r
- 0x022b, 0x022b,\r
- 0x022d, 0x022d,\r
- 0x022f, 0x022f,\r
- 0x0231, 0x0231,\r
- 0x0233, 0x0239,\r
- 0x023c, 0x023c,\r
- 0x023f, 0x0240,\r
- 0x0250, 0x02af,\r
- 0x0390, 0x0390,\r
- 0x03ac, 0x03ce,\r
- 0x03d0, 0x03d1,\r
- 0x03d5, 0x03d7,\r
- 0x03d9, 0x03d9,\r
- 0x03db, 0x03db,\r
- 0x03dd, 0x03dd,\r
- 0x03df, 0x03df,\r
- 0x03e1, 0x03e1,\r
- 0x03e3, 0x03e3,\r
- 0x03e5, 0x03e5,\r
- 0x03e7, 0x03e7,\r
- 0x03e9, 0x03e9,\r
- 0x03eb, 0x03eb,\r
- 0x03ed, 0x03ed,\r
- 0x03ef, 0x03f3,\r
- 0x03f5, 0x03f5,\r
- 0x03f8, 0x03f8,\r
- 0x03fb, 0x03fc,\r
- 0x0430, 0x045f,\r
- 0x0461, 0x0461,\r
- 0x0463, 0x0463,\r
- 0x0465, 0x0465,\r
- 0x0467, 0x0467,\r
- 0x0469, 0x0469,\r
- 0x046b, 0x046b,\r
- 0x046d, 0x046d,\r
- 0x046f, 0x046f,\r
- 0x0471, 0x0471,\r
- 0x0473, 0x0473,\r
- 0x0475, 0x0475,\r
- 0x0477, 0x0477,\r
- 0x0479, 0x0479,\r
- 0x047b, 0x047b,\r
- 0x047d, 0x047d,\r
- 0x047f, 0x047f,\r
- 0x0481, 0x0481,\r
- 0x048b, 0x048b,\r
- 0x048d, 0x048d,\r
- 0x048f, 0x048f,\r
- 0x0491, 0x0491,\r
- 0x0493, 0x0493,\r
- 0x0495, 0x0495,\r
- 0x0497, 0x0497,\r
- 0x0499, 0x0499,\r
- 0x049b, 0x049b,\r
- 0x049d, 0x049d,\r
- 0x049f, 0x049f,\r
- 0x04a1, 0x04a1,\r
- 0x04a3, 0x04a3,\r
- 0x04a5, 0x04a5,\r
- 0x04a7, 0x04a7,\r
- 0x04a9, 0x04a9,\r
- 0x04ab, 0x04ab,\r
- 0x04ad, 0x04ad,\r
- 0x04af, 0x04af,\r
- 0x04b1, 0x04b1,\r
- 0x04b3, 0x04b3,\r
- 0x04b5, 0x04b5,\r
- 0x04b7, 0x04b7,\r
- 0x04b9, 0x04b9,\r
- 0x04bb, 0x04bb,\r
- 0x04bd, 0x04bd,\r
- 0x04bf, 0x04bf,\r
- 0x04c2, 0x04c2,\r
- 0x04c4, 0x04c4,\r
- 0x04c6, 0x04c6,\r
- 0x04c8, 0x04c8,\r
- 0x04ca, 0x04ca,\r
- 0x04cc, 0x04cc,\r
- 0x04ce, 0x04ce,\r
- 0x04d1, 0x04d1,\r
- 0x04d3, 0x04d3,\r
- 0x04d5, 0x04d5,\r
- 0x04d7, 0x04d7,\r
- 0x04d9, 0x04d9,\r
- 0x04db, 0x04db,\r
- 0x04dd, 0x04dd,\r
- 0x04df, 0x04df,\r
- 0x04e1, 0x04e1,\r
- 0x04e3, 0x04e3,\r
- 0x04e5, 0x04e5,\r
- 0x04e7, 0x04e7,\r
- 0x04e9, 0x04e9,\r
- 0x04eb, 0x04eb,\r
- 0x04ed, 0x04ed,\r
- 0x04ef, 0x04ef,\r
- 0x04f1, 0x04f1,\r
- 0x04f3, 0x04f3,\r
- 0x04f5, 0x04f5,\r
- 0x04f7, 0x04f7,\r
- 0x04f9, 0x04f9,\r
- 0x0501, 0x0501,\r
- 0x0503, 0x0503,\r
- 0x0505, 0x0505,\r
- 0x0507, 0x0507,\r
- 0x0509, 0x0509,\r
- 0x050b, 0x050b,\r
- 0x050d, 0x050d,\r
- 0x050f, 0x050f,\r
- 0x0561, 0x0587,\r
- 0x1d00, 0x1d2b,\r
- 0x1d62, 0x1d77,\r
- 0x1d79, 0x1d9a,\r
- 0x1e01, 0x1e01,\r
- 0x1e03, 0x1e03,\r
- 0x1e05, 0x1e05,\r
- 0x1e07, 0x1e07,\r
- 0x1e09, 0x1e09,\r
- 0x1e0b, 0x1e0b,\r
- 0x1e0d, 0x1e0d,\r
- 0x1e0f, 0x1e0f,\r
- 0x1e11, 0x1e11,\r
- 0x1e13, 0x1e13,\r
- 0x1e15, 0x1e15,\r
- 0x1e17, 0x1e17,\r
- 0x1e19, 0x1e19,\r
- 0x1e1b, 0x1e1b,\r
- 0x1e1d, 0x1e1d,\r
- 0x1e1f, 0x1e1f,\r
- 0x1e21, 0x1e21,\r
- 0x1e23, 0x1e23,\r
- 0x1e25, 0x1e25,\r
- 0x1e27, 0x1e27,\r
- 0x1e29, 0x1e29,\r
- 0x1e2b, 0x1e2b,\r
- 0x1e2d, 0x1e2d,\r
- 0x1e2f, 0x1e2f,\r
- 0x1e31, 0x1e31,\r
- 0x1e33, 0x1e33,\r
- 0x1e35, 0x1e35,\r
- 0x1e37, 0x1e37,\r
- 0x1e39, 0x1e39,\r
- 0x1e3b, 0x1e3b,\r
- 0x1e3d, 0x1e3d,\r
- 0x1e3f, 0x1e3f,\r
- 0x1e41, 0x1e41,\r
- 0x1e43, 0x1e43,\r
- 0x1e45, 0x1e45,\r
- 0x1e47, 0x1e47,\r
- 0x1e49, 0x1e49,\r
- 0x1e4b, 0x1e4b,\r
- 0x1e4d, 0x1e4d,\r
- 0x1e4f, 0x1e4f,\r
- 0x1e51, 0x1e51,\r
- 0x1e53, 0x1e53,\r
- 0x1e55, 0x1e55,\r
- 0x1e57, 0x1e57,\r
- 0x1e59, 0x1e59,\r
- 0x1e5b, 0x1e5b,\r
- 0x1e5d, 0x1e5d,\r
- 0x1e5f, 0x1e5f,\r
- 0x1e61, 0x1e61,\r
- 0x1e63, 0x1e63,\r
- 0x1e65, 0x1e65,\r
- 0x1e67, 0x1e67,\r
- 0x1e69, 0x1e69,\r
- 0x1e6b, 0x1e6b,\r
- 0x1e6d, 0x1e6d,\r
- 0x1e6f, 0x1e6f,\r
- 0x1e71, 0x1e71,\r
- 0x1e73, 0x1e73,\r
- 0x1e75, 0x1e75,\r
- 0x1e77, 0x1e77,\r
- 0x1e79, 0x1e79,\r
- 0x1e7b, 0x1e7b,\r
- 0x1e7d, 0x1e7d,\r
- 0x1e7f, 0x1e7f,\r
- 0x1e81, 0x1e81,\r
- 0x1e83, 0x1e83,\r
- 0x1e85, 0x1e85,\r
- 0x1e87, 0x1e87,\r
- 0x1e89, 0x1e89,\r
- 0x1e8b, 0x1e8b,\r
- 0x1e8d, 0x1e8d,\r
- 0x1e8f, 0x1e8f,\r
- 0x1e91, 0x1e91,\r
- 0x1e93, 0x1e93,\r
- 0x1e95, 0x1e9b,\r
- 0x1ea1, 0x1ea1,\r
- 0x1ea3, 0x1ea3,\r
- 0x1ea5, 0x1ea5,\r
- 0x1ea7, 0x1ea7,\r
- 0x1ea9, 0x1ea9,\r
- 0x1eab, 0x1eab,\r
- 0x1ead, 0x1ead,\r
- 0x1eaf, 0x1eaf,\r
- 0x1eb1, 0x1eb1,\r
- 0x1eb3, 0x1eb3,\r
- 0x1eb5, 0x1eb5,\r
- 0x1eb7, 0x1eb7,\r
- 0x1eb9, 0x1eb9,\r
- 0x1ebb, 0x1ebb,\r
- 0x1ebd, 0x1ebd,\r
- 0x1ebf, 0x1ebf,\r
- 0x1ec1, 0x1ec1,\r
- 0x1ec3, 0x1ec3,\r
- 0x1ec5, 0x1ec5,\r
- 0x1ec7, 0x1ec7,\r
- 0x1ec9, 0x1ec9,\r
- 0x1ecb, 0x1ecb,\r
- 0x1ecd, 0x1ecd,\r
- 0x1ecf, 0x1ecf,\r
- 0x1ed1, 0x1ed1,\r
- 0x1ed3, 0x1ed3,\r
- 0x1ed5, 0x1ed5,\r
- 0x1ed7, 0x1ed7,\r
- 0x1ed9, 0x1ed9,\r
- 0x1edb, 0x1edb,\r
- 0x1edd, 0x1edd,\r
- 0x1edf, 0x1edf,\r
- 0x1ee1, 0x1ee1,\r
- 0x1ee3, 0x1ee3,\r
- 0x1ee5, 0x1ee5,\r
- 0x1ee7, 0x1ee7,\r
- 0x1ee9, 0x1ee9,\r
- 0x1eeb, 0x1eeb,\r
- 0x1eed, 0x1eed,\r
- 0x1eef, 0x1eef,\r
- 0x1ef1, 0x1ef1,\r
- 0x1ef3, 0x1ef3,\r
- 0x1ef5, 0x1ef5,\r
- 0x1ef7, 0x1ef7,\r
- 0x1ef9, 0x1ef9,\r
- 0x1f00, 0x1f07,\r
- 0x1f10, 0x1f15,\r
- 0x1f20, 0x1f27,\r
- 0x1f30, 0x1f37,\r
- 0x1f40, 0x1f45,\r
- 0x1f50, 0x1f57,\r
- 0x1f60, 0x1f67,\r
- 0x1f70, 0x1f7d,\r
- 0x1f80, 0x1f87,\r
- 0x1f90, 0x1f97,\r
- 0x1fa0, 0x1fa7,\r
- 0x1fb0, 0x1fb4,\r
- 0x1fb6, 0x1fb7,\r
- 0x1fbe, 0x1fbe,\r
- 0x1fc2, 0x1fc4,\r
- 0x1fc6, 0x1fc7,\r
- 0x1fd0, 0x1fd3,\r
- 0x1fd6, 0x1fd7,\r
- 0x1fe0, 0x1fe7,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ff7,\r
- 0x2071, 0x2071,\r
- 0x207f, 0x207f,\r
- 0x210a, 0x210a,\r
- 0x210e, 0x210f,\r
- 0x2113, 0x2113,\r
- 0x212f, 0x212f,\r
- 0x2134, 0x2134,\r
- 0x2139, 0x2139,\r
- 0x213c, 0x213d,\r
- 0x2146, 0x2149,\r
- 0x2c30, 0x2c5e,\r
- 0x2c81, 0x2c81,\r
- 0x2c83, 0x2c83,\r
- 0x2c85, 0x2c85,\r
- 0x2c87, 0x2c87,\r
- 0x2c89, 0x2c89,\r
- 0x2c8b, 0x2c8b,\r
- 0x2c8d, 0x2c8d,\r
- 0x2c8f, 0x2c8f,\r
- 0x2c91, 0x2c91,\r
- 0x2c93, 0x2c93,\r
- 0x2c95, 0x2c95,\r
- 0x2c97, 0x2c97,\r
- 0x2c99, 0x2c99,\r
- 0x2c9b, 0x2c9b,\r
- 0x2c9d, 0x2c9d,\r
- 0x2c9f, 0x2c9f,\r
- 0x2ca1, 0x2ca1,\r
- 0x2ca3, 0x2ca3,\r
- 0x2ca5, 0x2ca5,\r
- 0x2ca7, 0x2ca7,\r
- 0x2ca9, 0x2ca9,\r
- 0x2cab, 0x2cab,\r
- 0x2cad, 0x2cad,\r
- 0x2caf, 0x2caf,\r
- 0x2cb1, 0x2cb1,\r
- 0x2cb3, 0x2cb3,\r
- 0x2cb5, 0x2cb5,\r
- 0x2cb7, 0x2cb7,\r
- 0x2cb9, 0x2cb9,\r
- 0x2cbb, 0x2cbb,\r
- 0x2cbd, 0x2cbd,\r
- 0x2cbf, 0x2cbf,\r
- 0x2cc1, 0x2cc1,\r
- 0x2cc3, 0x2cc3,\r
- 0x2cc5, 0x2cc5,\r
- 0x2cc7, 0x2cc7,\r
- 0x2cc9, 0x2cc9,\r
- 0x2ccb, 0x2ccb,\r
- 0x2ccd, 0x2ccd,\r
- 0x2ccf, 0x2ccf,\r
- 0x2cd1, 0x2cd1,\r
- 0x2cd3, 0x2cd3,\r
- 0x2cd5, 0x2cd5,\r
- 0x2cd7, 0x2cd7,\r
- 0x2cd9, 0x2cd9,\r
- 0x2cdb, 0x2cdb,\r
- 0x2cdd, 0x2cdd,\r
- 0x2cdf, 0x2cdf,\r
- 0x2ce1, 0x2ce1,\r
- 0x2ce3, 0x2ce4,\r
- 0x2d00, 0x2d25,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xff41, 0xff5a,\r
- 0x10428, 0x1044f,\r
- 0x1d41a, 0x1d433,\r
- 0x1d44e, 0x1d454,\r
- 0x1d456, 0x1d467,\r
- 0x1d482, 0x1d49b,\r
- 0x1d4b6, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d4cf,\r
- 0x1d4ea, 0x1d503,\r
- 0x1d51e, 0x1d537,\r
- 0x1d552, 0x1d56b,\r
- 0x1d586, 0x1d59f,\r
- 0x1d5ba, 0x1d5d3,\r
- 0x1d5ee, 0x1d607,\r
- 0x1d622, 0x1d63b,\r
- 0x1d656, 0x1d66f,\r
- 0x1d68a, 0x1d6a5,\r
- 0x1d6c2, 0x1d6da,\r
- 0x1d6dc, 0x1d6e1,\r
- 0x1d6fc, 0x1d714,\r
- 0x1d716, 0x1d71b,\r
- 0x1d736, 0x1d74e,\r
- 0x1d750, 0x1d755,\r
- 0x1d770, 0x1d788,\r
- 0x1d78a, 0x1d78f,\r
- 0x1d7aa, 0x1d7c2,\r
- 0x1d7c4, 0x1d7c9\r
-}; /* CR_Lower */\r
-\r
-/* 'Print': [[:Print:]] */\r
-static const OnigCodePoint CR_Print[] = {\r
- 423,\r
- 0x0009, 0x000d,\r
- 0x0020, 0x007e,\r
- 0x0085, 0x0085,\r
- 0x00a0, 0x0241,\r
- 0x0250, 0x036f,\r
- 0x0374, 0x0375,\r
- 0x037a, 0x037a,\r
- 0x037e, 0x037e,\r
- 0x0384, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x0486,\r
- 0x0488, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x055f,\r
- 0x0561, 0x0587,\r
- 0x0589, 0x058a,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05c7,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f4,\r
- 0x0600, 0x0603,\r
- 0x060b, 0x0615,\r
- 0x061b, 0x061b,\r
- 0x061e, 0x061f,\r
- 0x0621, 0x063a,\r
- 0x0640, 0x065e,\r
- 0x0660, 0x070d,\r
- 0x070f, 0x074a,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07b1,\r
- 0x0901, 0x0939,\r
- 0x093c, 0x094d,\r
- 0x0950, 0x0954,\r
- 0x0958, 0x0970,\r
- 0x097d, 0x097d,\r
- 0x0981, 0x0983,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bc, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09ce,\r
- 0x09d7, 0x09d7,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e3,\r
- 0x09e6, 0x09fa,\r
- 0x0a01, 0x0a03,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a66, 0x0a74,\r
- 0x0a81, 0x0a83,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abc, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae3,\r
- 0x0ae6, 0x0aef,\r
- 0x0af1, 0x0af1,\r
- 0x0b01, 0x0b03,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3c, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b66, 0x0b71,\r
- 0x0b82, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0be6, 0x0bfa,\r
- 0x0c01, 0x0c03,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c60, 0x0c61,\r
- 0x0c66, 0x0c6f,\r
- 0x0c82, 0x0c83,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbc, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0ce6, 0x0cef,\r
- 0x0d02, 0x0d03,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d60, 0x0d61,\r
- 0x0d66, 0x0d6f,\r
- 0x0d82, 0x0d83,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df4,\r
- 0x0e01, 0x0e3a,\r
- 0x0e3f, 0x0e5b,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb9,\r
- 0x0ebb, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0ec8, 0x0ecd,\r
- 0x0ed0, 0x0ed9,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f71, 0x0f8b,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fbe, 0x0fcc,\r
- 0x0fcf, 0x0fd1,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1040, 0x1059,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fc,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x135f, 0x137c,\r
- 0x1380, 0x1399,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x1676,\r
- 0x1680, 0x169c,\r
- 0x16a0, 0x16f0,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1714,\r
- 0x1720, 0x1736,\r
- 0x1740, 0x1753,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1772, 0x1773,\r
- 0x1780, 0x17dd,\r
- 0x17e0, 0x17e9,\r
- 0x17f0, 0x17f9,\r
- 0x1800, 0x180e,\r
- 0x1810, 0x1819,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a9,\r
- 0x1900, 0x191c,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x1940, 0x1940,\r
- 0x1944, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19b0, 0x19c9,\r
- 0x19d0, 0x19d9,\r
- 0x19de, 0x1a1b,\r
- 0x1a1e, 0x1a1f,\r
- 0x1d00, 0x1dc3,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fc4,\r
- 0x1fc6, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fdd, 0x1fef,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffe,\r
- 0x2000, 0x2063,\r
- 0x206a, 0x2071,\r
- 0x2074, 0x208e,\r
- 0x2090, 0x2094,\r
- 0x20a0, 0x20b5,\r
- 0x20d0, 0x20eb,\r
- 0x2100, 0x214c,\r
- 0x2153, 0x2183,\r
- 0x2190, 0x23db,\r
- 0x2400, 0x2426,\r
- 0x2440, 0x244a,\r
- 0x2460, 0x269c,\r
- 0x26a0, 0x26b1,\r
- 0x2701, 0x2704,\r
- 0x2706, 0x2709,\r
- 0x270c, 0x2727,\r
- 0x2729, 0x274b,\r
- 0x274d, 0x274d,\r
- 0x274f, 0x2752,\r
- 0x2756, 0x2756,\r
- 0x2758, 0x275e,\r
- 0x2761, 0x2794,\r
- 0x2798, 0x27af,\r
- 0x27b1, 0x27be,\r
- 0x27c0, 0x27c6,\r
- 0x27d0, 0x27eb,\r
- 0x27f0, 0x2b13,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e,\r
- 0x2c80, 0x2cea,\r
- 0x2cf9, 0x2d25,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x2e00, 0x2e17,\r
- 0x2e1c, 0x2e1d,\r
- 0x2e80, 0x2e99,\r
- 0x2e9b, 0x2ef3,\r
- 0x2f00, 0x2fd5,\r
- 0x2ff0, 0x2ffb,\r
- 0x3000, 0x303f,\r
- 0x3041, 0x3096,\r
- 0x3099, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x3190, 0x31b7,\r
- 0x31c0, 0x31cf,\r
- 0x31f0, 0x321e,\r
- 0x3220, 0x3243,\r
- 0x3250, 0x32fe,\r
- 0x3300, 0x4db5,\r
- 0x4dc0, 0x9fbb,\r
- 0xa000, 0xa48c,\r
- 0xa490, 0xa4c6,\r
- 0xa700, 0xa716,\r
- 0xa800, 0xa82b,\r
- 0xac00, 0xd7a3,\r
- 0xe000, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xfb1d, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3f,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfd,\r
- 0xfe00, 0xfe19,\r
- 0xfe20, 0xfe23,\r
- 0xfe30, 0xfe52,\r
- 0xfe54, 0xfe66,\r
- 0xfe68, 0xfe6b,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xfeff, 0xfeff,\r
- 0xff01, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0xffe0, 0xffe6,\r
- 0xffe8, 0xffee,\r
- 0xfff9, 0xfffd,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10100, 0x10102,\r
- 0x10107, 0x10133,\r
- 0x10137, 0x1018a,\r
- 0x10300, 0x1031e,\r
- 0x10320, 0x10323,\r
- 0x10330, 0x1034a,\r
- 0x10380, 0x1039d,\r
- 0x1039f, 0x103c3,\r
- 0x103c8, 0x103d5,\r
- 0x10400, 0x1049d,\r
- 0x104a0, 0x104a9,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a47,\r
- 0x10a50, 0x10a58,\r
- 0x1d000, 0x1d0f5,\r
- 0x1d100, 0x1d126,\r
- 0x1d12a, 0x1d1dd,\r
- 0x1d200, 0x1d245,\r
- 0x1d300, 0x1d356,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d7c9,\r
- 0x1d7ce, 0x1d7ff,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d,\r
- 0xe0001, 0xe0001,\r
- 0xe0020, 0xe007f,\r
- 0xe0100, 0xe01ef,\r
- 0xf0000, 0xffffd,\r
- 0x100000, 0x10fffd\r
-}; /* CR_Print */\r
-\r
-/* 'Punct': [[:Punct:]] */\r
-static const OnigCodePoint CR_Punct[] = {\r
- 96,\r
- 0x0021, 0x0023,\r
- 0x0025, 0x002a,\r
- 0x002c, 0x002f,\r
- 0x003a, 0x003b,\r
- 0x003f, 0x0040,\r
- 0x005b, 0x005d,\r
- 0x005f, 0x005f,\r
- 0x007b, 0x007b,\r
- 0x007d, 0x007d,\r
- 0x00a1, 0x00a1,\r
- 0x00ab, 0x00ab,\r
- 0x00b7, 0x00b7,\r
- 0x00bb, 0x00bb,\r
- 0x00bf, 0x00bf,\r
- 0x037e, 0x037e,\r
- 0x0387, 0x0387,\r
- 0x055a, 0x055f,\r
- 0x0589, 0x058a,\r
- 0x05be, 0x05be,\r
- 0x05c0, 0x05c0,\r
- 0x05c3, 0x05c3,\r
- 0x05c6, 0x05c6,\r
- 0x05f3, 0x05f4,\r
- 0x060c, 0x060d,\r
- 0x061b, 0x061b,\r
- 0x061e, 0x061f,\r
- 0x066a, 0x066d,\r
- 0x06d4, 0x06d4,\r
- 0x0700, 0x070d,\r
- 0x0964, 0x0965,\r
- 0x0970, 0x0970,\r
- 0x0df4, 0x0df4,\r
- 0x0e4f, 0x0e4f,\r
- 0x0e5a, 0x0e5b,\r
- 0x0f04, 0x0f12,\r
- 0x0f3a, 0x0f3d,\r
- 0x0f85, 0x0f85,\r
- 0x0fd0, 0x0fd1,\r
- 0x104a, 0x104f,\r
- 0x10fb, 0x10fb,\r
- 0x1361, 0x1368,\r
- 0x166d, 0x166e,\r
- 0x169b, 0x169c,\r
- 0x16eb, 0x16ed,\r
- 0x1735, 0x1736,\r
- 0x17d4, 0x17d6,\r
- 0x17d8, 0x17da,\r
- 0x1800, 0x180a,\r
- 0x1944, 0x1945,\r
- 0x19de, 0x19df,\r
- 0x1a1e, 0x1a1f,\r
- 0x2010, 0x2027,\r
- 0x2030, 0x2043,\r
- 0x2045, 0x2051,\r
- 0x2053, 0x205e,\r
- 0x207d, 0x207e,\r
- 0x208d, 0x208e,\r
- 0x2329, 0x232a,\r
- 0x23b4, 0x23b6,\r
- 0x2768, 0x2775,\r
- 0x27c5, 0x27c6,\r
- 0x27e6, 0x27eb,\r
- 0x2983, 0x2998,\r
- 0x29d8, 0x29db,\r
- 0x29fc, 0x29fd,\r
- 0x2cf9, 0x2cfc,\r
- 0x2cfe, 0x2cff,\r
- 0x2e00, 0x2e17,\r
- 0x2e1c, 0x2e1d,\r
- 0x3001, 0x3003,\r
- 0x3008, 0x3011,\r
- 0x3014, 0x301f,\r
- 0x3030, 0x3030,\r
- 0x303d, 0x303d,\r
- 0x30a0, 0x30a0,\r
- 0x30fb, 0x30fb,\r
- 0xfd3e, 0xfd3f,\r
- 0xfe10, 0xfe19,\r
- 0xfe30, 0xfe52,\r
- 0xfe54, 0xfe61,\r
- 0xfe63, 0xfe63,\r
- 0xfe68, 0xfe68,\r
- 0xfe6a, 0xfe6b,\r
- 0xff01, 0xff03,\r
- 0xff05, 0xff0a,\r
- 0xff0c, 0xff0f,\r
- 0xff1a, 0xff1b,\r
- 0xff1f, 0xff20,\r
- 0xff3b, 0xff3d,\r
- 0xff3f, 0xff3f,\r
- 0xff5b, 0xff5b,\r
- 0xff5d, 0xff5d,\r
- 0xff5f, 0xff65,\r
- 0x10100, 0x10101,\r
- 0x1039f, 0x1039f,\r
- 0x10a50, 0x10a58\r
-}; /* CR_Punct */\r
-\r
-/* 'Space': [[:Space:]] */\r
-static const OnigCodePoint CR_Space[] = {\r
- 11,\r
- 0x0009, 0x000d,\r
- 0x0020, 0x0020,\r
- 0x0085, 0x0085,\r
- 0x00a0, 0x00a0,\r
- 0x1680, 0x1680,\r
- 0x180e, 0x180e,\r
- 0x2000, 0x200a,\r
- 0x2028, 0x2029,\r
- 0x202f, 0x202f,\r
- 0x205f, 0x205f,\r
- 0x3000, 0x3000\r
-}; /* CR_Space */\r
-\r
-/* 'Upper': [[:Upper:]] */\r
-static const OnigCodePoint CR_Upper[] = {\r
- 476,\r
- 0x0041, 0x005a,\r
- 0x00c0, 0x00d6,\r
- 0x00d8, 0x00de,\r
- 0x0100, 0x0100,\r
- 0x0102, 0x0102,\r
- 0x0104, 0x0104,\r
- 0x0106, 0x0106,\r
- 0x0108, 0x0108,\r
- 0x010a, 0x010a,\r
- 0x010c, 0x010c,\r
- 0x010e, 0x010e,\r
- 0x0110, 0x0110,\r
- 0x0112, 0x0112,\r
- 0x0114, 0x0114,\r
- 0x0116, 0x0116,\r
- 0x0118, 0x0118,\r
- 0x011a, 0x011a,\r
- 0x011c, 0x011c,\r
- 0x011e, 0x011e,\r
- 0x0120, 0x0120,\r
- 0x0122, 0x0122,\r
- 0x0124, 0x0124,\r
- 0x0126, 0x0126,\r
- 0x0128, 0x0128,\r
- 0x012a, 0x012a,\r
- 0x012c, 0x012c,\r
- 0x012e, 0x012e,\r
- 0x0130, 0x0130,\r
- 0x0132, 0x0132,\r
- 0x0134, 0x0134,\r
- 0x0136, 0x0136,\r
- 0x0139, 0x0139,\r
- 0x013b, 0x013b,\r
- 0x013d, 0x013d,\r
- 0x013f, 0x013f,\r
- 0x0141, 0x0141,\r
- 0x0143, 0x0143,\r
- 0x0145, 0x0145,\r
- 0x0147, 0x0147,\r
- 0x014a, 0x014a,\r
- 0x014c, 0x014c,\r
- 0x014e, 0x014e,\r
- 0x0150, 0x0150,\r
- 0x0152, 0x0152,\r
- 0x0154, 0x0154,\r
- 0x0156, 0x0156,\r
- 0x0158, 0x0158,\r
- 0x015a, 0x015a,\r
- 0x015c, 0x015c,\r
- 0x015e, 0x015e,\r
- 0x0160, 0x0160,\r
- 0x0162, 0x0162,\r
- 0x0164, 0x0164,\r
- 0x0166, 0x0166,\r
- 0x0168, 0x0168,\r
- 0x016a, 0x016a,\r
- 0x016c, 0x016c,\r
- 0x016e, 0x016e,\r
- 0x0170, 0x0170,\r
- 0x0172, 0x0172,\r
- 0x0174, 0x0174,\r
- 0x0176, 0x0176,\r
- 0x0178, 0x0179,\r
- 0x017b, 0x017b,\r
- 0x017d, 0x017d,\r
- 0x0181, 0x0182,\r
- 0x0184, 0x0184,\r
- 0x0186, 0x0187,\r
- 0x0189, 0x018b,\r
- 0x018e, 0x0191,\r
- 0x0193, 0x0194,\r
- 0x0196, 0x0198,\r
- 0x019c, 0x019d,\r
- 0x019f, 0x01a0,\r
- 0x01a2, 0x01a2,\r
- 0x01a4, 0x01a4,\r
- 0x01a6, 0x01a7,\r
- 0x01a9, 0x01a9,\r
- 0x01ac, 0x01ac,\r
- 0x01ae, 0x01af,\r
- 0x01b1, 0x01b3,\r
- 0x01b5, 0x01b5,\r
- 0x01b7, 0x01b8,\r
- 0x01bc, 0x01bc,\r
- 0x01c4, 0x01c4,\r
- 0x01c7, 0x01c7,\r
- 0x01ca, 0x01ca,\r
- 0x01cd, 0x01cd,\r
- 0x01cf, 0x01cf,\r
- 0x01d1, 0x01d1,\r
- 0x01d3, 0x01d3,\r
- 0x01d5, 0x01d5,\r
- 0x01d7, 0x01d7,\r
- 0x01d9, 0x01d9,\r
- 0x01db, 0x01db,\r
- 0x01de, 0x01de,\r
- 0x01e0, 0x01e0,\r
- 0x01e2, 0x01e2,\r
- 0x01e4, 0x01e4,\r
- 0x01e6, 0x01e6,\r
- 0x01e8, 0x01e8,\r
- 0x01ea, 0x01ea,\r
- 0x01ec, 0x01ec,\r
- 0x01ee, 0x01ee,\r
- 0x01f1, 0x01f1,\r
- 0x01f4, 0x01f4,\r
- 0x01f6, 0x01f8,\r
- 0x01fa, 0x01fa,\r
- 0x01fc, 0x01fc,\r
- 0x01fe, 0x01fe,\r
- 0x0200, 0x0200,\r
- 0x0202, 0x0202,\r
- 0x0204, 0x0204,\r
- 0x0206, 0x0206,\r
- 0x0208, 0x0208,\r
- 0x020a, 0x020a,\r
- 0x020c, 0x020c,\r
- 0x020e, 0x020e,\r
- 0x0210, 0x0210,\r
- 0x0212, 0x0212,\r
- 0x0214, 0x0214,\r
- 0x0216, 0x0216,\r
- 0x0218, 0x0218,\r
- 0x021a, 0x021a,\r
- 0x021c, 0x021c,\r
- 0x021e, 0x021e,\r
- 0x0220, 0x0220,\r
- 0x0222, 0x0222,\r
- 0x0224, 0x0224,\r
- 0x0226, 0x0226,\r
- 0x0228, 0x0228,\r
- 0x022a, 0x022a,\r
- 0x022c, 0x022c,\r
- 0x022e, 0x022e,\r
- 0x0230, 0x0230,\r
- 0x0232, 0x0232,\r
- 0x023a, 0x023b,\r
- 0x023d, 0x023e,\r
- 0x0241, 0x0241,\r
- 0x0386, 0x0386,\r
- 0x0388, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x038f,\r
- 0x0391, 0x03a1,\r
- 0x03a3, 0x03ab,\r
- 0x03d2, 0x03d4,\r
- 0x03d8, 0x03d8,\r
- 0x03da, 0x03da,\r
- 0x03dc, 0x03dc,\r
- 0x03de, 0x03de,\r
- 0x03e0, 0x03e0,\r
- 0x03e2, 0x03e2,\r
- 0x03e4, 0x03e4,\r
- 0x03e6, 0x03e6,\r
- 0x03e8, 0x03e8,\r
- 0x03ea, 0x03ea,\r
- 0x03ec, 0x03ec,\r
- 0x03ee, 0x03ee,\r
- 0x03f4, 0x03f4,\r
- 0x03f7, 0x03f7,\r
- 0x03f9, 0x03fa,\r
- 0x03fd, 0x042f,\r
- 0x0460, 0x0460,\r
- 0x0462, 0x0462,\r
- 0x0464, 0x0464,\r
- 0x0466, 0x0466,\r
- 0x0468, 0x0468,\r
- 0x046a, 0x046a,\r
- 0x046c, 0x046c,\r
- 0x046e, 0x046e,\r
- 0x0470, 0x0470,\r
- 0x0472, 0x0472,\r
- 0x0474, 0x0474,\r
- 0x0476, 0x0476,\r
- 0x0478, 0x0478,\r
- 0x047a, 0x047a,\r
- 0x047c, 0x047c,\r
- 0x047e, 0x047e,\r
- 0x0480, 0x0480,\r
- 0x048a, 0x048a,\r
- 0x048c, 0x048c,\r
- 0x048e, 0x048e,\r
- 0x0490, 0x0490,\r
- 0x0492, 0x0492,\r
- 0x0494, 0x0494,\r
- 0x0496, 0x0496,\r
- 0x0498, 0x0498,\r
- 0x049a, 0x049a,\r
- 0x049c, 0x049c,\r
- 0x049e, 0x049e,\r
- 0x04a0, 0x04a0,\r
- 0x04a2, 0x04a2,\r
- 0x04a4, 0x04a4,\r
- 0x04a6, 0x04a6,\r
- 0x04a8, 0x04a8,\r
- 0x04aa, 0x04aa,\r
- 0x04ac, 0x04ac,\r
- 0x04ae, 0x04ae,\r
- 0x04b0, 0x04b0,\r
- 0x04b2, 0x04b2,\r
- 0x04b4, 0x04b4,\r
- 0x04b6, 0x04b6,\r
- 0x04b8, 0x04b8,\r
- 0x04ba, 0x04ba,\r
- 0x04bc, 0x04bc,\r
- 0x04be, 0x04be,\r
- 0x04c0, 0x04c1,\r
- 0x04c3, 0x04c3,\r
- 0x04c5, 0x04c5,\r
- 0x04c7, 0x04c7,\r
- 0x04c9, 0x04c9,\r
- 0x04cb, 0x04cb,\r
- 0x04cd, 0x04cd,\r
- 0x04d0, 0x04d0,\r
- 0x04d2, 0x04d2,\r
- 0x04d4, 0x04d4,\r
- 0x04d6, 0x04d6,\r
- 0x04d8, 0x04d8,\r
- 0x04da, 0x04da,\r
- 0x04dc, 0x04dc,\r
- 0x04de, 0x04de,\r
- 0x04e0, 0x04e0,\r
- 0x04e2, 0x04e2,\r
- 0x04e4, 0x04e4,\r
- 0x04e6, 0x04e6,\r
- 0x04e8, 0x04e8,\r
- 0x04ea, 0x04ea,\r
- 0x04ec, 0x04ec,\r
- 0x04ee, 0x04ee,\r
- 0x04f0, 0x04f0,\r
- 0x04f2, 0x04f2,\r
- 0x04f4, 0x04f4,\r
- 0x04f6, 0x04f6,\r
- 0x04f8, 0x04f8,\r
- 0x0500, 0x0500,\r
- 0x0502, 0x0502,\r
- 0x0504, 0x0504,\r
- 0x0506, 0x0506,\r
- 0x0508, 0x0508,\r
- 0x050a, 0x050a,\r
- 0x050c, 0x050c,\r
- 0x050e, 0x050e,\r
- 0x0531, 0x0556,\r
- 0x10a0, 0x10c5,\r
- 0x1e00, 0x1e00,\r
- 0x1e02, 0x1e02,\r
- 0x1e04, 0x1e04,\r
- 0x1e06, 0x1e06,\r
- 0x1e08, 0x1e08,\r
- 0x1e0a, 0x1e0a,\r
- 0x1e0c, 0x1e0c,\r
- 0x1e0e, 0x1e0e,\r
- 0x1e10, 0x1e10,\r
- 0x1e12, 0x1e12,\r
- 0x1e14, 0x1e14,\r
- 0x1e16, 0x1e16,\r
- 0x1e18, 0x1e18,\r
- 0x1e1a, 0x1e1a,\r
- 0x1e1c, 0x1e1c,\r
- 0x1e1e, 0x1e1e,\r
- 0x1e20, 0x1e20,\r
- 0x1e22, 0x1e22,\r
- 0x1e24, 0x1e24,\r
- 0x1e26, 0x1e26,\r
- 0x1e28, 0x1e28,\r
- 0x1e2a, 0x1e2a,\r
- 0x1e2c, 0x1e2c,\r
- 0x1e2e, 0x1e2e,\r
- 0x1e30, 0x1e30,\r
- 0x1e32, 0x1e32,\r
- 0x1e34, 0x1e34,\r
- 0x1e36, 0x1e36,\r
- 0x1e38, 0x1e38,\r
- 0x1e3a, 0x1e3a,\r
- 0x1e3c, 0x1e3c,\r
- 0x1e3e, 0x1e3e,\r
- 0x1e40, 0x1e40,\r
- 0x1e42, 0x1e42,\r
- 0x1e44, 0x1e44,\r
- 0x1e46, 0x1e46,\r
- 0x1e48, 0x1e48,\r
- 0x1e4a, 0x1e4a,\r
- 0x1e4c, 0x1e4c,\r
- 0x1e4e, 0x1e4e,\r
- 0x1e50, 0x1e50,\r
- 0x1e52, 0x1e52,\r
- 0x1e54, 0x1e54,\r
- 0x1e56, 0x1e56,\r
- 0x1e58, 0x1e58,\r
- 0x1e5a, 0x1e5a,\r
- 0x1e5c, 0x1e5c,\r
- 0x1e5e, 0x1e5e,\r
- 0x1e60, 0x1e60,\r
- 0x1e62, 0x1e62,\r
- 0x1e64, 0x1e64,\r
- 0x1e66, 0x1e66,\r
- 0x1e68, 0x1e68,\r
- 0x1e6a, 0x1e6a,\r
- 0x1e6c, 0x1e6c,\r
- 0x1e6e, 0x1e6e,\r
- 0x1e70, 0x1e70,\r
- 0x1e72, 0x1e72,\r
- 0x1e74, 0x1e74,\r
- 0x1e76, 0x1e76,\r
- 0x1e78, 0x1e78,\r
- 0x1e7a, 0x1e7a,\r
- 0x1e7c, 0x1e7c,\r
- 0x1e7e, 0x1e7e,\r
- 0x1e80, 0x1e80,\r
- 0x1e82, 0x1e82,\r
- 0x1e84, 0x1e84,\r
- 0x1e86, 0x1e86,\r
- 0x1e88, 0x1e88,\r
- 0x1e8a, 0x1e8a,\r
- 0x1e8c, 0x1e8c,\r
- 0x1e8e, 0x1e8e,\r
- 0x1e90, 0x1e90,\r
- 0x1e92, 0x1e92,\r
- 0x1e94, 0x1e94,\r
- 0x1ea0, 0x1ea0,\r
- 0x1ea2, 0x1ea2,\r
- 0x1ea4, 0x1ea4,\r
- 0x1ea6, 0x1ea6,\r
- 0x1ea8, 0x1ea8,\r
- 0x1eaa, 0x1eaa,\r
- 0x1eac, 0x1eac,\r
- 0x1eae, 0x1eae,\r
- 0x1eb0, 0x1eb0,\r
- 0x1eb2, 0x1eb2,\r
- 0x1eb4, 0x1eb4,\r
- 0x1eb6, 0x1eb6,\r
- 0x1eb8, 0x1eb8,\r
- 0x1eba, 0x1eba,\r
- 0x1ebc, 0x1ebc,\r
- 0x1ebe, 0x1ebe,\r
- 0x1ec0, 0x1ec0,\r
- 0x1ec2, 0x1ec2,\r
- 0x1ec4, 0x1ec4,\r
- 0x1ec6, 0x1ec6,\r
- 0x1ec8, 0x1ec8,\r
- 0x1eca, 0x1eca,\r
- 0x1ecc, 0x1ecc,\r
- 0x1ece, 0x1ece,\r
- 0x1ed0, 0x1ed0,\r
- 0x1ed2, 0x1ed2,\r
- 0x1ed4, 0x1ed4,\r
- 0x1ed6, 0x1ed6,\r
- 0x1ed8, 0x1ed8,\r
- 0x1eda, 0x1eda,\r
- 0x1edc, 0x1edc,\r
- 0x1ede, 0x1ede,\r
- 0x1ee0, 0x1ee0,\r
- 0x1ee2, 0x1ee2,\r
- 0x1ee4, 0x1ee4,\r
- 0x1ee6, 0x1ee6,\r
- 0x1ee8, 0x1ee8,\r
- 0x1eea, 0x1eea,\r
- 0x1eec, 0x1eec,\r
- 0x1eee, 0x1eee,\r
- 0x1ef0, 0x1ef0,\r
- 0x1ef2, 0x1ef2,\r
- 0x1ef4, 0x1ef4,\r
- 0x1ef6, 0x1ef6,\r
- 0x1ef8, 0x1ef8,\r
- 0x1f08, 0x1f0f,\r
- 0x1f18, 0x1f1d,\r
- 0x1f28, 0x1f2f,\r
- 0x1f38, 0x1f3f,\r
- 0x1f48, 0x1f4d,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f5f,\r
- 0x1f68, 0x1f6f,\r
- 0x1fb8, 0x1fbb,\r
- 0x1fc8, 0x1fcb,\r
- 0x1fd8, 0x1fdb,\r
- 0x1fe8, 0x1fec,\r
- 0x1ff8, 0x1ffb,\r
- 0x2102, 0x2102,\r
- 0x2107, 0x2107,\r
- 0x210b, 0x210d,\r
- 0x2110, 0x2112,\r
- 0x2115, 0x2115,\r
- 0x2119, 0x211d,\r
- 0x2124, 0x2124,\r
- 0x2126, 0x2126,\r
- 0x2128, 0x2128,\r
- 0x212a, 0x212d,\r
- 0x2130, 0x2131,\r
- 0x2133, 0x2133,\r
- 0x213e, 0x213f,\r
- 0x2145, 0x2145,\r
- 0x2c00, 0x2c2e,\r
- 0x2c80, 0x2c80,\r
- 0x2c82, 0x2c82,\r
- 0x2c84, 0x2c84,\r
- 0x2c86, 0x2c86,\r
- 0x2c88, 0x2c88,\r
- 0x2c8a, 0x2c8a,\r
- 0x2c8c, 0x2c8c,\r
- 0x2c8e, 0x2c8e,\r
- 0x2c90, 0x2c90,\r
- 0x2c92, 0x2c92,\r
- 0x2c94, 0x2c94,\r
- 0x2c96, 0x2c96,\r
- 0x2c98, 0x2c98,\r
- 0x2c9a, 0x2c9a,\r
- 0x2c9c, 0x2c9c,\r
- 0x2c9e, 0x2c9e,\r
- 0x2ca0, 0x2ca0,\r
- 0x2ca2, 0x2ca2,\r
- 0x2ca4, 0x2ca4,\r
- 0x2ca6, 0x2ca6,\r
- 0x2ca8, 0x2ca8,\r
- 0x2caa, 0x2caa,\r
- 0x2cac, 0x2cac,\r
- 0x2cae, 0x2cae,\r
- 0x2cb0, 0x2cb0,\r
- 0x2cb2, 0x2cb2,\r
- 0x2cb4, 0x2cb4,\r
- 0x2cb6, 0x2cb6,\r
- 0x2cb8, 0x2cb8,\r
- 0x2cba, 0x2cba,\r
- 0x2cbc, 0x2cbc,\r
- 0x2cbe, 0x2cbe,\r
- 0x2cc0, 0x2cc0,\r
- 0x2cc2, 0x2cc2,\r
- 0x2cc4, 0x2cc4,\r
- 0x2cc6, 0x2cc6,\r
- 0x2cc8, 0x2cc8,\r
- 0x2cca, 0x2cca,\r
- 0x2ccc, 0x2ccc,\r
- 0x2cce, 0x2cce,\r
- 0x2cd0, 0x2cd0,\r
- 0x2cd2, 0x2cd2,\r
- 0x2cd4, 0x2cd4,\r
- 0x2cd6, 0x2cd6,\r
- 0x2cd8, 0x2cd8,\r
- 0x2cda, 0x2cda,\r
- 0x2cdc, 0x2cdc,\r
- 0x2cde, 0x2cde,\r
- 0x2ce0, 0x2ce0,\r
- 0x2ce2, 0x2ce2,\r
- 0xff21, 0xff3a,\r
- 0x10400, 0x10427,\r
- 0x1d400, 0x1d419,\r
- 0x1d434, 0x1d44d,\r
- 0x1d468, 0x1d481,\r
- 0x1d49c, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b5,\r
- 0x1d4d0, 0x1d4e9,\r
- 0x1d504, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d538, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d56c, 0x1d585,\r
- 0x1d5a0, 0x1d5b9,\r
- 0x1d5d4, 0x1d5ed,\r
- 0x1d608, 0x1d621,\r
- 0x1d63c, 0x1d655,\r
- 0x1d670, 0x1d689,\r
- 0x1d6a8, 0x1d6c0,\r
- 0x1d6e2, 0x1d6fa,\r
- 0x1d71c, 0x1d734,\r
- 0x1d756, 0x1d76e,\r
- 0x1d790, 0x1d7a8\r
-}; /* CR_Upper */\r
-\r
-/* 'XDigit': [[:XDigit:]] */\r
-static const OnigCodePoint CR_XDigit[] = {\r
- 3,\r
- 0x0030, 0x0039,\r
- 0x0041, 0x0046,\r
- 0x0061, 0x0066\r
-}; /* CR_XDigit */\r
-\r
-/* 'Word': [[:Word:]] */\r
-static const OnigCodePoint CR_Word[] = {\r
- 464,\r
- 0x0030, 0x0039,\r
- 0x0041, 0x005a,\r
- 0x005f, 0x005f,\r
- 0x0061, 0x007a,\r
- 0x00aa, 0x00aa,\r
- 0x00b2, 0x00b3,\r
- 0x00b5, 0x00b5,\r
- 0x00b9, 0x00ba,\r
- 0x00bc, 0x00be,\r
- 0x00c0, 0x00d6,\r
- 0x00d8, 0x00f6,\r
- 0x00f8, 0x0241,\r
- 0x0250, 0x02c1,\r
- 0x02c6, 0x02d1,\r
- 0x02e0, 0x02e4,\r
- 0x02ee, 0x02ee,\r
- 0x0300, 0x036f,\r
- 0x037a, 0x037a,\r
- 0x0386, 0x0386,\r
- 0x0388, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x03f5,\r
- 0x03f7, 0x0481,\r
- 0x0483, 0x0486,\r
- 0x0488, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x0559,\r
- 0x0561, 0x0587,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05bd,\r
- 0x05bf, 0x05bf,\r
- 0x05c1, 0x05c2,\r
- 0x05c4, 0x05c5,\r
- 0x05c7, 0x05c7,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f2,\r
- 0x0610, 0x0615,\r
- 0x0621, 0x063a,\r
- 0x0640, 0x065e,\r
- 0x0660, 0x0669,\r
- 0x066e, 0x06d3,\r
- 0x06d5, 0x06dc,\r
- 0x06de, 0x06e8,\r
- 0x06ea, 0x06fc,\r
- 0x06ff, 0x06ff,\r
- 0x0710, 0x074a,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07b1,\r
- 0x0901, 0x0939,\r
- 0x093c, 0x094d,\r
- 0x0950, 0x0954,\r
- 0x0958, 0x0963,\r
- 0x0966, 0x096f,\r
- 0x097d, 0x097d,\r
- 0x0981, 0x0983,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bc, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09ce,\r
- 0x09d7, 0x09d7,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e3,\r
- 0x09e6, 0x09f1,\r
- 0x09f4, 0x09f9,\r
- 0x0a01, 0x0a03,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a66, 0x0a74,\r
- 0x0a81, 0x0a83,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abc, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae3,\r
- 0x0ae6, 0x0aef,\r
- 0x0b01, 0x0b03,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3c, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b66, 0x0b6f,\r
- 0x0b71, 0x0b71,\r
- 0x0b82, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0be6, 0x0bf2,\r
- 0x0c01, 0x0c03,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c60, 0x0c61,\r
- 0x0c66, 0x0c6f,\r
- 0x0c82, 0x0c83,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbc, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0ce6, 0x0cef,\r
- 0x0d02, 0x0d03,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d60, 0x0d61,\r
- 0x0d66, 0x0d6f,\r
- 0x0d82, 0x0d83,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df3,\r
- 0x0e01, 0x0e3a,\r
- 0x0e40, 0x0e4e,\r
- 0x0e50, 0x0e59,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb9,\r
- 0x0ebb, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0ec8, 0x0ecd,\r
- 0x0ed0, 0x0ed9,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f00,\r
- 0x0f18, 0x0f19,\r
- 0x0f20, 0x0f33,\r
- 0x0f35, 0x0f35,\r
- 0x0f37, 0x0f37,\r
- 0x0f39, 0x0f39,\r
- 0x0f3e, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f71, 0x0f84,\r
- 0x0f86, 0x0f8b,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fc6, 0x0fc6,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1040, 0x1049,\r
- 0x1050, 0x1059,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fa,\r
- 0x10fc, 0x10fc,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x135f, 0x135f,\r
- 0x1369, 0x137c,\r
- 0x1380, 0x138f,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x166c,\r
- 0x166f, 0x1676,\r
- 0x1681, 0x169a,\r
- 0x16a0, 0x16ea,\r
- 0x16ee, 0x16f0,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1714,\r
- 0x1720, 0x1734,\r
- 0x1740, 0x1753,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1772, 0x1773,\r
- 0x1780, 0x17b3,\r
- 0x17b6, 0x17d3,\r
- 0x17d7, 0x17d7,\r
- 0x17dc, 0x17dd,\r
- 0x17e0, 0x17e9,\r
- 0x17f0, 0x17f9,\r
- 0x180b, 0x180d,\r
- 0x1810, 0x1819,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a9,\r
- 0x1900, 0x191c,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x1946, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19b0, 0x19c9,\r
- 0x19d0, 0x19d9,\r
- 0x1a00, 0x1a1b,\r
- 0x1d00, 0x1dc3,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fbc,\r
- 0x1fbe, 0x1fbe,\r
- 0x1fc2, 0x1fc4,\r
- 0x1fc6, 0x1fcc,\r
- 0x1fd0, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fe0, 0x1fec,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffc,\r
- 0x203f, 0x2040,\r
- 0x2054, 0x2054,\r
- 0x2070, 0x2071,\r
- 0x2074, 0x2079,\r
- 0x207f, 0x2089,\r
- 0x2090, 0x2094,\r
- 0x20d0, 0x20eb,\r
- 0x2102, 0x2102,\r
- 0x2107, 0x2107,\r
- 0x210a, 0x2113,\r
- 0x2115, 0x2115,\r
- 0x2119, 0x211d,\r
- 0x2124, 0x2124,\r
- 0x2126, 0x2126,\r
- 0x2128, 0x2128,\r
- 0x212a, 0x212d,\r
- 0x212f, 0x2131,\r
- 0x2133, 0x2139,\r
- 0x213c, 0x213f,\r
- 0x2145, 0x2149,\r
- 0x2153, 0x2183,\r
- 0x2460, 0x249b,\r
- 0x24ea, 0x24ff,\r
- 0x2776, 0x2793,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e,\r
- 0x2c80, 0x2ce4,\r
- 0x2cfd, 0x2cfd,\r
- 0x2d00, 0x2d25,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x3005, 0x3007,\r
- 0x3021, 0x302f,\r
- 0x3031, 0x3035,\r
- 0x3038, 0x303c,\r
- 0x3041, 0x3096,\r
- 0x3099, 0x309a,\r
- 0x309d, 0x309f,\r
- 0x30a1, 0x30fa,\r
- 0x30fc, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x3192, 0x3195,\r
- 0x31a0, 0x31b7,\r
- 0x31f0, 0x31ff,\r
- 0x3220, 0x3229,\r
- 0x3251, 0x325f,\r
- 0x3280, 0x3289,\r
- 0x32b1, 0x32bf,\r
- 0x3400, 0x4db5,\r
- 0x4e00, 0x9fbb,\r
- 0xa000, 0xa48c,\r
- 0xa800, 0xa827,\r
- 0xac00, 0xd7a3,\r
- 0xf900, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xfb1d, 0xfb28,\r
- 0xfb2a, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3d,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfb,\r
- 0xfe00, 0xfe0f,\r
- 0xfe20, 0xfe23,\r
- 0xfe33, 0xfe34,\r
- 0xfe4d, 0xfe4f,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xff10, 0xff19,\r
- 0xff21, 0xff3a,\r
- 0xff3f, 0xff3f,\r
- 0xff41, 0xff5a,\r
- 0xff66, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10107, 0x10133,\r
- 0x10140, 0x10178,\r
- 0x1018a, 0x1018a,\r
- 0x10300, 0x1031e,\r
- 0x10320, 0x10323,\r
- 0x10330, 0x1034a,\r
- 0x10380, 0x1039d,\r
- 0x103a0, 0x103c3,\r
- 0x103c8, 0x103cf,\r
- 0x103d1, 0x103d5,\r
- 0x10400, 0x1049d,\r
- 0x104a0, 0x104a9,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a47,\r
- 0x1d165, 0x1d169,\r
- 0x1d16d, 0x1d172,\r
- 0x1d17b, 0x1d182,\r
- 0x1d185, 0x1d18b,\r
- 0x1d1aa, 0x1d1ad,\r
- 0x1d242, 0x1d244,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d6c0,\r
- 0x1d6c2, 0x1d6da,\r
- 0x1d6dc, 0x1d6fa,\r
- 0x1d6fc, 0x1d714,\r
- 0x1d716, 0x1d734,\r
- 0x1d736, 0x1d74e,\r
- 0x1d750, 0x1d76e,\r
- 0x1d770, 0x1d788,\r
- 0x1d78a, 0x1d7a8,\r
- 0x1d7aa, 0x1d7c2,\r
- 0x1d7c4, 0x1d7c9,\r
- 0x1d7ce, 0x1d7ff,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d,\r
- 0xe0100, 0xe01ef\r
-}; /* CR_Word */\r
-\r
-/* 'Alnum': [[:Alnum:]] */\r
-static const OnigCodePoint CR_Alnum[] = {\r
- 436,\r
- 0x0030, 0x0039,\r
- 0x0041, 0x005a,\r
- 0x0061, 0x007a,\r
- 0x00aa, 0x00aa,\r
- 0x00b5, 0x00b5,\r
- 0x00ba, 0x00ba,\r
- 0x00c0, 0x00d6,\r
- 0x00d8, 0x00f6,\r
- 0x00f8, 0x0241,\r
- 0x0250, 0x02c1,\r
- 0x02c6, 0x02d1,\r
- 0x02e0, 0x02e4,\r
- 0x02ee, 0x02ee,\r
- 0x0300, 0x036f,\r
- 0x037a, 0x037a,\r
- 0x0386, 0x0386,\r
- 0x0388, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x03f5,\r
- 0x03f7, 0x0481,\r
- 0x0483, 0x0486,\r
- 0x0488, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x0559,\r
- 0x0561, 0x0587,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05bd,\r
- 0x05bf, 0x05bf,\r
- 0x05c1, 0x05c2,\r
- 0x05c4, 0x05c5,\r
- 0x05c7, 0x05c7,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f2,\r
- 0x0610, 0x0615,\r
- 0x0621, 0x063a,\r
- 0x0640, 0x065e,\r
- 0x0660, 0x0669,\r
- 0x066e, 0x06d3,\r
- 0x06d5, 0x06dc,\r
- 0x06de, 0x06e8,\r
- 0x06ea, 0x06fc,\r
- 0x06ff, 0x06ff,\r
- 0x0710, 0x074a,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07b1,\r
- 0x0901, 0x0939,\r
- 0x093c, 0x094d,\r
- 0x0950, 0x0954,\r
- 0x0958, 0x0963,\r
- 0x0966, 0x096f,\r
- 0x097d, 0x097d,\r
- 0x0981, 0x0983,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bc, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09ce,\r
- 0x09d7, 0x09d7,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e3,\r
- 0x09e6, 0x09f1,\r
- 0x0a01, 0x0a03,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a66, 0x0a74,\r
- 0x0a81, 0x0a83,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abc, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae3,\r
- 0x0ae6, 0x0aef,\r
- 0x0b01, 0x0b03,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3c, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b66, 0x0b6f,\r
- 0x0b71, 0x0b71,\r
- 0x0b82, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0be6, 0x0bef,\r
- 0x0c01, 0x0c03,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c60, 0x0c61,\r
- 0x0c66, 0x0c6f,\r
- 0x0c82, 0x0c83,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbc, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0ce6, 0x0cef,\r
- 0x0d02, 0x0d03,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d60, 0x0d61,\r
- 0x0d66, 0x0d6f,\r
- 0x0d82, 0x0d83,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df3,\r
- 0x0e01, 0x0e3a,\r
- 0x0e40, 0x0e4e,\r
- 0x0e50, 0x0e59,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb9,\r
- 0x0ebb, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0ec8, 0x0ecd,\r
- 0x0ed0, 0x0ed9,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f00,\r
- 0x0f18, 0x0f19,\r
- 0x0f20, 0x0f29,\r
- 0x0f35, 0x0f35,\r
- 0x0f37, 0x0f37,\r
- 0x0f39, 0x0f39,\r
- 0x0f3e, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f71, 0x0f84,\r
- 0x0f86, 0x0f8b,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fc6, 0x0fc6,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1040, 0x1049,\r
- 0x1050, 0x1059,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fa,\r
- 0x10fc, 0x10fc,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x135f, 0x135f,\r
- 0x1380, 0x138f,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x166c,\r
- 0x166f, 0x1676,\r
- 0x1681, 0x169a,\r
- 0x16a0, 0x16ea,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1714,\r
- 0x1720, 0x1734,\r
- 0x1740, 0x1753,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1772, 0x1773,\r
- 0x1780, 0x17b3,\r
- 0x17b6, 0x17d3,\r
- 0x17d7, 0x17d7,\r
- 0x17dc, 0x17dd,\r
- 0x17e0, 0x17e9,\r
- 0x180b, 0x180d,\r
- 0x1810, 0x1819,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a9,\r
- 0x1900, 0x191c,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x1946, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19b0, 0x19c9,\r
- 0x19d0, 0x19d9,\r
- 0x1a00, 0x1a1b,\r
- 0x1d00, 0x1dc3,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fbc,\r
- 0x1fbe, 0x1fbe,\r
- 0x1fc2, 0x1fc4,\r
- 0x1fc6, 0x1fcc,\r
- 0x1fd0, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fe0, 0x1fec,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffc,\r
- 0x2071, 0x2071,\r
- 0x207f, 0x207f,\r
- 0x2090, 0x2094,\r
- 0x20d0, 0x20eb,\r
- 0x2102, 0x2102,\r
- 0x2107, 0x2107,\r
- 0x210a, 0x2113,\r
- 0x2115, 0x2115,\r
- 0x2119, 0x211d,\r
- 0x2124, 0x2124,\r
- 0x2126, 0x2126,\r
- 0x2128, 0x2128,\r
- 0x212a, 0x212d,\r
- 0x212f, 0x2131,\r
- 0x2133, 0x2139,\r
- 0x213c, 0x213f,\r
- 0x2145, 0x2149,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e,\r
- 0x2c80, 0x2ce4,\r
- 0x2d00, 0x2d25,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x3005, 0x3006,\r
- 0x302a, 0x302f,\r
- 0x3031, 0x3035,\r
- 0x303b, 0x303c,\r
- 0x3041, 0x3096,\r
- 0x3099, 0x309a,\r
- 0x309d, 0x309f,\r
- 0x30a1, 0x30fa,\r
- 0x30fc, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x31a0, 0x31b7,\r
- 0x31f0, 0x31ff,\r
- 0x3400, 0x4db5,\r
- 0x4e00, 0x9fbb,\r
- 0xa000, 0xa48c,\r
- 0xa800, 0xa827,\r
- 0xac00, 0xd7a3,\r
- 0xf900, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xfb1d, 0xfb28,\r
- 0xfb2a, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3d,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfb,\r
- 0xfe00, 0xfe0f,\r
- 0xfe20, 0xfe23,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xff10, 0xff19,\r
- 0xff21, 0xff3a,\r
- 0xff41, 0xff5a,\r
- 0xff66, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10300, 0x1031e,\r
- 0x10330, 0x10349,\r
- 0x10380, 0x1039d,\r
- 0x103a0, 0x103c3,\r
- 0x103c8, 0x103cf,\r
- 0x10400, 0x1049d,\r
- 0x104a0, 0x104a9,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a3f,\r
- 0x1d165, 0x1d169,\r
- 0x1d16d, 0x1d172,\r
- 0x1d17b, 0x1d182,\r
- 0x1d185, 0x1d18b,\r
- 0x1d1aa, 0x1d1ad,\r
- 0x1d242, 0x1d244,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d6c0,\r
- 0x1d6c2, 0x1d6da,\r
- 0x1d6dc, 0x1d6fa,\r
- 0x1d6fc, 0x1d714,\r
- 0x1d716, 0x1d734,\r
- 0x1d736, 0x1d74e,\r
- 0x1d750, 0x1d76e,\r
- 0x1d770, 0x1d788,\r
- 0x1d78a, 0x1d7a8,\r
- 0x1d7aa, 0x1d7c2,\r
- 0x1d7c4, 0x1d7c9,\r
- 0x1d7ce, 0x1d7ff,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d,\r
- 0xe0100, 0xe01ef\r
-}; /* CR_Alnum */\r
-\r
-/* 'ASCII': [[:ASCII:]] */\r
-static const OnigCodePoint CR_ASCII[] = {\r
- 1,\r
- 0x0000, 0x007f\r
-}; /* CR_ASCII */\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
-\r
-/* 'Any': - */\r
-static const OnigCodePoint CR_Any[] = {\r
- 1,\r
- 0x0000, 0x10ffff\r
-}; /* CR_Any */\r
-\r
-/* 'Assigned': - */\r
-static const OnigCodePoint CR_Assigned[] = {\r
- 420,\r
- 0x0000, 0x0241,\r
- 0x0250, 0x036f,\r
- 0x0374, 0x0375,\r
- 0x037a, 0x037a,\r
- 0x037e, 0x037e,\r
- 0x0384, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x0486,\r
- 0x0488, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x055f,\r
- 0x0561, 0x0587,\r
- 0x0589, 0x058a,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05c7,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f4,\r
- 0x0600, 0x0603,\r
- 0x060b, 0x0615,\r
- 0x061b, 0x061b,\r
- 0x061e, 0x061f,\r
- 0x0621, 0x063a,\r
- 0x0640, 0x065e,\r
- 0x0660, 0x070d,\r
- 0x070f, 0x074a,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07b1,\r
- 0x0901, 0x0939,\r
- 0x093c, 0x094d,\r
- 0x0950, 0x0954,\r
- 0x0958, 0x0970,\r
- 0x097d, 0x097d,\r
- 0x0981, 0x0983,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bc, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09ce,\r
- 0x09d7, 0x09d7,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e3,\r
- 0x09e6, 0x09fa,\r
- 0x0a01, 0x0a03,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a66, 0x0a74,\r
- 0x0a81, 0x0a83,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abc, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae3,\r
- 0x0ae6, 0x0aef,\r
- 0x0af1, 0x0af1,\r
- 0x0b01, 0x0b03,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3c, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b66, 0x0b71,\r
- 0x0b82, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0be6, 0x0bfa,\r
- 0x0c01, 0x0c03,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c60, 0x0c61,\r
- 0x0c66, 0x0c6f,\r
- 0x0c82, 0x0c83,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbc, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0ce6, 0x0cef,\r
- 0x0d02, 0x0d03,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d60, 0x0d61,\r
- 0x0d66, 0x0d6f,\r
- 0x0d82, 0x0d83,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df4,\r
- 0x0e01, 0x0e3a,\r
- 0x0e3f, 0x0e5b,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb9,\r
- 0x0ebb, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0ec8, 0x0ecd,\r
- 0x0ed0, 0x0ed9,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f71, 0x0f8b,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fbe, 0x0fcc,\r
- 0x0fcf, 0x0fd1,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1040, 0x1059,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fc,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x135f, 0x137c,\r
- 0x1380, 0x1399,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x1676,\r
- 0x1680, 0x169c,\r
- 0x16a0, 0x16f0,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1714,\r
- 0x1720, 0x1736,\r
- 0x1740, 0x1753,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1772, 0x1773,\r
- 0x1780, 0x17dd,\r
- 0x17e0, 0x17e9,\r
- 0x17f0, 0x17f9,\r
- 0x1800, 0x180e,\r
- 0x1810, 0x1819,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a9,\r
- 0x1900, 0x191c,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x1940, 0x1940,\r
- 0x1944, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19b0, 0x19c9,\r
- 0x19d0, 0x19d9,\r
- 0x19de, 0x1a1b,\r
- 0x1a1e, 0x1a1f,\r
- 0x1d00, 0x1dc3,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fc4,\r
- 0x1fc6, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fdd, 0x1fef,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffe,\r
- 0x2000, 0x2063,\r
- 0x206a, 0x2071,\r
- 0x2074, 0x208e,\r
- 0x2090, 0x2094,\r
- 0x20a0, 0x20b5,\r
- 0x20d0, 0x20eb,\r
- 0x2100, 0x214c,\r
- 0x2153, 0x2183,\r
- 0x2190, 0x23db,\r
- 0x2400, 0x2426,\r
- 0x2440, 0x244a,\r
- 0x2460, 0x269c,\r
- 0x26a0, 0x26b1,\r
- 0x2701, 0x2704,\r
- 0x2706, 0x2709,\r
- 0x270c, 0x2727,\r
- 0x2729, 0x274b,\r
- 0x274d, 0x274d,\r
- 0x274f, 0x2752,\r
- 0x2756, 0x2756,\r
- 0x2758, 0x275e,\r
- 0x2761, 0x2794,\r
- 0x2798, 0x27af,\r
- 0x27b1, 0x27be,\r
- 0x27c0, 0x27c6,\r
- 0x27d0, 0x27eb,\r
- 0x27f0, 0x2b13,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e,\r
- 0x2c80, 0x2cea,\r
- 0x2cf9, 0x2d25,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x2e00, 0x2e17,\r
- 0x2e1c, 0x2e1d,\r
- 0x2e80, 0x2e99,\r
- 0x2e9b, 0x2ef3,\r
- 0x2f00, 0x2fd5,\r
- 0x2ff0, 0x2ffb,\r
- 0x3000, 0x303f,\r
- 0x3041, 0x3096,\r
- 0x3099, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x3190, 0x31b7,\r
- 0x31c0, 0x31cf,\r
- 0x31f0, 0x321e,\r
- 0x3220, 0x3243,\r
- 0x3250, 0x32fe,\r
- 0x3300, 0x4db5,\r
- 0x4dc0, 0x9fbb,\r
- 0xa000, 0xa48c,\r
- 0xa490, 0xa4c6,\r
- 0xa700, 0xa716,\r
- 0xa800, 0xa82b,\r
- 0xac00, 0xd7a3,\r
- 0xd800, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xfb1d, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3f,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfd,\r
- 0xfe00, 0xfe19,\r
- 0xfe20, 0xfe23,\r
- 0xfe30, 0xfe52,\r
- 0xfe54, 0xfe66,\r
- 0xfe68, 0xfe6b,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xfeff, 0xfeff,\r
- 0xff01, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0xffe0, 0xffe6,\r
- 0xffe8, 0xffee,\r
- 0xfff9, 0xfffd,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10100, 0x10102,\r
- 0x10107, 0x10133,\r
- 0x10137, 0x1018a,\r
- 0x10300, 0x1031e,\r
- 0x10320, 0x10323,\r
- 0x10330, 0x1034a,\r
- 0x10380, 0x1039d,\r
- 0x1039f, 0x103c3,\r
- 0x103c8, 0x103d5,\r
- 0x10400, 0x1049d,\r
- 0x104a0, 0x104a9,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a47,\r
- 0x10a50, 0x10a58,\r
- 0x1d000, 0x1d0f5,\r
- 0x1d100, 0x1d126,\r
- 0x1d12a, 0x1d1dd,\r
- 0x1d200, 0x1d245,\r
- 0x1d300, 0x1d356,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d7c9,\r
- 0x1d7ce, 0x1d7ff,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d,\r
- 0xe0001, 0xe0001,\r
- 0xe0020, 0xe007f,\r
- 0xe0100, 0xe01ef,\r
- 0xf0000, 0xffffd,\r
- 0x100000, 0x10fffd\r
-}; /* CR_Assigned */\r
-\r
-/* 'C': Major Category */\r
-static const OnigCodePoint CR_C[] = {\r
- 422,\r
- 0x0000, 0x001f,\r
- 0x007f, 0x009f,\r
- 0x00ad, 0x00ad,\r
- 0x0242, 0x024f,\r
- 0x0370, 0x0373,\r
- 0x0376, 0x0379,\r
- 0x037b, 0x037d,\r
- 0x037f, 0x0383,\r
- 0x038b, 0x038b,\r
- 0x038d, 0x038d,\r
- 0x03a2, 0x03a2,\r
- 0x03cf, 0x03cf,\r
- 0x0487, 0x0487,\r
- 0x04cf, 0x04cf,\r
- 0x04fa, 0x04ff,\r
- 0x0510, 0x0530,\r
- 0x0557, 0x0558,\r
- 0x0560, 0x0560,\r
- 0x0588, 0x0588,\r
- 0x058b, 0x0590,\r
- 0x05ba, 0x05ba,\r
- 0x05c8, 0x05cf,\r
- 0x05eb, 0x05ef,\r
- 0x05f5, 0x060a,\r
- 0x0616, 0x061a,\r
- 0x061c, 0x061d,\r
- 0x0620, 0x0620,\r
- 0x063b, 0x063f,\r
- 0x065f, 0x065f,\r
- 0x06dd, 0x06dd,\r
- 0x070e, 0x070f,\r
- 0x074b, 0x074c,\r
- 0x076e, 0x077f,\r
- 0x07b2, 0x0900,\r
- 0x093a, 0x093b,\r
- 0x094e, 0x094f,\r
- 0x0955, 0x0957,\r
- 0x0971, 0x097c,\r
- 0x097e, 0x0980,\r
- 0x0984, 0x0984,\r
- 0x098d, 0x098e,\r
- 0x0991, 0x0992,\r
- 0x09a9, 0x09a9,\r
- 0x09b1, 0x09b1,\r
- 0x09b3, 0x09b5,\r
- 0x09ba, 0x09bb,\r
- 0x09c5, 0x09c6,\r
- 0x09c9, 0x09ca,\r
- 0x09cf, 0x09d6,\r
- 0x09d8, 0x09db,\r
- 0x09de, 0x09de,\r
- 0x09e4, 0x09e5,\r
- 0x09fb, 0x0a00,\r
- 0x0a04, 0x0a04,\r
- 0x0a0b, 0x0a0e,\r
- 0x0a11, 0x0a12,\r
- 0x0a29, 0x0a29,\r
- 0x0a31, 0x0a31,\r
- 0x0a34, 0x0a34,\r
- 0x0a37, 0x0a37,\r
- 0x0a3a, 0x0a3b,\r
- 0x0a3d, 0x0a3d,\r
- 0x0a43, 0x0a46,\r
- 0x0a49, 0x0a4a,\r
- 0x0a4e, 0x0a58,\r
- 0x0a5d, 0x0a5d,\r
- 0x0a5f, 0x0a65,\r
- 0x0a75, 0x0a80,\r
- 0x0a84, 0x0a84,\r
- 0x0a8e, 0x0a8e,\r
- 0x0a92, 0x0a92,\r
- 0x0aa9, 0x0aa9,\r
- 0x0ab1, 0x0ab1,\r
- 0x0ab4, 0x0ab4,\r
- 0x0aba, 0x0abb,\r
- 0x0ac6, 0x0ac6,\r
- 0x0aca, 0x0aca,\r
- 0x0ace, 0x0acf,\r
- 0x0ad1, 0x0adf,\r
- 0x0ae4, 0x0ae5,\r
- 0x0af0, 0x0af0,\r
- 0x0af2, 0x0b00,\r
- 0x0b04, 0x0b04,\r
- 0x0b0d, 0x0b0e,\r
- 0x0b11, 0x0b12,\r
- 0x0b29, 0x0b29,\r
- 0x0b31, 0x0b31,\r
- 0x0b34, 0x0b34,\r
- 0x0b3a, 0x0b3b,\r
- 0x0b44, 0x0b46,\r
- 0x0b49, 0x0b4a,\r
- 0x0b4e, 0x0b55,\r
- 0x0b58, 0x0b5b,\r
- 0x0b5e, 0x0b5e,\r
- 0x0b62, 0x0b65,\r
- 0x0b72, 0x0b81,\r
- 0x0b84, 0x0b84,\r
- 0x0b8b, 0x0b8d,\r
- 0x0b91, 0x0b91,\r
- 0x0b96, 0x0b98,\r
- 0x0b9b, 0x0b9b,\r
- 0x0b9d, 0x0b9d,\r
- 0x0ba0, 0x0ba2,\r
- 0x0ba5, 0x0ba7,\r
- 0x0bab, 0x0bad,\r
- 0x0bba, 0x0bbd,\r
- 0x0bc3, 0x0bc5,\r
- 0x0bc9, 0x0bc9,\r
- 0x0bce, 0x0bd6,\r
- 0x0bd8, 0x0be5,\r
- 0x0bfb, 0x0c00,\r
- 0x0c04, 0x0c04,\r
- 0x0c0d, 0x0c0d,\r
- 0x0c11, 0x0c11,\r
- 0x0c29, 0x0c29,\r
- 0x0c34, 0x0c34,\r
- 0x0c3a, 0x0c3d,\r
- 0x0c45, 0x0c45,\r
- 0x0c49, 0x0c49,\r
- 0x0c4e, 0x0c54,\r
- 0x0c57, 0x0c5f,\r
- 0x0c62, 0x0c65,\r
- 0x0c70, 0x0c81,\r
- 0x0c84, 0x0c84,\r
- 0x0c8d, 0x0c8d,\r
- 0x0c91, 0x0c91,\r
- 0x0ca9, 0x0ca9,\r
- 0x0cb4, 0x0cb4,\r
- 0x0cba, 0x0cbb,\r
- 0x0cc5, 0x0cc5,\r
- 0x0cc9, 0x0cc9,\r
- 0x0cce, 0x0cd4,\r
- 0x0cd7, 0x0cdd,\r
- 0x0cdf, 0x0cdf,\r
- 0x0ce2, 0x0ce5,\r
- 0x0cf0, 0x0d01,\r
- 0x0d04, 0x0d04,\r
- 0x0d0d, 0x0d0d,\r
- 0x0d11, 0x0d11,\r
- 0x0d29, 0x0d29,\r
- 0x0d3a, 0x0d3d,\r
- 0x0d44, 0x0d45,\r
- 0x0d49, 0x0d49,\r
- 0x0d4e, 0x0d56,\r
- 0x0d58, 0x0d5f,\r
- 0x0d62, 0x0d65,\r
- 0x0d70, 0x0d81,\r
- 0x0d84, 0x0d84,\r
- 0x0d97, 0x0d99,\r
- 0x0db2, 0x0db2,\r
- 0x0dbc, 0x0dbc,\r
- 0x0dbe, 0x0dbf,\r
- 0x0dc7, 0x0dc9,\r
- 0x0dcb, 0x0dce,\r
- 0x0dd5, 0x0dd5,\r
- 0x0dd7, 0x0dd7,\r
- 0x0de0, 0x0df1,\r
- 0x0df5, 0x0e00,\r
- 0x0e3b, 0x0e3e,\r
- 0x0e5c, 0x0e80,\r
- 0x0e83, 0x0e83,\r
- 0x0e85, 0x0e86,\r
- 0x0e89, 0x0e89,\r
- 0x0e8b, 0x0e8c,\r
- 0x0e8e, 0x0e93,\r
- 0x0e98, 0x0e98,\r
- 0x0ea0, 0x0ea0,\r
- 0x0ea4, 0x0ea4,\r
- 0x0ea6, 0x0ea6,\r
- 0x0ea8, 0x0ea9,\r
- 0x0eac, 0x0eac,\r
- 0x0eba, 0x0eba,\r
- 0x0ebe, 0x0ebf,\r
- 0x0ec5, 0x0ec5,\r
- 0x0ec7, 0x0ec7,\r
- 0x0ece, 0x0ecf,\r
- 0x0eda, 0x0edb,\r
- 0x0ede, 0x0eff,\r
- 0x0f48, 0x0f48,\r
- 0x0f6b, 0x0f70,\r
- 0x0f8c, 0x0f8f,\r
- 0x0f98, 0x0f98,\r
- 0x0fbd, 0x0fbd,\r
- 0x0fcd, 0x0fce,\r
- 0x0fd2, 0x0fff,\r
- 0x1022, 0x1022,\r
- 0x1028, 0x1028,\r
- 0x102b, 0x102b,\r
- 0x1033, 0x1035,\r
- 0x103a, 0x103f,\r
- 0x105a, 0x109f,\r
- 0x10c6, 0x10cf,\r
- 0x10fd, 0x10ff,\r
- 0x115a, 0x115e,\r
- 0x11a3, 0x11a7,\r
- 0x11fa, 0x11ff,\r
- 0x1249, 0x1249,\r
- 0x124e, 0x124f,\r
- 0x1257, 0x1257,\r
- 0x1259, 0x1259,\r
- 0x125e, 0x125f,\r
- 0x1289, 0x1289,\r
- 0x128e, 0x128f,\r
- 0x12b1, 0x12b1,\r
- 0x12b6, 0x12b7,\r
- 0x12bf, 0x12bf,\r
- 0x12c1, 0x12c1,\r
- 0x12c6, 0x12c7,\r
- 0x12d7, 0x12d7,\r
- 0x1311, 0x1311,\r
- 0x1316, 0x1317,\r
- 0x135b, 0x135e,\r
- 0x137d, 0x137f,\r
- 0x139a, 0x139f,\r
- 0x13f5, 0x1400,\r
- 0x1677, 0x167f,\r
- 0x169d, 0x169f,\r
- 0x16f1, 0x16ff,\r
- 0x170d, 0x170d,\r
- 0x1715, 0x171f,\r
- 0x1737, 0x173f,\r
- 0x1754, 0x175f,\r
- 0x176d, 0x176d,\r
- 0x1771, 0x1771,\r
- 0x1774, 0x177f,\r
- 0x17b4, 0x17b5,\r
- 0x17de, 0x17df,\r
- 0x17ea, 0x17ef,\r
- 0x17fa, 0x17ff,\r
- 0x180f, 0x180f,\r
- 0x181a, 0x181f,\r
- 0x1878, 0x187f,\r
- 0x18aa, 0x18ff,\r
- 0x191d, 0x191f,\r
- 0x192c, 0x192f,\r
- 0x193c, 0x193f,\r
- 0x1941, 0x1943,\r
- 0x196e, 0x196f,\r
- 0x1975, 0x197f,\r
- 0x19aa, 0x19af,\r
- 0x19ca, 0x19cf,\r
- 0x19da, 0x19dd,\r
- 0x1a1c, 0x1a1d,\r
- 0x1a20, 0x1cff,\r
- 0x1dc4, 0x1dff,\r
- 0x1e9c, 0x1e9f,\r
- 0x1efa, 0x1eff,\r
- 0x1f16, 0x1f17,\r
- 0x1f1e, 0x1f1f,\r
- 0x1f46, 0x1f47,\r
- 0x1f4e, 0x1f4f,\r
- 0x1f58, 0x1f58,\r
- 0x1f5a, 0x1f5a,\r
- 0x1f5c, 0x1f5c,\r
- 0x1f5e, 0x1f5e,\r
- 0x1f7e, 0x1f7f,\r
- 0x1fb5, 0x1fb5,\r
- 0x1fc5, 0x1fc5,\r
- 0x1fd4, 0x1fd5,\r
- 0x1fdc, 0x1fdc,\r
- 0x1ff0, 0x1ff1,\r
- 0x1ff5, 0x1ff5,\r
- 0x1fff, 0x1fff,\r
- 0x200b, 0x200f,\r
- 0x202a, 0x202e,\r
- 0x2060, 0x206f,\r
- 0x2072, 0x2073,\r
- 0x208f, 0x208f,\r
- 0x2095, 0x209f,\r
- 0x20b6, 0x20cf,\r
- 0x20ec, 0x20ff,\r
- 0x214d, 0x2152,\r
- 0x2184, 0x218f,\r
- 0x23dc, 0x23ff,\r
- 0x2427, 0x243f,\r
- 0x244b, 0x245f,\r
- 0x269d, 0x269f,\r
- 0x26b2, 0x2700,\r
- 0x2705, 0x2705,\r
- 0x270a, 0x270b,\r
- 0x2728, 0x2728,\r
- 0x274c, 0x274c,\r
- 0x274e, 0x274e,\r
- 0x2753, 0x2755,\r
- 0x2757, 0x2757,\r
- 0x275f, 0x2760,\r
- 0x2795, 0x2797,\r
- 0x27b0, 0x27b0,\r
- 0x27bf, 0x27bf,\r
- 0x27c7, 0x27cf,\r
- 0x27ec, 0x27ef,\r
- 0x2b14, 0x2bff,\r
- 0x2c2f, 0x2c2f,\r
- 0x2c5f, 0x2c7f,\r
- 0x2ceb, 0x2cf8,\r
- 0x2d26, 0x2d2f,\r
- 0x2d66, 0x2d6e,\r
- 0x2d70, 0x2d7f,\r
- 0x2d97, 0x2d9f,\r
- 0x2da7, 0x2da7,\r
- 0x2daf, 0x2daf,\r
- 0x2db7, 0x2db7,\r
- 0x2dbf, 0x2dbf,\r
- 0x2dc7, 0x2dc7,\r
- 0x2dcf, 0x2dcf,\r
- 0x2dd7, 0x2dd7,\r
- 0x2ddf, 0x2dff,\r
- 0x2e18, 0x2e1b,\r
- 0x2e1e, 0x2e7f,\r
- 0x2e9a, 0x2e9a,\r
- 0x2ef4, 0x2eff,\r
- 0x2fd6, 0x2fef,\r
- 0x2ffc, 0x2fff,\r
- 0x3040, 0x3040,\r
- 0x3097, 0x3098,\r
- 0x3100, 0x3104,\r
- 0x312d, 0x3130,\r
- 0x318f, 0x318f,\r
- 0x31b8, 0x31bf,\r
- 0x31d0, 0x31ef,\r
- 0x321f, 0x321f,\r
- 0x3244, 0x324f,\r
- 0x32ff, 0x32ff,\r
- 0x4db6, 0x4dbf,\r
- 0x9fbc, 0x9fff,\r
- 0xa48d, 0xa48f,\r
- 0xa4c7, 0xa6ff,\r
- 0xa717, 0xa7ff,\r
- 0xa82c, 0xabff,\r
- 0xd7a4, 0xf8ff,\r
- 0xfa2e, 0xfa2f,\r
- 0xfa6b, 0xfa6f,\r
- 0xfada, 0xfaff,\r
- 0xfb07, 0xfb12,\r
- 0xfb18, 0xfb1c,\r
- 0xfb37, 0xfb37,\r
- 0xfb3d, 0xfb3d,\r
- 0xfb3f, 0xfb3f,\r
- 0xfb42, 0xfb42,\r
- 0xfb45, 0xfb45,\r
- 0xfbb2, 0xfbd2,\r
- 0xfd40, 0xfd4f,\r
- 0xfd90, 0xfd91,\r
- 0xfdc8, 0xfdef,\r
- 0xfdfe, 0xfdff,\r
- 0xfe1a, 0xfe1f,\r
- 0xfe24, 0xfe2f,\r
- 0xfe53, 0xfe53,\r
- 0xfe67, 0xfe67,\r
- 0xfe6c, 0xfe6f,\r
- 0xfe75, 0xfe75,\r
- 0xfefd, 0xff00,\r
- 0xffbf, 0xffc1,\r
- 0xffc8, 0xffc9,\r
- 0xffd0, 0xffd1,\r
- 0xffd8, 0xffd9,\r
- 0xffdd, 0xffdf,\r
- 0xffe7, 0xffe7,\r
- 0xffef, 0xfffb,\r
- 0xfffe, 0xffff,\r
- 0x1000c, 0x1000c,\r
- 0x10027, 0x10027,\r
- 0x1003b, 0x1003b,\r
- 0x1003e, 0x1003e,\r
- 0x1004e, 0x1004f,\r
- 0x1005e, 0x1007f,\r
- 0x100fb, 0x100ff,\r
- 0x10103, 0x10106,\r
- 0x10134, 0x10136,\r
- 0x1018b, 0x102ff,\r
- 0x1031f, 0x1031f,\r
- 0x10324, 0x1032f,\r
- 0x1034b, 0x1037f,\r
- 0x1039e, 0x1039e,\r
- 0x103c4, 0x103c7,\r
- 0x103d6, 0x103ff,\r
- 0x1049e, 0x1049f,\r
- 0x104aa, 0x107ff,\r
- 0x10806, 0x10807,\r
- 0x10809, 0x10809,\r
- 0x10836, 0x10836,\r
- 0x10839, 0x1083b,\r
- 0x1083d, 0x1083e,\r
- 0x10840, 0x109ff,\r
- 0x10a04, 0x10a04,\r
- 0x10a07, 0x10a0b,\r
- 0x10a14, 0x10a14,\r
- 0x10a18, 0x10a18,\r
- 0x10a34, 0x10a37,\r
- 0x10a3b, 0x10a3e,\r
- 0x10a48, 0x10a4f,\r
- 0x10a59, 0x1cfff,\r
- 0x1d0f6, 0x1d0ff,\r
- 0x1d127, 0x1d129,\r
- 0x1d173, 0x1d17a,\r
- 0x1d1de, 0x1d1ff,\r
- 0x1d246, 0x1d2ff,\r
- 0x1d357, 0x1d3ff,\r
- 0x1d455, 0x1d455,\r
- 0x1d49d, 0x1d49d,\r
- 0x1d4a0, 0x1d4a1,\r
- 0x1d4a3, 0x1d4a4,\r
- 0x1d4a7, 0x1d4a8,\r
- 0x1d4ad, 0x1d4ad,\r
- 0x1d4ba, 0x1d4ba,\r
- 0x1d4bc, 0x1d4bc,\r
- 0x1d4c4, 0x1d4c4,\r
- 0x1d506, 0x1d506,\r
- 0x1d50b, 0x1d50c,\r
- 0x1d515, 0x1d515,\r
- 0x1d51d, 0x1d51d,\r
- 0x1d53a, 0x1d53a,\r
- 0x1d53f, 0x1d53f,\r
- 0x1d545, 0x1d545,\r
- 0x1d547, 0x1d549,\r
- 0x1d551, 0x1d551,\r
- 0x1d6a6, 0x1d6a7,\r
- 0x1d7ca, 0x1d7cd,\r
- 0x1d800, 0x1ffff,\r
- 0x2a6d7, 0x2f7ff,\r
- 0x2fa1e, 0xe00ff,\r
- 0xe01f0, 0x10ffff\r
-}; /* CR_C */\r
-\r
-/* 'Cc': General Category */\r
-static const OnigCodePoint CR_Cc[] = {\r
- 2,\r
- 0x0000, 0x001f,\r
- 0x007f, 0x009f\r
-}; /* CR_Cc */\r
-\r
-/* 'Cf': General Category */\r
-static const OnigCodePoint CR_Cf[] = {\r
- 14,\r
- 0x00ad, 0x00ad,\r
- 0x0600, 0x0603,\r
- 0x06dd, 0x06dd,\r
- 0x070f, 0x070f,\r
- 0x17b4, 0x17b5,\r
- 0x200b, 0x200f,\r
- 0x202a, 0x202e,\r
- 0x2060, 0x2063,\r
- 0x206a, 0x206f,\r
- 0xfeff, 0xfeff,\r
- 0xfff9, 0xfffb,\r
- 0x1d173, 0x1d17a,\r
- 0xe0001, 0xe0001,\r
- 0xe0020, 0xe007f\r
-}; /* CR_Cf */\r
-\r
-/* 'Cn': General Category */\r
-static const OnigCodePoint CR_Cn[] = {\r
- 420,\r
- 0x0242, 0x024f,\r
- 0x0370, 0x0373,\r
- 0x0376, 0x0379,\r
- 0x037b, 0x037d,\r
- 0x037f, 0x0383,\r
- 0x038b, 0x038b,\r
- 0x038d, 0x038d,\r
- 0x03a2, 0x03a2,\r
- 0x03cf, 0x03cf,\r
- 0x0487, 0x0487,\r
- 0x04cf, 0x04cf,\r
- 0x04fa, 0x04ff,\r
- 0x0510, 0x0530,\r
- 0x0557, 0x0558,\r
- 0x0560, 0x0560,\r
- 0x0588, 0x0588,\r
- 0x058b, 0x0590,\r
- 0x05ba, 0x05ba,\r
- 0x05c8, 0x05cf,\r
- 0x05eb, 0x05ef,\r
- 0x05f5, 0x05ff,\r
- 0x0604, 0x060a,\r
- 0x0616, 0x061a,\r
- 0x061c, 0x061d,\r
- 0x0620, 0x0620,\r
- 0x063b, 0x063f,\r
- 0x065f, 0x065f,\r
- 0x070e, 0x070e,\r
- 0x074b, 0x074c,\r
- 0x076e, 0x077f,\r
- 0x07b2, 0x0900,\r
- 0x093a, 0x093b,\r
- 0x094e, 0x094f,\r
- 0x0955, 0x0957,\r
- 0x0971, 0x097c,\r
- 0x097e, 0x0980,\r
- 0x0984, 0x0984,\r
- 0x098d, 0x098e,\r
- 0x0991, 0x0992,\r
- 0x09a9, 0x09a9,\r
- 0x09b1, 0x09b1,\r
- 0x09b3, 0x09b5,\r
- 0x09ba, 0x09bb,\r
- 0x09c5, 0x09c6,\r
- 0x09c9, 0x09ca,\r
- 0x09cf, 0x09d6,\r
- 0x09d8, 0x09db,\r
- 0x09de, 0x09de,\r
- 0x09e4, 0x09e5,\r
- 0x09fb, 0x0a00,\r
- 0x0a04, 0x0a04,\r
- 0x0a0b, 0x0a0e,\r
- 0x0a11, 0x0a12,\r
- 0x0a29, 0x0a29,\r
- 0x0a31, 0x0a31,\r
- 0x0a34, 0x0a34,\r
- 0x0a37, 0x0a37,\r
- 0x0a3a, 0x0a3b,\r
- 0x0a3d, 0x0a3d,\r
- 0x0a43, 0x0a46,\r
- 0x0a49, 0x0a4a,\r
- 0x0a4e, 0x0a58,\r
- 0x0a5d, 0x0a5d,\r
- 0x0a5f, 0x0a65,\r
- 0x0a75, 0x0a80,\r
- 0x0a84, 0x0a84,\r
- 0x0a8e, 0x0a8e,\r
- 0x0a92, 0x0a92,\r
- 0x0aa9, 0x0aa9,\r
- 0x0ab1, 0x0ab1,\r
- 0x0ab4, 0x0ab4,\r
- 0x0aba, 0x0abb,\r
- 0x0ac6, 0x0ac6,\r
- 0x0aca, 0x0aca,\r
- 0x0ace, 0x0acf,\r
- 0x0ad1, 0x0adf,\r
- 0x0ae4, 0x0ae5,\r
- 0x0af0, 0x0af0,\r
- 0x0af2, 0x0b00,\r
- 0x0b04, 0x0b04,\r
- 0x0b0d, 0x0b0e,\r
- 0x0b11, 0x0b12,\r
- 0x0b29, 0x0b29,\r
- 0x0b31, 0x0b31,\r
- 0x0b34, 0x0b34,\r
- 0x0b3a, 0x0b3b,\r
- 0x0b44, 0x0b46,\r
- 0x0b49, 0x0b4a,\r
- 0x0b4e, 0x0b55,\r
- 0x0b58, 0x0b5b,\r
- 0x0b5e, 0x0b5e,\r
- 0x0b62, 0x0b65,\r
- 0x0b72, 0x0b81,\r
- 0x0b84, 0x0b84,\r
- 0x0b8b, 0x0b8d,\r
- 0x0b91, 0x0b91,\r
- 0x0b96, 0x0b98,\r
- 0x0b9b, 0x0b9b,\r
- 0x0b9d, 0x0b9d,\r
- 0x0ba0, 0x0ba2,\r
- 0x0ba5, 0x0ba7,\r
- 0x0bab, 0x0bad,\r
- 0x0bba, 0x0bbd,\r
- 0x0bc3, 0x0bc5,\r
- 0x0bc9, 0x0bc9,\r
- 0x0bce, 0x0bd6,\r
- 0x0bd8, 0x0be5,\r
- 0x0bfb, 0x0c00,\r
- 0x0c04, 0x0c04,\r
- 0x0c0d, 0x0c0d,\r
- 0x0c11, 0x0c11,\r
- 0x0c29, 0x0c29,\r
- 0x0c34, 0x0c34,\r
- 0x0c3a, 0x0c3d,\r
- 0x0c45, 0x0c45,\r
- 0x0c49, 0x0c49,\r
- 0x0c4e, 0x0c54,\r
- 0x0c57, 0x0c5f,\r
- 0x0c62, 0x0c65,\r
- 0x0c70, 0x0c81,\r
- 0x0c84, 0x0c84,\r
- 0x0c8d, 0x0c8d,\r
- 0x0c91, 0x0c91,\r
- 0x0ca9, 0x0ca9,\r
- 0x0cb4, 0x0cb4,\r
- 0x0cba, 0x0cbb,\r
- 0x0cc5, 0x0cc5,\r
- 0x0cc9, 0x0cc9,\r
- 0x0cce, 0x0cd4,\r
- 0x0cd7, 0x0cdd,\r
- 0x0cdf, 0x0cdf,\r
- 0x0ce2, 0x0ce5,\r
- 0x0cf0, 0x0d01,\r
- 0x0d04, 0x0d04,\r
- 0x0d0d, 0x0d0d,\r
- 0x0d11, 0x0d11,\r
- 0x0d29, 0x0d29,\r
- 0x0d3a, 0x0d3d,\r
- 0x0d44, 0x0d45,\r
- 0x0d49, 0x0d49,\r
- 0x0d4e, 0x0d56,\r
- 0x0d58, 0x0d5f,\r
- 0x0d62, 0x0d65,\r
- 0x0d70, 0x0d81,\r
- 0x0d84, 0x0d84,\r
- 0x0d97, 0x0d99,\r
- 0x0db2, 0x0db2,\r
- 0x0dbc, 0x0dbc,\r
- 0x0dbe, 0x0dbf,\r
- 0x0dc7, 0x0dc9,\r
- 0x0dcb, 0x0dce,\r
- 0x0dd5, 0x0dd5,\r
- 0x0dd7, 0x0dd7,\r
- 0x0de0, 0x0df1,\r
- 0x0df5, 0x0e00,\r
- 0x0e3b, 0x0e3e,\r
- 0x0e5c, 0x0e80,\r
- 0x0e83, 0x0e83,\r
- 0x0e85, 0x0e86,\r
- 0x0e89, 0x0e89,\r
- 0x0e8b, 0x0e8c,\r
- 0x0e8e, 0x0e93,\r
- 0x0e98, 0x0e98,\r
- 0x0ea0, 0x0ea0,\r
- 0x0ea4, 0x0ea4,\r
- 0x0ea6, 0x0ea6,\r
- 0x0ea8, 0x0ea9,\r
- 0x0eac, 0x0eac,\r
- 0x0eba, 0x0eba,\r
- 0x0ebe, 0x0ebf,\r
- 0x0ec5, 0x0ec5,\r
- 0x0ec7, 0x0ec7,\r
- 0x0ece, 0x0ecf,\r
- 0x0eda, 0x0edb,\r
- 0x0ede, 0x0eff,\r
- 0x0f48, 0x0f48,\r
- 0x0f6b, 0x0f70,\r
- 0x0f8c, 0x0f8f,\r
- 0x0f98, 0x0f98,\r
- 0x0fbd, 0x0fbd,\r
- 0x0fcd, 0x0fce,\r
- 0x0fd2, 0x0fff,\r
- 0x1022, 0x1022,\r
- 0x1028, 0x1028,\r
- 0x102b, 0x102b,\r
- 0x1033, 0x1035,\r
- 0x103a, 0x103f,\r
- 0x105a, 0x109f,\r
- 0x10c6, 0x10cf,\r
- 0x10fd, 0x10ff,\r
- 0x115a, 0x115e,\r
- 0x11a3, 0x11a7,\r
- 0x11fa, 0x11ff,\r
- 0x1249, 0x1249,\r
- 0x124e, 0x124f,\r
- 0x1257, 0x1257,\r
- 0x1259, 0x1259,\r
- 0x125e, 0x125f,\r
- 0x1289, 0x1289,\r
- 0x128e, 0x128f,\r
- 0x12b1, 0x12b1,\r
- 0x12b6, 0x12b7,\r
- 0x12bf, 0x12bf,\r
- 0x12c1, 0x12c1,\r
- 0x12c6, 0x12c7,\r
- 0x12d7, 0x12d7,\r
- 0x1311, 0x1311,\r
- 0x1316, 0x1317,\r
- 0x135b, 0x135e,\r
- 0x137d, 0x137f,\r
- 0x139a, 0x139f,\r
- 0x13f5, 0x1400,\r
- 0x1677, 0x167f,\r
- 0x169d, 0x169f,\r
- 0x16f1, 0x16ff,\r
- 0x170d, 0x170d,\r
- 0x1715, 0x171f,\r
- 0x1737, 0x173f,\r
- 0x1754, 0x175f,\r
- 0x176d, 0x176d,\r
- 0x1771, 0x1771,\r
- 0x1774, 0x177f,\r
- 0x17de, 0x17df,\r
- 0x17ea, 0x17ef,\r
- 0x17fa, 0x17ff,\r
- 0x180f, 0x180f,\r
- 0x181a, 0x181f,\r
- 0x1878, 0x187f,\r
- 0x18aa, 0x18ff,\r
- 0x191d, 0x191f,\r
- 0x192c, 0x192f,\r
- 0x193c, 0x193f,\r
- 0x1941, 0x1943,\r
- 0x196e, 0x196f,\r
- 0x1975, 0x197f,\r
- 0x19aa, 0x19af,\r
- 0x19ca, 0x19cf,\r
- 0x19da, 0x19dd,\r
- 0x1a1c, 0x1a1d,\r
- 0x1a20, 0x1cff,\r
- 0x1dc4, 0x1dff,\r
- 0x1e9c, 0x1e9f,\r
- 0x1efa, 0x1eff,\r
- 0x1f16, 0x1f17,\r
- 0x1f1e, 0x1f1f,\r
- 0x1f46, 0x1f47,\r
- 0x1f4e, 0x1f4f,\r
- 0x1f58, 0x1f58,\r
- 0x1f5a, 0x1f5a,\r
- 0x1f5c, 0x1f5c,\r
- 0x1f5e, 0x1f5e,\r
- 0x1f7e, 0x1f7f,\r
- 0x1fb5, 0x1fb5,\r
- 0x1fc5, 0x1fc5,\r
- 0x1fd4, 0x1fd5,\r
- 0x1fdc, 0x1fdc,\r
- 0x1ff0, 0x1ff1,\r
- 0x1ff5, 0x1ff5,\r
- 0x1fff, 0x1fff,\r
- 0x2064, 0x2069,\r
- 0x2072, 0x2073,\r
- 0x208f, 0x208f,\r
- 0x2095, 0x209f,\r
- 0x20b6, 0x20cf,\r
- 0x20ec, 0x20ff,\r
- 0x214d, 0x2152,\r
- 0x2184, 0x218f,\r
- 0x23dc, 0x23ff,\r
- 0x2427, 0x243f,\r
- 0x244b, 0x245f,\r
- 0x269d, 0x269f,\r
- 0x26b2, 0x2700,\r
- 0x2705, 0x2705,\r
- 0x270a, 0x270b,\r
- 0x2728, 0x2728,\r
- 0x274c, 0x274c,\r
- 0x274e, 0x274e,\r
- 0x2753, 0x2755,\r
- 0x2757, 0x2757,\r
- 0x275f, 0x2760,\r
- 0x2795, 0x2797,\r
- 0x27b0, 0x27b0,\r
- 0x27bf, 0x27bf,\r
- 0x27c7, 0x27cf,\r
- 0x27ec, 0x27ef,\r
- 0x2b14, 0x2bff,\r
- 0x2c2f, 0x2c2f,\r
- 0x2c5f, 0x2c7f,\r
- 0x2ceb, 0x2cf8,\r
- 0x2d26, 0x2d2f,\r
- 0x2d66, 0x2d6e,\r
- 0x2d70, 0x2d7f,\r
- 0x2d97, 0x2d9f,\r
- 0x2da7, 0x2da7,\r
- 0x2daf, 0x2daf,\r
- 0x2db7, 0x2db7,\r
- 0x2dbf, 0x2dbf,\r
- 0x2dc7, 0x2dc7,\r
- 0x2dcf, 0x2dcf,\r
- 0x2dd7, 0x2dd7,\r
- 0x2ddf, 0x2dff,\r
- 0x2e18, 0x2e1b,\r
- 0x2e1e, 0x2e7f,\r
- 0x2e9a, 0x2e9a,\r
- 0x2ef4, 0x2eff,\r
- 0x2fd6, 0x2fef,\r
- 0x2ffc, 0x2fff,\r
- 0x3040, 0x3040,\r
- 0x3097, 0x3098,\r
- 0x3100, 0x3104,\r
- 0x312d, 0x3130,\r
- 0x318f, 0x318f,\r
- 0x31b8, 0x31bf,\r
- 0x31d0, 0x31ef,\r
- 0x321f, 0x321f,\r
- 0x3244, 0x324f,\r
- 0x32ff, 0x32ff,\r
- 0x4db6, 0x4dbf,\r
- 0x9fbc, 0x9fff,\r
- 0xa48d, 0xa48f,\r
- 0xa4c7, 0xa6ff,\r
- 0xa717, 0xa7ff,\r
- 0xa82c, 0xabff,\r
- 0xd7a4, 0xd7ff,\r
- 0xfa2e, 0xfa2f,\r
- 0xfa6b, 0xfa6f,\r
- 0xfada, 0xfaff,\r
- 0xfb07, 0xfb12,\r
- 0xfb18, 0xfb1c,\r
- 0xfb37, 0xfb37,\r
- 0xfb3d, 0xfb3d,\r
- 0xfb3f, 0xfb3f,\r
- 0xfb42, 0xfb42,\r
- 0xfb45, 0xfb45,\r
- 0xfbb2, 0xfbd2,\r
- 0xfd40, 0xfd4f,\r
- 0xfd90, 0xfd91,\r
- 0xfdc8, 0xfdef,\r
- 0xfdfe, 0xfdff,\r
- 0xfe1a, 0xfe1f,\r
- 0xfe24, 0xfe2f,\r
- 0xfe53, 0xfe53,\r
- 0xfe67, 0xfe67,\r
- 0xfe6c, 0xfe6f,\r
- 0xfe75, 0xfe75,\r
- 0xfefd, 0xfefe,\r
- 0xff00, 0xff00,\r
- 0xffbf, 0xffc1,\r
- 0xffc8, 0xffc9,\r
- 0xffd0, 0xffd1,\r
- 0xffd8, 0xffd9,\r
- 0xffdd, 0xffdf,\r
- 0xffe7, 0xffe7,\r
- 0xffef, 0xfff8,\r
- 0xfffe, 0xffff,\r
- 0x1000c, 0x1000c,\r
- 0x10027, 0x10027,\r
- 0x1003b, 0x1003b,\r
- 0x1003e, 0x1003e,\r
- 0x1004e, 0x1004f,\r
- 0x1005e, 0x1007f,\r
- 0x100fb, 0x100ff,\r
- 0x10103, 0x10106,\r
- 0x10134, 0x10136,\r
- 0x1018b, 0x102ff,\r
- 0x1031f, 0x1031f,\r
- 0x10324, 0x1032f,\r
- 0x1034b, 0x1037f,\r
- 0x1039e, 0x1039e,\r
- 0x103c4, 0x103c7,\r
- 0x103d6, 0x103ff,\r
- 0x1049e, 0x1049f,\r
- 0x104aa, 0x107ff,\r
- 0x10806, 0x10807,\r
- 0x10809, 0x10809,\r
- 0x10836, 0x10836,\r
- 0x10839, 0x1083b,\r
- 0x1083d, 0x1083e,\r
- 0x10840, 0x109ff,\r
- 0x10a04, 0x10a04,\r
- 0x10a07, 0x10a0b,\r
- 0x10a14, 0x10a14,\r
- 0x10a18, 0x10a18,\r
- 0x10a34, 0x10a37,\r
- 0x10a3b, 0x10a3e,\r
- 0x10a48, 0x10a4f,\r
- 0x10a59, 0x1cfff,\r
- 0x1d0f6, 0x1d0ff,\r
- 0x1d127, 0x1d129,\r
- 0x1d1de, 0x1d1ff,\r
- 0x1d246, 0x1d2ff,\r
- 0x1d357, 0x1d3ff,\r
- 0x1d455, 0x1d455,\r
- 0x1d49d, 0x1d49d,\r
- 0x1d4a0, 0x1d4a1,\r
- 0x1d4a3, 0x1d4a4,\r
- 0x1d4a7, 0x1d4a8,\r
- 0x1d4ad, 0x1d4ad,\r
- 0x1d4ba, 0x1d4ba,\r
- 0x1d4bc, 0x1d4bc,\r
- 0x1d4c4, 0x1d4c4,\r
- 0x1d506, 0x1d506,\r
- 0x1d50b, 0x1d50c,\r
- 0x1d515, 0x1d515,\r
- 0x1d51d, 0x1d51d,\r
- 0x1d53a, 0x1d53a,\r
- 0x1d53f, 0x1d53f,\r
- 0x1d545, 0x1d545,\r
- 0x1d547, 0x1d549,\r
- 0x1d551, 0x1d551,\r
- 0x1d6a6, 0x1d6a7,\r
- 0x1d7ca, 0x1d7cd,\r
- 0x1d800, 0x1ffff,\r
- 0x2a6d7, 0x2f7ff,\r
- 0x2fa1e, 0xe0000,\r
- 0xe0002, 0xe001f,\r
- 0xe0080, 0xe00ff,\r
- 0xe01f0, 0xeffff,\r
- 0xffffe, 0xfffff,\r
- 0x10fffe, 0x10ffff\r
-}; /* CR_Cn */\r
-\r
-/* 'Co': General Category */\r
-static const OnigCodePoint CR_Co[] = {\r
- 3,\r
- 0xe000, 0xf8ff,\r
- 0xf0000, 0xffffd,\r
- 0x100000, 0x10fffd\r
-}; /* CR_Co */\r
-\r
-/* 'Cs': General Category */\r
-static const OnigCodePoint CR_Cs[] = {\r
- 1,\r
- 0xd800, 0xdfff\r
-}; /* CR_Cs */\r
-\r
-/* 'L': Major Category */\r
-static const OnigCodePoint CR_L[] = {\r
- 347,\r
- 0x0041, 0x005a,\r
- 0x0061, 0x007a,\r
- 0x00aa, 0x00aa,\r
- 0x00b5, 0x00b5,\r
- 0x00ba, 0x00ba,\r
- 0x00c0, 0x00d6,\r
- 0x00d8, 0x00f6,\r
- 0x00f8, 0x0241,\r
- 0x0250, 0x02c1,\r
- 0x02c6, 0x02d1,\r
- 0x02e0, 0x02e4,\r
- 0x02ee, 0x02ee,\r
- 0x037a, 0x037a,\r
- 0x0386, 0x0386,\r
- 0x0388, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x03f5,\r
- 0x03f7, 0x0481,\r
- 0x048a, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x0559,\r
- 0x0561, 0x0587,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f2,\r
- 0x0621, 0x063a,\r
- 0x0640, 0x064a,\r
- 0x066e, 0x066f,\r
- 0x0671, 0x06d3,\r
- 0x06d5, 0x06d5,\r
- 0x06e5, 0x06e6,\r
- 0x06ee, 0x06ef,\r
- 0x06fa, 0x06fc,\r
- 0x06ff, 0x06ff,\r
- 0x0710, 0x0710,\r
- 0x0712, 0x072f,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07a5,\r
- 0x07b1, 0x07b1,\r
- 0x0904, 0x0939,\r
- 0x093d, 0x093d,\r
- 0x0950, 0x0950,\r
- 0x0958, 0x0961,\r
- 0x097d, 0x097d,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bd, 0x09bd,\r
- 0x09ce, 0x09ce,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e1,\r
- 0x09f0, 0x09f1,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a72, 0x0a74,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abd, 0x0abd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae1,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3d, 0x0b3d,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b71, 0x0b71,\r
- 0x0b83, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c60, 0x0c61,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbd, 0x0cbd,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d60, 0x0d61,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0e01, 0x0e30,\r
- 0x0e32, 0x0e33,\r
- 0x0e40, 0x0e46,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb0,\r
- 0x0eb2, 0x0eb3,\r
- 0x0ebd, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f00,\r
- 0x0f40, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f88, 0x0f8b,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x1050, 0x1055,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fa,\r
- 0x10fc, 0x10fc,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x1380, 0x138f,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x166c,\r
- 0x166f, 0x1676,\r
- 0x1681, 0x169a,\r
- 0x16a0, 0x16ea,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1711,\r
- 0x1720, 0x1731,\r
- 0x1740, 0x1751,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1780, 0x17b3,\r
- 0x17d7, 0x17d7,\r
- 0x17dc, 0x17dc,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a8,\r
- 0x1900, 0x191c,\r
- 0x1950, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19c1, 0x19c7,\r
- 0x1a00, 0x1a16,\r
- 0x1d00, 0x1dbf,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fbc,\r
- 0x1fbe, 0x1fbe,\r
- 0x1fc2, 0x1fc4,\r
- 0x1fc6, 0x1fcc,\r
- 0x1fd0, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fe0, 0x1fec,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffc,\r
- 0x2071, 0x2071,\r
- 0x207f, 0x207f,\r
- 0x2090, 0x2094,\r
- 0x2102, 0x2102,\r
- 0x2107, 0x2107,\r
- 0x210a, 0x2113,\r
- 0x2115, 0x2115,\r
- 0x2119, 0x211d,\r
- 0x2124, 0x2124,\r
- 0x2126, 0x2126,\r
- 0x2128, 0x2128,\r
- 0x212a, 0x212d,\r
- 0x212f, 0x2131,\r
- 0x2133, 0x2139,\r
- 0x213c, 0x213f,\r
- 0x2145, 0x2149,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e,\r
- 0x2c80, 0x2ce4,\r
- 0x2d00, 0x2d25,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x3005, 0x3006,\r
- 0x3031, 0x3035,\r
- 0x303b, 0x303c,\r
- 0x3041, 0x3096,\r
- 0x309d, 0x309f,\r
- 0x30a1, 0x30fa,\r
- 0x30fc, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x31a0, 0x31b7,\r
- 0x31f0, 0x31ff,\r
- 0x3400, 0x4db5,\r
- 0x4e00, 0x9fbb,\r
- 0xa000, 0xa48c,\r
- 0xa800, 0xa801,\r
- 0xa803, 0xa805,\r
- 0xa807, 0xa80a,\r
- 0xa80c, 0xa822,\r
- 0xac00, 0xd7a3,\r
- 0xf900, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xfb1d, 0xfb1d,\r
- 0xfb1f, 0xfb28,\r
- 0xfb2a, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3d,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfb,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xff21, 0xff3a,\r
- 0xff41, 0xff5a,\r
- 0xff66, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10300, 0x1031e,\r
- 0x10330, 0x10349,\r
- 0x10380, 0x1039d,\r
- 0x103a0, 0x103c3,\r
- 0x103c8, 0x103cf,\r
- 0x10400, 0x1049d,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a00,\r
- 0x10a10, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d6c0,\r
- 0x1d6c2, 0x1d6da,\r
- 0x1d6dc, 0x1d6fa,\r
- 0x1d6fc, 0x1d714,\r
- 0x1d716, 0x1d734,\r
- 0x1d736, 0x1d74e,\r
- 0x1d750, 0x1d76e,\r
- 0x1d770, 0x1d788,\r
- 0x1d78a, 0x1d7a8,\r
- 0x1d7aa, 0x1d7c2,\r
- 0x1d7c4, 0x1d7c9,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d\r
-}; /* CR_L */\r
-\r
-/* 'Ll': General Category */\r
-static const OnigCodePoint CR_Ll[] = {\r
- 480,\r
- 0x0061, 0x007a,\r
- 0x00aa, 0x00aa,\r
- 0x00b5, 0x00b5,\r
- 0x00ba, 0x00ba,\r
- 0x00df, 0x00f6,\r
- 0x00f8, 0x00ff,\r
- 0x0101, 0x0101,\r
- 0x0103, 0x0103,\r
- 0x0105, 0x0105,\r
- 0x0107, 0x0107,\r
- 0x0109, 0x0109,\r
- 0x010b, 0x010b,\r
- 0x010d, 0x010d,\r
- 0x010f, 0x010f,\r
- 0x0111, 0x0111,\r
- 0x0113, 0x0113,\r
- 0x0115, 0x0115,\r
- 0x0117, 0x0117,\r
- 0x0119, 0x0119,\r
- 0x011b, 0x011b,\r
- 0x011d, 0x011d,\r
- 0x011f, 0x011f,\r
- 0x0121, 0x0121,\r
- 0x0123, 0x0123,\r
- 0x0125, 0x0125,\r
- 0x0127, 0x0127,\r
- 0x0129, 0x0129,\r
- 0x012b, 0x012b,\r
- 0x012d, 0x012d,\r
- 0x012f, 0x012f,\r
- 0x0131, 0x0131,\r
- 0x0133, 0x0133,\r
- 0x0135, 0x0135,\r
- 0x0137, 0x0138,\r
- 0x013a, 0x013a,\r
- 0x013c, 0x013c,\r
- 0x013e, 0x013e,\r
- 0x0140, 0x0140,\r
- 0x0142, 0x0142,\r
- 0x0144, 0x0144,\r
- 0x0146, 0x0146,\r
- 0x0148, 0x0149,\r
- 0x014b, 0x014b,\r
- 0x014d, 0x014d,\r
- 0x014f, 0x014f,\r
- 0x0151, 0x0151,\r
- 0x0153, 0x0153,\r
- 0x0155, 0x0155,\r
- 0x0157, 0x0157,\r
- 0x0159, 0x0159,\r
- 0x015b, 0x015b,\r
- 0x015d, 0x015d,\r
- 0x015f, 0x015f,\r
- 0x0161, 0x0161,\r
- 0x0163, 0x0163,\r
- 0x0165, 0x0165,\r
- 0x0167, 0x0167,\r
- 0x0169, 0x0169,\r
- 0x016b, 0x016b,\r
- 0x016d, 0x016d,\r
- 0x016f, 0x016f,\r
- 0x0171, 0x0171,\r
- 0x0173, 0x0173,\r
- 0x0175, 0x0175,\r
- 0x0177, 0x0177,\r
- 0x017a, 0x017a,\r
- 0x017c, 0x017c,\r
- 0x017e, 0x0180,\r
- 0x0183, 0x0183,\r
- 0x0185, 0x0185,\r
- 0x0188, 0x0188,\r
- 0x018c, 0x018d,\r
- 0x0192, 0x0192,\r
- 0x0195, 0x0195,\r
- 0x0199, 0x019b,\r
- 0x019e, 0x019e,\r
- 0x01a1, 0x01a1,\r
- 0x01a3, 0x01a3,\r
- 0x01a5, 0x01a5,\r
- 0x01a8, 0x01a8,\r
- 0x01aa, 0x01ab,\r
- 0x01ad, 0x01ad,\r
- 0x01b0, 0x01b0,\r
- 0x01b4, 0x01b4,\r
- 0x01b6, 0x01b6,\r
- 0x01b9, 0x01ba,\r
- 0x01bd, 0x01bf,\r
- 0x01c6, 0x01c6,\r
- 0x01c9, 0x01c9,\r
- 0x01cc, 0x01cc,\r
- 0x01ce, 0x01ce,\r
- 0x01d0, 0x01d0,\r
- 0x01d2, 0x01d2,\r
- 0x01d4, 0x01d4,\r
- 0x01d6, 0x01d6,\r
- 0x01d8, 0x01d8,\r
- 0x01da, 0x01da,\r
- 0x01dc, 0x01dd,\r
- 0x01df, 0x01df,\r
- 0x01e1, 0x01e1,\r
- 0x01e3, 0x01e3,\r
- 0x01e5, 0x01e5,\r
- 0x01e7, 0x01e7,\r
- 0x01e9, 0x01e9,\r
- 0x01eb, 0x01eb,\r
- 0x01ed, 0x01ed,\r
- 0x01ef, 0x01f0,\r
- 0x01f3, 0x01f3,\r
- 0x01f5, 0x01f5,\r
- 0x01f9, 0x01f9,\r
- 0x01fb, 0x01fb,\r
- 0x01fd, 0x01fd,\r
- 0x01ff, 0x01ff,\r
- 0x0201, 0x0201,\r
- 0x0203, 0x0203,\r
- 0x0205, 0x0205,\r
- 0x0207, 0x0207,\r
- 0x0209, 0x0209,\r
- 0x020b, 0x020b,\r
- 0x020d, 0x020d,\r
- 0x020f, 0x020f,\r
- 0x0211, 0x0211,\r
- 0x0213, 0x0213,\r
- 0x0215, 0x0215,\r
- 0x0217, 0x0217,\r
- 0x0219, 0x0219,\r
- 0x021b, 0x021b,\r
- 0x021d, 0x021d,\r
- 0x021f, 0x021f,\r
- 0x0221, 0x0221,\r
- 0x0223, 0x0223,\r
- 0x0225, 0x0225,\r
- 0x0227, 0x0227,\r
- 0x0229, 0x0229,\r
- 0x022b, 0x022b,\r
- 0x022d, 0x022d,\r
- 0x022f, 0x022f,\r
- 0x0231, 0x0231,\r
- 0x0233, 0x0239,\r
- 0x023c, 0x023c,\r
- 0x023f, 0x0240,\r
- 0x0250, 0x02af,\r
- 0x0390, 0x0390,\r
- 0x03ac, 0x03ce,\r
- 0x03d0, 0x03d1,\r
- 0x03d5, 0x03d7,\r
- 0x03d9, 0x03d9,\r
- 0x03db, 0x03db,\r
- 0x03dd, 0x03dd,\r
- 0x03df, 0x03df,\r
- 0x03e1, 0x03e1,\r
- 0x03e3, 0x03e3,\r
- 0x03e5, 0x03e5,\r
- 0x03e7, 0x03e7,\r
- 0x03e9, 0x03e9,\r
- 0x03eb, 0x03eb,\r
- 0x03ed, 0x03ed,\r
- 0x03ef, 0x03f3,\r
- 0x03f5, 0x03f5,\r
- 0x03f8, 0x03f8,\r
- 0x03fb, 0x03fc,\r
- 0x0430, 0x045f,\r
- 0x0461, 0x0461,\r
- 0x0463, 0x0463,\r
- 0x0465, 0x0465,\r
- 0x0467, 0x0467,\r
- 0x0469, 0x0469,\r
- 0x046b, 0x046b,\r
- 0x046d, 0x046d,\r
- 0x046f, 0x046f,\r
- 0x0471, 0x0471,\r
- 0x0473, 0x0473,\r
- 0x0475, 0x0475,\r
- 0x0477, 0x0477,\r
- 0x0479, 0x0479,\r
- 0x047b, 0x047b,\r
- 0x047d, 0x047d,\r
- 0x047f, 0x047f,\r
- 0x0481, 0x0481,\r
- 0x048b, 0x048b,\r
- 0x048d, 0x048d,\r
- 0x048f, 0x048f,\r
- 0x0491, 0x0491,\r
- 0x0493, 0x0493,\r
- 0x0495, 0x0495,\r
- 0x0497, 0x0497,\r
- 0x0499, 0x0499,\r
- 0x049b, 0x049b,\r
- 0x049d, 0x049d,\r
- 0x049f, 0x049f,\r
- 0x04a1, 0x04a1,\r
- 0x04a3, 0x04a3,\r
- 0x04a5, 0x04a5,\r
- 0x04a7, 0x04a7,\r
- 0x04a9, 0x04a9,\r
- 0x04ab, 0x04ab,\r
- 0x04ad, 0x04ad,\r
- 0x04af, 0x04af,\r
- 0x04b1, 0x04b1,\r
- 0x04b3, 0x04b3,\r
- 0x04b5, 0x04b5,\r
- 0x04b7, 0x04b7,\r
- 0x04b9, 0x04b9,\r
- 0x04bb, 0x04bb,\r
- 0x04bd, 0x04bd,\r
- 0x04bf, 0x04bf,\r
- 0x04c2, 0x04c2,\r
- 0x04c4, 0x04c4,\r
- 0x04c6, 0x04c6,\r
- 0x04c8, 0x04c8,\r
- 0x04ca, 0x04ca,\r
- 0x04cc, 0x04cc,\r
- 0x04ce, 0x04ce,\r
- 0x04d1, 0x04d1,\r
- 0x04d3, 0x04d3,\r
- 0x04d5, 0x04d5,\r
- 0x04d7, 0x04d7,\r
- 0x04d9, 0x04d9,\r
- 0x04db, 0x04db,\r
- 0x04dd, 0x04dd,\r
- 0x04df, 0x04df,\r
- 0x04e1, 0x04e1,\r
- 0x04e3, 0x04e3,\r
- 0x04e5, 0x04e5,\r
- 0x04e7, 0x04e7,\r
- 0x04e9, 0x04e9,\r
- 0x04eb, 0x04eb,\r
- 0x04ed, 0x04ed,\r
- 0x04ef, 0x04ef,\r
- 0x04f1, 0x04f1,\r
- 0x04f3, 0x04f3,\r
- 0x04f5, 0x04f5,\r
- 0x04f7, 0x04f7,\r
- 0x04f9, 0x04f9,\r
- 0x0501, 0x0501,\r
- 0x0503, 0x0503,\r
- 0x0505, 0x0505,\r
- 0x0507, 0x0507,\r
- 0x0509, 0x0509,\r
- 0x050b, 0x050b,\r
- 0x050d, 0x050d,\r
- 0x050f, 0x050f,\r
- 0x0561, 0x0587,\r
- 0x1d00, 0x1d2b,\r
- 0x1d62, 0x1d77,\r
- 0x1d79, 0x1d9a,\r
- 0x1e01, 0x1e01,\r
- 0x1e03, 0x1e03,\r
- 0x1e05, 0x1e05,\r
- 0x1e07, 0x1e07,\r
- 0x1e09, 0x1e09,\r
- 0x1e0b, 0x1e0b,\r
- 0x1e0d, 0x1e0d,\r
- 0x1e0f, 0x1e0f,\r
- 0x1e11, 0x1e11,\r
- 0x1e13, 0x1e13,\r
- 0x1e15, 0x1e15,\r
- 0x1e17, 0x1e17,\r
- 0x1e19, 0x1e19,\r
- 0x1e1b, 0x1e1b,\r
- 0x1e1d, 0x1e1d,\r
- 0x1e1f, 0x1e1f,\r
- 0x1e21, 0x1e21,\r
- 0x1e23, 0x1e23,\r
- 0x1e25, 0x1e25,\r
- 0x1e27, 0x1e27,\r
- 0x1e29, 0x1e29,\r
- 0x1e2b, 0x1e2b,\r
- 0x1e2d, 0x1e2d,\r
- 0x1e2f, 0x1e2f,\r
- 0x1e31, 0x1e31,\r
- 0x1e33, 0x1e33,\r
- 0x1e35, 0x1e35,\r
- 0x1e37, 0x1e37,\r
- 0x1e39, 0x1e39,\r
- 0x1e3b, 0x1e3b,\r
- 0x1e3d, 0x1e3d,\r
- 0x1e3f, 0x1e3f,\r
- 0x1e41, 0x1e41,\r
- 0x1e43, 0x1e43,\r
- 0x1e45, 0x1e45,\r
- 0x1e47, 0x1e47,\r
- 0x1e49, 0x1e49,\r
- 0x1e4b, 0x1e4b,\r
- 0x1e4d, 0x1e4d,\r
- 0x1e4f, 0x1e4f,\r
- 0x1e51, 0x1e51,\r
- 0x1e53, 0x1e53,\r
- 0x1e55, 0x1e55,\r
- 0x1e57, 0x1e57,\r
- 0x1e59, 0x1e59,\r
- 0x1e5b, 0x1e5b,\r
- 0x1e5d, 0x1e5d,\r
- 0x1e5f, 0x1e5f,\r
- 0x1e61, 0x1e61,\r
- 0x1e63, 0x1e63,\r
- 0x1e65, 0x1e65,\r
- 0x1e67, 0x1e67,\r
- 0x1e69, 0x1e69,\r
- 0x1e6b, 0x1e6b,\r
- 0x1e6d, 0x1e6d,\r
- 0x1e6f, 0x1e6f,\r
- 0x1e71, 0x1e71,\r
- 0x1e73, 0x1e73,\r
- 0x1e75, 0x1e75,\r
- 0x1e77, 0x1e77,\r
- 0x1e79, 0x1e79,\r
- 0x1e7b, 0x1e7b,\r
- 0x1e7d, 0x1e7d,\r
- 0x1e7f, 0x1e7f,\r
- 0x1e81, 0x1e81,\r
- 0x1e83, 0x1e83,\r
- 0x1e85, 0x1e85,\r
- 0x1e87, 0x1e87,\r
- 0x1e89, 0x1e89,\r
- 0x1e8b, 0x1e8b,\r
- 0x1e8d, 0x1e8d,\r
- 0x1e8f, 0x1e8f,\r
- 0x1e91, 0x1e91,\r
- 0x1e93, 0x1e93,\r
- 0x1e95, 0x1e9b,\r
- 0x1ea1, 0x1ea1,\r
- 0x1ea3, 0x1ea3,\r
- 0x1ea5, 0x1ea5,\r
- 0x1ea7, 0x1ea7,\r
- 0x1ea9, 0x1ea9,\r
- 0x1eab, 0x1eab,\r
- 0x1ead, 0x1ead,\r
- 0x1eaf, 0x1eaf,\r
- 0x1eb1, 0x1eb1,\r
- 0x1eb3, 0x1eb3,\r
- 0x1eb5, 0x1eb5,\r
- 0x1eb7, 0x1eb7,\r
- 0x1eb9, 0x1eb9,\r
- 0x1ebb, 0x1ebb,\r
- 0x1ebd, 0x1ebd,\r
- 0x1ebf, 0x1ebf,\r
- 0x1ec1, 0x1ec1,\r
- 0x1ec3, 0x1ec3,\r
- 0x1ec5, 0x1ec5,\r
- 0x1ec7, 0x1ec7,\r
- 0x1ec9, 0x1ec9,\r
- 0x1ecb, 0x1ecb,\r
- 0x1ecd, 0x1ecd,\r
- 0x1ecf, 0x1ecf,\r
- 0x1ed1, 0x1ed1,\r
- 0x1ed3, 0x1ed3,\r
- 0x1ed5, 0x1ed5,\r
- 0x1ed7, 0x1ed7,\r
- 0x1ed9, 0x1ed9,\r
- 0x1edb, 0x1edb,\r
- 0x1edd, 0x1edd,\r
- 0x1edf, 0x1edf,\r
- 0x1ee1, 0x1ee1,\r
- 0x1ee3, 0x1ee3,\r
- 0x1ee5, 0x1ee5,\r
- 0x1ee7, 0x1ee7,\r
- 0x1ee9, 0x1ee9,\r
- 0x1eeb, 0x1eeb,\r
- 0x1eed, 0x1eed,\r
- 0x1eef, 0x1eef,\r
- 0x1ef1, 0x1ef1,\r
- 0x1ef3, 0x1ef3,\r
- 0x1ef5, 0x1ef5,\r
- 0x1ef7, 0x1ef7,\r
- 0x1ef9, 0x1ef9,\r
- 0x1f00, 0x1f07,\r
- 0x1f10, 0x1f15,\r
- 0x1f20, 0x1f27,\r
- 0x1f30, 0x1f37,\r
- 0x1f40, 0x1f45,\r
- 0x1f50, 0x1f57,\r
- 0x1f60, 0x1f67,\r
- 0x1f70, 0x1f7d,\r
- 0x1f80, 0x1f87,\r
- 0x1f90, 0x1f97,\r
- 0x1fa0, 0x1fa7,\r
- 0x1fb0, 0x1fb4,\r
- 0x1fb6, 0x1fb7,\r
- 0x1fbe, 0x1fbe,\r
- 0x1fc2, 0x1fc4,\r
- 0x1fc6, 0x1fc7,\r
- 0x1fd0, 0x1fd3,\r
- 0x1fd6, 0x1fd7,\r
- 0x1fe0, 0x1fe7,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ff7,\r
- 0x2071, 0x2071,\r
- 0x207f, 0x207f,\r
- 0x210a, 0x210a,\r
- 0x210e, 0x210f,\r
- 0x2113, 0x2113,\r
- 0x212f, 0x212f,\r
- 0x2134, 0x2134,\r
- 0x2139, 0x2139,\r
- 0x213c, 0x213d,\r
- 0x2146, 0x2149,\r
- 0x2c30, 0x2c5e,\r
- 0x2c81, 0x2c81,\r
- 0x2c83, 0x2c83,\r
- 0x2c85, 0x2c85,\r
- 0x2c87, 0x2c87,\r
- 0x2c89, 0x2c89,\r
- 0x2c8b, 0x2c8b,\r
- 0x2c8d, 0x2c8d,\r
- 0x2c8f, 0x2c8f,\r
- 0x2c91, 0x2c91,\r
- 0x2c93, 0x2c93,\r
- 0x2c95, 0x2c95,\r
- 0x2c97, 0x2c97,\r
- 0x2c99, 0x2c99,\r
- 0x2c9b, 0x2c9b,\r
- 0x2c9d, 0x2c9d,\r
- 0x2c9f, 0x2c9f,\r
- 0x2ca1, 0x2ca1,\r
- 0x2ca3, 0x2ca3,\r
- 0x2ca5, 0x2ca5,\r
- 0x2ca7, 0x2ca7,\r
- 0x2ca9, 0x2ca9,\r
- 0x2cab, 0x2cab,\r
- 0x2cad, 0x2cad,\r
- 0x2caf, 0x2caf,\r
- 0x2cb1, 0x2cb1,\r
- 0x2cb3, 0x2cb3,\r
- 0x2cb5, 0x2cb5,\r
- 0x2cb7, 0x2cb7,\r
- 0x2cb9, 0x2cb9,\r
- 0x2cbb, 0x2cbb,\r
- 0x2cbd, 0x2cbd,\r
- 0x2cbf, 0x2cbf,\r
- 0x2cc1, 0x2cc1,\r
- 0x2cc3, 0x2cc3,\r
- 0x2cc5, 0x2cc5,\r
- 0x2cc7, 0x2cc7,\r
- 0x2cc9, 0x2cc9,\r
- 0x2ccb, 0x2ccb,\r
- 0x2ccd, 0x2ccd,\r
- 0x2ccf, 0x2ccf,\r
- 0x2cd1, 0x2cd1,\r
- 0x2cd3, 0x2cd3,\r
- 0x2cd5, 0x2cd5,\r
- 0x2cd7, 0x2cd7,\r
- 0x2cd9, 0x2cd9,\r
- 0x2cdb, 0x2cdb,\r
- 0x2cdd, 0x2cdd,\r
- 0x2cdf, 0x2cdf,\r
- 0x2ce1, 0x2ce1,\r
- 0x2ce3, 0x2ce4,\r
- 0x2d00, 0x2d25,\r
- 0xfb00, 0xfb06,\r
- 0xfb13, 0xfb17,\r
- 0xff41, 0xff5a,\r
- 0x10428, 0x1044f,\r
- 0x1d41a, 0x1d433,\r
- 0x1d44e, 0x1d454,\r
- 0x1d456, 0x1d467,\r
- 0x1d482, 0x1d49b,\r
- 0x1d4b6, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d4cf,\r
- 0x1d4ea, 0x1d503,\r
- 0x1d51e, 0x1d537,\r
- 0x1d552, 0x1d56b,\r
- 0x1d586, 0x1d59f,\r
- 0x1d5ba, 0x1d5d3,\r
- 0x1d5ee, 0x1d607,\r
- 0x1d622, 0x1d63b,\r
- 0x1d656, 0x1d66f,\r
- 0x1d68a, 0x1d6a5,\r
- 0x1d6c2, 0x1d6da,\r
- 0x1d6dc, 0x1d6e1,\r
- 0x1d6fc, 0x1d714,\r
- 0x1d716, 0x1d71b,\r
- 0x1d736, 0x1d74e,\r
- 0x1d750, 0x1d755,\r
- 0x1d770, 0x1d788,\r
- 0x1d78a, 0x1d78f,\r
- 0x1d7aa, 0x1d7c2,\r
- 0x1d7c4, 0x1d7c9\r
-}; /* CR_Ll */\r
-\r
-/* 'Lm': General Category */\r
-static const OnigCodePoint CR_Lm[] = {\r
- 26,\r
- 0x02b0, 0x02c1,\r
- 0x02c6, 0x02d1,\r
- 0x02e0, 0x02e4,\r
- 0x02ee, 0x02ee,\r
- 0x037a, 0x037a,\r
- 0x0559, 0x0559,\r
- 0x0640, 0x0640,\r
- 0x06e5, 0x06e6,\r
- 0x0e46, 0x0e46,\r
- 0x0ec6, 0x0ec6,\r
- 0x10fc, 0x10fc,\r
- 0x17d7, 0x17d7,\r
- 0x1843, 0x1843,\r
- 0x1d2c, 0x1d61,\r
- 0x1d78, 0x1d78,\r
- 0x1d9b, 0x1dbf,\r
- 0x2090, 0x2094,\r
- 0x2d6f, 0x2d6f,\r
- 0x3005, 0x3005,\r
- 0x3031, 0x3035,\r
- 0x303b, 0x303b,\r
- 0x309d, 0x309e,\r
- 0x30fc, 0x30fe,\r
- 0xa015, 0xa015,\r
- 0xff70, 0xff70,\r
- 0xff9e, 0xff9f\r
-}; /* CR_Lm */\r
-\r
-/* 'Lo': General Category */\r
-static const OnigCodePoint CR_Lo[] = {\r
- 245,\r
- 0x01bb, 0x01bb,\r
- 0x01c0, 0x01c3,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f2,\r
- 0x0621, 0x063a,\r
- 0x0641, 0x064a,\r
- 0x066e, 0x066f,\r
- 0x0671, 0x06d3,\r
- 0x06d5, 0x06d5,\r
- 0x06ee, 0x06ef,\r
- 0x06fa, 0x06fc,\r
- 0x06ff, 0x06ff,\r
- 0x0710, 0x0710,\r
- 0x0712, 0x072f,\r
- 0x074d, 0x076d,\r
- 0x0780, 0x07a5,\r
- 0x07b1, 0x07b1,\r
- 0x0904, 0x0939,\r
- 0x093d, 0x093d,\r
- 0x0950, 0x0950,\r
- 0x0958, 0x0961,\r
- 0x097d, 0x097d,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bd, 0x09bd,\r
- 0x09ce, 0x09ce,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e1,\r
- 0x09f0, 0x09f1,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a72, 0x0a74,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abd, 0x0abd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae1,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3d, 0x0b3d,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b71, 0x0b71,\r
- 0x0b83, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c60, 0x0c61,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbd, 0x0cbd,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d60, 0x0d61,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0e01, 0x0e30,\r
- 0x0e32, 0x0e33,\r
- 0x0e40, 0x0e45,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb0,\r
- 0x0eb2, 0x0eb3,\r
- 0x0ebd, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0edc, 0x0edd,\r
- 0x0f00, 0x0f00,\r
- 0x0f40, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f88, 0x0f8b,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x1050, 0x1055,\r
- 0x10d0, 0x10fa,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x1380, 0x138f,\r
- 0x13a0, 0x13f4,\r
- 0x1401, 0x166c,\r
- 0x166f, 0x1676,\r
- 0x1681, 0x169a,\r
- 0x16a0, 0x16ea,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1711,\r
- 0x1720, 0x1731,\r
- 0x1740, 0x1751,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1780, 0x17b3,\r
- 0x17dc, 0x17dc,\r
- 0x1820, 0x1842,\r
- 0x1844, 0x1877,\r
- 0x1880, 0x18a8,\r
- 0x1900, 0x191c,\r
- 0x1950, 0x196d,\r
- 0x1970, 0x1974,\r
- 0x1980, 0x19a9,\r
- 0x19c1, 0x19c7,\r
- 0x1a00, 0x1a16,\r
- 0x2135, 0x2138,\r
- 0x2d30, 0x2d65,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde,\r
- 0x3006, 0x3006,\r
- 0x303c, 0x303c,\r
- 0x3041, 0x3096,\r
- 0x309f, 0x309f,\r
- 0x30a1, 0x30fa,\r
- 0x30ff, 0x30ff,\r
- 0x3105, 0x312c,\r
- 0x3131, 0x318e,\r
- 0x31a0, 0x31b7,\r
- 0x31f0, 0x31ff,\r
- 0x3400, 0x4db5,\r
- 0x4e00, 0x9fbb,\r
- 0xa000, 0xa014,\r
- 0xa016, 0xa48c,\r
- 0xa800, 0xa801,\r
- 0xa803, 0xa805,\r
- 0xa807, 0xa80a,\r
- 0xa80c, 0xa822,\r
- 0xac00, 0xd7a3,\r
- 0xf900, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0xfb1d, 0xfb1d,\r
- 0xfb1f, 0xfb28,\r
- 0xfb2a, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfbb1,\r
- 0xfbd3, 0xfd3d,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfb,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc,\r
- 0xff66, 0xff6f,\r
- 0xff71, 0xff9d,\r
- 0xffa0, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa,\r
- 0x10300, 0x1031e,\r
- 0x10330, 0x10349,\r
- 0x10380, 0x1039d,\r
- 0x103a0, 0x103c3,\r
- 0x103c8, 0x103cf,\r
- 0x10450, 0x1049d,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f,\r
- 0x10a00, 0x10a00,\r
- 0x10a10, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d\r
-}; /* CR_Lo */\r
-\r
-/* 'Lt': General Category */\r
-static const OnigCodePoint CR_Lt[] = {\r
- 10,\r
- 0x01c5, 0x01c5,\r
- 0x01c8, 0x01c8,\r
- 0x01cb, 0x01cb,\r
- 0x01f2, 0x01f2,\r
- 0x1f88, 0x1f8f,\r
- 0x1f98, 0x1f9f,\r
- 0x1fa8, 0x1faf,\r
- 0x1fbc, 0x1fbc,\r
- 0x1fcc, 0x1fcc,\r
- 0x1ffc, 0x1ffc\r
-}; /* CR_Lt */\r
-\r
-/* 'Lu': General Category */\r
-static const OnigCodePoint CR_Lu[] = {\r
- 476,\r
- 0x0041, 0x005a,\r
- 0x00c0, 0x00d6,\r
- 0x00d8, 0x00de,\r
- 0x0100, 0x0100,\r
- 0x0102, 0x0102,\r
- 0x0104, 0x0104,\r
- 0x0106, 0x0106,\r
- 0x0108, 0x0108,\r
- 0x010a, 0x010a,\r
- 0x010c, 0x010c,\r
- 0x010e, 0x010e,\r
- 0x0110, 0x0110,\r
- 0x0112, 0x0112,\r
- 0x0114, 0x0114,\r
- 0x0116, 0x0116,\r
- 0x0118, 0x0118,\r
- 0x011a, 0x011a,\r
- 0x011c, 0x011c,\r
- 0x011e, 0x011e,\r
- 0x0120, 0x0120,\r
- 0x0122, 0x0122,\r
- 0x0124, 0x0124,\r
- 0x0126, 0x0126,\r
- 0x0128, 0x0128,\r
- 0x012a, 0x012a,\r
- 0x012c, 0x012c,\r
- 0x012e, 0x012e,\r
- 0x0130, 0x0130,\r
- 0x0132, 0x0132,\r
- 0x0134, 0x0134,\r
- 0x0136, 0x0136,\r
- 0x0139, 0x0139,\r
- 0x013b, 0x013b,\r
- 0x013d, 0x013d,\r
- 0x013f, 0x013f,\r
- 0x0141, 0x0141,\r
- 0x0143, 0x0143,\r
- 0x0145, 0x0145,\r
- 0x0147, 0x0147,\r
- 0x014a, 0x014a,\r
- 0x014c, 0x014c,\r
- 0x014e, 0x014e,\r
- 0x0150, 0x0150,\r
- 0x0152, 0x0152,\r
- 0x0154, 0x0154,\r
- 0x0156, 0x0156,\r
- 0x0158, 0x0158,\r
- 0x015a, 0x015a,\r
- 0x015c, 0x015c,\r
- 0x015e, 0x015e,\r
- 0x0160, 0x0160,\r
- 0x0162, 0x0162,\r
- 0x0164, 0x0164,\r
- 0x0166, 0x0166,\r
- 0x0168, 0x0168,\r
- 0x016a, 0x016a,\r
- 0x016c, 0x016c,\r
- 0x016e, 0x016e,\r
- 0x0170, 0x0170,\r
- 0x0172, 0x0172,\r
- 0x0174, 0x0174,\r
- 0x0176, 0x0176,\r
- 0x0178, 0x0179,\r
- 0x017b, 0x017b,\r
- 0x017d, 0x017d,\r
- 0x0181, 0x0182,\r
- 0x0184, 0x0184,\r
- 0x0186, 0x0187,\r
- 0x0189, 0x018b,\r
- 0x018e, 0x0191,\r
- 0x0193, 0x0194,\r
- 0x0196, 0x0198,\r
- 0x019c, 0x019d,\r
- 0x019f, 0x01a0,\r
- 0x01a2, 0x01a2,\r
- 0x01a4, 0x01a4,\r
- 0x01a6, 0x01a7,\r
- 0x01a9, 0x01a9,\r
- 0x01ac, 0x01ac,\r
- 0x01ae, 0x01af,\r
- 0x01b1, 0x01b3,\r
- 0x01b5, 0x01b5,\r
- 0x01b7, 0x01b8,\r
- 0x01bc, 0x01bc,\r
- 0x01c4, 0x01c4,\r
- 0x01c7, 0x01c7,\r
- 0x01ca, 0x01ca,\r
- 0x01cd, 0x01cd,\r
- 0x01cf, 0x01cf,\r
- 0x01d1, 0x01d1,\r
- 0x01d3, 0x01d3,\r
- 0x01d5, 0x01d5,\r
- 0x01d7, 0x01d7,\r
- 0x01d9, 0x01d9,\r
- 0x01db, 0x01db,\r
- 0x01de, 0x01de,\r
- 0x01e0, 0x01e0,\r
- 0x01e2, 0x01e2,\r
- 0x01e4, 0x01e4,\r
- 0x01e6, 0x01e6,\r
- 0x01e8, 0x01e8,\r
- 0x01ea, 0x01ea,\r
- 0x01ec, 0x01ec,\r
- 0x01ee, 0x01ee,\r
- 0x01f1, 0x01f1,\r
- 0x01f4, 0x01f4,\r
- 0x01f6, 0x01f8,\r
- 0x01fa, 0x01fa,\r
- 0x01fc, 0x01fc,\r
- 0x01fe, 0x01fe,\r
- 0x0200, 0x0200,\r
- 0x0202, 0x0202,\r
- 0x0204, 0x0204,\r
- 0x0206, 0x0206,\r
- 0x0208, 0x0208,\r
- 0x020a, 0x020a,\r
- 0x020c, 0x020c,\r
- 0x020e, 0x020e,\r
- 0x0210, 0x0210,\r
- 0x0212, 0x0212,\r
- 0x0214, 0x0214,\r
- 0x0216, 0x0216,\r
- 0x0218, 0x0218,\r
- 0x021a, 0x021a,\r
- 0x021c, 0x021c,\r
- 0x021e, 0x021e,\r
- 0x0220, 0x0220,\r
- 0x0222, 0x0222,\r
- 0x0224, 0x0224,\r
- 0x0226, 0x0226,\r
- 0x0228, 0x0228,\r
- 0x022a, 0x022a,\r
- 0x022c, 0x022c,\r
- 0x022e, 0x022e,\r
- 0x0230, 0x0230,\r
- 0x0232, 0x0232,\r
- 0x023a, 0x023b,\r
- 0x023d, 0x023e,\r
- 0x0241, 0x0241,\r
- 0x0386, 0x0386,\r
- 0x0388, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x038f,\r
- 0x0391, 0x03a1,\r
- 0x03a3, 0x03ab,\r
- 0x03d2, 0x03d4,\r
- 0x03d8, 0x03d8,\r
- 0x03da, 0x03da,\r
- 0x03dc, 0x03dc,\r
- 0x03de, 0x03de,\r
- 0x03e0, 0x03e0,\r
- 0x03e2, 0x03e2,\r
- 0x03e4, 0x03e4,\r
- 0x03e6, 0x03e6,\r
- 0x03e8, 0x03e8,\r
- 0x03ea, 0x03ea,\r
- 0x03ec, 0x03ec,\r
- 0x03ee, 0x03ee,\r
- 0x03f4, 0x03f4,\r
- 0x03f7, 0x03f7,\r
- 0x03f9, 0x03fa,\r
- 0x03fd, 0x042f,\r
- 0x0460, 0x0460,\r
- 0x0462, 0x0462,\r
- 0x0464, 0x0464,\r
- 0x0466, 0x0466,\r
- 0x0468, 0x0468,\r
- 0x046a, 0x046a,\r
- 0x046c, 0x046c,\r
- 0x046e, 0x046e,\r
- 0x0470, 0x0470,\r
- 0x0472, 0x0472,\r
- 0x0474, 0x0474,\r
- 0x0476, 0x0476,\r
- 0x0478, 0x0478,\r
- 0x047a, 0x047a,\r
- 0x047c, 0x047c,\r
- 0x047e, 0x047e,\r
- 0x0480, 0x0480,\r
- 0x048a, 0x048a,\r
- 0x048c, 0x048c,\r
- 0x048e, 0x048e,\r
- 0x0490, 0x0490,\r
- 0x0492, 0x0492,\r
- 0x0494, 0x0494,\r
- 0x0496, 0x0496,\r
- 0x0498, 0x0498,\r
- 0x049a, 0x049a,\r
- 0x049c, 0x049c,\r
- 0x049e, 0x049e,\r
- 0x04a0, 0x04a0,\r
- 0x04a2, 0x04a2,\r
- 0x04a4, 0x04a4,\r
- 0x04a6, 0x04a6,\r
- 0x04a8, 0x04a8,\r
- 0x04aa, 0x04aa,\r
- 0x04ac, 0x04ac,\r
- 0x04ae, 0x04ae,\r
- 0x04b0, 0x04b0,\r
- 0x04b2, 0x04b2,\r
- 0x04b4, 0x04b4,\r
- 0x04b6, 0x04b6,\r
- 0x04b8, 0x04b8,\r
- 0x04ba, 0x04ba,\r
- 0x04bc, 0x04bc,\r
- 0x04be, 0x04be,\r
- 0x04c0, 0x04c1,\r
- 0x04c3, 0x04c3,\r
- 0x04c5, 0x04c5,\r
- 0x04c7, 0x04c7,\r
- 0x04c9, 0x04c9,\r
- 0x04cb, 0x04cb,\r
- 0x04cd, 0x04cd,\r
- 0x04d0, 0x04d0,\r
- 0x04d2, 0x04d2,\r
- 0x04d4, 0x04d4,\r
- 0x04d6, 0x04d6,\r
- 0x04d8, 0x04d8,\r
- 0x04da, 0x04da,\r
- 0x04dc, 0x04dc,\r
- 0x04de, 0x04de,\r
- 0x04e0, 0x04e0,\r
- 0x04e2, 0x04e2,\r
- 0x04e4, 0x04e4,\r
- 0x04e6, 0x04e6,\r
- 0x04e8, 0x04e8,\r
- 0x04ea, 0x04ea,\r
- 0x04ec, 0x04ec,\r
- 0x04ee, 0x04ee,\r
- 0x04f0, 0x04f0,\r
- 0x04f2, 0x04f2,\r
- 0x04f4, 0x04f4,\r
- 0x04f6, 0x04f6,\r
- 0x04f8, 0x04f8,\r
- 0x0500, 0x0500,\r
- 0x0502, 0x0502,\r
- 0x0504, 0x0504,\r
- 0x0506, 0x0506,\r
- 0x0508, 0x0508,\r
- 0x050a, 0x050a,\r
- 0x050c, 0x050c,\r
- 0x050e, 0x050e,\r
- 0x0531, 0x0556,\r
- 0x10a0, 0x10c5,\r
- 0x1e00, 0x1e00,\r
- 0x1e02, 0x1e02,\r
- 0x1e04, 0x1e04,\r
- 0x1e06, 0x1e06,\r
- 0x1e08, 0x1e08,\r
- 0x1e0a, 0x1e0a,\r
- 0x1e0c, 0x1e0c,\r
- 0x1e0e, 0x1e0e,\r
- 0x1e10, 0x1e10,\r
- 0x1e12, 0x1e12,\r
- 0x1e14, 0x1e14,\r
- 0x1e16, 0x1e16,\r
- 0x1e18, 0x1e18,\r
- 0x1e1a, 0x1e1a,\r
- 0x1e1c, 0x1e1c,\r
- 0x1e1e, 0x1e1e,\r
- 0x1e20, 0x1e20,\r
- 0x1e22, 0x1e22,\r
- 0x1e24, 0x1e24,\r
- 0x1e26, 0x1e26,\r
- 0x1e28, 0x1e28,\r
- 0x1e2a, 0x1e2a,\r
- 0x1e2c, 0x1e2c,\r
- 0x1e2e, 0x1e2e,\r
- 0x1e30, 0x1e30,\r
- 0x1e32, 0x1e32,\r
- 0x1e34, 0x1e34,\r
- 0x1e36, 0x1e36,\r
- 0x1e38, 0x1e38,\r
- 0x1e3a, 0x1e3a,\r
- 0x1e3c, 0x1e3c,\r
- 0x1e3e, 0x1e3e,\r
- 0x1e40, 0x1e40,\r
- 0x1e42, 0x1e42,\r
- 0x1e44, 0x1e44,\r
- 0x1e46, 0x1e46,\r
- 0x1e48, 0x1e48,\r
- 0x1e4a, 0x1e4a,\r
- 0x1e4c, 0x1e4c,\r
- 0x1e4e, 0x1e4e,\r
- 0x1e50, 0x1e50,\r
- 0x1e52, 0x1e52,\r
- 0x1e54, 0x1e54,\r
- 0x1e56, 0x1e56,\r
- 0x1e58, 0x1e58,\r
- 0x1e5a, 0x1e5a,\r
- 0x1e5c, 0x1e5c,\r
- 0x1e5e, 0x1e5e,\r
- 0x1e60, 0x1e60,\r
- 0x1e62, 0x1e62,\r
- 0x1e64, 0x1e64,\r
- 0x1e66, 0x1e66,\r
- 0x1e68, 0x1e68,\r
- 0x1e6a, 0x1e6a,\r
- 0x1e6c, 0x1e6c,\r
- 0x1e6e, 0x1e6e,\r
- 0x1e70, 0x1e70,\r
- 0x1e72, 0x1e72,\r
- 0x1e74, 0x1e74,\r
- 0x1e76, 0x1e76,\r
- 0x1e78, 0x1e78,\r
- 0x1e7a, 0x1e7a,\r
- 0x1e7c, 0x1e7c,\r
- 0x1e7e, 0x1e7e,\r
- 0x1e80, 0x1e80,\r
- 0x1e82, 0x1e82,\r
- 0x1e84, 0x1e84,\r
- 0x1e86, 0x1e86,\r
- 0x1e88, 0x1e88,\r
- 0x1e8a, 0x1e8a,\r
- 0x1e8c, 0x1e8c,\r
- 0x1e8e, 0x1e8e,\r
- 0x1e90, 0x1e90,\r
- 0x1e92, 0x1e92,\r
- 0x1e94, 0x1e94,\r
- 0x1ea0, 0x1ea0,\r
- 0x1ea2, 0x1ea2,\r
- 0x1ea4, 0x1ea4,\r
- 0x1ea6, 0x1ea6,\r
- 0x1ea8, 0x1ea8,\r
- 0x1eaa, 0x1eaa,\r
- 0x1eac, 0x1eac,\r
- 0x1eae, 0x1eae,\r
- 0x1eb0, 0x1eb0,\r
- 0x1eb2, 0x1eb2,\r
- 0x1eb4, 0x1eb4,\r
- 0x1eb6, 0x1eb6,\r
- 0x1eb8, 0x1eb8,\r
- 0x1eba, 0x1eba,\r
- 0x1ebc, 0x1ebc,\r
- 0x1ebe, 0x1ebe,\r
- 0x1ec0, 0x1ec0,\r
- 0x1ec2, 0x1ec2,\r
- 0x1ec4, 0x1ec4,\r
- 0x1ec6, 0x1ec6,\r
- 0x1ec8, 0x1ec8,\r
- 0x1eca, 0x1eca,\r
- 0x1ecc, 0x1ecc,\r
- 0x1ece, 0x1ece,\r
- 0x1ed0, 0x1ed0,\r
- 0x1ed2, 0x1ed2,\r
- 0x1ed4, 0x1ed4,\r
- 0x1ed6, 0x1ed6,\r
- 0x1ed8, 0x1ed8,\r
- 0x1eda, 0x1eda,\r
- 0x1edc, 0x1edc,\r
- 0x1ede, 0x1ede,\r
- 0x1ee0, 0x1ee0,\r
- 0x1ee2, 0x1ee2,\r
- 0x1ee4, 0x1ee4,\r
- 0x1ee6, 0x1ee6,\r
- 0x1ee8, 0x1ee8,\r
- 0x1eea, 0x1eea,\r
- 0x1eec, 0x1eec,\r
- 0x1eee, 0x1eee,\r
- 0x1ef0, 0x1ef0,\r
- 0x1ef2, 0x1ef2,\r
- 0x1ef4, 0x1ef4,\r
- 0x1ef6, 0x1ef6,\r
- 0x1ef8, 0x1ef8,\r
- 0x1f08, 0x1f0f,\r
- 0x1f18, 0x1f1d,\r
- 0x1f28, 0x1f2f,\r
- 0x1f38, 0x1f3f,\r
- 0x1f48, 0x1f4d,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f5f,\r
- 0x1f68, 0x1f6f,\r
- 0x1fb8, 0x1fbb,\r
- 0x1fc8, 0x1fcb,\r
- 0x1fd8, 0x1fdb,\r
- 0x1fe8, 0x1fec,\r
- 0x1ff8, 0x1ffb,\r
- 0x2102, 0x2102,\r
- 0x2107, 0x2107,\r
- 0x210b, 0x210d,\r
- 0x2110, 0x2112,\r
- 0x2115, 0x2115,\r
- 0x2119, 0x211d,\r
- 0x2124, 0x2124,\r
- 0x2126, 0x2126,\r
- 0x2128, 0x2128,\r
- 0x212a, 0x212d,\r
- 0x2130, 0x2131,\r
- 0x2133, 0x2133,\r
- 0x213e, 0x213f,\r
- 0x2145, 0x2145,\r
- 0x2c00, 0x2c2e,\r
- 0x2c80, 0x2c80,\r
- 0x2c82, 0x2c82,\r
- 0x2c84, 0x2c84,\r
- 0x2c86, 0x2c86,\r
- 0x2c88, 0x2c88,\r
- 0x2c8a, 0x2c8a,\r
- 0x2c8c, 0x2c8c,\r
- 0x2c8e, 0x2c8e,\r
- 0x2c90, 0x2c90,\r
- 0x2c92, 0x2c92,\r
- 0x2c94, 0x2c94,\r
- 0x2c96, 0x2c96,\r
- 0x2c98, 0x2c98,\r
- 0x2c9a, 0x2c9a,\r
- 0x2c9c, 0x2c9c,\r
- 0x2c9e, 0x2c9e,\r
- 0x2ca0, 0x2ca0,\r
- 0x2ca2, 0x2ca2,\r
- 0x2ca4, 0x2ca4,\r
- 0x2ca6, 0x2ca6,\r
- 0x2ca8, 0x2ca8,\r
- 0x2caa, 0x2caa,\r
- 0x2cac, 0x2cac,\r
- 0x2cae, 0x2cae,\r
- 0x2cb0, 0x2cb0,\r
- 0x2cb2, 0x2cb2,\r
- 0x2cb4, 0x2cb4,\r
- 0x2cb6, 0x2cb6,\r
- 0x2cb8, 0x2cb8,\r
- 0x2cba, 0x2cba,\r
- 0x2cbc, 0x2cbc,\r
- 0x2cbe, 0x2cbe,\r
- 0x2cc0, 0x2cc0,\r
- 0x2cc2, 0x2cc2,\r
- 0x2cc4, 0x2cc4,\r
- 0x2cc6, 0x2cc6,\r
- 0x2cc8, 0x2cc8,\r
- 0x2cca, 0x2cca,\r
- 0x2ccc, 0x2ccc,\r
- 0x2cce, 0x2cce,\r
- 0x2cd0, 0x2cd0,\r
- 0x2cd2, 0x2cd2,\r
- 0x2cd4, 0x2cd4,\r
- 0x2cd6, 0x2cd6,\r
- 0x2cd8, 0x2cd8,\r
- 0x2cda, 0x2cda,\r
- 0x2cdc, 0x2cdc,\r
- 0x2cde, 0x2cde,\r
- 0x2ce0, 0x2ce0,\r
- 0x2ce2, 0x2ce2,\r
- 0xff21, 0xff3a,\r
- 0x10400, 0x10427,\r
- 0x1d400, 0x1d419,\r
- 0x1d434, 0x1d44d,\r
- 0x1d468, 0x1d481,\r
- 0x1d49c, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b5,\r
- 0x1d4d0, 0x1d4e9,\r
- 0x1d504, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d538, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d56c, 0x1d585,\r
- 0x1d5a0, 0x1d5b9,\r
- 0x1d5d4, 0x1d5ed,\r
- 0x1d608, 0x1d621,\r
- 0x1d63c, 0x1d655,\r
- 0x1d670, 0x1d689,\r
- 0x1d6a8, 0x1d6c0,\r
- 0x1d6e2, 0x1d6fa,\r
- 0x1d71c, 0x1d734,\r
- 0x1d756, 0x1d76e,\r
- 0x1d790, 0x1d7a8\r
-}; /* CR_Lu */\r
-\r
-/* 'M': Major Category */\r
-static const OnigCodePoint CR_M[] = {\r
- 133,\r
- 0x0300, 0x036f,\r
- 0x0483, 0x0486,\r
- 0x0488, 0x0489,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05bd,\r
- 0x05bf, 0x05bf,\r
- 0x05c1, 0x05c2,\r
- 0x05c4, 0x05c5,\r
- 0x05c7, 0x05c7,\r
- 0x0610, 0x0615,\r
- 0x064b, 0x065e,\r
- 0x0670, 0x0670,\r
- 0x06d6, 0x06dc,\r
- 0x06de, 0x06e4,\r
- 0x06e7, 0x06e8,\r
- 0x06ea, 0x06ed,\r
- 0x0711, 0x0711,\r
- 0x0730, 0x074a,\r
- 0x07a6, 0x07b0,\r
- 0x0901, 0x0903,\r
- 0x093c, 0x093c,\r
- 0x093e, 0x094d,\r
- 0x0951, 0x0954,\r
- 0x0962, 0x0963,\r
- 0x0981, 0x0983,\r
- 0x09bc, 0x09bc,\r
- 0x09be, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09cd,\r
- 0x09d7, 0x09d7,\r
- 0x09e2, 0x09e3,\r
- 0x0a01, 0x0a03,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a70, 0x0a71,\r
- 0x0a81, 0x0a83,\r
- 0x0abc, 0x0abc,\r
- 0x0abe, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ae2, 0x0ae3,\r
- 0x0b01, 0x0b03,\r
- 0x0b3c, 0x0b3c,\r
- 0x0b3e, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b82, 0x0b82,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0c01, 0x0c03,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c82, 0x0c83,\r
- 0x0cbc, 0x0cbc,\r
- 0x0cbe, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0d02, 0x0d03,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d82, 0x0d83,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df3,\r
- 0x0e31, 0x0e31,\r
- 0x0e34, 0x0e3a,\r
- 0x0e47, 0x0e4e,\r
- 0x0eb1, 0x0eb1,\r
- 0x0eb4, 0x0eb9,\r
- 0x0ebb, 0x0ebc,\r
- 0x0ec8, 0x0ecd,\r
- 0x0f18, 0x0f19,\r
- 0x0f35, 0x0f35,\r
- 0x0f37, 0x0f37,\r
- 0x0f39, 0x0f39,\r
- 0x0f3e, 0x0f3f,\r
- 0x0f71, 0x0f84,\r
- 0x0f86, 0x0f87,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fc6, 0x0fc6,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1056, 0x1059,\r
- 0x135f, 0x135f,\r
- 0x1712, 0x1714,\r
- 0x1732, 0x1734,\r
- 0x1752, 0x1753,\r
- 0x1772, 0x1773,\r
- 0x17b6, 0x17d3,\r
- 0x17dd, 0x17dd,\r
- 0x180b, 0x180d,\r
- 0x18a9, 0x18a9,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x19b0, 0x19c0,\r
- 0x19c8, 0x19c9,\r
- 0x1a17, 0x1a1b,\r
- 0x1dc0, 0x1dc3,\r
- 0x20d0, 0x20eb,\r
- 0x302a, 0x302f,\r
- 0x3099, 0x309a,\r
- 0xa802, 0xa802,\r
- 0xa806, 0xa806,\r
- 0xa80b, 0xa80b,\r
- 0xa823, 0xa827,\r
- 0xfb1e, 0xfb1e,\r
- 0xfe00, 0xfe0f,\r
- 0xfe20, 0xfe23,\r
- 0x10a01, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a0f,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a3f,\r
- 0x1d165, 0x1d169,\r
- 0x1d16d, 0x1d172,\r
- 0x1d17b, 0x1d182,\r
- 0x1d185, 0x1d18b,\r
- 0x1d1aa, 0x1d1ad,\r
- 0x1d242, 0x1d244,\r
- 0xe0100, 0xe01ef\r
-}; /* CR_M */\r
-\r
-/* 'Mc': General Category */\r
-static const OnigCodePoint CR_Mc[] = {\r
- 63,\r
- 0x0903, 0x0903,\r
- 0x093e, 0x0940,\r
- 0x0949, 0x094c,\r
- 0x0982, 0x0983,\r
- 0x09be, 0x09c0,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09cc,\r
- 0x09d7, 0x09d7,\r
- 0x0a03, 0x0a03,\r
- 0x0a3e, 0x0a40,\r
- 0x0a83, 0x0a83,\r
- 0x0abe, 0x0ac0,\r
- 0x0ac9, 0x0ac9,\r
- 0x0acb, 0x0acc,\r
- 0x0b02, 0x0b03,\r
- 0x0b3e, 0x0b3e,\r
- 0x0b40, 0x0b40,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4c,\r
- 0x0b57, 0x0b57,\r
- 0x0bbe, 0x0bbf,\r
- 0x0bc1, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcc,\r
- 0x0bd7, 0x0bd7,\r
- 0x0c01, 0x0c03,\r
- 0x0c41, 0x0c44,\r
- 0x0c82, 0x0c83,\r
- 0x0cbe, 0x0cbe,\r
- 0x0cc0, 0x0cc4,\r
- 0x0cc7, 0x0cc8,\r
- 0x0cca, 0x0ccb,\r
- 0x0cd5, 0x0cd6,\r
- 0x0d02, 0x0d03,\r
- 0x0d3e, 0x0d40,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4c,\r
- 0x0d57, 0x0d57,\r
- 0x0d82, 0x0d83,\r
- 0x0dcf, 0x0dd1,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df3,\r
- 0x0f3e, 0x0f3f,\r
- 0x0f7f, 0x0f7f,\r
- 0x102c, 0x102c,\r
- 0x1031, 0x1031,\r
- 0x1038, 0x1038,\r
- 0x1056, 0x1057,\r
- 0x17b6, 0x17b6,\r
- 0x17be, 0x17c5,\r
- 0x17c7, 0x17c8,\r
- 0x1923, 0x1926,\r
- 0x1929, 0x192b,\r
- 0x1930, 0x1931,\r
- 0x1933, 0x1938,\r
- 0x19b0, 0x19c0,\r
- 0x19c8, 0x19c9,\r
- 0x1a19, 0x1a1b,\r
- 0xa802, 0xa802,\r
- 0xa823, 0xa824,\r
- 0xa827, 0xa827,\r
- 0x1d165, 0x1d166,\r
- 0x1d16d, 0x1d172\r
-}; /* CR_Mc */\r
-\r
-/* 'Me': General Category */\r
-static const OnigCodePoint CR_Me[] = {\r
- 4,\r
- 0x0488, 0x0489,\r
- 0x06de, 0x06de,\r
- 0x20dd, 0x20e0,\r
- 0x20e2, 0x20e4\r
-}; /* CR_Me */\r
-\r
-/* 'Mn': General Category */\r
-static const OnigCodePoint CR_Mn[] = {\r
- 124,\r
- 0x0300, 0x036f,\r
- 0x0483, 0x0486,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05bd,\r
- 0x05bf, 0x05bf,\r
- 0x05c1, 0x05c2,\r
- 0x05c4, 0x05c5,\r
- 0x05c7, 0x05c7,\r
- 0x0610, 0x0615,\r
- 0x064b, 0x065e,\r
- 0x0670, 0x0670,\r
- 0x06d6, 0x06dc,\r
- 0x06df, 0x06e4,\r
- 0x06e7, 0x06e8,\r
- 0x06ea, 0x06ed,\r
- 0x0711, 0x0711,\r
- 0x0730, 0x074a,\r
- 0x07a6, 0x07b0,\r
- 0x0901, 0x0902,\r
- 0x093c, 0x093c,\r
- 0x0941, 0x0948,\r
- 0x094d, 0x094d,\r
- 0x0951, 0x0954,\r
- 0x0962, 0x0963,\r
- 0x0981, 0x0981,\r
- 0x09bc, 0x09bc,\r
- 0x09c1, 0x09c4,\r
- 0x09cd, 0x09cd,\r
- 0x09e2, 0x09e3,\r
- 0x0a01, 0x0a02,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a41, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a70, 0x0a71,\r
- 0x0a81, 0x0a82,\r
- 0x0abc, 0x0abc,\r
- 0x0ac1, 0x0ac5,\r
- 0x0ac7, 0x0ac8,\r
- 0x0acd, 0x0acd,\r
- 0x0ae2, 0x0ae3,\r
- 0x0b01, 0x0b01,\r
- 0x0b3c, 0x0b3c,\r
- 0x0b3f, 0x0b3f,\r
- 0x0b41, 0x0b43,\r
- 0x0b4d, 0x0b4d,\r
- 0x0b56, 0x0b56,\r
- 0x0b82, 0x0b82,\r
- 0x0bc0, 0x0bc0,\r
- 0x0bcd, 0x0bcd,\r
- 0x0c3e, 0x0c40,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0cbc, 0x0cbc,\r
- 0x0cbf, 0x0cbf,\r
- 0x0cc6, 0x0cc6,\r
- 0x0ccc, 0x0ccd,\r
- 0x0d41, 0x0d43,\r
- 0x0d4d, 0x0d4d,\r
- 0x0dca, 0x0dca,\r
- 0x0dd2, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0e31, 0x0e31,\r
- 0x0e34, 0x0e3a,\r
- 0x0e47, 0x0e4e,\r
- 0x0eb1, 0x0eb1,\r
- 0x0eb4, 0x0eb9,\r
- 0x0ebb, 0x0ebc,\r
- 0x0ec8, 0x0ecd,\r
- 0x0f18, 0x0f19,\r
- 0x0f35, 0x0f35,\r
- 0x0f37, 0x0f37,\r
- 0x0f39, 0x0f39,\r
- 0x0f71, 0x0f7e,\r
- 0x0f80, 0x0f84,\r
- 0x0f86, 0x0f87,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fc6, 0x0fc6,\r
- 0x102d, 0x1030,\r
- 0x1032, 0x1032,\r
- 0x1036, 0x1037,\r
- 0x1039, 0x1039,\r
- 0x1058, 0x1059,\r
- 0x135f, 0x135f,\r
- 0x1712, 0x1714,\r
- 0x1732, 0x1734,\r
- 0x1752, 0x1753,\r
- 0x1772, 0x1773,\r
- 0x17b7, 0x17bd,\r
- 0x17c6, 0x17c6,\r
- 0x17c9, 0x17d3,\r
- 0x17dd, 0x17dd,\r
- 0x180b, 0x180d,\r
- 0x18a9, 0x18a9,\r
- 0x1920, 0x1922,\r
- 0x1927, 0x1928,\r
- 0x1932, 0x1932,\r
- 0x1939, 0x193b,\r
- 0x1a17, 0x1a18,\r
- 0x1dc0, 0x1dc3,\r
- 0x20d0, 0x20dc,\r
- 0x20e1, 0x20e1,\r
- 0x20e5, 0x20eb,\r
- 0x302a, 0x302f,\r
- 0x3099, 0x309a,\r
- 0xa806, 0xa806,\r
- 0xa80b, 0xa80b,\r
- 0xa825, 0xa826,\r
- 0xfb1e, 0xfb1e,\r
- 0xfe00, 0xfe0f,\r
- 0xfe20, 0xfe23,\r
- 0x10a01, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a0f,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a3f,\r
- 0x1d167, 0x1d169,\r
- 0x1d17b, 0x1d182,\r
- 0x1d185, 0x1d18b,\r
- 0x1d1aa, 0x1d1ad,\r
- 0x1d242, 0x1d244,\r
- 0xe0100, 0xe01ef\r
-}; /* CR_Mn */\r
-\r
-/* 'N': Major Category */\r
-static const OnigCodePoint CR_N[] = {\r
- 53,\r
- 0x0030, 0x0039,\r
- 0x00b2, 0x00b3,\r
- 0x00b9, 0x00b9,\r
- 0x00bc, 0x00be,\r
- 0x0660, 0x0669,\r
- 0x06f0, 0x06f9,\r
- 0x0966, 0x096f,\r
- 0x09e6, 0x09ef,\r
- 0x09f4, 0x09f9,\r
- 0x0a66, 0x0a6f,\r
- 0x0ae6, 0x0aef,\r
- 0x0b66, 0x0b6f,\r
- 0x0be6, 0x0bf2,\r
- 0x0c66, 0x0c6f,\r
- 0x0ce6, 0x0cef,\r
- 0x0d66, 0x0d6f,\r
- 0x0e50, 0x0e59,\r
- 0x0ed0, 0x0ed9,\r
- 0x0f20, 0x0f33,\r
- 0x1040, 0x1049,\r
- 0x1369, 0x137c,\r
- 0x16ee, 0x16f0,\r
- 0x17e0, 0x17e9,\r
- 0x17f0, 0x17f9,\r
- 0x1810, 0x1819,\r
- 0x1946, 0x194f,\r
- 0x19d0, 0x19d9,\r
- 0x2070, 0x2070,\r
- 0x2074, 0x2079,\r
- 0x2080, 0x2089,\r
- 0x2153, 0x2183,\r
- 0x2460, 0x249b,\r
- 0x24ea, 0x24ff,\r
- 0x2776, 0x2793,\r
- 0x2cfd, 0x2cfd,\r
- 0x3007, 0x3007,\r
- 0x3021, 0x3029,\r
- 0x3038, 0x303a,\r
- 0x3192, 0x3195,\r
- 0x3220, 0x3229,\r
- 0x3251, 0x325f,\r
- 0x3280, 0x3289,\r
- 0x32b1, 0x32bf,\r
- 0xff10, 0xff19,\r
- 0x10107, 0x10133,\r
- 0x10140, 0x10178,\r
- 0x1018a, 0x1018a,\r
- 0x10320, 0x10323,\r
- 0x1034a, 0x1034a,\r
- 0x103d1, 0x103d5,\r
- 0x104a0, 0x104a9,\r
- 0x10a40, 0x10a47,\r
- 0x1d7ce, 0x1d7ff\r
-}; /* CR_N */\r
-\r
-/* 'Nd': General Category */\r
-static const OnigCodePoint CR_Nd[] = {\r
- 23,\r
- 0x0030, 0x0039,\r
- 0x0660, 0x0669,\r
- 0x06f0, 0x06f9,\r
- 0x0966, 0x096f,\r
- 0x09e6, 0x09ef,\r
- 0x0a66, 0x0a6f,\r
- 0x0ae6, 0x0aef,\r
- 0x0b66, 0x0b6f,\r
- 0x0be6, 0x0bef,\r
- 0x0c66, 0x0c6f,\r
- 0x0ce6, 0x0cef,\r
- 0x0d66, 0x0d6f,\r
- 0x0e50, 0x0e59,\r
- 0x0ed0, 0x0ed9,\r
- 0x0f20, 0x0f29,\r
- 0x1040, 0x1049,\r
- 0x17e0, 0x17e9,\r
- 0x1810, 0x1819,\r
- 0x1946, 0x194f,\r
- 0x19d0, 0x19d9,\r
- 0xff10, 0xff19,\r
- 0x104a0, 0x104a9,\r
- 0x1d7ce, 0x1d7ff\r
-}; /* CR_Nd */\r
-\r
-/* 'Nl': General Category */\r
-static const OnigCodePoint CR_Nl[] = {\r
- 8,\r
- 0x16ee, 0x16f0,\r
- 0x2160, 0x2183,\r
- 0x3007, 0x3007,\r
- 0x3021, 0x3029,\r
- 0x3038, 0x303a,\r
- 0x10140, 0x10174,\r
- 0x1034a, 0x1034a,\r
- 0x103d1, 0x103d5\r
-}; /* CR_Nl */\r
-\r
-/* 'No': General Category */\r
-static const OnigCodePoint CR_No[] = {\r
- 26,\r
- 0x00b2, 0x00b3,\r
- 0x00b9, 0x00b9,\r
- 0x00bc, 0x00be,\r
- 0x09f4, 0x09f9,\r
- 0x0bf0, 0x0bf2,\r
- 0x0f2a, 0x0f33,\r
- 0x1369, 0x137c,\r
- 0x17f0, 0x17f9,\r
- 0x2070, 0x2070,\r
- 0x2074, 0x2079,\r
- 0x2080, 0x2089,\r
- 0x2153, 0x215f,\r
- 0x2460, 0x249b,\r
- 0x24ea, 0x24ff,\r
- 0x2776, 0x2793,\r
- 0x2cfd, 0x2cfd,\r
- 0x3192, 0x3195,\r
- 0x3220, 0x3229,\r
- 0x3251, 0x325f,\r
- 0x3280, 0x3289,\r
- 0x32b1, 0x32bf,\r
- 0x10107, 0x10133,\r
- 0x10175, 0x10178,\r
- 0x1018a, 0x1018a,\r
- 0x10320, 0x10323,\r
- 0x10a40, 0x10a47\r
-}; /* CR_No */\r
-\r
-/* 'P': Major Category */\r
-static const OnigCodePoint CR_P[] = {\r
- 96,\r
- 0x0021, 0x0023,\r
- 0x0025, 0x002a,\r
- 0x002c, 0x002f,\r
- 0x003a, 0x003b,\r
- 0x003f, 0x0040,\r
- 0x005b, 0x005d,\r
- 0x005f, 0x005f,\r
- 0x007b, 0x007b,\r
- 0x007d, 0x007d,\r
- 0x00a1, 0x00a1,\r
- 0x00ab, 0x00ab,\r
- 0x00b7, 0x00b7,\r
- 0x00bb, 0x00bb,\r
- 0x00bf, 0x00bf,\r
- 0x037e, 0x037e,\r
- 0x0387, 0x0387,\r
- 0x055a, 0x055f,\r
- 0x0589, 0x058a,\r
- 0x05be, 0x05be,\r
- 0x05c0, 0x05c0,\r
- 0x05c3, 0x05c3,\r
- 0x05c6, 0x05c6,\r
- 0x05f3, 0x05f4,\r
- 0x060c, 0x060d,\r
- 0x061b, 0x061b,\r
- 0x061e, 0x061f,\r
- 0x066a, 0x066d,\r
- 0x06d4, 0x06d4,\r
- 0x0700, 0x070d,\r
- 0x0964, 0x0965,\r
- 0x0970, 0x0970,\r
- 0x0df4, 0x0df4,\r
- 0x0e4f, 0x0e4f,\r
- 0x0e5a, 0x0e5b,\r
- 0x0f04, 0x0f12,\r
- 0x0f3a, 0x0f3d,\r
- 0x0f85, 0x0f85,\r
- 0x0fd0, 0x0fd1,\r
- 0x104a, 0x104f,\r
- 0x10fb, 0x10fb,\r
- 0x1361, 0x1368,\r
- 0x166d, 0x166e,\r
- 0x169b, 0x169c,\r
- 0x16eb, 0x16ed,\r
- 0x1735, 0x1736,\r
- 0x17d4, 0x17d6,\r
- 0x17d8, 0x17da,\r
- 0x1800, 0x180a,\r
- 0x1944, 0x1945,\r
- 0x19de, 0x19df,\r
- 0x1a1e, 0x1a1f,\r
- 0x2010, 0x2027,\r
- 0x2030, 0x2043,\r
- 0x2045, 0x2051,\r
- 0x2053, 0x205e,\r
- 0x207d, 0x207e,\r
- 0x208d, 0x208e,\r
- 0x2329, 0x232a,\r
- 0x23b4, 0x23b6,\r
- 0x2768, 0x2775,\r
- 0x27c5, 0x27c6,\r
- 0x27e6, 0x27eb,\r
- 0x2983, 0x2998,\r
- 0x29d8, 0x29db,\r
- 0x29fc, 0x29fd,\r
- 0x2cf9, 0x2cfc,\r
- 0x2cfe, 0x2cff,\r
- 0x2e00, 0x2e17,\r
- 0x2e1c, 0x2e1d,\r
- 0x3001, 0x3003,\r
- 0x3008, 0x3011,\r
- 0x3014, 0x301f,\r
- 0x3030, 0x3030,\r
- 0x303d, 0x303d,\r
- 0x30a0, 0x30a0,\r
- 0x30fb, 0x30fb,\r
- 0xfd3e, 0xfd3f,\r
- 0xfe10, 0xfe19,\r
- 0xfe30, 0xfe52,\r
- 0xfe54, 0xfe61,\r
- 0xfe63, 0xfe63,\r
- 0xfe68, 0xfe68,\r
- 0xfe6a, 0xfe6b,\r
- 0xff01, 0xff03,\r
- 0xff05, 0xff0a,\r
- 0xff0c, 0xff0f,\r
- 0xff1a, 0xff1b,\r
- 0xff1f, 0xff20,\r
- 0xff3b, 0xff3d,\r
- 0xff3f, 0xff3f,\r
- 0xff5b, 0xff5b,\r
- 0xff5d, 0xff5d,\r
- 0xff5f, 0xff65,\r
- 0x10100, 0x10101,\r
- 0x1039f, 0x1039f,\r
- 0x10a50, 0x10a58\r
-}; /* CR_P */\r
-\r
-/* 'Pc': General Category */\r
-static const OnigCodePoint CR_Pc[] = {\r
- 6,\r
- 0x005f, 0x005f,\r
- 0x203f, 0x2040,\r
- 0x2054, 0x2054,\r
- 0xfe33, 0xfe34,\r
- 0xfe4d, 0xfe4f,\r
- 0xff3f, 0xff3f\r
-}; /* CR_Pc */\r
-\r
-/* 'Pd': General Category */\r
-static const OnigCodePoint CR_Pd[] = {\r
- 12,\r
- 0x002d, 0x002d,\r
- 0x058a, 0x058a,\r
- 0x1806, 0x1806,\r
- 0x2010, 0x2015,\r
- 0x2e17, 0x2e17,\r
- 0x301c, 0x301c,\r
- 0x3030, 0x3030,\r
- 0x30a0, 0x30a0,\r
- 0xfe31, 0xfe32,\r
- 0xfe58, 0xfe58,\r
- 0xfe63, 0xfe63,\r
- 0xff0d, 0xff0d\r
-}; /* CR_Pd */\r
-\r
-/* 'Pe': General Category */\r
-static const OnigCodePoint CR_Pe[] = {\r
- 65,\r
- 0x0029, 0x0029,\r
- 0x005d, 0x005d,\r
- 0x007d, 0x007d,\r
- 0x0f3b, 0x0f3b,\r
- 0x0f3d, 0x0f3d,\r
- 0x169c, 0x169c,\r
- 0x2046, 0x2046,\r
- 0x207e, 0x207e,\r
- 0x208e, 0x208e,\r
- 0x232a, 0x232a,\r
- 0x23b5, 0x23b5,\r
- 0x2769, 0x2769,\r
- 0x276b, 0x276b,\r
- 0x276d, 0x276d,\r
- 0x276f, 0x276f,\r
- 0x2771, 0x2771,\r
- 0x2773, 0x2773,\r
- 0x2775, 0x2775,\r
- 0x27c6, 0x27c6,\r
- 0x27e7, 0x27e7,\r
- 0x27e9, 0x27e9,\r
- 0x27eb, 0x27eb,\r
- 0x2984, 0x2984,\r
- 0x2986, 0x2986,\r
- 0x2988, 0x2988,\r
- 0x298a, 0x298a,\r
- 0x298c, 0x298c,\r
- 0x298e, 0x298e,\r
- 0x2990, 0x2990,\r
- 0x2992, 0x2992,\r
- 0x2994, 0x2994,\r
- 0x2996, 0x2996,\r
- 0x2998, 0x2998,\r
- 0x29d9, 0x29d9,\r
- 0x29db, 0x29db,\r
- 0x29fd, 0x29fd,\r
- 0x3009, 0x3009,\r
- 0x300b, 0x300b,\r
- 0x300d, 0x300d,\r
- 0x300f, 0x300f,\r
- 0x3011, 0x3011,\r
- 0x3015, 0x3015,\r
- 0x3017, 0x3017,\r
- 0x3019, 0x3019,\r
- 0x301b, 0x301b,\r
- 0x301e, 0x301f,\r
- 0xfd3f, 0xfd3f,\r
- 0xfe18, 0xfe18,\r
- 0xfe36, 0xfe36,\r
- 0xfe38, 0xfe38,\r
- 0xfe3a, 0xfe3a,\r
- 0xfe3c, 0xfe3c,\r
- 0xfe3e, 0xfe3e,\r
- 0xfe40, 0xfe40,\r
- 0xfe42, 0xfe42,\r
- 0xfe44, 0xfe44,\r
- 0xfe48, 0xfe48,\r
- 0xfe5a, 0xfe5a,\r
- 0xfe5c, 0xfe5c,\r
- 0xfe5e, 0xfe5e,\r
- 0xff09, 0xff09,\r
- 0xff3d, 0xff3d,\r
- 0xff5d, 0xff5d,\r
- 0xff60, 0xff60,\r
- 0xff63, 0xff63\r
-}; /* CR_Pe */\r
-\r
-/* 'Pf': General Category */\r
-static const OnigCodePoint CR_Pf[] = {\r
- 9,\r
- 0x00bb, 0x00bb,\r
- 0x2019, 0x2019,\r
- 0x201d, 0x201d,\r
- 0x203a, 0x203a,\r
- 0x2e03, 0x2e03,\r
- 0x2e05, 0x2e05,\r
- 0x2e0a, 0x2e0a,\r
- 0x2e0d, 0x2e0d,\r
- 0x2e1d, 0x2e1d\r
-}; /* CR_Pf */\r
-\r
-/* 'Pi': General Category */\r
-static const OnigCodePoint CR_Pi[] = {\r
- 10,\r
- 0x00ab, 0x00ab,\r
- 0x2018, 0x2018,\r
- 0x201b, 0x201c,\r
- 0x201f, 0x201f,\r
- 0x2039, 0x2039,\r
- 0x2e02, 0x2e02,\r
- 0x2e04, 0x2e04,\r
- 0x2e09, 0x2e09,\r
- 0x2e0c, 0x2e0c,\r
- 0x2e1c, 0x2e1c\r
-}; /* CR_Pi */\r
-\r
-/* 'Po': General Category */\r
-static const OnigCodePoint CR_Po[] = {\r
- 88,\r
- 0x0021, 0x0023,\r
- 0x0025, 0x0027,\r
- 0x002a, 0x002a,\r
- 0x002c, 0x002c,\r
- 0x002e, 0x002f,\r
- 0x003a, 0x003b,\r
- 0x003f, 0x0040,\r
- 0x005c, 0x005c,\r
- 0x00a1, 0x00a1,\r
- 0x00b7, 0x00b7,\r
- 0x00bf, 0x00bf,\r
- 0x037e, 0x037e,\r
- 0x0387, 0x0387,\r
- 0x055a, 0x055f,\r
- 0x0589, 0x0589,\r
- 0x05be, 0x05be,\r
- 0x05c0, 0x05c0,\r
- 0x05c3, 0x05c3,\r
- 0x05c6, 0x05c6,\r
- 0x05f3, 0x05f4,\r
- 0x060c, 0x060d,\r
- 0x061b, 0x061b,\r
- 0x061e, 0x061f,\r
- 0x066a, 0x066d,\r
- 0x06d4, 0x06d4,\r
- 0x0700, 0x070d,\r
- 0x0964, 0x0965,\r
- 0x0970, 0x0970,\r
- 0x0df4, 0x0df4,\r
- 0x0e4f, 0x0e4f,\r
- 0x0e5a, 0x0e5b,\r
- 0x0f04, 0x0f12,\r
- 0x0f85, 0x0f85,\r
- 0x0fd0, 0x0fd1,\r
- 0x104a, 0x104f,\r
- 0x10fb, 0x10fb,\r
- 0x1361, 0x1368,\r
- 0x166d, 0x166e,\r
- 0x16eb, 0x16ed,\r
- 0x1735, 0x1736,\r
- 0x17d4, 0x17d6,\r
- 0x17d8, 0x17da,\r
- 0x1800, 0x1805,\r
- 0x1807, 0x180a,\r
- 0x1944, 0x1945,\r
- 0x19de, 0x19df,\r
- 0x1a1e, 0x1a1f,\r
- 0x2016, 0x2017,\r
- 0x2020, 0x2027,\r
- 0x2030, 0x2038,\r
- 0x203b, 0x203e,\r
- 0x2041, 0x2043,\r
- 0x2047, 0x2051,\r
- 0x2053, 0x2053,\r
- 0x2055, 0x205e,\r
- 0x23b6, 0x23b6,\r
- 0x2cf9, 0x2cfc,\r
- 0x2cfe, 0x2cff,\r
- 0x2e00, 0x2e01,\r
- 0x2e06, 0x2e08,\r
- 0x2e0b, 0x2e0b,\r
- 0x2e0e, 0x2e16,\r
- 0x3001, 0x3003,\r
- 0x303d, 0x303d,\r
- 0x30fb, 0x30fb,\r
- 0xfe10, 0xfe16,\r
- 0xfe19, 0xfe19,\r
- 0xfe30, 0xfe30,\r
- 0xfe45, 0xfe46,\r
- 0xfe49, 0xfe4c,\r
- 0xfe50, 0xfe52,\r
- 0xfe54, 0xfe57,\r
- 0xfe5f, 0xfe61,\r
- 0xfe68, 0xfe68,\r
- 0xfe6a, 0xfe6b,\r
- 0xff01, 0xff03,\r
- 0xff05, 0xff07,\r
- 0xff0a, 0xff0a,\r
- 0xff0c, 0xff0c,\r
- 0xff0e, 0xff0f,\r
- 0xff1a, 0xff1b,\r
- 0xff1f, 0xff20,\r
- 0xff3c, 0xff3c,\r
- 0xff61, 0xff61,\r
- 0xff64, 0xff65,\r
- 0x10100, 0x10101,\r
- 0x1039f, 0x1039f,\r
- 0x10a50, 0x10a58\r
-}; /* CR_Po */\r
-\r
-/* 'Ps': General Category */\r
-static const OnigCodePoint CR_Ps[] = {\r
- 67,\r
- 0x0028, 0x0028,\r
- 0x005b, 0x005b,\r
- 0x007b, 0x007b,\r
- 0x0f3a, 0x0f3a,\r
- 0x0f3c, 0x0f3c,\r
- 0x169b, 0x169b,\r
- 0x201a, 0x201a,\r
- 0x201e, 0x201e,\r
- 0x2045, 0x2045,\r
- 0x207d, 0x207d,\r
- 0x208d, 0x208d,\r
- 0x2329, 0x2329,\r
- 0x23b4, 0x23b4,\r
- 0x2768, 0x2768,\r
- 0x276a, 0x276a,\r
- 0x276c, 0x276c,\r
- 0x276e, 0x276e,\r
- 0x2770, 0x2770,\r
- 0x2772, 0x2772,\r
- 0x2774, 0x2774,\r
- 0x27c5, 0x27c5,\r
- 0x27e6, 0x27e6,\r
- 0x27e8, 0x27e8,\r
- 0x27ea, 0x27ea,\r
- 0x2983, 0x2983,\r
- 0x2985, 0x2985,\r
- 0x2987, 0x2987,\r
- 0x2989, 0x2989,\r
- 0x298b, 0x298b,\r
- 0x298d, 0x298d,\r
- 0x298f, 0x298f,\r
- 0x2991, 0x2991,\r
- 0x2993, 0x2993,\r
- 0x2995, 0x2995,\r
- 0x2997, 0x2997,\r
- 0x29d8, 0x29d8,\r
- 0x29da, 0x29da,\r
- 0x29fc, 0x29fc,\r
- 0x3008, 0x3008,\r
- 0x300a, 0x300a,\r
- 0x300c, 0x300c,\r
- 0x300e, 0x300e,\r
- 0x3010, 0x3010,\r
- 0x3014, 0x3014,\r
- 0x3016, 0x3016,\r
- 0x3018, 0x3018,\r
- 0x301a, 0x301a,\r
- 0x301d, 0x301d,\r
- 0xfd3e, 0xfd3e,\r
- 0xfe17, 0xfe17,\r
- 0xfe35, 0xfe35,\r
- 0xfe37, 0xfe37,\r
- 0xfe39, 0xfe39,\r
- 0xfe3b, 0xfe3b,\r
- 0xfe3d, 0xfe3d,\r
- 0xfe3f, 0xfe3f,\r
- 0xfe41, 0xfe41,\r
- 0xfe43, 0xfe43,\r
- 0xfe47, 0xfe47,\r
- 0xfe59, 0xfe59,\r
- 0xfe5b, 0xfe5b,\r
- 0xfe5d, 0xfe5d,\r
- 0xff08, 0xff08,\r
- 0xff3b, 0xff3b,\r
- 0xff5b, 0xff5b,\r
- 0xff5f, 0xff5f,\r
- 0xff62, 0xff62\r
-}; /* CR_Ps */\r
-\r
-/* 'S': Major Category */\r
-static const OnigCodePoint CR_S[] = {\r
- 162,\r
- 0x0024, 0x0024,\r
- 0x002b, 0x002b,\r
- 0x003c, 0x003e,\r
- 0x005e, 0x005e,\r
- 0x0060, 0x0060,\r
- 0x007c, 0x007c,\r
- 0x007e, 0x007e,\r
- 0x00a2, 0x00a9,\r
- 0x00ac, 0x00ac,\r
- 0x00ae, 0x00b1,\r
- 0x00b4, 0x00b4,\r
- 0x00b6, 0x00b6,\r
- 0x00b8, 0x00b8,\r
- 0x00d7, 0x00d7,\r
- 0x00f7, 0x00f7,\r
- 0x02c2, 0x02c5,\r
- 0x02d2, 0x02df,\r
- 0x02e5, 0x02ed,\r
- 0x02ef, 0x02ff,\r
- 0x0374, 0x0375,\r
- 0x0384, 0x0385,\r
- 0x03f6, 0x03f6,\r
- 0x0482, 0x0482,\r
- 0x060b, 0x060b,\r
- 0x060e, 0x060f,\r
- 0x06e9, 0x06e9,\r
- 0x06fd, 0x06fe,\r
- 0x09f2, 0x09f3,\r
- 0x09fa, 0x09fa,\r
- 0x0af1, 0x0af1,\r
- 0x0b70, 0x0b70,\r
- 0x0bf3, 0x0bfa,\r
- 0x0e3f, 0x0e3f,\r
- 0x0f01, 0x0f03,\r
- 0x0f13, 0x0f17,\r
- 0x0f1a, 0x0f1f,\r
- 0x0f34, 0x0f34,\r
- 0x0f36, 0x0f36,\r
- 0x0f38, 0x0f38,\r
- 0x0fbe, 0x0fc5,\r
- 0x0fc7, 0x0fcc,\r
- 0x0fcf, 0x0fcf,\r
- 0x1360, 0x1360,\r
- 0x1390, 0x1399,\r
- 0x17db, 0x17db,\r
- 0x1940, 0x1940,\r
- 0x19e0, 0x19ff,\r
- 0x1fbd, 0x1fbd,\r
- 0x1fbf, 0x1fc1,\r
- 0x1fcd, 0x1fcf,\r
- 0x1fdd, 0x1fdf,\r
- 0x1fed, 0x1fef,\r
- 0x1ffd, 0x1ffe,\r
- 0x2044, 0x2044,\r
- 0x2052, 0x2052,\r
- 0x207a, 0x207c,\r
- 0x208a, 0x208c,\r
- 0x20a0, 0x20b5,\r
- 0x2100, 0x2101,\r
- 0x2103, 0x2106,\r
- 0x2108, 0x2109,\r
- 0x2114, 0x2114,\r
- 0x2116, 0x2118,\r
- 0x211e, 0x2123,\r
- 0x2125, 0x2125,\r
- 0x2127, 0x2127,\r
- 0x2129, 0x2129,\r
- 0x212e, 0x212e,\r
- 0x2132, 0x2132,\r
- 0x213a, 0x213b,\r
- 0x2140, 0x2144,\r
- 0x214a, 0x214c,\r
- 0x2190, 0x2328,\r
- 0x232b, 0x23b3,\r
- 0x23b7, 0x23db,\r
- 0x2400, 0x2426,\r
- 0x2440, 0x244a,\r
- 0x249c, 0x24e9,\r
- 0x2500, 0x269c,\r
- 0x26a0, 0x26b1,\r
- 0x2701, 0x2704,\r
- 0x2706, 0x2709,\r
- 0x270c, 0x2727,\r
- 0x2729, 0x274b,\r
- 0x274d, 0x274d,\r
- 0x274f, 0x2752,\r
- 0x2756, 0x2756,\r
- 0x2758, 0x275e,\r
- 0x2761, 0x2767,\r
- 0x2794, 0x2794,\r
- 0x2798, 0x27af,\r
- 0x27b1, 0x27be,\r
- 0x27c0, 0x27c4,\r
- 0x27d0, 0x27e5,\r
- 0x27f0, 0x2982,\r
- 0x2999, 0x29d7,\r
- 0x29dc, 0x29fb,\r
- 0x29fe, 0x2b13,\r
- 0x2ce5, 0x2cea,\r
- 0x2e80, 0x2e99,\r
- 0x2e9b, 0x2ef3,\r
- 0x2f00, 0x2fd5,\r
- 0x2ff0, 0x2ffb,\r
- 0x3004, 0x3004,\r
- 0x3012, 0x3013,\r
- 0x3020, 0x3020,\r
- 0x3036, 0x3037,\r
- 0x303e, 0x303f,\r
- 0x309b, 0x309c,\r
- 0x3190, 0x3191,\r
- 0x3196, 0x319f,\r
- 0x31c0, 0x31cf,\r
- 0x3200, 0x321e,\r
- 0x322a, 0x3243,\r
- 0x3250, 0x3250,\r
- 0x3260, 0x327f,\r
- 0x328a, 0x32b0,\r
- 0x32c0, 0x32fe,\r
- 0x3300, 0x33ff,\r
- 0x4dc0, 0x4dff,\r
- 0xa490, 0xa4c6,\r
- 0xa700, 0xa716,\r
- 0xa828, 0xa82b,\r
- 0xfb29, 0xfb29,\r
- 0xfdfc, 0xfdfd,\r
- 0xfe62, 0xfe62,\r
- 0xfe64, 0xfe66,\r
- 0xfe69, 0xfe69,\r
- 0xff04, 0xff04,\r
- 0xff0b, 0xff0b,\r
- 0xff1c, 0xff1e,\r
- 0xff3e, 0xff3e,\r
- 0xff40, 0xff40,\r
- 0xff5c, 0xff5c,\r
- 0xff5e, 0xff5e,\r
- 0xffe0, 0xffe6,\r
- 0xffe8, 0xffee,\r
- 0xfffc, 0xfffd,\r
- 0x10102, 0x10102,\r
- 0x10137, 0x1013f,\r
- 0x10179, 0x10189,\r
- 0x103d0, 0x103d0,\r
- 0x1d000, 0x1d0f5,\r
- 0x1d100, 0x1d126,\r
- 0x1d12a, 0x1d164,\r
- 0x1d16a, 0x1d16c,\r
- 0x1d183, 0x1d184,\r
- 0x1d18c, 0x1d1a9,\r
- 0x1d1ae, 0x1d1dd,\r
- 0x1d200, 0x1d241,\r
- 0x1d245, 0x1d245,\r
- 0x1d300, 0x1d356,\r
- 0x1d6c1, 0x1d6c1,\r
- 0x1d6db, 0x1d6db,\r
- 0x1d6fb, 0x1d6fb,\r
- 0x1d715, 0x1d715,\r
- 0x1d735, 0x1d735,\r
- 0x1d74f, 0x1d74f,\r
- 0x1d76f, 0x1d76f,\r
- 0x1d789, 0x1d789,\r
- 0x1d7a9, 0x1d7a9,\r
- 0x1d7c3, 0x1d7c3\r
-}; /* CR_S */\r
-\r
-/* 'Sc': General Category */\r
-static const OnigCodePoint CR_Sc[] = {\r
- 14,\r
- 0x0024, 0x0024,\r
- 0x00a2, 0x00a5,\r
- 0x060b, 0x060b,\r
- 0x09f2, 0x09f3,\r
- 0x0af1, 0x0af1,\r
- 0x0bf9, 0x0bf9,\r
- 0x0e3f, 0x0e3f,\r
- 0x17db, 0x17db,\r
- 0x20a0, 0x20b5,\r
- 0xfdfc, 0xfdfc,\r
- 0xfe69, 0xfe69,\r
- 0xff04, 0xff04,\r
- 0xffe0, 0xffe1,\r
- 0xffe5, 0xffe6\r
-}; /* CR_Sc */\r
-\r
-/* 'Sk': General Category */\r
-static const OnigCodePoint CR_Sk[] = {\r
- 23,\r
- 0x005e, 0x005e,\r
- 0x0060, 0x0060,\r
- 0x00a8, 0x00a8,\r
- 0x00af, 0x00af,\r
- 0x00b4, 0x00b4,\r
- 0x00b8, 0x00b8,\r
- 0x02c2, 0x02c5,\r
- 0x02d2, 0x02df,\r
- 0x02e5, 0x02ed,\r
- 0x02ef, 0x02ff,\r
- 0x0374, 0x0375,\r
- 0x0384, 0x0385,\r
- 0x1fbd, 0x1fbd,\r
- 0x1fbf, 0x1fc1,\r
- 0x1fcd, 0x1fcf,\r
- 0x1fdd, 0x1fdf,\r
- 0x1fed, 0x1fef,\r
- 0x1ffd, 0x1ffe,\r
- 0x309b, 0x309c,\r
- 0xa700, 0xa716,\r
- 0xff3e, 0xff3e,\r
- 0xff40, 0xff40,\r
- 0xffe3, 0xffe3\r
-}; /* CR_Sk */\r
-\r
-/* 'Sm': General Category */\r
-static const OnigCodePoint CR_Sm[] = {\r
- 59,\r
- 0x002b, 0x002b,\r
- 0x003c, 0x003e,\r
- 0x007c, 0x007c,\r
- 0x007e, 0x007e,\r
- 0x00ac, 0x00ac,\r
- 0x00b1, 0x00b1,\r
- 0x00d7, 0x00d7,\r
- 0x00f7, 0x00f7,\r
- 0x03f6, 0x03f6,\r
- 0x2044, 0x2044,\r
- 0x2052, 0x2052,\r
- 0x207a, 0x207c,\r
- 0x208a, 0x208c,\r
- 0x2140, 0x2144,\r
- 0x214b, 0x214b,\r
- 0x2190, 0x2194,\r
- 0x219a, 0x219b,\r
- 0x21a0, 0x21a0,\r
- 0x21a3, 0x21a3,\r
- 0x21a6, 0x21a6,\r
- 0x21ae, 0x21ae,\r
- 0x21ce, 0x21cf,\r
- 0x21d2, 0x21d2,\r
- 0x21d4, 0x21d4,\r
- 0x21f4, 0x22ff,\r
- 0x2308, 0x230b,\r
- 0x2320, 0x2321,\r
- 0x237c, 0x237c,\r
- 0x239b, 0x23b3,\r
- 0x25b7, 0x25b7,\r
- 0x25c1, 0x25c1,\r
- 0x25f8, 0x25ff,\r
- 0x266f, 0x266f,\r
- 0x27c0, 0x27c4,\r
- 0x27d0, 0x27e5,\r
- 0x27f0, 0x27ff,\r
- 0x2900, 0x2982,\r
- 0x2999, 0x29d7,\r
- 0x29dc, 0x29fb,\r
- 0x29fe, 0x2aff,\r
- 0xfb29, 0xfb29,\r
- 0xfe62, 0xfe62,\r
- 0xfe64, 0xfe66,\r
- 0xff0b, 0xff0b,\r
- 0xff1c, 0xff1e,\r
- 0xff5c, 0xff5c,\r
- 0xff5e, 0xff5e,\r
- 0xffe2, 0xffe2,\r
- 0xffe9, 0xffec,\r
- 0x1d6c1, 0x1d6c1,\r
- 0x1d6db, 0x1d6db,\r
- 0x1d6fb, 0x1d6fb,\r
- 0x1d715, 0x1d715,\r
- 0x1d735, 0x1d735,\r
- 0x1d74f, 0x1d74f,\r
- 0x1d76f, 0x1d76f,\r
- 0x1d789, 0x1d789,\r
- 0x1d7a9, 0x1d7a9,\r
- 0x1d7c3, 0x1d7c3\r
-}; /* CR_Sm */\r
-\r
-/* 'So': General Category */\r
-static const OnigCodePoint CR_So[] = {\r
- 120,\r
- 0x00a6, 0x00a7,\r
- 0x00a9, 0x00a9,\r
- 0x00ae, 0x00ae,\r
- 0x00b0, 0x00b0,\r
- 0x00b6, 0x00b6,\r
- 0x0482, 0x0482,\r
- 0x060e, 0x060f,\r
- 0x06e9, 0x06e9,\r
- 0x06fd, 0x06fe,\r
- 0x09fa, 0x09fa,\r
- 0x0b70, 0x0b70,\r
- 0x0bf3, 0x0bf8,\r
- 0x0bfa, 0x0bfa,\r
- 0x0f01, 0x0f03,\r
- 0x0f13, 0x0f17,\r
- 0x0f1a, 0x0f1f,\r
- 0x0f34, 0x0f34,\r
- 0x0f36, 0x0f36,\r
- 0x0f38, 0x0f38,\r
- 0x0fbe, 0x0fc5,\r
- 0x0fc7, 0x0fcc,\r
- 0x0fcf, 0x0fcf,\r
- 0x1360, 0x1360,\r
- 0x1390, 0x1399,\r
- 0x1940, 0x1940,\r
- 0x19e0, 0x19ff,\r
- 0x2100, 0x2101,\r
- 0x2103, 0x2106,\r
- 0x2108, 0x2109,\r
- 0x2114, 0x2114,\r
- 0x2116, 0x2118,\r
- 0x211e, 0x2123,\r
- 0x2125, 0x2125,\r
- 0x2127, 0x2127,\r
- 0x2129, 0x2129,\r
- 0x212e, 0x212e,\r
- 0x2132, 0x2132,\r
- 0x213a, 0x213b,\r
- 0x214a, 0x214a,\r
- 0x214c, 0x214c,\r
- 0x2195, 0x2199,\r
- 0x219c, 0x219f,\r
- 0x21a1, 0x21a2,\r
- 0x21a4, 0x21a5,\r
- 0x21a7, 0x21ad,\r
- 0x21af, 0x21cd,\r
- 0x21d0, 0x21d1,\r
- 0x21d3, 0x21d3,\r
- 0x21d5, 0x21f3,\r
- 0x2300, 0x2307,\r
- 0x230c, 0x231f,\r
- 0x2322, 0x2328,\r
- 0x232b, 0x237b,\r
- 0x237d, 0x239a,\r
- 0x23b7, 0x23db,\r
- 0x2400, 0x2426,\r
- 0x2440, 0x244a,\r
- 0x249c, 0x24e9,\r
- 0x2500, 0x25b6,\r
- 0x25b8, 0x25c0,\r
- 0x25c2, 0x25f7,\r
- 0x2600, 0x266e,\r
- 0x2670, 0x269c,\r
- 0x26a0, 0x26b1,\r
- 0x2701, 0x2704,\r
- 0x2706, 0x2709,\r
- 0x270c, 0x2727,\r
- 0x2729, 0x274b,\r
- 0x274d, 0x274d,\r
- 0x274f, 0x2752,\r
- 0x2756, 0x2756,\r
- 0x2758, 0x275e,\r
- 0x2761, 0x2767,\r
- 0x2794, 0x2794,\r
- 0x2798, 0x27af,\r
- 0x27b1, 0x27be,\r
- 0x2800, 0x28ff,\r
- 0x2b00, 0x2b13,\r
- 0x2ce5, 0x2cea,\r
- 0x2e80, 0x2e99,\r
- 0x2e9b, 0x2ef3,\r
- 0x2f00, 0x2fd5,\r
- 0x2ff0, 0x2ffb,\r
- 0x3004, 0x3004,\r
- 0x3012, 0x3013,\r
- 0x3020, 0x3020,\r
- 0x3036, 0x3037,\r
- 0x303e, 0x303f,\r
- 0x3190, 0x3191,\r
- 0x3196, 0x319f,\r
- 0x31c0, 0x31cf,\r
- 0x3200, 0x321e,\r
- 0x322a, 0x3243,\r
- 0x3250, 0x3250,\r
- 0x3260, 0x327f,\r
- 0x328a, 0x32b0,\r
- 0x32c0, 0x32fe,\r
- 0x3300, 0x33ff,\r
- 0x4dc0, 0x4dff,\r
- 0xa490, 0xa4c6,\r
- 0xa828, 0xa82b,\r
- 0xfdfd, 0xfdfd,\r
- 0xffe4, 0xffe4,\r
- 0xffe8, 0xffe8,\r
- 0xffed, 0xffee,\r
- 0xfffc, 0xfffd,\r
- 0x10102, 0x10102,\r
- 0x10137, 0x1013f,\r
- 0x10179, 0x10189,\r
- 0x103d0, 0x103d0,\r
- 0x1d000, 0x1d0f5,\r
- 0x1d100, 0x1d126,\r
- 0x1d12a, 0x1d164,\r
- 0x1d16a, 0x1d16c,\r
- 0x1d183, 0x1d184,\r
- 0x1d18c, 0x1d1a9,\r
- 0x1d1ae, 0x1d1dd,\r
- 0x1d200, 0x1d241,\r
- 0x1d245, 0x1d245,\r
- 0x1d300, 0x1d356\r
-}; /* CR_So */\r
-\r
-/* 'Z': Major Category */\r
-static const OnigCodePoint CR_Z[] = {\r
- 9,\r
- 0x0020, 0x0020,\r
- 0x00a0, 0x00a0,\r
- 0x1680, 0x1680,\r
- 0x180e, 0x180e,\r
- 0x2000, 0x200a,\r
- 0x2028, 0x2029,\r
- 0x202f, 0x202f,\r
- 0x205f, 0x205f,\r
- 0x3000, 0x3000\r
-}; /* CR_Z */\r
-\r
-/* 'Zl': General Category */\r
-static const OnigCodePoint CR_Zl[] = {\r
- 1,\r
- 0x2028, 0x2028\r
-}; /* CR_Zl */\r
-\r
-/* 'Zp': General Category */\r
-static const OnigCodePoint CR_Zp[] = {\r
- 1,\r
- 0x2029, 0x2029\r
-}; /* CR_Zp */\r
-\r
-/* 'Zs': General Category */\r
-static const OnigCodePoint CR_Zs[] = {\r
- 8,\r
- 0x0020, 0x0020,\r
- 0x00a0, 0x00a0,\r
- 0x1680, 0x1680,\r
- 0x180e, 0x180e,\r
- 0x2000, 0x200a,\r
- 0x202f, 0x202f,\r
- 0x205f, 0x205f,\r
- 0x3000, 0x3000\r
-}; /* CR_Zs */\r
-\r
-/* 'Arabic': Script */\r
-static const OnigCodePoint CR_Arabic[] = {\r
- 17,\r
- 0x060b, 0x060b,\r
- 0x060d, 0x0615,\r
- 0x061e, 0x061e,\r
- 0x0621, 0x063a,\r
- 0x0641, 0x064a,\r
- 0x0656, 0x065e,\r
- 0x066a, 0x066f,\r
- 0x0671, 0x06dc,\r
- 0x06de, 0x06ff,\r
- 0x0750, 0x076d,\r
- 0xfb50, 0xfbb1,\r
- 0xfbd3, 0xfd3d,\r
- 0xfd50, 0xfd8f,\r
- 0xfd92, 0xfdc7,\r
- 0xfdf0, 0xfdfc,\r
- 0xfe70, 0xfe74,\r
- 0xfe76, 0xfefc\r
-}; /* CR_Arabic */\r
-\r
-/* 'Armenian': Script */\r
-static const OnigCodePoint CR_Armenian[] = {\r
- 5,\r
- 0x0531, 0x0556,\r
- 0x0559, 0x055f,\r
- 0x0561, 0x0587,\r
- 0x058a, 0x058a,\r
- 0xfb13, 0xfb17\r
-}; /* CR_Armenian */\r
-\r
-/* 'Bengali': Script */\r
-static const OnigCodePoint CR_Bengali[] = {\r
- 14,\r
- 0x0981, 0x0983,\r
- 0x0985, 0x098c,\r
- 0x098f, 0x0990,\r
- 0x0993, 0x09a8,\r
- 0x09aa, 0x09b0,\r
- 0x09b2, 0x09b2,\r
- 0x09b6, 0x09b9,\r
- 0x09bc, 0x09c4,\r
- 0x09c7, 0x09c8,\r
- 0x09cb, 0x09ce,\r
- 0x09d7, 0x09d7,\r
- 0x09dc, 0x09dd,\r
- 0x09df, 0x09e3,\r
- 0x09e6, 0x09fa\r
-}; /* CR_Bengali */\r
-\r
-/* 'Bopomofo': Script */\r
-static const OnigCodePoint CR_Bopomofo[] = {\r
- 2,\r
- 0x3105, 0x312c,\r
- 0x31a0, 0x31b7\r
-}; /* CR_Bopomofo */\r
-\r
-/* 'Braille': Script */\r
-static const OnigCodePoint CR_Braille[] = {\r
- 1,\r
- 0x2800, 0x28ff\r
-}; /* CR_Braille */\r
-\r
-/* 'Buginese': Script */\r
-static const OnigCodePoint CR_Buginese[] = {\r
- 2,\r
- 0x1a00, 0x1a1b,\r
- 0x1a1e, 0x1a1f\r
-}; /* CR_Buginese */\r
-\r
-/* 'Buhid': Script */\r
-static const OnigCodePoint CR_Buhid[] = {\r
- 1,\r
- 0x1740, 0x1753\r
-}; /* CR_Buhid */\r
-\r
-/* 'Canadian_Aboriginal': Script */\r
-static const OnigCodePoint CR_Canadian_Aboriginal[] = {\r
- 1,\r
- 0x1401, 0x1676\r
-}; /* CR_Canadian_Aboriginal */\r
-\r
-/* 'Cherokee': Script */\r
-static const OnigCodePoint CR_Cherokee[] = {\r
- 1,\r
- 0x13a0, 0x13f4\r
-}; /* CR_Cherokee */\r
-\r
-/* 'Common': Script */\r
-static const OnigCodePoint CR_Common[] = {\r
- 126,\r
- 0x0000, 0x0040,\r
- 0x005b, 0x0060,\r
- 0x007b, 0x00a9,\r
- 0x00ab, 0x00b9,\r
- 0x00bb, 0x00bf,\r
- 0x00d7, 0x00d7,\r
- 0x00f7, 0x00f7,\r
- 0x02b9, 0x02df,\r
- 0x02e5, 0x02ff,\r
- 0x037e, 0x037e,\r
- 0x0387, 0x0387,\r
- 0x0589, 0x0589,\r
- 0x0600, 0x0603,\r
- 0x060c, 0x060c,\r
- 0x061b, 0x061b,\r
- 0x061f, 0x061f,\r
- 0x0640, 0x0640,\r
- 0x0660, 0x0669,\r
- 0x06dd, 0x06dd,\r
- 0x0964, 0x0965,\r
- 0x0970, 0x0970,\r
- 0x0e3f, 0x0e3f,\r
- 0x10fb, 0x10fb,\r
- 0x16eb, 0x16ed,\r
- 0x1735, 0x1736,\r
- 0x2000, 0x200b,\r
- 0x200e, 0x2063,\r
- 0x206a, 0x2070,\r
- 0x2074, 0x207e,\r
- 0x2080, 0x208e,\r
- 0x20a0, 0x20b5,\r
- 0x2100, 0x2125,\r
- 0x2127, 0x2129,\r
- 0x212c, 0x214c,\r
- 0x2153, 0x2183,\r
- 0x2190, 0x23db,\r
- 0x2400, 0x2426,\r
- 0x2440, 0x244a,\r
- 0x2460, 0x269c,\r
- 0x26a0, 0x26b1,\r
- 0x2701, 0x2704,\r
- 0x2706, 0x2709,\r
- 0x270c, 0x2727,\r
- 0x2729, 0x274b,\r
- 0x274d, 0x274d,\r
- 0x274f, 0x2752,\r
- 0x2756, 0x2756,\r
- 0x2758, 0x275e,\r
- 0x2761, 0x2794,\r
- 0x2798, 0x27af,\r
- 0x27b1, 0x27be,\r
- 0x27c0, 0x27c6,\r
- 0x27d0, 0x27eb,\r
- 0x27f0, 0x27ff,\r
- 0x2900, 0x2b13,\r
- 0x2e00, 0x2e17,\r
- 0x2e1c, 0x2e1d,\r
- 0x2ff0, 0x2ffb,\r
- 0x3000, 0x3004,\r
- 0x3006, 0x3006,\r
- 0x3008, 0x3020,\r
- 0x3030, 0x3037,\r
- 0x303c, 0x303f,\r
- 0x309b, 0x309c,\r
- 0x30a0, 0x30a0,\r
- 0x30fb, 0x30fc,\r
- 0x3190, 0x319f,\r
- 0x31c0, 0x31cf,\r
- 0x3220, 0x3243,\r
- 0x3250, 0x325f,\r
- 0x327e, 0x32fe,\r
- 0x3300, 0x33ff,\r
- 0x4dc0, 0x4dff,\r
- 0xa700, 0xa716,\r
- 0xe000, 0xf8ff,\r
- 0xfd3e, 0xfd3f,\r
- 0xfdfd, 0xfdfd,\r
- 0xfe10, 0xfe19,\r
- 0xfe30, 0xfe52,\r
- 0xfe54, 0xfe66,\r
- 0xfe68, 0xfe6b,\r
- 0xfeff, 0xfeff,\r
- 0xff01, 0xff20,\r
- 0xff3b, 0xff40,\r
- 0xff5b, 0xff65,\r
- 0xff70, 0xff70,\r
- 0xff9e, 0xff9f,\r
- 0xffe0, 0xffe6,\r
- 0xffe8, 0xffee,\r
- 0xfff9, 0xfffd,\r
- 0x10100, 0x10102,\r
- 0x10107, 0x10133,\r
- 0x10137, 0x1013f,\r
- 0x1d000, 0x1d0f5,\r
- 0x1d100, 0x1d126,\r
- 0x1d12a, 0x1d166,\r
- 0x1d16a, 0x1d17a,\r
- 0x1d183, 0x1d184,\r
- 0x1d18c, 0x1d1a9,\r
- 0x1d1ae, 0x1d1dd,\r
- 0x1d300, 0x1d356,\r
- 0x1d400, 0x1d454,\r
- 0x1d456, 0x1d49c,\r
- 0x1d49e, 0x1d49f,\r
- 0x1d4a2, 0x1d4a2,\r
- 0x1d4a5, 0x1d4a6,\r
- 0x1d4a9, 0x1d4ac,\r
- 0x1d4ae, 0x1d4b9,\r
- 0x1d4bb, 0x1d4bb,\r
- 0x1d4bd, 0x1d4c3,\r
- 0x1d4c5, 0x1d505,\r
- 0x1d507, 0x1d50a,\r
- 0x1d50d, 0x1d514,\r
- 0x1d516, 0x1d51c,\r
- 0x1d51e, 0x1d539,\r
- 0x1d53b, 0x1d53e,\r
- 0x1d540, 0x1d544,\r
- 0x1d546, 0x1d546,\r
- 0x1d54a, 0x1d550,\r
- 0x1d552, 0x1d6a5,\r
- 0x1d6a8, 0x1d7c9,\r
- 0x1d7ce, 0x1d7ff,\r
- 0xe0001, 0xe0001,\r
- 0xe0020, 0xe007f,\r
- 0xf0000, 0xffffd,\r
- 0x100000, 0x10fffd\r
-}; /* CR_Common */\r
-\r
-/* 'Coptic': Script */\r
-static const OnigCodePoint CR_Coptic[] = {\r
- 3,\r
- 0x03e2, 0x03ef,\r
- 0x2c80, 0x2cea,\r
- 0x2cf9, 0x2cff\r
-}; /* CR_Coptic */\r
-\r
-/* 'Cypriot': Script */\r
-static const OnigCodePoint CR_Cypriot[] = {\r
- 6,\r
- 0x10800, 0x10805,\r
- 0x10808, 0x10808,\r
- 0x1080a, 0x10835,\r
- 0x10837, 0x10838,\r
- 0x1083c, 0x1083c,\r
- 0x1083f, 0x1083f\r
-}; /* CR_Cypriot */\r
-\r
-/* 'Cyrillic': Script */\r
-static const OnigCodePoint CR_Cyrillic[] = {\r
- 6,\r
- 0x0400, 0x0486,\r
- 0x0488, 0x04ce,\r
- 0x04d0, 0x04f9,\r
- 0x0500, 0x050f,\r
- 0x1d2b, 0x1d2b,\r
- 0x1d78, 0x1d78\r
-}; /* CR_Cyrillic */\r
-\r
-/* 'Deseret': Script */\r
-static const OnigCodePoint CR_Deseret[] = {\r
- 1,\r
- 0x10400, 0x1044f\r
-}; /* CR_Deseret */\r
-\r
-/* 'Devanagari': Script */\r
-static const OnigCodePoint CR_Devanagari[] = {\r
- 6,\r
- 0x0901, 0x0939,\r
- 0x093c, 0x094d,\r
- 0x0950, 0x0954,\r
- 0x0958, 0x0963,\r
- 0x0966, 0x096f,\r
- 0x097d, 0x097d\r
-}; /* CR_Devanagari */\r
-\r
-/* 'Ethiopic': Script */\r
-static const OnigCodePoint CR_Ethiopic[] = {\r
- 27,\r
- 0x1200, 0x1248,\r
- 0x124a, 0x124d,\r
- 0x1250, 0x1256,\r
- 0x1258, 0x1258,\r
- 0x125a, 0x125d,\r
- 0x1260, 0x1288,\r
- 0x128a, 0x128d,\r
- 0x1290, 0x12b0,\r
- 0x12b2, 0x12b5,\r
- 0x12b8, 0x12be,\r
- 0x12c0, 0x12c0,\r
- 0x12c2, 0x12c5,\r
- 0x12c8, 0x12d6,\r
- 0x12d8, 0x1310,\r
- 0x1312, 0x1315,\r
- 0x1318, 0x135a,\r
- 0x135f, 0x137c,\r
- 0x1380, 0x1399,\r
- 0x2d80, 0x2d96,\r
- 0x2da0, 0x2da6,\r
- 0x2da8, 0x2dae,\r
- 0x2db0, 0x2db6,\r
- 0x2db8, 0x2dbe,\r
- 0x2dc0, 0x2dc6,\r
- 0x2dc8, 0x2dce,\r
- 0x2dd0, 0x2dd6,\r
- 0x2dd8, 0x2dde\r
-}; /* CR_Ethiopic */\r
-\r
-/* 'Georgian': Script */\r
-static const OnigCodePoint CR_Georgian[] = {\r
- 4,\r
- 0x10a0, 0x10c5,\r
- 0x10d0, 0x10fa,\r
- 0x10fc, 0x10fc,\r
- 0x2d00, 0x2d25\r
-}; /* CR_Georgian */\r
-\r
-/* 'Glagolitic': Script */\r
-static const OnigCodePoint CR_Glagolitic[] = {\r
- 2,\r
- 0x2c00, 0x2c2e,\r
- 0x2c30, 0x2c5e\r
-}; /* CR_Glagolitic */\r
-\r
-/* 'Gothic': Script */\r
-static const OnigCodePoint CR_Gothic[] = {\r
- 1,\r
- 0x10330, 0x1034a\r
-}; /* CR_Gothic */\r
-\r
-/* 'Greek': Script */\r
-static const OnigCodePoint CR_Greek[] = {\r
- 31,\r
- 0x0374, 0x0375,\r
- 0x037a, 0x037a,\r
- 0x0384, 0x0386,\r
- 0x0388, 0x038a,\r
- 0x038c, 0x038c,\r
- 0x038e, 0x03a1,\r
- 0x03a3, 0x03ce,\r
- 0x03d0, 0x03e1,\r
- 0x03f0, 0x03ff,\r
- 0x1d26, 0x1d2a,\r
- 0x1d5d, 0x1d61,\r
- 0x1d66, 0x1d6a,\r
- 0x1f00, 0x1f15,\r
- 0x1f18, 0x1f1d,\r
- 0x1f20, 0x1f45,\r
- 0x1f48, 0x1f4d,\r
- 0x1f50, 0x1f57,\r
- 0x1f59, 0x1f59,\r
- 0x1f5b, 0x1f5b,\r
- 0x1f5d, 0x1f5d,\r
- 0x1f5f, 0x1f7d,\r
- 0x1f80, 0x1fb4,\r
- 0x1fb6, 0x1fc4,\r
- 0x1fc6, 0x1fd3,\r
- 0x1fd6, 0x1fdb,\r
- 0x1fdd, 0x1fef,\r
- 0x1ff2, 0x1ff4,\r
- 0x1ff6, 0x1ffe,\r
- 0x2126, 0x2126,\r
- 0x10140, 0x1018a,\r
- 0x1d200, 0x1d245\r
-}; /* CR_Greek */\r
-\r
-/* 'Gujarati': Script */\r
-static const OnigCodePoint CR_Gujarati[] = {\r
- 14,\r
- 0x0a81, 0x0a83,\r
- 0x0a85, 0x0a8d,\r
- 0x0a8f, 0x0a91,\r
- 0x0a93, 0x0aa8,\r
- 0x0aaa, 0x0ab0,\r
- 0x0ab2, 0x0ab3,\r
- 0x0ab5, 0x0ab9,\r
- 0x0abc, 0x0ac5,\r
- 0x0ac7, 0x0ac9,\r
- 0x0acb, 0x0acd,\r
- 0x0ad0, 0x0ad0,\r
- 0x0ae0, 0x0ae3,\r
- 0x0ae6, 0x0aef,\r
- 0x0af1, 0x0af1\r
-}; /* CR_Gujarati */\r
-\r
-/* 'Gurmukhi': Script */\r
-static const OnigCodePoint CR_Gurmukhi[] = {\r
- 15,\r
- 0x0a01, 0x0a03,\r
- 0x0a05, 0x0a0a,\r
- 0x0a0f, 0x0a10,\r
- 0x0a13, 0x0a28,\r
- 0x0a2a, 0x0a30,\r
- 0x0a32, 0x0a33,\r
- 0x0a35, 0x0a36,\r
- 0x0a38, 0x0a39,\r
- 0x0a3c, 0x0a3c,\r
- 0x0a3e, 0x0a42,\r
- 0x0a47, 0x0a48,\r
- 0x0a4b, 0x0a4d,\r
- 0x0a59, 0x0a5c,\r
- 0x0a5e, 0x0a5e,\r
- 0x0a66, 0x0a74\r
-}; /* CR_Gurmukhi */\r
-\r
-/* 'Han': Script */\r
-static const OnigCodePoint CR_Han[] = {\r
- 14,\r
- 0x2e80, 0x2e99,\r
- 0x2e9b, 0x2ef3,\r
- 0x2f00, 0x2fd5,\r
- 0x3005, 0x3005,\r
- 0x3007, 0x3007,\r
- 0x3021, 0x3029,\r
- 0x3038, 0x303b,\r
- 0x3400, 0x4db5,\r
- 0x4e00, 0x9fbb,\r
- 0xf900, 0xfa2d,\r
- 0xfa30, 0xfa6a,\r
- 0xfa70, 0xfad9,\r
- 0x20000, 0x2a6d6,\r
- 0x2f800, 0x2fa1d\r
-}; /* CR_Han */\r
-\r
-/* 'Hangul': Script */\r
-static const OnigCodePoint CR_Hangul[] = {\r
- 12,\r
- 0x1100, 0x1159,\r
- 0x115f, 0x11a2,\r
- 0x11a8, 0x11f9,\r
- 0x3131, 0x318e,\r
- 0x3200, 0x321e,\r
- 0x3260, 0x327d,\r
- 0xac00, 0xd7a3,\r
- 0xffa0, 0xffbe,\r
- 0xffc2, 0xffc7,\r
- 0xffca, 0xffcf,\r
- 0xffd2, 0xffd7,\r
- 0xffda, 0xffdc\r
-}; /* CR_Hangul */\r
-\r
-/* 'Hanunoo': Script */\r
-static const OnigCodePoint CR_Hanunoo[] = {\r
- 1,\r
- 0x1720, 0x1734\r
-}; /* CR_Hanunoo */\r
-\r
-/* 'Hebrew': Script */\r
-static const OnigCodePoint CR_Hebrew[] = {\r
- 10,\r
- 0x0591, 0x05b9,\r
- 0x05bb, 0x05c7,\r
- 0x05d0, 0x05ea,\r
- 0x05f0, 0x05f4,\r
- 0xfb1d, 0xfb36,\r
- 0xfb38, 0xfb3c,\r
- 0xfb3e, 0xfb3e,\r
- 0xfb40, 0xfb41,\r
- 0xfb43, 0xfb44,\r
- 0xfb46, 0xfb4f\r
-}; /* CR_Hebrew */\r
-\r
-/* 'Hiragana': Script */\r
-static const OnigCodePoint CR_Hiragana[] = {\r
- 2,\r
- 0x3041, 0x3096,\r
- 0x309d, 0x309f\r
-}; /* CR_Hiragana */\r
-\r
-/* 'Inherited': Script */\r
-static const OnigCodePoint CR_Inherited[] = {\r
- 15,\r
- 0x0300, 0x036f,\r
- 0x064b, 0x0655,\r
- 0x0670, 0x0670,\r
- 0x1dc0, 0x1dc3,\r
- 0x200c, 0x200d,\r
- 0x20d0, 0x20eb,\r
- 0x302a, 0x302f,\r
- 0x3099, 0x309a,\r
- 0xfe00, 0xfe0f,\r
- 0xfe20, 0xfe23,\r
- 0x1d167, 0x1d169,\r
- 0x1d17b, 0x1d182,\r
- 0x1d185, 0x1d18b,\r
- 0x1d1aa, 0x1d1ad,\r
- 0xe0100, 0xe01ef\r
-}; /* CR_Inherited */\r
-\r
-/* 'Kannada': Script */\r
-static const OnigCodePoint CR_Kannada[] = {\r
- 13,\r
- 0x0c82, 0x0c83,\r
- 0x0c85, 0x0c8c,\r
- 0x0c8e, 0x0c90,\r
- 0x0c92, 0x0ca8,\r
- 0x0caa, 0x0cb3,\r
- 0x0cb5, 0x0cb9,\r
- 0x0cbc, 0x0cc4,\r
- 0x0cc6, 0x0cc8,\r
- 0x0cca, 0x0ccd,\r
- 0x0cd5, 0x0cd6,\r
- 0x0cde, 0x0cde,\r
- 0x0ce0, 0x0ce1,\r
- 0x0ce6, 0x0cef\r
-}; /* CR_Kannada */\r
-\r
-/* 'Katakana': Script */\r
-static const OnigCodePoint CR_Katakana[] = {\r
- 5,\r
- 0x30a1, 0x30fa,\r
- 0x30fd, 0x30ff,\r
- 0x31f0, 0x31ff,\r
- 0xff66, 0xff6f,\r
- 0xff71, 0xff9d\r
-}; /* CR_Katakana */\r
-\r
-/* 'Kharoshthi': Script */\r
-static const OnigCodePoint CR_Kharoshthi[] = {\r
- 8,\r
- 0x10a00, 0x10a03,\r
- 0x10a05, 0x10a06,\r
- 0x10a0c, 0x10a13,\r
- 0x10a15, 0x10a17,\r
- 0x10a19, 0x10a33,\r
- 0x10a38, 0x10a3a,\r
- 0x10a3f, 0x10a47,\r
- 0x10a50, 0x10a58\r
-}; /* CR_Kharoshthi */\r
-\r
-/* 'Khmer': Script */\r
-static const OnigCodePoint CR_Khmer[] = {\r
- 4,\r
- 0x1780, 0x17dd,\r
- 0x17e0, 0x17e9,\r
- 0x17f0, 0x17f9,\r
- 0x19e0, 0x19ff\r
-}; /* CR_Khmer */\r
-\r
-/* 'Lao': Script */\r
-static const OnigCodePoint CR_Lao[] = {\r
- 18,\r
- 0x0e81, 0x0e82,\r
- 0x0e84, 0x0e84,\r
- 0x0e87, 0x0e88,\r
- 0x0e8a, 0x0e8a,\r
- 0x0e8d, 0x0e8d,\r
- 0x0e94, 0x0e97,\r
- 0x0e99, 0x0e9f,\r
- 0x0ea1, 0x0ea3,\r
- 0x0ea5, 0x0ea5,\r
- 0x0ea7, 0x0ea7,\r
- 0x0eaa, 0x0eab,\r
- 0x0ead, 0x0eb9,\r
- 0x0ebb, 0x0ebd,\r
- 0x0ec0, 0x0ec4,\r
- 0x0ec6, 0x0ec6,\r
- 0x0ec8, 0x0ecd,\r
- 0x0ed0, 0x0ed9,\r
- 0x0edc, 0x0edd\r
-}; /* CR_Lao */\r
-\r
-/* 'Latin': Script */\r
-static const OnigCodePoint CR_Latin[] = {\r
- 23,\r
- 0x0041, 0x005a,\r
- 0x0061, 0x007a,\r
- 0x00aa, 0x00aa,\r
- 0x00ba, 0x00ba,\r
- 0x00c0, 0x00d6,\r
- 0x00d8, 0x00f6,\r
- 0x00f8, 0x0241,\r
- 0x0250, 0x02b8,\r
- 0x02e0, 0x02e4,\r
- 0x1d00, 0x1d25,\r
- 0x1d2c, 0x1d5c,\r
- 0x1d62, 0x1d65,\r
- 0x1d6b, 0x1d77,\r
- 0x1d79, 0x1dbf,\r
- 0x1e00, 0x1e9b,\r
- 0x1ea0, 0x1ef9,\r
- 0x2071, 0x2071,\r
- 0x207f, 0x207f,\r
- 0x2090, 0x2094,\r
- 0x212a, 0x212b,\r
- 0xfb00, 0xfb06,\r
- 0xff21, 0xff3a,\r
- 0xff41, 0xff5a\r
-}; /* CR_Latin */\r
-\r
-/* 'Limbu': Script */\r
-static const OnigCodePoint CR_Limbu[] = {\r
- 5,\r
- 0x1900, 0x191c,\r
- 0x1920, 0x192b,\r
- 0x1930, 0x193b,\r
- 0x1940, 0x1940,\r
- 0x1944, 0x194f\r
-}; /* CR_Limbu */\r
-\r
-/* 'Linear_B': Script */\r
-static const OnigCodePoint CR_Linear_B[] = {\r
- 7,\r
- 0x10000, 0x1000b,\r
- 0x1000d, 0x10026,\r
- 0x10028, 0x1003a,\r
- 0x1003c, 0x1003d,\r
- 0x1003f, 0x1004d,\r
- 0x10050, 0x1005d,\r
- 0x10080, 0x100fa\r
-}; /* CR_Linear_B */\r
-\r
-/* 'Malayalam': Script */\r
-static const OnigCodePoint CR_Malayalam[] = {\r
- 11,\r
- 0x0d02, 0x0d03,\r
- 0x0d05, 0x0d0c,\r
- 0x0d0e, 0x0d10,\r
- 0x0d12, 0x0d28,\r
- 0x0d2a, 0x0d39,\r
- 0x0d3e, 0x0d43,\r
- 0x0d46, 0x0d48,\r
- 0x0d4a, 0x0d4d,\r
- 0x0d57, 0x0d57,\r
- 0x0d60, 0x0d61,\r
- 0x0d66, 0x0d6f\r
-}; /* CR_Malayalam */\r
-\r
-/* 'Mongolian': Script */\r
-static const OnigCodePoint CR_Mongolian[] = {\r
- 4,\r
- 0x1800, 0x180e,\r
- 0x1810, 0x1819,\r
- 0x1820, 0x1877,\r
- 0x1880, 0x18a9\r
-}; /* CR_Mongolian */\r
-\r
-/* 'Myanmar': Script */\r
-static const OnigCodePoint CR_Myanmar[] = {\r
- 6,\r
- 0x1000, 0x1021,\r
- 0x1023, 0x1027,\r
- 0x1029, 0x102a,\r
- 0x102c, 0x1032,\r
- 0x1036, 0x1039,\r
- 0x1040, 0x1059\r
-}; /* CR_Myanmar */\r
-\r
-/* 'New_Tai_Lue': Script */\r
-static const OnigCodePoint CR_New_Tai_Lue[] = {\r
- 4,\r
- 0x1980, 0x19a9,\r
- 0x19b0, 0x19c9,\r
- 0x19d0, 0x19d9,\r
- 0x19de, 0x19df\r
-}; /* CR_New_Tai_Lue */\r
-\r
-/* 'Ogham': Script */\r
-static const OnigCodePoint CR_Ogham[] = {\r
- 1,\r
- 0x1680, 0x169c\r
-}; /* CR_Ogham */\r
-\r
-/* 'Old_Italic': Script */\r
-static const OnigCodePoint CR_Old_Italic[] = {\r
- 2,\r
- 0x10300, 0x1031e,\r
- 0x10320, 0x10323\r
-}; /* CR_Old_Italic */\r
-\r
-/* 'Old_Persian': Script */\r
-static const OnigCodePoint CR_Old_Persian[] = {\r
- 2,\r
- 0x103a0, 0x103c3,\r
- 0x103c8, 0x103d5\r
-}; /* CR_Old_Persian */\r
-\r
-/* 'Oriya': Script */\r
-static const OnigCodePoint CR_Oriya[] = {\r
- 14,\r
- 0x0b01, 0x0b03,\r
- 0x0b05, 0x0b0c,\r
- 0x0b0f, 0x0b10,\r
- 0x0b13, 0x0b28,\r
- 0x0b2a, 0x0b30,\r
- 0x0b32, 0x0b33,\r
- 0x0b35, 0x0b39,\r
- 0x0b3c, 0x0b43,\r
- 0x0b47, 0x0b48,\r
- 0x0b4b, 0x0b4d,\r
- 0x0b56, 0x0b57,\r
- 0x0b5c, 0x0b5d,\r
- 0x0b5f, 0x0b61,\r
- 0x0b66, 0x0b71\r
-}; /* CR_Oriya */\r
-\r
-/* 'Osmanya': Script */\r
-static const OnigCodePoint CR_Osmanya[] = {\r
- 2,\r
- 0x10480, 0x1049d,\r
- 0x104a0, 0x104a9\r
-}; /* CR_Osmanya */\r
-\r
-/* 'Runic': Script */\r
-static const OnigCodePoint CR_Runic[] = {\r
- 2,\r
- 0x16a0, 0x16ea,\r
- 0x16ee, 0x16f0\r
-}; /* CR_Runic */\r
-\r
-/* 'Shavian': Script */\r
-static const OnigCodePoint CR_Shavian[] = {\r
- 1,\r
- 0x10450, 0x1047f\r
-}; /* CR_Shavian */\r
-\r
-/* 'Sinhala': Script */\r
-static const OnigCodePoint CR_Sinhala[] = {\r
- 11,\r
- 0x0d82, 0x0d83,\r
- 0x0d85, 0x0d96,\r
- 0x0d9a, 0x0db1,\r
- 0x0db3, 0x0dbb,\r
- 0x0dbd, 0x0dbd,\r
- 0x0dc0, 0x0dc6,\r
- 0x0dca, 0x0dca,\r
- 0x0dcf, 0x0dd4,\r
- 0x0dd6, 0x0dd6,\r
- 0x0dd8, 0x0ddf,\r
- 0x0df2, 0x0df4\r
-}; /* CR_Sinhala */\r
-\r
-/* 'Syloti_Nagri': Script */\r
-static const OnigCodePoint CR_Syloti_Nagri[] = {\r
- 1,\r
- 0xa800, 0xa82b\r
-}; /* CR_Syloti_Nagri */\r
-\r
-/* 'Syriac': Script */\r
-static const OnigCodePoint CR_Syriac[] = {\r
- 3,\r
- 0x0700, 0x070d,\r
- 0x070f, 0x074a,\r
- 0x074d, 0x074f\r
-}; /* CR_Syriac */\r
-\r
-/* 'Tagalog': Script */\r
-static const OnigCodePoint CR_Tagalog[] = {\r
- 2,\r
- 0x1700, 0x170c,\r
- 0x170e, 0x1714\r
-}; /* CR_Tagalog */\r
-\r
-/* 'Tagbanwa': Script */\r
-static const OnigCodePoint CR_Tagbanwa[] = {\r
- 3,\r
- 0x1760, 0x176c,\r
- 0x176e, 0x1770,\r
- 0x1772, 0x1773\r
-}; /* CR_Tagbanwa */\r
-\r
-/* 'Tai_Le': Script */\r
-static const OnigCodePoint CR_Tai_Le[] = {\r
- 2,\r
- 0x1950, 0x196d,\r
- 0x1970, 0x1974\r
-}; /* CR_Tai_Le */\r
-\r
-/* 'Tamil': Script */\r
-static const OnigCodePoint CR_Tamil[] = {\r
- 15,\r
- 0x0b82, 0x0b83,\r
- 0x0b85, 0x0b8a,\r
- 0x0b8e, 0x0b90,\r
- 0x0b92, 0x0b95,\r
- 0x0b99, 0x0b9a,\r
- 0x0b9c, 0x0b9c,\r
- 0x0b9e, 0x0b9f,\r
- 0x0ba3, 0x0ba4,\r
- 0x0ba8, 0x0baa,\r
- 0x0bae, 0x0bb9,\r
- 0x0bbe, 0x0bc2,\r
- 0x0bc6, 0x0bc8,\r
- 0x0bca, 0x0bcd,\r
- 0x0bd7, 0x0bd7,\r
- 0x0be6, 0x0bfa\r
-}; /* CR_Tamil */\r
-\r
-/* 'Telugu': Script */\r
-static const OnigCodePoint CR_Telugu[] = {\r
- 12,\r
- 0x0c01, 0x0c03,\r
- 0x0c05, 0x0c0c,\r
- 0x0c0e, 0x0c10,\r
- 0x0c12, 0x0c28,\r
- 0x0c2a, 0x0c33,\r
- 0x0c35, 0x0c39,\r
- 0x0c3e, 0x0c44,\r
- 0x0c46, 0x0c48,\r
- 0x0c4a, 0x0c4d,\r
- 0x0c55, 0x0c56,\r
- 0x0c60, 0x0c61,\r
- 0x0c66, 0x0c6f\r
-}; /* CR_Telugu */\r
-\r
-/* 'Thaana': Script */\r
-static const OnigCodePoint CR_Thaana[] = {\r
- 1,\r
- 0x0780, 0x07b1\r
-}; /* CR_Thaana */\r
-\r
-/* 'Thai': Script */\r
-static const OnigCodePoint CR_Thai[] = {\r
- 2,\r
- 0x0e01, 0x0e3a,\r
- 0x0e40, 0x0e5b\r
-}; /* CR_Thai */\r
-\r
-/* 'Tibetan': Script */\r
-static const OnigCodePoint CR_Tibetan[] = {\r
- 7,\r
- 0x0f00, 0x0f47,\r
- 0x0f49, 0x0f6a,\r
- 0x0f71, 0x0f8b,\r
- 0x0f90, 0x0f97,\r
- 0x0f99, 0x0fbc,\r
- 0x0fbe, 0x0fcc,\r
- 0x0fcf, 0x0fd1\r
-}; /* CR_Tibetan */\r
-\r
-/* 'Tifinagh': Script */\r
-static const OnigCodePoint CR_Tifinagh[] = {\r
- 2,\r
- 0x2d30, 0x2d65,\r
- 0x2d6f, 0x2d6f\r
-}; /* CR_Tifinagh */\r
-\r
-/* 'Ugaritic': Script */\r
-static const OnigCodePoint CR_Ugaritic[] = {\r
- 2,\r
- 0x10380, 0x1039d,\r
- 0x1039f, 0x1039f\r
-}; /* CR_Ugaritic */\r
-\r
-/* 'Yi': Script */\r
-static const OnigCodePoint CR_Yi[] = {\r
- 2,\r
- 0xa000, 0xa48c,\r
- 0xa490, 0xa4c6\r
-}; /* CR_Yi */\r
-\r
-\r
-#endif /* USE_UNICODE_PROPERTIES */\r
-\r
-\r
-typedef struct {\r
- int n;\r
- OnigCodePoint code[3];\r
-} CodePointList3;\r
-\r
-typedef struct {\r
- OnigCodePoint from;\r
- CodePointList3 to;\r
-} CaseFold_11_Type;\r
-\r
-typedef struct {\r
- OnigCodePoint from;\r
- CodePointList3 to;\r
-} CaseUnfold_11_Type;\r
-\r
-typedef struct {\r
- int n;\r
- OnigCodePoint code[2];\r
-} CodePointList2;\r
-\r
-typedef struct {\r
- OnigCodePoint from[2];\r
- CodePointList2 to;\r
-} CaseUnfold_12_Type;\r
-\r
-typedef struct {\r
- OnigCodePoint from[3];\r
- CodePointList2 to;\r
-} CaseUnfold_13_Type;\r
-\r
-static const CaseFold_11_Type CaseFold[] = {\r
- { 0x0041, {1, {0x0061}}},\r
- { 0x0042, {1, {0x0062}}},\r
- { 0x0043, {1, {0x0063}}},\r
- { 0x0044, {1, {0x0064}}},\r
- { 0x0045, {1, {0x0065}}},\r
- { 0x0046, {1, {0x0066}}},\r
- { 0x0047, {1, {0x0067}}},\r
- { 0x0048, {1, {0x0068}}},\r
- { 0x004a, {1, {0x006a}}},\r
- { 0x004b, {1, {0x006b}}},\r
- { 0x004c, {1, {0x006c}}},\r
- { 0x004d, {1, {0x006d}}},\r
- { 0x004e, {1, {0x006e}}},\r
- { 0x004f, {1, {0x006f}}},\r
- { 0x0050, {1, {0x0070}}},\r
- { 0x0051, {1, {0x0071}}},\r
- { 0x0052, {1, {0x0072}}},\r
- { 0x0053, {1, {0x0073}}},\r
- { 0x0054, {1, {0x0074}}},\r
- { 0x0055, {1, {0x0075}}},\r
- { 0x0056, {1, {0x0076}}},\r
- { 0x0057, {1, {0x0077}}},\r
- { 0x0058, {1, {0x0078}}},\r
- { 0x0059, {1, {0x0079}}},\r
- { 0x005a, {1, {0x007a}}},\r
- { 0x00b5, {1, {0x03bc}}},\r
- { 0x00c0, {1, {0x00e0}}},\r
- { 0x00c1, {1, {0x00e1}}},\r
- { 0x00c2, {1, {0x00e2}}},\r
- { 0x00c3, {1, {0x00e3}}},\r
- { 0x00c4, {1, {0x00e4}}},\r
- { 0x00c5, {1, {0x00e5}}},\r
- { 0x00c6, {1, {0x00e6}}},\r
- { 0x00c7, {1, {0x00e7}}},\r
- { 0x00c8, {1, {0x00e8}}},\r
- { 0x00c9, {1, {0x00e9}}},\r
- { 0x00ca, {1, {0x00ea}}},\r
- { 0x00cb, {1, {0x00eb}}},\r
- { 0x00cc, {1, {0x00ec}}},\r
- { 0x00cd, {1, {0x00ed}}},\r
- { 0x00ce, {1, {0x00ee}}},\r
- { 0x00cf, {1, {0x00ef}}},\r
- { 0x00d0, {1, {0x00f0}}},\r
- { 0x00d1, {1, {0x00f1}}},\r
- { 0x00d2, {1, {0x00f2}}},\r
- { 0x00d3, {1, {0x00f3}}},\r
- { 0x00d4, {1, {0x00f4}}},\r
- { 0x00d5, {1, {0x00f5}}},\r
- { 0x00d6, {1, {0x00f6}}},\r
- { 0x00d8, {1, {0x00f8}}},\r
- { 0x00d9, {1, {0x00f9}}},\r
- { 0x00da, {1, {0x00fa}}},\r
- { 0x00db, {1, {0x00fb}}},\r
- { 0x00dc, {1, {0x00fc}}},\r
- { 0x00dd, {1, {0x00fd}}},\r
- { 0x00de, {1, {0x00fe}}},\r
- { 0x00df, {2, {0x0073, 0x0073}}},\r
- { 0x0100, {1, {0x0101}}},\r
- { 0x0102, {1, {0x0103}}},\r
- { 0x0104, {1, {0x0105}}},\r
- { 0x0106, {1, {0x0107}}},\r
- { 0x0108, {1, {0x0109}}},\r
- { 0x010a, {1, {0x010b}}},\r
- { 0x010c, {1, {0x010d}}},\r
- { 0x010e, {1, {0x010f}}},\r
- { 0x0110, {1, {0x0111}}},\r
- { 0x0112, {1, {0x0113}}},\r
- { 0x0114, {1, {0x0115}}},\r
- { 0x0116, {1, {0x0117}}},\r
- { 0x0118, {1, {0x0119}}},\r
- { 0x011a, {1, {0x011b}}},\r
- { 0x011c, {1, {0x011d}}},\r
- { 0x011e, {1, {0x011f}}},\r
- { 0x0120, {1, {0x0121}}},\r
- { 0x0122, {1, {0x0123}}},\r
- { 0x0124, {1, {0x0125}}},\r
- { 0x0126, {1, {0x0127}}},\r
- { 0x0128, {1, {0x0129}}},\r
- { 0x012a, {1, {0x012b}}},\r
- { 0x012c, {1, {0x012d}}},\r
- { 0x012e, {1, {0x012f}}},\r
- { 0x0132, {1, {0x0133}}},\r
- { 0x0134, {1, {0x0135}}},\r
- { 0x0136, {1, {0x0137}}},\r
- { 0x0139, {1, {0x013a}}},\r
- { 0x013b, {1, {0x013c}}},\r
- { 0x013d, {1, {0x013e}}},\r
- { 0x013f, {1, {0x0140}}},\r
- { 0x0141, {1, {0x0142}}},\r
- { 0x0143, {1, {0x0144}}},\r
- { 0x0145, {1, {0x0146}}},\r
- { 0x0147, {1, {0x0148}}},\r
- { 0x0149, {2, {0x02bc, 0x006e}}},\r
- { 0x014a, {1, {0x014b}}},\r
- { 0x014c, {1, {0x014d}}},\r
- { 0x014e, {1, {0x014f}}},\r
- { 0x0150, {1, {0x0151}}},\r
- { 0x0152, {1, {0x0153}}},\r
- { 0x0154, {1, {0x0155}}},\r
- { 0x0156, {1, {0x0157}}},\r
- { 0x0158, {1, {0x0159}}},\r
- { 0x015a, {1, {0x015b}}},\r
- { 0x015c, {1, {0x015d}}},\r
- { 0x015e, {1, {0x015f}}},\r
- { 0x0160, {1, {0x0161}}},\r
- { 0x0162, {1, {0x0163}}},\r
- { 0x0164, {1, {0x0165}}},\r
- { 0x0166, {1, {0x0167}}},\r
- { 0x0168, {1, {0x0169}}},\r
- { 0x016a, {1, {0x016b}}},\r
- { 0x016c, {1, {0x016d}}},\r
- { 0x016e, {1, {0x016f}}},\r
- { 0x0170, {1, {0x0171}}},\r
- { 0x0172, {1, {0x0173}}},\r
- { 0x0174, {1, {0x0175}}},\r
- { 0x0176, {1, {0x0177}}},\r
- { 0x0178, {1, {0x00ff}}},\r
- { 0x0179, {1, {0x017a}}},\r
- { 0x017b, {1, {0x017c}}},\r
- { 0x017d, {1, {0x017e}}},\r
- { 0x017f, {1, {0x0073}}},\r
- { 0x0181, {1, {0x0253}}},\r
- { 0x0182, {1, {0x0183}}},\r
- { 0x0184, {1, {0x0185}}},\r
- { 0x0186, {1, {0x0254}}},\r
- { 0x0187, {1, {0x0188}}},\r
- { 0x0189, {1, {0x0256}}},\r
- { 0x018a, {1, {0x0257}}},\r
- { 0x018b, {1, {0x018c}}},\r
- { 0x018e, {1, {0x01dd}}},\r
- { 0x018f, {1, {0x0259}}},\r
- { 0x0190, {1, {0x025b}}},\r
- { 0x0191, {1, {0x0192}}},\r
- { 0x0193, {1, {0x0260}}},\r
- { 0x0194, {1, {0x0263}}},\r
- { 0x0196, {1, {0x0269}}},\r
- { 0x0197, {1, {0x0268}}},\r
- { 0x0198, {1, {0x0199}}},\r
- { 0x019c, {1, {0x026f}}},\r
- { 0x019d, {1, {0x0272}}},\r
- { 0x019f, {1, {0x0275}}},\r
- { 0x01a0, {1, {0x01a1}}},\r
- { 0x01a2, {1, {0x01a3}}},\r
- { 0x01a4, {1, {0x01a5}}},\r
- { 0x01a6, {1, {0x0280}}},\r
- { 0x01a7, {1, {0x01a8}}},\r
- { 0x01a9, {1, {0x0283}}},\r
- { 0x01ac, {1, {0x01ad}}},\r
- { 0x01ae, {1, {0x0288}}},\r
- { 0x01af, {1, {0x01b0}}},\r
- { 0x01b1, {1, {0x028a}}},\r
- { 0x01b2, {1, {0x028b}}},\r
- { 0x01b3, {1, {0x01b4}}},\r
- { 0x01b5, {1, {0x01b6}}},\r
- { 0x01b7, {1, {0x0292}}},\r
- { 0x01b8, {1, {0x01b9}}},\r
- { 0x01bc, {1, {0x01bd}}},\r
- { 0x01c4, {1, {0x01c6}}},\r
- { 0x01c5, {1, {0x01c6}}},\r
- { 0x01c7, {1, {0x01c9}}},\r
- { 0x01c8, {1, {0x01c9}}},\r
- { 0x01ca, {1, {0x01cc}}},\r
- { 0x01cb, {1, {0x01cc}}},\r
- { 0x01cd, {1, {0x01ce}}},\r
- { 0x01cf, {1, {0x01d0}}},\r
- { 0x01d1, {1, {0x01d2}}},\r
- { 0x01d3, {1, {0x01d4}}},\r
- { 0x01d5, {1, {0x01d6}}},\r
- { 0x01d7, {1, {0x01d8}}},\r
- { 0x01d9, {1, {0x01da}}},\r
- { 0x01db, {1, {0x01dc}}},\r
- { 0x01de, {1, {0x01df}}},\r
- { 0x01e0, {1, {0x01e1}}},\r
- { 0x01e2, {1, {0x01e3}}},\r
- { 0x01e4, {1, {0x01e5}}},\r
- { 0x01e6, {1, {0x01e7}}},\r
- { 0x01e8, {1, {0x01e9}}},\r
- { 0x01ea, {1, {0x01eb}}},\r
- { 0x01ec, {1, {0x01ed}}},\r
- { 0x01ee, {1, {0x01ef}}},\r
- { 0x01f0, {2, {0x006a, 0x030c}}},\r
- { 0x01f1, {1, {0x01f3}}},\r
- { 0x01f2, {1, {0x01f3}}},\r
- { 0x01f4, {1, {0x01f5}}},\r
- { 0x01f6, {1, {0x0195}}},\r
- { 0x01f7, {1, {0x01bf}}},\r
- { 0x01f8, {1, {0x01f9}}},\r
- { 0x01fa, {1, {0x01fb}}},\r
- { 0x01fc, {1, {0x01fd}}},\r
- { 0x01fe, {1, {0x01ff}}},\r
- { 0x0200, {1, {0x0201}}},\r
- { 0x0202, {1, {0x0203}}},\r
- { 0x0204, {1, {0x0205}}},\r
- { 0x0206, {1, {0x0207}}},\r
- { 0x0208, {1, {0x0209}}},\r
- { 0x020a, {1, {0x020b}}},\r
- { 0x020c, {1, {0x020d}}},\r
- { 0x020e, {1, {0x020f}}},\r
- { 0x0210, {1, {0x0211}}},\r
- { 0x0212, {1, {0x0213}}},\r
- { 0x0214, {1, {0x0215}}},\r
- { 0x0216, {1, {0x0217}}},\r
- { 0x0218, {1, {0x0219}}},\r
- { 0x021a, {1, {0x021b}}},\r
- { 0x021c, {1, {0x021d}}},\r
- { 0x021e, {1, {0x021f}}},\r
- { 0x0220, {1, {0x019e}}},\r
- { 0x0222, {1, {0x0223}}},\r
- { 0x0224, {1, {0x0225}}},\r
- { 0x0226, {1, {0x0227}}},\r
- { 0x0228, {1, {0x0229}}},\r
- { 0x022a, {1, {0x022b}}},\r
- { 0x022c, {1, {0x022d}}},\r
- { 0x022e, {1, {0x022f}}},\r
- { 0x0230, {1, {0x0231}}},\r
- { 0x0232, {1, {0x0233}}},\r
- { 0x023b, {1, {0x023c}}},\r
- { 0x023d, {1, {0x019a}}},\r
- { 0x0241, {1, {0x0294}}},\r
- { 0x0345, {1, {0x03b9}}},\r
- { 0x0386, {1, {0x03ac}}},\r
- { 0x0388, {1, {0x03ad}}},\r
- { 0x0389, {1, {0x03ae}}},\r
- { 0x038a, {1, {0x03af}}},\r
- { 0x038c, {1, {0x03cc}}},\r
- { 0x038e, {1, {0x03cd}}},\r
- { 0x038f, {1, {0x03ce}}},\r
- { 0x0390, {3, {0x03b9, 0x0308, 0x0301}}},\r
- { 0x0391, {1, {0x03b1}}},\r
- { 0x0392, {1, {0x03b2}}},\r
- { 0x0393, {1, {0x03b3}}},\r
- { 0x0394, {1, {0x03b4}}},\r
- { 0x0395, {1, {0x03b5}}},\r
- { 0x0396, {1, {0x03b6}}},\r
- { 0x0397, {1, {0x03b7}}},\r
- { 0x0398, {1, {0x03b8}}},\r
- { 0x0399, {1, {0x03b9}}},\r
- { 0x039a, {1, {0x03ba}}},\r
- { 0x039b, {1, {0x03bb}}},\r
- { 0x039c, {1, {0x03bc}}},\r
- { 0x039d, {1, {0x03bd}}},\r
- { 0x039e, {1, {0x03be}}},\r
- { 0x039f, {1, {0x03bf}}},\r
- { 0x03a0, {1, {0x03c0}}},\r
- { 0x03a1, {1, {0x03c1}}},\r
- { 0x03a3, {1, {0x03c3}}},\r
- { 0x03a4, {1, {0x03c4}}},\r
- { 0x03a5, {1, {0x03c5}}},\r
- { 0x03a6, {1, {0x03c6}}},\r
- { 0x03a7, {1, {0x03c7}}},\r
- { 0x03a8, {1, {0x03c8}}},\r
- { 0x03a9, {1, {0x03c9}}},\r
- { 0x03aa, {1, {0x03ca}}},\r
- { 0x03ab, {1, {0x03cb}}},\r
- { 0x03b0, {3, {0x03c5, 0x0308, 0x0301}}},\r
- { 0x03c2, {1, {0x03c3}}},\r
- { 0x03d0, {1, {0x03b2}}},\r
- { 0x03d1, {1, {0x03b8}}},\r
- { 0x03d5, {1, {0x03c6}}},\r
- { 0x03d6, {1, {0x03c0}}},\r
- { 0x03d8, {1, {0x03d9}}},\r
- { 0x03da, {1, {0x03db}}},\r
- { 0x03dc, {1, {0x03dd}}},\r
- { 0x03de, {1, {0x03df}}},\r
- { 0x03e0, {1, {0x03e1}}},\r
- { 0x03e2, {1, {0x03e3}}},\r
- { 0x03e4, {1, {0x03e5}}},\r
- { 0x03e6, {1, {0x03e7}}},\r
- { 0x03e8, {1, {0x03e9}}},\r
- { 0x03ea, {1, {0x03eb}}},\r
- { 0x03ec, {1, {0x03ed}}},\r
- { 0x03ee, {1, {0x03ef}}},\r
- { 0x03f0, {1, {0x03ba}}},\r
- { 0x03f1, {1, {0x03c1}}},\r
- { 0x03f4, {1, {0x03b8}}},\r
- { 0x03f5, {1, {0x03b5}}},\r
- { 0x03f7, {1, {0x03f8}}},\r
- { 0x03f9, {1, {0x03f2}}},\r
- { 0x03fa, {1, {0x03fb}}},\r
- { 0x0400, {1, {0x0450}}},\r
- { 0x0401, {1, {0x0451}}},\r
- { 0x0402, {1, {0x0452}}},\r
- { 0x0403, {1, {0x0453}}},\r
- { 0x0404, {1, {0x0454}}},\r
- { 0x0405, {1, {0x0455}}},\r
- { 0x0406, {1, {0x0456}}},\r
- { 0x0407, {1, {0x0457}}},\r
- { 0x0408, {1, {0x0458}}},\r
- { 0x0409, {1, {0x0459}}},\r
- { 0x040a, {1, {0x045a}}},\r
- { 0x040b, {1, {0x045b}}},\r
- { 0x040c, {1, {0x045c}}},\r
- { 0x040d, {1, {0x045d}}},\r
- { 0x040e, {1, {0x045e}}},\r
- { 0x040f, {1, {0x045f}}},\r
- { 0x0410, {1, {0x0430}}},\r
- { 0x0411, {1, {0x0431}}},\r
- { 0x0412, {1, {0x0432}}},\r
- { 0x0413, {1, {0x0433}}},\r
- { 0x0414, {1, {0x0434}}},\r
- { 0x0415, {1, {0x0435}}},\r
- { 0x0416, {1, {0x0436}}},\r
- { 0x0417, {1, {0x0437}}},\r
- { 0x0418, {1, {0x0438}}},\r
- { 0x0419, {1, {0x0439}}},\r
- { 0x041a, {1, {0x043a}}},\r
- { 0x041b, {1, {0x043b}}},\r
- { 0x041c, {1, {0x043c}}},\r
- { 0x041d, {1, {0x043d}}},\r
- { 0x041e, {1, {0x043e}}},\r
- { 0x041f, {1, {0x043f}}},\r
- { 0x0420, {1, {0x0440}}},\r
- { 0x0421, {1, {0x0441}}},\r
- { 0x0422, {1, {0x0442}}},\r
- { 0x0423, {1, {0x0443}}},\r
- { 0x0424, {1, {0x0444}}},\r
- { 0x0425, {1, {0x0445}}},\r
- { 0x0426, {1, {0x0446}}},\r
- { 0x0427, {1, {0x0447}}},\r
- { 0x0428, {1, {0x0448}}},\r
- { 0x0429, {1, {0x0449}}},\r
- { 0x042a, {1, {0x044a}}},\r
- { 0x042b, {1, {0x044b}}},\r
- { 0x042c, {1, {0x044c}}},\r
- { 0x042d, {1, {0x044d}}},\r
- { 0x042e, {1, {0x044e}}},\r
- { 0x042f, {1, {0x044f}}},\r
- { 0x0460, {1, {0x0461}}},\r
- { 0x0462, {1, {0x0463}}},\r
- { 0x0464, {1, {0x0465}}},\r
- { 0x0466, {1, {0x0467}}},\r
- { 0x0468, {1, {0x0469}}},\r
- { 0x046a, {1, {0x046b}}},\r
- { 0x046c, {1, {0x046d}}},\r
- { 0x046e, {1, {0x046f}}},\r
- { 0x0470, {1, {0x0471}}},\r
- { 0x0472, {1, {0x0473}}},\r
- { 0x0474, {1, {0x0475}}},\r
- { 0x0476, {1, {0x0477}}},\r
- { 0x0478, {1, {0x0479}}},\r
- { 0x047a, {1, {0x047b}}},\r
- { 0x047c, {1, {0x047d}}},\r
- { 0x047e, {1, {0x047f}}},\r
- { 0x0480, {1, {0x0481}}},\r
- { 0x048a, {1, {0x048b}}},\r
- { 0x048c, {1, {0x048d}}},\r
- { 0x048e, {1, {0x048f}}},\r
- { 0x0490, {1, {0x0491}}},\r
- { 0x0492, {1, {0x0493}}},\r
- { 0x0494, {1, {0x0495}}},\r
- { 0x0496, {1, {0x0497}}},\r
- { 0x0498, {1, {0x0499}}},\r
- { 0x049a, {1, {0x049b}}},\r
- { 0x049c, {1, {0x049d}}},\r
- { 0x049e, {1, {0x049f}}},\r
- { 0x04a0, {1, {0x04a1}}},\r
- { 0x04a2, {1, {0x04a3}}},\r
- { 0x04a4, {1, {0x04a5}}},\r
- { 0x04a6, {1, {0x04a7}}},\r
- { 0x04a8, {1, {0x04a9}}},\r
- { 0x04aa, {1, {0x04ab}}},\r
- { 0x04ac, {1, {0x04ad}}},\r
- { 0x04ae, {1, {0x04af}}},\r
- { 0x04b0, {1, {0x04b1}}},\r
- { 0x04b2, {1, {0x04b3}}},\r
- { 0x04b4, {1, {0x04b5}}},\r
- { 0x04b6, {1, {0x04b7}}},\r
- { 0x04b8, {1, {0x04b9}}},\r
- { 0x04ba, {1, {0x04bb}}},\r
- { 0x04bc, {1, {0x04bd}}},\r
- { 0x04be, {1, {0x04bf}}},\r
- { 0x04c1, {1, {0x04c2}}},\r
- { 0x04c3, {1, {0x04c4}}},\r
- { 0x04c5, {1, {0x04c6}}},\r
- { 0x04c7, {1, {0x04c8}}},\r
- { 0x04c9, {1, {0x04ca}}},\r
- { 0x04cb, {1, {0x04cc}}},\r
- { 0x04cd, {1, {0x04ce}}},\r
- { 0x04d0, {1, {0x04d1}}},\r
- { 0x04d2, {1, {0x04d3}}},\r
- { 0x04d4, {1, {0x04d5}}},\r
- { 0x04d6, {1, {0x04d7}}},\r
- { 0x04d8, {1, {0x04d9}}},\r
- { 0x04da, {1, {0x04db}}},\r
- { 0x04dc, {1, {0x04dd}}},\r
- { 0x04de, {1, {0x04df}}},\r
- { 0x04e0, {1, {0x04e1}}},\r
- { 0x04e2, {1, {0x04e3}}},\r
- { 0x04e4, {1, {0x04e5}}},\r
- { 0x04e6, {1, {0x04e7}}},\r
- { 0x04e8, {1, {0x04e9}}},\r
- { 0x04ea, {1, {0x04eb}}},\r
- { 0x04ec, {1, {0x04ed}}},\r
- { 0x04ee, {1, {0x04ef}}},\r
- { 0x04f0, {1, {0x04f1}}},\r
- { 0x04f2, {1, {0x04f3}}},\r
- { 0x04f4, {1, {0x04f5}}},\r
- { 0x04f6, {1, {0x04f7}}},\r
- { 0x04f8, {1, {0x04f9}}},\r
- { 0x0500, {1, {0x0501}}},\r
- { 0x0502, {1, {0x0503}}},\r
- { 0x0504, {1, {0x0505}}},\r
- { 0x0506, {1, {0x0507}}},\r
- { 0x0508, {1, {0x0509}}},\r
- { 0x050a, {1, {0x050b}}},\r
- { 0x050c, {1, {0x050d}}},\r
- { 0x050e, {1, {0x050f}}},\r
- { 0x0531, {1, {0x0561}}},\r
- { 0x0532, {1, {0x0562}}},\r
- { 0x0533, {1, {0x0563}}},\r
- { 0x0534, {1, {0x0564}}},\r
- { 0x0535, {1, {0x0565}}},\r
- { 0x0536, {1, {0x0566}}},\r
- { 0x0537, {1, {0x0567}}},\r
- { 0x0538, {1, {0x0568}}},\r
- { 0x0539, {1, {0x0569}}},\r
- { 0x053a, {1, {0x056a}}},\r
- { 0x053b, {1, {0x056b}}},\r
- { 0x053c, {1, {0x056c}}},\r
- { 0x053d, {1, {0x056d}}},\r
- { 0x053e, {1, {0x056e}}},\r
- { 0x053f, {1, {0x056f}}},\r
- { 0x0540, {1, {0x0570}}},\r
- { 0x0541, {1, {0x0571}}},\r
- { 0x0542, {1, {0x0572}}},\r
- { 0x0543, {1, {0x0573}}},\r
- { 0x0544, {1, {0x0574}}},\r
- { 0x0545, {1, {0x0575}}},\r
- { 0x0546, {1, {0x0576}}},\r
- { 0x0547, {1, {0x0577}}},\r
- { 0x0548, {1, {0x0578}}},\r
- { 0x0549, {1, {0x0579}}},\r
- { 0x054a, {1, {0x057a}}},\r
- { 0x054b, {1, {0x057b}}},\r
- { 0x054c, {1, {0x057c}}},\r
- { 0x054d, {1, {0x057d}}},\r
- { 0x054e, {1, {0x057e}}},\r
- { 0x054f, {1, {0x057f}}},\r
- { 0x0550, {1, {0x0580}}},\r
- { 0x0551, {1, {0x0581}}},\r
- { 0x0552, {1, {0x0582}}},\r
- { 0x0553, {1, {0x0583}}},\r
- { 0x0554, {1, {0x0584}}},\r
- { 0x0555, {1, {0x0585}}},\r
- { 0x0556, {1, {0x0586}}},\r
- { 0x0587, {2, {0x0565, 0x0582}}},\r
- { 0x10a0, {1, {0x2d00}}},\r
- { 0x10a1, {1, {0x2d01}}},\r
- { 0x10a2, {1, {0x2d02}}},\r
- { 0x10a3, {1, {0x2d03}}},\r
- { 0x10a4, {1, {0x2d04}}},\r
- { 0x10a5, {1, {0x2d05}}},\r
- { 0x10a6, {1, {0x2d06}}},\r
- { 0x10a7, {1, {0x2d07}}},\r
- { 0x10a8, {1, {0x2d08}}},\r
- { 0x10a9, {1, {0x2d09}}},\r
- { 0x10aa, {1, {0x2d0a}}},\r
- { 0x10ab, {1, {0x2d0b}}},\r
- { 0x10ac, {1, {0x2d0c}}},\r
- { 0x10ad, {1, {0x2d0d}}},\r
- { 0x10ae, {1, {0x2d0e}}},\r
- { 0x10af, {1, {0x2d0f}}},\r
- { 0x10b0, {1, {0x2d10}}},\r
- { 0x10b1, {1, {0x2d11}}},\r
- { 0x10b2, {1, {0x2d12}}},\r
- { 0x10b3, {1, {0x2d13}}},\r
- { 0x10b4, {1, {0x2d14}}},\r
- { 0x10b5, {1, {0x2d15}}},\r
- { 0x10b6, {1, {0x2d16}}},\r
- { 0x10b7, {1, {0x2d17}}},\r
- { 0x10b8, {1, {0x2d18}}},\r
- { 0x10b9, {1, {0x2d19}}},\r
- { 0x10ba, {1, {0x2d1a}}},\r
- { 0x10bb, {1, {0x2d1b}}},\r
- { 0x10bc, {1, {0x2d1c}}},\r
- { 0x10bd, {1, {0x2d1d}}},\r
- { 0x10be, {1, {0x2d1e}}},\r
- { 0x10bf, {1, {0x2d1f}}},\r
- { 0x10c0, {1, {0x2d20}}},\r
- { 0x10c1, {1, {0x2d21}}},\r
- { 0x10c2, {1, {0x2d22}}},\r
- { 0x10c3, {1, {0x2d23}}},\r
- { 0x10c4, {1, {0x2d24}}},\r
- { 0x10c5, {1, {0x2d25}}},\r
- { 0x1e00, {1, {0x1e01}}},\r
- { 0x1e02, {1, {0x1e03}}},\r
- { 0x1e04, {1, {0x1e05}}},\r
- { 0x1e06, {1, {0x1e07}}},\r
- { 0x1e08, {1, {0x1e09}}},\r
- { 0x1e0a, {1, {0x1e0b}}},\r
- { 0x1e0c, {1, {0x1e0d}}},\r
- { 0x1e0e, {1, {0x1e0f}}},\r
- { 0x1e10, {1, {0x1e11}}},\r
- { 0x1e12, {1, {0x1e13}}},\r
- { 0x1e14, {1, {0x1e15}}},\r
- { 0x1e16, {1, {0x1e17}}},\r
- { 0x1e18, {1, {0x1e19}}},\r
- { 0x1e1a, {1, {0x1e1b}}},\r
- { 0x1e1c, {1, {0x1e1d}}},\r
- { 0x1e1e, {1, {0x1e1f}}},\r
- { 0x1e20, {1, {0x1e21}}},\r
- { 0x1e22, {1, {0x1e23}}},\r
- { 0x1e24, {1, {0x1e25}}},\r
- { 0x1e26, {1, {0x1e27}}},\r
- { 0x1e28, {1, {0x1e29}}},\r
- { 0x1e2a, {1, {0x1e2b}}},\r
- { 0x1e2c, {1, {0x1e2d}}},\r
- { 0x1e2e, {1, {0x1e2f}}},\r
- { 0x1e30, {1, {0x1e31}}},\r
- { 0x1e32, {1, {0x1e33}}},\r
- { 0x1e34, {1, {0x1e35}}},\r
- { 0x1e36, {1, {0x1e37}}},\r
- { 0x1e38, {1, {0x1e39}}},\r
- { 0x1e3a, {1, {0x1e3b}}},\r
- { 0x1e3c, {1, {0x1e3d}}},\r
- { 0x1e3e, {1, {0x1e3f}}},\r
- { 0x1e40, {1, {0x1e41}}},\r
- { 0x1e42, {1, {0x1e43}}},\r
- { 0x1e44, {1, {0x1e45}}},\r
- { 0x1e46, {1, {0x1e47}}},\r
- { 0x1e48, {1, {0x1e49}}},\r
- { 0x1e4a, {1, {0x1e4b}}},\r
- { 0x1e4c, {1, {0x1e4d}}},\r
- { 0x1e4e, {1, {0x1e4f}}},\r
- { 0x1e50, {1, {0x1e51}}},\r
- { 0x1e52, {1, {0x1e53}}},\r
- { 0x1e54, {1, {0x1e55}}},\r
- { 0x1e56, {1, {0x1e57}}},\r
- { 0x1e58, {1, {0x1e59}}},\r
- { 0x1e5a, {1, {0x1e5b}}},\r
- { 0x1e5c, {1, {0x1e5d}}},\r
- { 0x1e5e, {1, {0x1e5f}}},\r
- { 0x1e60, {1, {0x1e61}}},\r
- { 0x1e62, {1, {0x1e63}}},\r
- { 0x1e64, {1, {0x1e65}}},\r
- { 0x1e66, {1, {0x1e67}}},\r
- { 0x1e68, {1, {0x1e69}}},\r
- { 0x1e6a, {1, {0x1e6b}}},\r
- { 0x1e6c, {1, {0x1e6d}}},\r
- { 0x1e6e, {1, {0x1e6f}}},\r
- { 0x1e70, {1, {0x1e71}}},\r
- { 0x1e72, {1, {0x1e73}}},\r
- { 0x1e74, {1, {0x1e75}}},\r
- { 0x1e76, {1, {0x1e77}}},\r
- { 0x1e78, {1, {0x1e79}}},\r
- { 0x1e7a, {1, {0x1e7b}}},\r
- { 0x1e7c, {1, {0x1e7d}}},\r
- { 0x1e7e, {1, {0x1e7f}}},\r
- { 0x1e80, {1, {0x1e81}}},\r
- { 0x1e82, {1, {0x1e83}}},\r
- { 0x1e84, {1, {0x1e85}}},\r
- { 0x1e86, {1, {0x1e87}}},\r
- { 0x1e88, {1, {0x1e89}}},\r
- { 0x1e8a, {1, {0x1e8b}}},\r
- { 0x1e8c, {1, {0x1e8d}}},\r
- { 0x1e8e, {1, {0x1e8f}}},\r
- { 0x1e90, {1, {0x1e91}}},\r
- { 0x1e92, {1, {0x1e93}}},\r
- { 0x1e94, {1, {0x1e95}}},\r
- { 0x1e96, {2, {0x0068, 0x0331}}},\r
- { 0x1e97, {2, {0x0074, 0x0308}}},\r
- { 0x1e98, {2, {0x0077, 0x030a}}},\r
- { 0x1e99, {2, {0x0079, 0x030a}}},\r
- { 0x1e9a, {2, {0x0061, 0x02be}}},\r
- { 0x1e9b, {1, {0x1e61}}},\r
- { 0x1ea0, {1, {0x1ea1}}},\r
- { 0x1ea2, {1, {0x1ea3}}},\r
- { 0x1ea4, {1, {0x1ea5}}},\r
- { 0x1ea6, {1, {0x1ea7}}},\r
- { 0x1ea8, {1, {0x1ea9}}},\r
- { 0x1eaa, {1, {0x1eab}}},\r
- { 0x1eac, {1, {0x1ead}}},\r
- { 0x1eae, {1, {0x1eaf}}},\r
- { 0x1eb0, {1, {0x1eb1}}},\r
- { 0x1eb2, {1, {0x1eb3}}},\r
- { 0x1eb4, {1, {0x1eb5}}},\r
- { 0x1eb6, {1, {0x1eb7}}},\r
- { 0x1eb8, {1, {0x1eb9}}},\r
- { 0x1eba, {1, {0x1ebb}}},\r
- { 0x1ebc, {1, {0x1ebd}}},\r
- { 0x1ebe, {1, {0x1ebf}}},\r
- { 0x1ec0, {1, {0x1ec1}}},\r
- { 0x1ec2, {1, {0x1ec3}}},\r
- { 0x1ec4, {1, {0x1ec5}}},\r
- { 0x1ec6, {1, {0x1ec7}}},\r
- { 0x1ec8, {1, {0x1ec9}}},\r
- { 0x1eca, {1, {0x1ecb}}},\r
- { 0x1ecc, {1, {0x1ecd}}},\r
- { 0x1ece, {1, {0x1ecf}}},\r
- { 0x1ed0, {1, {0x1ed1}}},\r
- { 0x1ed2, {1, {0x1ed3}}},\r
- { 0x1ed4, {1, {0x1ed5}}},\r
- { 0x1ed6, {1, {0x1ed7}}},\r
- { 0x1ed8, {1, {0x1ed9}}},\r
- { 0x1eda, {1, {0x1edb}}},\r
- { 0x1edc, {1, {0x1edd}}},\r
- { 0x1ede, {1, {0x1edf}}},\r
- { 0x1ee0, {1, {0x1ee1}}},\r
- { 0x1ee2, {1, {0x1ee3}}},\r
- { 0x1ee4, {1, {0x1ee5}}},\r
- { 0x1ee6, {1, {0x1ee7}}},\r
- { 0x1ee8, {1, {0x1ee9}}},\r
- { 0x1eea, {1, {0x1eeb}}},\r
- { 0x1eec, {1, {0x1eed}}},\r
- { 0x1eee, {1, {0x1eef}}},\r
- { 0x1ef0, {1, {0x1ef1}}},\r
- { 0x1ef2, {1, {0x1ef3}}},\r
- { 0x1ef4, {1, {0x1ef5}}},\r
- { 0x1ef6, {1, {0x1ef7}}},\r
- { 0x1ef8, {1, {0x1ef9}}},\r
- { 0x1f08, {1, {0x1f00}}},\r
- { 0x1f09, {1, {0x1f01}}},\r
- { 0x1f0a, {1, {0x1f02}}},\r
- { 0x1f0b, {1, {0x1f03}}},\r
- { 0x1f0c, {1, {0x1f04}}},\r
- { 0x1f0d, {1, {0x1f05}}},\r
- { 0x1f0e, {1, {0x1f06}}},\r
- { 0x1f0f, {1, {0x1f07}}},\r
- { 0x1f18, {1, {0x1f10}}},\r
- { 0x1f19, {1, {0x1f11}}},\r
- { 0x1f1a, {1, {0x1f12}}},\r
- { 0x1f1b, {1, {0x1f13}}},\r
- { 0x1f1c, {1, {0x1f14}}},\r
- { 0x1f1d, {1, {0x1f15}}},\r
- { 0x1f28, {1, {0x1f20}}},\r
- { 0x1f29, {1, {0x1f21}}},\r
- { 0x1f2a, {1, {0x1f22}}},\r
- { 0x1f2b, {1, {0x1f23}}},\r
- { 0x1f2c, {1, {0x1f24}}},\r
- { 0x1f2d, {1, {0x1f25}}},\r
- { 0x1f2e, {1, {0x1f26}}},\r
- { 0x1f2f, {1, {0x1f27}}},\r
- { 0x1f38, {1, {0x1f30}}},\r
- { 0x1f39, {1, {0x1f31}}},\r
- { 0x1f3a, {1, {0x1f32}}},\r
- { 0x1f3b, {1, {0x1f33}}},\r
- { 0x1f3c, {1, {0x1f34}}},\r
- { 0x1f3d, {1, {0x1f35}}},\r
- { 0x1f3e, {1, {0x1f36}}},\r
- { 0x1f3f, {1, {0x1f37}}},\r
- { 0x1f48, {1, {0x1f40}}},\r
- { 0x1f49, {1, {0x1f41}}},\r
- { 0x1f4a, {1, {0x1f42}}},\r
- { 0x1f4b, {1, {0x1f43}}},\r
- { 0x1f4c, {1, {0x1f44}}},\r
- { 0x1f4d, {1, {0x1f45}}},\r
- { 0x1f50, {2, {0x03c5, 0x0313}}},\r
- { 0x1f52, {3, {0x03c5, 0x0313, 0x0300}}},\r
- { 0x1f54, {3, {0x03c5, 0x0313, 0x0301}}},\r
- { 0x1f56, {3, {0x03c5, 0x0313, 0x0342}}},\r
- { 0x1f59, {1, {0x1f51}}},\r
- { 0x1f5b, {1, {0x1f53}}},\r
- { 0x1f5d, {1, {0x1f55}}},\r
- { 0x1f5f, {1, {0x1f57}}},\r
- { 0x1f68, {1, {0x1f60}}},\r
- { 0x1f69, {1, {0x1f61}}},\r
- { 0x1f6a, {1, {0x1f62}}},\r
- { 0x1f6b, {1, {0x1f63}}},\r
- { 0x1f6c, {1, {0x1f64}}},\r
- { 0x1f6d, {1, {0x1f65}}},\r
- { 0x1f6e, {1, {0x1f66}}},\r
- { 0x1f6f, {1, {0x1f67}}},\r
- { 0x1f80, {2, {0x1f00, 0x03b9}}},\r
- { 0x1f81, {2, {0x1f01, 0x03b9}}},\r
- { 0x1f82, {2, {0x1f02, 0x03b9}}},\r
- { 0x1f83, {2, {0x1f03, 0x03b9}}},\r
- { 0x1f84, {2, {0x1f04, 0x03b9}}},\r
- { 0x1f85, {2, {0x1f05, 0x03b9}}},\r
- { 0x1f86, {2, {0x1f06, 0x03b9}}},\r
- { 0x1f87, {2, {0x1f07, 0x03b9}}},\r
- { 0x1f88, {2, {0x1f00, 0x03b9}}},\r
- { 0x1f89, {2, {0x1f01, 0x03b9}}},\r
- { 0x1f8a, {2, {0x1f02, 0x03b9}}},\r
- { 0x1f8b, {2, {0x1f03, 0x03b9}}},\r
- { 0x1f8c, {2, {0x1f04, 0x03b9}}},\r
- { 0x1f8d, {2, {0x1f05, 0x03b9}}},\r
- { 0x1f8e, {2, {0x1f06, 0x03b9}}},\r
- { 0x1f8f, {2, {0x1f07, 0x03b9}}},\r
- { 0x1f90, {2, {0x1f20, 0x03b9}}},\r
- { 0x1f91, {2, {0x1f21, 0x03b9}}},\r
- { 0x1f92, {2, {0x1f22, 0x03b9}}},\r
- { 0x1f93, {2, {0x1f23, 0x03b9}}},\r
- { 0x1f94, {2, {0x1f24, 0x03b9}}},\r
- { 0x1f95, {2, {0x1f25, 0x03b9}}},\r
- { 0x1f96, {2, {0x1f26, 0x03b9}}},\r
- { 0x1f97, {2, {0x1f27, 0x03b9}}},\r
- { 0x1f98, {2, {0x1f20, 0x03b9}}},\r
- { 0x1f99, {2, {0x1f21, 0x03b9}}},\r
- { 0x1f9a, {2, {0x1f22, 0x03b9}}},\r
- { 0x1f9b, {2, {0x1f23, 0x03b9}}},\r
- { 0x1f9c, {2, {0x1f24, 0x03b9}}},\r
- { 0x1f9d, {2, {0x1f25, 0x03b9}}},\r
- { 0x1f9e, {2, {0x1f26, 0x03b9}}},\r
- { 0x1f9f, {2, {0x1f27, 0x03b9}}},\r
- { 0x1fa0, {2, {0x1f60, 0x03b9}}},\r
- { 0x1fa1, {2, {0x1f61, 0x03b9}}},\r
- { 0x1fa2, {2, {0x1f62, 0x03b9}}},\r
- { 0x1fa3, {2, {0x1f63, 0x03b9}}},\r
- { 0x1fa4, {2, {0x1f64, 0x03b9}}},\r
- { 0x1fa5, {2, {0x1f65, 0x03b9}}},\r
- { 0x1fa6, {2, {0x1f66, 0x03b9}}},\r
- { 0x1fa7, {2, {0x1f67, 0x03b9}}},\r
- { 0x1fa8, {2, {0x1f60, 0x03b9}}},\r
- { 0x1fa9, {2, {0x1f61, 0x03b9}}},\r
- { 0x1faa, {2, {0x1f62, 0x03b9}}},\r
- { 0x1fab, {2, {0x1f63, 0x03b9}}},\r
- { 0x1fac, {2, {0x1f64, 0x03b9}}},\r
- { 0x1fad, {2, {0x1f65, 0x03b9}}},\r
- { 0x1fae, {2, {0x1f66, 0x03b9}}},\r
- { 0x1faf, {2, {0x1f67, 0x03b9}}},\r
- { 0x1fb2, {2, {0x1f70, 0x03b9}}},\r
- { 0x1fb3, {2, {0x03b1, 0x03b9}}},\r
- { 0x1fb4, {2, {0x03ac, 0x03b9}}},\r
- { 0x1fb6, {2, {0x03b1, 0x0342}}},\r
- { 0x1fb7, {3, {0x03b1, 0x0342, 0x03b9}}},\r
- { 0x1fb8, {1, {0x1fb0}}},\r
- { 0x1fb9, {1, {0x1fb1}}},\r
- { 0x1fba, {1, {0x1f70}}},\r
- { 0x1fbb, {1, {0x1f71}}},\r
- { 0x1fbc, {2, {0x03b1, 0x03b9}}},\r
- { 0x1fbe, {1, {0x03b9}}},\r
- { 0x1fc2, {2, {0x1f74, 0x03b9}}},\r
- { 0x1fc3, {2, {0x03b7, 0x03b9}}},\r
- { 0x1fc4, {2, {0x03ae, 0x03b9}}},\r
- { 0x1fc6, {2, {0x03b7, 0x0342}}},\r
- { 0x1fc7, {3, {0x03b7, 0x0342, 0x03b9}}},\r
- { 0x1fc8, {1, {0x1f72}}},\r
- { 0x1fc9, {1, {0x1f73}}},\r
- { 0x1fca, {1, {0x1f74}}},\r
- { 0x1fcb, {1, {0x1f75}}},\r
- { 0x1fcc, {2, {0x03b7, 0x03b9}}},\r
- { 0x1fd2, {3, {0x03b9, 0x0308, 0x0300}}},\r
- { 0x1fd3, {3, {0x03b9, 0x0308, 0x0301}}},\r
- { 0x1fd6, {2, {0x03b9, 0x0342}}},\r
- { 0x1fd7, {3, {0x03b9, 0x0308, 0x0342}}},\r
- { 0x1fd8, {1, {0x1fd0}}},\r
- { 0x1fd9, {1, {0x1fd1}}},\r
- { 0x1fda, {1, {0x1f76}}},\r
- { 0x1fdb, {1, {0x1f77}}},\r
- { 0x1fe2, {3, {0x03c5, 0x0308, 0x0300}}},\r
- { 0x1fe3, {3, {0x03c5, 0x0308, 0x0301}}},\r
- { 0x1fe4, {2, {0x03c1, 0x0313}}},\r
- { 0x1fe6, {2, {0x03c5, 0x0342}}},\r
- { 0x1fe7, {3, {0x03c5, 0x0308, 0x0342}}},\r
- { 0x1fe8, {1, {0x1fe0}}},\r
- { 0x1fe9, {1, {0x1fe1}}},\r
- { 0x1fea, {1, {0x1f7a}}},\r
- { 0x1feb, {1, {0x1f7b}}},\r
- { 0x1fec, {1, {0x1fe5}}},\r
- { 0x1ff2, {2, {0x1f7c, 0x03b9}}},\r
- { 0x1ff3, {2, {0x03c9, 0x03b9}}},\r
- { 0x1ff4, {2, {0x03ce, 0x03b9}}},\r
- { 0x1ff6, {2, {0x03c9, 0x0342}}},\r
- { 0x1ff7, {3, {0x03c9, 0x0342, 0x03b9}}},\r
- { 0x1ff8, {1, {0x1f78}}},\r
- { 0x1ff9, {1, {0x1f79}}},\r
- { 0x1ffa, {1, {0x1f7c}}},\r
- { 0x1ffb, {1, {0x1f7d}}},\r
- { 0x1ffc, {2, {0x03c9, 0x03b9}}},\r
- { 0x2126, {1, {0x03c9}}},\r
- { 0x212a, {1, {0x006b}}},\r
- { 0x212b, {1, {0x00e5}}},\r
- { 0x2160, {1, {0x2170}}},\r
- { 0x2161, {1, {0x2171}}},\r
- { 0x2162, {1, {0x2172}}},\r
- { 0x2163, {1, {0x2173}}},\r
- { 0x2164, {1, {0x2174}}},\r
- { 0x2165, {1, {0x2175}}},\r
- { 0x2166, {1, {0x2176}}},\r
- { 0x2167, {1, {0x2177}}},\r
- { 0x2168, {1, {0x2178}}},\r
- { 0x2169, {1, {0x2179}}},\r
- { 0x216a, {1, {0x217a}}},\r
- { 0x216b, {1, {0x217b}}},\r
- { 0x216c, {1, {0x217c}}},\r
- { 0x216d, {1, {0x217d}}},\r
- { 0x216e, {1, {0x217e}}},\r
- { 0x216f, {1, {0x217f}}},\r
- { 0x24b6, {1, {0x24d0}}},\r
- { 0x24b7, {1, {0x24d1}}},\r
- { 0x24b8, {1, {0x24d2}}},\r
- { 0x24b9, {1, {0x24d3}}},\r
- { 0x24ba, {1, {0x24d4}}},\r
- { 0x24bb, {1, {0x24d5}}},\r
- { 0x24bc, {1, {0x24d6}}},\r
- { 0x24bd, {1, {0x24d7}}},\r
- { 0x24be, {1, {0x24d8}}},\r
- { 0x24bf, {1, {0x24d9}}},\r
- { 0x24c0, {1, {0x24da}}},\r
- { 0x24c1, {1, {0x24db}}},\r
- { 0x24c2, {1, {0x24dc}}},\r
- { 0x24c3, {1, {0x24dd}}},\r
- { 0x24c4, {1, {0x24de}}},\r
- { 0x24c5, {1, {0x24df}}},\r
- { 0x24c6, {1, {0x24e0}}},\r
- { 0x24c7, {1, {0x24e1}}},\r
- { 0x24c8, {1, {0x24e2}}},\r
- { 0x24c9, {1, {0x24e3}}},\r
- { 0x24ca, {1, {0x24e4}}},\r
- { 0x24cb, {1, {0x24e5}}},\r
- { 0x24cc, {1, {0x24e6}}},\r
- { 0x24cd, {1, {0x24e7}}},\r
- { 0x24ce, {1, {0x24e8}}},\r
- { 0x24cf, {1, {0x24e9}}},\r
- { 0x2c00, {1, {0x2c30}}},\r
- { 0x2c01, {1, {0x2c31}}},\r
- { 0x2c02, {1, {0x2c32}}},\r
- { 0x2c03, {1, {0x2c33}}},\r
- { 0x2c04, {1, {0x2c34}}},\r
- { 0x2c05, {1, {0x2c35}}},\r
- { 0x2c06, {1, {0x2c36}}},\r
- { 0x2c07, {1, {0x2c37}}},\r
- { 0x2c08, {1, {0x2c38}}},\r
- { 0x2c09, {1, {0x2c39}}},\r
- { 0x2c0a, {1, {0x2c3a}}},\r
- { 0x2c0b, {1, {0x2c3b}}},\r
- { 0x2c0c, {1, {0x2c3c}}},\r
- { 0x2c0d, {1, {0x2c3d}}},\r
- { 0x2c0e, {1, {0x2c3e}}},\r
- { 0x2c0f, {1, {0x2c3f}}},\r
- { 0x2c10, {1, {0x2c40}}},\r
- { 0x2c11, {1, {0x2c41}}},\r
- { 0x2c12, {1, {0x2c42}}},\r
- { 0x2c13, {1, {0x2c43}}},\r
- { 0x2c14, {1, {0x2c44}}},\r
- { 0x2c15, {1, {0x2c45}}},\r
- { 0x2c16, {1, {0x2c46}}},\r
- { 0x2c17, {1, {0x2c47}}},\r
- { 0x2c18, {1, {0x2c48}}},\r
- { 0x2c19, {1, {0x2c49}}},\r
- { 0x2c1a, {1, {0x2c4a}}},\r
- { 0x2c1b, {1, {0x2c4b}}},\r
- { 0x2c1c, {1, {0x2c4c}}},\r
- { 0x2c1d, {1, {0x2c4d}}},\r
- { 0x2c1e, {1, {0x2c4e}}},\r
- { 0x2c1f, {1, {0x2c4f}}},\r
- { 0x2c20, {1, {0x2c50}}},\r
- { 0x2c21, {1, {0x2c51}}},\r
- { 0x2c22, {1, {0x2c52}}},\r
- { 0x2c23, {1, {0x2c53}}},\r
- { 0x2c24, {1, {0x2c54}}},\r
- { 0x2c25, {1, {0x2c55}}},\r
- { 0x2c26, {1, {0x2c56}}},\r
- { 0x2c27, {1, {0x2c57}}},\r
- { 0x2c28, {1, {0x2c58}}},\r
- { 0x2c29, {1, {0x2c59}}},\r
- { 0x2c2a, {1, {0x2c5a}}},\r
- { 0x2c2b, {1, {0x2c5b}}},\r
- { 0x2c2c, {1, {0x2c5c}}},\r
- { 0x2c2d, {1, {0x2c5d}}},\r
- { 0x2c2e, {1, {0x2c5e}}},\r
- { 0x2c80, {1, {0x2c81}}},\r
- { 0x2c82, {1, {0x2c83}}},\r
- { 0x2c84, {1, {0x2c85}}},\r
- { 0x2c86, {1, {0x2c87}}},\r
- { 0x2c88, {1, {0x2c89}}},\r
- { 0x2c8a, {1, {0x2c8b}}},\r
- { 0x2c8c, {1, {0x2c8d}}},\r
- { 0x2c8e, {1, {0x2c8f}}},\r
- { 0x2c90, {1, {0x2c91}}},\r
- { 0x2c92, {1, {0x2c93}}},\r
- { 0x2c94, {1, {0x2c95}}},\r
- { 0x2c96, {1, {0x2c97}}},\r
- { 0x2c98, {1, {0x2c99}}},\r
- { 0x2c9a, {1, {0x2c9b}}},\r
- { 0x2c9c, {1, {0x2c9d}}},\r
- { 0x2c9e, {1, {0x2c9f}}},\r
- { 0x2ca0, {1, {0x2ca1}}},\r
- { 0x2ca2, {1, {0x2ca3}}},\r
- { 0x2ca4, {1, {0x2ca5}}},\r
- { 0x2ca6, {1, {0x2ca7}}},\r
- { 0x2ca8, {1, {0x2ca9}}},\r
- { 0x2caa, {1, {0x2cab}}},\r
- { 0x2cac, {1, {0x2cad}}},\r
- { 0x2cae, {1, {0x2caf}}},\r
- { 0x2cb0, {1, {0x2cb1}}},\r
- { 0x2cb2, {1, {0x2cb3}}},\r
- { 0x2cb4, {1, {0x2cb5}}},\r
- { 0x2cb6, {1, {0x2cb7}}},\r
- { 0x2cb8, {1, {0x2cb9}}},\r
- { 0x2cba, {1, {0x2cbb}}},\r
- { 0x2cbc, {1, {0x2cbd}}},\r
- { 0x2cbe, {1, {0x2cbf}}},\r
- { 0x2cc0, {1, {0x2cc1}}},\r
- { 0x2cc2, {1, {0x2cc3}}},\r
- { 0x2cc4, {1, {0x2cc5}}},\r
- { 0x2cc6, {1, {0x2cc7}}},\r
- { 0x2cc8, {1, {0x2cc9}}},\r
- { 0x2cca, {1, {0x2ccb}}},\r
- { 0x2ccc, {1, {0x2ccd}}},\r
- { 0x2cce, {1, {0x2ccf}}},\r
- { 0x2cd0, {1, {0x2cd1}}},\r
- { 0x2cd2, {1, {0x2cd3}}},\r
- { 0x2cd4, {1, {0x2cd5}}},\r
- { 0x2cd6, {1, {0x2cd7}}},\r
- { 0x2cd8, {1, {0x2cd9}}},\r
- { 0x2cda, {1, {0x2cdb}}},\r
- { 0x2cdc, {1, {0x2cdd}}},\r
- { 0x2cde, {1, {0x2cdf}}},\r
- { 0x2ce0, {1, {0x2ce1}}},\r
- { 0x2ce2, {1, {0x2ce3}}},\r
- { 0xfb00, {2, {0x0066, 0x0066}}},\r
- { 0xfb01, {2, {0x0066, 0x0069}}},\r
- { 0xfb02, {2, {0x0066, 0x006c}}},\r
- { 0xfb03, {3, {0x0066, 0x0066, 0x0069}}},\r
- { 0xfb04, {3, {0x0066, 0x0066, 0x006c}}},\r
- { 0xfb05, {2, {0x0073, 0x0074}}},\r
- { 0xfb06, {2, {0x0073, 0x0074}}},\r
- { 0xfb13, {2, {0x0574, 0x0576}}},\r
- { 0xfb14, {2, {0x0574, 0x0565}}},\r
- { 0xfb15, {2, {0x0574, 0x056b}}},\r
- { 0xfb16, {2, {0x057e, 0x0576}}},\r
- { 0xfb17, {2, {0x0574, 0x056d}}},\r
- { 0xff21, {1, {0xff41}}},\r
- { 0xff22, {1, {0xff42}}},\r
- { 0xff23, {1, {0xff43}}},\r
- { 0xff24, {1, {0xff44}}},\r
- { 0xff25, {1, {0xff45}}},\r
- { 0xff26, {1, {0xff46}}},\r
- { 0xff27, {1, {0xff47}}},\r
- { 0xff28, {1, {0xff48}}},\r
- { 0xff29, {1, {0xff49}}},\r
- { 0xff2a, {1, {0xff4a}}},\r
- { 0xff2b, {1, {0xff4b}}},\r
- { 0xff2c, {1, {0xff4c}}},\r
- { 0xff2d, {1, {0xff4d}}},\r
- { 0xff2e, {1, {0xff4e}}},\r
- { 0xff2f, {1, {0xff4f}}},\r
- { 0xff30, {1, {0xff50}}},\r
- { 0xff31, {1, {0xff51}}},\r
- { 0xff32, {1, {0xff52}}},\r
- { 0xff33, {1, {0xff53}}},\r
- { 0xff34, {1, {0xff54}}},\r
- { 0xff35, {1, {0xff55}}},\r
- { 0xff36, {1, {0xff56}}},\r
- { 0xff37, {1, {0xff57}}},\r
- { 0xff38, {1, {0xff58}}},\r
- { 0xff39, {1, {0xff59}}},\r
- { 0xff3a, {1, {0xff5a}}},\r
- { 0x10400, {1, {0x10428}}},\r
- { 0x10401, {1, {0x10429}}},\r
- { 0x10402, {1, {0x1042a}}},\r
- { 0x10403, {1, {0x1042b}}},\r
- { 0x10404, {1, {0x1042c}}},\r
- { 0x10405, {1, {0x1042d}}},\r
- { 0x10406, {1, {0x1042e}}},\r
- { 0x10407, {1, {0x1042f}}},\r
- { 0x10408, {1, {0x10430}}},\r
- { 0x10409, {1, {0x10431}}},\r
- { 0x1040a, {1, {0x10432}}},\r
- { 0x1040b, {1, {0x10433}}},\r
- { 0x1040c, {1, {0x10434}}},\r
- { 0x1040d, {1, {0x10435}}},\r
- { 0x1040e, {1, {0x10436}}},\r
- { 0x1040f, {1, {0x10437}}},\r
- { 0x10410, {1, {0x10438}}},\r
- { 0x10411, {1, {0x10439}}},\r
- { 0x10412, {1, {0x1043a}}},\r
- { 0x10413, {1, {0x1043b}}},\r
- { 0x10414, {1, {0x1043c}}},\r
- { 0x10415, {1, {0x1043d}}},\r
- { 0x10416, {1, {0x1043e}}},\r
- { 0x10417, {1, {0x1043f}}},\r
- { 0x10418, {1, {0x10440}}},\r
- { 0x10419, {1, {0x10441}}},\r
- { 0x1041a, {1, {0x10442}}},\r
- { 0x1041b, {1, {0x10443}}},\r
- { 0x1041c, {1, {0x10444}}},\r
- { 0x1041d, {1, {0x10445}}},\r
- { 0x1041e, {1, {0x10446}}},\r
- { 0x1041f, {1, {0x10447}}},\r
- { 0x10420, {1, {0x10448}}},\r
- { 0x10421, {1, {0x10449}}},\r
- { 0x10422, {1, {0x1044a}}},\r
- { 0x10423, {1, {0x1044b}}},\r
- { 0x10424, {1, {0x1044c}}},\r
- { 0x10425, {1, {0x1044d}}},\r
- { 0x10426, {1, {0x1044e}}},\r
- { 0x10427, {1, {0x1044f}}}\r
-};\r
-\r
-static const CaseFold_11_Type CaseFold_Locale[] = {\r
- { 0x0049, {1, {0x0069}}},\r
- { 0x0130, {2, {0x0069, 0x0307}}}\r
-};\r
-\r
-static const CaseUnfold_11_Type CaseUnfold_11[] = {\r
- { 0x0061, {1, {0x0041 }}},\r
- { 0x0062, {1, {0x0042 }}},\r
- { 0x0063, {1, {0x0043 }}},\r
- { 0x0064, {1, {0x0044 }}},\r
- { 0x0065, {1, {0x0045 }}},\r
- { 0x0066, {1, {0x0046 }}},\r
- { 0x0067, {1, {0x0047 }}},\r
- { 0x0068, {1, {0x0048 }}},\r
- { 0x006a, {1, {0x004a }}},\r
- { 0x006b, {2, {0x212a, 0x004b }}},\r
- { 0x006c, {1, {0x004c }}},\r
- { 0x006d, {1, {0x004d }}},\r
- { 0x006e, {1, {0x004e }}},\r
- { 0x006f, {1, {0x004f }}},\r
- { 0x0070, {1, {0x0050 }}},\r
- { 0x0071, {1, {0x0051 }}},\r
- { 0x0072, {1, {0x0052 }}},\r
- { 0x0073, {2, {0x0053, 0x017f }}},\r
- { 0x0074, {1, {0x0054 }}},\r
- { 0x0075, {1, {0x0055 }}},\r
- { 0x0076, {1, {0x0056 }}},\r
- { 0x0077, {1, {0x0057 }}},\r
- { 0x0078, {1, {0x0058 }}},\r
- { 0x0079, {1, {0x0059 }}},\r
- { 0x007a, {1, {0x005a }}},\r
- { 0x00e0, {1, {0x00c0 }}},\r
- { 0x00e1, {1, {0x00c1 }}},\r
- { 0x00e2, {1, {0x00c2 }}},\r
- { 0x00e3, {1, {0x00c3 }}},\r
- { 0x00e4, {1, {0x00c4 }}},\r
- { 0x00e5, {2, {0x212b, 0x00c5 }}},\r
- { 0x00e6, {1, {0x00c6 }}},\r
- { 0x00e7, {1, {0x00c7 }}},\r
- { 0x00e8, {1, {0x00c8 }}},\r
- { 0x00e9, {1, {0x00c9 }}},\r
- { 0x00ea, {1, {0x00ca }}},\r
- { 0x00eb, {1, {0x00cb }}},\r
- { 0x00ec, {1, {0x00cc }}},\r
- { 0x00ed, {1, {0x00cd }}},\r
- { 0x00ee, {1, {0x00ce }}},\r
- { 0x00ef, {1, {0x00cf }}},\r
- { 0x00f0, {1, {0x00d0 }}},\r
- { 0x00f1, {1, {0x00d1 }}},\r
- { 0x00f2, {1, {0x00d2 }}},\r
- { 0x00f3, {1, {0x00d3 }}},\r
- { 0x00f4, {1, {0x00d4 }}},\r
- { 0x00f5, {1, {0x00d5 }}},\r
- { 0x00f6, {1, {0x00d6 }}},\r
- { 0x00f8, {1, {0x00d8 }}},\r
- { 0x00f9, {1, {0x00d9 }}},\r
- { 0x00fa, {1, {0x00da }}},\r
- { 0x00fb, {1, {0x00db }}},\r
- { 0x00fc, {1, {0x00dc }}},\r
- { 0x00fd, {1, {0x00dd }}},\r
- { 0x00fe, {1, {0x00de }}},\r
- { 0x00ff, {1, {0x0178 }}},\r
- { 0x0101, {1, {0x0100 }}},\r
- { 0x0103, {1, {0x0102 }}},\r
- { 0x0105, {1, {0x0104 }}},\r
- { 0x0107, {1, {0x0106 }}},\r
- { 0x0109, {1, {0x0108 }}},\r
- { 0x010b, {1, {0x010a }}},\r
- { 0x010d, {1, {0x010c }}},\r
- { 0x010f, {1, {0x010e }}},\r
- { 0x0111, {1, {0x0110 }}},\r
- { 0x0113, {1, {0x0112 }}},\r
- { 0x0115, {1, {0x0114 }}},\r
- { 0x0117, {1, {0x0116 }}},\r
- { 0x0119, {1, {0x0118 }}},\r
- { 0x011b, {1, {0x011a }}},\r
- { 0x011d, {1, {0x011c }}},\r
- { 0x011f, {1, {0x011e }}},\r
- { 0x0121, {1, {0x0120 }}},\r
- { 0x0123, {1, {0x0122 }}},\r
- { 0x0125, {1, {0x0124 }}},\r
- { 0x0127, {1, {0x0126 }}},\r
- { 0x0129, {1, {0x0128 }}},\r
- { 0x012b, {1, {0x012a }}},\r
- { 0x012d, {1, {0x012c }}},\r
- { 0x012f, {1, {0x012e }}},\r
- { 0x0133, {1, {0x0132 }}},\r
- { 0x0135, {1, {0x0134 }}},\r
- { 0x0137, {1, {0x0136 }}},\r
- { 0x013a, {1, {0x0139 }}},\r
- { 0x013c, {1, {0x013b }}},\r
- { 0x013e, {1, {0x013d }}},\r
- { 0x0140, {1, {0x013f }}},\r
- { 0x0142, {1, {0x0141 }}},\r
- { 0x0144, {1, {0x0143 }}},\r
- { 0x0146, {1, {0x0145 }}},\r
- { 0x0148, {1, {0x0147 }}},\r
- { 0x014b, {1, {0x014a }}},\r
- { 0x014d, {1, {0x014c }}},\r
- { 0x014f, {1, {0x014e }}},\r
- { 0x0151, {1, {0x0150 }}},\r
- { 0x0153, {1, {0x0152 }}},\r
- { 0x0155, {1, {0x0154 }}},\r
- { 0x0157, {1, {0x0156 }}},\r
- { 0x0159, {1, {0x0158 }}},\r
- { 0x015b, {1, {0x015a }}},\r
- { 0x015d, {1, {0x015c }}},\r
- { 0x015f, {1, {0x015e }}},\r
- { 0x0161, {1, {0x0160 }}},\r
- { 0x0163, {1, {0x0162 }}},\r
- { 0x0165, {1, {0x0164 }}},\r
- { 0x0167, {1, {0x0166 }}},\r
- { 0x0169, {1, {0x0168 }}},\r
- { 0x016b, {1, {0x016a }}},\r
- { 0x016d, {1, {0x016c }}},\r
- { 0x016f, {1, {0x016e }}},\r
- { 0x0171, {1, {0x0170 }}},\r
- { 0x0173, {1, {0x0172 }}},\r
- { 0x0175, {1, {0x0174 }}},\r
- { 0x0177, {1, {0x0176 }}},\r
- { 0x017a, {1, {0x0179 }}},\r
- { 0x017c, {1, {0x017b }}},\r
- { 0x017e, {1, {0x017d }}},\r
- { 0x0183, {1, {0x0182 }}},\r
- { 0x0185, {1, {0x0184 }}},\r
- { 0x0188, {1, {0x0187 }}},\r
- { 0x018c, {1, {0x018b }}},\r
- { 0x0192, {1, {0x0191 }}},\r
- { 0x0195, {1, {0x01f6 }}},\r
- { 0x0199, {1, {0x0198 }}},\r
- { 0x019a, {1, {0x023d }}},\r
- { 0x019e, {1, {0x0220 }}},\r
- { 0x01a1, {1, {0x01a0 }}},\r
- { 0x01a3, {1, {0x01a2 }}},\r
- { 0x01a5, {1, {0x01a4 }}},\r
- { 0x01a8, {1, {0x01a7 }}},\r
- { 0x01ad, {1, {0x01ac }}},\r
- { 0x01b0, {1, {0x01af }}},\r
- { 0x01b4, {1, {0x01b3 }}},\r
- { 0x01b6, {1, {0x01b5 }}},\r
- { 0x01b9, {1, {0x01b8 }}},\r
- { 0x01bd, {1, {0x01bc }}},\r
- { 0x01bf, {1, {0x01f7 }}},\r
- { 0x01c6, {2, {0x01c4, 0x01c5 }}},\r
- { 0x01c9, {2, {0x01c7, 0x01c8 }}},\r
- { 0x01cc, {2, {0x01ca, 0x01cb }}},\r
- { 0x01ce, {1, {0x01cd }}},\r
- { 0x01d0, {1, {0x01cf }}},\r
- { 0x01d2, {1, {0x01d1 }}},\r
- { 0x01d4, {1, {0x01d3 }}},\r
- { 0x01d6, {1, {0x01d5 }}},\r
- { 0x01d8, {1, {0x01d7 }}},\r
- { 0x01da, {1, {0x01d9 }}},\r
- { 0x01dc, {1, {0x01db }}},\r
- { 0x01dd, {1, {0x018e }}},\r
- { 0x01df, {1, {0x01de }}},\r
- { 0x01e1, {1, {0x01e0 }}},\r
- { 0x01e3, {1, {0x01e2 }}},\r
- { 0x01e5, {1, {0x01e4 }}},\r
- { 0x01e7, {1, {0x01e6 }}},\r
- { 0x01e9, {1, {0x01e8 }}},\r
- { 0x01eb, {1, {0x01ea }}},\r
- { 0x01ed, {1, {0x01ec }}},\r
- { 0x01ef, {1, {0x01ee }}},\r
- { 0x01f3, {2, {0x01f1, 0x01f2 }}},\r
- { 0x01f5, {1, {0x01f4 }}},\r
- { 0x01f9, {1, {0x01f8 }}},\r
- { 0x01fb, {1, {0x01fa }}},\r
- { 0x01fd, {1, {0x01fc }}},\r
- { 0x01ff, {1, {0x01fe }}},\r
- { 0x0201, {1, {0x0200 }}},\r
- { 0x0203, {1, {0x0202 }}},\r
- { 0x0205, {1, {0x0204 }}},\r
- { 0x0207, {1, {0x0206 }}},\r
- { 0x0209, {1, {0x0208 }}},\r
- { 0x020b, {1, {0x020a }}},\r
- { 0x020d, {1, {0x020c }}},\r
- { 0x020f, {1, {0x020e }}},\r
- { 0x0211, {1, {0x0210 }}},\r
- { 0x0213, {1, {0x0212 }}},\r
- { 0x0215, {1, {0x0214 }}},\r
- { 0x0217, {1, {0x0216 }}},\r
- { 0x0219, {1, {0x0218 }}},\r
- { 0x021b, {1, {0x021a }}},\r
- { 0x021d, {1, {0x021c }}},\r
- { 0x021f, {1, {0x021e }}},\r
- { 0x0223, {1, {0x0222 }}},\r
- { 0x0225, {1, {0x0224 }}},\r
- { 0x0227, {1, {0x0226 }}},\r
- { 0x0229, {1, {0x0228 }}},\r
- { 0x022b, {1, {0x022a }}},\r
- { 0x022d, {1, {0x022c }}},\r
- { 0x022f, {1, {0x022e }}},\r
- { 0x0231, {1, {0x0230 }}},\r
- { 0x0233, {1, {0x0232 }}},\r
- { 0x023c, {1, {0x023b }}},\r
- { 0x0253, {1, {0x0181 }}},\r
- { 0x0254, {1, {0x0186 }}},\r
- { 0x0256, {1, {0x0189 }}},\r
- { 0x0257, {1, {0x018a }}},\r
- { 0x0259, {1, {0x018f }}},\r
- { 0x025b, {1, {0x0190 }}},\r
- { 0x0260, {1, {0x0193 }}},\r
- { 0x0263, {1, {0x0194 }}},\r
- { 0x0268, {1, {0x0197 }}},\r
- { 0x0269, {1, {0x0196 }}},\r
- { 0x026f, {1, {0x019c }}},\r
- { 0x0272, {1, {0x019d }}},\r
- { 0x0275, {1, {0x019f }}},\r
- { 0x0280, {1, {0x01a6 }}},\r
- { 0x0283, {1, {0x01a9 }}},\r
- { 0x0288, {1, {0x01ae }}},\r
- { 0x028a, {1, {0x01b1 }}},\r
- { 0x028b, {1, {0x01b2 }}},\r
- { 0x0292, {1, {0x01b7 }}},\r
- { 0x0294, {1, {0x0241 }}},\r
- { 0x03ac, {1, {0x0386 }}},\r
- { 0x03ad, {1, {0x0388 }}},\r
- { 0x03ae, {1, {0x0389 }}},\r
- { 0x03af, {1, {0x038a }}},\r
- { 0x03b1, {1, {0x0391 }}},\r
- { 0x03b2, {2, {0x0392, 0x03d0 }}},\r
- { 0x03b3, {1, {0x0393 }}},\r
- { 0x03b4, {1, {0x0394 }}},\r
- { 0x03b5, {2, {0x03f5, 0x0395 }}},\r
- { 0x03b6, {1, {0x0396 }}},\r
- { 0x03b7, {1, {0x0397 }}},\r
- { 0x03b8, {3, {0x03f4, 0x0398, 0x03d1 }}},\r
- { 0x03b9, {3, {0x1fbe, 0x0399, 0x0345 }}},\r
- { 0x03ba, {2, {0x03f0, 0x039a }}},\r
- { 0x03bb, {1, {0x039b }}},\r
- { 0x03bc, {2, {0x00b5, 0x039c }}},\r
- { 0x03bd, {1, {0x039d }}},\r
- { 0x03be, {1, {0x039e }}},\r
- { 0x03bf, {1, {0x039f }}},\r
- { 0x03c0, {2, {0x03a0, 0x03d6 }}},\r
- { 0x03c1, {2, {0x03f1, 0x03a1 }}},\r
- { 0x03c3, {2, {0x03a3, 0x03c2 }}},\r
- { 0x03c4, {1, {0x03a4 }}},\r
- { 0x03c5, {1, {0x03a5 }}},\r
- { 0x03c6, {2, {0x03a6, 0x03d5 }}},\r
- { 0x03c7, {1, {0x03a7 }}},\r
- { 0x03c8, {1, {0x03a8 }}},\r
- { 0x03c9, {2, {0x03a9, 0x2126 }}},\r
- { 0x03ca, {1, {0x03aa }}},\r
- { 0x03cb, {1, {0x03ab }}},\r
- { 0x03cc, {1, {0x038c }}},\r
- { 0x03cd, {1, {0x038e }}},\r
- { 0x03ce, {1, {0x038f }}},\r
- { 0x03d9, {1, {0x03d8 }}},\r
- { 0x03db, {1, {0x03da }}},\r
- { 0x03dd, {1, {0x03dc }}},\r
- { 0x03df, {1, {0x03de }}},\r
- { 0x03e1, {1, {0x03e0 }}},\r
- { 0x03e3, {1, {0x03e2 }}},\r
- { 0x03e5, {1, {0x03e4 }}},\r
- { 0x03e7, {1, {0x03e6 }}},\r
- { 0x03e9, {1, {0x03e8 }}},\r
- { 0x03eb, {1, {0x03ea }}},\r
- { 0x03ed, {1, {0x03ec }}},\r
- { 0x03ef, {1, {0x03ee }}},\r
- { 0x03f2, {1, {0x03f9 }}},\r
- { 0x03f8, {1, {0x03f7 }}},\r
- { 0x03fb, {1, {0x03fa }}},\r
- { 0x0430, {1, {0x0410 }}},\r
- { 0x0431, {1, {0x0411 }}},\r
- { 0x0432, {1, {0x0412 }}},\r
- { 0x0433, {1, {0x0413 }}},\r
- { 0x0434, {1, {0x0414 }}},\r
- { 0x0435, {1, {0x0415 }}},\r
- { 0x0436, {1, {0x0416 }}},\r
- { 0x0437, {1, {0x0417 }}},\r
- { 0x0438, {1, {0x0418 }}},\r
- { 0x0439, {1, {0x0419 }}},\r
- { 0x043a, {1, {0x041a }}},\r
- { 0x043b, {1, {0x041b }}},\r
- { 0x043c, {1, {0x041c }}},\r
- { 0x043d, {1, {0x041d }}},\r
- { 0x043e, {1, {0x041e }}},\r
- { 0x043f, {1, {0x041f }}},\r
- { 0x0440, {1, {0x0420 }}},\r
- { 0x0441, {1, {0x0421 }}},\r
- { 0x0442, {1, {0x0422 }}},\r
- { 0x0443, {1, {0x0423 }}},\r
- { 0x0444, {1, {0x0424 }}},\r
- { 0x0445, {1, {0x0425 }}},\r
- { 0x0446, {1, {0x0426 }}},\r
- { 0x0447, {1, {0x0427 }}},\r
- { 0x0448, {1, {0x0428 }}},\r
- { 0x0449, {1, {0x0429 }}},\r
- { 0x044a, {1, {0x042a }}},\r
- { 0x044b, {1, {0x042b }}},\r
- { 0x044c, {1, {0x042c }}},\r
- { 0x044d, {1, {0x042d }}},\r
- { 0x044e, {1, {0x042e }}},\r
- { 0x044f, {1, {0x042f }}},\r
- { 0x0450, {1, {0x0400 }}},\r
- { 0x0451, {1, {0x0401 }}},\r
- { 0x0452, {1, {0x0402 }}},\r
- { 0x0453, {1, {0x0403 }}},\r
- { 0x0454, {1, {0x0404 }}},\r
- { 0x0455, {1, {0x0405 }}},\r
- { 0x0456, {1, {0x0406 }}},\r
- { 0x0457, {1, {0x0407 }}},\r
- { 0x0458, {1, {0x0408 }}},\r
- { 0x0459, {1, {0x0409 }}},\r
- { 0x045a, {1, {0x040a }}},\r
- { 0x045b, {1, {0x040b }}},\r
- { 0x045c, {1, {0x040c }}},\r
- { 0x045d, {1, {0x040d }}},\r
- { 0x045e, {1, {0x040e }}},\r
- { 0x045f, {1, {0x040f }}},\r
- { 0x0461, {1, {0x0460 }}},\r
- { 0x0463, {1, {0x0462 }}},\r
- { 0x0465, {1, {0x0464 }}},\r
- { 0x0467, {1, {0x0466 }}},\r
- { 0x0469, {1, {0x0468 }}},\r
- { 0x046b, {1, {0x046a }}},\r
- { 0x046d, {1, {0x046c }}},\r
- { 0x046f, {1, {0x046e }}},\r
- { 0x0471, {1, {0x0470 }}},\r
- { 0x0473, {1, {0x0472 }}},\r
- { 0x0475, {1, {0x0474 }}},\r
- { 0x0477, {1, {0x0476 }}},\r
- { 0x0479, {1, {0x0478 }}},\r
- { 0x047b, {1, {0x047a }}},\r
- { 0x047d, {1, {0x047c }}},\r
- { 0x047f, {1, {0x047e }}},\r
- { 0x0481, {1, {0x0480 }}},\r
- { 0x048b, {1, {0x048a }}},\r
- { 0x048d, {1, {0x048c }}},\r
- { 0x048f, {1, {0x048e }}},\r
- { 0x0491, {1, {0x0490 }}},\r
- { 0x0493, {1, {0x0492 }}},\r
- { 0x0495, {1, {0x0494 }}},\r
- { 0x0497, {1, {0x0496 }}},\r
- { 0x0499, {1, {0x0498 }}},\r
- { 0x049b, {1, {0x049a }}},\r
- { 0x049d, {1, {0x049c }}},\r
- { 0x049f, {1, {0x049e }}},\r
- { 0x04a1, {1, {0x04a0 }}},\r
- { 0x04a3, {1, {0x04a2 }}},\r
- { 0x04a5, {1, {0x04a4 }}},\r
- { 0x04a7, {1, {0x04a6 }}},\r
- { 0x04a9, {1, {0x04a8 }}},\r
- { 0x04ab, {1, {0x04aa }}},\r
- { 0x04ad, {1, {0x04ac }}},\r
- { 0x04af, {1, {0x04ae }}},\r
- { 0x04b1, {1, {0x04b0 }}},\r
- { 0x04b3, {1, {0x04b2 }}},\r
- { 0x04b5, {1, {0x04b4 }}},\r
- { 0x04b7, {1, {0x04b6 }}},\r
- { 0x04b9, {1, {0x04b8 }}},\r
- { 0x04bb, {1, {0x04ba }}},\r
- { 0x04bd, {1, {0x04bc }}},\r
- { 0x04bf, {1, {0x04be }}},\r
- { 0x04c2, {1, {0x04c1 }}},\r
- { 0x04c4, {1, {0x04c3 }}},\r
- { 0x04c6, {1, {0x04c5 }}},\r
- { 0x04c8, {1, {0x04c7 }}},\r
- { 0x04ca, {1, {0x04c9 }}},\r
- { 0x04cc, {1, {0x04cb }}},\r
- { 0x04ce, {1, {0x04cd }}},\r
- { 0x04d1, {1, {0x04d0 }}},\r
- { 0x04d3, {1, {0x04d2 }}},\r
- { 0x04d5, {1, {0x04d4 }}},\r
- { 0x04d7, {1, {0x04d6 }}},\r
- { 0x04d9, {1, {0x04d8 }}},\r
- { 0x04db, {1, {0x04da }}},\r
- { 0x04dd, {1, {0x04dc }}},\r
- { 0x04df, {1, {0x04de }}},\r
- { 0x04e1, {1, {0x04e0 }}},\r
- { 0x04e3, {1, {0x04e2 }}},\r
- { 0x04e5, {1, {0x04e4 }}},\r
- { 0x04e7, {1, {0x04e6 }}},\r
- { 0x04e9, {1, {0x04e8 }}},\r
- { 0x04eb, {1, {0x04ea }}},\r
- { 0x04ed, {1, {0x04ec }}},\r
- { 0x04ef, {1, {0x04ee }}},\r
- { 0x04f1, {1, {0x04f0 }}},\r
- { 0x04f3, {1, {0x04f2 }}},\r
- { 0x04f5, {1, {0x04f4 }}},\r
- { 0x04f7, {1, {0x04f6 }}},\r
- { 0x04f9, {1, {0x04f8 }}},\r
- { 0x0501, {1, {0x0500 }}},\r
- { 0x0503, {1, {0x0502 }}},\r
- { 0x0505, {1, {0x0504 }}},\r
- { 0x0507, {1, {0x0506 }}},\r
- { 0x0509, {1, {0x0508 }}},\r
- { 0x050b, {1, {0x050a }}},\r
- { 0x050d, {1, {0x050c }}},\r
- { 0x050f, {1, {0x050e }}},\r
- { 0x0561, {1, {0x0531 }}},\r
- { 0x0562, {1, {0x0532 }}},\r
- { 0x0563, {1, {0x0533 }}},\r
- { 0x0564, {1, {0x0534 }}},\r
- { 0x0565, {1, {0x0535 }}},\r
- { 0x0566, {1, {0x0536 }}},\r
- { 0x0567, {1, {0x0537 }}},\r
- { 0x0568, {1, {0x0538 }}},\r
- { 0x0569, {1, {0x0539 }}},\r
- { 0x056a, {1, {0x053a }}},\r
- { 0x056b, {1, {0x053b }}},\r
- { 0x056c, {1, {0x053c }}},\r
- { 0x056d, {1, {0x053d }}},\r
- { 0x056e, {1, {0x053e }}},\r
- { 0x056f, {1, {0x053f }}},\r
- { 0x0570, {1, {0x0540 }}},\r
- { 0x0571, {1, {0x0541 }}},\r
- { 0x0572, {1, {0x0542 }}},\r
- { 0x0573, {1, {0x0543 }}},\r
- { 0x0574, {1, {0x0544 }}},\r
- { 0x0575, {1, {0x0545 }}},\r
- { 0x0576, {1, {0x0546 }}},\r
- { 0x0577, {1, {0x0547 }}},\r
- { 0x0578, {1, {0x0548 }}},\r
- { 0x0579, {1, {0x0549 }}},\r
- { 0x057a, {1, {0x054a }}},\r
- { 0x057b, {1, {0x054b }}},\r
- { 0x057c, {1, {0x054c }}},\r
- { 0x057d, {1, {0x054d }}},\r
- { 0x057e, {1, {0x054e }}},\r
- { 0x057f, {1, {0x054f }}},\r
- { 0x0580, {1, {0x0550 }}},\r
- { 0x0581, {1, {0x0551 }}},\r
- { 0x0582, {1, {0x0552 }}},\r
- { 0x0583, {1, {0x0553 }}},\r
- { 0x0584, {1, {0x0554 }}},\r
- { 0x0585, {1, {0x0555 }}},\r
- { 0x0586, {1, {0x0556 }}},\r
- { 0x1e01, {1, {0x1e00 }}},\r
- { 0x1e03, {1, {0x1e02 }}},\r
- { 0x1e05, {1, {0x1e04 }}},\r
- { 0x1e07, {1, {0x1e06 }}},\r
- { 0x1e09, {1, {0x1e08 }}},\r
- { 0x1e0b, {1, {0x1e0a }}},\r
- { 0x1e0d, {1, {0x1e0c }}},\r
- { 0x1e0f, {1, {0x1e0e }}},\r
- { 0x1e11, {1, {0x1e10 }}},\r
- { 0x1e13, {1, {0x1e12 }}},\r
- { 0x1e15, {1, {0x1e14 }}},\r
- { 0x1e17, {1, {0x1e16 }}},\r
- { 0x1e19, {1, {0x1e18 }}},\r
- { 0x1e1b, {1, {0x1e1a }}},\r
- { 0x1e1d, {1, {0x1e1c }}},\r
- { 0x1e1f, {1, {0x1e1e }}},\r
- { 0x1e21, {1, {0x1e20 }}},\r
- { 0x1e23, {1, {0x1e22 }}},\r
- { 0x1e25, {1, {0x1e24 }}},\r
- { 0x1e27, {1, {0x1e26 }}},\r
- { 0x1e29, {1, {0x1e28 }}},\r
- { 0x1e2b, {1, {0x1e2a }}},\r
- { 0x1e2d, {1, {0x1e2c }}},\r
- { 0x1e2f, {1, {0x1e2e }}},\r
- { 0x1e31, {1, {0x1e30 }}},\r
- { 0x1e33, {1, {0x1e32 }}},\r
- { 0x1e35, {1, {0x1e34 }}},\r
- { 0x1e37, {1, {0x1e36 }}},\r
- { 0x1e39, {1, {0x1e38 }}},\r
- { 0x1e3b, {1, {0x1e3a }}},\r
- { 0x1e3d, {1, {0x1e3c }}},\r
- { 0x1e3f, {1, {0x1e3e }}},\r
- { 0x1e41, {1, {0x1e40 }}},\r
- { 0x1e43, {1, {0x1e42 }}},\r
- { 0x1e45, {1, {0x1e44 }}},\r
- { 0x1e47, {1, {0x1e46 }}},\r
- { 0x1e49, {1, {0x1e48 }}},\r
- { 0x1e4b, {1, {0x1e4a }}},\r
- { 0x1e4d, {1, {0x1e4c }}},\r
- { 0x1e4f, {1, {0x1e4e }}},\r
- { 0x1e51, {1, {0x1e50 }}},\r
- { 0x1e53, {1, {0x1e52 }}},\r
- { 0x1e55, {1, {0x1e54 }}},\r
- { 0x1e57, {1, {0x1e56 }}},\r
- { 0x1e59, {1, {0x1e58 }}},\r
- { 0x1e5b, {1, {0x1e5a }}},\r
- { 0x1e5d, {1, {0x1e5c }}},\r
- { 0x1e5f, {1, {0x1e5e }}},\r
- { 0x1e61, {2, {0x1e9b, 0x1e60 }}},\r
- { 0x1e63, {1, {0x1e62 }}},\r
- { 0x1e65, {1, {0x1e64 }}},\r
- { 0x1e67, {1, {0x1e66 }}},\r
- { 0x1e69, {1, {0x1e68 }}},\r
- { 0x1e6b, {1, {0x1e6a }}},\r
- { 0x1e6d, {1, {0x1e6c }}},\r
- { 0x1e6f, {1, {0x1e6e }}},\r
- { 0x1e71, {1, {0x1e70 }}},\r
- { 0x1e73, {1, {0x1e72 }}},\r
- { 0x1e75, {1, {0x1e74 }}},\r
- { 0x1e77, {1, {0x1e76 }}},\r
- { 0x1e79, {1, {0x1e78 }}},\r
- { 0x1e7b, {1, {0x1e7a }}},\r
- { 0x1e7d, {1, {0x1e7c }}},\r
- { 0x1e7f, {1, {0x1e7e }}},\r
- { 0x1e81, {1, {0x1e80 }}},\r
- { 0x1e83, {1, {0x1e82 }}},\r
- { 0x1e85, {1, {0x1e84 }}},\r
- { 0x1e87, {1, {0x1e86 }}},\r
- { 0x1e89, {1, {0x1e88 }}},\r
- { 0x1e8b, {1, {0x1e8a }}},\r
- { 0x1e8d, {1, {0x1e8c }}},\r
- { 0x1e8f, {1, {0x1e8e }}},\r
- { 0x1e91, {1, {0x1e90 }}},\r
- { 0x1e93, {1, {0x1e92 }}},\r
- { 0x1e95, {1, {0x1e94 }}},\r
- { 0x1ea1, {1, {0x1ea0 }}},\r
- { 0x1ea3, {1, {0x1ea2 }}},\r
- { 0x1ea5, {1, {0x1ea4 }}},\r
- { 0x1ea7, {1, {0x1ea6 }}},\r
- { 0x1ea9, {1, {0x1ea8 }}},\r
- { 0x1eab, {1, {0x1eaa }}},\r
- { 0x1ead, {1, {0x1eac }}},\r
- { 0x1eaf, {1, {0x1eae }}},\r
- { 0x1eb1, {1, {0x1eb0 }}},\r
- { 0x1eb3, {1, {0x1eb2 }}},\r
- { 0x1eb5, {1, {0x1eb4 }}},\r
- { 0x1eb7, {1, {0x1eb6 }}},\r
- { 0x1eb9, {1, {0x1eb8 }}},\r
- { 0x1ebb, {1, {0x1eba }}},\r
- { 0x1ebd, {1, {0x1ebc }}},\r
- { 0x1ebf, {1, {0x1ebe }}},\r
- { 0x1ec1, {1, {0x1ec0 }}},\r
- { 0x1ec3, {1, {0x1ec2 }}},\r
- { 0x1ec5, {1, {0x1ec4 }}},\r
- { 0x1ec7, {1, {0x1ec6 }}},\r
- { 0x1ec9, {1, {0x1ec8 }}},\r
- { 0x1ecb, {1, {0x1eca }}},\r
- { 0x1ecd, {1, {0x1ecc }}},\r
- { 0x1ecf, {1, {0x1ece }}},\r
- { 0x1ed1, {1, {0x1ed0 }}},\r
- { 0x1ed3, {1, {0x1ed2 }}},\r
- { 0x1ed5, {1, {0x1ed4 }}},\r
- { 0x1ed7, {1, {0x1ed6 }}},\r
- { 0x1ed9, {1, {0x1ed8 }}},\r
- { 0x1edb, {1, {0x1eda }}},\r
- { 0x1edd, {1, {0x1edc }}},\r
- { 0x1edf, {1, {0x1ede }}},\r
- { 0x1ee1, {1, {0x1ee0 }}},\r
- { 0x1ee3, {1, {0x1ee2 }}},\r
- { 0x1ee5, {1, {0x1ee4 }}},\r
- { 0x1ee7, {1, {0x1ee6 }}},\r
- { 0x1ee9, {1, {0x1ee8 }}},\r
- { 0x1eeb, {1, {0x1eea }}},\r
- { 0x1eed, {1, {0x1eec }}},\r
- { 0x1eef, {1, {0x1eee }}},\r
- { 0x1ef1, {1, {0x1ef0 }}},\r
- { 0x1ef3, {1, {0x1ef2 }}},\r
- { 0x1ef5, {1, {0x1ef4 }}},\r
- { 0x1ef7, {1, {0x1ef6 }}},\r
- { 0x1ef9, {1, {0x1ef8 }}},\r
- { 0x1f00, {1, {0x1f08 }}},\r
- { 0x1f01, {1, {0x1f09 }}},\r
- { 0x1f02, {1, {0x1f0a }}},\r
- { 0x1f03, {1, {0x1f0b }}},\r
- { 0x1f04, {1, {0x1f0c }}},\r
- { 0x1f05, {1, {0x1f0d }}},\r
- { 0x1f06, {1, {0x1f0e }}},\r
- { 0x1f07, {1, {0x1f0f }}},\r
- { 0x1f10, {1, {0x1f18 }}},\r
- { 0x1f11, {1, {0x1f19 }}},\r
- { 0x1f12, {1, {0x1f1a }}},\r
- { 0x1f13, {1, {0x1f1b }}},\r
- { 0x1f14, {1, {0x1f1c }}},\r
- { 0x1f15, {1, {0x1f1d }}},\r
- { 0x1f20, {1, {0x1f28 }}},\r
- { 0x1f21, {1, {0x1f29 }}},\r
- { 0x1f22, {1, {0x1f2a }}},\r
- { 0x1f23, {1, {0x1f2b }}},\r
- { 0x1f24, {1, {0x1f2c }}},\r
- { 0x1f25, {1, {0x1f2d }}},\r
- { 0x1f26, {1, {0x1f2e }}},\r
- { 0x1f27, {1, {0x1f2f }}},\r
- { 0x1f30, {1, {0x1f38 }}},\r
- { 0x1f31, {1, {0x1f39 }}},\r
- { 0x1f32, {1, {0x1f3a }}},\r
- { 0x1f33, {1, {0x1f3b }}},\r
- { 0x1f34, {1, {0x1f3c }}},\r
- { 0x1f35, {1, {0x1f3d }}},\r
- { 0x1f36, {1, {0x1f3e }}},\r
- { 0x1f37, {1, {0x1f3f }}},\r
- { 0x1f40, {1, {0x1f48 }}},\r
- { 0x1f41, {1, {0x1f49 }}},\r
- { 0x1f42, {1, {0x1f4a }}},\r
- { 0x1f43, {1, {0x1f4b }}},\r
- { 0x1f44, {1, {0x1f4c }}},\r
- { 0x1f45, {1, {0x1f4d }}},\r
- { 0x1f51, {1, {0x1f59 }}},\r
- { 0x1f53, {1, {0x1f5b }}},\r
- { 0x1f55, {1, {0x1f5d }}},\r
- { 0x1f57, {1, {0x1f5f }}},\r
- { 0x1f60, {1, {0x1f68 }}},\r
- { 0x1f61, {1, {0x1f69 }}},\r
- { 0x1f62, {1, {0x1f6a }}},\r
- { 0x1f63, {1, {0x1f6b }}},\r
- { 0x1f64, {1, {0x1f6c }}},\r
- { 0x1f65, {1, {0x1f6d }}},\r
- { 0x1f66, {1, {0x1f6e }}},\r
- { 0x1f67, {1, {0x1f6f }}},\r
- { 0x1f70, {1, {0x1fba }}},\r
- { 0x1f71, {1, {0x1fbb }}},\r
- { 0x1f72, {1, {0x1fc8 }}},\r
- { 0x1f73, {1, {0x1fc9 }}},\r
- { 0x1f74, {1, {0x1fca }}},\r
- { 0x1f75, {1, {0x1fcb }}},\r
- { 0x1f76, {1, {0x1fda }}},\r
- { 0x1f77, {1, {0x1fdb }}},\r
- { 0x1f78, {1, {0x1ff8 }}},\r
- { 0x1f79, {1, {0x1ff9 }}},\r
- { 0x1f7a, {1, {0x1fea }}},\r
- { 0x1f7b, {1, {0x1feb }}},\r
- { 0x1f7c, {1, {0x1ffa }}},\r
- { 0x1f7d, {1, {0x1ffb }}},\r
- { 0x1fb0, {1, {0x1fb8 }}},\r
- { 0x1fb1, {1, {0x1fb9 }}},\r
- { 0x1fd0, {1, {0x1fd8 }}},\r
- { 0x1fd1, {1, {0x1fd9 }}},\r
- { 0x1fe0, {1, {0x1fe8 }}},\r
- { 0x1fe1, {1, {0x1fe9 }}},\r
- { 0x1fe5, {1, {0x1fec }}},\r
- { 0x2170, {1, {0x2160 }}},\r
- { 0x2171, {1, {0x2161 }}},\r
- { 0x2172, {1, {0x2162 }}},\r
- { 0x2173, {1, {0x2163 }}},\r
- { 0x2174, {1, {0x2164 }}},\r
- { 0x2175, {1, {0x2165 }}},\r
- { 0x2176, {1, {0x2166 }}},\r
- { 0x2177, {1, {0x2167 }}},\r
- { 0x2178, {1, {0x2168 }}},\r
- { 0x2179, {1, {0x2169 }}},\r
- { 0x217a, {1, {0x216a }}},\r
- { 0x217b, {1, {0x216b }}},\r
- { 0x217c, {1, {0x216c }}},\r
- { 0x217d, {1, {0x216d }}},\r
- { 0x217e, {1, {0x216e }}},\r
- { 0x217f, {1, {0x216f }}},\r
- { 0x24d0, {1, {0x24b6 }}},\r
- { 0x24d1, {1, {0x24b7 }}},\r
- { 0x24d2, {1, {0x24b8 }}},\r
- { 0x24d3, {1, {0x24b9 }}},\r
- { 0x24d4, {1, {0x24ba }}},\r
- { 0x24d5, {1, {0x24bb }}},\r
- { 0x24d6, {1, {0x24bc }}},\r
- { 0x24d7, {1, {0x24bd }}},\r
- { 0x24d8, {1, {0x24be }}},\r
- { 0x24d9, {1, {0x24bf }}},\r
- { 0x24da, {1, {0x24c0 }}},\r
- { 0x24db, {1, {0x24c1 }}},\r
- { 0x24dc, {1, {0x24c2 }}},\r
- { 0x24dd, {1, {0x24c3 }}},\r
- { 0x24de, {1, {0x24c4 }}},\r
- { 0x24df, {1, {0x24c5 }}},\r
- { 0x24e0, {1, {0x24c6 }}},\r
- { 0x24e1, {1, {0x24c7 }}},\r
- { 0x24e2, {1, {0x24c8 }}},\r
- { 0x24e3, {1, {0x24c9 }}},\r
- { 0x24e4, {1, {0x24ca }}},\r
- { 0x24e5, {1, {0x24cb }}},\r
- { 0x24e6, {1, {0x24cc }}},\r
- { 0x24e7, {1, {0x24cd }}},\r
- { 0x24e8, {1, {0x24ce }}},\r
- { 0x24e9, {1, {0x24cf }}},\r
- { 0x2c30, {1, {0x2c00 }}},\r
- { 0x2c31, {1, {0x2c01 }}},\r
- { 0x2c32, {1, {0x2c02 }}},\r
- { 0x2c33, {1, {0x2c03 }}},\r
- { 0x2c34, {1, {0x2c04 }}},\r
- { 0x2c35, {1, {0x2c05 }}},\r
- { 0x2c36, {1, {0x2c06 }}},\r
- { 0x2c37, {1, {0x2c07 }}},\r
- { 0x2c38, {1, {0x2c08 }}},\r
- { 0x2c39, {1, {0x2c09 }}},\r
- { 0x2c3a, {1, {0x2c0a }}},\r
- { 0x2c3b, {1, {0x2c0b }}},\r
- { 0x2c3c, {1, {0x2c0c }}},\r
- { 0x2c3d, {1, {0x2c0d }}},\r
- { 0x2c3e, {1, {0x2c0e }}},\r
- { 0x2c3f, {1, {0x2c0f }}},\r
- { 0x2c40, {1, {0x2c10 }}},\r
- { 0x2c41, {1, {0x2c11 }}},\r
- { 0x2c42, {1, {0x2c12 }}},\r
- { 0x2c43, {1, {0x2c13 }}},\r
- { 0x2c44, {1, {0x2c14 }}},\r
- { 0x2c45, {1, {0x2c15 }}},\r
- { 0x2c46, {1, {0x2c16 }}},\r
- { 0x2c47, {1, {0x2c17 }}},\r
- { 0x2c48, {1, {0x2c18 }}},\r
- { 0x2c49, {1, {0x2c19 }}},\r
- { 0x2c4a, {1, {0x2c1a }}},\r
- { 0x2c4b, {1, {0x2c1b }}},\r
- { 0x2c4c, {1, {0x2c1c }}},\r
- { 0x2c4d, {1, {0x2c1d }}},\r
- { 0x2c4e, {1, {0x2c1e }}},\r
- { 0x2c4f, {1, {0x2c1f }}},\r
- { 0x2c50, {1, {0x2c20 }}},\r
- { 0x2c51, {1, {0x2c21 }}},\r
- { 0x2c52, {1, {0x2c22 }}},\r
- { 0x2c53, {1, {0x2c23 }}},\r
- { 0x2c54, {1, {0x2c24 }}},\r
- { 0x2c55, {1, {0x2c25 }}},\r
- { 0x2c56, {1, {0x2c26 }}},\r
- { 0x2c57, {1, {0x2c27 }}},\r
- { 0x2c58, {1, {0x2c28 }}},\r
- { 0x2c59, {1, {0x2c29 }}},\r
- { 0x2c5a, {1, {0x2c2a }}},\r
- { 0x2c5b, {1, {0x2c2b }}},\r
- { 0x2c5c, {1, {0x2c2c }}},\r
- { 0x2c5d, {1, {0x2c2d }}},\r
- { 0x2c5e, {1, {0x2c2e }}},\r
- { 0x2c81, {1, {0x2c80 }}},\r
- { 0x2c83, {1, {0x2c82 }}},\r
- { 0x2c85, {1, {0x2c84 }}},\r
- { 0x2c87, {1, {0x2c86 }}},\r
- { 0x2c89, {1, {0x2c88 }}},\r
- { 0x2c8b, {1, {0x2c8a }}},\r
- { 0x2c8d, {1, {0x2c8c }}},\r
- { 0x2c8f, {1, {0x2c8e }}},\r
- { 0x2c91, {1, {0x2c90 }}},\r
- { 0x2c93, {1, {0x2c92 }}},\r
- { 0x2c95, {1, {0x2c94 }}},\r
- { 0x2c97, {1, {0x2c96 }}},\r
- { 0x2c99, {1, {0x2c98 }}},\r
- { 0x2c9b, {1, {0x2c9a }}},\r
- { 0x2c9d, {1, {0x2c9c }}},\r
- { 0x2c9f, {1, {0x2c9e }}},\r
- { 0x2ca1, {1, {0x2ca0 }}},\r
- { 0x2ca3, {1, {0x2ca2 }}},\r
- { 0x2ca5, {1, {0x2ca4 }}},\r
- { 0x2ca7, {1, {0x2ca6 }}},\r
- { 0x2ca9, {1, {0x2ca8 }}},\r
- { 0x2cab, {1, {0x2caa }}},\r
- { 0x2cad, {1, {0x2cac }}},\r
- { 0x2caf, {1, {0x2cae }}},\r
- { 0x2cb1, {1, {0x2cb0 }}},\r
- { 0x2cb3, {1, {0x2cb2 }}},\r
- { 0x2cb5, {1, {0x2cb4 }}},\r
- { 0x2cb7, {1, {0x2cb6 }}},\r
- { 0x2cb9, {1, {0x2cb8 }}},\r
- { 0x2cbb, {1, {0x2cba }}},\r
- { 0x2cbd, {1, {0x2cbc }}},\r
- { 0x2cbf, {1, {0x2cbe }}},\r
- { 0x2cc1, {1, {0x2cc0 }}},\r
- { 0x2cc3, {1, {0x2cc2 }}},\r
- { 0x2cc5, {1, {0x2cc4 }}},\r
- { 0x2cc7, {1, {0x2cc6 }}},\r
- { 0x2cc9, {1, {0x2cc8 }}},\r
- { 0x2ccb, {1, {0x2cca }}},\r
- { 0x2ccd, {1, {0x2ccc }}},\r
- { 0x2ccf, {1, {0x2cce }}},\r
- { 0x2cd1, {1, {0x2cd0 }}},\r
- { 0x2cd3, {1, {0x2cd2 }}},\r
- { 0x2cd5, {1, {0x2cd4 }}},\r
- { 0x2cd7, {1, {0x2cd6 }}},\r
- { 0x2cd9, {1, {0x2cd8 }}},\r
- { 0x2cdb, {1, {0x2cda }}},\r
- { 0x2cdd, {1, {0x2cdc }}},\r
- { 0x2cdf, {1, {0x2cde }}},\r
- { 0x2ce1, {1, {0x2ce0 }}},\r
- { 0x2ce3, {1, {0x2ce2 }}},\r
- { 0x2d00, {1, {0x10a0 }}},\r
- { 0x2d01, {1, {0x10a1 }}},\r
- { 0x2d02, {1, {0x10a2 }}},\r
- { 0x2d03, {1, {0x10a3 }}},\r
- { 0x2d04, {1, {0x10a4 }}},\r
- { 0x2d05, {1, {0x10a5 }}},\r
- { 0x2d06, {1, {0x10a6 }}},\r
- { 0x2d07, {1, {0x10a7 }}},\r
- { 0x2d08, {1, {0x10a8 }}},\r
- { 0x2d09, {1, {0x10a9 }}},\r
- { 0x2d0a, {1, {0x10aa }}},\r
- { 0x2d0b, {1, {0x10ab }}},\r
- { 0x2d0c, {1, {0x10ac }}},\r
- { 0x2d0d, {1, {0x10ad }}},\r
- { 0x2d0e, {1, {0x10ae }}},\r
- { 0x2d0f, {1, {0x10af }}},\r
- { 0x2d10, {1, {0x10b0 }}},\r
- { 0x2d11, {1, {0x10b1 }}},\r
- { 0x2d12, {1, {0x10b2 }}},\r
- { 0x2d13, {1, {0x10b3 }}},\r
- { 0x2d14, {1, {0x10b4 }}},\r
- { 0x2d15, {1, {0x10b5 }}},\r
- { 0x2d16, {1, {0x10b6 }}},\r
- { 0x2d17, {1, {0x10b7 }}},\r
- { 0x2d18, {1, {0x10b8 }}},\r
- { 0x2d19, {1, {0x10b9 }}},\r
- { 0x2d1a, {1, {0x10ba }}},\r
- { 0x2d1b, {1, {0x10bb }}},\r
- { 0x2d1c, {1, {0x10bc }}},\r
- { 0x2d1d, {1, {0x10bd }}},\r
- { 0x2d1e, {1, {0x10be }}},\r
- { 0x2d1f, {1, {0x10bf }}},\r
- { 0x2d20, {1, {0x10c0 }}},\r
- { 0x2d21, {1, {0x10c1 }}},\r
- { 0x2d22, {1, {0x10c2 }}},\r
- { 0x2d23, {1, {0x10c3 }}},\r
- { 0x2d24, {1, {0x10c4 }}},\r
- { 0x2d25, {1, {0x10c5 }}},\r
- { 0xff41, {1, {0xff21 }}},\r
- { 0xff42, {1, {0xff22 }}},\r
- { 0xff43, {1, {0xff23 }}},\r
- { 0xff44, {1, {0xff24 }}},\r
- { 0xff45, {1, {0xff25 }}},\r
- { 0xff46, {1, {0xff26 }}},\r
- { 0xff47, {1, {0xff27 }}},\r
- { 0xff48, {1, {0xff28 }}},\r
- { 0xff49, {1, {0xff29 }}},\r
- { 0xff4a, {1, {0xff2a }}},\r
- { 0xff4b, {1, {0xff2b }}},\r
- { 0xff4c, {1, {0xff2c }}},\r
- { 0xff4d, {1, {0xff2d }}},\r
- { 0xff4e, {1, {0xff2e }}},\r
- { 0xff4f, {1, {0xff2f }}},\r
- { 0xff50, {1, {0xff30 }}},\r
- { 0xff51, {1, {0xff31 }}},\r
- { 0xff52, {1, {0xff32 }}},\r
- { 0xff53, {1, {0xff33 }}},\r
- { 0xff54, {1, {0xff34 }}},\r
- { 0xff55, {1, {0xff35 }}},\r
- { 0xff56, {1, {0xff36 }}},\r
- { 0xff57, {1, {0xff37 }}},\r
- { 0xff58, {1, {0xff38 }}},\r
- { 0xff59, {1, {0xff39 }}},\r
- { 0xff5a, {1, {0xff3a }}},\r
- { 0x10428, {1, {0x10400 }}},\r
- { 0x10429, {1, {0x10401 }}},\r
- { 0x1042a, {1, {0x10402 }}},\r
- { 0x1042b, {1, {0x10403 }}},\r
- { 0x1042c, {1, {0x10404 }}},\r
- { 0x1042d, {1, {0x10405 }}},\r
- { 0x1042e, {1, {0x10406 }}},\r
- { 0x1042f, {1, {0x10407 }}},\r
- { 0x10430, {1, {0x10408 }}},\r
- { 0x10431, {1, {0x10409 }}},\r
- { 0x10432, {1, {0x1040a }}},\r
- { 0x10433, {1, {0x1040b }}},\r
- { 0x10434, {1, {0x1040c }}},\r
- { 0x10435, {1, {0x1040d }}},\r
- { 0x10436, {1, {0x1040e }}},\r
- { 0x10437, {1, {0x1040f }}},\r
- { 0x10438, {1, {0x10410 }}},\r
- { 0x10439, {1, {0x10411 }}},\r
- { 0x1043a, {1, {0x10412 }}},\r
- { 0x1043b, {1, {0x10413 }}},\r
- { 0x1043c, {1, {0x10414 }}},\r
- { 0x1043d, {1, {0x10415 }}},\r
- { 0x1043e, {1, {0x10416 }}},\r
- { 0x1043f, {1, {0x10417 }}},\r
- { 0x10440, {1, {0x10418 }}},\r
- { 0x10441, {1, {0x10419 }}},\r
- { 0x10442, {1, {0x1041a }}},\r
- { 0x10443, {1, {0x1041b }}},\r
- { 0x10444, {1, {0x1041c }}},\r
- { 0x10445, {1, {0x1041d }}},\r
- { 0x10446, {1, {0x1041e }}},\r
- { 0x10447, {1, {0x1041f }}},\r
- { 0x10448, {1, {0x10420 }}},\r
- { 0x10449, {1, {0x10421 }}},\r
- { 0x1044a, {1, {0x10422 }}},\r
- { 0x1044b, {1, {0x10423 }}},\r
- { 0x1044c, {1, {0x10424 }}},\r
- { 0x1044d, {1, {0x10425 }}},\r
- { 0x1044e, {1, {0x10426 }}},\r
- { 0x1044f, {1, {0x10427 }}}\r
-};\r
-\r
-static const CaseUnfold_11_Type CaseUnfold_11_Locale[] = {\r
- { 0x0069, {1, {0x0049 }}}\r
-};\r
-\r
-static const CaseUnfold_12_Type CaseUnfold_12[] = {\r
- { {0x0061, 0x02be}, {1, {0x1e9a }}},\r
- { {0x0066, 0x0066}, {1, {0xfb00 }}},\r
- { {0x0066, 0x0069}, {1, {0xfb01 }}},\r
- { {0x0066, 0x006c}, {1, {0xfb02 }}},\r
- { {0x0068, 0x0331}, {1, {0x1e96 }}},\r
- { {0x006a, 0x030c}, {1, {0x01f0 }}},\r
- { {0x0073, 0x0073}, {1, {0x00df }}},\r
- { {0x0073, 0x0074}, {2, {0xfb05, 0xfb06 }}},\r
- { {0x0074, 0x0308}, {1, {0x1e97 }}},\r
- { {0x0077, 0x030a}, {1, {0x1e98 }}},\r
- { {0x0079, 0x030a}, {1, {0x1e99 }}},\r
- { {0x02bc, 0x006e}, {1, {0x0149 }}},\r
- { {0x03ac, 0x03b9}, {1, {0x1fb4 }}},\r
- { {0x03ae, 0x03b9}, {1, {0x1fc4 }}},\r
- { {0x03b1, 0x0342}, {1, {0x1fb6 }}},\r
- { {0x03b1, 0x03b9}, {2, {0x1fb3, 0x1fbc }}},\r
- { {0x03b7, 0x0342}, {1, {0x1fc6 }}},\r
- { {0x03b7, 0x03b9}, {2, {0x1fc3, 0x1fcc }}},\r
- { {0x03b9, 0x0342}, {1, {0x1fd6 }}},\r
- { {0x03c1, 0x0313}, {1, {0x1fe4 }}},\r
- { {0x03c5, 0x0313}, {1, {0x1f50 }}},\r
- { {0x03c5, 0x0342}, {1, {0x1fe6 }}},\r
- { {0x03c9, 0x0342}, {1, {0x1ff6 }}},\r
- { {0x03c9, 0x03b9}, {2, {0x1ff3, 0x1ffc }}},\r
- { {0x03ce, 0x03b9}, {1, {0x1ff4 }}},\r
- { {0x0565, 0x0582}, {1, {0x0587 }}},\r
- { {0x0574, 0x0565}, {1, {0xfb14 }}},\r
- { {0x0574, 0x056b}, {1, {0xfb15 }}},\r
- { {0x0574, 0x056d}, {1, {0xfb17 }}},\r
- { {0x0574, 0x0576}, {1, {0xfb13 }}},\r
- { {0x057e, 0x0576}, {1, {0xfb16 }}},\r
- { {0x1f00, 0x03b9}, {2, {0x1f88, 0x1f80 }}},\r
- { {0x1f01, 0x03b9}, {2, {0x1f81, 0x1f89 }}},\r
- { {0x1f02, 0x03b9}, {2, {0x1f82, 0x1f8a }}},\r
- { {0x1f03, 0x03b9}, {2, {0x1f83, 0x1f8b }}},\r
- { {0x1f04, 0x03b9}, {2, {0x1f84, 0x1f8c }}},\r
- { {0x1f05, 0x03b9}, {2, {0x1f85, 0x1f8d }}},\r
- { {0x1f06, 0x03b9}, {2, {0x1f86, 0x1f8e }}},\r
- { {0x1f07, 0x03b9}, {2, {0x1f87, 0x1f8f }}},\r
- { {0x1f20, 0x03b9}, {2, {0x1f90, 0x1f98 }}},\r
- { {0x1f21, 0x03b9}, {2, {0x1f91, 0x1f99 }}},\r
- { {0x1f22, 0x03b9}, {2, {0x1f92, 0x1f9a }}},\r
- { {0x1f23, 0x03b9}, {2, {0x1f93, 0x1f9b }}},\r
- { {0x1f24, 0x03b9}, {2, {0x1f94, 0x1f9c }}},\r
- { {0x1f25, 0x03b9}, {2, {0x1f95, 0x1f9d }}},\r
- { {0x1f26, 0x03b9}, {2, {0x1f96, 0x1f9e }}},\r
- { {0x1f27, 0x03b9}, {2, {0x1f97, 0x1f9f }}},\r
- { {0x1f60, 0x03b9}, {2, {0x1fa0, 0x1fa8 }}},\r
- { {0x1f61, 0x03b9}, {2, {0x1fa1, 0x1fa9 }}},\r
- { {0x1f62, 0x03b9}, {2, {0x1fa2, 0x1faa }}},\r
- { {0x1f63, 0x03b9}, {2, {0x1fa3, 0x1fab }}},\r
- { {0x1f64, 0x03b9}, {2, {0x1fa4, 0x1fac }}},\r
- { {0x1f65, 0x03b9}, {2, {0x1fa5, 0x1fad }}},\r
- { {0x1f66, 0x03b9}, {2, {0x1fa6, 0x1fae }}},\r
- { {0x1f67, 0x03b9}, {2, {0x1fa7, 0x1faf }}},\r
- { {0x1f70, 0x03b9}, {1, {0x1fb2 }}},\r
- { {0x1f74, 0x03b9}, {1, {0x1fc2 }}},\r
- { {0x1f7c, 0x03b9}, {1, {0x1ff2 }}}\r
-};\r
-\r
-static const CaseUnfold_12_Type CaseUnfold_12_Locale[] = {\r
- { {0x0069, 0x0307}, {1, {0x0130 }}}\r
-};\r
-\r
-static const CaseUnfold_13_Type CaseUnfold_13[] = {\r
- { {0x0066, 0x0066, 0x0069}, {1, {0xfb03 }}},\r
- { {0x0066, 0x0066, 0x006c}, {1, {0xfb04 }}},\r
- { {0x03b1, 0x0342, 0x03b9}, {1, {0x1fb7 }}},\r
- { {0x03b7, 0x0342, 0x03b9}, {1, {0x1fc7 }}},\r
- { {0x03b9, 0x0308, 0x0300}, {1, {0x1fd2 }}},\r
- { {0x03b9, 0x0308, 0x0301}, {2, {0x0390, 0x1fd3 }}},\r
- { {0x03b9, 0x0308, 0x0342}, {1, {0x1fd7 }}},\r
- { {0x03c5, 0x0308, 0x0300}, {1, {0x1fe2 }}},\r
- { {0x03c5, 0x0308, 0x0301}, {2, {0x03b0, 0x1fe3 }}},\r
- { {0x03c5, 0x0308, 0x0342}, {1, {0x1fe7 }}},\r
- { {0x03c5, 0x0313, 0x0300}, {1, {0x1f52 }}},\r
- { {0x03c5, 0x0313, 0x0301}, {1, {0x1f54 }}},\r
- { {0x03c5, 0x0313, 0x0342}, {1, {0x1f56 }}},\r
- { {0x03c9, 0x0342, 0x03b9}, {1, {0x1ff7 }}}\r
-};\r
-\r
-\r
-static PosixBracketEntryType HashEntryData[] = {\r
- { (UChar* )"NEWLINE", 0, 7 },\r
- { (UChar* )"Alpha", 1, 5 },\r
- { (UChar* )"Blank", 2, 5 },\r
- { (UChar* )"Cntrl", 3, 5 },\r
- { (UChar* )"Digit", 4, 5 },\r
- { (UChar* )"Graph", 5, 5 },\r
- { (UChar* )"Lower", 6, 5 },\r
- { (UChar* )"Print", 7, 5 },\r
- { (UChar* )"Punct", 8, 5 },\r
- { (UChar* )"Space", 9, 5 },\r
- { (UChar* )"Upper", 10, 5 },\r
- { (UChar* )"XDigit", 11, 6 },\r
- { (UChar* )"Word", 12, 4 },\r
- { (UChar* )"Alnum", 13, 5 },\r
- { (UChar* )"ASCII", 14, 5 },\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
- { (UChar* )"Any", 15, 3 },\r
- { (UChar* )"Assigned", 16, 8 },\r
- { (UChar* )"C", 17, 1 },\r
- { (UChar* )"Cc", 18, 2 },\r
- { (UChar* )"Cf", 19, 2 },\r
- { (UChar* )"Cn", 20, 2 },\r
- { (UChar* )"Co", 21, 2 },\r
- { (UChar* )"Cs", 22, 2 },\r
- { (UChar* )"L", 23, 1 },\r
- { (UChar* )"Ll", 24, 2 },\r
- { (UChar* )"Lm", 25, 2 },\r
- { (UChar* )"Lo", 26, 2 },\r
- { (UChar* )"Lt", 27, 2 },\r
- { (UChar* )"Lu", 28, 2 },\r
- { (UChar* )"M", 29, 1 },\r
- { (UChar* )"Mc", 30, 2 },\r
- { (UChar* )"Me", 31, 2 },\r
- { (UChar* )"Mn", 32, 2 },\r
- { (UChar* )"N", 33, 1 },\r
- { (UChar* )"Nd", 34, 2 },\r
- { (UChar* )"Nl", 35, 2 },\r
- { (UChar* )"No", 36, 2 },\r
- { (UChar* )"P", 37, 1 },\r
- { (UChar* )"Pc", 38, 2 },\r
- { (UChar* )"Pd", 39, 2 },\r
- { (UChar* )"Pe", 40, 2 },\r
- { (UChar* )"Pf", 41, 2 },\r
- { (UChar* )"Pi", 42, 2 },\r
- { (UChar* )"Po", 43, 2 },\r
- { (UChar* )"Ps", 44, 2 },\r
- { (UChar* )"S", 45, 1 },\r
- { (UChar* )"Sc", 46, 2 },\r
- { (UChar* )"Sk", 47, 2 },\r
- { (UChar* )"Sm", 48, 2 },\r
- { (UChar* )"So", 49, 2 },\r
- { (UChar* )"Z", 50, 1 },\r
- { (UChar* )"Zl", 51, 2 },\r
- { (UChar* )"Zp", 52, 2 },\r
- { (UChar* )"Zs", 53, 2 },\r
- { (UChar* )"Arabic", 54, 6 },\r
- { (UChar* )"Armenian", 55, 8 },\r
- { (UChar* )"Bengali", 56, 7 },\r
- { (UChar* )"Bopomofo", 57, 8 },\r
- { (UChar* )"Braille", 58, 7 },\r
- { (UChar* )"Buginese", 59, 8 },\r
- { (UChar* )"Buhid", 60, 5 },\r
- { (UChar* )"Canadian_Aboriginal", 61, 19 },\r
- { (UChar* )"Cherokee", 62, 8 },\r
- { (UChar* )"Common", 63, 6 },\r
- { (UChar* )"Coptic", 64, 6 },\r
- { (UChar* )"Cypriot", 65, 7 },\r
- { (UChar* )"Cyrillic", 66, 8 },\r
- { (UChar* )"Deseret", 67, 7 },\r
- { (UChar* )"Devanagari", 68, 10 },\r
- { (UChar* )"Ethiopic", 69, 8 },\r
- { (UChar* )"Georgian", 70, 8 },\r
- { (UChar* )"Glagolitic", 71, 10 },\r
- { (UChar* )"Gothic", 72, 6 },\r
- { (UChar* )"Greek", 73, 5 },\r
- { (UChar* )"Gujarati", 74, 8 },\r
- { (UChar* )"Gurmukhi", 75, 8 },\r
- { (UChar* )"Han", 76, 3 },\r
- { (UChar* )"Hangul", 77, 6 },\r
- { (UChar* )"Hanunoo", 78, 7 },\r
- { (UChar* )"Hebrew", 79, 6 },\r
- { (UChar* )"Hiragana", 80, 8 },\r
- { (UChar* )"Inherited", 81, 9 },\r
- { (UChar* )"Kannada", 82, 7 },\r
- { (UChar* )"Katakana", 83, 8 },\r
- { (UChar* )"Kharoshthi", 84, 10 },\r
- { (UChar* )"Khmer", 85, 5 },\r
- { (UChar* )"Lao", 86, 3 },\r
- { (UChar* )"Latin", 87, 5 },\r
- { (UChar* )"Limbu", 88, 5 },\r
- { (UChar* )"Linear_B", 89, 8 },\r
- { (UChar* )"Malayalam", 90, 9 },\r
- { (UChar* )"Mongolian", 91, 9 },\r
- { (UChar* )"Myanmar", 92, 7 },\r
- { (UChar* )"New_Tai_Lue", 93, 11 },\r
- { (UChar* )"Ogham", 94, 5 },\r
- { (UChar* )"Old_Italic", 95, 10 },\r
- { (UChar* )"Old_Persian", 96, 11 },\r
- { (UChar* )"Oriya", 97, 5 },\r
- { (UChar* )"Osmanya", 98, 7 },\r
- { (UChar* )"Runic", 99, 5 },\r
- { (UChar* )"Shavian", 100, 7 },\r
- { (UChar* )"Sinhala", 101, 7 },\r
- { (UChar* )"Syloti_Nagri", 102, 12 },\r
- { (UChar* )"Syriac", 103, 6 },\r
- { (UChar* )"Tagalog", 104, 7 },\r
- { (UChar* )"Tagbanwa", 105, 8 },\r
- { (UChar* )"Tai_Le", 106, 6 },\r
- { (UChar* )"Tamil", 107, 5 },\r
- { (UChar* )"Telugu", 108, 6 },\r
- { (UChar* )"Thaana", 109, 6 },\r
- { (UChar* )"Thai", 110, 4 },\r
- { (UChar* )"Tibetan", 111, 7 },\r
- { (UChar* )"Tifinagh", 112, 8 },\r
- { (UChar* )"Ugaritic", 113, 8 },\r
- { (UChar* )"Yi", 114, 2 },\r
-#endif /* USE_UNICODE_PROPERTIES */\r
- { (UChar* )NULL, -1, 0 }\r
-};\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
-#define CODE_RANGES_NUM 115\r
-#else\r
-#define CODE_RANGES_NUM 15\r
-#endif\r
-\r
-static const OnigCodePoint* CodeRanges[CODE_RANGES_NUM];\r
-static int CodeRangeTableInited = 0;\r
-\r
-static void init_code_range_array(void) {\r
- THREAD_ATOMIC_START;\r
-\r
- CodeRanges[0] = CR_NEWLINE;\r
- CodeRanges[1] = CR_Alpha;\r
- CodeRanges[2] = CR_Blank;\r
- CodeRanges[3] = CR_Cntrl;\r
- CodeRanges[4] = CR_Digit;\r
- CodeRanges[5] = CR_Graph;\r
- CodeRanges[6] = CR_Lower;\r
- CodeRanges[7] = CR_Print;\r
- CodeRanges[8] = CR_Punct;\r
- CodeRanges[9] = CR_Space;\r
- CodeRanges[10] = CR_Upper;\r
- CodeRanges[11] = CR_XDigit;\r
- CodeRanges[12] = CR_Word;\r
- CodeRanges[13] = CR_Alnum;\r
- CodeRanges[14] = CR_ASCII;\r
-\r
-#ifdef USE_UNICODE_PROPERTIES\r
- CodeRanges[15] = CR_Any;\r
- CodeRanges[16] = CR_Assigned;\r
- CodeRanges[17] = CR_C;\r
- CodeRanges[18] = CR_Cc;\r
- CodeRanges[19] = CR_Cf;\r
- CodeRanges[20] = CR_Cn;\r
- CodeRanges[21] = CR_Co;\r
- CodeRanges[22] = CR_Cs;\r
- CodeRanges[23] = CR_L;\r
- CodeRanges[24] = CR_Ll;\r
- CodeRanges[25] = CR_Lm;\r
- CodeRanges[26] = CR_Lo;\r
- CodeRanges[27] = CR_Lt;\r
- CodeRanges[28] = CR_Lu;\r
- CodeRanges[29] = CR_M;\r
- CodeRanges[30] = CR_Mc;\r
- CodeRanges[31] = CR_Me;\r
- CodeRanges[32] = CR_Mn;\r
- CodeRanges[33] = CR_N;\r
- CodeRanges[34] = CR_Nd;\r
- CodeRanges[35] = CR_Nl;\r
- CodeRanges[36] = CR_No;\r
- CodeRanges[37] = CR_P;\r
- CodeRanges[38] = CR_Pc;\r
- CodeRanges[39] = CR_Pd;\r
- CodeRanges[40] = CR_Pe;\r
- CodeRanges[41] = CR_Pf;\r
- CodeRanges[42] = CR_Pi;\r
- CodeRanges[43] = CR_Po;\r
- CodeRanges[44] = CR_Ps;\r
- CodeRanges[45] = CR_S;\r
- CodeRanges[46] = CR_Sc;\r
- CodeRanges[47] = CR_Sk;\r
- CodeRanges[48] = CR_Sm;\r
- CodeRanges[49] = CR_So;\r
- CodeRanges[50] = CR_Z;\r
- CodeRanges[51] = CR_Zl;\r
- CodeRanges[52] = CR_Zp;\r
- CodeRanges[53] = CR_Zs;\r
- CodeRanges[54] = CR_Arabic;\r
- CodeRanges[55] = CR_Armenian;\r
- CodeRanges[56] = CR_Bengali;\r
- CodeRanges[57] = CR_Bopomofo;\r
- CodeRanges[58] = CR_Braille;\r
- CodeRanges[59] = CR_Buginese;\r
- CodeRanges[60] = CR_Buhid;\r
- CodeRanges[61] = CR_Canadian_Aboriginal;\r
- CodeRanges[62] = CR_Cherokee;\r
- CodeRanges[63] = CR_Common;\r
- CodeRanges[64] = CR_Coptic;\r
- CodeRanges[65] = CR_Cypriot;\r
- CodeRanges[66] = CR_Cyrillic;\r
- CodeRanges[67] = CR_Deseret;\r
- CodeRanges[68] = CR_Devanagari;\r
- CodeRanges[69] = CR_Ethiopic;\r
- CodeRanges[70] = CR_Georgian;\r
- CodeRanges[71] = CR_Glagolitic;\r
- CodeRanges[72] = CR_Gothic;\r
- CodeRanges[73] = CR_Greek;\r
- CodeRanges[74] = CR_Gujarati;\r
- CodeRanges[75] = CR_Gurmukhi;\r
- CodeRanges[76] = CR_Han;\r
- CodeRanges[77] = CR_Hangul;\r
- CodeRanges[78] = CR_Hanunoo;\r
- CodeRanges[79] = CR_Hebrew;\r
- CodeRanges[80] = CR_Hiragana;\r
- CodeRanges[81] = CR_Inherited;\r
- CodeRanges[82] = CR_Kannada;\r
- CodeRanges[83] = CR_Katakana;\r
- CodeRanges[84] = CR_Kharoshthi;\r
- CodeRanges[85] = CR_Khmer;\r
- CodeRanges[86] = CR_Lao;\r
- CodeRanges[87] = CR_Latin;\r
- CodeRanges[88] = CR_Limbu;\r
- CodeRanges[89] = CR_Linear_B;\r
- CodeRanges[90] = CR_Malayalam;\r
- CodeRanges[91] = CR_Mongolian;\r
- CodeRanges[92] = CR_Myanmar;\r
- CodeRanges[93] = CR_New_Tai_Lue;\r
- CodeRanges[94] = CR_Ogham;\r
- CodeRanges[95] = CR_Old_Italic;\r
- CodeRanges[96] = CR_Old_Persian;\r
- CodeRanges[97] = CR_Oriya;\r
- CodeRanges[98] = CR_Osmanya;\r
- CodeRanges[99] = CR_Runic;\r
- CodeRanges[100] = CR_Shavian;\r
- CodeRanges[101] = CR_Sinhala;\r
- CodeRanges[102] = CR_Syloti_Nagri;\r
- CodeRanges[103] = CR_Syriac;\r
- CodeRanges[104] = CR_Tagalog;\r
- CodeRanges[105] = CR_Tagbanwa;\r
- CodeRanges[106] = CR_Tai_Le;\r
- CodeRanges[107] = CR_Tamil;\r
- CodeRanges[108] = CR_Telugu;\r
- CodeRanges[109] = CR_Thaana;\r
- CodeRanges[110] = CR_Thai;\r
- CodeRanges[111] = CR_Tibetan;\r
- CodeRanges[112] = CR_Tifinagh;\r
- CodeRanges[113] = CR_Ugaritic;\r
- CodeRanges[114] = CR_Yi;\r
-#endif /* USE_UNICODE_PROPERTIES */\r
-\r
- CodeRangeTableInited = 1;\r
- THREAD_ATOMIC_END;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype)\r
-{\r
- if (\r
-#ifdef USE_UNICODE_PROPERTIES\r
- ctype <= ONIGENC_MAX_STD_CTYPE &&\r
-#endif\r
- code < 256) {\r
- return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);\r
- }\r
-\r
- if (ctype >= CODE_RANGES_NUM) {\r
- return ONIGERR_TYPE_BUG;\r
- }\r
-\r
- if (CodeRangeTableInited == 0) init_code_range_array();\r
-\r
- return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);\r
-}\r
-\r
-\r
-extern int\r
-onigenc_unicode_ctype_code_range(int ctype, const OnigCodePoint* ranges[])\r
-{\r
- if (ctype >= CODE_RANGES_NUM) {\r
- return ONIGERR_TYPE_BUG;\r
- }\r
-\r
- if (CodeRangeTableInited == 0) init_code_range_array();\r
-\r
- *ranges = CodeRanges[ctype];\r
-\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,\r
- const OnigCodePoint* ranges[])\r
-{\r
- *sb_out = 0x00;\r
- return onigenc_unicode_ctype_code_range(ctype, ranges);\r
-}\r
-\r
-#include "st.h"\r
-\r
-#define PROPERTY_NAME_MAX_SIZE 20\r
-\r
-static st_table* NameCtypeTable;\r
-static int NameTableInited = 0;\r
-\r
-static int init_name_ctype_table(void)\r
-{\r
- PosixBracketEntryType *pb;\r
-\r
- THREAD_ATOMIC_START;\r
-\r
- NameCtypeTable = onig_st_init_strend_table_with_size(100);\r
- if (ONIG_IS_NULL(NameCtypeTable)) return ONIGERR_MEMORY;\r
-\r
- for (pb = HashEntryData; ONIG_IS_NOT_NULL(pb->name); pb++) {\r
- onig_st_insert_strend(NameCtypeTable, pb->name, pb->name + pb->len,\r
- (st_data_t )pb->ctype);\r
- }\r
-\r
- NameTableInited = 1;\r
- THREAD_ATOMIC_END;\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)\r
-{\r
- int len;\r
- hash_data_type ctype;\r
- UChar buf[PROPERTY_NAME_MAX_SIZE];\r
- UChar *p;\r
- OnigCodePoint code;\r
-\r
- p = name;\r
- len = 0;\r
- while (p < end) {\r
- code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
- if (code >= 0x80)\r
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
-\r
- buf[len++] = (UChar )code;\r
- if (len >= PROPERTY_NAME_MAX_SIZE)\r
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
-\r
- p += enclen(enc, p);\r
- }\r
-\r
- buf[len] = 0;\r
-\r
- if (NameTableInited == 0) init_name_ctype_table();\r
-\r
- if (onig_st_lookup_strend(NameCtypeTable, buf, buf + len, &ctype) == 0) {\r
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
- }\r
-\r
- return (int )ctype;\r
-}\r
-\r
-\r
-static int\r
-code2_cmp(OnigCodePoint* x, OnigCodePoint* y)\r
-{\r
- if (x[0] == y[0] && x[1] == y[1]) return 0;\r
- return 1;\r
-}\r
-\r
-static int\r
-code2_hash(OnigCodePoint* x)\r
-{\r
- return (int )(x[0] + x[1]);\r
-}\r
-\r
-static struct st_hash_type type_code2_hash = {\r
- code2_cmp,\r
- code2_hash,\r
-};\r
-\r
-static int\r
-code3_cmp(OnigCodePoint* x, OnigCodePoint* y)\r
-{\r
- if (x[0] == y[0] && x[1] == y[1] && x[2] == y[2]) return 0;\r
- return 1;\r
-}\r
-\r
-static int\r
-code3_hash(OnigCodePoint* x)\r
-{\r
- return (int )(x[0] + x[1] + x[2]);\r
-}\r
-\r
-static struct st_hash_type type_code3_hash = {\r
- code3_cmp,\r
- code3_hash,\r
-};\r
-\r
-\r
-static st_table* FoldTable; /* fold-1, fold-2, fold-3 */\r
-static st_table* Unfold1Table;\r
-static st_table* Unfold2Table;\r
-static st_table* Unfold3Table;\r
-static int CaseFoldInited = 0;\r
-\r
-\r
-extern void onigenc_end_unicode(void)\r
-{\r
- THREAD_ATOMIC_START;\r
-\r
- if (FoldTable != 0) st_free_table(FoldTable);\r
- if (Unfold1Table != 0) st_free_table(Unfold1Table);\r
- if (Unfold2Table != 0) st_free_table(Unfold2Table);\r
- if (Unfold3Table != 0) st_free_table(Unfold3Table);\r
-\r
- CaseFoldInited = 0;\r
-\r
- THREAD_ATOMIC_END;\r
-}\r
-\r
-static int init_case_fold_table(void)\r
-{\r
- const CaseFold_11_Type *p;\r
- const CaseUnfold_11_Type *p1;\r
- const CaseUnfold_12_Type *p2;\r
- const CaseUnfold_13_Type *p3;\r
- int i;\r
-\r
- THREAD_ATOMIC_START;\r
-\r
- FoldTable = st_init_numtable_with_size(1200);\r
- if (ONIG_IS_NULL(FoldTable)) return ONIGERR_MEMORY;\r
- for (i = 0; i < (int )(sizeof(CaseFold)/sizeof(CaseFold_11_Type)); i++) {\r
- p = &CaseFold[i];\r
- st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));\r
- }\r
- for (i = 0; i < (int )(sizeof(CaseFold_Locale)/sizeof(CaseFold_11_Type));\r
- i++) {\r
- p = &CaseFold_Locale[i];\r
- st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));\r
- }\r
-\r
- Unfold1Table = st_init_numtable_with_size(1000);\r
- if (ONIG_IS_NULL(Unfold1Table)) return ONIGERR_MEMORY;\r
-\r
- for (i = 0; i < (int )(sizeof(CaseUnfold_11)/sizeof(CaseUnfold_11_Type));\r
- i++) {\r
- p1 = &CaseUnfold_11[i];\r
- st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));\r
- }\r
- for (i = 0;\r
- i < (int )(sizeof(CaseUnfold_11_Locale)/sizeof(CaseUnfold_11_Type));\r
- i++) {\r
- p1 = &CaseUnfold_11_Locale[i];\r
- st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));\r
- }\r
-\r
- Unfold2Table = st_init_table_with_size(&type_code2_hash, 200);\r
- if (ONIG_IS_NULL(Unfold2Table)) return ONIGERR_MEMORY;\r
-\r
- for (i = 0; i < (int )(sizeof(CaseUnfold_12)/sizeof(CaseUnfold_12_Type));\r
- i++) {\r
- p2 = &CaseUnfold_12[i];\r
- st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));\r
- }\r
- for (i = 0;\r
- i < (int )(sizeof(CaseUnfold_12_Locale)/sizeof(CaseUnfold_12_Type));\r
- i++) {\r
- p2 = &CaseUnfold_12_Locale[i];\r
- st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));\r
- }\r
-\r
- Unfold3Table = st_init_table_with_size(&type_code3_hash, 30);\r
- if (ONIG_IS_NULL(Unfold3Table)) return ONIGERR_MEMORY;\r
-\r
- for (i = 0; i < (int )(sizeof(CaseUnfold_13)/sizeof(CaseUnfold_13_Type));\r
- i++) {\r
- p3 = &CaseUnfold_13[i];\r
- st_add_direct(Unfold3Table, (st_data_t )p3->from, (st_data_t )(&p3->to));\r
- }\r
-\r
-\r
- onig_add_end_call(onigenc_end_unicode);\r
-\r
- CaseFoldInited = 1;\r
- THREAD_ATOMIC_END;\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_mbc_case_fold(OnigEncoding enc,\r
- OnigCaseFoldType flag ARG_UNUSED, const UChar** pp, const UChar* end,\r
- UChar* fold)\r
-{\r
- CodePointList3 *to;\r
- OnigCodePoint code;\r
- int i, len, rlen;\r
- const UChar *p = *pp;\r
-\r
- if (CaseFoldInited == 0) init_case_fold_table();\r
-\r
- code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
- len = enclen(enc, p);\r
- *pp += len;\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
- if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
- if (code == 0x0049) {\r
- return ONIGENC_CODE_TO_MBC(enc, 0x0131, fold);\r
- }\r
- else if (code == 0x0130) {\r
- return ONIGENC_CODE_TO_MBC(enc, 0x0069, fold);\r
- }\r
- }\r
-#endif\r
-\r
- if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {\r
- if (to->n == 1) {\r
- return ONIGENC_CODE_TO_MBC(enc, to->code[0], fold); \r
- }\r
-#if 0\r
- /* NO NEEDS TO CHECK */\r
- else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
-#else\r
- else {\r
-#endif\r
- rlen = 0;\r
- for (i = 0; i < to->n; i++) {\r
- len = ONIGENC_CODE_TO_MBC(enc, to->code[i], fold);\r
- fold += len;\r
- rlen += len;\r
- }\r
- return rlen;\r
- }\r
- }\r
-\r
- for (i = 0; i < len; i++) {\r
- *fold++ = *p++;\r
- }\r
- return len;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,\r
- OnigApplyAllCaseFoldFunc f, void* arg)\r
-{\r
- const CaseUnfold_11_Type* p11;\r
- OnigCodePoint code;\r
- int i, j, k, r;\r
-\r
- /* if (CaseFoldInited == 0) init_case_fold_table(); */\r
-\r
- for (i = 0; i < (int )(sizeof(CaseUnfold_11)/sizeof(CaseUnfold_11_Type));\r
- i++) {\r
- p11 = &CaseUnfold_11[i];\r
- for (j = 0; j < p11->to.n; j++) {\r
- code = p11->from;\r
- r = (*f)(p11->to.code[j], &code, 1, arg);\r
- if (r != 0) return r;\r
-\r
- code = p11->to.code[j];\r
- r = (*f)(p11->from, &code, 1, arg);\r
- if (r != 0) return r;\r
-\r
- for (k = 0; k < j; k++) {\r
- r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]), 1, arg);\r
- if (r != 0) return r;\r
-\r
- r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]), 1, arg);\r
- if (r != 0) return r;\r
- }\r
- }\r
- }\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
- if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
- code = 0x0131;\r
- r = (*f)(0x0049, &code, 1, arg);\r
- if (r != 0) return r;\r
- code = 0x0049;\r
- r = (*f)(0x0131, &code, 1, arg);\r
- if (r != 0) return r;\r
-\r
- code = 0x0130;\r
- r = (*f)(0x0069, &code, 1, arg);\r
- if (r != 0) return r;\r
- code = 0x0069;\r
- r = (*f)(0x0130, &code, 1, arg);\r
- if (r != 0) return r;\r
- }\r
- else {\r
-#endif\r
- for (i = 0;\r
- i < (int )(sizeof(CaseUnfold_11_Locale)/sizeof(CaseUnfold_11_Type));\r
- i++) {\r
- p11 = &CaseUnfold_11_Locale[i];\r
- for (j = 0; j < p11->to.n; j++) {\r
- code = p11->from;\r
- r = (*f)(p11->to.code[j], &code, 1, arg);\r
- if (r != 0) return r;\r
-\r
- code = p11->to.code[j];\r
- r = (*f)(p11->from, &code, 1, arg);\r
- if (r != 0) return r;\r
-\r
- for (k = 0; k < j; k++) {\r
- r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]),\r
- 1, arg);\r
- if (r != 0) return r;\r
-\r
- r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]),\r
- 1, arg);\r
- if (r != 0) return r;\r
- }\r
- }\r
- }\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
- }\r
-#endif\r
-\r
- if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
- for (i = 0; i < (int )(sizeof(CaseUnfold_12)/sizeof(CaseUnfold_12_Type));\r
- i++) {\r
- for (j = 0; j < CaseUnfold_12[i].to.n; j++) {\r
- r = (*f)(CaseUnfold_12[i].to.code[j],\r
- (OnigCodePoint* )CaseUnfold_12[i].from, 2, arg);\r
- if (r != 0) return r; \r
-\r
- for (k = 0; k < CaseUnfold_12[i].to.n; k++) {\r
- if (k == j) continue;\r
-\r
- r = (*f)(CaseUnfold_12[i].to.code[j],\r
- (OnigCodePoint* )(&CaseUnfold_12[i].to.code[k]), 1, arg);\r
- if (r != 0) return r;\r
- }\r
- }\r
- }\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
- if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) == 0) {\r
-#endif\r
- for (i = 0;\r
- i < (int )(sizeof(CaseUnfold_12_Locale)/sizeof(CaseUnfold_12_Type));\r
- i++) {\r
- for (j = 0; j < CaseUnfold_12_Locale[i].to.n; j++) {\r
- r = (*f)(CaseUnfold_12_Locale[i].to.code[j],\r
- (OnigCodePoint* )CaseUnfold_12_Locale[i].from, 2, arg);\r
- if (r != 0) return r; \r
-\r
- for (k = 0; k < CaseUnfold_12_Locale[i].to.n; k++) {\r
- if (k == j) continue;\r
-\r
- r = (*f)(CaseUnfold_12_Locale[i].to.code[j],\r
- (OnigCodePoint* )(&CaseUnfold_12_Locale[i].to.code[k]),\r
- 1, arg);\r
- if (r != 0) return r;\r
- }\r
- }\r
- }\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
- }\r
-#endif\r
-\r
- for (i = 0; i < (int )(sizeof(CaseUnfold_13)/sizeof(CaseUnfold_13_Type));\r
- i++) {\r
- for (j = 0; j < CaseUnfold_13[i].to.n; j++) {\r
- r = (*f)(CaseUnfold_13[i].to.code[j],\r
- (OnigCodePoint* )CaseUnfold_13[i].from, 3, arg);\r
- if (r != 0) return r; \r
-\r
- for (k = 0; k < CaseUnfold_13[i].to.n; k++) {\r
- if (k == j) continue;\r
-\r
- r = (*f)(CaseUnfold_13[i].to.code[j],\r
- (OnigCodePoint* )(&CaseUnfold_13[i].to.code[k]), 1, arg);\r
- if (r != 0) return r;\r
- }\r
- }\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,\r
- OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end,\r
- OnigCaseFoldCodeItem items[])\r
-{\r
- int n, i, j, k, len;\r
- OnigCodePoint code, codes[3];\r
- CodePointList3 *to, *z3;\r
- CodePointList2 *z2;\r
-\r
- if (CaseFoldInited == 0) init_case_fold_table();\r
-\r
- n = 0;\r
-\r
- code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
- len = enclen(enc, p);\r
-\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
- if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
- if (code == 0x0049) {\r
- items[0].byte_len = len;\r
- items[0].code_len = 1;\r
- items[0].code[0] = 0x0131;\r
- return 1;\r
- }\r
- else if (code == 0x0130) {\r
- items[0].byte_len = len;\r
- items[0].code_len = 1;\r
- items[0].code[0] = 0x0069;\r
- return 1;\r
- }\r
- else if (code == 0x0131) {\r
- items[0].byte_len = len;\r
- items[0].code_len = 1;\r
- items[0].code[0] = 0x0049;\r
- return 1;\r
- }\r
- else if (code == 0x0069) {\r
- items[0].byte_len = len;\r
- items[0].code_len = 1;\r
- items[0].code[0] = 0x0130;\r
- return 1;\r
- }\r
- }\r
-#endif\r
-\r
- if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {\r
- if (to->n == 1) {\r
- OnigCodePoint orig_code = code;\r
-\r
- items[0].byte_len = len;\r
- items[0].code_len = 1;\r
- items[0].code[0] = to->code[0];\r
- n++;\r
-\r
- code = to->code[0];\r
- if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {\r
- for (i = 0; i < to->n; i++) {\r
- if (to->code[i] != orig_code) {\r
- items[n].byte_len = len;\r
- items[n].code_len = 1;\r
- items[n].code[0] = to->code[i];\r
- n++;\r
- }\r
- }\r
- }\r
- }\r
- else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
- OnigCodePoint cs[3][4];\r
- int fn, ncs[3];\r
-\r
- for (fn = 0; fn < to->n; fn++) {\r
- cs[fn][0] = to->code[fn];\r
- if (onig_st_lookup(Unfold1Table, (st_data_t )cs[fn][0],\r
- (void* )&z3) != 0) {\r
- for (i = 0; i < z3->n; i++) {\r
- cs[fn][i+1] = z3->code[i];\r
- }\r
- ncs[fn] = z3->n + 1;\r
- }\r
- else\r
- ncs[fn] = 1;\r
- }\r
-\r
- if (fn == 2) {\r
- for (i = 0; i < ncs[0]; i++) {\r
- for (j = 0; j < ncs[1]; j++) {\r
- items[n].byte_len = len;\r
- items[n].code_len = 2;\r
- items[n].code[0] = cs[0][i];\r
- items[n].code[1] = cs[1][j];\r
- n++;\r
- }\r
- }\r
-\r
- if (onig_st_lookup(Unfold2Table, (st_data_t )to->code,\r
- (void* )&z2) != 0) {\r
- for (i = 0; i < z2->n; i++) {\r
- if (z2->code[i] == code) continue;\r
-\r
- items[n].byte_len = len;\r
- items[n].code_len = 1;\r
- items[n].code[0] = z2->code[i];\r
- n++;\r
- }\r
- }\r
- }\r
- else {\r
- for (i = 0; i < ncs[0]; i++) {\r
- for (j = 0; j < ncs[1]; j++) {\r
- for (k = 0; k < ncs[2]; k++) {\r
- items[n].byte_len = len;\r
- items[n].code_len = 3;\r
- items[n].code[0] = cs[0][i];\r
- items[n].code[1] = cs[1][j];\r
- items[n].code[2] = cs[2][k];\r
- n++;\r
- }\r
- }\r
- }\r
-\r
- if (onig_st_lookup(Unfold3Table, (st_data_t )to->code,\r
- (void* )&z2) != 0) {\r
- for (i = 0; i < z2->n; i++) {\r
- if (z2->code[i] == code) continue;\r
-\r
- items[n].byte_len = len;\r
- items[n].code_len = 1;\r
- items[n].code[0] = z2->code[i];\r
- n++;\r
- }\r
- }\r
- }\r
-\r
- /* multi char folded code is not head of another folded multi char */\r
- flag = 0; /* DISABLE_CASE_FOLD_MULTI_CHAR(flag); */\r
- }\r
- }\r
- else {\r
- if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {\r
- for (i = 0; i < to->n; i++) {\r
- items[n].byte_len = len;\r
- items[n].code_len = 1;\r
- items[n].code[0] = to->code[i];\r
- n++;\r
- }\r
- }\r
- }\r
-\r
-\r
- if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
- p += len;\r
- if (p < end) {\r
- int clen;\r
-\r
- codes[0] = code;\r
- code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
- if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0\r
- && to->n == 1) {\r
- codes[1] = to->code[0];\r
- }\r
- else\r
- codes[1] = code;\r
-\r
- clen = enclen(enc, p);\r
- len += clen;\r
- if (onig_st_lookup(Unfold2Table, (st_data_t )codes, (void* )&z2) != 0) {\r
- for (i = 0; i < z2->n; i++) {\r
- items[n].byte_len = len;\r
- items[n].code_len = 1;\r
- items[n].code[0] = z2->code[i];\r
- n++;\r
- }\r
- }\r
-\r
- p += clen;\r
- if (p < end) {\r
- code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
- if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0\r
- && to->n == 1) {\r
- codes[2] = to->code[0];\r
- }\r
- else\r
- codes[2] = code;\r
-\r
- clen = enclen(enc, p);\r
- len += clen;\r
- if (onig_st_lookup(Unfold3Table, (st_data_t )codes,\r
- (void* )&z2) != 0) {\r
- for (i = 0; i < z2->n; i++) {\r
- items[n].byte_len = len;\r
- items[n].code_len = 1;\r
- items[n].code[0] = z2->code[i];\r
- n++;\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- return n;\r
-}\r
+++ /dev/null
-/**********************************************************************\r
- utf16_le.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regenc.h"\r
-\r
-static const int EncLen_UTF16[] = {\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\r
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2\r
-};\r
-\r
-static int\r
-utf16le_code_to_mbclen(OnigCodePoint code)\r
-{\r
- return (code > 0xffff ? 4 : 2);\r
-}\r
-\r
-static int\r
-utf16le_mbc_enc_len(const UChar* p)\r
-{\r
- return EncLen_UTF16[*(p+1)];\r
-}\r
-\r
-static int\r
-utf16le_is_mbc_newline(const UChar* p, const UChar* end)\r
-{\r
- if (p + 1 < end) {\r
- if (*p == 0x0a && *(p+1) == 0x00)\r
- return 1;\r
-#ifdef USE_UNICODE_ALL_LINE_TERMINATORS\r
- if ((\r
-#ifndef USE_CRNL_AS_LINE_TERMINATOR\r
- *p == 0x0d ||\r
-#endif\r
- *p == 0x85) && *(p+1) == 0x00)\r
- return 1;\r
- if (*(p+1) == 0x20 && (*p == 0x29 || *p == 0x28))\r
- return 1;\r
-#endif\r
- }\r
- return 0;\r
-}\r
-\r
-static OnigCodePoint\r
-utf16le_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED)\r
-{\r
- OnigCodePoint code;\r
- UChar c0 = *p;\r
- UChar c1 = *(p+1);\r
-\r
- if (UTF16_IS_SURROGATE_FIRST(c1)) {\r
- code = ((((c1 - 0xd8) << 2) + ((c0 & 0xc0) >> 6) + 1) << 16)\r
- + ((((c0 & 0x3f) << 2) + (p[3] - 0xdc)) << 8)\r
- + p[2];\r
- }\r
- else {\r
- code = c1 * 256 + p[0];\r
- }\r
- return code;\r
-}\r
-\r
-static int\r
-utf16le_code_to_mbc(OnigCodePoint code, UChar *buf)\r
-{\r
- UChar* p = buf;\r
-\r
- if (code > 0xffff) {\r
- unsigned int plane, high;\r
-\r
- plane = (code >> 16) - 1;\r
- high = (code & 0xff00) >> 8;\r
-\r
- *p++ = (UChar)(((plane & 0x03) << 6) + (high >> 2));\r
- *p++ = (UChar)((plane >> 2) + 0xd8);\r
- *p++ = (UChar )(code & 0xff);\r
- *p = (high & 0x03) + 0xdc;\r
- return 4;\r
- }\r
- else {\r
- *p++ = (UChar )(code & 0xff);\r
- *p++ = (UChar )((code & 0xff00) >> 8);\r
- return 2;\r
- }\r
-}\r
-\r
-static int\r
-utf16le_mbc_case_fold(OnigCaseFoldType flag,\r
- const UChar** pp, const UChar* end, UChar* fold)\r
-{\r
- const UChar* p = *pp;\r
-\r
- if (ONIGENC_IS_ASCII_CODE(*p) && *(p+1) == 0) {\r
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI\r
- if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {\r
- if (*p == 0x49) {\r
- *fold++ = 0x31;\r
- *fold = 0x01;\r
- (*pp) += 2;\r
- return 2;\r
- }\r
- }\r
-#endif\r
-\r
- *fold++ = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);\r
- *fold = 0;\r
- *pp += 2;\r
- return 2;\r
- }\r
- else\r
- return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF16_LE, flag, pp, end,\r
- fold);\r
-}\r
-\r
-#if 0\r
-static int\r
-utf16le_is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp,\r
- const UChar* end)\r
-{\r
- const UChar* p = *pp;\r
-\r
- (*pp) += EncLen_UTF16[*(p+1)];\r
-\r
- if (*(p+1) == 0) {\r
- int c, v;\r
-\r
- if (*p == 0xdf && (flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {\r
- return TRUE;\r
- }\r
-\r
- c = *p;\r
- v = ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(c,\r
- (BIT_CTYPE_UPPER | BIT_CTYPE_LOWER));\r
- if ((v | BIT_CTYPE_LOWER) != 0) {\r
- /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */\r
- if (c >= 0xaa && c <= 0xba)\r
- return FALSE;\r
- else\r
- return TRUE;\r
- }\r
- return (v != 0 ? TRUE : FALSE);\r
- }\r
-\r
- return FALSE;\r
-}\r
-#endif\r
-\r
-static UChar*\r
-utf16le_left_adjust_char_head(const UChar* start, const UChar* s)\r
-{\r
- if (s <= start) return (UChar* )s;\r
-\r
- if ((s - start) % 2 == 1) {\r
- s--;\r
- }\r
-\r
- if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1)\r
- s -= 2;\r
-\r
- return (UChar* )s;\r
-}\r
-\r
-static int\r
-utf16le_get_case_fold_codes_by_str(OnigCaseFoldType flag,\r
- const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])\r
-{\r
- return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF16_LE,\r
- flag, p, end, items);\r
-}\r
-\r
-OnigEncodingType OnigEncodingUTF16_LE = {\r
- utf16le_mbc_enc_len,\r
- "UTF-16LE", /* name */\r
- 4, /* max byte length */\r
- 2, /* min byte length */\r
- utf16le_is_mbc_newline,\r
- utf16le_mbc_to_code,\r
- utf16le_code_to_mbclen,\r
- utf16le_code_to_mbc,\r
- utf16le_mbc_case_fold,\r
- onigenc_unicode_apply_all_case_fold,\r
- utf16le_get_case_fold_codes_by_str,\r
- onigenc_unicode_property_name_to_ctype,\r
- onigenc_unicode_is_code_ctype,\r
- onigenc_utf16_32_get_ctype_code_range,\r
- utf16le_left_adjust_char_head,\r
- onigenc_always_false_is_allowed_reverse_match\r
-};\r
+++ /dev/null
-#ifndef ONIGGNU_H\r
-#define ONIGGNU_H\r
-/**********************************************************************\r
- oniggnu.h - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "oniguruma.h"\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-#define RE_MBCTYPE_ASCII 0\r
-#define RE_MBCTYPE_EUC 1\r
-#define RE_MBCTYPE_SJIS 2\r
-#define RE_MBCTYPE_UTF8 3\r
-\r
-/* GNU regex options */\r
-#ifndef RE_NREGS\r
-#define RE_NREGS ONIG_NREGION\r
-#endif\r
-\r
-#define RE_OPTION_IGNORECASE ONIG_OPTION_IGNORECASE\r
-#define RE_OPTION_EXTENDED ONIG_OPTION_EXTEND\r
-#define RE_OPTION_MULTILINE ONIG_OPTION_MULTILINE\r
-#define RE_OPTION_SINGLELINE ONIG_OPTION_SINGLELINE\r
-#define RE_OPTION_LONGEST ONIG_OPTION_FIND_LONGEST\r
-#define RE_OPTION_POSIXLINE (RE_OPTION_MULTILINE|RE_OPTION_SINGLELINE)\r
-#define RE_OPTION_FIND_NOT_EMPTY ONIG_OPTION_FIND_NOT_EMPTY\r
-#define RE_OPTION_NEGATE_SINGLELINE ONIG_OPTION_NEGATE_SINGLELINE\r
-#define RE_OPTION_DONT_CAPTURE_GROUP ONIG_OPTION_DONT_CAPTURE_GROUP\r
-#define RE_OPTION_CAPTURE_GROUP ONIG_OPTION_CAPTURE_GROUP\r
-\r
-\r
-ONIG_EXTERN\r
-void re_mbcinit P_((int));\r
-ONIG_EXTERN\r
-int re_compile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf));\r
-ONIG_EXTERN\r
-int re_recompile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf));\r
-ONIG_EXTERN\r
-void re_free_pattern P_((struct re_pattern_buffer*));\r
-ONIG_EXTERN\r
-int re_adjust_startpos P_((struct re_pattern_buffer*, const char*, int, int, int));\r
-ONIG_EXTERN\r
-int re_search P_((struct re_pattern_buffer*, const char*, int, int, int, struct re_registers*));\r
-ONIG_EXTERN\r
-int re_match P_((struct re_pattern_buffer*, const char *, int, int, struct re_registers*));\r
-ONIG_EXTERN\r
-void re_set_casetable P_((const char*));\r
-ONIG_EXTERN\r
-void re_free_registers P_((struct re_registers*));\r
-ONIG_EXTERN\r
-int re_alloc_pattern P_((struct re_pattern_buffer**)); /* added */\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* ONIGGNU_H */\r
+++ /dev/null
-#ifndef ONIGPOSIX_H\r
-#define ONIGPOSIX_H\r
-/**********************************************************************\r
- onigposix.h - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-#include "OnigurumaUefiPort.h"\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* options */\r
-#define REG_ICASE (1<<0)\r
-#define REG_NEWLINE (1<<1)\r
-#define REG_NOTBOL (1<<2)\r
-#define REG_NOTEOL (1<<3)\r
-#define REG_EXTENDED (1<<4) /* if not setted, Basic Onigular Expression */\r
-#define REG_NOSUB (1<<5)\r
-\r
-/* POSIX error codes */\r
-#define REG_NOMATCH 1\r
-#define REG_BADPAT 2\r
-#define REG_ECOLLATE 3\r
-#define REG_ECTYPE 4\r
-#define REG_EESCAPE 5\r
-#define REG_ESUBREG 6\r
-#define REG_EBRACK 7\r
-#define REG_EPAREN 8\r
-#define REG_EBRACE 9\r
-#define REG_BADBR 10\r
-#define REG_ERANGE 11\r
-#define REG_ESPACE 12\r
-#define REG_BADRPT 13\r
-\r
-/* extended error codes */\r
-#define REG_EONIG_INTERNAL 14\r
-#define REG_EONIG_BADWC 15\r
-#define REG_EONIG_BADARG 16\r
-#define REG_EONIG_THREAD 17\r
-\r
-/* character encodings (for reg_set_encoding()) */\r
-#define REG_POSIX_ENCODING_ASCII 0\r
-#define REG_POSIX_ENCODING_EUC_JP 1\r
-#define REG_POSIX_ENCODING_SJIS 2\r
-#define REG_POSIX_ENCODING_UTF8 3\r
-#define REG_POSIX_ENCODING_UTF16_BE 4\r
-#define REG_POSIX_ENCODING_UTF16_LE 5\r
-\r
-\r
-typedef int regoff_t;\r
-\r
-typedef struct {\r
- regoff_t rm_so;\r
- regoff_t rm_eo;\r
-} regmatch_t;\r
-\r
-/* POSIX regex_t */\r
-typedef struct {\r
- void* onig; /* Oniguruma regex_t* */\r
- size_t re_nsub;\r
- int comp_options;\r
-} regex_t;\r
-\r
-\r
-#ifndef P_\r
-#if defined(__STDC__) || defined(_WIN32)\r
-# define P_(args) args\r
-#else\r
-# define P_(args) ()\r
-#endif\r
-#endif\r
-\r
-#ifndef ONIG_EXTERN\r
-#if defined(_WIN32) && !defined(__GNUC__)\r
-#if defined(EXPORT)\r
-#define ONIG_EXTERN extern __declspec(dllexport)\r
-#else\r
-#define ONIG_EXTERN extern __declspec(dllimport)\r
-#endif\r
-#endif\r
-#endif\r
-\r
-#ifndef ONIG_EXTERN\r
-#define ONIG_EXTERN extern\r
-#endif\r
-\r
-#ifndef ONIGURUMA_H\r
-typedef unsigned int OnigOptionType;\r
-\r
-/* syntax */\r
-typedef struct {\r
- unsigned int op;\r
- unsigned int op2;\r
- unsigned int behavior;\r
- OnigOptionType options; /* default option */\r
-} OnigSyntaxType;\r
-\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;\r
-\r
-/* predefined syntaxes (see regsyntax.c) */\r
-#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)\r
-#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)\r
-#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)\r
-#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)\r
-#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)\r
-#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)\r
-#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)\r
-#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)\r
-/* default syntax */\r
-#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax\r
-\r
-ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;\r
-\r
-ONIG_EXTERN int onig_set_default_syntax P_((OnigSyntaxType* syntax));\r
-ONIG_EXTERN void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));\r
-ONIG_EXTERN const char* onig_version P_((void));\r
-ONIG_EXTERN const char* onig_copyright P_((void));\r
-\r
-#endif /* ONIGURUMA_H */\r
-\r
-\r
-ONIG_EXTERN int regcomp P_((regex_t* reg, const char* pat, int options));\r
-ONIG_EXTERN int regexec P_((regex_t* reg, const char* str, size_t nmatch, regmatch_t* matches, int options));\r
-ONIG_EXTERN void regfree P_((regex_t* reg));\r
-ONIG_EXTERN size_t regerror P_((int code, const regex_t* reg, char* buf, size_t size));\r
-\r
-/* extended API */\r
-ONIG_EXTERN void reg_set_encoding P_((int enc));\r
-ONIG_EXTERN int reg_name_to_group_numbers P_((regex_t* reg, const unsigned char* name, const unsigned char* name_end, int** nums));\r
-ONIG_EXTERN int reg_foreach_name P_((regex_t* reg, int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*), void* arg));\r
-ONIG_EXTERN int reg_number_of_names P_((regex_t* reg));\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* ONIGPOSIX_H */\r
+++ /dev/null
-#ifndef ONIGURUMA_H\r
-#define ONIGURUMA_H\r
-/**********************************************************************\r
- oniguruma.h - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "OnigurumaUefiPort.h"\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-#define ONIGURUMA\r
-#define ONIGURUMA_VERSION_MAJOR 5\r
-#define ONIGURUMA_VERSION_MINOR 9\r
-#define ONIGURUMA_VERSION_TEENY 6\r
-\r
-#ifdef __cplusplus\r
-# ifndef HAVE_PROTOTYPES\r
-# define HAVE_PROTOTYPES 1\r
-# endif\r
-# ifndef HAVE_STDARG_PROTOTYPES\r
-# define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
-\r
-/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */\r
-#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4\r
-# ifndef HAVE_STDARG_PROTOTYPES\r
-# define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
-\r
-#ifdef HAVE_STDARG_H\r
-# ifndef HAVE_STDARG_PROTOTYPES\r
-# define HAVE_STDARG_PROTOTYPES 1\r
-# endif\r
-#endif\r
-\r
-#ifndef P_\r
-#if defined(__STDC__) || defined(_WIN32)\r
-# define P_(args) args\r
-#else\r
-# define P_(args) ()\r
-#endif\r
-#endif\r
-\r
-#ifndef PV_\r
-#ifdef HAVE_STDARG_PROTOTYPES\r
-# define PV_(args) args\r
-#else\r
-# define PV_(args) ()\r
-#endif\r
-#endif\r
-\r
-#ifndef ONIG_EXTERN\r
-#if defined(_WIN32) && !defined(__GNUC__)\r
-#if defined(EXPORT) || defined(RUBY_EXPORT)\r
-#define ONIG_EXTERN extern __declspec(dllexport)\r
-#else\r
-#define ONIG_EXTERN extern __declspec(dllimport)\r
-#endif\r
-#endif\r
-#endif\r
-\r
-#ifndef ONIG_EXTERN\r
-#define ONIG_EXTERN extern\r
-#endif\r
-\r
-/* PART: character encoding */\r
-\r
-#ifndef ONIG_ESCAPE_UCHAR_COLLISION\r
-#define UChar OnigUChar\r
-#endif\r
-\r
-#ifdef _WIN32\r
-# include <windows.h>\r
-typedef ULONG_PTR OnigCodePoint;\r
-#else\r
-typedef unsigned long OnigCodePoint;\r
-#endif\r
-typedef unsigned char OnigUChar;\r
-typedef unsigned int OnigCtype;\r
-typedef unsigned int OnigDistance;\r
-\r
-#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0)\r
-\r
-typedef unsigned int OnigCaseFoldType; /* case fold flag */\r
-\r
-ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag;\r
-\r
-/* #define ONIGENC_CASE_FOLD_HIRAGANA_KATAKANA (1<<1) */\r
-/* #define ONIGENC_CASE_FOLD_KATAKANA_WIDTH (1<<2) */\r
-#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20)\r
-#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30)\r
-\r
-#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR\r
-#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag\r
-\r
-\r
-#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3\r
-#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13\r
-/* 13 => Unicode:0x1ffc */\r
-\r
-/* code range */\r
-#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0])\r
-#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1]\r
-#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2]\r
-\r
-typedef struct {\r
- int byte_len; /* argument(original) character(s) byte length */\r
- int code_len; /* number of code */\r
- OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN];\r
-} OnigCaseFoldCodeItem;\r
-\r
-typedef struct {\r
- OnigCodePoint esc;\r
- OnigCodePoint anychar;\r
- OnigCodePoint anytime;\r
- OnigCodePoint zero_or_one_time;\r
- OnigCodePoint one_or_more_time;\r
- OnigCodePoint anychar_anytime;\r
-} OnigMetaCharTableType;\r
- \r
-typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);\r
-\r
-typedef struct OnigEncodingTypeST {\r
- int (*mbc_enc_len)(const OnigUChar* p);\r
- const char* name;\r
- int max_enc_len;\r
- int min_enc_len;\r
- int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end);\r
- OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end);\r
- int (*code_to_mbclen)(OnigCodePoint code);\r
- int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf);\r
- int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to);\r
- int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg);\r
- int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[]);\r
- int (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end);\r
- int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype);\r
- int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]);\r
- OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p);\r
- int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end);\r
-} OnigEncodingType;\r
-\r
-typedef OnigEncodingType* OnigEncoding;\r
-\r
-ONIG_EXTERN OnigEncodingType OnigEncodingASCII;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_1;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_2;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_3;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_4;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_5;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_6;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_7;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_8;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_9;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_10;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_11;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_13;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_14;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_15;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_16;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF8;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_BE;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_LE;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_BE;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_LE;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_JP;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_TW;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_KR;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_CN;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingSJIS;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingKOI8;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingKOI8_R;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingCP1251;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingBIG5;\r
-ONIG_EXTERN OnigEncodingType OnigEncodingGB18030;\r
-\r
-#define ONIG_ENCODING_ASCII (&OnigEncodingASCII)\r
-#define ONIG_ENCODING_ISO_8859_1 (&OnigEncodingISO_8859_1)\r
-#define ONIG_ENCODING_ISO_8859_2 (&OnigEncodingISO_8859_2)\r
-#define ONIG_ENCODING_ISO_8859_3 (&OnigEncodingISO_8859_3)\r
-#define ONIG_ENCODING_ISO_8859_4 (&OnigEncodingISO_8859_4)\r
-#define ONIG_ENCODING_ISO_8859_5 (&OnigEncodingISO_8859_5)\r
-#define ONIG_ENCODING_ISO_8859_6 (&OnigEncodingISO_8859_6)\r
-#define ONIG_ENCODING_ISO_8859_7 (&OnigEncodingISO_8859_7)\r
-#define ONIG_ENCODING_ISO_8859_8 (&OnigEncodingISO_8859_8)\r
-#define ONIG_ENCODING_ISO_8859_9 (&OnigEncodingISO_8859_9)\r
-#define ONIG_ENCODING_ISO_8859_10 (&OnigEncodingISO_8859_10)\r
-#define ONIG_ENCODING_ISO_8859_11 (&OnigEncodingISO_8859_11)\r
-#define ONIG_ENCODING_ISO_8859_13 (&OnigEncodingISO_8859_13)\r
-#define ONIG_ENCODING_ISO_8859_14 (&OnigEncodingISO_8859_14)\r
-#define ONIG_ENCODING_ISO_8859_15 (&OnigEncodingISO_8859_15)\r
-#define ONIG_ENCODING_ISO_8859_16 (&OnigEncodingISO_8859_16)\r
-#define ONIG_ENCODING_UTF8 (&OnigEncodingUTF8)\r
-#define ONIG_ENCODING_UTF16_BE (&OnigEncodingUTF16_BE)\r
-#define ONIG_ENCODING_UTF16_LE (&OnigEncodingUTF16_LE)\r
-#define ONIG_ENCODING_UTF32_BE (&OnigEncodingUTF32_BE)\r
-#define ONIG_ENCODING_UTF32_LE (&OnigEncodingUTF32_LE)\r
-#define ONIG_ENCODING_EUC_JP (&OnigEncodingEUC_JP)\r
-#define ONIG_ENCODING_EUC_TW (&OnigEncodingEUC_TW)\r
-#define ONIG_ENCODING_EUC_KR (&OnigEncodingEUC_KR)\r
-#define ONIG_ENCODING_EUC_CN (&OnigEncodingEUC_CN)\r
-#define ONIG_ENCODING_SJIS (&OnigEncodingSJIS)\r
-#define ONIG_ENCODING_KOI8 (&OnigEncodingKOI8)\r
-#define ONIG_ENCODING_KOI8_R (&OnigEncodingKOI8_R)\r
-#define ONIG_ENCODING_CP1251 (&OnigEncodingCP1251)\r
-#define ONIG_ENCODING_BIG5 (&OnigEncodingBIG5)\r
-#define ONIG_ENCODING_GB18030 (&OnigEncodingGB18030)\r
-\r
-#define ONIG_ENCODING_UNDEF ((OnigEncoding )0)\r
-\r
-\r
-/* work size */\r
-#define ONIGENC_CODE_TO_MBC_MAXLEN 7\r
-#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18\r
-/* 18: 6(max-byte) * 3(case-fold chars) */\r
-\r
-/* character types */\r
-#define ONIGENC_CTYPE_NEWLINE 0\r
-#define ONIGENC_CTYPE_ALPHA 1\r
-#define ONIGENC_CTYPE_BLANK 2\r
-#define ONIGENC_CTYPE_CNTRL 3\r
-#define ONIGENC_CTYPE_DIGIT 4\r
-#define ONIGENC_CTYPE_GRAPH 5\r
-#define ONIGENC_CTYPE_LOWER 6\r
-#define ONIGENC_CTYPE_PRINT 7\r
-#define ONIGENC_CTYPE_PUNCT 8\r
-#define ONIGENC_CTYPE_SPACE 9\r
-#define ONIGENC_CTYPE_UPPER 10\r
-#define ONIGENC_CTYPE_XDIGIT 11\r
-#define ONIGENC_CTYPE_WORD 12\r
-#define ONIGENC_CTYPE_ALNUM 13 /* alpha || digit */\r
-#define ONIGENC_CTYPE_ASCII 14\r
-#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII\r
-\r
-\r
-#define onig_enc_len(enc,p,end) ONIGENC_MBC_ENC_LEN(enc,p)\r
-\r
-#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF)\r
-#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1)\r
-#define ONIGENC_IS_MBC_HEAD(enc,p) (ONIGENC_MBC_ENC_LEN(enc,p) != 1)\r
-#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128)\r
-#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128)\r
-#define ONIGENC_IS_MBC_WORD(enc,s,end) \\r
- ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))\r
-\r
-\r
-#define ONIGENC_NAME(enc) ((enc)->name)\r
-\r
-#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \\r
- (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf)\r
-#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \\r
- (enc)->is_allowed_reverse_match(s,end)\r
-#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \\r
- (enc)->left_adjust_char_head(start, s)\r
-#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \\r
- (enc)->apply_all_case_fold(case_fold_flag,f,arg)\r
-#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \\r
- (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs)\r
-#define ONIGENC_STEP_BACK(enc,start,s,n) \\r
- onigenc_step_back((enc),(start),(s),(n))\r
-\r
-#define ONIGENC_MBC_ENC_LEN(enc,p) (enc)->mbc_enc_len(p)\r
-#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len)\r
-#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc)\r
-#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len)\r
-#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end))\r
-#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end))\r
-#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code)\r
-#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf)\r
-#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \\r
- (enc)->property_name_to_ctype(enc,p,end)\r
-\r
-#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype)\r
-\r
-#define ONIGENC_IS_CODE_NEWLINE(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)\r
-#define ONIGENC_IS_CODE_GRAPH(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)\r
-#define ONIGENC_IS_CODE_PRINT(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)\r
-#define ONIGENC_IS_CODE_ALNUM(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)\r
-#define ONIGENC_IS_CODE_ALPHA(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)\r
-#define ONIGENC_IS_CODE_LOWER(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)\r
-#define ONIGENC_IS_CODE_UPPER(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)\r
-#define ONIGENC_IS_CODE_CNTRL(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)\r
-#define ONIGENC_IS_CODE_PUNCT(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)\r
-#define ONIGENC_IS_CODE_SPACE(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)\r
-#define ONIGENC_IS_CODE_BLANK(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)\r
-#define ONIGENC_IS_CODE_DIGIT(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)\r
-#define ONIGENC_IS_CODE_XDIGIT(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)\r
-#define ONIGENC_IS_CODE_WORD(enc,code) \\r
- ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)\r
-\r
-#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \\r
- (enc)->get_ctype_code_range(ctype,sbout,ranges)\r
-\r
-ONIG_EXTERN\r
-OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, int n));\r
-\r
-\r
-/* encoding API */\r
-ONIG_EXTERN\r
-int onigenc_init P_((void));\r
-ONIG_EXTERN\r
-int onigenc_set_default_encoding P_((OnigEncoding enc));\r
-ONIG_EXTERN\r
-OnigEncoding onigenc_get_default_encoding P_((void));\r
-ONIG_EXTERN\r
-void onigenc_set_default_caseconv_table P_((const OnigUChar* table));\r
-ONIG_EXTERN\r
-OnigUChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar** prev));\r
-ONIG_EXTERN\r
-OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));\r
-ONIG_EXTERN\r
-OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));\r
-ONIG_EXTERN\r
-OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));\r
-ONIG_EXTERN\r
-int onigenc_strlen P_((OnigEncoding enc, const OnigUChar* p, const OnigUChar* end));\r
-ONIG_EXTERN\r
-int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p));\r
-ONIG_EXTERN\r
-int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p));\r
-\r
-\r
-\r
-/* PART: regular expression */\r
-\r
-/* config parameters */\r
-#define ONIG_NREGION 10\r
-#define ONIG_MAX_BACKREF_NUM 1000\r
-#define ONIG_MAX_REPEAT_NUM 100000\r
-#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000\r
-/* constants */\r
-#define ONIG_MAX_ERROR_MESSAGE_LEN 90\r
-\r
-typedef unsigned int OnigOptionType;\r
-\r
-#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE\r
-\r
-/* options */\r
-#define ONIG_OPTION_NONE 0U\r
-#define ONIG_OPTION_IGNORECASE 1U\r
-#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1)\r
-#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1)\r
-#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1)\r
-#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1)\r
-#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1)\r
-#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1)\r
-#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1)\r
-#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)\r
-/* options (search time) */\r
-#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1)\r
-#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1)\r
-#define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1)\r
-#define ONIG_OPTION_MAXBIT ONIG_OPTION_POSIX_REGION /* limit */\r
-\r
-#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt))\r
-#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt))\r
-#define ONIG_IS_OPTION_ON(options,option) ((options) & (option))\r
-\r
-/* syntax */\r
-typedef struct {\r
- unsigned int op;\r
- unsigned int op2;\r
- unsigned int behavior;\r
- OnigOptionType options; /* default option */\r
- OnigMetaCharTableType meta_char_table;\r
-} OnigSyntaxType;\r
-\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxASIS;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl_NG;\r
-ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;\r
-\r
-/* predefined syntaxes (see regsyntax.c) */\r
-#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS)\r
-#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic)\r
-#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended)\r
-#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs)\r
-#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep)\r
-#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex)\r
-#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava)\r
-#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl)\r
-#define ONIG_SYNTAX_PERL_NG (&OnigSyntaxPerl_NG)\r
-#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)\r
-\r
-/* default syntax */\r
-ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax;\r
-#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax\r
-\r
-/* syntax (operators) */\r
-#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0)\r
-#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1) /* . */\r
-#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2) /* * */\r
-#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3)\r
-#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4) /* + */\r
-#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5)\r
-#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6) /* ? */\r
-#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7)\r
-#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8) /* {lower,upper} */\r
-#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9) /* \{lower,upper\} */\r
-#define ONIG_SYN_OP_VBAR_ALT (1U<<10) /* | */\r
-#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11) /* \| */\r
-#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12) /* (...) */\r
-#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13) /* \(...\) */\r
-#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14) /* \A, \Z, \z */\r
-#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15) /* \G */\r
-#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16) /* \num */\r
-#define ONIG_SYN_OP_BRACKET_CC (1U<<17) /* [...] */\r
-#define ONIG_SYN_OP_ESC_W_WORD (1U<<18) /* \w, \W */\r
-#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19) /* \<. \> */\r
-#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20) /* \b, \B */\r
-#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21) /* \s, \S */\r
-#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22) /* \d, \D */\r
-#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23) /* ^, $ */\r
-#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24) /* [:xxxx:] */\r
-#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25) /* ??,*?,+?,{n,m}? */\r
-#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26) /* \n,\r,\t,\a ... */\r
-#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27) /* \cx */\r
-#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28) /* \OOO */\r
-#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29) /* \xHH */\r
-#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30) /* \x{7HHHHHHH} */\r
-\r
-#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0) /* \Q...\E */\r
-#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1) /* (?...) */\r
-#define ONIG_SYN_OP2_OPTION_PERL (1U<<2) /* (?imsx),(?-imsx) */\r
-#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3) /* (?imx), (?-imx) */\r
-#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4) /* ?+,*+,++ */\r
-#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5) /* {n,m}+ */\r
-#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6) /* [...&&..[..]..] */\r
-#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7) /* (?<name>...) */\r
-#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8) /* \k<name> */\r
-#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9) /* \g<name>, \g<n> */\r
-#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10) /* (?@..),(?@<x>..) */\r
-#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11) /* \C-x */\r
-#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12) /* \M-x */\r
-#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13) /* \v as VTAB */\r
-#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14) /* \uHHHH */\r
-#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15) /* \`, \' */\r
-#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16) /* \p{...}, \P{...} */\r
-#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */\r
-/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */\r
-#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19) /* \h, \H */\r
-#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20) /* \ */\r
-\r
-/* syntax (behavior) */\r
-#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31) /* not implemented */\r
-#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0) /* ?, *, +, {n,m} */\r
-#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1) /* error or ignore */\r
-#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2) /* ...)... */\r
-#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3) /* {??? */\r
-#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4) /* {,n} => {0,n} */\r
-#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5) /* /(\1)/,/\1()/ ..*/\r
-#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6) /* (?<=a|bc) */\r
-#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7) /* see doc/RE */\r
-#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8) /* (?<x>)(?<x>) */\r
-#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9) /* a{n}?=(?:a{n})? */\r
-\r
-/* syntax (behavior) in char class [...] */\r
-#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20) /* [^...] */\r
-#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21) /* [..\w..] etc.. */\r
-#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22)\r
-#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23) /* [0-9-a]=[0-9\-a] */\r
-/* syntax (behavior) warning */\r
-#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24) /* [,-,] */\r
-#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25) /* (?:a*)+ */\r
-\r
-/* meta character specifiers (onig_set_meta_char()) */\r
-#define ONIG_META_CHAR_ESCAPE 0\r
-#define ONIG_META_CHAR_ANYCHAR 1\r
-#define ONIG_META_CHAR_ANYTIME 2\r
-#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3\r
-#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4\r
-#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5\r
-\r
-#define ONIG_INEFFECTIVE_META_CHAR 0\r
-\r
-/* error codes */\r
-#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000)\r
-/* normal return */\r
-#define ONIG_NORMAL 0\r
-#define ONIG_MISMATCH -1\r
-#define ONIG_NO_SUPPORT_CONFIG -2\r
-\r
-/* internal error */\r
-#define ONIGERR_MEMORY -5\r
-#define ONIGERR_TYPE_BUG -6\r
-#define ONIGERR_PARSER_BUG -11\r
-#define ONIGERR_STACK_BUG -12\r
-#define ONIGERR_UNDEFINED_BYTECODE -13\r
-#define ONIGERR_UNEXPECTED_BYTECODE -14\r
-#define ONIGERR_MATCH_STACK_LIMIT_OVER -15\r
-#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED -21\r
-#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22\r
-/* general error */\r
-#define ONIGERR_INVALID_ARGUMENT -30 \r
-/* syntax error */\r
-#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100\r
-#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101\r
-#define ONIGERR_EMPTY_CHAR_CLASS -102\r
-#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103\r
-#define ONIGERR_END_PATTERN_AT_ESCAPE -104\r
-#define ONIGERR_END_PATTERN_AT_META -105\r
-#define ONIGERR_END_PATTERN_AT_CONTROL -106\r
-#define ONIGERR_META_CODE_SYNTAX -108\r
-#define ONIGERR_CONTROL_CODE_SYNTAX -109\r
-#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110\r
-#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111\r
-#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112\r
-#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113\r
-#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114\r
-#define ONIGERR_NESTED_REPEAT_OPERATOR -115\r
-#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116\r
-#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117\r
-#define ONIGERR_END_PATTERN_IN_GROUP -118\r
-#define ONIGERR_UNDEFINED_GROUP_OPTION -119\r
-#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121\r
-#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122\r
-#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123\r
-/* values error (syntax error) */\r
-#define ONIGERR_TOO_BIG_NUMBER -200\r
-#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201\r
-#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202\r
-#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203\r
-#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204\r
-#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205\r
-#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206\r
-#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207\r
-#define ONIGERR_INVALID_BACKREF -208\r
-#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209\r
-#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212\r
-#define ONIGERR_EMPTY_GROUP_NAME -214\r
-#define ONIGERR_INVALID_GROUP_NAME -215\r
-#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216\r
-#define ONIGERR_UNDEFINED_NAME_REFERENCE -217\r
-#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218\r
-#define ONIGERR_MULTIPLEX_DEFINED_NAME -219\r
-#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220\r
-#define ONIGERR_NEVER_ENDING_RECURSION -221\r
-#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222\r
-#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223\r
-#define ONIGERR_INVALID_CODE_POINT_VALUE -400\r
-#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400\r
-#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401\r
-#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402\r
-#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403\r
-\r
-/* errors related to thread */\r
-#define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001\r
-\r
-\r
-/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */\r
-#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31\r
-#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \\r
- ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])\r
-\r
-typedef struct OnigCaptureTreeNodeStruct {\r
- int group; /* group number */\r
- int beg;\r
- int end;\r
- int allocated;\r
- int num_childs;\r
- struct OnigCaptureTreeNodeStruct** childs;\r
-} OnigCaptureTreeNode;\r
-\r
-/* match result region type */\r
-struct re_registers {\r
- int allocated;\r
- int num_regs;\r
- int* beg;\r
- int* end;\r
- /* extended */\r
- OnigCaptureTreeNode* history_root; /* capture history tree root */\r
-};\r
-\r
-/* capture tree traverse */\r
-#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1\r
-#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2\r
-#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \\r
- ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )\r
-\r
-\r
-#define ONIG_REGION_NOTPOS -1\r
-\r
-typedef struct re_registers OnigRegion;\r
-\r
-typedef struct {\r
- OnigEncoding enc;\r
- OnigUChar* par;\r
- OnigUChar* par_end;\r
-} OnigErrorInfo;\r
-\r
-typedef struct {\r
- int lower;\r
- int upper;\r
-} OnigRepeatRange;\r
-\r
-typedef void (*OnigWarnFunc) P_((const char* s));\r
-extern void onig_null_warn P_((const char* s));\r
-#define ONIG_NULL_WARN onig_null_warn\r
-\r
-#define ONIG_CHAR_TABLE_SIZE 256\r
-\r
-/* regex_t state */\r
-#define ONIG_STATE_NORMAL 0\r
-#define ONIG_STATE_SEARCHING 1\r
-#define ONIG_STATE_COMPILING -1\r
-#define ONIG_STATE_MODIFY -2\r
-\r
-#define ONIG_STATE(reg) \\r
- ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state)\r
-\r
-typedef struct re_pattern_buffer {\r
- /* common members of BBuf(bytes-buffer) */\r
- unsigned char* p; /* compiled pattern */\r
- unsigned int used; /* used space for p */\r
- unsigned int alloc; /* allocated space for p */\r
-\r
- int state; /* normal, searching, compiling */\r
- int num_mem; /* used memory(...) num counted from 1 */\r
- int num_repeat; /* OP_REPEAT/OP_REPEAT_NG id-counter */\r
- int num_null_check; /* OP_NULL_CHECK_START/END id counter */\r
- int num_comb_exp_check; /* combination explosion check */\r
- int num_call; /* number of subexp call */\r
- unsigned int capture_history; /* (?@...) flag (1-31) */\r
- unsigned int bt_mem_start; /* need backtrack flag */\r
- unsigned int bt_mem_end; /* need backtrack flag */\r
- int stack_pop_level;\r
- int repeat_range_alloc;\r
- OnigRepeatRange* repeat_range;\r
-\r
- OnigEncoding enc;\r
- OnigOptionType options;\r
- OnigSyntaxType* syntax;\r
- OnigCaseFoldType case_fold_flag;\r
- void* name_table;\r
-\r
- /* optimization info (string search, char-map and anchors) */\r
- int optimize; /* optimize flag */\r
- int threshold_len; /* search str-length for apply optimize */\r
- int anchor; /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */\r
- OnigDistance anchor_dmin; /* (SEMI_)END_BUF anchor distance */\r
- OnigDistance anchor_dmax; /* (SEMI_)END_BUF anchor distance */\r
- int sub_anchor; /* start-anchor for exact or map */\r
- unsigned char *exact;\r
- unsigned char *exact_end;\r
- unsigned char map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */\r
- int *int_map; /* BM skip for exact_len > 255 */\r
- int *int_map_backward; /* BM skip for backward search */\r
- OnigDistance dmin; /* min-distance of exact or map */\r
- OnigDistance dmax; /* max-distance of exact or map */\r
-\r
- /* regex_t link chain */\r
- struct re_pattern_buffer* chain; /* escape compile-conflict */\r
-} OnigRegexType;\r
-\r
-typedef OnigRegexType* OnigRegex;\r
-\r
-#ifndef ONIG_ESCAPE_REGEX_T_COLLISION\r
- typedef OnigRegexType regex_t;\r
-#endif\r
-\r
-\r
-typedef struct {\r
- int num_of_elements;\r
- OnigEncoding pattern_enc;\r
- OnigEncoding target_enc;\r
- OnigSyntaxType* syntax;\r
- OnigOptionType option;\r
- OnigCaseFoldType case_fold_flag;\r
-} OnigCompileInfo;\r
-\r
-/* Oniguruma Native API */\r
-ONIG_EXTERN\r
-int onig_init P_((void));\r
-ONIG_EXTERN\r
-int onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...));\r
-ONIG_EXTERN\r
-void onig_set_warn_func P_((OnigWarnFunc f));\r
-ONIG_EXTERN\r
-void onig_set_verb_warn_func P_((OnigWarnFunc f));\r
-ONIG_EXTERN\r
-int onig_new P_((OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
-ONIG_EXTERN\r
-int onig_reg_init P_((regex_t* reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, OnigSyntaxType* syntax));\r
-int onig_new_without_alloc P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
-ONIG_EXTERN\r
-int onig_new_deluxe P_((OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));\r
-ONIG_EXTERN\r
-void onig_free P_((OnigRegex));\r
-ONIG_EXTERN\r
-void onig_free_body P_((OnigRegex));\r
-ONIG_EXTERN\r
-int onig_recompile P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
-ONIG_EXTERN\r
-int onig_recompile_deluxe P_((OnigRegex reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));\r
-ONIG_EXTERN\r
-int onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option));\r
-ONIG_EXTERN\r
-int onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option));\r
-ONIG_EXTERN\r
-OnigRegion* onig_region_new P_((void));\r
-ONIG_EXTERN\r
-void onig_region_init P_((OnigRegion* region));\r
-ONIG_EXTERN\r
-void onig_region_free P_((OnigRegion* region, int free_self));\r
-ONIG_EXTERN\r
-void onig_region_copy P_((OnigRegion* to, OnigRegion* from));\r
-ONIG_EXTERN\r
-void onig_region_clear P_((OnigRegion* region));\r
-ONIG_EXTERN\r
-int onig_region_resize P_((OnigRegion* region, int n));\r
-ONIG_EXTERN\r
-int onig_region_set P_((OnigRegion* region, int at, int beg, int end));\r
-ONIG_EXTERN\r
-int onig_name_to_group_numbers P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums));\r
-ONIG_EXTERN\r
-int onig_name_to_backref_number P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region));\r
-ONIG_EXTERN\r
-int onig_foreach_name P_((OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg));\r
-ONIG_EXTERN\r
-int onig_number_of_names P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-int onig_number_of_captures P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-int onig_number_of_capture_histories P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-OnigCaptureTreeNode* onig_get_capture_tree P_((OnigRegion* region));\r
-ONIG_EXTERN\r
-int onig_capture_tree_traverse P_((OnigRegion* region, int at, int(*callback_func)(int,int,int,int,int,void*), void* arg));\r
-ONIG_EXTERN\r
-int onig_noname_group_capture_is_active P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-OnigEncoding onig_get_encoding P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-OnigOptionType onig_get_options P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-OnigCaseFoldType onig_get_case_fold_flag P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-OnigSyntaxType* onig_get_syntax P_((OnigRegex reg));\r
-ONIG_EXTERN\r
-int onig_set_default_syntax P_((OnigSyntaxType* syntax));\r
-ONIG_EXTERN\r
-void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));\r
-ONIG_EXTERN\r
-unsigned int onig_get_syntax_op P_((OnigSyntaxType* syntax));\r
-ONIG_EXTERN\r
-unsigned int onig_get_syntax_op2 P_((OnigSyntaxType* syntax));\r
-ONIG_EXTERN\r
-unsigned int onig_get_syntax_behavior P_((OnigSyntaxType* syntax));\r
-ONIG_EXTERN\r
-OnigOptionType onig_get_syntax_options P_((OnigSyntaxType* syntax));\r
-ONIG_EXTERN\r
-void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op));\r
-ONIG_EXTERN\r
-void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2));\r
-ONIG_EXTERN\r
-void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior));\r
-ONIG_EXTERN\r
-void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options));\r
-ONIG_EXTERN\r
-int onig_set_meta_char P_((OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code));\r
-ONIG_EXTERN\r
-void onig_copy_encoding P_((OnigEncoding to, OnigEncoding from));\r
-ONIG_EXTERN\r
-OnigCaseFoldType onig_get_default_case_fold_flag P_((void));\r
-ONIG_EXTERN\r
-int onig_set_default_case_fold_flag P_((OnigCaseFoldType case_fold_flag));\r
-ONIG_EXTERN\r
-unsigned int onig_get_match_stack_limit_size P_((void));\r
-ONIG_EXTERN\r
-int onig_set_match_stack_limit_size P_((unsigned int size));\r
-ONIG_EXTERN\r
-int onig_end P_((void));\r
-ONIG_EXTERN\r
-const char* onig_version P_((void));\r
-ONIG_EXTERN\r
-const char* onig_copyright P_((void));\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* ONIGURUMA_H */\r
+++ /dev/null
-/**********************************************************************\r
- regcomp.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2013 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regparse.h"\r
-\r
-OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;\r
-\r
-extern OnigCaseFoldType\r
-onig_get_default_case_fold_flag(void)\r
-{\r
- return OnigDefaultCaseFoldFlag;\r
-}\r
-\r
-extern int\r
-onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag)\r
-{\r
- OnigDefaultCaseFoldFlag = case_fold_flag;\r
- return 0;\r
-}\r
-\r
-\r
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
-static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];\r
-#endif\r
-\r
-static UChar*\r
-str_dup(UChar* s, UChar* end)\r
-{\r
- int len = (int)(end - s);\r
-\r
- if (len > 0) {\r
- UChar* r = (UChar* )xmalloc(len + 1);\r
- CHECK_NULL_RETURN(r);\r
- xmemcpy(r, s, len);\r
- r[len] = (UChar )0;\r
- return r;\r
- }\r
- else return NULL;\r
-}\r
-\r
-static void\r
-swap_node(Node* a, Node* b)\r
-{\r
- Node c;\r
- c = *a; *a = *b; *b = c;\r
-\r
- if (NTYPE(a) == NT_STR) {\r
- StrNode* sn = NSTR(a);\r
- if (sn->capa == 0) {\r
- int len = (int)(sn->end - sn->s);\r
- sn->s = sn->buf;\r
- sn->end = sn->s + len;\r
- }\r
- }\r
-\r
- if (NTYPE(b) == NT_STR) {\r
- StrNode* sn = NSTR(b);\r
- if (sn->capa == 0) {\r
- int len = (int)(sn->end - sn->s);\r
- sn->s = sn->buf;\r
- sn->end = sn->s + len;\r
- }\r
- }\r
-}\r
-\r
-static OnigDistance\r
-distance_add(OnigDistance d1, OnigDistance d2)\r
-{\r
- if (d1 == ONIG_INFINITE_DISTANCE || d2 == ONIG_INFINITE_DISTANCE)\r
- return ONIG_INFINITE_DISTANCE;\r
- else {\r
- if (d1 <= ONIG_INFINITE_DISTANCE - d2) return d1 + d2;\r
- else return ONIG_INFINITE_DISTANCE;\r
- }\r
-}\r
-\r
-static OnigDistance\r
-distance_multiply(OnigDistance d, int m)\r
-{\r
- if (m == 0) return 0;\r
-\r
- if (d < ONIG_INFINITE_DISTANCE / m)\r
- return d * m;\r
- else\r
- return ONIG_INFINITE_DISTANCE;\r
-}\r
-\r
-static int\r
-bitset_is_empty(BitSetRef bs)\r
-{\r
- int i;\r
- for (i = 0; i < (int )BITSET_SIZE; i++) {\r
- if (bs[i] != 0) return 0;\r
- }\r
- return 1;\r
-}\r
-\r
-#ifdef ONIG_DEBUG\r
-static int\r
-bitset_on_num(BitSetRef bs)\r
-{\r
- int i, n;\r
-\r
- n = 0;\r
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
- if (BITSET_AT(bs, i)) n++;\r
- }\r
- return n;\r
-}\r
-#endif\r
-\r
-extern int\r
-onig_bbuf_init(BBuf* buf, int size)\r
-{\r
- if (size <= 0) {\r
- size = 0;\r
- buf->p = NULL;\r
- }\r
- else {\r
- buf->p = (UChar* )xmalloc(size);\r
- if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);\r
- }\r
-\r
- buf->alloc = size;\r
- buf->used = 0;\r
- return 0;\r
-}\r
-\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-\r
-static int\r
-unset_addr_list_init(UnsetAddrList* uslist, int size)\r
-{\r
- UnsetAddr* p;\r
-\r
- p = (UnsetAddr* )xmalloc(sizeof(UnsetAddr)* size);\r
- CHECK_NULL_RETURN_MEMERR(p);\r
- uslist->num = 0;\r
- uslist->alloc = size;\r
- uslist->us = p;\r
- return 0;\r
-}\r
-\r
-static void\r
-unset_addr_list_end(UnsetAddrList* uslist)\r
-{\r
- if (IS_NOT_NULL(uslist->us))\r
- xfree(uslist->us);\r
-}\r
-\r
-static int\r
-unset_addr_list_add(UnsetAddrList* uslist, int offset, struct _Node* node)\r
-{\r
- UnsetAddr* p;\r
- int size;\r
-\r
- if (uslist->num >= uslist->alloc) {\r
- size = uslist->alloc * 2;\r
- p = (UnsetAddr* )xrealloc(uslist->us, sizeof(UnsetAddr) * size, sizeof(UnsetAddr) * uslist->alloc);\r
- CHECK_NULL_RETURN_MEMERR(p);\r
- uslist->alloc = size;\r
- uslist->us = p;\r
- }\r
-\r
- uslist->us[uslist->num].offset = offset;\r
- uslist->us[uslist->num].target = node;\r
- uslist->num++;\r
- return 0;\r
-}\r
-#endif /* USE_SUBEXP_CALL */\r
-\r
-\r
-static int\r
-add_opcode(regex_t* reg, int opcode)\r
-{\r
- BBUF_ADD1(reg, ((unsigned char)opcode));\r
- return 0;\r
-}\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-static int\r
-add_state_check_num(regex_t* reg, int num)\r
-{\r
- StateCheckNumType n = (StateCheckNumType )num;\r
-\r
- BBUF_ADD(reg, &n, SIZE_STATE_CHECK_NUM);\r
- return 0;\r
-}\r
-#endif\r
-\r
-static int\r
-add_rel_addr(regex_t* reg, int addr)\r
-{\r
- RelAddrType ra = (RelAddrType )addr;\r
-\r
- BBUF_ADD(reg, &ra, SIZE_RELADDR);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_abs_addr(regex_t* reg, int addr)\r
-{\r
- AbsAddrType ra = (AbsAddrType )addr;\r
-\r
- BBUF_ADD(reg, &ra, SIZE_ABSADDR);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_length(regex_t* reg, int len)\r
-{\r
- LengthType l = (LengthType )len;\r
-\r
- BBUF_ADD(reg, &l, SIZE_LENGTH);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_mem_num(regex_t* reg, int num)\r
-{\r
- MemNumType n = (MemNumType )num;\r
-\r
- BBUF_ADD(reg, &n, SIZE_MEMNUM);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_pointer(regex_t* reg, void* addr)\r
-{\r
- PointerType ptr = (PointerType )addr;\r
-\r
- BBUF_ADD(reg, &ptr, SIZE_POINTER);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_option(regex_t* reg, OnigOptionType option)\r
-{\r
- BBUF_ADD(reg, &option, SIZE_OPTION);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_opcode_rel_addr(regex_t* reg, int opcode, int addr)\r
-{\r
- int r;\r
-\r
- r = add_opcode(reg, opcode);\r
- if (r) return r;\r
- r = add_rel_addr(reg, addr);\r
- return r;\r
-}\r
-\r
-static int\r
-add_bytes(regex_t* reg, UChar* bytes, int len)\r
-{\r
- BBUF_ADD(reg, bytes, len);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_bitset(regex_t* reg, BitSetRef bs)\r
-{\r
- BBUF_ADD(reg, bs, SIZE_BITSET);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_opcode_option(regex_t* reg, int opcode, OnigOptionType option)\r
-{\r
- int r;\r
-\r
- r = add_opcode(reg, opcode);\r
- if (r) return r;\r
- r = add_option(reg, option);\r
- return r;\r
-}\r
-\r
-static int compile_length_tree(Node* node, regex_t* reg);\r
-static int compile_tree(Node* node, regex_t* reg);\r
-\r
-\r
-#define IS_NEED_STR_LEN_OP_EXACT(op) \\r
- ((op) == OP_EXACTN || (op) == OP_EXACTMB2N ||\\r
- (op) == OP_EXACTMB3N || (op) == OP_EXACTMBN || (op) == OP_EXACTN_IC)\r
-\r
-static int\r
-select_str_opcode(int mb_len, int str_len, int ignore_case)\r
-{\r
- int op;\r
-\r
- if (ignore_case) {\r
- switch (str_len) {\r
- case 1: op = OP_EXACT1_IC; break;\r
- default: op = OP_EXACTN_IC; break;\r
- }\r
- }\r
- else {\r
- switch (mb_len) {\r
- case 1:\r
- switch (str_len) {\r
- case 1: op = OP_EXACT1; break;\r
- case 2: op = OP_EXACT2; break;\r
- case 3: op = OP_EXACT3; break;\r
- case 4: op = OP_EXACT4; break;\r
- case 5: op = OP_EXACT5; break;\r
- default: op = OP_EXACTN; break;\r
- }\r
- break;\r
-\r
- case 2:\r
- switch (str_len) {\r
- case 1: op = OP_EXACTMB2N1; break;\r
- case 2: op = OP_EXACTMB2N2; break;\r
- case 3: op = OP_EXACTMB2N3; break;\r
- default: op = OP_EXACTMB2N; break;\r
- }\r
- break;\r
-\r
- case 3:\r
- op = OP_EXACTMB3N;\r
- break;\r
-\r
- default:\r
- op = OP_EXACTMBN;\r
- break;\r
- }\r
- }\r
- return op;\r
-}\r
-\r
-static int\r
-compile_tree_empty_check(Node* node, regex_t* reg, int empty_info)\r
-{\r
- int r;\r
- int saved_num_null_check = reg->num_null_check;\r
-\r
- if (empty_info != 0) {\r
- r = add_opcode(reg, OP_NULL_CHECK_START);\r
- if (r) return r;\r
- r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */\r
- if (r) return r;\r
- reg->num_null_check++;\r
- }\r
-\r
- r = compile_tree(node, reg);\r
- if (r) return r;\r
-\r
- if (empty_info != 0) {\r
- if (empty_info == NQ_TARGET_IS_EMPTY)\r
- r = add_opcode(reg, OP_NULL_CHECK_END);\r
- else if (empty_info == NQ_TARGET_IS_EMPTY_MEM)\r
- r = add_opcode(reg, OP_NULL_CHECK_END_MEMST);\r
- else if (empty_info == NQ_TARGET_IS_EMPTY_REC)\r
- r = add_opcode(reg, OP_NULL_CHECK_END_MEMST_PUSH);\r
-\r
- if (r) return r;\r
- r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */\r
- }\r
- return r;\r
-}\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-static int\r
-compile_call(CallNode* node, regex_t* reg)\r
-{\r
- int r;\r
-\r
- r = add_opcode(reg, OP_CALL);\r
- if (r) return r;\r
- r = unset_addr_list_add(node->unset_addr_list, BBUF_GET_OFFSET_POS(reg),\r
- node->target);\r
- if (r) return r;\r
- r = add_abs_addr(reg, 0 /*dummy addr.*/);\r
- return r;\r
-}\r
-#endif\r
-\r
-static int\r
-compile_tree_n_times(Node* node, int n, regex_t* reg)\r
-{\r
- int i, r;\r
-\r
- for (i = 0; i < n; i++) {\r
- r = compile_tree(node, reg);\r
- if (r) return r;\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-add_compile_string_length(UChar* s ARG_UNUSED, int mb_len, int str_len,\r
- regex_t* reg ARG_UNUSED, int ignore_case)\r
-{\r
- int len;\r
- int op = select_str_opcode(mb_len, str_len, ignore_case);\r
-\r
- len = SIZE_OPCODE;\r
-\r
- if (op == OP_EXACTMBN) len += SIZE_LENGTH;\r
- if (IS_NEED_STR_LEN_OP_EXACT(op))\r
- len += SIZE_LENGTH;\r
-\r
- len += mb_len * str_len;\r
- return len;\r
-}\r
-\r
-static int\r
-add_compile_string(UChar* s, int mb_len, int str_len,\r
- regex_t* reg, int ignore_case)\r
-{\r
- int op = select_str_opcode(mb_len, str_len, ignore_case);\r
- add_opcode(reg, op);\r
-\r
- if (op == OP_EXACTMBN)\r
- add_length(reg, mb_len);\r
-\r
- if (IS_NEED_STR_LEN_OP_EXACT(op)) {\r
- if (op == OP_EXACTN_IC)\r
- add_length(reg, mb_len * str_len);\r
- else\r
- add_length(reg, str_len);\r
- }\r
-\r
- add_bytes(reg, s, mb_len * str_len);\r
- return 0;\r
-}\r
-\r
-\r
-static int\r
-compile_length_string_node(Node* node, regex_t* reg)\r
-{\r
- int rlen, r, len, prev_len, slen, ambig;\r
- OnigEncoding enc = reg->enc;\r
- UChar *p, *prev;\r
- StrNode* sn;\r
-\r
- sn = NSTR(node);\r
- if (sn->end <= sn->s)\r
- return 0;\r
-\r
- ambig = NSTRING_IS_AMBIG(node);\r
-\r
- p = prev = sn->s;\r
- prev_len = enclen(enc, p);\r
- p += prev_len;\r
- slen = 1;\r
- rlen = 0;\r
-\r
- for (; p < sn->end; ) {\r
- len = enclen(enc, p);\r
- if (len == prev_len) {\r
- slen++;\r
- }\r
- else {\r
- r = add_compile_string_length(prev, prev_len, slen, reg, ambig);\r
- rlen += r;\r
- prev = p;\r
- slen = 1;\r
- prev_len = len;\r
- }\r
- p += len;\r
- }\r
- r = add_compile_string_length(prev, prev_len, slen, reg, ambig);\r
- rlen += r;\r
- return rlen;\r
-}\r
-\r
-static int\r
-compile_length_string_raw_node(StrNode* sn, regex_t* reg)\r
-{\r
- if (sn->end <= sn->s)\r
- return 0;\r
-\r
- return add_compile_string_length(sn->s, 1 /* sb */, (int)(sn->end - sn->s), reg, 0);\r
-}\r
-\r
-static int\r
-compile_string_node(Node* node, regex_t* reg)\r
-{\r
- int r, len, prev_len, slen, ambig;\r
- OnigEncoding enc = reg->enc;\r
- UChar *p, *prev, *end;\r
- StrNode* sn;\r
-\r
- sn = NSTR(node);\r
- if (sn->end <= sn->s)\r
- return 0;\r
-\r
- end = sn->end;\r
- ambig = NSTRING_IS_AMBIG(node);\r
-\r
- p = prev = sn->s;\r
- prev_len = enclen(enc, p);\r
- p += prev_len;\r
- slen = 1;\r
-\r
- for (; p < end; ) {\r
- len = enclen(enc, p);\r
- if (len == prev_len) {\r
- slen++;\r
- }\r
- else {\r
- r = add_compile_string(prev, prev_len, slen, reg, ambig);\r
- if (r) return r;\r
-\r
- prev = p;\r
- slen = 1;\r
- prev_len = len;\r
- }\r
-\r
- p += len;\r
- }\r
- return add_compile_string(prev, prev_len, slen, reg, ambig);\r
-}\r
-\r
-static int\r
-compile_string_raw_node(StrNode* sn, regex_t* reg)\r
-{\r
- if (sn->end <= sn->s)\r
- return 0;\r
-\r
- return add_compile_string(sn->s, 1 /* sb */, (int)(sn->end - sn->s), reg, 0);\r
-}\r
-\r
-static int\r
-add_multi_byte_cclass(BBuf* mbuf, regex_t* reg)\r
-{\r
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
- add_length(reg, mbuf->used);\r
- return add_bytes(reg, mbuf->p, mbuf->used);\r
-#else\r
- int r, pad_size;\r
- UChar* p = BBUF_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;\r
-\r
- GET_ALIGNMENT_PAD_SIZE(p, pad_size);\r
- add_length(reg, mbuf->used + (WORD_ALIGNMENT_SIZE - 1));\r
- if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);\r
-\r
- r = add_bytes(reg, mbuf->p, mbuf->used);\r
-\r
- /* padding for return value from compile_length_cclass_node() to be fix. */\r
- pad_size = (WORD_ALIGNMENT_SIZE - 1) - pad_size;\r
- if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);\r
- return r;\r
-#endif\r
-}\r
-\r
-static int\r
-compile_length_cclass_node(CClassNode* cc, regex_t* reg)\r
-{\r
- int len;\r
-\r
- if (IS_NCCLASS_SHARE(cc)) {\r
- len = SIZE_OPCODE + SIZE_POINTER;\r
- return len;\r
- }\r
-\r
- if (IS_NULL(cc->mbuf)) {\r
- len = SIZE_OPCODE + SIZE_BITSET;\r
- }\r
- else {\r
- if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {\r
- len = SIZE_OPCODE;\r
- }\r
- else {\r
- len = SIZE_OPCODE + SIZE_BITSET;\r
- }\r
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
- len += SIZE_LENGTH + cc->mbuf->used;\r
-#else\r
- len += SIZE_LENGTH + cc->mbuf->used + (WORD_ALIGNMENT_SIZE - 1);\r
-#endif\r
- }\r
-\r
- return len;\r
-}\r
-\r
-static int\r
-compile_cclass_node(CClassNode* cc, regex_t* reg)\r
-{\r
- int r;\r
-\r
- if (IS_NCCLASS_SHARE(cc)) {\r
- add_opcode(reg, OP_CCLASS_NODE);\r
- r = add_pointer(reg, cc);\r
- return r;\r
- }\r
-\r
- if (IS_NULL(cc->mbuf)) {\r
- if (IS_NCCLASS_NOT(cc))\r
- add_opcode(reg, OP_CCLASS_NOT);\r
- else\r
- add_opcode(reg, OP_CCLASS);\r
-\r
- r = add_bitset(reg, cc->bs);\r
- }\r
- else {\r
- if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {\r
- if (IS_NCCLASS_NOT(cc))\r
- add_opcode(reg, OP_CCLASS_MB_NOT);\r
- else\r
- add_opcode(reg, OP_CCLASS_MB);\r
-\r
- r = add_multi_byte_cclass(cc->mbuf, reg);\r
- }\r
- else {\r
- if (IS_NCCLASS_NOT(cc))\r
- add_opcode(reg, OP_CCLASS_MIX_NOT);\r
- else\r
- add_opcode(reg, OP_CCLASS_MIX);\r
-\r
- r = add_bitset(reg, cc->bs);\r
- if (r) return r;\r
- r = add_multi_byte_cclass(cc->mbuf, reg);\r
- }\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-entry_repeat_range(regex_t* reg, int id, int lower, int upper)\r
-{\r
-#define REPEAT_RANGE_ALLOC 4\r
-\r
- OnigRepeatRange* p;\r
-\r
- if (reg->repeat_range_alloc == 0) {\r
- p = (OnigRepeatRange* )xmalloc(sizeof(OnigRepeatRange) * REPEAT_RANGE_ALLOC);\r
- CHECK_NULL_RETURN_MEMERR(p);\r
- reg->repeat_range = p;\r
- reg->repeat_range_alloc = REPEAT_RANGE_ALLOC;\r
- }\r
- else if (reg->repeat_range_alloc <= id) {\r
- int n;\r
- n = reg->repeat_range_alloc + REPEAT_RANGE_ALLOC;\r
- p = (OnigRepeatRange* )xrealloc(reg->repeat_range,\r
- sizeof(OnigRepeatRange) * n,\r
- sizeof(OnigRepeatRange) * reg->repeat_range_alloc);\r
- CHECK_NULL_RETURN_MEMERR(p);\r
- reg->repeat_range = p;\r
- reg->repeat_range_alloc = n;\r
- }\r
- else {\r
- p = reg->repeat_range;\r
- }\r
-\r
- p[id].lower = lower;\r
- p[id].upper = (IS_REPEAT_INFINITE(upper) ? 0x7fffffff : upper);\r
- return 0;\r
-}\r
-\r
-static int\r
-compile_range_repeat_node(QtfrNode* qn, int target_len, int empty_info,\r
- regex_t* reg)\r
-{\r
- int r;\r
- int num_repeat = reg->num_repeat;\r
-\r
- r = add_opcode(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);\r
- if (r) return r;\r
- r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */\r
- reg->num_repeat++;\r
- if (r) return r;\r
- r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);\r
- if (r) return r;\r
-\r
- r = entry_repeat_range(reg, num_repeat, qn->lower, qn->upper);\r
- if (r) return r;\r
-\r
- r = compile_tree_empty_check(qn->target, reg, empty_info);\r
- if (r) return r;\r
-\r
- if (\r
-#ifdef USE_SUBEXP_CALL\r
- reg->num_call > 0 ||\r
-#endif\r
- IS_QUANTIFIER_IN_REPEAT(qn)) {\r
- r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);\r
- }\r
- else {\r
- r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);\r
- }\r
- if (r) return r;\r
- r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */\r
- return r;\r
-}\r
-\r
-static int\r
-is_anychar_star_quantifier(QtfrNode* qn)\r
-{\r
- if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) &&\r
- NTYPE(qn->target) == NT_CANY)\r
- return 1;\r
- else\r
- return 0;\r
-}\r
-\r
-#define QUANTIFIER_EXPAND_LIMIT_SIZE 50\r
-#define CKN_ON (ckn > 0)\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-\r
-static int\r
-compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)\r
-{\r
- int len, mod_tlen, cklen;\r
- int ckn;\r
- int infinite = IS_REPEAT_INFINITE(qn->upper);\r
- int empty_info = qn->target_empty_info;\r
- int tlen = compile_length_tree(qn->target, reg);\r
-\r
- if (tlen < 0) return tlen;\r
-\r
- ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0);\r
-\r
- cklen = (CKN_ON ? SIZE_STATE_CHECK_NUM: 0);\r
-\r
- /* anychar repeat */\r
- if (NTYPE(qn->target) == NT_CANY) {\r
- if (qn->greedy && infinite) {\r
- if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON)\r
- return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower + cklen;\r
- else\r
- return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower + cklen;\r
- }\r
- }\r
-\r
- if (empty_info != 0)\r
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
- else\r
- mod_tlen = tlen;\r
-\r
- if (infinite && qn->lower <= 1) {\r
- if (qn->greedy) {\r
- if (qn->lower == 1)\r
- len = SIZE_OP_JUMP;\r
- else\r
- len = 0;\r
-\r
- len += SIZE_OP_PUSH + cklen + mod_tlen + SIZE_OP_JUMP;\r
- }\r
- else {\r
- if (qn->lower == 0)\r
- len = SIZE_OP_JUMP;\r
- else\r
- len = 0;\r
-\r
- len += mod_tlen + SIZE_OP_PUSH + cklen;\r
- }\r
- }\r
- else if (qn->upper == 0) {\r
- if (qn->is_refered != 0) /* /(?<n>..){0}/ */\r
- len = SIZE_OP_JUMP + tlen;\r
- else\r
- len = 0;\r
- }\r
- else if (qn->upper == 1 && qn->greedy) {\r
- if (qn->lower == 0) {\r
- if (CKN_ON) {\r
- len = SIZE_OP_STATE_CHECK_PUSH + tlen;\r
- }\r
- else {\r
- len = SIZE_OP_PUSH + tlen;\r
- }\r
- }\r
- else {\r
- len = tlen;\r
- }\r
- }\r
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
- len = SIZE_OP_PUSH + cklen + SIZE_OP_JUMP + tlen;\r
- }\r
- else {\r
- len = SIZE_OP_REPEAT_INC\r
- + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;\r
- if (CKN_ON)\r
- len += SIZE_OP_STATE_CHECK;\r
- }\r
-\r
- return len;\r
-}\r
-\r
-static int\r
-compile_quantifier_node(QtfrNode* qn, regex_t* reg)\r
-{\r
- int r, mod_tlen;\r
- int ckn;\r
- int infinite = IS_REPEAT_INFINITE(qn->upper);\r
- int empty_info = qn->target_empty_info;\r
- int tlen = compile_length_tree(qn->target, reg);\r
-\r
- if (tlen < 0) return tlen;\r
-\r
- ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0);\r
-\r
- if (is_anychar_star_quantifier(qn)) {\r
- r = compile_tree_n_times(qn->target, qn->lower, reg);\r
- if (r) return r;\r
- if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON) {\r
- if (IS_MULTILINE(reg->options))\r
- r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
- else\r
- r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);\r
- if (r) return r;\r
- if (CKN_ON) {\r
- r = add_state_check_num(reg, ckn);\r
- if (r) return r;\r
- }\r
-\r
- return add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);\r
- }\r
- else {\r
- if (IS_MULTILINE(reg->options)) {\r
- r = add_opcode(reg, (CKN_ON ?\r
- OP_STATE_CHECK_ANYCHAR_ML_STAR\r
- : OP_ANYCHAR_ML_STAR));\r
- }\r
- else {\r
- r = add_opcode(reg, (CKN_ON ?\r
- OP_STATE_CHECK_ANYCHAR_STAR\r
- : OP_ANYCHAR_STAR));\r
- }\r
- if (r) return r;\r
- if (CKN_ON)\r
- r = add_state_check_num(reg, ckn);\r
-\r
- return r;\r
- }\r
- }\r
-\r
- if (empty_info != 0)\r
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
- else\r
- mod_tlen = tlen;\r
-\r
- if (infinite && qn->lower <= 1) {\r
- if (qn->greedy) {\r
- if (qn->lower == 1) {\r
- r = add_opcode_rel_addr(reg, OP_JUMP,\r
- (CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH));\r
- if (r) return r;\r
- }\r
-\r
- if (CKN_ON) {\r
- r = add_opcode(reg, OP_STATE_CHECK_PUSH);\r
- if (r) return r;\r
- r = add_state_check_num(reg, ckn);\r
- if (r) return r;\r
- r = add_rel_addr(reg, mod_tlen + SIZE_OP_JUMP);\r
- }\r
- else {\r
- r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);\r
- }\r
- if (r) return r;\r
- r = compile_tree_empty_check(qn->target, reg, empty_info);\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_JUMP,\r
- -(mod_tlen + (int )SIZE_OP_JUMP\r
- + (int )(CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH)));\r
- }\r
- else {\r
- if (qn->lower == 0) {\r
- r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);\r
- if (r) return r;\r
- }\r
- r = compile_tree_empty_check(qn->target, reg, empty_info);\r
- if (r) return r;\r
- if (CKN_ON) {\r
- r = add_opcode(reg, OP_STATE_CHECK_PUSH_OR_JUMP);\r
- if (r) return r;\r
- r = add_state_check_num(reg, ckn);\r
- if (r) return r;\r
- r = add_rel_addr(reg,\r
- -(mod_tlen + (int )SIZE_OP_STATE_CHECK_PUSH_OR_JUMP));\r
- }\r
- else\r
- r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));\r
- }\r
- }\r
- else if (qn->upper == 0) {\r
- if (qn->is_refered != 0) { /* /(?<n>..){0}/ */\r
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
- if (r) return r;\r
- r = compile_tree(qn->target, reg);\r
- }\r
- else\r
- r = 0;\r
- }\r
- else if (qn->upper == 1 && qn->greedy) {\r
- if (qn->lower == 0) {\r
- if (CKN_ON) {\r
- r = add_opcode(reg, OP_STATE_CHECK_PUSH);\r
- if (r) return r;\r
- r = add_state_check_num(reg, ckn);\r
- if (r) return r;\r
- r = add_rel_addr(reg, tlen);\r
- }\r
- else {\r
- r = add_opcode_rel_addr(reg, OP_PUSH, tlen);\r
- }\r
- if (r) return r;\r
- }\r
-\r
- r = compile_tree(qn->target, reg);\r
- }\r
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
- if (CKN_ON) {\r
- r = add_opcode(reg, OP_STATE_CHECK_PUSH);\r
- if (r) return r;\r
- r = add_state_check_num(reg, ckn);\r
- if (r) return r;\r
- r = add_rel_addr(reg, SIZE_OP_JUMP);\r
- }\r
- else {\r
- r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);\r
- }\r
-\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
- if (r) return r;\r
- r = compile_tree(qn->target, reg);\r
- }\r
- else {\r
- r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);\r
- if (CKN_ON) {\r
- if (r) return r;\r
- r = add_opcode(reg, OP_STATE_CHECK);\r
- if (r) return r;\r
- r = add_state_check_num(reg, ckn);\r
- }\r
- }\r
- return r;\r
-}\r
-\r
-#else /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
-static int\r
-compile_length_quantifier_node(QtfrNode* qn, regex_t* reg)\r
-{\r
- int len, mod_tlen;\r
- int infinite = IS_REPEAT_INFINITE(qn->upper);\r
- int empty_info = qn->target_empty_info;\r
- int tlen = compile_length_tree(qn->target, reg);\r
-\r
- if (tlen < 0) return tlen;\r
-\r
- /* anychar repeat */\r
- if (NTYPE(qn->target) == NT_CANY) {\r
- if (qn->greedy && infinite) {\r
- if (IS_NOT_NULL(qn->next_head_exact))\r
- return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower;\r
- else\r
- return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower;\r
- }\r
- }\r
-\r
- if (empty_info != 0)\r
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
- else\r
- mod_tlen = tlen;\r
-\r
- if (infinite &&\r
- (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
- if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {\r
- len = SIZE_OP_JUMP;\r
- }\r
- else {\r
- len = tlen * qn->lower;\r
- }\r
-\r
- if (qn->greedy) {\r
- if (IS_NOT_NULL(qn->head_exact))\r
- len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;\r
- else if (IS_NOT_NULL(qn->next_head_exact))\r
- len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;\r
- else\r
- len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;\r
- }\r
- else\r
- len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH;\r
- }\r
- else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */\r
- len = SIZE_OP_JUMP + tlen;\r
- }\r
- else if (!infinite && qn->greedy &&\r
- (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper\r
- <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
- len = tlen * qn->lower;\r
- len += (SIZE_OP_PUSH + tlen) * (qn->upper - qn->lower);\r
- }\r
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
- len = SIZE_OP_PUSH + SIZE_OP_JUMP + tlen;\r
- }\r
- else {\r
- len = SIZE_OP_REPEAT_INC\r
- + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;\r
- }\r
-\r
- return len;\r
-}\r
-\r
-static int\r
-compile_quantifier_node(QtfrNode* qn, regex_t* reg)\r
-{\r
- int i, r, mod_tlen;\r
- int infinite = IS_REPEAT_INFINITE(qn->upper);\r
- int empty_info = qn->target_empty_info;\r
- int tlen = compile_length_tree(qn->target, reg);\r
-\r
- if (tlen < 0) return tlen;\r
-\r
- if (is_anychar_star_quantifier(qn)) {\r
- r = compile_tree_n_times(qn->target, qn->lower, reg);\r
- if (r) return r;\r
- if (IS_NOT_NULL(qn->next_head_exact)) {\r
- if (IS_MULTILINE(reg->options))\r
- r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
- else\r
- r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);\r
- if (r) return r;\r
- return add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);\r
- }\r
- else {\r
- if (IS_MULTILINE(reg->options))\r
- return add_opcode(reg, OP_ANYCHAR_ML_STAR);\r
- else\r
- return add_opcode(reg, OP_ANYCHAR_STAR);\r
- }\r
- }\r
-\r
- if (empty_info != 0)\r
- mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END);\r
- else\r
- mod_tlen = tlen;\r
-\r
- if (infinite &&\r
- (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
- if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {\r
- if (qn->greedy) {\r
- if (IS_NOT_NULL(qn->head_exact))\r
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);\r
- else if (IS_NOT_NULL(qn->next_head_exact))\r
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);\r
- else\r
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH);\r
- }\r
- else {\r
- r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);\r
- }\r
- if (r) return r;\r
- }\r
- else {\r
- r = compile_tree_n_times(qn->target, qn->lower, reg);\r
- if (r) return r;\r
- }\r
-\r
- if (qn->greedy) {\r
- if (IS_NOT_NULL(qn->head_exact)) {\r
- r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,\r
- mod_tlen + SIZE_OP_JUMP);\r
- if (r) return r;\r
- add_bytes(reg, NSTR(qn->head_exact)->s, 1);\r
- r = compile_tree_empty_check(qn->target, reg, empty_info);\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_JUMP,\r
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));\r
- }\r
- else if (IS_NOT_NULL(qn->next_head_exact)) {\r
- r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,\r
- mod_tlen + SIZE_OP_JUMP);\r
- if (r) return r;\r
- add_bytes(reg, NSTR(qn->next_head_exact)->s, 1);\r
- r = compile_tree_empty_check(qn->target, reg, empty_info);\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_JUMP,\r
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));\r
- }\r
- else {\r
- r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);\r
- if (r) return r;\r
- r = compile_tree_empty_check(qn->target, reg, empty_info);\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_JUMP,\r
- -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));\r
- }\r
- }\r
- else {\r
- r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);\r
- if (r) return r;\r
- r = compile_tree_empty_check(qn->target, reg, empty_info);\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));\r
- }\r
- }\r
- else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */\r
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
- if (r) return r;\r
- r = compile_tree(qn->target, reg);\r
- }\r
- else if (!infinite && qn->greedy &&\r
- (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper\r
- <= QUANTIFIER_EXPAND_LIMIT_SIZE)) {\r
- int n = qn->upper - qn->lower;\r
-\r
- r = compile_tree_n_times(qn->target, qn->lower, reg);\r
- if (r) return r;\r
-\r
- for (i = 0; i < n; i++) {\r
- r = add_opcode_rel_addr(reg, OP_PUSH,\r
- (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH);\r
- if (r) return r;\r
- r = compile_tree(qn->target, reg);\r
- if (r) return r;\r
- }\r
- }\r
- else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */\r
- r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_JUMP, tlen);\r
- if (r) return r;\r
- r = compile_tree(qn->target, reg);\r
- }\r
- else {\r
- r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg);\r
- }\r
- return r;\r
-}\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
-static int\r
-compile_length_option_node(EncloseNode* node, regex_t* reg)\r
-{\r
- int tlen;\r
- OnigOptionType prev = reg->options;\r
-\r
- reg->options = node->option;\r
- tlen = compile_length_tree(node->target, reg);\r
- reg->options = prev;\r
-\r
- if (tlen < 0) return tlen;\r
-\r
- if (IS_DYNAMIC_OPTION(prev ^ node->option)) {\r
- return SIZE_OP_SET_OPTION_PUSH + SIZE_OP_SET_OPTION + SIZE_OP_FAIL\r
- + tlen + SIZE_OP_SET_OPTION;\r
- }\r
- else\r
- return tlen;\r
-}\r
-\r
-static int\r
-compile_option_node(EncloseNode* node, regex_t* reg)\r
-{\r
- int r;\r
- OnigOptionType prev = reg->options;\r
-\r
- if (IS_DYNAMIC_OPTION(prev ^ node->option)) {\r
- r = add_opcode_option(reg, OP_SET_OPTION_PUSH, node->option);\r
- if (r) return r;\r
- r = add_opcode_option(reg, OP_SET_OPTION, prev);\r
- if (r) return r;\r
- r = add_opcode(reg, OP_FAIL);\r
- if (r) return r;\r
- }\r
-\r
- reg->options = node->option;\r
- r = compile_tree(node->target, reg);\r
- reg->options = prev;\r
-\r
- if (IS_DYNAMIC_OPTION(prev ^ node->option)) {\r
- if (r) return r;\r
- r = add_opcode_option(reg, OP_SET_OPTION, prev);\r
- }\r
- return r;\r
-}\r
-\r
-static int\r
-compile_length_enclose_node(EncloseNode* node, regex_t* reg)\r
-{\r
- int len;\r
- int tlen;\r
-\r
- if (node->type == ENCLOSE_OPTION)\r
- return compile_length_option_node(node, reg);\r
-\r
- if (node->target) {\r
- tlen = compile_length_tree(node->target, reg);\r
- if (tlen < 0) return tlen;\r
- }\r
- else\r
- tlen = 0;\r
-\r
- switch (node->type) {\r
- case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
- if (IS_ENCLOSE_CALLED(node)) {\r
- len = SIZE_OP_MEMORY_START_PUSH + tlen\r
- + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN;\r
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
- len += (IS_ENCLOSE_RECURSION(node)\r
- ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);\r
- else\r
- len += (IS_ENCLOSE_RECURSION(node)\r
- ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);\r
- }\r
- else\r
-#endif\r
- {\r
- if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))\r
- len = SIZE_OP_MEMORY_START_PUSH;\r
- else\r
- len = SIZE_OP_MEMORY_START;\r
-\r
- len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)\r
- ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END);\r
- }\r
- break;\r
-\r
- case ENCLOSE_STOP_BACKTRACK:\r
- if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {\r
- QtfrNode* qn = NQTFR(node->target);\r
- tlen = compile_length_tree(qn->target, reg);\r
- if (tlen < 0) return tlen;\r
-\r
- len = tlen * qn->lower\r
- + SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP;\r
- }\r
- else {\r
- len = SIZE_OP_PUSH_STOP_BT + tlen + SIZE_OP_POP_STOP_BT;\r
- }\r
- break;\r
-\r
- default:\r
- return ONIGERR_TYPE_BUG;\r
- break;\r
- }\r
-\r
- return len;\r
-}\r
-\r
-static int get_char_length_tree(Node* node, regex_t* reg, int* len);\r
-\r
-static int\r
-compile_enclose_node(EncloseNode* node, regex_t* reg)\r
-{\r
- int r, len;\r
-\r
- if (node->type == ENCLOSE_OPTION)\r
- return compile_option_node(node, reg);\r
-\r
- switch (node->type) {\r
- case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
- if (IS_ENCLOSE_CALLED(node)) {\r
- r = add_opcode(reg, OP_CALL);\r
- if (r) return r;\r
- node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;\r
- node->state |= NST_ADDR_FIXED;\r
- r = add_abs_addr(reg, (int )node->call_addr);\r
- if (r) return r;\r
- len = compile_length_tree(node->target, reg);\r
- len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);\r
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
- len += (IS_ENCLOSE_RECURSION(node)\r
- ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);\r
- else\r
- len += (IS_ENCLOSE_RECURSION(node)\r
- ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);\r
-\r
- r = add_opcode_rel_addr(reg, OP_JUMP, len);\r
- if (r) return r;\r
- }\r
-#endif\r
- if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum))\r
- r = add_opcode(reg, OP_MEMORY_START_PUSH);\r
- else\r
- r = add_opcode(reg, OP_MEMORY_START);\r
- if (r) return r;\r
- r = add_mem_num(reg, node->regnum);\r
- if (r) return r;\r
- r = compile_tree(node->target, reg);\r
- if (r) return r;\r
-#ifdef USE_SUBEXP_CALL\r
- if (IS_ENCLOSE_CALLED(node)) {\r
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
- r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)\r
- ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));\r
- else\r
- r = add_opcode(reg, (IS_ENCLOSE_RECURSION(node)\r
- ? OP_MEMORY_END_REC : OP_MEMORY_END));\r
-\r
- if (r) return r;\r
- r = add_mem_num(reg, node->regnum);\r
- if (r) return r;\r
- r = add_opcode(reg, OP_RETURN);\r
- }\r
- else\r
-#endif\r
- {\r
- if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))\r
- r = add_opcode(reg, OP_MEMORY_END_PUSH);\r
- else\r
- r = add_opcode(reg, OP_MEMORY_END);\r
- if (r) return r;\r
- r = add_mem_num(reg, node->regnum);\r
- }\r
- break;\r
-\r
- case ENCLOSE_STOP_BACKTRACK:\r
- if (IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(node)) {\r
- QtfrNode* qn = NQTFR(node->target);\r
- r = compile_tree_n_times(qn->target, qn->lower, reg);\r
- if (r) return r;\r
-\r
- len = compile_length_tree(qn->target, reg);\r
- if (len < 0) return len;\r
-\r
- r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP + SIZE_OP_JUMP);\r
- if (r) return r;\r
- r = compile_tree(qn->target, reg);\r
- if (r) return r;\r
- r = add_opcode(reg, OP_POP);\r
- if (r) return r;\r
- r = add_opcode_rel_addr(reg, OP_JUMP,\r
- -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP));\r
- }\r
- else {\r
- r = add_opcode(reg, OP_PUSH_STOP_BT);\r
- if (r) return r;\r
- r = compile_tree(node->target, reg);\r
- if (r) return r;\r
- r = add_opcode(reg, OP_POP_STOP_BT);\r
- }\r
- break;\r
-\r
- default:\r
- return ONIGERR_TYPE_BUG;\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-compile_length_anchor_node(AnchorNode* node, regex_t* reg)\r
-{\r
- int len;\r
- int tlen = 0;\r
-\r
- if (node->target) {\r
- tlen = compile_length_tree(node->target, reg);\r
- if (tlen < 0) return tlen;\r
- }\r
-\r
- switch (node->type) {\r
- case ANCHOR_PREC_READ:\r
- len = SIZE_OP_PUSH_POS + tlen + SIZE_OP_POP_POS;\r
- break;\r
- case ANCHOR_PREC_READ_NOT:\r
- len = SIZE_OP_PUSH_POS_NOT + tlen + SIZE_OP_FAIL_POS;\r
- break;\r
- case ANCHOR_LOOK_BEHIND:\r
- len = SIZE_OP_LOOK_BEHIND + tlen;\r
- break;\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- len = SIZE_OP_PUSH_LOOK_BEHIND_NOT + tlen + SIZE_OP_FAIL_LOOK_BEHIND_NOT;\r
- break;\r
-\r
- default:\r
- len = SIZE_OPCODE;\r
- break;\r
- }\r
-\r
- return len;\r
-}\r
-\r
-static int\r
-compile_anchor_node(AnchorNode* node, regex_t* reg)\r
-{\r
- int r, len;\r
-\r
- switch (node->type) {\r
- case ANCHOR_BEGIN_BUF: r = add_opcode(reg, OP_BEGIN_BUF); break;\r
- case ANCHOR_END_BUF: r = add_opcode(reg, OP_END_BUF); break;\r
- case ANCHOR_BEGIN_LINE: r = add_opcode(reg, OP_BEGIN_LINE); break;\r
- case ANCHOR_END_LINE: r = add_opcode(reg, OP_END_LINE); break;\r
- case ANCHOR_SEMI_END_BUF: r = add_opcode(reg, OP_SEMI_END_BUF); break;\r
- case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;\r
-\r
- case ANCHOR_WORD_BOUND: r = add_opcode(reg, OP_WORD_BOUND); break;\r
- case ANCHOR_NOT_WORD_BOUND: r = add_opcode(reg, OP_NOT_WORD_BOUND); break;\r
-#ifdef USE_WORD_BEGIN_END\r
- case ANCHOR_WORD_BEGIN: r = add_opcode(reg, OP_WORD_BEGIN); break;\r
- case ANCHOR_WORD_END: r = add_opcode(reg, OP_WORD_END); break;\r
-#endif\r
-\r
- case ANCHOR_PREC_READ:\r
- r = add_opcode(reg, OP_PUSH_POS);\r
- if (r) return r;\r
- r = compile_tree(node->target, reg);\r
- if (r) return r;\r
- r = add_opcode(reg, OP_POP_POS);\r
- break;\r
-\r
- case ANCHOR_PREC_READ_NOT:\r
- len = compile_length_tree(node->target, reg);\r
- if (len < 0) return len;\r
- r = add_opcode_rel_addr(reg, OP_PUSH_POS_NOT, len + SIZE_OP_FAIL_POS);\r
- if (r) return r;\r
- r = compile_tree(node->target, reg);\r
- if (r) return r;\r
- r = add_opcode(reg, OP_FAIL_POS);\r
- break;\r
-\r
- case ANCHOR_LOOK_BEHIND:\r
- {\r
- int n;\r
- r = add_opcode(reg, OP_LOOK_BEHIND);\r
- if (r) return r;\r
- if (node->char_len < 0) {\r
- r = get_char_length_tree(node->target, reg, &n);\r
- if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
- }\r
- else\r
- n = node->char_len;\r
- r = add_length(reg, n);\r
- if (r) return r;\r
- r = compile_tree(node->target, reg);\r
- }\r
- break;\r
-\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- {\r
- int n;\r
- len = compile_length_tree(node->target, reg);\r
- r = add_opcode_rel_addr(reg, OP_PUSH_LOOK_BEHIND_NOT,\r
- len + SIZE_OP_FAIL_LOOK_BEHIND_NOT);\r
- if (r) return r;\r
- if (node->char_len < 0) {\r
- r = get_char_length_tree(node->target, reg, &n);\r
- if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
- }\r
- else\r
- n = node->char_len;\r
- r = add_length(reg, n);\r
- if (r) return r;\r
- r = compile_tree(node->target, reg);\r
- if (r) return r;\r
- r = add_opcode(reg, OP_FAIL_LOOK_BEHIND_NOT);\r
- }\r
- break;\r
-\r
- default:\r
- return ONIGERR_TYPE_BUG;\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-compile_length_tree(Node* node, regex_t* reg)\r
-{\r
- int len, type, r;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- len = 0;\r
- do {\r
- r = compile_length_tree(NCAR(node), reg);\r
- if (r < 0) return r;\r
- len += r;\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- r = len;\r
- break;\r
-\r
- case NT_ALT:\r
- {\r
- int n;\r
-\r
- n = r = 0;\r
- do {\r
- r += compile_length_tree(NCAR(node), reg);\r
- n++;\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- r += (SIZE_OP_PUSH + SIZE_OP_JUMP) * (n - 1);\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- if (NSTRING_IS_RAW(node))\r
- r = compile_length_string_raw_node(NSTR(node), reg);\r
- else\r
- r = compile_length_string_node(node, reg);\r
- break;\r
-\r
- case NT_CCLASS:\r
- r = compile_length_cclass_node(NCCLASS(node), reg);\r
- break;\r
-\r
- case NT_CTYPE:\r
- case NT_CANY:\r
- r = SIZE_OPCODE;\r
- break;\r
-\r
- case NT_BREF:\r
- {\r
- BRefNode* br = NBREF(node);\r
-\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- if (IS_BACKREF_NEST_LEVEL(br)) {\r
- r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +\r
- SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
- }\r
- else\r
-#endif\r
- if (br->back_num == 1) {\r
- r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)\r
- ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));\r
- }\r
- else {\r
- r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);\r
- }\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- r = SIZE_OP_CALL;\r
- break;\r
-#endif\r
-\r
- case NT_QTFR:\r
- r = compile_length_quantifier_node(NQTFR(node), reg);\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- r = compile_length_enclose_node(NENCLOSE(node), reg);\r
- break;\r
-\r
- case NT_ANCHOR:\r
- r = compile_length_anchor_node(NANCHOR(node), reg);\r
- break;\r
-\r
- default:\r
- return ONIGERR_TYPE_BUG;\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-compile_tree(Node* node, regex_t* reg)\r
-{\r
- int n, type, len, pos, r = 0;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- do {\r
- r = compile_tree(NCAR(node), reg);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_ALT:\r
- {\r
- Node* x = node;\r
- len = 0;\r
- do {\r
- len += compile_length_tree(NCAR(x), reg);\r
- if (NCDR(x) != NULL) {\r
- len += SIZE_OP_PUSH + SIZE_OP_JUMP;\r
- }\r
- } while (IS_NOT_NULL(x = NCDR(x)));\r
- pos = reg->used + len; /* goal position */\r
-\r
- do {\r
- len = compile_length_tree(NCAR(node), reg);\r
- if (IS_NOT_NULL(NCDR(node))) {\r
- r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_JUMP);\r
- if (r) break;\r
- }\r
- r = compile_tree(NCAR(node), reg);\r
- if (r) break;\r
- if (IS_NOT_NULL(NCDR(node))) {\r
- len = pos - (reg->used + SIZE_OP_JUMP);\r
- r = add_opcode_rel_addr(reg, OP_JUMP, len);\r
- if (r) break;\r
- }\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- if (NSTRING_IS_RAW(node))\r
- r = compile_string_raw_node(NSTR(node), reg);\r
- else\r
- r = compile_string_node(node, reg);\r
- break;\r
-\r
- case NT_CCLASS:\r
- r = compile_cclass_node(NCCLASS(node), reg);\r
- break;\r
-\r
- case NT_CTYPE:\r
- {\r
- int op;\r
-\r
- switch (NCTYPE(node)->ctype) {\r
- case ONIGENC_CTYPE_WORD:\r
- if (NCTYPE(node)->not != 0) op = OP_NOT_WORD;\r
- else op = OP_WORD;\r
- break;\r
- default:\r
- return ONIGERR_TYPE_BUG;\r
- break;\r
- }\r
- r = add_opcode(reg, op);\r
- }\r
- break;\r
-\r
- case NT_CANY:\r
- if (IS_MULTILINE(reg->options))\r
- r = add_opcode(reg, OP_ANYCHAR_ML);\r
- else\r
- r = add_opcode(reg, OP_ANYCHAR);\r
- break;\r
-\r
- case NT_BREF:\r
- {\r
- BRefNode* br = NBREF(node);\r
-\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- if (IS_BACKREF_NEST_LEVEL(br)) {\r
- r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);\r
- if (r) return r;\r
- r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));\r
- if (r) return r;\r
- r = add_length(reg, br->nest_level);\r
- if (r) return r;\r
-\r
- goto add_bacref_mems;\r
- }\r
- else\r
-#endif\r
- if (br->back_num == 1) {\r
- n = br->back_static[0];\r
- if (IS_IGNORECASE(reg->options)) {\r
- r = add_opcode(reg, OP_BACKREFN_IC);\r
- if (r) return r;\r
- r = add_mem_num(reg, n);\r
- }\r
- else {\r
- switch (n) {\r
- case 1: r = add_opcode(reg, OP_BACKREF1); break;\r
- case 2: r = add_opcode(reg, OP_BACKREF2); break;\r
- default:\r
- r = add_opcode(reg, OP_BACKREFN);\r
- if (r) return r;\r
- r = add_mem_num(reg, n);\r
- break;\r
- }\r
- }\r
- }\r
- else {\r
- int i;\r
- int* p;\r
-\r
- if (IS_IGNORECASE(reg->options)) {\r
- r = add_opcode(reg, OP_BACKREF_MULTI_IC);\r
- }\r
- else {\r
- r = add_opcode(reg, OP_BACKREF_MULTI);\r
- }\r
- if (r) return r;\r
-\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- add_bacref_mems:\r
-#endif\r
- r = add_length(reg, br->back_num);\r
- if (r) return r;\r
- p = BACKREFS_P(br);\r
- for (i = br->back_num - 1; i >= 0; i--) {\r
- r = add_mem_num(reg, p[i]);\r
- if (r) return r;\r
- }\r
- }\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- r = compile_call(NCALL(node), reg);\r
- break;\r
-#endif\r
-\r
- case NT_QTFR:\r
- r = compile_quantifier_node(NQTFR(node), reg);\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- r = compile_enclose_node(NENCLOSE(node), reg);\r
- break;\r
-\r
- case NT_ANCHOR:\r
- r = compile_anchor_node(NANCHOR(node), reg);\r
- break;\r
-\r
- default:\r
-#ifdef ONIG_DEBUG\r
- fprintf(stderr, "compile_tree: undefined node type %d\n", NTYPE(node));\r
-#endif\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-#ifdef USE_NAMED_GROUP\r
-\r
-static int\r
-noname_disable_map(Node** plink, GroupNumRemap* map, int* counter)\r
-{\r
- int r = 0;\r
- Node* node = *plink;\r
-\r
- switch (NTYPE(node)) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- do {\r
- r = noname_disable_map(&(NCAR(node)), map, counter);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_QTFR:\r
- {\r
- Node** ptarget = &(NQTFR(node)->target);\r
- Node* old = *ptarget;\r
- r = noname_disable_map(ptarget, map, counter);\r
- if (*ptarget != old && NTYPE(*ptarget) == NT_QTFR) {\r
- onig_reduce_nested_quantifier(node, *ptarget);\r
- }\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
- if (en->type == ENCLOSE_MEMORY) {\r
- if (IS_ENCLOSE_NAMED_GROUP(en)) {\r
- (*counter)++;\r
- map[en->regnum].new_val = *counter;\r
- en->regnum = *counter;\r
- r = noname_disable_map(&(en->target), map, counter);\r
- }\r
- else {\r
- *plink = en->target;\r
- en->target = NULL_NODE;\r
- onig_node_free(node);\r
- r = noname_disable_map(plink, map, counter);\r
- }\r
- }\r
- else\r
- r = noname_disable_map(&(en->target), map, counter);\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-renumber_node_backref(Node* node, GroupNumRemap* map)\r
-{\r
- int i, pos, n, old_num;\r
- int *backs;\r
- BRefNode* bn = NBREF(node);\r
-\r
- if (! IS_BACKREF_NAME_REF(bn))\r
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;\r
-\r
- old_num = bn->back_num;\r
- if (IS_NULL(bn->back_dynamic))\r
- backs = bn->back_static;\r
- else\r
- backs = bn->back_dynamic;\r
-\r
- for (i = 0, pos = 0; i < old_num; i++) {\r
- n = map[backs[i]].new_val;\r
- if (n > 0) {\r
- backs[pos] = n;\r
- pos++;\r
- }\r
- }\r
-\r
- bn->back_num = pos;\r
- return 0;\r
-}\r
-\r
-static int\r
-renumber_by_map(Node* node, GroupNumRemap* map)\r
-{\r
- int r = 0;\r
-\r
- switch (NTYPE(node)) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- do {\r
- r = renumber_by_map(NCAR(node), map);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
- case NT_QTFR:\r
- r = renumber_by_map(NQTFR(node)->target, map);\r
- break;\r
- case NT_ENCLOSE:\r
- r = renumber_by_map(NENCLOSE(node)->target, map);\r
- break;\r
-\r
- case NT_BREF:\r
- r = renumber_node_backref(node, map);\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-numbered_ref_check(Node* node)\r
-{\r
- int r = 0;\r
-\r
- switch (NTYPE(node)) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- do {\r
- r = numbered_ref_check(NCAR(node));\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
- case NT_QTFR:\r
- r = numbered_ref_check(NQTFR(node)->target);\r
- break;\r
- case NT_ENCLOSE:\r
- r = numbered_ref_check(NENCLOSE(node)->target);\r
- break;\r
-\r
- case NT_BREF:\r
- if (! IS_BACKREF_NAME_REF(NBREF(node)))\r
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)\r
-{\r
- int r, i, pos, counter;\r
- int Result;\r
- BitStatusType loc;\r
- GroupNumRemap* map;\r
-\r
- map = (GroupNumRemap* )xmalloc(sizeof(GroupNumRemap) * (env->num_mem + 1));\r
- CHECK_NULL_RETURN_MEMERR(map);\r
- for (i = 1; i <= env->num_mem; i++) {\r
- map[i].new_val = 0;\r
- }\r
- counter = 0;\r
- r = noname_disable_map(root, map, &counter);\r
- if (r != 0) return r;\r
-\r
- r = renumber_by_map(*root, map);\r
- if (r != 0) return r;\r
-\r
- for (i = 1, pos = 1; i <= env->num_mem; i++) {\r
- if (map[i].new_val > 0) {\r
- SCANENV_MEM_NODES(env)[pos] = SCANENV_MEM_NODES(env)[i];\r
- pos++;\r
- }\r
- }\r
-\r
- loc = env->capture_history;\r
- BIT_STATUS_CLEAR(env->capture_history);\r
- for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {\r
- if (BIT_STATUS_AT(loc, i)) {\r
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, map[i].new_val);\r
- }\r
- }\r
-\r
- env->num_mem = env->num_named;\r
- reg->num_mem = env->num_named;\r
-\r
- Result = onig_renumber_name_table(reg, map);\r
- xfree(map);\r
- return Result;\r
-}\r
-#endif /* USE_NAMED_GROUP */\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-static int\r
-unset_addr_list_fix(UnsetAddrList* uslist, regex_t* reg)\r
-{\r
- int i, offset;\r
- EncloseNode* en;\r
- AbsAddrType addr;\r
-\r
- for (i = 0; i < uslist->num; i++) {\r
- en = NENCLOSE(uslist->us[i].target);\r
- if (! IS_ENCLOSE_ADDR_FIXED(en)) return ONIGERR_PARSER_BUG;\r
- addr = en->call_addr;\r
- offset = uslist->us[i].offset;\r
-\r
- BBUF_WRITE(reg, offset, &addr, SIZE_ABSADDR);\r
- }\r
- return 0;\r
-}\r
-#endif\r
-\r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
-static int\r
-quantifiers_memory_node_info(Node* node)\r
-{\r
- int r = 0;\r
-\r
- switch (NTYPE(node)) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- {\r
- int v;\r
- do {\r
- v = quantifiers_memory_node_info(NCAR(node));\r
- if (v > r) r = v;\r
- } while (v >= 0 && IS_NOT_NULL(node = NCDR(node)));\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- if (IS_CALL_RECURSION(NCALL(node))) {\r
- return NQ_TARGET_IS_EMPTY_REC; /* tiny version */\r
- }\r
- else\r
- r = quantifiers_memory_node_info(NCALL(node)->target);\r
- break;\r
-#endif\r
-\r
- case NT_QTFR:\r
- {\r
- QtfrNode* qn = NQTFR(node);\r
- if (qn->upper != 0) {\r
- r = quantifiers_memory_node_info(qn->target);\r
- }\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
- switch (en->type) {\r
- case ENCLOSE_MEMORY:\r
- return NQ_TARGET_IS_EMPTY_MEM;\r
- break;\r
-\r
- case ENCLOSE_OPTION:\r
- case ENCLOSE_STOP_BACKTRACK:\r
- r = quantifiers_memory_node_info(en->target);\r
- break;\r
- default:\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_BREF:\r
- case NT_STR:\r
- case NT_CTYPE:\r
- case NT_CCLASS:\r
- case NT_CANY:\r
- case NT_ANCHOR:\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-#endif /* USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT */\r
-\r
-static int\r
-get_min_match_length(Node* node, OnigDistance *min, ScanEnv* env)\r
-{\r
- OnigDistance tmin;\r
- int r = 0;\r
-\r
- *min = 0;\r
- switch (NTYPE(node)) {\r
- case NT_BREF:\r
- {\r
- int i;\r
- int* backs;\r
- Node** nodes = SCANENV_MEM_NODES(env);\r
- BRefNode* br = NBREF(node);\r
- if (br->state & NST_RECURSION) break;\r
-\r
- backs = BACKREFS_P(br);\r
- if (backs[0] > env->num_mem) return ONIGERR_INVALID_BACKREF;\r
- r = get_min_match_length(nodes[backs[0]], min, env);\r
- if (r != 0) break;\r
- for (i = 1; i < br->back_num; i++) {\r
- if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;\r
- r = get_min_match_length(nodes[backs[i]], &tmin, env);\r
- if (r != 0) break;\r
- if (*min > tmin) *min = tmin;\r
- }\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- if (IS_CALL_RECURSION(NCALL(node))) {\r
- EncloseNode* en = NENCLOSE(NCALL(node)->target);\r
- if (IS_ENCLOSE_MIN_FIXED(en))\r
- *min = en->min_len;\r
- }\r
- else\r
- r = get_min_match_length(NCALL(node)->target, min, env);\r
- break;\r
-#endif\r
-\r
- case NT_LIST:\r
- do {\r
- r = get_min_match_length(NCAR(node), &tmin, env);\r
- if (r == 0) *min += tmin;\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_ALT:\r
- {\r
- Node *x, *y;\r
- y = node;\r
- do {\r
- x = NCAR(y);\r
- r = get_min_match_length(x, &tmin, env);\r
- if (r != 0) break;\r
- if (y == node) *min = tmin;\r
- else if (*min > tmin) *min = tmin;\r
- } while (r == 0 && IS_NOT_NULL(y = NCDR(y)));\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- {\r
- StrNode* sn = NSTR(node);\r
- *min = (OnigDistance)(sn->end - sn->s);\r
- }\r
- break;\r
-\r
- case NT_CTYPE:\r
- *min = 1;\r
- break;\r
-\r
- case NT_CCLASS:\r
- case NT_CANY:\r
- *min = 1;\r
- break;\r
-\r
- case NT_QTFR:\r
- {\r
- QtfrNode* qn = NQTFR(node);\r
-\r
- if (qn->lower > 0) {\r
- r = get_min_match_length(qn->target, min, env);\r
- if (r == 0)\r
- *min = distance_multiply(*min, qn->lower);\r
- }\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
- switch (en->type) {\r
- case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
- if (IS_ENCLOSE_MIN_FIXED(en))\r
- *min = en->min_len;\r
- else {\r
- r = get_min_match_length(en->target, min, env);\r
- if (r == 0) {\r
- en->min_len = *min;\r
- SET_ENCLOSE_STATUS(node, NST_MIN_FIXED);\r
- }\r
- }\r
- break;\r
-#endif\r
- case ENCLOSE_OPTION:\r
- case ENCLOSE_STOP_BACKTRACK:\r
- r = get_min_match_length(en->target, min, env);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-get_max_match_length(Node* node, OnigDistance *max, ScanEnv* env)\r
-{\r
- OnigDistance tmax;\r
- int r = 0;\r
-\r
- *max = 0;\r
- switch (NTYPE(node)) {\r
- case NT_LIST:\r
- do {\r
- r = get_max_match_length(NCAR(node), &tmax, env);\r
- if (r == 0)\r
- *max = distance_add(*max, tmax);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_ALT:\r
- do {\r
- r = get_max_match_length(NCAR(node), &tmax, env);\r
- if (r == 0 && *max < tmax) *max = tmax;\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_STR:\r
- {\r
- StrNode* sn = NSTR(node);\r
- *max = (OnigDistance)(sn->end - sn->s);\r
- }\r
- break;\r
-\r
- case NT_CTYPE:\r
- *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
- break;\r
-\r
- case NT_CCLASS:\r
- case NT_CANY:\r
- *max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
- break;\r
-\r
- case NT_BREF:\r
- {\r
- int i;\r
- int* backs;\r
- Node** nodes = SCANENV_MEM_NODES(env);\r
- BRefNode* br = NBREF(node);\r
- if (br->state & NST_RECURSION) {\r
- *max = ONIG_INFINITE_DISTANCE;\r
- break;\r
- }\r
- backs = BACKREFS_P(br);\r
- for (i = 0; i < br->back_num; i++) {\r
- if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;\r
- r = get_max_match_length(nodes[backs[i]], &tmax, env);\r
- if (r != 0) break;\r
- if (*max < tmax) *max = tmax;\r
- }\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- if (! IS_CALL_RECURSION(NCALL(node)))\r
- r = get_max_match_length(NCALL(node)->target, max, env);\r
- else\r
- *max = ONIG_INFINITE_DISTANCE;\r
- break;\r
-#endif\r
-\r
- case NT_QTFR:\r
- {\r
- QtfrNode* qn = NQTFR(node);\r
-\r
- if (qn->upper != 0) {\r
- r = get_max_match_length(qn->target, max, env);\r
- if (r == 0 && *max != 0) {\r
- if (! IS_REPEAT_INFINITE(qn->upper))\r
- *max = distance_multiply(*max, qn->upper);\r
- else\r
- *max = ONIG_INFINITE_DISTANCE;\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
- switch (en->type) {\r
- case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
- if (IS_ENCLOSE_MAX_FIXED(en))\r
- *max = en->max_len;\r
- else {\r
- r = get_max_match_length(en->target, max, env);\r
- if (r == 0) {\r
- en->max_len = *max;\r
- SET_ENCLOSE_STATUS(node, NST_MAX_FIXED);\r
- }\r
- }\r
- break;\r
-#endif\r
- case ENCLOSE_OPTION:\r
- case ENCLOSE_STOP_BACKTRACK:\r
- r = get_max_match_length(en->target, max, env);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-#define GET_CHAR_LEN_VARLEN -1\r
-#define GET_CHAR_LEN_TOP_ALT_VARLEN -2\r
-\r
-/* fixed size pattern node only */\r
-static int\r
-get_char_length_tree1(Node* node, regex_t* reg, int* len, int level)\r
-{\r
- int tlen;\r
- int r = 0;\r
-\r
- level++;\r
- *len = 0;\r
- switch (NTYPE(node)) {\r
- case NT_LIST:\r
- do {\r
- r = get_char_length_tree1(NCAR(node), reg, &tlen, level);\r
- if (r == 0)\r
- *len = distance_add(*len, tlen);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_ALT:\r
- {\r
- int tlen2;\r
- int varlen = 0;\r
-\r
- r = get_char_length_tree1(NCAR(node), reg, &tlen, level);\r
- while (r == 0 && IS_NOT_NULL(node = NCDR(node))) {\r
- r = get_char_length_tree1(NCAR(node), reg, &tlen2, level);\r
- if (r == 0) {\r
- if (tlen != tlen2)\r
- varlen = 1;\r
- }\r
- }\r
- if (r == 0) {\r
- if (varlen != 0) {\r
- if (level == 1)\r
- r = GET_CHAR_LEN_TOP_ALT_VARLEN;\r
- else\r
- r = GET_CHAR_LEN_VARLEN;\r
- }\r
- else\r
- *len = tlen;\r
- }\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- {\r
- StrNode* sn = NSTR(node);\r
- UChar *s = sn->s;\r
- while (s < sn->end) {\r
- s += enclen(reg->enc, s);\r
- (*len)++;\r
- }\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- {\r
- QtfrNode* qn = NQTFR(node);\r
- if (qn->lower == qn->upper) {\r
- r = get_char_length_tree1(qn->target, reg, &tlen, level);\r
- if (r == 0)\r
- *len = distance_multiply(tlen, qn->lower);\r
- }\r
- else\r
- r = GET_CHAR_LEN_VARLEN;\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- if (! IS_CALL_RECURSION(NCALL(node)))\r
- r = get_char_length_tree1(NCALL(node)->target, reg, len, level);\r
- else\r
- r = GET_CHAR_LEN_VARLEN;\r
- break;\r
-#endif\r
-\r
- case NT_CTYPE:\r
- *len = 1;\r
- break;\r
-\r
- case NT_CCLASS:\r
- case NT_CANY:\r
- *len = 1;\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
- switch (en->type) {\r
- case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
- if (IS_ENCLOSE_CLEN_FIXED(en))\r
- *len = en->char_len;\r
- else {\r
- r = get_char_length_tree1(en->target, reg, len, level);\r
- if (r == 0) {\r
- en->char_len = *len;\r
- SET_ENCLOSE_STATUS(node, NST_CLEN_FIXED);\r
- }\r
- }\r
- break;\r
-#endif\r
- case ENCLOSE_OPTION:\r
- case ENCLOSE_STOP_BACKTRACK:\r
- r = get_char_length_tree1(en->target, reg, len, level);\r
- break;\r
- default:\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- break;\r
-\r
- default:\r
- r = GET_CHAR_LEN_VARLEN;\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-get_char_length_tree(Node* node, regex_t* reg, int* len)\r
-{\r
- return get_char_length_tree1(node, reg, len, 0);\r
-}\r
-\r
-/* x is not included y ==> 1 : 0 */\r
-static int\r
-is_not_included(Node* x, Node* y, regex_t* reg)\r
-{\r
- int i, len;\r
- OnigCodePoint code;\r
- UChar *p;\r
- int ytype;\r
-\r
- retry:\r
- ytype = NTYPE(y);\r
- switch (NTYPE(x)) {\r
- case NT_CTYPE:\r
- {\r
- switch (ytype) {\r
- case NT_CTYPE:\r
- if (NCTYPE(y)->ctype == NCTYPE(x)->ctype &&\r
- NCTYPE(y)->not != NCTYPE(x)->not)\r
- return 1;\r
- else\r
- return 0;\r
- break;\r
-\r
- case NT_CCLASS:\r
- swap:\r
- {\r
- Node* tmp;\r
- tmp = x; x = y; y = tmp;\r
- goto retry;\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- goto swap;\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_CCLASS:\r
- {\r
- CClassNode* xc = NCCLASS(x);\r
- switch (ytype) {\r
- case NT_CTYPE:\r
- switch (NCTYPE(y)->ctype) {\r
- case ONIGENC_CTYPE_WORD:\r
- if (NCTYPE(y)->not == 0) {\r
- if (IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) {\r
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
- if (BITSET_AT(xc->bs, i)) {\r
- if (IS_CODE_SB_WORD(reg->enc, i)) return 0;\r
- }\r
- }\r
- return 1;\r
- }\r
- return 0;\r
- }\r
- else {\r
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
- if (! IS_CODE_SB_WORD(reg->enc, i)) {\r
- if (!IS_NCCLASS_NOT(xc)) {\r
- if (BITSET_AT(xc->bs, i))\r
- return 0;\r
- }\r
- else {\r
- if (! BITSET_AT(xc->bs, i))\r
- return 0;\r
- }\r
- }\r
- }\r
- return 1;\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- break;\r
-\r
- case NT_CCLASS:\r
- {\r
- int v;\r
- CClassNode* yc = NCCLASS(y);\r
-\r
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
- v = BITSET_AT(xc->bs, i);\r
- if ((v != 0 && !IS_NCCLASS_NOT(xc)) ||\r
- (v == 0 && IS_NCCLASS_NOT(xc))) {\r
- v = BITSET_AT(yc->bs, i);\r
- if ((v != 0 && !IS_NCCLASS_NOT(yc)) ||\r
- (v == 0 && IS_NCCLASS_NOT(yc)))\r
- return 0;\r
- }\r
- }\r
- if ((IS_NULL(xc->mbuf) && !IS_NCCLASS_NOT(xc)) ||\r
- (IS_NULL(yc->mbuf) && !IS_NCCLASS_NOT(yc)))\r
- return 1;\r
- return 0;\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- goto swap;\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- {\r
- StrNode* xs = NSTR(x);\r
- if (NSTRING_LEN(x) == 0)\r
- break;\r
-\r
- //c = *(xs->s);\r
- switch (ytype) {\r
- case NT_CTYPE:\r
- switch (NCTYPE(y)->ctype) {\r
- case ONIGENC_CTYPE_WORD:\r
- if (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end))\r
- return NCTYPE(y)->not;\r
- else\r
- return !(NCTYPE(y)->not);\r
- break;\r
- default:\r
- break;\r
- }\r
- break;\r
-\r
- case NT_CCLASS:\r
- {\r
- CClassNode* cc = NCCLASS(y);\r
-\r
- code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,\r
- xs->s + ONIGENC_MBC_MAXLEN(reg->enc));\r
- return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- {\r
- UChar *q;\r
- StrNode* ys = NSTR(y);\r
- len = NSTRING_LEN(x);\r
- if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);\r
- if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {\r
- /* tiny version */\r
- return 0;\r
- }\r
- else {\r
- for (i = 0, p = ys->s, q = xs->s; i < len; i++, p++, q++) {\r
- if (*p != *q) return 1;\r
- }\r
- }\r
- }\r
- break;\r
- \r
- default:\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static Node*\r
-get_head_value_node(Node* node, int exact, regex_t* reg)\r
-{\r
- Node* n = NULL_NODE;\r
-\r
- switch (NTYPE(node)) {\r
- case NT_BREF:\r
- case NT_ALT:\r
- case NT_CANY:\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
-#endif\r
- break;\r
-\r
- case NT_CTYPE:\r
- case NT_CCLASS:\r
- if (exact == 0) {\r
- n = node;\r
- }\r
- break;\r
-\r
- case NT_LIST:\r
- n = get_head_value_node(NCAR(node), exact, reg);\r
- break;\r
-\r
- case NT_STR:\r
- {\r
- StrNode* sn = NSTR(node);\r
-\r
- if (sn->end <= sn->s)\r
- break;\r
-\r
- if (exact != 0 &&\r
- !NSTRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) {\r
- }\r
- else {\r
- n = node;\r
- }\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- {\r
- QtfrNode* qn = NQTFR(node);\r
- if (qn->lower > 0) {\r
- if (IS_NOT_NULL(qn->head_exact))\r
- n = qn->head_exact;\r
- else\r
- n = get_head_value_node(qn->target, exact, reg);\r
- }\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
- switch (en->type) {\r
- case ENCLOSE_OPTION:\r
- {\r
- OnigOptionType options = reg->options;\r
-\r
- reg->options = NENCLOSE(node)->option;\r
- n = get_head_value_node(NENCLOSE(node)->target, exact, reg);\r
- reg->options = options;\r
- }\r
- break;\r
-\r
- case ENCLOSE_MEMORY:\r
- case ENCLOSE_STOP_BACKTRACK:\r
- n = get_head_value_node(en->target, exact, reg);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- if (NANCHOR(node)->type == ANCHOR_PREC_READ)\r
- n = get_head_value_node(NANCHOR(node)->target, exact, reg);\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return n;\r
-}\r
-\r
-static int\r
-check_type_tree(Node* node, int type_mask, int enclose_mask, int anchor_mask)\r
-{\r
- int type, r = 0;\r
-\r
- type = NTYPE(node);\r
- if ((NTYPE2BIT(type) & type_mask) == 0)\r
- return 1;\r
-\r
- switch (type) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- do {\r
- r = check_type_tree(NCAR(node), type_mask, enclose_mask,\r
- anchor_mask);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_QTFR:\r
- r = check_type_tree(NQTFR(node)->target, type_mask, enclose_mask,\r
- anchor_mask);\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
- if ((en->type & enclose_mask) == 0)\r
- return 1;\r
-\r
- r = check_type_tree(en->target, type_mask, enclose_mask, anchor_mask);\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- type = NANCHOR(node)->type;\r
- if ((type & anchor_mask) == 0)\r
- return 1;\r
-\r
- if (NANCHOR(node)->target)\r
- r = check_type_tree(NANCHOR(node)->target,\r
- type_mask, enclose_mask, anchor_mask);\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- return r;\r
-}\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-\r
-#define RECURSION_EXIST 1\r
-#define RECURSION_INFINITE 2\r
-\r
-static int\r
-subexp_inf_recursive_check(Node* node, ScanEnv* env, int head)\r
-{\r
- int type;\r
- int r = 0;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- {\r
- Node *x;\r
- OnigDistance min;\r
- int ret;\r
-\r
- x = node;\r
- do {\r
- ret = subexp_inf_recursive_check(NCAR(x), env, head);\r
- if (ret < 0 || ret == RECURSION_INFINITE) return ret;\r
- r |= ret;\r
- if (head) {\r
- ret = get_min_match_length(NCAR(x), &min, env);\r
- if (ret != 0) return ret;\r
- if (min != 0) head = 0;\r
- }\r
- } while (IS_NOT_NULL(x = NCDR(x)));\r
- }\r
- break;\r
-\r
- case NT_ALT:\r
- {\r
- int ret;\r
- r = RECURSION_EXIST;\r
- do {\r
- ret = subexp_inf_recursive_check(NCAR(node), env, head);\r
- if (ret < 0 || ret == RECURSION_INFINITE) return ret;\r
- r &= ret;\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- r = subexp_inf_recursive_check(NQTFR(node)->target, env, head);\r
- if (r == RECURSION_EXIST) {\r
- if (NQTFR(node)->lower == 0) r = 0;\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- {\r
- AnchorNode* an = NANCHOR(node);\r
- switch (an->type) {\r
- case ANCHOR_PREC_READ:\r
- case ANCHOR_PREC_READ_NOT:\r
- case ANCHOR_LOOK_BEHIND:\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- r = subexp_inf_recursive_check(an->target, env, head);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_CALL:\r
- r = subexp_inf_recursive_check(NCALL(node)->target, env, head);\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- if (IS_ENCLOSE_MARK2(NENCLOSE(node)))\r
- return 0;\r
- else if (IS_ENCLOSE_MARK1(NENCLOSE(node)))\r
- return (head == 0 ? RECURSION_EXIST : RECURSION_INFINITE);\r
- else {\r
- SET_ENCLOSE_STATUS(node, NST_MARK2);\r
- r = subexp_inf_recursive_check(NENCLOSE(node)->target, env, head);\r
- CLEAR_ENCLOSE_STATUS(node, NST_MARK2);\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-subexp_inf_recursive_check_trav(Node* node, ScanEnv* env)\r
-{\r
- int type;\r
- int r = 0;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- do {\r
- r = subexp_inf_recursive_check_trav(NCAR(node), env);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_QTFR:\r
- r = subexp_inf_recursive_check_trav(NQTFR(node)->target, env);\r
- break;\r
-\r
- case NT_ANCHOR:\r
- {\r
- AnchorNode* an = NANCHOR(node);\r
- switch (an->type) {\r
- case ANCHOR_PREC_READ:\r
- case ANCHOR_PREC_READ_NOT:\r
- case ANCHOR_LOOK_BEHIND:\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- r = subexp_inf_recursive_check_trav(an->target, env);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
-\r
- if (IS_ENCLOSE_RECURSION(en)) {\r
- SET_ENCLOSE_STATUS(node, NST_MARK1);\r
- r = subexp_inf_recursive_check(en->target, env, 1);\r
- if (r > 0) return ONIGERR_NEVER_ENDING_RECURSION;\r
- CLEAR_ENCLOSE_STATUS(node, NST_MARK1);\r
- }\r
- r = subexp_inf_recursive_check_trav(en->target, env);\r
- }\r
-\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-subexp_recursive_check(Node* node)\r
-{\r
- int r = 0;\r
-\r
- switch (NTYPE(node)) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- do {\r
- r |= subexp_recursive_check(NCAR(node));\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_QTFR:\r
- r = subexp_recursive_check(NQTFR(node)->target);\r
- break;\r
-\r
- case NT_ANCHOR:\r
- {\r
- AnchorNode* an = NANCHOR(node);\r
- switch (an->type) {\r
- case ANCHOR_PREC_READ:\r
- case ANCHOR_PREC_READ_NOT:\r
- case ANCHOR_LOOK_BEHIND:\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- r = subexp_recursive_check(an->target);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_CALL:\r
- r = subexp_recursive_check(NCALL(node)->target);\r
- if (r != 0) SET_CALL_RECURSION(node);\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- if (IS_ENCLOSE_MARK2(NENCLOSE(node)))\r
- return 0;\r
- else if (IS_ENCLOSE_MARK1(NENCLOSE(node)))\r
- return 1; /* recursion */\r
- else {\r
- SET_ENCLOSE_STATUS(node, NST_MARK2);\r
- r = subexp_recursive_check(NENCLOSE(node)->target);\r
- CLEAR_ENCLOSE_STATUS(node, NST_MARK2);\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-\r
-static int\r
-subexp_recursive_check_trav(Node* node, ScanEnv* env)\r
-{\r
-#define FOUND_CALLED_NODE 1\r
-\r
- int type;\r
- int r = 0;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- {\r
- int ret;\r
- do {\r
- ret = subexp_recursive_check_trav(NCAR(node), env);\r
- if (ret == FOUND_CALLED_NODE) r = FOUND_CALLED_NODE;\r
- else if (ret < 0) return ret;\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- r = subexp_recursive_check_trav(NQTFR(node)->target, env);\r
- if (NQTFR(node)->upper == 0) {\r
- if (r == FOUND_CALLED_NODE)\r
- NQTFR(node)->is_refered = 1;\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- {\r
- AnchorNode* an = NANCHOR(node);\r
- switch (an->type) {\r
- case ANCHOR_PREC_READ:\r
- case ANCHOR_PREC_READ_NOT:\r
- case ANCHOR_LOOK_BEHIND:\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- r = subexp_recursive_check_trav(an->target, env);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
-\r
- if (! IS_ENCLOSE_RECURSION(en)) {\r
- if (IS_ENCLOSE_CALLED(en)) {\r
- SET_ENCLOSE_STATUS(node, NST_MARK1);\r
- r = subexp_recursive_check(en->target);\r
- if (r != 0) SET_ENCLOSE_STATUS(node, NST_RECURSION);\r
- CLEAR_ENCLOSE_STATUS(node, NST_MARK1);\r
- }\r
- }\r
- r = subexp_recursive_check_trav(en->target, env);\r
- if (IS_ENCLOSE_CALLED(en))\r
- r |= FOUND_CALLED_NODE;\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-setup_subexp_call(Node* node, ScanEnv* env)\r
-{\r
- int type;\r
- int r = 0;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- do {\r
- r = setup_subexp_call(NCAR(node), env);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_ALT:\r
- do {\r
- r = setup_subexp_call(NCAR(node), env);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_QTFR:\r
- r = setup_subexp_call(NQTFR(node)->target, env);\r
- break;\r
- case NT_ENCLOSE:\r
- r = setup_subexp_call(NENCLOSE(node)->target, env);\r
- break;\r
-\r
- case NT_CALL:\r
- {\r
- CallNode* cn = NCALL(node);\r
- Node** nodes = SCANENV_MEM_NODES(env);\r
-\r
- if (cn->group_num != 0) {\r
- int gnum = cn->group_num;\r
-\r
-#ifdef USE_NAMED_GROUP\r
- if (env->num_named > 0 &&\r
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&\r
- !ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_CAPTURE_GROUP)) {\r
- return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;\r
- }\r
-#endif\r
- if (gnum > env->num_mem) {\r
- onig_scan_env_set_error_string(env,\r
- ONIGERR_UNDEFINED_GROUP_REFERENCE, cn->name, cn->name_end);\r
- return ONIGERR_UNDEFINED_GROUP_REFERENCE;\r
- }\r
-\r
-#ifdef USE_NAMED_GROUP\r
- set_call_attr:\r
-#endif\r
- cn->target = nodes[cn->group_num];\r
- if (IS_NULL(cn->target)) {\r
- onig_scan_env_set_error_string(env,\r
- ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);\r
- return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
- }\r
- SET_ENCLOSE_STATUS(cn->target, NST_CALLED);\r
- BIT_STATUS_ON_AT(env->bt_mem_start, cn->group_num);\r
- cn->unset_addr_list = env->unset_addr_list;\r
- }\r
-#ifdef USE_NAMED_GROUP\r
- else {\r
- int *refs;\r
-\r
- int n = onig_name_to_group_numbers(env->reg, cn->name, cn->name_end,\r
- &refs);\r
- if (n <= 0) {\r
- onig_scan_env_set_error_string(env,\r
- ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end);\r
- return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
- }\r
- else if (n > 1) {\r
- onig_scan_env_set_error_string(env,\r
- ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, cn->name, cn->name_end);\r
- return ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL;\r
- }\r
- else {\r
- cn->group_num = refs[0];\r
- goto set_call_attr;\r
- }\r
- }\r
-#endif\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- {\r
- AnchorNode* an = NANCHOR(node);\r
-\r
- switch (an->type) {\r
- case ANCHOR_PREC_READ:\r
- case ANCHOR_PREC_READ_NOT:\r
- case ANCHOR_LOOK_BEHIND:\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- r = setup_subexp_call(an->target, env);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-#endif\r
-\r
-/* divide different length alternatives in look-behind.\r
- (?<=A|B) ==> (?<=A)|(?<=B)\r
- (?<!A|B) ==> (?<!A)(?<!B)\r
-*/\r
-static int\r
-divide_look_behind_alternatives(Node* node)\r
-{\r
- Node *head, *np, *insert_node;\r
- AnchorNode* an = NANCHOR(node);\r
- int anc_type = an->type;\r
-\r
- head = an->target;\r
- np = NCAR(head);\r
- swap_node(node, head);\r
- NCAR(node) = head;\r
- NANCHOR(head)->target = np;\r
-\r
- np = node;\r
- while ((np = NCDR(np)) != NULL_NODE) {\r
- insert_node = onig_node_new_anchor(anc_type);\r
- CHECK_NULL_RETURN_MEMERR(insert_node);\r
- NANCHOR(insert_node)->target = NCAR(np);\r
- NCAR(np) = insert_node;\r
- }\r
-\r
- if (anc_type == ANCHOR_LOOK_BEHIND_NOT) {\r
- np = node;\r
- do {\r
- SET_NTYPE(np, NT_LIST); /* alt -> list */\r
- } while ((np = NCDR(np)) != NULL_NODE);\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-setup_look_behind(Node* node, regex_t* reg, ScanEnv* env)\r
-{\r
- int r, len;\r
- AnchorNode* an = NANCHOR(node);\r
-\r
- r = get_char_length_tree(an->target, reg, &len);\r
- if (r == 0)\r
- an->char_len = len;\r
- else if (r == GET_CHAR_LEN_VARLEN)\r
- r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
- else if (r == GET_CHAR_LEN_TOP_ALT_VARLEN) {\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND))\r
- r = divide_look_behind_alternatives(node);\r
- else\r
- r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-next_setup(Node* node, Node* next_node, regex_t* reg)\r
-{\r
- int type;\r
-\r
- retry:\r
- type = NTYPE(node);\r
- if (type == NT_QTFR) {\r
- QtfrNode* qn = NQTFR(node);\r
- if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {\r
-#ifdef USE_QTFR_PEEK_NEXT\r
- Node* n = get_head_value_node(next_node, 1, reg);\r
- /* '\0': for UTF-16BE etc... */\r
- if (IS_NOT_NULL(n) && NSTR(n)->s[0] != '\0') {\r
- qn->next_head_exact = n;\r
- }\r
-#endif\r
- /* automatic posseivation a*b ==> (?>a*)b */\r
- if (qn->lower <= 1) {\r
- int ttype = NTYPE(qn->target);\r
- if (IS_NODE_TYPE_SIMPLE(ttype)) {\r
- Node *x, *y;\r
- x = get_head_value_node(qn->target, 0, reg);\r
- if (IS_NOT_NULL(x)) {\r
- y = get_head_value_node(next_node, 0, reg);\r
- if (IS_NOT_NULL(y) && is_not_included(x, y, reg)) {\r
- Node* en = onig_node_new_enclose(ENCLOSE_STOP_BACKTRACK);\r
- CHECK_NULL_RETURN_MEMERR(en);\r
- SET_ENCLOSE_STATUS(en, NST_STOP_BT_SIMPLE_REPEAT);\r
- swap_node(node, en);\r
- NENCLOSE(node)->target = en;\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }\r
- else if (type == NT_ENCLOSE) {\r
- EncloseNode* en = NENCLOSE(node);\r
- if (en->type == ENCLOSE_MEMORY) {\r
- node = en->target;\r
- goto retry;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-\r
-static int\r
-update_string_node_case_fold(regex_t* reg, Node *node)\r
-{\r
- UChar *p, *end, buf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
- UChar *sbuf, *ebuf, *sp;\r
- int r, i, len, sbuf_size;\r
- StrNode* sn = NSTR(node);\r
-\r
- end = sn->end;\r
- sbuf_size = (int)(end - sn->s) * 2;\r
- sbuf = (UChar* )xmalloc(sbuf_size);\r
- CHECK_NULL_RETURN_MEMERR(sbuf);\r
- ebuf = sbuf + sbuf_size;\r
-\r
- sp = sbuf;\r
- p = sn->s;\r
- while (p < end) {\r
- len = ONIGENC_MBC_CASE_FOLD(reg->enc, reg->case_fold_flag, &p, end, buf);\r
- for (i = 0; i < len; i++) {\r
- if (sp >= ebuf) {\r
- sbuf = (UChar* )xrealloc(sbuf, sbuf_size * 2, sbuf_size);\r
- CHECK_NULL_RETURN_MEMERR(sbuf);\r
- sp = sbuf + sbuf_size;\r
- sbuf_size *= 2;\r
- ebuf = sbuf + sbuf_size;\r
- }\r
-\r
- *sp++ = buf[i];\r
- }\r
- }\r
-\r
- r = onig_node_str_set(node, sbuf, sp);\r
- if (r != 0) {\r
- xfree(sbuf);\r
- return r;\r
- }\r
-\r
- xfree(sbuf);\r
- return 0;\r
-}\r
-\r
-static int\r
-expand_case_fold_make_rem_string(Node** rnode, UChar *s, UChar *end,\r
- regex_t* reg)\r
-{\r
- int r;\r
- Node *node;\r
-\r
- node = onig_node_new_str(s, end);\r
- if (IS_NULL(node)) return ONIGERR_MEMORY;\r
-\r
- r = update_string_node_case_fold(reg, node);\r
- if (r != 0) {\r
- onig_node_free(node);\r
- return r;\r
- }\r
-\r
- NSTRING_SET_AMBIG(node);\r
- NSTRING_SET_DONT_GET_OPT_INFO(node);\r
- *rnode = node;\r
- return 0;\r
-}\r
-\r
-static int\r
-expand_case_fold_string_alt(int item_num, OnigCaseFoldCodeItem items[],\r
- UChar *p, int slen, UChar *end,\r
- regex_t* reg, Node **rnode)\r
-{\r
- int r, i, j, len, varlen;\r
- Node *anode, *var_anode, *snode, *xnode, *an;\r
- UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
-\r
- *rnode = var_anode = NULL_NODE;\r
-\r
- varlen = 0;\r
- for (i = 0; i < item_num; i++) {\r
- if (items[i].byte_len != slen) {\r
- varlen = 1;\r
- break;\r
- }\r
- }\r
-\r
- if (varlen != 0) {\r
- *rnode = var_anode = onig_node_new_alt(NULL_NODE, NULL_NODE);\r
- if (IS_NULL(var_anode)) return ONIGERR_MEMORY;\r
-\r
- xnode = onig_node_new_list(NULL, NULL);\r
- if (IS_NULL(xnode)) goto mem_err;\r
- NCAR(var_anode) = xnode;\r
-\r
- anode = onig_node_new_alt(NULL_NODE, NULL_NODE);\r
- if (IS_NULL(anode)) goto mem_err;\r
- NCAR(xnode) = anode;\r
- }\r
- else {\r
- *rnode = anode = onig_node_new_alt(NULL_NODE, NULL_NODE);\r
- if (IS_NULL(anode)) return ONIGERR_MEMORY;\r
- }\r
-\r
- snode = onig_node_new_str(p, p + slen);\r
- if (IS_NULL(snode)) goto mem_err;\r
-\r
- NCAR(anode) = snode;\r
-\r
- for (i = 0; i < item_num; i++) {\r
- snode = onig_node_new_str(NULL, NULL);\r
- if (IS_NULL(snode)) goto mem_err;\r
- \r
- for (j = 0; j < items[i].code_len; j++) {\r
- len = ONIGENC_CODE_TO_MBC(reg->enc, items[i].code[j], buf);\r
- if (len < 0) {\r
- r = len;\r
- goto mem_err2;\r
- }\r
-\r
- r = onig_node_str_cat(snode, buf, buf + len);\r
- if (r != 0) goto mem_err2;\r
- }\r
-\r
- an = onig_node_new_alt(NULL_NODE, NULL_NODE);\r
- if (IS_NULL(an)) {\r
- goto mem_err2;\r
- }\r
-\r
- if (items[i].byte_len != slen) {\r
- Node *rem;\r
- UChar *q = p + items[i].byte_len;\r
-\r
- if (q < end) {\r
- r = expand_case_fold_make_rem_string(&rem, q, end, reg);\r
- if (r != 0) {\r
- onig_node_free(an);\r
- goto mem_err2;\r
- }\r
-\r
- xnode = onig_node_list_add(NULL_NODE, snode);\r
- if (IS_NULL(xnode)) {\r
- onig_node_free(an);\r
- onig_node_free(rem);\r
- goto mem_err2;\r
- }\r
- if (IS_NULL(onig_node_list_add(xnode, rem))) {\r
- onig_node_free(an);\r
- onig_node_free(xnode);\r
- onig_node_free(rem);\r
- goto mem_err;\r
- }\r
-\r
- NCAR(an) = xnode;\r
- }\r
- else {\r
- NCAR(an) = snode;\r
- }\r
-\r
- NCDR(var_anode) = an;\r
- var_anode = an;\r
- }\r
- else {\r
- NCAR(an) = snode;\r
- NCDR(anode) = an;\r
- anode = an;\r
- }\r
- }\r
-\r
- return varlen;\r
-\r
- mem_err2:\r
- onig_node_free(snode);\r
-\r
- mem_err:\r
- onig_node_free(*rnode);\r
-\r
- return ONIGERR_MEMORY;\r
-}\r
-\r
-static int\r
-expand_case_fold_string(Node* node, regex_t* reg)\r
-{\r
-#define THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION 8\r
-\r
- int r, n, len, alt_num;\r
- UChar *start, *end, *p;\r
- Node *top_root, *root, *snode, *prev_node;\r
- OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];\r
- StrNode* sn = NSTR(node);\r
-\r
- if (NSTRING_IS_AMBIG(node)) return 0;\r
-\r
- start = sn->s;\r
- end = sn->end;\r
- if (start >= end) return 0;\r
-\r
- r = 0;\r
- top_root = root = prev_node = snode = NULL_NODE;\r
- alt_num = 1;\r
- p = start;\r
- while (p < end) {\r
- n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(reg->enc, reg->case_fold_flag,\r
- p, end, items);\r
- if (n < 0) {\r
- r = n;\r
- goto err;\r
- }\r
-\r
- len = enclen(reg->enc, p);\r
-\r
- if (n == 0) {\r
- if (IS_NULL(snode)) {\r
- if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {\r
- top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
- if (IS_NULL(root)) {\r
- onig_node_free(prev_node);\r
- goto mem_err;\r
- }\r
- }\r
-\r
- prev_node = snode = onig_node_new_str(NULL, NULL);\r
- if (IS_NULL(snode)) goto mem_err;\r
- if (IS_NOT_NULL(root)) {\r
- if (IS_NULL(onig_node_list_add(root, snode))) {\r
- onig_node_free(snode);\r
- goto mem_err;\r
- }\r
- }\r
- }\r
-\r
- r = onig_node_str_cat(snode, p, p + len);\r
- if (r != 0) goto err;\r
- }\r
- else {\r
- alt_num *= (n + 1);\r
- if (alt_num > THRESHOLD_CASE_FOLD_ALT_FOR_EXPANSION) break;\r
-\r
- if (IS_NULL(root) && IS_NOT_NULL(prev_node)) {\r
- top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
- if (IS_NULL(root)) {\r
- onig_node_free(prev_node);\r
- goto mem_err;\r
- }\r
- }\r
-\r
- r = expand_case_fold_string_alt(n, items, p, len, end, reg, &prev_node);\r
- if (r < 0) goto mem_err;\r
- if (r == 1) {\r
- if (IS_NULL(root)) {\r
- top_root = prev_node;\r
- }\r
- else {\r
- if (IS_NULL(onig_node_list_add(root, prev_node))) {\r
- onig_node_free(prev_node);\r
- goto mem_err;\r
- }\r
- }\r
-\r
- root = NCAR(prev_node);\r
- }\r
- else { /* r == 0 */\r
- if (IS_NOT_NULL(root)) {\r
- if (IS_NULL(onig_node_list_add(root, prev_node))) {\r
- onig_node_free(prev_node);\r
- goto mem_err;\r
- }\r
- }\r
- }\r
-\r
- snode = NULL_NODE;\r
- }\r
-\r
- p += len;\r
- }\r
-\r
- if (p < end) {\r
- Node *srem;\r
-\r
- r = expand_case_fold_make_rem_string(&srem, p, end, reg);\r
- if (r != 0) goto mem_err;\r
-\r
- if (IS_NOT_NULL(prev_node) && IS_NULL(root)) {\r
- top_root = root = onig_node_list_add(NULL_NODE, prev_node);\r
- if (IS_NULL(root)) {\r
- onig_node_free(srem);\r
- onig_node_free(prev_node);\r
- goto mem_err;\r
- }\r
- }\r
-\r
- if (IS_NULL(root)) {\r
- prev_node = srem;\r
- }\r
- else {\r
- if (IS_NULL(onig_node_list_add(root, srem))) {\r
- onig_node_free(srem);\r
- goto mem_err;\r
- }\r
- }\r
- }\r
-\r
- /* ending */\r
- top_root = (IS_NOT_NULL(top_root) ? top_root : prev_node);\r
- swap_node(node, top_root);\r
- onig_node_free(top_root);\r
- return 0;\r
-\r
- mem_err:\r
- r = ONIGERR_MEMORY;\r
-\r
- err:\r
- onig_node_free(top_root);\r
- return r;\r
-}\r
-\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-\r
-#define CEC_THRES_NUM_BIG_REPEAT 512\r
-#define CEC_INFINITE_NUM 0x7fffffff\r
-\r
-#define CEC_IN_INFINITE_REPEAT (1<<0)\r
-#define CEC_IN_FINITE_REPEAT (1<<1)\r
-#define CEC_CONT_BIG_REPEAT (1<<2)\r
-\r
-static int\r
-setup_comb_exp_check(Node* node, int state, ScanEnv* env)\r
-{\r
- int type;\r
- int r = state;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- {\r
- Node* prev = NULL_NODE;\r
- do {\r
- r = setup_comb_exp_check(NCAR(node), r, env);\r
- prev = NCAR(node);\r
- } while (r >= 0 && IS_NOT_NULL(node = NCDR(node)));\r
- }\r
- break;\r
-\r
- case NT_ALT:\r
- {\r
- int ret;\r
- do {\r
- ret = setup_comb_exp_check(NCAR(node), state, env);\r
- r |= ret;\r
- } while (ret >= 0 && IS_NOT_NULL(node = NCDR(node)));\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- {\r
- int child_state = state;\r
- int add_state = 0;\r
- QtfrNode* qn = NQTFR(node);\r
- Node* target = qn->target;\r
- int var_num;\r
-\r
- if (! IS_REPEAT_INFINITE(qn->upper)) {\r
- if (qn->upper > 1) {\r
- /* {0,1}, {1,1} are allowed */\r
- child_state |= CEC_IN_FINITE_REPEAT;\r
-\r
- /* check (a*){n,m}, (a+){n,m} => (a*){n,n}, (a+){n,n} */\r
- if (env->backrefed_mem == 0) {\r
- if (NTYPE(qn->target) == NT_ENCLOSE) {\r
- EncloseNode* en = NENCLOSE(qn->target);\r
- if (en->type == ENCLOSE_MEMORY) {\r
- if (NTYPE(en->target) == NT_QTFR) {\r
- QtfrNode* q = NQTFR(en->target);\r
- if (IS_REPEAT_INFINITE(q->upper)\r
- && q->greedy == qn->greedy) {\r
- qn->upper = (qn->lower == 0 ? 1 : qn->lower);\r
- if (qn->upper == 1)\r
- child_state = state;\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- if (state & CEC_IN_FINITE_REPEAT) {\r
- qn->comb_exp_check_num = -1;\r
- }\r
- else {\r
- if (IS_REPEAT_INFINITE(qn->upper)) {\r
- var_num = CEC_INFINITE_NUM;\r
- child_state |= CEC_IN_INFINITE_REPEAT;\r
- }\r
- else {\r
- var_num = qn->upper - qn->lower;\r
- }\r
-\r
- if (var_num >= CEC_THRES_NUM_BIG_REPEAT)\r
- add_state |= CEC_CONT_BIG_REPEAT;\r
-\r
- if (((state & CEC_IN_INFINITE_REPEAT) != 0 && var_num != 0) ||\r
- ((state & CEC_CONT_BIG_REPEAT) != 0 &&\r
- var_num >= CEC_THRES_NUM_BIG_REPEAT)) {\r
- if (qn->comb_exp_check_num == 0) {\r
- env->num_comb_exp_check++;\r
- qn->comb_exp_check_num = env->num_comb_exp_check;\r
- if (env->curr_max_regnum > env->comb_exp_max_regnum)\r
- env->comb_exp_max_regnum = env->curr_max_regnum;\r
- }\r
- }\r
- }\r
-\r
- r = setup_comb_exp_check(target, child_state, env);\r
- r |= add_state;\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
-\r
- switch (en->type) {\r
- case ENCLOSE_MEMORY:\r
- {\r
- if (env->curr_max_regnum < en->regnum)\r
- env->curr_max_regnum = en->regnum;\r
-\r
- r = setup_comb_exp_check(en->target, state, env);\r
- }\r
- break;\r
-\r
- default:\r
- r = setup_comb_exp_check(en->target, state, env);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- if (IS_CALL_RECURSION(NCALL(node)))\r
- env->has_recursion = 1;\r
- else\r
- r = setup_comb_exp_check(NCALL(node)->target, state, env);\r
- break;\r
-#endif\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-#endif\r
-\r
-#define IN_ALT (1<<0)\r
-#define IN_NOT (1<<1)\r
-#define IN_REPEAT (1<<2)\r
-#define IN_VAR_REPEAT (1<<3)\r
-\r
-/* setup_tree does the following work.\r
- 1. check empty loop. (set qn->target_empty_info)\r
- 2. expand ignore-case in char class.\r
- 3. set memory status bit flags. (reg->mem_stats)\r
- 4. set qn->head_exact for [push, exact] -> [push_or_jump_exact1, exact].\r
- 5. find invalid patterns in look-behind.\r
- 6. expand repeated string.\r
- */\r
-static int\r
-setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)\r
-{\r
- int type;\r
- int r = 0;\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- {\r
- Node* prev = NULL_NODE;\r
- do {\r
- r = setup_tree(NCAR(node), reg, state, env);\r
- if (IS_NOT_NULL(prev) && r == 0) {\r
- r = next_setup(prev, NCAR(node), reg);\r
- }\r
- prev = NCAR(node);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- }\r
- break;\r
-\r
- case NT_ALT:\r
- do {\r
- r = setup_tree(NCAR(node), reg, (state | IN_ALT), env);\r
- } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- case NT_CCLASS:\r
- break;\r
-\r
- case NT_STR:\r
- if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) {\r
- r = expand_case_fold_string(node, reg);\r
- }\r
- break;\r
-\r
- case NT_CTYPE:\r
- case NT_CANY:\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- break;\r
-#endif\r
-\r
- case NT_BREF:\r
- {\r
- int i;\r
- int* p;\r
- Node** nodes = SCANENV_MEM_NODES(env);\r
- BRefNode* br = NBREF(node);\r
- p = BACKREFS_P(br);\r
- for (i = 0; i < br->back_num; i++) {\r
- if (p[i] > env->num_mem) return ONIGERR_INVALID_BACKREF;\r
- BIT_STATUS_ON_AT(env->backrefed_mem, p[i]);\r
- BIT_STATUS_ON_AT(env->bt_mem_start, p[i]);\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- if (IS_BACKREF_NEST_LEVEL(br)) {\r
- BIT_STATUS_ON_AT(env->bt_mem_end, p[i]);\r
- }\r
-#endif\r
- SET_ENCLOSE_STATUS(nodes[p[i]], NST_MEM_BACKREFED);\r
- }\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- {\r
- OnigDistance d;\r
- QtfrNode* qn = NQTFR(node);\r
- Node* target = qn->target;\r
-\r
- if ((state & IN_REPEAT) != 0) {\r
- qn->state |= NST_IN_REPEAT;\r
- }\r
-\r
- if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {\r
- r = get_min_match_length(target, &d, env);\r
- if (r) break;\r
- if (d == 0) {\r
- qn->target_empty_info = NQ_TARGET_IS_EMPTY;\r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
- r = quantifiers_memory_node_info(target);\r
- if (r < 0) break;\r
- if (r > 0) {\r
- qn->target_empty_info = r;\r
- }\r
-#endif\r
-#if 0\r
- r = get_max_match_length(target, &d, env);\r
- if (r == 0 && d == 0) {\r
- /* ()* ==> ()?, ()+ ==> () */\r
- qn->upper = 1;\r
- if (qn->lower > 1) qn->lower = 1;\r
- if (NTYPE(target) == NT_STR) {\r
- qn->upper = qn->lower = 0; /* /(?:)+/ ==> // */\r
- }\r
- }\r
-#endif\r
- }\r
- }\r
-\r
- state |= IN_REPEAT;\r
- if (qn->lower != qn->upper)\r
- state |= IN_VAR_REPEAT;\r
- r = setup_tree(target, reg, state, env);\r
- if (r) break;\r
-\r
- /* expand string */\r
-#define EXPAND_STRING_MAX_LENGTH 100\r
- if (NTYPE(target) == NT_STR) {\r
- if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&\r
- qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {\r
- int len = NSTRING_LEN(target);\r
- StrNode* sn = NSTR(target);\r
-\r
- if (len * qn->lower <= EXPAND_STRING_MAX_LENGTH) {\r
- int i, n = qn->lower;\r
- onig_node_conv_to_str_node(node, NSTR(target)->flag);\r
- for (i = 0; i < n; i++) {\r
- r = onig_node_str_cat(node, sn->s, sn->end);\r
- if (r) break;\r
- }\r
- onig_node_free(target);\r
- break; /* break case NT_QTFR: */\r
- }\r
- }\r
- }\r
-\r
-#ifdef USE_OP_PUSH_OR_JUMP_EXACT\r
- if (qn->greedy && (qn->target_empty_info != 0)) {\r
- if (NTYPE(target) == NT_QTFR) {\r
- QtfrNode* tqn = NQTFR(target);\r
- if (IS_NOT_NULL(tqn->head_exact)) {\r
- qn->head_exact = tqn->head_exact;\r
- tqn->head_exact = NULL;\r
- }\r
- }\r
- else {\r
- qn->head_exact = get_head_value_node(qn->target, 1, reg);\r
- }\r
- }\r
-#endif\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
-\r
- switch (en->type) {\r
- case ENCLOSE_OPTION:\r
- {\r
- OnigOptionType options = reg->options;\r
- reg->options = NENCLOSE(node)->option;\r
- r = setup_tree(NENCLOSE(node)->target, reg, state, env);\r
- reg->options = options;\r
- }\r
- break;\r
-\r
- case ENCLOSE_MEMORY:\r
- if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT)) != 0) {\r
- BIT_STATUS_ON_AT(env->bt_mem_start, en->regnum);\r
- /* SET_ENCLOSE_STATUS(node, NST_MEM_IN_ALT_NOT); */\r
- }\r
- r = setup_tree(en->target, reg, state, env);\r
- break;\r
-\r
- case ENCLOSE_STOP_BACKTRACK:\r
- {\r
- Node* target = en->target;\r
- r = setup_tree(target, reg, state, env);\r
- if (NTYPE(target) == NT_QTFR) {\r
- QtfrNode* tqn = NQTFR(target);\r
- if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&\r
- tqn->greedy != 0) { /* (?>a*), a*+ etc... */\r
- int qtype = NTYPE(tqn->target);\r
- if (IS_NODE_TYPE_SIMPLE(qtype))\r
- SET_ENCLOSE_STATUS(node, NST_STOP_BT_SIMPLE_REPEAT);\r
- }\r
- }\r
- }\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- {\r
- AnchorNode* an = NANCHOR(node);\r
-\r
- switch (an->type) {\r
- case ANCHOR_PREC_READ:\r
- r = setup_tree(an->target, reg, state, env);\r
- break;\r
- case ANCHOR_PREC_READ_NOT:\r
- r = setup_tree(an->target, reg, (state | IN_NOT), env);\r
- break;\r
-\r
-/* allowed node types in look-behind */\r
-#define ALLOWED_TYPE_IN_LB \\r
- ( BIT_NT_LIST | BIT_NT_ALT | BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE | \\r
- BIT_NT_CANY | BIT_NT_ANCHOR | BIT_NT_ENCLOSE | BIT_NT_QTFR | BIT_NT_CALL )\r
-\r
-#define ALLOWED_ENCLOSE_IN_LB ( ENCLOSE_MEMORY )\r
-#define ALLOWED_ENCLOSE_IN_LB_NOT 0\r
-\r
-#define ALLOWED_ANCHOR_IN_LB \\r
-( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION )\r
-#define ALLOWED_ANCHOR_IN_LB_NOT \\r
-( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION )\r
-\r
- case ANCHOR_LOOK_BEHIND:\r
- {\r
- r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,\r
- ALLOWED_ENCLOSE_IN_LB, ALLOWED_ANCHOR_IN_LB);\r
- if (r < 0) return r;\r
- if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
- r = setup_look_behind(node, reg, env);\r
- if (r != 0) return r;\r
- r = setup_tree(an->target, reg, state, env);\r
- }\r
- break;\r
-\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- {\r
- r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB,\r
- ALLOWED_ENCLOSE_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT);\r
- if (r < 0) return r;\r
- if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;\r
- r = setup_look_behind(node, reg, env);\r
- if (r != 0) return r;\r
- r = setup_tree(an->target, reg, (state | IN_NOT), env);\r
- }\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-/* set skip map for Boyer-Moor search */\r
-static int\r
-set_bm_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,\r
- UChar skip[], int** int_skip)\r
-{\r
- int i, len;\r
-\r
- len = (int)(end - s);\r
- if (len < ONIG_CHAR_TABLE_SIZE) {\r
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = (UChar)len;\r
-\r
- for (i = 0; i < len - 1; i++)\r
- skip[s[i]] = (UChar)(len - 1 - i);\r
- }\r
- else {\r
- if (IS_NULL(*int_skip)) {\r
- *int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);\r
- if (IS_NULL(*int_skip)) return ONIGERR_MEMORY;\r
- }\r
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) (*int_skip)[i] = len;\r
-\r
- for (i = 0; i < len - 1; i++)\r
- (*int_skip)[s[i]] = len - 1 - i;\r
- }\r
- return 0;\r
-}\r
-\r
-#define OPT_EXACT_MAXLEN 24\r
-\r
-typedef struct {\r
- OnigDistance min; /* min byte length */\r
- OnigDistance max; /* max byte length */\r
-} MinMaxLen;\r
-\r
-typedef struct {\r
- MinMaxLen mmd;\r
- OnigEncoding enc;\r
- OnigOptionType options;\r
- OnigCaseFoldType case_fold_flag;\r
- ScanEnv* scan_env;\r
-} OptEnv;\r
-\r
-typedef struct {\r
- int left_anchor;\r
- int right_anchor;\r
-} OptAncInfo;\r
-\r
-typedef struct {\r
- MinMaxLen mmd; /* info position */\r
- OptAncInfo anc;\r
-\r
- int reach_end;\r
- int ignore_case;\r
- int len;\r
- UChar s[OPT_EXACT_MAXLEN];\r
-} OptExactInfo;\r
-\r
-typedef struct {\r
- MinMaxLen mmd; /* info position */\r
- OptAncInfo anc;\r
-\r
- int value; /* weighted value */\r
- UChar map[ONIG_CHAR_TABLE_SIZE];\r
-} OptMapInfo;\r
-\r
-typedef struct {\r
- MinMaxLen len;\r
-\r
- OptAncInfo anc;\r
- OptExactInfo exb; /* boundary */\r
- OptExactInfo exm; /* middle */\r
- OptExactInfo expr; /* prec read (?=...) */\r
-\r
- OptMapInfo map; /* boundary */\r
-} NodeOptInfo;\r
-\r
-\r
-static int\r
-map_position_value(OnigEncoding enc, int i)\r
-{\r
- static const short int ByteValTable[] = {\r
- 5, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 10, 1, 1,\r
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\r
- 12, 4, 7, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5,\r
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5,\r
- 5, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\r
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 5, 5, 5,\r
- 5, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\r
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 1\r
- };\r
-\r
- if (i < (int )(sizeof(ByteValTable)/sizeof(ByteValTable[0]))) {\r
- if (i == 0 && ONIGENC_MBC_MINLEN(enc) > 1)\r
- return 20;\r
- else\r
- return (int )ByteValTable[i];\r
- }\r
- else\r
- return 4; /* Take it easy. */\r
-}\r
-\r
-static int\r
-distance_value(MinMaxLen* mm)\r
-{\r
- /* 1000 / (min-max-dist + 1) */\r
- static const short int dist_vals[] = {\r
- 1000, 500, 333, 250, 200, 167, 143, 125, 111, 100, \r
- 91, 83, 77, 71, 67, 63, 59, 56, 53, 50, \r
- 48, 45, 43, 42, 40, 38, 37, 36, 34, 33, \r
- 32, 31, 30, 29, 29, 28, 27, 26, 26, 25, \r
- 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, \r
- 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, \r
- 16, 16, 16, 16, 15, 15, 15, 15, 14, 14, \r
- 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, \r
- 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, \r
- 11, 11, 11, 11, 11, 10, 10, 10, 10, 10\r
- };\r
-\r
- int d;\r
-\r
- if (mm->max == ONIG_INFINITE_DISTANCE) return 0;\r
-\r
- d = mm->max - mm->min;\r
- if (d < (int )(sizeof(dist_vals)/sizeof(dist_vals[0])))\r
- /* return dist_vals[d] * 16 / (mm->min + 12); */\r
- return (int )dist_vals[d];\r
- else\r
- return 1;\r
-}\r
-\r
-static int\r
-comp_distance_value(MinMaxLen* d1, MinMaxLen* d2, int v1, int v2)\r
-{\r
- if (v2 <= 0) return -1;\r
- if (v1 <= 0) return 1;\r
-\r
- v1 *= distance_value(d1);\r
- v2 *= distance_value(d2);\r
-\r
- if (v2 > v1) return 1;\r
- if (v2 < v1) return -1;\r
-\r
- if (d2->min < d1->min) return 1;\r
- if (d2->min > d1->min) return -1;\r
- return 0;\r
-}\r
-\r
-static int\r
-is_equal_mml(MinMaxLen* a, MinMaxLen* b)\r
-{\r
- return (a->min == b->min && a->max == b->max) ? 1 : 0;\r
-}\r
-\r
-\r
-static void\r
-set_mml(MinMaxLen* mml, OnigDistance min, OnigDistance max)\r
-{\r
- mml->min = min;\r
- mml->max = max;\r
-}\r
-\r
-static void\r
-clear_mml(MinMaxLen* mml)\r
-{\r
- mml->min = mml->max = 0;\r
-}\r
-\r
-static void\r
-copy_mml(MinMaxLen* to, MinMaxLen* from)\r
-{\r
- to->min = from->min;\r
- to->max = from->max;\r
-}\r
-\r
-static void\r
-add_mml(MinMaxLen* to, MinMaxLen* from)\r
-{\r
- to->min = distance_add(to->min, from->min);\r
- to->max = distance_add(to->max, from->max);\r
-}\r
-\r
-#if 0\r
-static void\r
-add_len_mml(MinMaxLen* to, OnigDistance len)\r
-{\r
- to->min = distance_add(to->min, len);\r
- to->max = distance_add(to->max, len);\r
-}\r
-#endif\r
-\r
-static void\r
-alt_merge_mml(MinMaxLen* to, MinMaxLen* from)\r
-{\r
- if (to->min > from->min) to->min = from->min;\r
- if (to->max < from->max) to->max = from->max;\r
-}\r
-\r
-static void\r
-copy_opt_env(OptEnv* to, OptEnv* from)\r
-{\r
- *to = *from;\r
-}\r
-\r
-static void\r
-clear_opt_anc_info(OptAncInfo* anc)\r
-{\r
- anc->left_anchor = 0;\r
- anc->right_anchor = 0;\r
-}\r
-\r
-static void\r
-copy_opt_anc_info(OptAncInfo* to, OptAncInfo* from)\r
-{\r
- *to = *from;\r
-}\r
-\r
-static void\r
-concat_opt_anc_info(OptAncInfo* to, OptAncInfo* left, OptAncInfo* right,\r
- OnigDistance left_len, OnigDistance right_len)\r
-{\r
- clear_opt_anc_info(to);\r
-\r
- to->left_anchor = left->left_anchor;\r
- if (left_len == 0) {\r
- to->left_anchor |= right->left_anchor;\r
- }\r
-\r
- to->right_anchor = right->right_anchor;\r
- if (right_len == 0) {\r
- to->right_anchor |= left->right_anchor;\r
- }\r
-}\r
-\r
-static int\r
-is_left_anchor(int anc)\r
-{\r
- if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF ||\r
- anc == ANCHOR_END_LINE || anc == ANCHOR_PREC_READ ||\r
- anc == ANCHOR_PREC_READ_NOT)\r
- return 0;\r
-\r
- return 1;\r
-}\r
-\r
-static int\r
-is_set_opt_anc_info(OptAncInfo* to, int anc)\r
-{\r
- if ((to->left_anchor & anc) != 0) return 1;\r
-\r
- return ((to->right_anchor & anc) != 0 ? 1 : 0);\r
-}\r
-\r
-static void\r
-add_opt_anc_info(OptAncInfo* to, int anc)\r
-{\r
- if (is_left_anchor(anc))\r
- to->left_anchor |= anc;\r
- else\r
- to->right_anchor |= anc;\r
-}\r
-\r
-static void\r
-remove_opt_anc_info(OptAncInfo* to, int anc)\r
-{\r
- if (is_left_anchor(anc))\r
- to->left_anchor &= ~anc;\r
- else\r
- to->right_anchor &= ~anc;\r
-}\r
-\r
-static void\r
-alt_merge_opt_anc_info(OptAncInfo* to, OptAncInfo* add)\r
-{\r
- to->left_anchor &= add->left_anchor;\r
- to->right_anchor &= add->right_anchor;\r
-}\r
-\r
-static int\r
-is_full_opt_exact_info(OptExactInfo* ex)\r
-{\r
- return (ex->len >= OPT_EXACT_MAXLEN ? 1 : 0);\r
-}\r
-\r
-static void\r
-clear_opt_exact_info(OptExactInfo* ex)\r
-{\r
- clear_mml(&ex->mmd);\r
- clear_opt_anc_info(&ex->anc);\r
- ex->reach_end = 0;\r
- ex->ignore_case = 0;\r
- ex->len = 0;\r
- ex->s[0] = '\0';\r
-}\r
-\r
-static void\r
-copy_opt_exact_info(OptExactInfo* to, OptExactInfo* from)\r
-{\r
- *to = *from;\r
-}\r
-\r
-static void\r
-concat_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OnigEncoding enc)\r
-{\r
- int i, j, len;\r
- UChar *p, *end;\r
- OptAncInfo tanc;\r
-\r
- if (! to->ignore_case && add->ignore_case) {\r
- if (to->len >= add->len) return ; /* avoid */\r
-\r
- to->ignore_case = 1;\r
- }\r
-\r
- p = add->s;\r
- end = p + add->len;\r
- for (i = to->len; p < end; ) {\r
- len = enclen(enc, p);\r
- if (i + len > OPT_EXACT_MAXLEN) break;\r
- for (j = 0; j < len && p < end; j++)\r
- to->s[i++] = *p++;\r
- }\r
-\r
- to->len = i;\r
- to->reach_end = (p == end ? add->reach_end : 0);\r
-\r
- concat_opt_anc_info(&tanc, &to->anc, &add->anc, 1, 1);\r
- if (! to->reach_end) tanc.right_anchor = 0;\r
- copy_opt_anc_info(&to->anc, &tanc);\r
-}\r
-\r
-static void\r
-concat_opt_exact_info_str(OptExactInfo* to, UChar* s, UChar* end,\r
- int raw ARG_UNUSED, OnigEncoding enc)\r
-{\r
- int i, j, len;\r
- UChar *p;\r
-\r
- for (i = to->len, p = s; p < end && i < OPT_EXACT_MAXLEN; ) {\r
- len = enclen(enc, p);\r
- if (i + len > OPT_EXACT_MAXLEN) break;\r
- for (j = 0; j < len && p < end; j++)\r
- to->s[i++] = *p++;\r
- }\r
-\r
- to->len = i;\r
-}\r
-\r
-static void\r
-alt_merge_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OptEnv* env)\r
-{\r
- int i, j, len;\r
-\r
- if (add->len == 0 || to->len == 0) {\r
- clear_opt_exact_info(to);\r
- return ;\r
- }\r
-\r
- if (! is_equal_mml(&to->mmd, &add->mmd)) {\r
- clear_opt_exact_info(to);\r
- return ;\r
- }\r
-\r
- for (i = 0; i < to->len && i < add->len; ) {\r
- if (to->s[i] != add->s[i]) break;\r
- len = enclen(env->enc, to->s + i);\r
-\r
- for (j = 1; j < len; j++) {\r
- if (to->s[i+j] != add->s[i+j]) break;\r
- }\r
- if (j < len) break;\r
- i += len;\r
- }\r
-\r
- if (! add->reach_end || i < add->len || i < to->len) {\r
- to->reach_end = 0;\r
- }\r
- to->len = i;\r
- to->ignore_case |= add->ignore_case;\r
-\r
- alt_merge_opt_anc_info(&to->anc, &add->anc);\r
- if (! to->reach_end) to->anc.right_anchor = 0;\r
-}\r
-\r
-static void\r
-select_opt_exact_info(OnigEncoding enc, OptExactInfo* now, OptExactInfo* alt)\r
-{\r
- int v1, v2;\r
-\r
- v1 = now->len;\r
- v2 = alt->len;\r
-\r
- if (v2 == 0) {\r
- return ;\r
- }\r
- else if (v1 == 0) {\r
- copy_opt_exact_info(now, alt);\r
- return ;\r
- }\r
- else if (v1 <= 2 && v2 <= 2) {\r
- /* ByteValTable[x] is big value --> low price */\r
- v2 = map_position_value(enc, now->s[0]);\r
- v1 = map_position_value(enc, alt->s[0]);\r
-\r
- if (now->len > 1) v1 += 5;\r
- if (alt->len > 1) v2 += 5;\r
- }\r
-\r
- if (now->ignore_case == 0) v1 *= 2;\r
- if (alt->ignore_case == 0) v2 *= 2;\r
-\r
- if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)\r
- copy_opt_exact_info(now, alt);\r
-}\r
-\r
-static void\r
-clear_opt_map_info(OptMapInfo* map)\r
-{\r
- static const OptMapInfo clean_info = {\r
- {0, 0}, {0, 0}, 0,\r
- {\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\r
- }\r
- };\r
-\r
- xmemcpy(map, &clean_info, sizeof(OptMapInfo));\r
-}\r
-\r
-static void\r
-copy_opt_map_info(OptMapInfo* to, OptMapInfo* from)\r
-{\r
- *to = *from;\r
-}\r
-\r
-static void\r
-add_char_opt_map_info(OptMapInfo* map, UChar c, OnigEncoding enc)\r
-{\r
- if (map->map[c] == 0) {\r
- map->map[c] = 1;\r
- map->value += map_position_value(enc, c);\r
- }\r
-}\r
-\r
-static int\r
-add_char_amb_opt_map_info(OptMapInfo* map, UChar* p, UChar* end,\r
- OnigEncoding enc, OnigCaseFoldType case_fold_flag)\r
-{\r
- OnigCaseFoldCodeItem items[ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM];\r
- UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
- int i, n;\r
-\r
- add_char_opt_map_info(map, p[0], enc);\r
-\r
- case_fold_flag = DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag);\r
- n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, case_fold_flag, p, end, items);\r
- if (n < 0) return n;\r
-\r
- for (i = 0; i < n; i++) {\r
- ONIGENC_CODE_TO_MBC(enc, items[i].code[0], buf);\r
- add_char_opt_map_info(map, buf[0], enc);\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static void\r
-select_opt_map_info(OptMapInfo* now, OptMapInfo* alt)\r
-{\r
- static int z = 1<<15; /* 32768: something big value */\r
-\r
- int v1, v2;\r
-\r
- if (alt->value == 0) return ;\r
- if (now->value == 0) {\r
- copy_opt_map_info(now, alt);\r
- return ;\r
- }\r
-\r
- v1 = z / now->value;\r
- v2 = z / alt->value;\r
- if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0)\r
- copy_opt_map_info(now, alt);\r
-}\r
-\r
-static int\r
-comp_opt_exact_or_map_info(OptExactInfo* e, OptMapInfo* m)\r
-{\r
-#define COMP_EM_BASE 20\r
- int ve, vm;\r
-\r
- if (m->value <= 0) return -1;\r
-\r
- ve = COMP_EM_BASE * e->len * (e->ignore_case ? 1 : 2);\r
- vm = COMP_EM_BASE * 5 * 2 / m->value;\r
- return comp_distance_value(&e->mmd, &m->mmd, ve, vm);\r
-}\r
-\r
-static void\r
-alt_merge_opt_map_info(OnigEncoding enc, OptMapInfo* to, OptMapInfo* add)\r
-{\r
- int i, val;\r
-\r
- /* if (! is_equal_mml(&to->mmd, &add->mmd)) return ; */\r
- if (to->value == 0) return ;\r
- if (add->value == 0 || to->mmd.max < add->mmd.min) {\r
- clear_opt_map_info(to);\r
- return ;\r
- }\r
-\r
- alt_merge_mml(&to->mmd, &add->mmd);\r
-\r
- val = 0;\r
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {\r
- if (add->map[i])\r
- to->map[i] = 1;\r
-\r
- if (to->map[i])\r
- val += map_position_value(enc, i);\r
- }\r
- to->value = val;\r
-\r
- alt_merge_opt_anc_info(&to->anc, &add->anc);\r
-}\r
-\r
-static void\r
-set_bound_node_opt_info(NodeOptInfo* opt, MinMaxLen* mmd)\r
-{\r
- copy_mml(&(opt->exb.mmd), mmd);\r
- copy_mml(&(opt->expr.mmd), mmd);\r
- copy_mml(&(opt->map.mmd), mmd);\r
-}\r
-\r
-static void\r
-clear_node_opt_info(NodeOptInfo* opt)\r
-{\r
- clear_mml(&opt->len);\r
- clear_opt_anc_info(&opt->anc);\r
- clear_opt_exact_info(&opt->exb);\r
- clear_opt_exact_info(&opt->exm);\r
- clear_opt_exact_info(&opt->expr);\r
- clear_opt_map_info(&opt->map);\r
-}\r
-\r
-static void\r
-copy_node_opt_info(NodeOptInfo* to, NodeOptInfo* from)\r
-{\r
- *to = *from;\r
-}\r
-\r
-static void\r
-concat_left_node_opt_info(OnigEncoding enc, NodeOptInfo* to, NodeOptInfo* add)\r
-{\r
- int exb_reach, exm_reach;\r
- OptAncInfo tanc;\r
-\r
- concat_opt_anc_info(&tanc, &to->anc, &add->anc, to->len.max, add->len.max);\r
- copy_opt_anc_info(&to->anc, &tanc);\r
-\r
- if (add->exb.len > 0 && to->len.max == 0) {\r
- concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc,\r
- to->len.max, add->len.max);\r
- copy_opt_anc_info(&add->exb.anc, &tanc);\r
- }\r
-\r
- if (add->map.value > 0 && to->len.max == 0) {\r
- if (add->map.mmd.max == 0)\r
- add->map.anc.left_anchor |= to->anc.left_anchor;\r
- }\r
-\r
- exb_reach = to->exb.reach_end;\r
- exm_reach = to->exm.reach_end;\r
-\r
- if (add->len.max != 0)\r
- to->exb.reach_end = to->exm.reach_end = 0;\r
-\r
- if (add->exb.len > 0) {\r
- if (exb_reach) {\r
- concat_opt_exact_info(&to->exb, &add->exb, enc);\r
- clear_opt_exact_info(&add->exb);\r
- }\r
- else if (exm_reach) {\r
- concat_opt_exact_info(&to->exm, &add->exb, enc);\r
- clear_opt_exact_info(&add->exb);\r
- }\r
- }\r
- select_opt_exact_info(enc, &to->exm, &add->exb);\r
- select_opt_exact_info(enc, &to->exm, &add->exm);\r
-\r
- if (to->expr.len > 0) {\r
- if (add->len.max > 0) {\r
- if (to->expr.len > (int )add->len.max)\r
- to->expr.len = add->len.max;\r
-\r
- if (to->expr.mmd.max == 0)\r
- select_opt_exact_info(enc, &to->exb, &to->expr);\r
- else\r
- select_opt_exact_info(enc, &to->exm, &to->expr);\r
- }\r
- }\r
- else if (add->expr.len > 0) {\r
- copy_opt_exact_info(&to->expr, &add->expr);\r
- }\r
-\r
- select_opt_map_info(&to->map, &add->map);\r
-\r
- add_mml(&to->len, &add->len);\r
-}\r
-\r
-static void\r
-alt_merge_node_opt_info(NodeOptInfo* to, NodeOptInfo* add, OptEnv* env)\r
-{\r
- alt_merge_opt_anc_info (&to->anc, &add->anc);\r
- alt_merge_opt_exact_info(&to->exb, &add->exb, env);\r
- alt_merge_opt_exact_info(&to->exm, &add->exm, env);\r
- alt_merge_opt_exact_info(&to->expr, &add->expr, env);\r
- alt_merge_opt_map_info(env->enc, &to->map, &add->map);\r
-\r
- alt_merge_mml(&to->len, &add->len);\r
-}\r
-\r
-\r
-#define MAX_NODE_OPT_INFO_REF_COUNT 5\r
-\r
-static int\r
-optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)\r
-{\r
- int type;\r
- int r = 0;\r
-\r
- clear_node_opt_info(opt);\r
- set_bound_node_opt_info(opt, &env->mmd);\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- {\r
- OptEnv nenv;\r
- NodeOptInfo nopt;\r
- Node* nd = node;\r
-\r
- copy_opt_env(&nenv, env);\r
- do {\r
- r = optimize_node_left(NCAR(nd), &nopt, &nenv);\r
- if (r == 0) {\r
- add_mml(&nenv.mmd, &nopt.len);\r
- concat_left_node_opt_info(env->enc, opt, &nopt);\r
- }\r
- } while (r == 0 && IS_NOT_NULL(nd = NCDR(nd)));\r
- }\r
- break;\r
-\r
- case NT_ALT:\r
- {\r
- NodeOptInfo nopt;\r
- Node* nd = node;\r
-\r
- do {\r
- r = optimize_node_left(NCAR(nd), &nopt, env);\r
- if (r == 0) {\r
- if (nd == node) copy_node_opt_info(opt, &nopt);\r
- else alt_merge_node_opt_info(opt, &nopt, env);\r
- }\r
- } while ((r == 0) && IS_NOT_NULL(nd = NCDR(nd)));\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- {\r
- StrNode* sn = NSTR(node);\r
- int slen = (int)(sn->end - sn->s);\r
- int is_raw = NSTRING_IS_RAW(node);\r
-\r
- if (! NSTRING_IS_AMBIG(node)) {\r
- concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,\r
- NSTRING_IS_RAW(node), env->enc);\r
- if (slen > 0) {\r
- add_char_opt_map_info(&opt->map, *(sn->s), env->enc);\r
- }\r
- set_mml(&opt->len, slen, slen);\r
- }\r
- else {\r
- int max;\r
-\r
- if (NSTRING_IS_DONT_GET_OPT_INFO(node)) {\r
- int n = onigenc_strlen(env->enc, sn->s, sn->end);\r
- max = ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;\r
- }\r
- else {\r
- concat_opt_exact_info_str(&opt->exb, sn->s, sn->end,\r
- is_raw, env->enc);\r
- opt->exb.ignore_case = 1;\r
-\r
- if (slen > 0) {\r
- r = add_char_amb_opt_map_info(&opt->map, sn->s, sn->end,\r
- env->enc, env->case_fold_flag);\r
- if (r != 0) break;\r
- }\r
-\r
- max = slen;\r
- }\r
-\r
- set_mml(&opt->len, slen, max);\r
- }\r
-\r
- if (opt->exb.len == slen)\r
- opt->exb.reach_end = 1;\r
- }\r
- break;\r
-\r
- case NT_CCLASS:\r
- {\r
- int i, z;\r
- CClassNode* cc = NCCLASS(node);\r
-\r
- /* no need to check ignore case. (setted in setup_tree()) */\r
-\r
- if (IS_NOT_NULL(cc->mbuf) || IS_NCCLASS_NOT(cc)) {\r
- OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);\r
- OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
-\r
- set_mml(&opt->len, min, max);\r
- }\r
- else {\r
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
- z = BITSET_AT(cc->bs, i);\r
- if ((z && !IS_NCCLASS_NOT(cc)) || (!z && IS_NCCLASS_NOT(cc))) {\r
- add_char_opt_map_info(&opt->map, (UChar )i, env->enc);\r
- }\r
- }\r
- set_mml(&opt->len, 1, 1);\r
- }\r
- }\r
- break;\r
-\r
- case NT_CTYPE:\r
- {\r
- int i, min, max;\r
-\r
- max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
-\r
- if (max == 1) {\r
- min = 1;\r
-\r
- switch (NCTYPE(node)->ctype) {\r
- case ONIGENC_CTYPE_WORD:\r
- if (NCTYPE(node)->not != 0) {\r
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
- if (! ONIGENC_IS_CODE_WORD(env->enc, i)) {\r
- add_char_opt_map_info(&opt->map, (UChar )i, env->enc);\r
- }\r
- }\r
- }\r
- else {\r
- for (i = 0; i < SINGLE_BYTE_SIZE; i++) {\r
- if (ONIGENC_IS_CODE_WORD(env->enc, i)) {\r
- add_char_opt_map_info(&opt->map, (UChar )i, env->enc);\r
- }\r
- }\r
- }\r
- break;\r
- }\r
- }\r
- else {\r
- min = ONIGENC_MBC_MINLEN(env->enc);\r
- }\r
- set_mml(&opt->len, min, max);\r
- }\r
- break;\r
-\r
- case NT_CANY:\r
- {\r
- OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);\r
- OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc);\r
- set_mml(&opt->len, min, max);\r
- }\r
- break;\r
-\r
- case NT_ANCHOR:\r
- switch (NANCHOR(node)->type) {\r
- case ANCHOR_BEGIN_BUF:\r
- case ANCHOR_BEGIN_POSITION:\r
- case ANCHOR_BEGIN_LINE:\r
- case ANCHOR_END_BUF:\r
- case ANCHOR_SEMI_END_BUF:\r
- case ANCHOR_END_LINE:\r
- add_opt_anc_info(&opt->anc, NANCHOR(node)->type);\r
- break;\r
-\r
- case ANCHOR_PREC_READ:\r
- {\r
- NodeOptInfo nopt;\r
-\r
- r = optimize_node_left(NANCHOR(node)->target, &nopt, env);\r
- if (r == 0) {\r
- if (nopt.exb.len > 0)\r
- copy_opt_exact_info(&opt->expr, &nopt.exb);\r
- else if (nopt.exm.len > 0)\r
- copy_opt_exact_info(&opt->expr, &nopt.exm);\r
-\r
- opt->expr.reach_end = 0;\r
-\r
- if (nopt.map.value > 0)\r
- copy_opt_map_info(&opt->map, &nopt.map);\r
- }\r
- }\r
- break;\r
-\r
- case ANCHOR_PREC_READ_NOT:\r
- case ANCHOR_LOOK_BEHIND: /* Sorry, I can't make use of it. */\r
- case ANCHOR_LOOK_BEHIND_NOT:\r
- break;\r
- }\r
- break;\r
-\r
- case NT_BREF:\r
- {\r
- int i;\r
- int* backs;\r
- OnigDistance min, max, tmin, tmax;\r
- Node** nodes = SCANENV_MEM_NODES(env->scan_env);\r
- BRefNode* br = NBREF(node);\r
-\r
- if (br->state & NST_RECURSION) {\r
- set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);\r
- break;\r
- }\r
- backs = BACKREFS_P(br);\r
- r = get_min_match_length(nodes[backs[0]], &min, env->scan_env);\r
- if (r != 0) break;\r
- r = get_max_match_length(nodes[backs[0]], &max, env->scan_env);\r
- if (r != 0) break;\r
- for (i = 1; i < br->back_num; i++) {\r
- r = get_min_match_length(nodes[backs[i]], &tmin, env->scan_env);\r
- if (r != 0) break;\r
- r = get_max_match_length(nodes[backs[i]], &tmax, env->scan_env);\r
- if (r != 0) break;\r
- if (min > tmin) min = tmin;\r
- if (max < tmax) max = tmax;\r
- }\r
- if (r == 0) set_mml(&opt->len, min, max);\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- if (IS_CALL_RECURSION(NCALL(node)))\r
- set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);\r
- else {\r
- OnigOptionType save = env->options;\r
- env->options = NENCLOSE(NCALL(node)->target)->option;\r
- r = optimize_node_left(NCALL(node)->target, opt, env);\r
- env->options = save;\r
- }\r
- break;\r
-#endif\r
-\r
- case NT_QTFR:\r
- {\r
- int i;\r
- OnigDistance min, max;\r
- NodeOptInfo nopt;\r
- QtfrNode* qn = NQTFR(node);\r
-\r
- r = optimize_node_left(qn->target, &nopt, env);\r
- if (r) break;\r
-\r
- if (qn->lower == 0 && IS_REPEAT_INFINITE(qn->upper)) {\r
- if (env->mmd.max == 0 &&\r
- NTYPE(qn->target) == NT_CANY && qn->greedy) {\r
- if (IS_MULTILINE(env->options))\r
- add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_ML);\r
- else\r
- add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR);\r
- }\r
- }\r
- else {\r
- if (qn->lower > 0) {\r
- copy_node_opt_info(opt, &nopt);\r
- if (nopt.exb.len > 0) {\r
- if (nopt.exb.reach_end) {\r
- for (i = 2; i <= qn->lower &&\r
- ! is_full_opt_exact_info(&opt->exb); i++) {\r
- concat_opt_exact_info(&opt->exb, &nopt.exb, env->enc);\r
- }\r
- if (i < qn->lower) {\r
- opt->exb.reach_end = 0;\r
- }\r
- }\r
- }\r
-\r
- if (qn->lower != qn->upper) {\r
- opt->exb.reach_end = 0;\r
- opt->exm.reach_end = 0;\r
- }\r
- if (qn->lower > 1)\r
- opt->exm.reach_end = 0;\r
- }\r
- }\r
-\r
- min = distance_multiply(nopt.len.min, qn->lower);\r
- if (IS_REPEAT_INFINITE(qn->upper))\r
- max = (nopt.len.max > 0 ? ONIG_INFINITE_DISTANCE : 0);\r
- else\r
- max = distance_multiply(nopt.len.max, qn->upper);\r
-\r
- set_mml(&opt->len, min, max);\r
- }\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- {\r
- EncloseNode* en = NENCLOSE(node);\r
-\r
- switch (en->type) {\r
- case ENCLOSE_OPTION:\r
- {\r
- OnigOptionType save = env->options;\r
-\r
- env->options = en->option;\r
- r = optimize_node_left(en->target, opt, env);\r
- env->options = save;\r
- }\r
- break;\r
-\r
- case ENCLOSE_MEMORY:\r
-#ifdef USE_SUBEXP_CALL\r
- en->opt_count++;\r
- if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) {\r
- OnigDistance min, max;\r
-\r
- min = 0;\r
- max = ONIG_INFINITE_DISTANCE;\r
- if (IS_ENCLOSE_MIN_FIXED(en)) min = en->min_len;\r
- if (IS_ENCLOSE_MAX_FIXED(en)) max = en->max_len;\r
- set_mml(&opt->len, min, max);\r
- }\r
- else\r
-#endif\r
- {\r
- r = optimize_node_left(en->target, opt, env);\r
-\r
- if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK)) {\r
- if (BIT_STATUS_AT(env->scan_env->backrefed_mem, en->regnum))\r
- remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK);\r
- }\r
- }\r
- break;\r
-\r
- case ENCLOSE_STOP_BACKTRACK:\r
- r = optimize_node_left(en->target, opt, env);\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- default:\r
-#ifdef ONIG_DEBUG\r
- fprintf(stderr, "optimize_node_left: undefined node type %d\n",\r
- NTYPE(node));\r
-#endif\r
- r = ONIGERR_TYPE_BUG;\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-set_optimize_exact_info(regex_t* reg, OptExactInfo* e)\r
-{\r
- int r;\r
-\r
- if (e->len == 0) return 0;\r
-\r
- if (e->ignore_case) {\r
- reg->exact = (UChar* )xmalloc(e->len);\r
- CHECK_NULL_RETURN_MEMERR(reg->exact);\r
- xmemcpy(reg->exact, e->s, e->len);\r
- reg->exact_end = reg->exact + e->len;\r
- reg->optimize = ONIG_OPTIMIZE_EXACT_IC;\r
- }\r
- else {\r
- int allow_reverse;\r
-\r
- reg->exact = str_dup(e->s, e->s + e->len);\r
- CHECK_NULL_RETURN_MEMERR(reg->exact);\r
- reg->exact_end = reg->exact + e->len;\r
- \r
- allow_reverse =\r
- ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end);\r
-\r
- if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {\r
- r = set_bm_skip(reg->exact, reg->exact_end, reg->enc,\r
- reg->map, &(reg->int_map));\r
- if (r) return r;\r
-\r
- reg->optimize = (allow_reverse != 0\r
- ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);\r
- }\r
- else {\r
- reg->optimize = ONIG_OPTIMIZE_EXACT;\r
- }\r
- }\r
-\r
- reg->dmin = e->mmd.min;\r
- reg->dmax = e->mmd.max;\r
-\r
- if (reg->dmin != ONIG_INFINITE_DISTANCE) {\r
- reg->threshold_len = reg->dmin + (int)(reg->exact_end - reg->exact);\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static void\r
-set_optimize_map_info(regex_t* reg, OptMapInfo* m)\r
-{\r
- int i;\r
-\r
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)\r
- reg->map[i] = m->map[i];\r
-\r
- reg->optimize = ONIG_OPTIMIZE_MAP;\r
- reg->dmin = m->mmd.min;\r
- reg->dmax = m->mmd.max;\r
-\r
- if (reg->dmin != ONIG_INFINITE_DISTANCE) {\r
- reg->threshold_len = reg->dmin + 1;\r
- }\r
-}\r
-\r
-static void\r
-set_sub_anchor(regex_t* reg, OptAncInfo* anc)\r
-{\r
- reg->sub_anchor |= anc->left_anchor & ANCHOR_BEGIN_LINE;\r
- reg->sub_anchor |= anc->right_anchor & ANCHOR_END_LINE;\r
-}\r
-\r
-#ifdef ONIG_DEBUG\r
-static void print_optimize_info(FILE* f, regex_t* reg);\r
-#endif\r
-\r
-static int\r
-set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)\r
-{\r
-\r
- int r;\r
- NodeOptInfo opt;\r
- OptEnv env;\r
-\r
- env.enc = reg->enc;\r
- env.options = reg->options;\r
- env.case_fold_flag = reg->case_fold_flag;\r
- env.scan_env = scan_env;\r
- clear_mml(&env.mmd);\r
-\r
- r = optimize_node_left(node, &opt, &env);\r
- if (r) return r;\r
-\r
- reg->anchor = opt.anc.left_anchor & (ANCHOR_BEGIN_BUF |\r
- ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML);\r
-\r
- reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF);\r
-\r
- if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {\r
- reg->anchor_dmin = opt.len.min;\r
- reg->anchor_dmax = opt.len.max;\r
- }\r
-\r
- if (opt.exb.len > 0 || opt.exm.len > 0) {\r
- select_opt_exact_info(reg->enc, &opt.exb, &opt.exm);\r
- if (opt.map.value > 0 &&\r
- comp_opt_exact_or_map_info(&opt.exb, &opt.map) > 0) {\r
- goto set_map;\r
- }\r
- else {\r
- r = set_optimize_exact_info(reg, &opt.exb);\r
- set_sub_anchor(reg, &opt.exb.anc);\r
- }\r
- }\r
- else if (opt.map.value > 0) {\r
- set_map:\r
- set_optimize_map_info(reg, &opt.map);\r
- set_sub_anchor(reg, &opt.map.anc);\r
- }\r
- else {\r
- reg->sub_anchor |= opt.anc.left_anchor & ANCHOR_BEGIN_LINE;\r
- if (opt.len.max == 0)\r
- reg->sub_anchor |= opt.anc.right_anchor & ANCHOR_END_LINE;\r
- }\r
-\r
-#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH)\r
- print_optimize_info(stderr, reg);\r
-#endif\r
- return r;\r
-}\r
-\r
-static void\r
-clear_optimize_info(regex_t* reg)\r
-{\r
- reg->optimize = ONIG_OPTIMIZE_NONE;\r
- reg->anchor = 0;\r
- reg->anchor_dmin = 0;\r
- reg->anchor_dmax = 0;\r
- reg->sub_anchor = 0;\r
- reg->exact_end = (UChar* )NULL;\r
- reg->threshold_len = 0;\r
- if (IS_NOT_NULL(reg->exact)) {\r
- xfree(reg->exact);\r
- reg->exact = (UChar* )NULL;\r
- }\r
-}\r
-\r
-#ifdef ONIG_DEBUG\r
-\r
-static void print_enc_string(FILE* fp, OnigEncoding enc,\r
- const UChar *s, const UChar *end)\r
-{\r
- fprintf(fp, "\nPATTERN: /");\r
-\r
- if (ONIGENC_MBC_MINLEN(enc) > 1) {\r
- const UChar *p;\r
- OnigCodePoint code;\r
-\r
- p = s;\r
- while (p < end) {\r
- code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
- if (code >= 0x80) {\r
- fprintf(fp, " 0x%04x ", (int )code);\r
- }\r
- else {\r
- fputc((int )code, fp);\r
- }\r
-\r
- p += enclen(enc, p);\r
- }\r
- }\r
- else {\r
- while (s < end) {\r
- fputc((int )*s, fp);\r
- s++;\r
- }\r
- }\r
-\r
- fprintf(fp, "/\n");\r
-}\r
-\r
-static void\r
-print_distance_range(FILE* f, OnigDistance a, OnigDistance b)\r
-{\r
- if (a == ONIG_INFINITE_DISTANCE)\r
- fputs("inf", f);\r
- else\r
- fprintf(f, "(%u)", a);\r
-\r
- fputs("-", f);\r
-\r
- if (b == ONIG_INFINITE_DISTANCE)\r
- fputs("inf", f);\r
- else\r
- fprintf(f, "(%u)", b);\r
-}\r
-\r
-static void\r
-print_anchor(FILE* f, int anchor)\r
-{\r
- int q = 0;\r
-\r
- fprintf(f, "[");\r
-\r
- if (anchor & ANCHOR_BEGIN_BUF) {\r
- fprintf(f, "begin-buf");\r
- q = 1;\r
- }\r
- if (anchor & ANCHOR_BEGIN_LINE) {\r
- if (q) fprintf(f, ", ");\r
- q = 1;\r
- fprintf(f, "begin-line");\r
- }\r
- if (anchor & ANCHOR_BEGIN_POSITION) {\r
- if (q) fprintf(f, ", ");\r
- q = 1;\r
- fprintf(f, "begin-pos");\r
- }\r
- if (anchor & ANCHOR_END_BUF) {\r
- if (q) fprintf(f, ", ");\r
- q = 1;\r
- fprintf(f, "end-buf");\r
- }\r
- if (anchor & ANCHOR_SEMI_END_BUF) {\r
- if (q) fprintf(f, ", ");\r
- q = 1;\r
- fprintf(f, "semi-end-buf");\r
- }\r
- if (anchor & ANCHOR_END_LINE) {\r
- if (q) fprintf(f, ", ");\r
- q = 1;\r
- fprintf(f, "end-line");\r
- }\r
- if (anchor & ANCHOR_ANYCHAR_STAR) {\r
- if (q) fprintf(f, ", ");\r
- q = 1;\r
- fprintf(f, "anychar-star");\r
- }\r
- if (anchor & ANCHOR_ANYCHAR_STAR_ML) {\r
- if (q) fprintf(f, ", ");\r
- fprintf(f, "anychar-star-pl");\r
- }\r
-\r
- fprintf(f, "]");\r
-}\r
-\r
-static void\r
-print_optimize_info(FILE* f, regex_t* reg)\r
-{\r
- static const char* on[] = { "NONE", "EXACT", "EXACT_BM", "EXACT_BM_NOT_REV",\r
- "EXACT_IC", "MAP" };\r
-\r
- fprintf(f, "optimize: %s\n", on[reg->optimize]);\r
- fprintf(f, " anchor: "); print_anchor(f, reg->anchor);\r
- if ((reg->anchor & ANCHOR_END_BUF_MASK) != 0)\r
- print_distance_range(f, reg->anchor_dmin, reg->anchor_dmax);\r
- fprintf(f, "\n");\r
-\r
- if (reg->optimize) {\r
- fprintf(f, " sub anchor: "); print_anchor(f, reg->sub_anchor);\r
- fprintf(f, "\n");\r
- }\r
- fprintf(f, "\n");\r
-\r
- if (reg->exact) {\r
- UChar *p;\r
- fprintf(f, "exact: [");\r
- for (p = reg->exact; p < reg->exact_end; p++) {\r
- fputc(*p, f);\r
- }\r
- fprintf(f, "]: length: %d\n", (reg->exact_end - reg->exact));\r
- }\r
- else if (reg->optimize & ONIG_OPTIMIZE_MAP) {\r
- int c, i, n = 0;\r
-\r
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)\r
- if (reg->map[i]) n++;\r
-\r
- fprintf(f, "map: n=%d\n", n);\r
- if (n > 0) {\r
- c = 0;\r
- fputc('[', f);\r
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {\r
- if (reg->map[i] != 0) {\r
- if (c > 0) fputs(", ", f);\r
- c++;\r
- if (ONIGENC_MBC_MAXLEN(reg->enc) == 1 &&\r
- ONIGENC_IS_CODE_PRINT(reg->enc, (OnigCodePoint )i))\r
- fputc(i, f);\r
- else\r
- fprintf(f, "%d", i);\r
- }\r
- }\r
- fprintf(f, "]\n");\r
- }\r
- }\r
-}\r
-#endif /* ONIG_DEBUG */\r
-\r
-\r
-extern void\r
-onig_free_body(regex_t* reg)\r
-{\r
- if (IS_NOT_NULL(reg)) {\r
- if (IS_NOT_NULL(reg->p)) xfree(reg->p);\r
- if (IS_NOT_NULL(reg->exact)) xfree(reg->exact);\r
- if (IS_NOT_NULL(reg->int_map)) xfree(reg->int_map);\r
- if (IS_NOT_NULL(reg->int_map_backward)) xfree(reg->int_map_backward);\r
- if (IS_NOT_NULL(reg->repeat_range)) xfree(reg->repeat_range);\r
- if (IS_NOT_NULL(reg->chain)) onig_free(reg->chain);\r
-\r
-#ifdef USE_NAMED_GROUP\r
- onig_names_free(reg);\r
-#endif\r
- }\r
-}\r
-\r
-extern void\r
-onig_free(regex_t* reg)\r
-{\r
- if (IS_NOT_NULL(reg)) {\r
- onig_free_body(reg);\r
- xfree(reg);\r
- }\r
-}\r
-\r
-#define REGEX_TRANSFER(to,from) do {\\r
- (to)->state = ONIG_STATE_MODIFY;\\r
- onig_free_body(to);\\r
- xmemcpy(to, from, sizeof(regex_t));\\r
- xfree(from);\\r
-} while (0)\r
-\r
-extern void\r
-onig_transfer(regex_t* to, regex_t* from)\r
-{\r
- THREAD_ATOMIC_START;\r
- REGEX_TRANSFER(to, from);\r
- THREAD_ATOMIC_END;\r
-}\r
-\r
-#define REGEX_CHAIN_HEAD(reg) do {\\r
- while (IS_NOT_NULL((reg)->chain)) {\\r
- (reg) = (reg)->chain;\\r
- }\\r
-} while (0)\r
-\r
-extern void\r
-onig_chain_link_add(regex_t* to, regex_t* add)\r
-{\r
- THREAD_ATOMIC_START;\r
- REGEX_CHAIN_HEAD(to);\r
- to->chain = add;\r
- THREAD_ATOMIC_END;\r
-}\r
-\r
-extern void\r
-onig_chain_reduce(regex_t* reg)\r
-{\r
- regex_t *head, *prev;\r
-\r
- prev = reg;\r
- head = prev->chain;\r
- if (IS_NOT_NULL(head)) {\r
- reg->state = ONIG_STATE_MODIFY;\r
- while (IS_NOT_NULL(head->chain)) {\r
- prev = head;\r
- head = head->chain;\r
- }\r
- prev->chain = (regex_t* )NULL;\r
- REGEX_TRANSFER(reg, head);\r
- }\r
-}\r
-\r
-#ifdef ONIG_DEBUG\r
-static void print_compiled_byte_code_list P_((FILE* f, regex_t* reg));\r
-#endif\r
-#ifdef ONIG_DEBUG_PARSE_TREE\r
-static void print_tree P_((FILE* f, Node* node));\r
-#endif\r
-\r
-extern int\r
-onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,\r
- OnigErrorInfo* einfo)\r
-{\r
-#define COMPILE_INIT_SIZE 20\r
-\r
- int r, init_size;\r
- Node* root;\r
- ScanEnv scan_env;\r
-#ifdef USE_SUBEXP_CALL\r
- UnsetAddrList uslist;\r
-#endif\r
-\r
- if (IS_NOT_NULL(einfo)) einfo->par = (UChar* )NULL;\r
-\r
- reg->state = ONIG_STATE_COMPILING;\r
-\r
-#ifdef ONIG_DEBUG\r
- print_enc_string(stderr, reg->enc, pattern, pattern_end);\r
-#endif\r
-\r
- if (reg->alloc == 0) {\r
- init_size = ((int)(pattern_end - pattern)) * 2;\r
- if (init_size <= 0) init_size = COMPILE_INIT_SIZE;\r
- r = BBUF_INIT(reg, init_size);\r
- if (r != 0) goto end;\r
- }\r
- else\r
- reg->used = 0;\r
-\r
- reg->num_mem = 0;\r
- reg->num_repeat = 0;\r
- reg->num_null_check = 0;\r
- reg->repeat_range_alloc = 0;\r
- reg->repeat_range = (OnigRepeatRange* )NULL;\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- reg->num_comb_exp_check = 0;\r
-#endif\r
-\r
- r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env);\r
- if (r != 0) goto err;\r
-\r
-#ifdef USE_NAMED_GROUP\r
- /* mixed use named group and no-named group */\r
- if (scan_env.num_named > 0 &&\r
- IS_SYNTAX_BV(scan_env.syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&\r
- !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {\r
- if (scan_env.num_named != scan_env.num_mem)\r
- r = disable_noname_group_capture(&root, reg, &scan_env);\r
- else\r
- r = numbered_ref_check(root);\r
-\r
- if (r != 0) goto err;\r
- }\r
-#endif\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- if (scan_env.num_call > 0) {\r
- r = unset_addr_list_init(&uslist, scan_env.num_call);\r
- if (r != 0) goto err;\r
- scan_env.unset_addr_list = &uslist;\r
- r = setup_subexp_call(root, &scan_env);\r
- if (r != 0) goto err_unset;\r
- r = subexp_recursive_check_trav(root, &scan_env);\r
- if (r < 0) goto err_unset;\r
- r = subexp_inf_recursive_check_trav(root, &scan_env);\r
- if (r != 0) goto err_unset;\r
-\r
- reg->num_call = scan_env.num_call;\r
- }\r
- else\r
- reg->num_call = 0;\r
-#endif\r
-\r
- r = setup_tree(root, reg, 0, &scan_env);\r
- if (r != 0) goto err_unset;\r
-\r
-#ifdef ONIG_DEBUG_PARSE_TREE\r
- print_tree(stderr, root);\r
-#endif\r
-\r
- reg->capture_history = scan_env.capture_history;\r
- reg->bt_mem_start = scan_env.bt_mem_start;\r
- reg->bt_mem_start |= reg->capture_history;\r
- if (IS_FIND_CONDITION(reg->options))\r
- BIT_STATUS_ON_ALL(reg->bt_mem_end);\r
- else {\r
- reg->bt_mem_end = scan_env.bt_mem_end;\r
- reg->bt_mem_end |= reg->capture_history;\r
- }\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- if (scan_env.backrefed_mem == 0\r
-#ifdef USE_SUBEXP_CALL\r
- || scan_env.num_call == 0\r
-#endif\r
- ) {\r
- setup_comb_exp_check(root, 0, &scan_env);\r
-#ifdef USE_SUBEXP_CALL\r
- if (scan_env.has_recursion != 0) {\r
- scan_env.num_comb_exp_check = 0;\r
- }\r
- else\r
-#endif\r
- if (scan_env.comb_exp_max_regnum > 0) {\r
- int i;\r
- for (i = 1; i <= scan_env.comb_exp_max_regnum; i++) {\r
- if (BIT_STATUS_AT(scan_env.backrefed_mem, i) != 0) {\r
- scan_env.num_comb_exp_check = 0;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
-\r
- reg->num_comb_exp_check = scan_env.num_comb_exp_check;\r
-#endif\r
-\r
- clear_optimize_info(reg);\r
-#ifndef ONIG_DONT_OPTIMIZE\r
- r = set_optimize_info_from_tree(root, reg, &scan_env);\r
- if (r != 0) goto err_unset;\r
-#endif\r
-\r
- if (IS_NOT_NULL(scan_env.mem_nodes_dynamic)) {\r
- xfree(scan_env.mem_nodes_dynamic);\r
- scan_env.mem_nodes_dynamic = (Node** )NULL;\r
- }\r
-\r
- r = compile_tree(root, reg);\r
- if (r == 0) {\r
- r = add_opcode(reg, OP_END);\r
-#ifdef USE_SUBEXP_CALL\r
- if (scan_env.num_call > 0) {\r
- r = unset_addr_list_fix(&uslist, reg);\r
- unset_addr_list_end(&uslist);\r
- if (r) goto err;\r
- }\r
-#endif\r
-\r
- if ((reg->num_repeat != 0) || (reg->bt_mem_end != 0))\r
- reg->stack_pop_level = STACK_POP_LEVEL_ALL;\r
- else {\r
- if (reg->bt_mem_start != 0)\r
- reg->stack_pop_level = STACK_POP_LEVEL_MEM_START;\r
- else\r
- reg->stack_pop_level = STACK_POP_LEVEL_FREE;\r
- }\r
- }\r
-#ifdef USE_SUBEXP_CALL\r
- else if (scan_env.num_call > 0) {\r
- unset_addr_list_end(&uslist);\r
- }\r
-#endif\r
- onig_node_free(root);\r
-\r
-#ifdef ONIG_DEBUG_COMPILE\r
-#ifdef USE_NAMED_GROUP\r
- onig_print_names(stderr, reg);\r
-#endif\r
- print_compiled_byte_code_list(stderr, reg);\r
-#endif\r
-\r
- end:\r
- reg->state = ONIG_STATE_NORMAL;\r
- return r;\r
-\r
- err_unset:\r
-#ifdef USE_SUBEXP_CALL\r
- if (scan_env.num_call > 0) {\r
- unset_addr_list_end(&uslist);\r
- }\r
-#endif\r
- err:\r
- if (IS_NOT_NULL(scan_env.error)) {\r
- if (IS_NOT_NULL(einfo)) {\r
- einfo->enc = scan_env.enc;\r
- einfo->par = scan_env.error;\r
- einfo->par_end = scan_env.error_end;\r
- }\r
- }\r
-\r
- onig_node_free(root);\r
- if (IS_NOT_NULL(scan_env.mem_nodes_dynamic))\r
- xfree(scan_env.mem_nodes_dynamic);\r
- return r;\r
-}\r
-\r
-#ifdef USE_RECOMPILE_API\r
-extern int\r
-onig_recompile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,\r
- OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,\r
- OnigErrorInfo* einfo)\r
-{\r
- int r;\r
- regex_t *new_reg;\r
-\r
- r = onig_new(&new_reg, pattern, pattern_end, option, enc, syntax, einfo);\r
- if (r) return r;\r
- if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) {\r
- onig_transfer(reg, new_reg);\r
- }\r
- else {\r
- onig_chain_link_add(reg, new_reg);\r
- }\r
- return 0;\r
-}\r
-#endif\r
-\r
-static int onig_inited = 0;\r
-\r
-extern int\r
-onig_reg_init(regex_t* reg, OnigOptionType option,\r
- OnigCaseFoldType case_fold_flag,\r
- OnigEncoding enc, OnigSyntaxType* syntax)\r
-{\r
- if (! onig_inited)\r
- onig_init();\r
-\r
- if (IS_NULL(reg))\r
- return ONIGERR_INVALID_ARGUMENT;\r
-\r
- if (ONIGENC_IS_UNDEF(enc))\r
- return ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED;\r
-\r
- if ((option & (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP))\r
- == (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP)) {\r
- return ONIGERR_INVALID_COMBINATION_OF_OPTIONS;\r
- }\r
-\r
- (reg)->state = ONIG_STATE_MODIFY;\r
-\r
- if ((option & ONIG_OPTION_NEGATE_SINGLELINE) != 0) {\r
- option |= syntax->options;\r
- option &= ~ONIG_OPTION_SINGLELINE;\r
- }\r
- else\r
- option |= syntax->options;\r
-\r
- (reg)->enc = enc;\r
- (reg)->options = option;\r
- (reg)->syntax = syntax;\r
- (reg)->optimize = 0;\r
- (reg)->exact = (UChar* )NULL;\r
- (reg)->int_map = (int* )NULL;\r
- (reg)->int_map_backward = (int* )NULL;\r
- (reg)->chain = (regex_t* )NULL;\r
-\r
- (reg)->p = (UChar* )NULL;\r
- (reg)->alloc = 0;\r
- (reg)->used = 0;\r
- (reg)->name_table = (void* )NULL;\r
-\r
- (reg)->case_fold_flag = case_fold_flag;\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_new_without_alloc(regex_t* reg, const UChar* pattern,\r
- const UChar* pattern_end, OnigOptionType option, OnigEncoding enc,\r
- OnigSyntaxType* syntax, OnigErrorInfo* einfo)\r
-{\r
- int r;\r
-\r
- r = onig_reg_init(reg, option, ONIGENC_CASE_FOLD_DEFAULT, enc, syntax);\r
- if (r) return r;\r
-\r
- r = onig_compile(reg, pattern, pattern_end, einfo);\r
- return r;\r
-}\r
-\r
-extern int\r
-onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,\r
- OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,\r
- OnigErrorInfo* einfo)\r
-{\r
- int r;\r
-\r
- *reg = (regex_t* )xmalloc(sizeof(regex_t));\r
- if (IS_NULL(*reg)) return ONIGERR_MEMORY;\r
-\r
- r = onig_reg_init(*reg, option, ONIGENC_CASE_FOLD_DEFAULT, enc, syntax);\r
- if (r) goto err;\r
-\r
- r = onig_compile(*reg, pattern, pattern_end, einfo);\r
- if (r) {\r
- err:\r
- onig_free(*reg);\r
- *reg = NULL;\r
- }\r
- return r;\r
-}\r
-\r
-\r
-extern int\r
-onig_init(void)\r
-{\r
- if (onig_inited != 0)\r
- return 0;\r
-\r
- THREAD_SYSTEM_INIT;\r
- THREAD_ATOMIC_START;\r
-\r
- onig_inited = 1;\r
-\r
- onigenc_init();\r
- /* onigenc_set_default_caseconv_table((UChar* )0); */\r
-\r
-#ifdef ONIG_DEBUG_STATISTICS\r
- onig_statistics_init();\r
-#endif\r
-\r
- THREAD_ATOMIC_END;\r
- return 0;\r
-}\r
-\r
-\r
-static OnigEndCallListItemType* EndCallTop;\r
-\r
-extern void onig_add_end_call(void (*func)(void))\r
-{\r
- OnigEndCallListItemType* item;\r
-\r
- item = (OnigEndCallListItemType* )xmalloc(sizeof(*item));\r
- if (item == 0) return ;\r
-\r
- item->next = EndCallTop;\r
- item->func = func;\r
-\r
- EndCallTop = item;\r
-}\r
-\r
-static void\r
-exec_end_call_list(void)\r
-{\r
- OnigEndCallListItemType* prev;\r
- void (*func)(void);\r
-\r
- while (EndCallTop != 0) {\r
- func = EndCallTop->func;\r
- (*func)();\r
-\r
- prev = EndCallTop;\r
- EndCallTop = EndCallTop->next;\r
- xfree(prev);\r
- }\r
-}\r
-\r
-extern int\r
-onig_end(void)\r
-{\r
- THREAD_ATOMIC_START;\r
-\r
- exec_end_call_list();\r
-\r
-#ifdef ONIG_DEBUG_STATISTICS\r
- onig_print_statistics(stderr);\r
-#endif\r
-\r
-#ifdef USE_SHARED_CCLASS_TABLE\r
- onig_free_shared_cclass_table();\r
-#endif\r
-\r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
- onig_free_node_list();\r
-#endif\r
-\r
- onig_inited = 0;\r
-\r
- THREAD_ATOMIC_END;\r
- THREAD_SYSTEM_END;\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_is_in_code_range(const UChar* p, OnigCodePoint code)\r
-{\r
- OnigCodePoint n, *data;\r
- OnigCodePoint low, high, x;\r
-\r
- GET_CODE_POINT(n, p);\r
- data = (OnigCodePoint* )p;\r
- data++;\r
-\r
- for (low = 0, high = n; low < high; ) {\r
- x = (low + high) >> 1;\r
- if (code > data[x * 2 + 1])\r
- low = x + 1;\r
- else\r
- high = x;\r
- }\r
-\r
- return ((low < n && code >= data[low * 2]) ? 1 : 0);\r
-}\r
-\r
-extern int\r
-onig_is_code_in_cc_len(int elen, OnigCodePoint code, CClassNode* cc)\r
-{\r
- int found;\r
-\r
- if (elen > 1 || (code >= SINGLE_BYTE_SIZE)) {\r
- if (IS_NULL(cc->mbuf)) {\r
- found = 0;\r
- }\r
- else {\r
- found = (onig_is_in_code_range(cc->mbuf->p, code) != 0 ? 1 : 0);\r
- }\r
- }\r
- else {\r
- found = (BITSET_AT(cc->bs, code) == 0 ? 0 : 1);\r
- }\r
-\r
- if (IS_NCCLASS_NOT(cc))\r
- return !found;\r
- else\r
- return found;\r
-}\r
-\r
-extern int\r
-onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc)\r
-{\r
- int len;\r
-\r
- if (ONIGENC_MBC_MINLEN(enc) > 1) {\r
- len = 2;\r
- }\r
- else {\r
- len = ONIGENC_CODE_TO_MBCLEN(enc, code);\r
- }\r
- return onig_is_code_in_cc_len(len, code, cc);\r
-}\r
-\r
-\r
-#ifdef ONIG_DEBUG\r
-\r
-/* arguments type */\r
-#define ARG_SPECIAL -1\r
-#define ARG_NON 0\r
-#define ARG_RELADDR 1\r
-#define ARG_ABSADDR 2\r
-#define ARG_LENGTH 3\r
-#define ARG_MEMNUM 4\r
-#define ARG_OPTION 5\r
-#define ARG_STATE_CHECK 6\r
-\r
-OnigOpInfoType OnigOpInfo[] = {\r
- { OP_FINISH, "finish", ARG_NON },\r
- { OP_END, "end", ARG_NON },\r
- { OP_EXACT1, "exact1", ARG_SPECIAL },\r
- { OP_EXACT2, "exact2", ARG_SPECIAL },\r
- { OP_EXACT3, "exact3", ARG_SPECIAL },\r
- { OP_EXACT4, "exact4", ARG_SPECIAL },\r
- { OP_EXACT5, "exact5", ARG_SPECIAL },\r
- { OP_EXACTN, "exactn", ARG_SPECIAL },\r
- { OP_EXACTMB2N1, "exactmb2-n1", ARG_SPECIAL },\r
- { OP_EXACTMB2N2, "exactmb2-n2", ARG_SPECIAL },\r
- { OP_EXACTMB2N3, "exactmb2-n3", ARG_SPECIAL },\r
- { OP_EXACTMB2N, "exactmb2-n", ARG_SPECIAL },\r
- { OP_EXACTMB3N, "exactmb3n" , ARG_SPECIAL },\r
- { OP_EXACTMBN, "exactmbn", ARG_SPECIAL },\r
- { OP_EXACT1_IC, "exact1-ic", ARG_SPECIAL },\r
- { OP_EXACTN_IC, "exactn-ic", ARG_SPECIAL },\r
- { OP_CCLASS, "cclass", ARG_SPECIAL },\r
- { OP_CCLASS_MB, "cclass-mb", ARG_SPECIAL },\r
- { OP_CCLASS_MIX, "cclass-mix", ARG_SPECIAL },\r
- { OP_CCLASS_NOT, "cclass-not", ARG_SPECIAL },\r
- { OP_CCLASS_MB_NOT, "cclass-mb-not", ARG_SPECIAL },\r
- { OP_CCLASS_MIX_NOT, "cclass-mix-not", ARG_SPECIAL },\r
- { OP_CCLASS_NODE, "cclass-node", ARG_SPECIAL },\r
- { OP_ANYCHAR, "anychar", ARG_NON },\r
- { OP_ANYCHAR_ML, "anychar-ml", ARG_NON },\r
- { OP_ANYCHAR_STAR, "anychar*", ARG_NON },\r
- { OP_ANYCHAR_ML_STAR, "anychar-ml*", ARG_NON },\r
- { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },\r
- { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },\r
- { OP_WORD, "word", ARG_NON },\r
- { OP_NOT_WORD, "not-word", ARG_NON },\r
- { OP_WORD_BOUND, "word-bound", ARG_NON },\r
- { OP_NOT_WORD_BOUND, "not-word-bound", ARG_NON },\r
- { OP_WORD_BEGIN, "word-begin", ARG_NON },\r
- { OP_WORD_END, "word-end", ARG_NON },\r
- { OP_BEGIN_BUF, "begin-buf", ARG_NON },\r
- { OP_END_BUF, "end-buf", ARG_NON },\r
- { OP_BEGIN_LINE, "begin-line", ARG_NON },\r
- { OP_END_LINE, "end-line", ARG_NON },\r
- { OP_SEMI_END_BUF, "semi-end-buf", ARG_NON },\r
- { OP_BEGIN_POSITION, "begin-position", ARG_NON },\r
- { OP_BACKREF1, "backref1", ARG_NON },\r
- { OP_BACKREF2, "backref2", ARG_NON },\r
- { OP_BACKREFN, "backrefn", ARG_MEMNUM },\r
- { OP_BACKREFN_IC, "backrefn-ic", ARG_SPECIAL },\r
- { OP_BACKREF_MULTI, "backref_multi", ARG_SPECIAL },\r
- { OP_BACKREF_MULTI_IC, "backref_multi-ic", ARG_SPECIAL },\r
- { OP_BACKREF_WITH_LEVEL, "backref_at_level", ARG_SPECIAL },\r
- { OP_MEMORY_START_PUSH, "mem-start-push", ARG_MEMNUM },\r
- { OP_MEMORY_START, "mem-start", ARG_MEMNUM },\r
- { OP_MEMORY_END_PUSH, "mem-end-push", ARG_MEMNUM },\r
- { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec", ARG_MEMNUM },\r
- { OP_MEMORY_END, "mem-end", ARG_MEMNUM },\r
- { OP_MEMORY_END_REC, "mem-end-rec", ARG_MEMNUM },\r
- { OP_SET_OPTION_PUSH, "set-option-push", ARG_OPTION },\r
- { OP_SET_OPTION, "set-option", ARG_OPTION },\r
- { OP_FAIL, "fail", ARG_NON },\r
- { OP_JUMP, "jump", ARG_RELADDR },\r
- { OP_PUSH, "push", ARG_RELADDR },\r
- { OP_POP, "pop", ARG_NON },\r
- { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1", ARG_SPECIAL },\r
- { OP_PUSH_IF_PEEK_NEXT, "push-if-peek-next", ARG_SPECIAL },\r
- { OP_REPEAT, "repeat", ARG_SPECIAL },\r
- { OP_REPEAT_NG, "repeat-ng", ARG_SPECIAL },\r
- { OP_REPEAT_INC, "repeat-inc", ARG_MEMNUM },\r
- { OP_REPEAT_INC_NG, "repeat-inc-ng", ARG_MEMNUM },\r
- { OP_REPEAT_INC_SG, "repeat-inc-sg", ARG_MEMNUM },\r
- { OP_REPEAT_INC_NG_SG, "repeat-inc-ng-sg", ARG_MEMNUM },\r
- { OP_NULL_CHECK_START, "null-check-start", ARG_MEMNUM },\r
- { OP_NULL_CHECK_END, "null-check-end", ARG_MEMNUM },\r
- { OP_NULL_CHECK_END_MEMST,"null-check-end-memst", ARG_MEMNUM },\r
- { OP_NULL_CHECK_END_MEMST_PUSH,"null-check-end-memst-push", ARG_MEMNUM },\r
- { OP_PUSH_POS, "push-pos", ARG_NON },\r
- { OP_POP_POS, "pop-pos", ARG_NON },\r
- { OP_PUSH_POS_NOT, "push-pos-not", ARG_RELADDR },\r
- { OP_FAIL_POS, "fail-pos", ARG_NON },\r
- { OP_PUSH_STOP_BT, "push-stop-bt", ARG_NON },\r
- { OP_POP_STOP_BT, "pop-stop-bt", ARG_NON },\r
- { OP_LOOK_BEHIND, "look-behind", ARG_SPECIAL },\r
- { OP_PUSH_LOOK_BEHIND_NOT, "push-look-behind-not", ARG_SPECIAL },\r
- { OP_FAIL_LOOK_BEHIND_NOT, "fail-look-behind-not", ARG_NON },\r
- { OP_CALL, "call", ARG_ABSADDR },\r
- { OP_RETURN, "return", ARG_NON },\r
- { OP_STATE_CHECK_PUSH, "state-check-push", ARG_SPECIAL },\r
- { OP_STATE_CHECK_PUSH_OR_JUMP, "state-check-push-or-jump", ARG_SPECIAL },\r
- { OP_STATE_CHECK, "state-check", ARG_STATE_CHECK },\r
- { OP_STATE_CHECK_ANYCHAR_STAR, "state-check-anychar*", ARG_STATE_CHECK },\r
- { OP_STATE_CHECK_ANYCHAR_ML_STAR,\r
- "state-check-anychar-ml*", ARG_STATE_CHECK },\r
- { -1, "", ARG_NON }\r
-};\r
-\r
-static char*\r
-op2name(int opcode)\r
-{\r
- int i;\r
-\r
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {\r
- if (opcode == OnigOpInfo[i].opcode)\r
- return OnigOpInfo[i].name;\r
- }\r
- return "";\r
-}\r
-\r
-static int\r
-op2arg_type(int opcode)\r
-{\r
- int i;\r
-\r
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {\r
- if (opcode == OnigOpInfo[i].opcode)\r
- return OnigOpInfo[i].arg_type;\r
- }\r
- return ARG_SPECIAL;\r
-}\r
-\r
-static void\r
-Indent(FILE* f, int indent)\r
-{\r
- int i;\r
- for (i = 0; i < indent; i++) putc(' ', f);\r
-}\r
-\r
-static void\r
-p_string(FILE* f, int len, UChar* s)\r
-{\r
- fputs(":", f);\r
- while (len-- > 0) { fputc(*s++, f); }\r
-}\r
-\r
-static void\r
-p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)\r
-{\r
- int x = len * mb_len;\r
-\r
- fprintf(f, ":%d:", len);\r
- while (x-- > 0) { fputc(*s++, f); }\r
-}\r
-\r
-extern void\r
-onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp,\r
- OnigEncoding enc)\r
-{\r
- int i, n, arg_type;\r
- RelAddrType addr;\r
- LengthType len;\r
- MemNumType mem;\r
- StateCheckNumType scn;\r
- OnigCodePoint code;\r
- UChar *q;\r
-\r
- fprintf(f, "[%s", op2name(*bp));\r
- arg_type = op2arg_type(*bp);\r
- if (arg_type != ARG_SPECIAL) {\r
- bp++;\r
- switch (arg_type) {\r
- case ARG_NON:\r
- break;\r
- case ARG_RELADDR:\r
- GET_RELADDR_INC(addr, bp);\r
- fprintf(f, ":(%d)", addr);\r
- break;\r
- case ARG_ABSADDR:\r
- GET_ABSADDR_INC(addr, bp);\r
- fprintf(f, ":(%d)", addr);\r
- break;\r
- case ARG_LENGTH:\r
- GET_LENGTH_INC(len, bp);\r
- fprintf(f, ":%d", len);\r
- break;\r
- case ARG_MEMNUM:\r
- mem = *((MemNumType* )bp);\r
- bp += SIZE_MEMNUM;\r
- fprintf(f, ":%d", mem);\r
- break;\r
- case ARG_OPTION:\r
- {\r
- OnigOptionType option = *((OnigOptionType* )bp);\r
- bp += SIZE_OPTION;\r
- fprintf(f, ":%d", option);\r
- }\r
- break;\r
-\r
- case ARG_STATE_CHECK:\r
- scn = *((StateCheckNumType* )bp);\r
- bp += SIZE_STATE_CHECK_NUM;\r
- fprintf(f, ":%d", scn);\r
- break;\r
- }\r
- }\r
- else {\r
- switch (*bp++) {\r
- case OP_EXACT1:\r
- case OP_ANYCHAR_STAR_PEEK_NEXT:\r
- case OP_ANYCHAR_ML_STAR_PEEK_NEXT:\r
- p_string(f, 1, bp++); break;\r
- case OP_EXACT2:\r
- p_string(f, 2, bp); bp += 2; break;\r
- case OP_EXACT3:\r
- p_string(f, 3, bp); bp += 3; break;\r
- case OP_EXACT4:\r
- p_string(f, 4, bp); bp += 4; break;\r
- case OP_EXACT5:\r
- p_string(f, 5, bp); bp += 5; break;\r
- case OP_EXACTN:\r
- GET_LENGTH_INC(len, bp);\r
- p_len_string(f, len, 1, bp);\r
- bp += len;\r
- break;\r
- \r
- case OP_EXACTMB2N1:\r
- p_string(f, 2, bp); bp += 2; break;\r
- case OP_EXACTMB2N2:\r
- p_string(f, 4, bp); bp += 4; break;\r
- case OP_EXACTMB2N3:\r
- p_string(f, 6, bp); bp += 6; break;\r
- case OP_EXACTMB2N:\r
- GET_LENGTH_INC(len, bp);\r
- p_len_string(f, len, 2, bp);\r
- bp += len * 2;\r
- break;\r
- case OP_EXACTMB3N:\r
- GET_LENGTH_INC(len, bp);\r
- p_len_string(f, len, 3, bp);\r
- bp += len * 3;\r
- break;\r
- case OP_EXACTMBN:\r
- {\r
- int mb_len;\r
- \r
- GET_LENGTH_INC(mb_len, bp);\r
- GET_LENGTH_INC(len, bp);\r
- fprintf(f, ":%d:%d:", mb_len, len);\r
- n = len * mb_len;\r
- while (n-- > 0) { fputc(*bp++, f); }\r
- }\r
- break;\r
-\r
- case OP_EXACT1_IC:\r
- len = enclen(enc, bp);\r
- p_string(f, len, bp);\r
- bp += len;\r
- break;\r
- case OP_EXACTN_IC:\r
- GET_LENGTH_INC(len, bp);\r
- p_len_string(f, len, 1, bp);\r
- bp += len;\r
- break;\r
-\r
- case OP_CCLASS:\r
- n = bitset_on_num((BitSetRef )bp);\r
- bp += SIZE_BITSET;\r
- fprintf(f, ":%d", n);\r
- break;\r
-\r
- case OP_CCLASS_NOT:\r
- n = bitset_on_num((BitSetRef )bp);\r
- bp += SIZE_BITSET;\r
- fprintf(f, ":%d", n);\r
- break;\r
-\r
- case OP_CCLASS_MB:\r
- case OP_CCLASS_MB_NOT:\r
- GET_LENGTH_INC(len, bp);\r
- q = bp;\r
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
- ALIGNMENT_RIGHT(q);\r
-#endif\r
- GET_CODE_POINT(code, q);\r
- bp += len;\r
- fprintf(f, ":%d:%d", (int )code, len);\r
- break;\r
-\r
- case OP_CCLASS_MIX:\r
- case OP_CCLASS_MIX_NOT:\r
- n = bitset_on_num((BitSetRef )bp);\r
- bp += SIZE_BITSET;\r
- GET_LENGTH_INC(len, bp);\r
- q = bp;\r
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS\r
- ALIGNMENT_RIGHT(q);\r
-#endif\r
- GET_CODE_POINT(code, q);\r
- bp += len;\r
- fprintf(f, ":%d:%d:%d", n, (int )code, len);\r
- break;\r
-\r
- case OP_CCLASS_NODE:\r
- {\r
- CClassNode *cc;\r
-\r
- GET_POINTER_INC(cc, bp);\r
- n = bitset_on_num(cc->bs);\r
- fprintf(f, ":%u:%d", (unsigned int )cc, n);\r
- }\r
- break;\r
-\r
- case OP_BACKREFN_IC:\r
- mem = *((MemNumType* )bp);\r
- bp += SIZE_MEMNUM;\r
- fprintf(f, ":%d", mem);\r
- break;\r
-\r
- case OP_BACKREF_MULTI_IC:\r
- case OP_BACKREF_MULTI:\r
- fputs(" ", f);\r
- GET_LENGTH_INC(len, bp);\r
- for (i = 0; i < len; i++) {\r
- GET_MEMNUM_INC(mem, bp);\r
- if (i > 0) fputs(", ", f);\r
- fprintf(f, "%d", mem);\r
- }\r
- break;\r
-\r
- case OP_BACKREF_WITH_LEVEL:\r
- {\r
- OnigOptionType option;\r
- LengthType level;\r
-\r
- GET_OPTION_INC(option, bp);\r
- fprintf(f, ":%d", option);\r
- GET_LENGTH_INC(level, bp);\r
- fprintf(f, ":%d", level);\r
-\r
- fputs(" ", f);\r
- GET_LENGTH_INC(len, bp);\r
- for (i = 0; i < len; i++) {\r
- GET_MEMNUM_INC(mem, bp);\r
- if (i > 0) fputs(", ", f);\r
- fprintf(f, "%d", mem);\r
- }\r
- }\r
- break;\r
-\r
- case OP_REPEAT:\r
- case OP_REPEAT_NG:\r
- {\r
- mem = *((MemNumType* )bp);\r
- bp += SIZE_MEMNUM;\r
- addr = *((RelAddrType* )bp);\r
- bp += SIZE_RELADDR;\r
- fprintf(f, ":%d:%d", mem, addr);\r
- }\r
- break;\r
-\r
- case OP_PUSH_OR_JUMP_EXACT1:\r
- case OP_PUSH_IF_PEEK_NEXT:\r
- addr = *((RelAddrType* )bp);\r
- bp += SIZE_RELADDR;\r
- fprintf(f, ":(%d)", addr);\r
- p_string(f, 1, bp);\r
- bp += 1;\r
- break;\r
-\r
- case OP_LOOK_BEHIND:\r
- GET_LENGTH_INC(len, bp);\r
- fprintf(f, ":%d", len);\r
- break;\r
-\r
- case OP_PUSH_LOOK_BEHIND_NOT:\r
- GET_RELADDR_INC(addr, bp);\r
- GET_LENGTH_INC(len, bp);\r
- fprintf(f, ":%d:(%d)", len, addr);\r
- break;\r
-\r
- case OP_STATE_CHECK_PUSH:\r
- case OP_STATE_CHECK_PUSH_OR_JUMP:\r
- scn = *((StateCheckNumType* )bp);\r
- bp += SIZE_STATE_CHECK_NUM;\r
- addr = *((RelAddrType* )bp);\r
- bp += SIZE_RELADDR;\r
- fprintf(f, ":%d:(%d)", scn, addr);\r
- break;\r
-\r
- default:\r
- fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n",\r
- *--bp);\r
- }\r
- }\r
- fputs("]", f);\r
- if (nextp) *nextp = bp;\r
-}\r
-\r
-static void\r
-print_compiled_byte_code_list(FILE* f, regex_t* reg)\r
-{\r
- int ncode;\r
- UChar* bp = reg->p;\r
- UChar* end = reg->p + reg->used;\r
-\r
- fprintf(f, "code length: %d\n", reg->used);\r
-\r
- ncode = 0;\r
- while (bp < end) {\r
- ncode++;\r
- if (bp > reg->p) {\r
- if (ncode % 5 == 0)\r
- fprintf(f, "\n");\r
- else\r
- fputs(" ", f);\r
- }\r
- onig_print_compiled_byte_code(f, bp, &bp, reg->enc);\r
- }\r
-\r
- fprintf(f, "\n");\r
-}\r
-\r
-static void\r
-print_indent_tree(FILE* f, Node* node, int indent)\r
-{\r
- int i, type;\r
- int add = 3;\r
- UChar* p;\r
-\r
- Indent(f, indent);\r
- if (IS_NULL(node)) {\r
- fprintf(f, "ERROR: null node!!!\n");\r
- exit (0);\r
- }\r
-\r
- type = NTYPE(node);\r
- switch (type) {\r
- case NT_LIST:\r
- case NT_ALT:\r
- if (NTYPE(node) == NT_LIST)\r
- fprintf(f, "<list:%x>\n", (int )node);\r
- else\r
- fprintf(f, "<alt:%x>\n", (int )node);\r
-\r
- print_indent_tree(f, NCAR(node), indent + add);\r
- while (IS_NOT_NULL(node = NCDR(node))) {\r
- if (NTYPE(node) != type) {\r
- fprintf(f, "ERROR: list/alt right is not a cons. %d\n", NTYPE(node));\r
- exit(0);\r
- }\r
- print_indent_tree(f, NCAR(node), indent + add);\r
- }\r
- break;\r
-\r
- case NT_STR:\r
- fprintf(f, "<string%s:%x>",\r
- (NSTRING_IS_RAW(node) ? "-raw" : ""), (int )node);\r
- for (p = NSTR(node)->s; p < NSTR(node)->end; p++) {\r
- if (*p >= 0x20 && *p < 0x7f)\r
- fputc(*p, f);\r
- else {\r
- fprintf(f, " 0x%02x", *p);\r
- }\r
- }\r
- break;\r
-\r
- case NT_CCLASS:\r
- fprintf(f, "<cclass:%x>", (int )node);\r
- if (IS_NCCLASS_NOT(NCCLASS(node))) fputs(" not", f);\r
- if (NCCLASS(node)->mbuf) {\r
- BBuf* bbuf = NCCLASS(node)->mbuf;\r
- for (i = 0; i < bbuf->used; i++) {\r
- if (i > 0) fprintf(f, ",");\r
- fprintf(f, "%0x", bbuf->p[i]);\r
- }\r
- }\r
- break;\r
-\r
- case NT_CTYPE:\r
- fprintf(f, "<ctype:%x> ", (int )node);\r
- switch (NCTYPE(node)->ctype) {\r
- case ONIGENC_CTYPE_WORD:\r
- if (NCTYPE(node)->not != 0)\r
- fputs("not word", f);\r
- else\r
- fputs("word", f);\r
- break;\r
-\r
- default:\r
- fprintf(f, "ERROR: undefined ctype.\n");\r
- exit(0);\r
- }\r
- break;\r
-\r
- case NT_CANY:\r
- fprintf(f, "<anychar:%x>", (int )node);\r
- break;\r
-\r
- case NT_ANCHOR:\r
- fprintf(f, "<anchor:%x> ", (int )node);\r
- switch (NANCHOR(node)->type) {\r
- case ANCHOR_BEGIN_BUF: fputs("begin buf", f); break;\r
- case ANCHOR_END_BUF: fputs("end buf", f); break;\r
- case ANCHOR_BEGIN_LINE: fputs("begin line", f); break;\r
- case ANCHOR_END_LINE: fputs("end line", f); break;\r
- case ANCHOR_SEMI_END_BUF: fputs("semi end buf", f); break;\r
- case ANCHOR_BEGIN_POSITION: fputs("begin position", f); break;\r
-\r
- case ANCHOR_WORD_BOUND: fputs("word bound", f); break;\r
- case ANCHOR_NOT_WORD_BOUND: fputs("not word bound", f); break;\r
-#ifdef USE_WORD_BEGIN_END\r
- case ANCHOR_WORD_BEGIN: fputs("word begin", f); break;\r
- case ANCHOR_WORD_END: fputs("word end", f); break;\r
-#endif\r
- case ANCHOR_PREC_READ: fputs("prec read", f); break;\r
- case ANCHOR_PREC_READ_NOT: fputs("prec read not", f); break;\r
- case ANCHOR_LOOK_BEHIND: fputs("look_behind", f); break;\r
- case ANCHOR_LOOK_BEHIND_NOT: fputs("look_behind_not",f); break;\r
-\r
- default:\r
- fprintf(f, "ERROR: undefined anchor type.\n");\r
- break;\r
- }\r
- break;\r
-\r
- case NT_BREF:\r
- {\r
- int* p;\r
- BRefNode* br = NBREF(node);\r
- p = BACKREFS_P(br);\r
- fprintf(f, "<backref:%x>", (int )node);\r
- for (i = 0; i < br->back_num; i++) {\r
- if (i > 0) fputs(", ", f);\r
- fprintf(f, "%d", p[i]);\r
- }\r
- }\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case NT_CALL:\r
- {\r
- CallNode* cn = NCALL(node);\r
- fprintf(f, "<call:%x>", (int )node);\r
- p_string(f, cn->name_end - cn->name, cn->name);\r
- }\r
- break;\r
-#endif\r
-\r
- case NT_QTFR:\r
- fprintf(f, "<quantifier:%x>{%d,%d}%s\n", (int )node,\r
- NQTFR(node)->lower, NQTFR(node)->upper,\r
- (NQTFR(node)->greedy ? "" : "?"));\r
- print_indent_tree(f, NQTFR(node)->target, indent + add);\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- fprintf(f, "<enclose:%x> ", (int )node);\r
- switch (NENCLOSE(node)->type) {\r
- case ENCLOSE_OPTION:\r
- fprintf(f, "option:%d", NENCLOSE(node)->option);\r
- break;\r
- case ENCLOSE_MEMORY:\r
- fprintf(f, "memory:%d", NENCLOSE(node)->regnum);\r
- break;\r
- case ENCLOSE_STOP_BACKTRACK:\r
- fprintf(f, "stop-bt");\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- fprintf(f, "\n");\r
- print_indent_tree(f, NENCLOSE(node)->target, indent + add);\r
- break;\r
-\r
- default:\r
- fprintf(f, "print_indent_tree: undefined node type %d\n", NTYPE(node));\r
- break;\r
- }\r
-\r
- if (type != NT_LIST && type != NT_ALT && type != NT_QTFR &&\r
- type != NT_ENCLOSE)\r
- fprintf(f, "\n");\r
- fflush(f);\r
-}\r
-#endif /* ONIG_DEBUG */\r
-\r
-#ifdef ONIG_DEBUG_PARSE_TREE\r
-static void\r
-print_tree(FILE* f, Node* node)\r
-{\r
- print_indent_tree(f, node, 0);\r
-}\r
-#endif\r
+++ /dev/null
-/**********************************************************************\r
- regenc.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- * \r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-OnigEncoding OnigEncDefaultCharEncoding = ONIG_ENCODING_INIT_DEFAULT;\r
-\r
-extern int\r
-onigenc_init(void)\r
-{\r
- return 0;\r
-}\r
-\r
-extern OnigEncoding\r
-onigenc_get_default_encoding(void)\r
-{\r
- return OnigEncDefaultCharEncoding;\r
-}\r
-\r
-extern int\r
-onigenc_set_default_encoding(OnigEncoding enc)\r
-{\r
- OnigEncDefaultCharEncoding = enc;\r
- return 0;\r
-}\r
-\r
-extern UChar*\r
-onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)\r
-{\r
- UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);\r
- if (p < s) {\r
- p += enclen(enc, p);\r
- }\r
- return p;\r
-}\r
-\r
-extern UChar*\r
-onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,\r
- const UChar* start, const UChar* s, const UChar** prev)\r
-{\r
- UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);\r
-\r
- if (p < s) {\r
- if (prev) *prev = (const UChar* )p;\r
- p += enclen(enc, p);\r
- }\r
- else {\r
- if (prev) *prev = (const UChar* )NULL; /* Sorry */\r
- }\r
- return p;\r
-}\r
-\r
-extern UChar*\r
-onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s)\r
-{\r
- if (s <= start)\r
- return (UChar* )NULL;\r
-\r
- return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);\r
-}\r
-\r
-extern UChar*\r
-onigenc_step_back(OnigEncoding enc, const UChar* start, const UChar* s, int n)\r
-{\r
- while (ONIG_IS_NOT_NULL(s) && n-- > 0) {\r
- if (s <= start)\r
- return (UChar* )NULL;\r
-\r
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);\r
- }\r
- return (UChar* )s;\r
-}\r
-\r
-extern UChar*\r
-onigenc_step(OnigEncoding enc, const UChar* p, const UChar* end, int n)\r
-{\r
- UChar* q = (UChar* )p;\r
- while (n-- > 0) {\r
- q += ONIGENC_MBC_ENC_LEN(enc, q);\r
- }\r
- return (q <= end ? q : NULL);\r
-}\r
-\r
-extern int\r
-onigenc_strlen(OnigEncoding enc, const UChar* p, const UChar* end)\r
-{\r
- int n = 0;\r
- UChar* q = (UChar* )p;\r
- \r
- while (q < end) {\r
- q += ONIGENC_MBC_ENC_LEN(enc, q);\r
- n++;\r
- }\r
- return n;\r
-}\r
-\r
-extern int\r
-onigenc_strlen_null(OnigEncoding enc, const UChar* s)\r
-{\r
- int n = 0;\r
- UChar* p = (UChar* )s;\r
- \r
- while (1) {\r
- if (*p == '\0') {\r
- UChar* q;\r
- int len = ONIGENC_MBC_MINLEN(enc);\r
-\r
- if (len == 1) return n;\r
- q = p + 1;\r
- while (len > 1) {\r
- if (*q != '\0') break;\r
- q++;\r
- len--;\r
- }\r
- if (len == 1) return n;\r
- }\r
- p += ONIGENC_MBC_ENC_LEN(enc, p);\r
- n++;\r
- }\r
-}\r
-\r
-extern int\r
-onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s)\r
-{\r
- UChar* start = (UChar* )s;\r
- UChar* p = (UChar* )s;\r
-\r
- while (1) {\r
- if (*p == '\0') {\r
- UChar* q;\r
- int len = ONIGENC_MBC_MINLEN(enc);\r
-\r
- if (len == 1) return (int )(p - start);\r
- q = p + 1;\r
- while (len > 1) {\r
- if (*q != '\0') break;\r
- q++;\r
- len--;\r
- }\r
- if (len == 1) return (int )(p - start);\r
- }\r
- p += ONIGENC_MBC_ENC_LEN(enc, p);\r
- }\r
-}\r
-\r
-const UChar OnigEncAsciiToLowerCaseTable[] = {\r
- 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u,\r
- 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u,\r
- 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u,\r
- 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u,\r
- 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u,\r
- 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u,\r
- 60u, 61u, 62u, 63u, 64u, 65u, 66u, 67u,\r
- 70u, 71u, 72u, 73u, 74u, 75u, 76u, 77u,\r
- 100u, 141u, 142u, 143u, 144u, 145u, 146u, 147u,\r
- 150u, 151u, 152u, 153u, 154u, 155u, 156u, 157u,\r
- 160u, 161u, 162u, 163u, 164u, 165u, 166u, 167u,\r
- 170u, 171u, 172u, 133u, 134u, 135u, 136u, 137u,\r
- 140u, 141u, 142u, 143u, 144u, 145u, 146u, 147u,\r
- 150u, 151u, 152u, 153u, 154u, 155u, 156u, 157u,\r
- 160u, 161u, 162u, 163u, 164u, 165u, 166u, 167u,\r
- 170u, 171u, 172u, 173u, 174u, 175u, 176u, 177u,\r
- 200u, 201u, 202u, 203u, 204u, 205u, 206u, 207u,\r
- 210u, 211u, 212u, 213u, 214u, 215u, 216u, 217u,\r
- 220u, 221u, 222u, 223u, 224u, 225u, 226u, 227u,\r
- 230u, 231u, 232u, 233u, 234u, 235u, 236u, 237u,\r
- 240u, 241u, 242u, 243u, 244u, 245u, 246u, 247u,\r
- 250u, 251u, 252u, 253u, 254u, 255u, 256u, 257u,\r
- 260u, 261u, 262u, 263u, 264u, 265u, 266u, 267u,\r
- 270u, 271u, 272u, 273u, 274u, 275u, 276u, 277u,\r
- 300u, 301u, 302u, 303u, 304u, 305u, 306u, 307u,\r
- 310u, 311u, 312u, 313u, 314u, 315u, 316u, 317u,\r
- 320u, 321u, 322u, 323u, 324u, 325u, 326u, 327u,\r
- 330u, 331u, 332u, 333u, 334u, 335u, 336u, 337u,\r
- 340u, 341u, 342u, 343u, 344u, 345u, 346u, 347u,\r
- 350u, 351u, 352u, 353u, 354u, 355u, 356u, 357u,\r
- 360u, 361u, 362u, 363u, 364u, 365u, 366u, 367u,\r
- 370u, 371u, 372u, 373u, 374u, 375u, 376u, 377u,\r
-};\r
-\r
-#ifdef USE_UPPER_CASE_TABLE\r
-const UChar OnigEncAsciiToUpperCaseTable[256] = {\r
- 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u,\r
- 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u,\r
- 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u,\r
- 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u,\r
- 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u,\r
- 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u,\r
- 60u, 61u, 62u, 63u, 64u, 65u, 66u, 67u,\r
- 70u, 71u, 72u, 73u, 74u, 75u, 76u, 77u,\r
- 100u, 101u, 102u, 103u, 104u, 105u, 106u, 107u,\r
- 110u, 111u, 112u, 113u, 114u, 115u, 116u, 117u,\r
- 120u, 121u, 122u, 123u, 124u, 125u, 126u, 127u,\r
- 130u, 131u, 132u, 133u, 134u, 135u, 136u, 137u,\r
- 140u, 101u, 102u, 103u, 104u, 105u, 106u, 107u,\r
- 110u, 111u, 112u, 113u, 114u, 115u, 116u, 117u,\r
- 120u, 121u, 122u, 123u, 124u, 125u, 126u, 127u,\r
- 130u, 131u, 132u, 173u, 174u, 175u, 176u, 177u,\r
- 200u, 201u, 202u, 203u, 204u, 205u, 206u, 207u,\r
- 210u, 211u, 212u, 213u, 214u, 215u, 216u, 217u,\r
- 220u, 221u, 222u, 223u, 224u, 225u, 226u, 227u,\r
- 230u, 231u, 232u, 233u, 234u, 235u, 236u, 237u,\r
- 240u, 241u, 242u, 243u, 244u, 245u, 246u, 247u,\r
- 250u, 251u, 252u, 253u, 254u, 255u, 256u, 257u,\r
- 260u, 261u, 262u, 263u, 264u, 265u, 266u, 267u,\r
- 270u, 271u, 272u, 273u, 274u, 275u, 276u, 277u,\r
- 300u, 301u, 302u, 303u, 304u, 305u, 306u, 307u,\r
- 310u, 311u, 312u, 313u, 314u, 315u, 316u, 317u,\r
- 320u, 321u, 322u, 323u, 324u, 325u, 326u, 327u,\r
- 330u, 331u, 332u, 333u, 334u, 335u, 336u, 337u,\r
- 340u, 341u, 342u, 343u, 344u, 345u, 346u, 347u,\r
- 350u, 351u, 352u, 353u, 354u, 355u, 356u, 357u,\r
- 360u, 361u, 362u, 363u, 364u, 365u, 366u, 367u,\r
- 370u, 371u, 372u, 373u, 374u, 375u, 376u, 377u,\r
-};\r
-#endif\r
-\r
-const unsigned short OnigEncAsciiCtypeTable[256] = {\r
- 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
- 0x4008, 0x420c, 0x4209, 0x4208, 0x4208, 0x4208, 0x4008, 0x4008,\r
- 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
- 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,\r
- 0x4284, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
- 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
- 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0,\r
- 0x78b0, 0x78b0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,\r
- 0x41a0, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x74a2,\r
- 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
- 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,\r
- 0x74a2, 0x74a2, 0x74a2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x51a0,\r
- 0x41a0, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x70e2,\r
- 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
- 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,\r
- 0x70e2, 0x70e2, 0x70e2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x4008,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\r
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000\r
-};\r
-\r
-const UChar OnigEncISO_8859_1_ToLowerCaseTable[256] = {\r
- 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u,\r
- 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u,\r
- 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u,\r
- 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u,\r
- 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u,\r
- 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u,\r
- 60u, 61u, 62u, 63u, 64u, 65u, 66u, 67u,\r
- 70u, 71u, 72u, 73u, 74u, 75u, 76u, 77u,\r
- 100u, 141u, 142u, 143u, 144u, 145u, 146u, 147u,\r
- 150u, 151u, 152u, 153u, 154u, 155u, 156u, 157u,\r
- 160u, 161u, 162u, 163u, 164u, 165u, 166u, 167u,\r
- 170u, 171u, 172u, 133u, 134u, 135u, 136u, 137u,\r
- 140u, 141u, 142u, 143u, 144u, 145u, 146u, 147u,\r
- 150u, 151u, 152u, 153u, 154u, 155u, 156u, 157u,\r
- 160u, 161u, 162u, 163u, 164u, 165u, 166u, 167u,\r
- 170u, 171u, 172u, 173u, 174u, 175u, 176u, 177u,\r
- 200u, 201u, 202u, 203u, 204u, 205u, 206u, 207u,\r
- 210u, 211u, 212u, 213u, 214u, 215u, 216u, 217u,\r
- 220u, 221u, 222u, 223u, 224u, 225u, 226u, 227u,\r
- 230u, 231u, 232u, 233u, 234u, 235u, 236u, 237u,\r
- 240u, 241u, 242u, 243u, 244u, 245u, 246u, 247u,\r
- 250u, 251u, 252u, 253u, 254u, 255u, 256u, 257u,\r
- 260u, 261u, 262u, 263u, 264u, 265u, 266u, 267u,\r
- 270u, 271u, 272u, 273u, 274u, 275u, 276u, 277u,\r
- 340u, 341u, 342u, 343u, 344u, 345u, 346u, 347u,\r
- 350u, 351u, 352u, 353u, 354u, 355u, 356u, 357u,\r
- 360u, 361u, 362u, 363u, 364u, 365u, 366u, 327u,\r
- 370u, 371u, 372u, 373u, 374u, 375u, 376u, 337u,\r
- 340u, 341u, 342u, 343u, 344u, 345u, 346u, 347u,\r
- 350u, 351u, 352u, 353u, 354u, 355u, 356u, 357u,\r
- 360u, 361u, 362u, 363u, 364u, 365u, 366u, 367u,\r
- 370u, 371u, 372u, 373u, 374u, 375u, 376u, 377u,\r
-};\r
-\r
-#ifdef USE_UPPER_CASE_TABLE\r
-const UChar OnigEncISO_8859_1_ToUpperCaseTable[256] = {\r
- 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u,\r
- 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u,\r
- 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u,\r
- 30u, 31u, 32u, 33u, 34u, 35u, 36u, 37u,\r
- 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u,\r
- 50u, 51u, 52u, 53u, 54u, 55u, 56u, 57u,\r
- 60u, 61u, 62u, 63u, 64u, 65u, 66u, 67u,\r
- 70u, 71u, 72u, 73u, 74u, 75u, 76u, 77u,\r
- 100u, 101u, 102u, 103u, 104u, 105u, 106u, 107u,\r
- 110u, 111u, 112u, 113u, 114u, 115u, 116u, 117u,\r
- 120u, 121u, 122u, 123u, 124u, 125u, 126u, 127u,\r
- 130u, 131u, 132u, 133u, 134u, 135u, 136u, 137u,\r
- 140u, 101u, 102u, 103u, 104u, 105u, 106u, 107u,\r
- 110u, 111u, 112u, 113u, 114u, 115u, 116u, 117u,\r
- 120u, 121u, 122u, 123u, 124u, 125u, 126u, 127u,\r
- 130u, 131u, 132u, 173u, 174u, 175u, 176u, 177u,\r
- 200u, 201u, 202u, 203u, 204u, 205u, 206u, 207u,\r
- 210u, 211u, 212u, 213u, 214u, 215u, 216u, 217u,\r
- 220u, 221u, 222u, 223u, 224u, 225u, 226u, 227u,\r
- 230u, 231u, 232u, 233u, 234u, 235u, 236u, 237u,\r
- 240u, 241u, 242u, 243u, 244u, 245u, 246u, 247u,\r
- 250u, 251u, 252u, 253u, 254u, 255u, 256u, 257u,\r
- 260u, 261u, 262u, 263u, 264u, 265u, 266u, 267u,\r
- 270u, 271u, 272u, 273u, 274u, 275u, 276u, 277u,\r
- 300u, 301u, 302u, 303u, 304u, 305u, 306u, 307u,\r
- 310u, 311u, 312u, 313u, 314u, 315u, 316u, 317u,\r
- 320u, 321u, 322u, 323u, 324u, 325u, 326u, 327u,\r
- 330u, 331u, 332u, 333u, 334u, 335u, 336u, 337u,\r
- 300u, 301u, 302u, 303u, 304u, 305u, 306u, 307u,\r
- 310u, 311u, 312u, 313u, 314u, 315u, 316u, 317u,\r
- 320u, 321u, 322u, 323u, 324u, 325u, 326u, 367u,\r
- 330u, 331u, 332u, 333u, 334u, 335u, 336u, 377u,\r
-};\r
-#endif\r
-\r
-extern void\r
-onigenc_set_default_caseconv_table(const UChar* table ARG_UNUSED)\r
-{\r
- /* nothing */\r
- /* obsoleted. */\r
-}\r
-\r
-extern UChar*\r
-onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)\r
-{\r
- return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);\r
-}\r
-\r
-const OnigPairCaseFoldCodes OnigAsciiLowerMap[] = {\r
- { 0x41, 0x61 },\r
- { 0x42, 0x62 },\r
- { 0x43, 0x63 },\r
- { 0x44, 0x64 },\r
- { 0x45, 0x65 },\r
- { 0x46, 0x66 },\r
- { 0x47, 0x67 },\r
- { 0x48, 0x68 },\r
- { 0x49, 0x69 },\r
- { 0x4a, 0x6a },\r
- { 0x4b, 0x6b },\r
- { 0x4c, 0x6c },\r
- { 0x4d, 0x6d },\r
- { 0x4e, 0x6e },\r
- { 0x4f, 0x6f },\r
- { 0x50, 0x70 },\r
- { 0x51, 0x71 },\r
- { 0x52, 0x72 },\r
- { 0x53, 0x73 },\r
- { 0x54, 0x74 },\r
- { 0x55, 0x75 },\r
- { 0x56, 0x76 },\r
- { 0x57, 0x77 },\r
- { 0x58, 0x78 },\r
- { 0x59, 0x79 },\r
- { 0x5a, 0x7a }\r
-};\r
-\r
-extern int\r
-onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,\r
- OnigApplyAllCaseFoldFunc f, void* arg)\r
-{\r
- OnigCodePoint code;\r
- int i, r;\r
-\r
- for (i = 0;\r
- i < (int )(sizeof(OnigAsciiLowerMap)/sizeof(OnigPairCaseFoldCodes));\r
- i++) {\r
- code = OnigAsciiLowerMap[i].to;\r
- r = (*f)(OnigAsciiLowerMap[i].from, &code, 1, arg);\r
- if (r != 0) return r;\r
-\r
- code = OnigAsciiLowerMap[i].from;\r
- r = (*f)(OnigAsciiLowerMap[i].to, &code, 1, arg);\r
- if (r != 0) return r;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,\r
- const OnigUChar* p, const OnigUChar* end ARG_UNUSED,\r
- OnigCaseFoldCodeItem items[])\r
-{\r
- if (0x41 <= *p && *p <= 0x5a) {\r
- items[0].byte_len = 1;\r
- items[0].code_len = 1;\r
- items[0].code[0] = (OnigCodePoint )(*p + 0x20);\r
- return 1;\r
- }\r
- else if (0x61 <= *p && *p <= 0x7a) {\r
- items[0].byte_len = 1;\r
- items[0].code_len = 1;\r
- items[0].code[0] = (OnigCodePoint )(*p - 0x20);\r
- return 1;\r
- }\r
- else\r
- return 0;\r
-}\r
-\r
-static int\r
-ss_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,\r
- OnigApplyAllCaseFoldFunc f, void* arg)\r
-{\r
- static OnigCodePoint ss[] = { 0x73, 0x73 };\r
-\r
- return (*f)((OnigCodePoint )0xdf, ss, 2, arg);\r
-}\r
-\r
-extern int\r
-onigenc_apply_all_case_fold_with_map(int map_size,\r
- const OnigPairCaseFoldCodes map[],\r
- int ess_tsett_flag, OnigCaseFoldType flag,\r
- OnigApplyAllCaseFoldFunc f, void* arg)\r
-{\r
- OnigCodePoint code;\r
- int i, r;\r
-\r
- r = onigenc_ascii_apply_all_case_fold(flag, f, arg);\r
- if (r != 0) return r;\r
-\r
- for (i = 0; i < map_size; i++) {\r
- code = map[i].to;\r
- r = (*f)(map[i].from, &code, 1, arg);\r
- if (r != 0) return r;\r
-\r
- code = map[i].from;\r
- r = (*f)(map[i].to, &code, 1, arg);\r
- if (r != 0) return r;\r
- }\r
-\r
- if (ess_tsett_flag != 0)\r
- return ss_apply_all_case_fold(flag, f, arg);\r
-\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_get_case_fold_codes_by_str_with_map(int map_size,\r
- const OnigPairCaseFoldCodes map[],\r
- int ess_tsett_flag, OnigCaseFoldType flag ARG_UNUSED,\r
- const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])\r
-{\r
- if (0x41 <= *p && *p <= 0x5a) {\r
- items[0].byte_len = 1;\r
- items[0].code_len = 1;\r
- items[0].code[0] = (OnigCodePoint )(*p + 0x20);\r
- if (*p == 0x53 && ess_tsett_flag != 0 && end > p + 1\r
- && (*(p+1) == 0x53 || *(p+1) == 0x73)) {\r
- /* SS */\r
- items[1].byte_len = 2;\r
- items[1].code_len = 1;\r
- items[1].code[0] = (OnigCodePoint )0xdf;\r
- return 2;\r
- }\r
- else\r
- return 1;\r
- }\r
- else if (0x61 <= *p && *p <= 0x7a) {\r
- items[0].byte_len = 1;\r
- items[0].code_len = 1;\r
- items[0].code[0] = (OnigCodePoint )(*p - 0x20);\r
- if (*p == 0x73 && ess_tsett_flag != 0 && end > p + 1\r
- && (*(p+1) == 0x73 || *(p+1) == 0x53)) {\r
- /* ss */\r
- items[1].byte_len = 2;\r
- items[1].code_len = 1;\r
- items[1].code[0] = (OnigCodePoint )0xdf;\r
- return 2;\r
- }\r
- else\r
- return 1;\r
- }\r
- else if (*p == 0xdf && ess_tsett_flag != 0) {\r
- items[0].byte_len = 1;\r
- items[0].code_len = 2;\r
- items[0].code[0] = (OnigCodePoint )'s';\r
- items[0].code[1] = (OnigCodePoint )'s';\r
-\r
- items[1].byte_len = 1;\r
- items[1].code_len = 2;\r
- items[1].code[0] = (OnigCodePoint )'S';\r
- items[1].code[1] = (OnigCodePoint )'S';\r
-\r
- items[2].byte_len = 1;\r
- items[2].code_len = 2;\r
- items[2].code[0] = (OnigCodePoint )'s';\r
- items[2].code[1] = (OnigCodePoint )'S';\r
-\r
- items[3].byte_len = 1;\r
- items[3].code_len = 2;\r
- items[3].code[0] = (OnigCodePoint )'S';\r
- items[3].code[1] = (OnigCodePoint )'s';\r
-\r
- return 4;\r
- }\r
- else {\r
- int i;\r
-\r
- for (i = 0; i < map_size; i++) {\r
- if (*p == map[i].from) {\r
- items[0].byte_len = 1;\r
- items[0].code_len = 1;\r
- items[0].code[0] = map[i].to;\r
- return 1;\r
- }\r
- else if (*p == map[i].to) {\r
- items[0].byte_len = 1;\r
- items[0].code_len = 1;\r
- items[0].code[0] = map[i].from;\r
- return 1;\r
- }\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-\r
-extern int\r
-onigenc_not_support_get_ctype_code_range(OnigCtype ctype ARG_UNUSED,\r
- OnigCodePoint* sb_out ARG_UNUSED,\r
- const OnigCodePoint* ranges[] ARG_UNUSED)\r
-{\r
- return ONIG_NO_SUPPORT_CONFIG;\r
-}\r
-\r
-extern int\r
-onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end)\r
-{\r
- if (p < end) {\r
- if (*p == 0x0a) return 1;\r
- }\r
- return 0;\r
-}\r
-\r
-/* for single byte encodings */\r
-extern int\r
-onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED, const UChar** p,\r
- const UChar*end ARG_UNUSED, UChar* lower)\r
-{\r
- *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p);\r
-\r
- (*p)++;\r
- return 1; /* return byte length of converted char to lower */\r
-}\r
-\r
-#if 0\r
-extern int\r
-onigenc_ascii_is_mbc_ambiguous(OnigCaseFoldType flag,\r
- const UChar** pp, const UChar* end)\r
-{\r
- const UChar* p = *pp;\r
-\r
- (*pp)++;\r
- return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);\r
-}\r
-#endif\r
-\r
-extern int\r
-onigenc_single_byte_mbc_enc_len(const UChar* p ARG_UNUSED)\r
-{\r
- return 1;\r
-}\r
-\r
-extern OnigCodePoint\r
-onigenc_single_byte_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED)\r
-{\r
- return (OnigCodePoint )(*p);\r
-}\r
-\r
-extern int\r
-onigenc_single_byte_code_to_mbclen(OnigCodePoint code ARG_UNUSED)\r
-{\r
- return (code < 0x100 ? 1 : ONIGERR_INVALID_CODE_POINT_VALUE);\r
-}\r
-\r
-extern int\r
-onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf)\r
-{\r
- *buf = (UChar )(code & 0xff);\r
- return 1;\r
-}\r
-\r
-extern UChar*\r
-onigenc_single_byte_left_adjust_char_head(const UChar* start ARG_UNUSED,\r
- const UChar* s)\r
-{\r
- return (UChar* )s;\r
-}\r
-\r
-extern int\r
-onigenc_always_true_is_allowed_reverse_match(const UChar* s ARG_UNUSED,\r
- const UChar* end ARG_UNUSED)\r
-{\r
- return TRUE;\r
-}\r
-\r
-extern int\r
-onigenc_always_false_is_allowed_reverse_match(const UChar* s ARG_UNUSED,\r
- const UChar* end ARG_UNUSED)\r
-{\r
- return FALSE;\r
-}\r
-\r
-extern OnigCodePoint\r
-onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end)\r
-{\r
- int c, i, len;\r
- OnigCodePoint n;\r
-\r
- len = enclen(enc, p);\r
- n = (OnigCodePoint )(*p++);\r
- if (len == 1) return n;\r
-\r
- for (i = 1; i < len; i++) {\r
- if (p >= end) break;\r
- c = *p++;\r
- n <<= 8; n += c;\r
- }\r
- return n;\r
-}\r
-\r
-extern int\r
-onigenc_mbn_mbc_case_fold(OnigEncoding enc, OnigCaseFoldType flag ARG_UNUSED,\r
- const UChar** pp, const UChar* end ARG_UNUSED,\r
- UChar* lower)\r
-{\r
- int len;\r
- const UChar *p = *pp;\r
-\r
- if (ONIGENC_IS_MBC_ASCII(p)) {\r
- *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);\r
- (*pp)++;\r
- return 1;\r
- }\r
- else {\r
- int i;\r
-\r
- len = enclen(enc, p);\r
- for (i = 0; i < len; i++) {\r
- *lower++ = *p++;\r
- }\r
- (*pp) += len;\r
- return len; /* return byte length of converted to lower char */\r
- }\r
-}\r
-\r
-#if 0\r
-extern int\r
-onigenc_mbn_is_mbc_ambiguous(OnigEncoding enc, OnigCaseFoldType flag,\r
- const UChar** pp, const UChar* end)\r
-{\r
- const UChar* p = *pp;\r
-\r
- if (ONIGENC_IS_MBC_ASCII(p)) {\r
- (*pp)++;\r
- return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);\r
- }\r
-\r
- (*pp) += enclen(enc, p);\r
- return FALSE;\r
-}\r
-#endif\r
-\r
-extern int\r
-onigenc_mb2_code_to_mbclen(OnigCodePoint code)\r
-{\r
- if ((code & 0xff00) != 0) return 2;\r
- else return 1;\r
-}\r
-\r
-extern int\r
-onigenc_mb4_code_to_mbclen(OnigCodePoint code)\r
-{\r
- if ((code & 0xff000000) != 0) return 4;\r
- else if ((code & 0xff0000) != 0) return 3;\r
- else if ((code & 0xff00) != 0) return 2;\r
- else return 1;\r
-}\r
-\r
-extern int\r
-onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)\r
-{\r
- UChar *p = buf;\r
-\r
- if ((code & 0xff00) != 0) {\r
- *p++ = (UChar )((code >> 8) & 0xff);\r
- }\r
- *p++ = (UChar )(code & 0xff);\r
-\r
-#if 1\r
- if (enclen(enc, buf) != (p - buf))\r
- return ONIGERR_INVALID_CODE_POINT_VALUE;\r
-#endif\r
- return (int)(p - buf);\r
-}\r
-\r
-extern int\r
-onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)\r
-{\r
- UChar *p = buf;\r
-\r
- if ((code & 0xff000000) != 0) {\r
- *p++ = (UChar )((code >> 24) & 0xff);\r
- }\r
- if ((code & 0xff0000) != 0 || p != buf) {\r
- *p++ = (UChar )((code >> 16) & 0xff);\r
- }\r
- if ((code & 0xff00) != 0 || p != buf) {\r
- *p++ = (UChar )((code >> 8) & 0xff);\r
- }\r
- *p++ = (UChar )(code & 0xff);\r
-\r
-#if 1\r
- if (enclen(enc, buf) != (p - buf))\r
- return ONIGERR_INVALID_CODE_POINT_VALUE;\r
-#endif\r
- return (int)(p - buf);\r
-}\r
-\r
-extern int\r
-onigenc_minimum_property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)\r
-{\r
- static PosixBracketEntryType PBS[] = {\r
- { (UChar* )"Alnum", ONIGENC_CTYPE_ALNUM, 5 },\r
- { (UChar* )"Alpha", ONIGENC_CTYPE_ALPHA, 5 },\r
- { (UChar* )"Blank", ONIGENC_CTYPE_BLANK, 5 },\r
- { (UChar* )"Cntrl", ONIGENC_CTYPE_CNTRL, 5 },\r
- { (UChar* )"Digit", ONIGENC_CTYPE_DIGIT, 5 },\r
- { (UChar* )"Graph", ONIGENC_CTYPE_GRAPH, 5 },\r
- { (UChar* )"Lower", ONIGENC_CTYPE_LOWER, 5 },\r
- { (UChar* )"Print", ONIGENC_CTYPE_PRINT, 5 },\r
- { (UChar* )"Punct", ONIGENC_CTYPE_PUNCT, 5 },\r
- { (UChar* )"Space", ONIGENC_CTYPE_SPACE, 5 },\r
- { (UChar* )"Upper", ONIGENC_CTYPE_UPPER, 5 },\r
- { (UChar* )"XDigit", ONIGENC_CTYPE_XDIGIT, 6 },\r
- { (UChar* )"ASCII", ONIGENC_CTYPE_ASCII, 5 },\r
- { (UChar* )"Word", ONIGENC_CTYPE_WORD, 4 },\r
- { (UChar* )NULL, -1, 0 }\r
- };\r
-\r
- PosixBracketEntryType *pb;\r
- int len;\r
-\r
- len = onigenc_strlen(enc, p, end);\r
- for (pb = PBS; IS_NOT_NULL(pb->name); pb++) {\r
- if (len == pb->len &&\r
- onigenc_with_ascii_strncmp(enc, p, end, pb->name, pb->len) == 0)\r
- return pb->ctype;\r
- }\r
-\r
- return ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
-}\r
-\r
-extern int\r
-onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,\r
- unsigned int ctype)\r
-{\r
- if (code < 128)\r
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);\r
- else {\r
- if (CTYPE_IS_WORD_GRAPH_PRINT(ctype)) {\r
- return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE);\r
- }\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-extern int\r
-onigenc_mb4_is_code_ctype(OnigEncoding enc, OnigCodePoint code,\r
- unsigned int ctype)\r
-{\r
- if (code < 128)\r
- return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);\r
- else {\r
- if (CTYPE_IS_WORD_GRAPH_PRINT(ctype)) {\r
- return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE);\r
- }\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-extern int\r
-onigenc_with_ascii_strncmp(OnigEncoding enc, const UChar* p, const UChar* end,\r
- const UChar* sascii /* ascii */, int n)\r
-{\r
- int x, c;\r
-\r
- while (n-- > 0) {\r
- if (p >= end) return (int )(*sascii);\r
-\r
- c = (int )ONIGENC_MBC_TO_CODE(enc, p, end);\r
- x = *sascii - c;\r
- if (x) return x;\r
-\r
- sascii++;\r
- p += enclen(enc, p);\r
- }\r
- return 0;\r
-}\r
-\r
-/* Property management */\r
-static int\r
-resize_property_list(int new_size, const OnigCodePoint*** plist, int* psize)\r
-{\r
- int size;\r
- const OnigCodePoint **list = *plist;\r
-\r
- size = sizeof(OnigCodePoint*) * new_size;\r
- if (IS_NULL(list)) {\r
- list = (const OnigCodePoint** )xmalloc(size);\r
- }\r
- else {\r
- list = (const OnigCodePoint** )xrealloc((void* )list, size, *psize * sizeof(OnigCodePoint*));\r
- }\r
-\r
- if (IS_NULL(list)) return ONIGERR_MEMORY;\r
-\r
- *plist = list;\r
- *psize = new_size;\r
-\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_property_list_add_property(UChar* name, const OnigCodePoint* prop,\r
- hash_table_type **table, const OnigCodePoint*** plist, int *pnum,\r
- int *psize)\r
-{\r
-#define PROP_INIT_SIZE 16\r
-\r
- int r;\r
-\r
- if (*psize <= *pnum) {\r
- int new_size = (*psize == 0 ? PROP_INIT_SIZE : *psize * 2);\r
- r = resize_property_list(new_size, plist, psize);\r
- if (r != 0) return r;\r
- }\r
-\r
- (*plist)[*pnum] = prop;\r
-\r
- if (ONIG_IS_NULL(*table)) {\r
- *table = onig_st_init_strend_table_with_size(PROP_INIT_SIZE);\r
- if (ONIG_IS_NULL(*table)) return ONIGERR_MEMORY;\r
- }\r
-\r
- *pnum = *pnum + 1;\r
- onig_st_insert_strend(*table, name, name + strlen_s((char* )name, MAX_STRING_SIZE),\r
- (hash_data_type )(*pnum + ONIGENC_MAX_STD_CTYPE));\r
- return 0;\r
-}\r
-\r
-extern int\r
-onigenc_property_list_init(int (*f)(void))\r
-{\r
- int r;\r
-\r
- THREAD_ATOMIC_START;\r
-\r
- r = f();\r
-\r
- THREAD_ATOMIC_END;\r
- return r;\r
-}\r
+++ /dev/null
-#ifndef REGENC_H\r
-#define REGENC_H\r
-/**********************************************************************\r
- regenc.h - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#ifndef PACKAGE\r
-/* PACKAGE is defined in config.h */\r
-//#include "config.h"\r
-#endif\r
-\r
-#ifdef ONIG_ESCAPE_UCHAR_COLLISION\r
-#undef ONIG_ESCAPE_UCHAR_COLLISION\r
-#endif\r
-\r
-#include "oniguruma.h"\r
-\r
-typedef struct {\r
- OnigCodePoint from;\r
- OnigCodePoint to;\r
-} OnigPairCaseFoldCodes;\r
-\r
-\r
-#ifndef NULL\r
-#define NULL ((void* )0)\r
-#endif\r
-\r
-#ifndef TRUE\r
-#define TRUE 1\r
-#endif\r
-\r
-#ifndef FALSE\r
-#define FALSE 0\r
-#endif\r
-\r
-#ifndef ARG_UNUSED\r
-#if defined(__GNUC__)\r
-# define ARG_UNUSED __attribute__ ((unused))\r
-#else\r
-# define ARG_UNUSED\r
-#endif\r
-#endif\r
-\r
-#define ONIG_IS_NULL(p) (((void*)(p)) == (void*)0)\r
-#define ONIG_IS_NOT_NULL(p) (((void*)(p)) != (void*)0)\r
-#define ONIG_CHECK_NULL_RETURN(p) if (ONIG_IS_NULL(p)) return NULL\r
-#define ONIG_CHECK_NULL_RETURN_VAL(p,val) if (ONIG_IS_NULL(p)) return (val)\r
-\r
-#define enclen(enc,p) ONIGENC_MBC_ENC_LEN(enc,p)\r
-\r
-/* character types bit flag */\r
-#define BIT_CTYPE_NEWLINE (1<< ONIGENC_CTYPE_NEWLINE)\r
-#define BIT_CTYPE_ALPHA (1<< ONIGENC_CTYPE_ALPHA)\r
-#define BIT_CTYPE_BLANK (1<< ONIGENC_CTYPE_BLANK)\r
-#define BIT_CTYPE_CNTRL (1<< ONIGENC_CTYPE_CNTRL)\r
-#define BIT_CTYPE_DIGIT (1<< ONIGENC_CTYPE_DIGIT)\r
-#define BIT_CTYPE_GRAPH (1<< ONIGENC_CTYPE_GRAPH)\r
-#define BIT_CTYPE_LOWER (1<< ONIGENC_CTYPE_LOWER)\r
-#define BIT_CTYPE_PRINT (1<< ONIGENC_CTYPE_PRINT)\r
-#define BIT_CTYPE_PUNCT (1<< ONIGENC_CTYPE_PUNCT)\r
-#define BIT_CTYPE_SPACE (1<< ONIGENC_CTYPE_SPACE)\r
-#define BIT_CTYPE_UPPER (1<< ONIGENC_CTYPE_UPPER)\r
-#define BIT_CTYPE_XDIGIT (1<< ONIGENC_CTYPE_XDIGIT)\r
-#define BIT_CTYPE_WORD (1<< ONIGENC_CTYPE_WORD)\r
-#define BIT_CTYPE_ALNUM (1<< ONIGENC_CTYPE_ALNUM)\r
-#define BIT_CTYPE_ASCII (1<< ONIGENC_CTYPE_ASCII)\r
-\r
-#define CTYPE_TO_BIT(ctype) (1<<(ctype))\r
-#define CTYPE_IS_WORD_GRAPH_PRINT(ctype) \\r
- ((ctype) == ONIGENC_CTYPE_WORD || (ctype) == ONIGENC_CTYPE_GRAPH ||\\r
- (ctype) == ONIGENC_CTYPE_PRINT)\r
-\r
-\r
-typedef struct {\r
- UChar *name;\r
- int ctype;\r
- short int len;\r
-} PosixBracketEntryType;\r
-\r
-\r
-/* #define USE_CRNL_AS_LINE_TERMINATOR */\r
-#define USE_UNICODE_PROPERTIES\r
-/* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */\r
-/* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTF#18 */\r
-\r
-\r
-#define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_ASCII\r
-\r
-/* for encoding system implementation (internal) */\r
-ONIG_EXTERN int onigenc_ascii_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
-ONIG_EXTERN int onigenc_ascii_get_case_fold_codes_by_str P_((OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
-ONIG_EXTERN int onigenc_apply_all_case_fold_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
-ONIG_EXTERN int onigenc_get_case_fold_codes_by_str_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
-ONIG_EXTERN int onigenc_not_support_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]));\r
-ONIG_EXTERN int onigenc_is_mbc_newline_0x0a P_((const UChar* p, const UChar* end));\r
-\r
-\r
-/* methods for single byte encoding */\r
-ONIG_EXTERN int onigenc_ascii_mbc_case_fold P_((OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));\r
-ONIG_EXTERN int onigenc_single_byte_mbc_enc_len P_((const UChar* p));\r
-ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end));\r
-ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code));\r
-ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf));\r
-ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s));\r
-ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end));\r
-ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end));\r
-\r
-/* methods for multi byte encoding */\r
-ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, const UChar* p, const UChar* end));\r
-ONIG_EXTERN int onigenc_mbn_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));\r
-ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code));\r
-ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));\r
-ONIG_EXTERN int onigenc_minimum_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));\r
-ONIG_EXTERN int onigenc_unicode_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));\r
-ONIG_EXTERN int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));\r
-ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code));\r
-ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));\r
-ONIG_EXTERN int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));\r
-\r
-\r
-/* in enc/unicode.c */\r
-ONIG_EXTERN int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));\r
-ONIG_EXTERN int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));\r
-ONIG_EXTERN int onigenc_unicode_ctype_code_range P_((int ctype, const OnigCodePoint* ranges[]));\r
-ONIG_EXTERN int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));\r
-ONIG_EXTERN int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));\r
-ONIG_EXTERN int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));\r
-\r
-\r
-#define UTF16_IS_SURROGATE_FIRST(c) (((c) & 0xfc) == 0xd8)\r
-#define UTF16_IS_SURROGATE_SECOND(c) (((c) & 0xfc) == 0xdc)\r
-\r
-#define ONIGENC_ISO_8859_1_TO_LOWER_CASE(c) \\r
- OnigEncISO_8859_1_ToLowerCaseTable[c]\r
-#define ONIGENC_ISO_8859_1_TO_UPPER_CASE(c) \\r
- OnigEncISO_8859_1_ToUpperCaseTable[c]\r
-\r
-ONIG_EXTERN const UChar OnigEncISO_8859_1_ToLowerCaseTable[];\r
-ONIG_EXTERN const UChar OnigEncISO_8859_1_ToUpperCaseTable[];\r
-\r
-ONIG_EXTERN int\r
-onigenc_with_ascii_strncmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n));\r
-ONIG_EXTERN UChar*\r
-onigenc_step P_((OnigEncoding enc, const UChar* p, const UChar* end, int n));\r
-\r
-/* defined in regexec.c, but used in enc/xxx.c */\r
-extern int onig_is_in_code_range P_((const UChar* p, OnigCodePoint code));\r
-\r
-ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding;\r
-ONIG_EXTERN const UChar OnigEncAsciiToLowerCaseTable[];\r
-ONIG_EXTERN const UChar OnigEncAsciiToUpperCaseTable[];\r
-ONIG_EXTERN const unsigned short OnigEncAsciiCtypeTable[];\r
-\r
-#define ONIGENC_IS_ASCII_CODE(code) ((code) < 0x80)\r
-#define ONIGENC_ASCII_CODE_TO_LOWER_CASE(c) OnigEncAsciiToLowerCaseTable[c]\r
-#define ONIGENC_ASCII_CODE_TO_UPPER_CASE(c) OnigEncAsciiToUpperCaseTable[c]\r
-#define ONIGENC_IS_ASCII_CODE_CTYPE(code,ctype) \\r
- ((OnigEncAsciiCtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)\r
-#define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \\r
- (ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_UPPER) ||\\r
- ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_LOWER))\r
- \r
-\r
-#endif /* REGENC_H */\r
+++ /dev/null
-/**********************************************************************\r
- regerror.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#define HAVE_STDARG_PROTOTYPES\r
-\r
-#include "regint.h"\r
-\r
-#if 0\r
-#include <stdio.h> /* for vsnprintf() */\r
-\r
-#ifdef HAVE_STDARG_PROTOTYPES\r
-#include <stdarg.h>\r
-#define va_init_list(a,b) va_start(a,b)\r
-#else\r
-#include <varargs.h>\r
-#define va_init_list(a,b) va_start(a)\r
-#endif\r
-#endif\r
-\r
-extern UChar*\r
-onig_error_code_to_format(int code)\r
-{\r
- char *p;\r
-\r
- if (code >= 0) return (UChar* )0;\r
-\r
- switch (code) {\r
- case ONIG_MISMATCH:\r
- p = "mismatch"; break;\r
- case ONIG_NO_SUPPORT_CONFIG:\r
- p = "no support in this configuration"; break;\r
- case ONIGERR_MEMORY:\r
- p = "fail to memory allocation"; break;\r
- case ONIGERR_MATCH_STACK_LIMIT_OVER:\r
- p = "match-stack limit over"; break;\r
- case ONIGERR_TYPE_BUG:\r
- p = "undefined type (bug)"; break;\r
- case ONIGERR_PARSER_BUG:\r
- p = "internal parser error (bug)"; break;\r
- case ONIGERR_STACK_BUG:\r
- p = "stack error (bug)"; break;\r
- case ONIGERR_UNDEFINED_BYTECODE:\r
- p = "undefined bytecode (bug)"; break;\r
- case ONIGERR_UNEXPECTED_BYTECODE:\r
- p = "unexpected bytecode (bug)"; break;\r
- case ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED:\r
- p = "default multibyte-encoding is not setted"; break;\r
- case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR:\r
- p = "can't convert to wide-char on specified multibyte-encoding"; break;\r
- case ONIGERR_INVALID_ARGUMENT:\r
- p = "invalid argument"; break;\r
- case ONIGERR_END_PATTERN_AT_LEFT_BRACE:\r
- p = "end pattern at left brace"; break;\r
- case ONIGERR_END_PATTERN_AT_LEFT_BRACKET:\r
- p = "end pattern at left bracket"; break;\r
- case ONIGERR_EMPTY_CHAR_CLASS:\r
- p = "empty char-class"; break;\r
- case ONIGERR_PREMATURE_END_OF_CHAR_CLASS:\r
- p = "premature end of char-class"; break;\r
- case ONIGERR_END_PATTERN_AT_ESCAPE:\r
- p = "end pattern at escape"; break;\r
- case ONIGERR_END_PATTERN_AT_META:\r
- p = "end pattern at meta"; break;\r
- case ONIGERR_END_PATTERN_AT_CONTROL:\r
- p = "end pattern at control"; break;\r
- case ONIGERR_META_CODE_SYNTAX:\r
- p = "invalid meta-code syntax"; break;\r
- case ONIGERR_CONTROL_CODE_SYNTAX:\r
- p = "invalid control-code syntax"; break;\r
- case ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE:\r
- p = "char-class value at end of range"; break;\r
- case ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE:\r
- p = "char-class value at start of range"; break;\r
- case ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS:\r
- p = "unmatched range specifier in char-class"; break;\r
- case ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED:\r
- p = "target of repeat operator is not specified"; break;\r
- case ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID:\r
- p = "target of repeat operator is invalid"; break;\r
- case ONIGERR_NESTED_REPEAT_OPERATOR:\r
- p = "nested repeat operator"; break;\r
- case ONIGERR_UNMATCHED_CLOSE_PARENTHESIS:\r
- p = "unmatched close parenthesis"; break;\r
- case ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS:\r
- p = "end pattern with unmatched parenthesis"; break;\r
- case ONIGERR_END_PATTERN_IN_GROUP:\r
- p = "end pattern in group"; break;\r
- case ONIGERR_UNDEFINED_GROUP_OPTION:\r
- p = "undefined group option"; break;\r
- case ONIGERR_INVALID_POSIX_BRACKET_TYPE:\r
- p = "invalid POSIX bracket type"; break;\r
- case ONIGERR_INVALID_LOOK_BEHIND_PATTERN:\r
- p = "invalid pattern in look-behind"; break;\r
- case ONIGERR_INVALID_REPEAT_RANGE_PATTERN:\r
- p = "invalid repeat range {lower,upper}"; break;\r
- case ONIGERR_TOO_BIG_NUMBER:\r
- p = "too big number"; break;\r
- case ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE:\r
- p = "too big number for repeat range"; break;\r
- case ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE:\r
- p = "upper is smaller than lower in repeat range"; break;\r
- case ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS:\r
- p = "empty range in char class"; break;\r
- case ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE:\r
- p = "mismatch multibyte code length in char-class range"; break;\r
- case ONIGERR_TOO_MANY_MULTI_BYTE_RANGES:\r
- p = "too many multibyte code ranges are specified"; break;\r
- case ONIGERR_TOO_SHORT_MULTI_BYTE_STRING:\r
- p = "too short multibyte code string"; break;\r
- case ONIGERR_TOO_BIG_BACKREF_NUMBER:\r
- p = "too big backref number"; break;\r
- case ONIGERR_INVALID_BACKREF:\r
-#ifdef USE_NAMED_GROUP\r
- p = "invalid backref number/name"; break;\r
-#else\r
- p = "invalid backref number"; break;\r
-#endif\r
- case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED:\r
- p = "numbered backref/call is not allowed. (use name)"; break;\r
- case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE:\r
- p = "too big wide-char value"; break;\r
- case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE:\r
- p = "too long wide-char value"; break;\r
- case ONIGERR_INVALID_CODE_POINT_VALUE:\r
- p = "invalid code point value"; break;\r
- case ONIGERR_EMPTY_GROUP_NAME:\r
- p = "group name is empty"; break;\r
- case ONIGERR_INVALID_GROUP_NAME:\r
- p = "invalid group name <%n>"; break;\r
- case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:\r
-#ifdef USE_NAMED_GROUP\r
- p = "invalid char in group name <%n>"; break;\r
-#else\r
- p = "invalid char in group number <%n>"; break;\r
-#endif\r
- case ONIGERR_UNDEFINED_NAME_REFERENCE:\r
- p = "undefined name <%n> reference"; break;\r
- case ONIGERR_UNDEFINED_GROUP_REFERENCE:\r
- p = "undefined group <%n> reference"; break;\r
- case ONIGERR_MULTIPLEX_DEFINED_NAME:\r
- p = "multiplex defined name <%n>"; break;\r
- case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:\r
- p = "multiplex definition name <%n> call"; break;\r
- case ONIGERR_NEVER_ENDING_RECURSION:\r
- p = "never ending recursion"; break;\r
- case ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY:\r
- p = "group number is too big for capture history"; break;\r
- case ONIGERR_INVALID_CHAR_PROPERTY_NAME:\r
- p = "invalid character property name {%n}"; break;\r
- case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION:\r
- p = "not supported encoding combination"; break;\r
- case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:\r
- p = "invalid combination of options"; break;\r
- case ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT:\r
- p = "over thread pass limit count"; break;\r
-\r
- default:\r
- p = "undefined error code"; break;\r
- }\r
-\r
- return (UChar* )p;\r
-}\r
-\r
-static void sprint_byte(char* s, unsigned int v)\r
-{\r
- sprintf(s, "%02x", (v & 0377));\r
-}\r
-\r
-static void sprint_byte_with_x(char* s, unsigned int v)\r
-{\r
- sprintf(s, "\\x%02x", (v & 0377));\r
-}\r
-\r
-static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,\r
- UChar buf[], int buf_size, int *is_over)\r
-{\r
- int len;\r
- UChar *p;\r
- OnigCodePoint code;\r
-\r
- if (ONIGENC_MBC_MINLEN(enc) > 1) {\r
- p = s;\r
- len = 0;\r
- while (p < end) {\r
- code = ONIGENC_MBC_TO_CODE(enc, p, end);\r
- if (code >= 0x80) {\r
- if (code > 0xffff && len + 10 <= buf_size) {\r
- sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 24));\r
- sprint_byte((char*)(&(buf[len+4])), (unsigned int)(code >> 16));\r
- sprint_byte((char*)(&(buf[len+6])), (unsigned int)(code >> 8));\r
- sprint_byte((char*)(&(buf[len+8])), (unsigned int)code);\r
- len += 10;\r
- }\r
- else if (len + 6 <= buf_size) {\r
- sprint_byte_with_x((char*)(&(buf[len])), (unsigned int)(code >> 8));\r
- sprint_byte((char*)(&(buf[len+4])), (unsigned int)code);\r
- len += 6;\r
- }\r
- else {\r
- break;\r
- }\r
- }\r
- else {\r
- buf[len++] = (UChar )code;\r
- }\r
-\r
- p += enclen(enc, p);\r
- if (len >= buf_size) break;\r
- }\r
-\r
- *is_over = ((p < end) ? 1 : 0);\r
- }\r
- else {\r
- len = MIN((int)(end - s), buf_size);\r
- xmemcpy(buf, s, (size_t )len);\r
- *is_over = ((buf_size < (end - s)) ? 1 : 0);\r
- }\r
-\r
- return len;\r
-}\r
-\r
-\r
-/* for ONIG_MAX_ERROR_MESSAGE_LEN */\r
-#define MAX_ERROR_PAR_LEN 30\r
-\r
-extern int\r
-#ifdef HAVE_STDARG_PROTOTYPES\r
-onig_error_code_to_str(UChar* s, int code, ...)\r
-#else\r
-onig_error_code_to_str(s, code, va_alist)\r
- UChar* s;\r
- int code;\r
- va_dcl \r
-#endif\r
-{\r
- UChar *p, *q;\r
- OnigErrorInfo* einfo;\r
- int len, is_over;\r
- UChar parbuf[MAX_ERROR_PAR_LEN];\r
- va_list vargs;\r
-\r
- va_init_list(vargs, code);\r
-\r
- switch (code) {\r
- case ONIGERR_UNDEFINED_NAME_REFERENCE:\r
- case ONIGERR_UNDEFINED_GROUP_REFERENCE:\r
- case ONIGERR_MULTIPLEX_DEFINED_NAME:\r
- case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:\r
- case ONIGERR_INVALID_GROUP_NAME:\r
- case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:\r
- case ONIGERR_INVALID_CHAR_PROPERTY_NAME:\r
- einfo = va_arg(vargs, OnigErrorInfo*);\r
- len = to_ascii(einfo->enc, einfo->par, einfo->par_end,\r
- parbuf, MAX_ERROR_PAR_LEN - 3, &is_over);\r
- q = onig_error_code_to_format(code);\r
- p = s;\r
- while (*q != '\0') {\r
- if (*q == '%') {\r
- q++;\r
- if (*q == 'n') { /* '%n': name */\r
- xmemcpy(p, parbuf, len);\r
- p += len;\r
- if (is_over != 0) {\r
- xmemcpy(p, "...", 3);\r
- p += 3;\r
- }\r
- q++;\r
- }\r
- else\r
- goto normal_char;\r
- }\r
- else {\r
- normal_char:\r
- *p++ = *q++;\r
- }\r
- }\r
- *p = '\0';\r
- len = (int)(p - s);\r
- break;\r
-\r
- default:\r
- q = onig_error_code_to_format(code);\r
- len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q);\r
- xmemcpy(s, q, len);\r
- s[len] = '\0';\r
- break;\r
- }\r
-\r
- va_end(vargs);\r
- return len;\r
-}\r
-\r
-\r
-void\r
-#ifdef HAVE_STDARG_PROTOTYPES\r
-onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,\r
- UChar* pat, UChar* pat_end, const UChar *fmt, ...)\r
-#else\r
-onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)\r
- UChar buf[];\r
- int bufsize;\r
- OnigEncoding enc;\r
- UChar* pat;\r
- UChar* pat_end;\r
- const UChar *fmt;\r
- va_dcl\r
-#endif\r
-{\r
- int n, need, len;\r
- UChar *p, *s, *bp;\r
- UChar bs[6];\r
- va_list args;\r
-\r
- va_init_list(args, fmt);\r
- n = xvsnprintf((char* )buf, bufsize, (const char* )fmt, args);\r
- va_end(args);\r
-\r
- need = (int)(pat_end - pat) * 4 + 4;\r
-\r
- if (n + need < bufsize) {\r
- strcat_s((char* )buf, bufsize, ": /");\r
- s = buf + onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, buf);\r
-\r
- p = pat;\r
- while (p < pat_end) {\r
- if (*p == '\\') {\r
- *s++ = *p++;\r
- len = enclen(enc, p);\r
- while (len-- > 0) *s++ = *p++;\r
- }\r
- else if (*p == '/') {\r
- *s++ = (unsigned char )'\\';\r
- *s++ = *p++;\r
- }\r
- else if (ONIGENC_IS_MBC_HEAD(enc, p)) {\r
- len = enclen(enc, p);\r
- if (ONIGENC_MBC_MINLEN(enc) == 1) {\r
- while (len-- > 0) *s++ = *p++;\r
- }\r
- else { /* for UTF16 */\r
- int blen;\r
-\r
- while (len-- > 0) {\r
- sprint_byte_with_x((char* )bs, (unsigned int )(*p++));\r
- blen = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);\r
- bp = bs;\r
- while (blen-- > 0) *s++ = *bp++;\r
- }\r
- }\r
- }\r
- else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&\r
- !ONIGENC_IS_CODE_SPACE(enc, *p)) {\r
- sprint_byte_with_x((char* )bs, (unsigned int )(*p++));\r
- len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs);\r
- bp = bs;\r
- while (len-- > 0) *s++ = *bp++;\r
- }\r
- else {\r
- *s++ = *p++;\r
- }\r
- }\r
-\r
- *s++ = '/';\r
- *s = '\0';\r
- }\r
-}\r
+++ /dev/null
-/**********************************************************************\r
- regexec.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-#define USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
-\r
-#ifdef USE_CRNL_AS_LINE_TERMINATOR\r
-#define ONIGENC_IS_MBC_CRNL(enc,p,end) \\r
- (ONIGENC_MBC_TO_CODE(enc,p,end) == 13 && \\r
- ONIGENC_IS_MBC_NEWLINE(enc,(p+enclen(enc,p)),end))\r
-#endif\r
-\r
-#ifdef USE_CAPTURE_HISTORY\r
-static void history_tree_free(OnigCaptureTreeNode* node);\r
-\r
-static void\r
-history_tree_clear(OnigCaptureTreeNode* node)\r
-{\r
- int i;\r
-\r
- if (IS_NOT_NULL(node)) {\r
- for (i = 0; i < node->num_childs; i++) {\r
- if (IS_NOT_NULL(node->childs[i])) {\r
- history_tree_free(node->childs[i]);\r
- }\r
- }\r
- for (i = 0; i < node->allocated; i++) {\r
- node->childs[i] = (OnigCaptureTreeNode* )0;\r
- }\r
- node->num_childs = 0;\r
- node->beg = ONIG_REGION_NOTPOS;\r
- node->end = ONIG_REGION_NOTPOS;\r
- node->group = -1;\r
- }\r
-}\r
-\r
-static void\r
-history_tree_free(OnigCaptureTreeNode* node)\r
-{\r
- history_tree_clear(node);\r
- xfree(node);\r
-}\r
-\r
-static void\r
-history_root_free(OnigRegion* r)\r
-{\r
- if (IS_NOT_NULL(r->history_root)) {\r
- history_tree_free(r->history_root);\r
- r->history_root = (OnigCaptureTreeNode* )0;\r
- }\r
-}\r
-\r
-static OnigCaptureTreeNode*\r
-history_node_new(void)\r
-{\r
- OnigCaptureTreeNode* node;\r
-\r
- node = (OnigCaptureTreeNode* )xmalloc(sizeof(OnigCaptureTreeNode));\r
- CHECK_NULL_RETURN(node);\r
- node->childs = (OnigCaptureTreeNode** )0;\r
- node->allocated = 0;\r
- node->num_childs = 0;\r
- node->group = -1;\r
- node->beg = ONIG_REGION_NOTPOS;\r
- node->end = ONIG_REGION_NOTPOS;\r
-\r
- return node;\r
-}\r
-\r
-static int\r
-history_tree_add_child(OnigCaptureTreeNode* parent, OnigCaptureTreeNode* child)\r
-{\r
-#define HISTORY_TREE_INIT_ALLOC_SIZE 8\r
-\r
- if (parent->num_childs >= parent->allocated) {\r
- int n, i;\r
-\r
- if (IS_NULL(parent->childs)) {\r
- n = HISTORY_TREE_INIT_ALLOC_SIZE;\r
- parent->childs =\r
- (OnigCaptureTreeNode** )xmalloc(sizeof(OnigCaptureTreeNode*) * n);\r
- }\r
- else {\r
- n = parent->allocated * 2;\r
- parent->childs =\r
- (OnigCaptureTreeNode** )xrealloc(parent->childs,\r
- sizeof(OnigCaptureTreeNode*) * n,\r
- sizeof(OnigCaptureTreeNode*) * parent->allocated);\r
- }\r
- CHECK_NULL_RETURN_MEMERR(parent->childs);\r
- for (i = parent->allocated; i < n; i++) {\r
- parent->childs[i] = (OnigCaptureTreeNode* )0;\r
- }\r
- parent->allocated = n;\r
- }\r
-\r
- parent->childs[parent->num_childs] = child;\r
- parent->num_childs++;\r
- return 0;\r
-}\r
-\r
-static OnigCaptureTreeNode*\r
-history_tree_clone(OnigCaptureTreeNode* node)\r
-{\r
- int i;\r
- OnigCaptureTreeNode *clone, *child;\r
-\r
- clone = history_node_new();\r
- CHECK_NULL_RETURN(clone);\r
-\r
- clone->beg = node->beg;\r
- clone->end = node->end;\r
- for (i = 0; i < node->num_childs; i++) {\r
- child = history_tree_clone(node->childs[i]);\r
- if (IS_NULL(child)) {\r
- history_tree_free(clone);\r
- return (OnigCaptureTreeNode* )0;\r
- }\r
- history_tree_add_child(clone, child);\r
- }\r
-\r
- return clone;\r
-}\r
-\r
-extern OnigCaptureTreeNode*\r
-onig_get_capture_tree(OnigRegion* region)\r
-{\r
- return region->history_root;\r
-}\r
-#endif /* USE_CAPTURE_HISTORY */\r
-\r
-extern void\r
-onig_region_clear(OnigRegion* region)\r
-{\r
- int i;\r
-\r
- for (i = 0; i < region->num_regs; i++) {\r
- region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;\r
- }\r
-#ifdef USE_CAPTURE_HISTORY\r
- history_root_free(region);\r
-#endif\r
-}\r
-\r
-extern int\r
-onig_region_resize(OnigRegion* region, int n)\r
-{\r
- region->num_regs = n;\r
-\r
- if (n < ONIG_NREGION)\r
- n = ONIG_NREGION;\r
-\r
- if (region->allocated == 0) {\r
- region->beg = (int* )xmalloc(n * sizeof(int));\r
- region->end = (int* )xmalloc(n * sizeof(int));\r
-\r
- if (region->beg == 0 || region->end == 0)\r
- return ONIGERR_MEMORY;\r
-\r
- region->allocated = n;\r
- }\r
- else if (region->allocated < n) {\r
- region->beg = (int* )xrealloc(region->beg, n * sizeof(int), region->allocated * sizeof(int));\r
- region->end = (int* )xrealloc(region->end, n * sizeof(int), region->allocated * sizeof(int));\r
-\r
- if (region->beg == 0 || region->end == 0)\r
- return ONIGERR_MEMORY;\r
-\r
- region->allocated = n;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static int\r
-onig_region_resize_clear(OnigRegion* region, int n)\r
-{\r
- int r;\r
- \r
- r = onig_region_resize(region, n);\r
- if (r != 0) return r;\r
- onig_region_clear(region);\r
- return 0;\r
-}\r
- \r
-extern int\r
-onig_region_set(OnigRegion* region, int at, int beg, int end)\r
-{\r
- if (at < 0) return ONIGERR_INVALID_ARGUMENT;\r
-\r
- if (at >= region->allocated) {\r
- int r = onig_region_resize(region, at + 1);\r
- if (r < 0) return r;\r
- }\r
- \r
- region->beg[at] = beg;\r
- region->end[at] = end;\r
- return 0;\r
-}\r
-\r
-extern void\r
-onig_region_init(OnigRegion* region)\r
-{\r
- region->num_regs = 0;\r
- region->allocated = 0;\r
- region->beg = (int* )0;\r
- region->end = (int* )0;\r
- region->history_root = (OnigCaptureTreeNode* )0;\r
-}\r
-\r
-extern OnigRegion*\r
-onig_region_new(void)\r
-{\r
- OnigRegion* r;\r
-\r
- r = (OnigRegion* )xmalloc(sizeof(OnigRegion));\r
- onig_region_init(r);\r
- return r;\r
-}\r
-\r
-extern void\r
-onig_region_free(OnigRegion* r, int free_self)\r
-{\r
- if (r) {\r
- if (r->allocated > 0) {\r
- if (r->beg) xfree(r->beg);\r
- if (r->end) xfree(r->end);\r
- r->allocated = 0;\r
- }\r
-#ifdef USE_CAPTURE_HISTORY\r
- history_root_free(r);\r
-#endif\r
- if (free_self) xfree(r);\r
- }\r
-}\r
-\r
-extern void\r
-onig_region_copy(OnigRegion* to, OnigRegion* from)\r
-{\r
-#define RREGC_SIZE (sizeof(int) * from->num_regs)\r
- int i;\r
-\r
- if (to == from) return;\r
-\r
- if (to->allocated == 0) {\r
- if (from->num_regs > 0) {\r
- to->beg = (int* )xmalloc(RREGC_SIZE);\r
- to->end = (int* )xmalloc(RREGC_SIZE);\r
- to->allocated = from->num_regs;\r
- }\r
- }\r
- else if (to->allocated < from->num_regs) {\r
- to->beg = (int* )xrealloc(to->beg, RREGC_SIZE, sizeof(int) * to->allocated);\r
- to->end = (int* )xrealloc(to->end, RREGC_SIZE, sizeof(int) * to->allocated);\r
- to->allocated = from->num_regs;\r
- }\r
-\r
- for (i = 0; i < from->num_regs; i++) {\r
- to->beg[i] = from->beg[i];\r
- to->end[i] = from->end[i];\r
- }\r
- to->num_regs = from->num_regs;\r
-\r
-#ifdef USE_CAPTURE_HISTORY\r
- history_root_free(to);\r
-\r
- if (IS_NOT_NULL(from->history_root)) {\r
- to->history_root = history_tree_clone(from->history_root);\r
- }\r
-#endif\r
-}\r
-\r
-\r
-/** stack **/\r
-#define INVALID_STACK_INDEX -1\r
-\r
-/* stack type */\r
-/* used by normal-POP */\r
-#define STK_ALT 0x0001\r
-#define STK_LOOK_BEHIND_NOT 0x0002\r
-#define STK_POS_NOT 0x0003\r
-/* handled by normal-POP */\r
-#define STK_MEM_START 0x0100\r
-#define STK_MEM_END 0x8200\r
-#define STK_REPEAT_INC 0x0300\r
-#define STK_STATE_CHECK_MARK 0x1000\r
-/* avoided by normal-POP */\r
-#define STK_NULL_CHECK_START 0x3000\r
-#define STK_NULL_CHECK_END 0x5000 /* for recursive call */\r
-#define STK_MEM_END_MARK 0x8400\r
-#define STK_POS 0x0500 /* used when POP-POS */\r
-#define STK_STOP_BT 0x0600 /* mark for "(?>...)" */\r
-#define STK_REPEAT 0x0700\r
-#define STK_CALL_FRAME 0x0800\r
-#define STK_RETURN 0x0900\r
-#define STK_VOID 0x0a00 /* for fill a blank */\r
-\r
-/* stack type check mask */\r
-#define STK_MASK_POP_USED 0x00ff\r
-#define STK_MASK_TO_VOID_TARGET 0x10ff\r
-#define STK_MASK_MEM_END_OR_MARK 0x8000 /* MEM_END or MEM_END_MARK */\r
-\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start) do {\\r
- (msa).stack_p = (void* )0;\\r
- (msa).options = (arg_option);\\r
- (msa).region = (arg_region);\\r
- (msa).start = (arg_start);\\r
- (msa).best_len = ONIG_MISMATCH;\\r
-} while(0)\r
-#else\r
-#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start) do {\\r
- (msa).stack_p = (void* )0;\\r
- (msa).options = (arg_option);\\r
- (msa).region = (arg_region);\\r
- (msa).start = (arg_start);\\r
-} while(0)\r
-#endif\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-\r
-#define STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE 16\r
-\r
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num) do { \\r
- if ((state_num) > 0 && str_len >= STATE_CHECK_STRING_THRESHOLD_LEN) {\\r
- unsigned int size = (unsigned int )(((str_len) + 1) * (state_num) + 7) >> 3;\\r
- offset = ((offset) * (state_num)) >> 3;\\r
- if (size > 0 && offset < size && size < STATE_CHECK_BUFF_MAX_SIZE) {\\r
- if (size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) \\r
- (msa).state_check_buff = (void* )xmalloc(size);\\r
- else \\r
- (msa).state_check_buff = (void* )xalloca(size);\\r
- xmemset(((char* )((msa).state_check_buff)+(offset)), 0, \\r
- (size_t )(size - (offset))); \\r
- (msa).state_check_buff_size = size;\\r
- }\\r
- else {\\r
- (msa).state_check_buff = (void* )0;\\r
- (msa).state_check_buff_size = 0;\\r
- }\\r
- }\\r
- else {\\r
- (msa).state_check_buff = (void* )0;\\r
- (msa).state_check_buff_size = 0;\\r
- }\\r
- } while(0)\r
-\r
-#define MATCH_ARG_FREE(msa) do {\\r
- if ((msa).stack_p) xfree((msa).stack_p);\\r
- if ((msa).state_check_buff_size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) { \\r
- if ((msa).state_check_buff) xfree((msa).state_check_buff);\\r
- }\\r
-} while(0)\r
-#else\r
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num)\r
-#define MATCH_ARG_FREE(msa) if ((msa).stack_p) xfree((msa).stack_p)\r
-#endif\r
-\r
-\r
-\r
-#define STACK_INIT(alloc_addr, ptr_num, stack_num) do {\\r
- if (msa->stack_p) {\\r
- alloc_addr = (char* )xmalloc(sizeof(char*) * (ptr_num));\\r
- stk_alloc = (OnigStackType* )(msa->stack_p);\\r
- stk_base = stk_alloc;\\r
- stk = stk_base;\\r
- stk_end = stk_base + msa->stack_n;\\r
- }\\r
- else {\\r
- alloc_addr = (char* )xmalloc(sizeof(char*) * (ptr_num)\\r
- + sizeof(OnigStackType) * (stack_num));\\r
- stk_alloc = (OnigStackType* )(alloc_addr + sizeof(char*) * (ptr_num));\\r
- stk_base = stk_alloc;\\r
- stk = stk_base;\\r
- stk_end = stk_base + (stack_num);\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_SAVE do{\\r
- if (stk_base != stk_alloc) {\\r
- msa->stack_p = stk_base;\\r
- msa->stack_n = (int)(stk_end - stk_base);\\r
- };\\r
-} while(0)\r
-\r
-static unsigned int MatchStackLimitSize = DEFAULT_MATCH_STACK_LIMIT_SIZE;\r
-\r
-extern unsigned int\r
-onig_get_match_stack_limit_size(void)\r
-{\r
- return MatchStackLimitSize;\r
-}\r
-\r
-extern int\r
-onig_set_match_stack_limit_size(unsigned int size)\r
-{\r
- MatchStackLimitSize = size;\r
- return 0;\r
-}\r
-\r
-static int\r
-stack_double(OnigStackType** arg_stk_base, OnigStackType** arg_stk_end,\r
- OnigStackType** arg_stk, OnigStackType* stk_alloc, OnigMatchArg* msa)\r
-{\r
- unsigned int n;\r
- OnigStackType *x, *stk_base, *stk_end, *stk;\r
-\r
- stk_base = *arg_stk_base;\r
- stk_end = *arg_stk_end;\r
- stk = *arg_stk;\r
-\r
- n = (unsigned int)(stk_end - stk_base);\r
- if (stk_base == stk_alloc && IS_NULL(msa->stack_p)) {\r
- x = (OnigStackType* )xmalloc(sizeof(OnigStackType) * n * 2);\r
- if (IS_NULL(x)) {\r
- STACK_SAVE;\r
- return ONIGERR_MEMORY;\r
- }\r
- xmemcpy(x, stk_base, n * sizeof(OnigStackType));\r
- n *= 2;\r
- }\r
- else {\r
- n *= 2;\r
- if (MatchStackLimitSize != 0 && n > MatchStackLimitSize) {\r
- if ((unsigned int )(stk_end - stk_base) == MatchStackLimitSize)\r
- return ONIGERR_MATCH_STACK_LIMIT_OVER;\r
- else\r
- n = MatchStackLimitSize;\r
- }\r
- x = (OnigStackType* )xrealloc(stk_base, sizeof(OnigStackType) * n, sizeof(OnigStackType) * (stk_end - stk_base));\r
- if (IS_NULL(x)) {\r
- STACK_SAVE;\r
- return ONIGERR_MEMORY;\r
- }\r
- }\r
- *arg_stk = x + (stk - stk_base);\r
- *arg_stk_base = x;\r
- *arg_stk_end = x + n;\r
- return 0;\r
-}\r
-\r
-#define STACK_ENSURE(n) do {\\r
- if (stk_end - stk < (n)) {\\r
- int r = stack_double(&stk_base, &stk_end, &stk, stk_alloc, msa);\\r
- if (r != 0) { STACK_SAVE; return r; } \\r
- }\\r
-} while(0)\r
-\r
-#define STACK_AT(index) (stk_base + (index))\r
-#define GET_STACK_INDEX(stk) ((OnigStackIndex)((stk) - stk_base))\r
-\r
-#define STACK_PUSH_TYPE(stack_type) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = (stack_type);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define IS_TO_VOID_TARGET(stk) (((stk)->type & STK_MASK_TO_VOID_TARGET) != 0)\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-#define STATE_CHECK_POS(s,snum) \\r
- (((s) - str) * num_comb_exp_check + ((snum) - 1))\r
-#define STATE_CHECK_VAL(v,snum) do {\\r
- if (state_check_buff != NULL) {\\r
- int x = STATE_CHECK_POS(s,snum);\\r
- (v) = state_check_buff[x/8] & (1<<(x%8));\\r
- }\\r
- else (v) = 0;\\r
-} while(0)\r
-\r
-\r
-#define ELSE_IF_STATE_CHECK_MARK(stk) \\r
- else if ((stk)->type == STK_STATE_CHECK_MARK) { \\r
- int x = STATE_CHECK_POS(stk->u.state.pstr, stk->u.state.state_check);\\r
- state_check_buff[x/8] |= (1<<(x%8)); \\r
- }\r
-\r
-#define STACK_PUSH(stack_type,pat,s,sprev) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = (stack_type);\\r
- stk->u.state.pcode = (pat);\\r
- stk->u.state.pstr = (s);\\r
- stk->u.state.pstr_prev = (sprev);\\r
- stk->u.state.state_check = 0;\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_ENSURED(stack_type,pat) do {\\r
- stk->type = (stack_type);\\r
- stk->u.state.pcode = (pat);\\r
- stk->u.state.state_check = 0;\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_ALT_WITH_STATE_CHECK(pat,s,sprev,snum) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_ALT;\\r
- stk->u.state.pcode = (pat);\\r
- stk->u.state.pstr = (s);\\r
- stk->u.state.pstr_prev = (sprev);\\r
- stk->u.state.state_check = ((state_check_buff != NULL) ? (snum) : 0);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_STATE_CHECK(s,snum) do {\\r
- if (state_check_buff != NULL) {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_STATE_CHECK_MARK;\\r
- stk->u.state.pstr = (s);\\r
- stk->u.state.state_check = (snum);\\r
- STACK_INC;\\r
- }\\r
-} while(0)\r
-\r
-#else /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
-#define ELSE_IF_STATE_CHECK_MARK(stk)\r
-\r
-#define STACK_PUSH(stack_type,pat,s,sprev) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = (stack_type);\\r
- stk->u.state.pcode = (pat);\\r
- stk->u.state.pstr = (s);\\r
- stk->u.state.pstr_prev = (sprev);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_ENSURED(stack_type,pat) do {\\r
- stk->type = (stack_type);\\r
- stk->u.state.pcode = (pat);\\r
- STACK_INC;\\r
-} while(0)\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
-#define STACK_PUSH_ALT(pat,s,sprev) STACK_PUSH(STK_ALT,pat,s,sprev)\r
-#define STACK_PUSH_POS(s,sprev) STACK_PUSH(STK_POS,NULL_UCHARP,s,sprev)\r
-#define STACK_PUSH_POS_NOT(pat,s,sprev) STACK_PUSH(STK_POS_NOT,pat,s,sprev)\r
-#define STACK_PUSH_STOP_BT STACK_PUSH_TYPE(STK_STOP_BT)\r
-#define STACK_PUSH_LOOK_BEHIND_NOT(pat,s,sprev) \\r
- STACK_PUSH(STK_LOOK_BEHIND_NOT,pat,s,sprev)\r
-\r
-#define STACK_PUSH_REPEAT(id, pat) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_REPEAT;\\r
- stk->u.repeat.num = (id);\\r
- stk->u.repeat.pcode = (pat);\\r
- stk->u.repeat.count = 0;\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_REPEAT_INC(sindex) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_REPEAT_INC;\\r
- stk->u.repeat_inc.si = (sindex);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_MEM_START(mnum, s) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_MEM_START;\\r
- stk->u.mem.num = (int)(mnum);\\r
- stk->u.mem.pstr = (s);\\r
- stk->u.mem.start = mem_start_stk[mnum];\\r
- stk->u.mem.end = mem_end_stk[mnum];\\r
- mem_start_stk[mnum] = GET_STACK_INDEX(stk);\\r
- mem_end_stk[mnum] = INVALID_STACK_INDEX;\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_MEM_END(mnum, s) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_MEM_END;\\r
- stk->u.mem.num = (mnum);\\r
- stk->u.mem.pstr = (s);\\r
- stk->u.mem.start = mem_start_stk[mnum];\\r
- stk->u.mem.end = mem_end_stk[mnum];\\r
- mem_end_stk[mnum] = GET_STACK_INDEX(stk);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_MEM_END_MARK(mnum) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_MEM_END_MARK;\\r
- stk->u.mem.num = (mnum);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_GET_MEM_START(mnum, k) do {\\r
- int level = 0;\\r
- k = stk;\\r
- while (k > stk_base) {\\r
- k--;\\r
- if ((k->type & STK_MASK_MEM_END_OR_MARK) != 0 \\r
- && k->u.mem.num == (mnum)) {\\r
- level++;\\r
- }\\r
- else if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\\r
- if (level == 0) break;\\r
- level--;\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_GET_MEM_RANGE(k, mnum, start, end) do {\\r
- int level = 0;\\r
- while (k < stk) {\\r
- if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\\r
- if (level == 0) (start) = k->u.mem.pstr;\\r
- level++;\\r
- }\\r
- else if (k->type == STK_MEM_END && k->u.mem.num == (mnum)) {\\r
- level--;\\r
- if (level == 0) {\\r
- (end) = k->u.mem.pstr;\\r
- break;\\r
- }\\r
- }\\r
- k++;\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_PUSH_NULL_CHECK_START(cnum, s) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_NULL_CHECK_START;\\r
- stk->u.null_check.num = (cnum);\\r
- stk->u.null_check.pstr = (s);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_NULL_CHECK_END(cnum) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_NULL_CHECK_END;\\r
- stk->u.null_check.num = (cnum);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_CALL_FRAME(pat) do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_CALL_FRAME;\\r
- stk->u.call_frame.ret_addr = (pat);\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-#define STACK_PUSH_RETURN do {\\r
- STACK_ENSURE(1);\\r
- stk->type = STK_RETURN;\\r
- STACK_INC;\\r
-} while(0)\r
-\r
-\r
-#ifdef ONIG_DEBUG\r
-#define STACK_BASE_CHECK(p, at) \\r
- if ((p) < stk_base) {\\r
- fprintf(stderr, "at %s\n", at);\\r
- goto stack_error;\\r
- }\r
-#else\r
-#define STACK_BASE_CHECK(p, at)\r
-#endif\r
-\r
-#define STACK_POP_ONE do {\\r
- stk--;\\r
- STACK_BASE_CHECK(stk, "STACK_POP_ONE"); \\r
-} while(0)\r
-\r
-#define STACK_POP do {\\r
- switch (pop_level) {\\r
- case STACK_POP_LEVEL_FREE:\\r
- while (1) {\\r
- stk--;\\r
- STACK_BASE_CHECK(stk, "STACK_POP"); \\r
- if ((stk->type & STK_MASK_POP_USED) != 0) break;\\r
- ELSE_IF_STATE_CHECK_MARK(stk);\\r
- }\\r
- break;\\r
- case STACK_POP_LEVEL_MEM_START:\\r
- while (1) {\\r
- stk--;\\r
- STACK_BASE_CHECK(stk, "STACK_POP 2"); \\r
- if ((stk->type & STK_MASK_POP_USED) != 0) break;\\r
- else if (stk->type == STK_MEM_START) {\\r
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\\r
- }\\r
- ELSE_IF_STATE_CHECK_MARK(stk);\\r
- }\\r
- break;\\r
- default:\\r
- while (1) {\\r
- stk--;\\r
- STACK_BASE_CHECK(stk, "STACK_POP 3"); \\r
- if ((stk->type & STK_MASK_POP_USED) != 0) break;\\r
- else if (stk->type == STK_MEM_START) {\\r
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\\r
- }\\r
- else if (stk->type == STK_REPEAT_INC) {\\r
- STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
- }\\r
- else if (stk->type == STK_MEM_END) {\\r
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\\r
- }\\r
- ELSE_IF_STATE_CHECK_MARK(stk);\\r
- }\\r
- break;\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_POP_TIL_POS_NOT do {\\r
- while (1) {\\r
- stk--;\\r
- STACK_BASE_CHECK(stk, "STACK_POP_TIL_POS_NOT"); \\r
- if (stk->type == STK_POS_NOT) break;\\r
- else if (stk->type == STK_MEM_START) {\\r
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\\r
- }\\r
- else if (stk->type == STK_REPEAT_INC) {\\r
- STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
- }\\r
- else if (stk->type == STK_MEM_END) {\\r
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\\r
- }\\r
- ELSE_IF_STATE_CHECK_MARK(stk);\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_POP_TIL_LOOK_BEHIND_NOT do {\\r
- while (1) {\\r
- stk--;\\r
- STACK_BASE_CHECK(stk, "STACK_POP_TIL_LOOK_BEHIND_NOT"); \\r
- if (stk->type == STK_LOOK_BEHIND_NOT) break;\\r
- else if (stk->type == STK_MEM_START) {\\r
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\\r
- }\\r
- else if (stk->type == STK_REPEAT_INC) {\\r
- STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\\r
- }\\r
- else if (stk->type == STK_MEM_END) {\\r
- mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\\r
- mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\\r
- }\\r
- ELSE_IF_STATE_CHECK_MARK(stk);\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_POS_END(k) do {\\r
- k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_POS_END"); \\r
- if (IS_TO_VOID_TARGET(k)) {\\r
- k->type = STK_VOID;\\r
- }\\r
- else if (k->type == STK_POS) {\\r
- k->type = STK_VOID;\\r
- break;\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_STOP_BT_END do {\\r
- OnigStackType *k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_STOP_BT_END"); \\r
- if (IS_TO_VOID_TARGET(k)) {\\r
- k->type = STK_VOID;\\r
- }\\r
- else if (k->type == STK_STOP_BT) {\\r
- k->type = STK_VOID;\\r
- break;\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_NULL_CHECK(isnull,id,s) do {\\r
- OnigStackType* k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK"); \\r
- if (k->type == STK_NULL_CHECK_START) {\\r
- if (k->u.null_check.num == (id)) {\\r
- (isnull) = (k->u.null_check.pstr == (s));\\r
- break;\\r
- }\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_NULL_CHECK_REC(isnull,id,s) do {\\r
- int level = 0;\\r
- OnigStackType* k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK_REC"); \\r
- if (k->type == STK_NULL_CHECK_START) {\\r
- if (k->u.null_check.num == (id)) {\\r
- if (level == 0) {\\r
- (isnull) = (k->u.null_check.pstr == (s));\\r
- break;\\r
- }\\r
- else level--;\\r
- }\\r
- }\\r
- else if (k->type == STK_NULL_CHECK_END) {\\r
- level++;\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_NULL_CHECK_MEMST(isnull,id,s,reg) do {\\r
- OnigStackType* k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST"); \\r
- if (k->type == STK_NULL_CHECK_START) {\\r
- if (k->u.null_check.num == (id)) {\\r
- if (k->u.null_check.pstr != (s)) {\\r
- (isnull) = 0;\\r
- break;\\r
- }\\r
- else {\\r
- UChar* endp;\\r
- (isnull) = 1;\\r
- while (k < stk) {\\r
- if (k->type == STK_MEM_START) {\\r
- if (k->u.mem.end == INVALID_STACK_INDEX) {\\r
- (isnull) = 0; break;\\r
- }\\r
- if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\\r
- endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\\r
- else\\r
- endp = (UChar* )k->u.mem.end;\\r
- if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\\r
- (isnull) = 0; break;\\r
- }\\r
- else if (endp != s) {\\r
- (isnull) = -1; /* empty, but position changed */ \\r
- }\\r
- }\\r
- k++;\\r
- }\\r
- break;\\r
- }\\r
- }\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_NULL_CHECK_MEMST_REC(isnull,id,s,reg) do {\\r
- int level = 0;\\r
- OnigStackType* k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST_REC"); \\r
- if (k->type == STK_NULL_CHECK_START) {\\r
- if (k->u.null_check.num == (id)) {\\r
- if (level == 0) {\\r
- if (k->u.null_check.pstr != (s)) {\\r
- (isnull) = 0;\\r
- break;\\r
- }\\r
- else {\\r
- UChar* endp;\\r
- (isnull) = 1;\\r
- while (k < stk) {\\r
- if (k->type == STK_MEM_START) {\\r
- if (k->u.mem.end == INVALID_STACK_INDEX) {\\r
- (isnull) = 0; break;\\r
- }\\r
- if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\\r
- endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\\r
- else\\r
- endp = (UChar* )k->u.mem.end;\\r
- if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\\r
- (isnull) = 0; break;\\r
- }\\r
- else if (endp != s) {\\r
- (isnull) = -1; /* empty, but position changed */ \\r
- }\\r
- }\\r
- k++;\\r
- }\\r
- break;\\r
- }\\r
- }\\r
- else {\\r
- level--;\\r
- }\\r
- }\\r
- }\\r
- else if (k->type == STK_NULL_CHECK_END) {\\r
- if (k->u.null_check.num == (id)) level++;\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_GET_REPEAT(id, k) do {\\r
- int level = 0;\\r
- k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_GET_REPEAT"); \\r
- if (k->type == STK_REPEAT) {\\r
- if (level == 0) {\\r
- if (k->u.repeat.num == (id)) {\\r
- break;\\r
- }\\r
- }\\r
- }\\r
- else if (k->type == STK_CALL_FRAME) level--;\\r
- else if (k->type == STK_RETURN) level++;\\r
- }\\r
-} while(0)\r
-\r
-#define STACK_RETURN(addr) do {\\r
- int level = 0;\\r
- OnigStackType* k = stk;\\r
- while (1) {\\r
- k--;\\r
- STACK_BASE_CHECK(k, "STACK_RETURN"); \\r
- if (k->type == STK_CALL_FRAME) {\\r
- if (level == 0) {\\r
- (addr) = k->u.call_frame.ret_addr;\\r
- break;\\r
- }\\r
- else level--;\\r
- }\\r
- else if (k->type == STK_RETURN)\\r
- level++;\\r
- }\\r
-} while(0)\r
-\r
-\r
-#define STRING_CMP(s1,s2,len) do {\\r
- while (len-- > 0) {\\r
- if (*s1++ != *s2++) goto fail;\\r
- }\\r
-} while(0)\r
-\r
-#define STRING_CMP_IC(case_fold_flag,s1,ps2,len) do {\\r
- if (string_cmp_ic(encode, case_fold_flag, s1, ps2, len) == 0) \\r
- goto fail; \\r
-} while(0)\r
-\r
-static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,\r
- UChar* s1, UChar** ps2, int mblen)\r
-{\r
- UChar buf1[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
- UChar buf2[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
- UChar *p1, *p2, *end1, *s2, *end2;\r
- int len1, len2;\r
-\r
- s2 = *ps2;\r
- end1 = s1 + mblen;\r
- end2 = s2 + mblen;\r
- while (s1 < end1) {\r
- len1 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s1, end1, buf1);\r
- len2 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s2, end2, buf2);\r
- if (len1 != len2) return 0;\r
- p1 = buf1;\r
- p2 = buf2;\r
- while (len1-- > 0) {\r
- if (*p1 != *p2) return 0;\r
- p1++;\r
- p2++;\r
- }\r
- }\r
-\r
- *ps2 = s2;\r
- return 1;\r
-}\r
-\r
-#define STRING_CMP_VALUE(s1,s2,len,is_fail) do {\\r
- is_fail = 0;\\r
- while (len-- > 0) {\\r
- if (*s1++ != *s2++) {\\r
- is_fail = 1; break;\\r
- }\\r
- }\\r
-} while(0)\r
-\r
-#define STRING_CMP_VALUE_IC(case_fold_flag,s1,ps2,len,is_fail) do {\\r
- if (string_cmp_ic(encode, case_fold_flag, s1, ps2, len) == 0) \\r
- is_fail = 1; \\r
- else \\r
- is_fail = 0; \\r
-} while(0)\r
-\r
-\r
-#define IS_EMPTY_STR (str == end)\r
-#define ON_STR_BEGIN(s) ((s) == str)\r
-#define ON_STR_END(s) ((s) == end)\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
-#define DATA_ENSURE_CHECK1 (s < right_range)\r
-#define DATA_ENSURE_CHECK(n) (s + (n) <= right_range)\r
-#define DATA_ENSURE(n) if (s + (n) > right_range) goto fail\r
-#else\r
-#define DATA_ENSURE_CHECK1 (s < end)\r
-#define DATA_ENSURE_CHECK(n) (s + (n) <= end)\r
-#define DATA_ENSURE(n) if (s + (n) > end) goto fail\r
-#endif /* USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE */\r
-\r
-\r
-#ifdef USE_CAPTURE_HISTORY\r
-static int\r
-make_capture_history_tree(OnigCaptureTreeNode* node, OnigStackType** kp,\r
- OnigStackType* stk_top, UChar* str, regex_t* reg)\r
-{\r
- int n, r;\r
- OnigCaptureTreeNode* child;\r
- OnigStackType* k = *kp;\r
-\r
- while (k < stk_top) {\r
- if (k->type == STK_MEM_START) {\r
- n = k->u.mem.num;\r
- if (n <= ONIG_MAX_CAPTURE_HISTORY_GROUP &&\r
- BIT_STATUS_AT(reg->capture_history, n) != 0) {\r
- child = history_node_new();\r
- CHECK_NULL_RETURN_MEMERR(child);\r
- child->group = n;\r
- child->beg = (int )(k->u.mem.pstr - str);\r
- r = history_tree_add_child(node, child);\r
- if (r != 0) return r;\r
- *kp = (k + 1);\r
- r = make_capture_history_tree(child, kp, stk_top, str, reg);\r
- if (r != 0) return r;\r
-\r
- k = *kp;\r
- child->end = (int )(k->u.mem.pstr - str);\r
- }\r
- }\r
- else if (k->type == STK_MEM_END) {\r
- if (k->u.mem.num == node->group) {\r
- node->end = (int )(k->u.mem.pstr - str);\r
- *kp = k;\r
- return 0;\r
- }\r
- }\r
- k++;\r
- }\r
-\r
- return 1; /* 1: root node ending. */\r
-}\r
-#endif\r
-\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
-static int mem_is_in_memp(int mem, int num, UChar* memp)\r
-{\r
- int i;\r
- MemNumType m;\r
-\r
- for (i = 0; i < num; i++) {\r
- GET_MEMNUM_INC(m, memp);\r
- if (mem == (int )m) return 1;\r
- }\r
- return 0;\r
-}\r
-\r
-static int backref_match_at_nested_level(regex_t* reg\r
- , OnigStackType* top, OnigStackType* stk_base\r
- , int ignore_case, int case_fold_flag\r
- , int nest, int mem_num, UChar* memp, UChar** s, const UChar* send)\r
-{\r
- UChar *ss, *p, *pstart, *pend = NULL_UCHARP;\r
- int level;\r
- OnigStackType* k;\r
-\r
- level = 0;\r
- k = top;\r
- k--;\r
- while (k >= stk_base) {\r
- if (k->type == STK_CALL_FRAME) {\r
- level--;\r
- }\r
- else if (k->type == STK_RETURN) {\r
- level++;\r
- }\r
- else if (level == nest) {\r
- if (k->type == STK_MEM_START) {\r
- if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) {\r
- pstart = k->u.mem.pstr;\r
- if (pend != NULL_UCHARP) {\r
- if (pend - pstart > send - *s) return 0; /* or goto next_mem; */\r
- p = pstart;\r
- ss = *s;\r
-\r
- if (ignore_case != 0) {\r
- if (string_cmp_ic(reg->enc, case_fold_flag,\r
- pstart, &ss, (int )(pend - pstart)) == 0)\r
- return 0; /* or goto next_mem; */\r
- }\r
- else {\r
- while (p < pend) {\r
- if (*p++ != *ss++) return 0; /* or goto next_mem; */\r
- }\r
- }\r
-\r
- *s = ss;\r
- return 1;\r
- }\r
- }\r
- }\r
- else if (k->type == STK_MEM_END) {\r
- if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) {\r
- pend = k->u.mem.pstr;\r
- }\r
- }\r
- }\r
- k--;\r
- }\r
-\r
- return 0;\r
-}\r
-#endif /* USE_BACKREF_WITH_LEVEL */\r
-\r
-\r
-#ifdef ONIG_DEBUG_STATISTICS\r
-\r
-#define USE_TIMEOFDAY\r
-\r
-#ifdef USE_TIMEOFDAY\r
-#ifdef HAVE_SYS_TIME_H\r
-#include <sys/time.h>\r
-#endif\r
-#ifdef HAVE_UNISTD_H\r
-#include <unistd.h>\r
-#endif\r
-static struct timeval ts, te;\r
-#define GETTIME(t) gettimeofday(&(t), (struct timezone* )0)\r
-#define TIMEDIFF(te,ts) (((te).tv_usec - (ts).tv_usec) + \\r
- (((te).tv_sec - (ts).tv_sec)*1000000))\r
-#else\r
-#ifdef HAVE_SYS_TIMES_H\r
-#include <sys/times.h>\r
-#endif\r
-static struct tms ts, te;\r
-#define GETTIME(t) times(&(t))\r
-#define TIMEDIFF(te,ts) ((te).tms_utime - (ts).tms_utime)\r
-#endif\r
-\r
-static int OpCounter[256];\r
-static int OpPrevCounter[256];\r
-static unsigned long OpTime[256];\r
-static int OpCurr = OP_FINISH;\r
-static int OpPrevTarget = OP_FAIL;\r
-static int MaxStackDepth = 0;\r
-\r
-#define MOP_IN(opcode) do {\\r
- if (opcode == OpPrevTarget) OpPrevCounter[OpCurr]++;\\r
- OpCurr = opcode;\\r
- OpCounter[opcode]++;\\r
- GETTIME(ts);\\r
-} while(0)\r
-\r
-#define MOP_OUT do {\\r
- GETTIME(te);\\r
- OpTime[OpCurr] += TIMEDIFF(te, ts);\\r
-} while(0)\r
-\r
-extern void\r
-onig_statistics_init(void)\r
-{\r
- int i;\r
- for (i = 0; i < 256; i++) {\r
- OpCounter[i] = OpPrevCounter[i] = 0; OpTime[i] = 0;\r
- }\r
- MaxStackDepth = 0;\r
-}\r
-\r
-extern void\r
-onig_print_statistics(FILE* f)\r
-{\r
- int i;\r
- fprintf(f, " count prev time\n");\r
- for (i = 0; OnigOpInfo[i].opcode >= 0; i++) {\r
- fprintf(f, "%8d: %8d: %10ld: %s\n",\r
- OpCounter[i], OpPrevCounter[i], OpTime[i], OnigOpInfo[i].name);\r
- }\r
- fprintf(f, "\nmax stack depth: %d\n", MaxStackDepth);\r
-}\r
-\r
-#define STACK_INC do {\\r
- stk++;\\r
- if (stk - stk_base > MaxStackDepth) \\r
- MaxStackDepth = stk - stk_base;\\r
-} while(0)\r
-\r
-#else\r
-#define STACK_INC stk++\r
-\r
-#define MOP_IN(opcode)\r
-#define MOP_OUT\r
-#endif\r
-\r
-\r
-/* matching region of POSIX API */\r
-typedef int regoff_t;\r
-\r
-typedef struct {\r
- regoff_t rm_so;\r
- regoff_t rm_eo;\r
-} posix_regmatch_t;\r
-\r
-/* match data(str - end) from position (sstart). */\r
-/* if sstart == str then set sprev to NULL. */\r
-static int\r
-match_at(regex_t* reg, const UChar* str, const UChar* end,\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
- const UChar* right_range,\r
-#endif\r
- const UChar* sstart, UChar* sprev, OnigMatchArg* msa)\r
-{\r
- static UChar FinishCode[] = { OP_FINISH };\r
-\r
- int i, n, num_mem, best_len, pop_level;\r
- LengthType tlen, tlen2;\r
- MemNumType mem;\r
- RelAddrType addr;\r
- OnigOptionType option = reg->options;\r
- OnigEncoding encode = reg->enc;\r
- OnigCaseFoldType case_fold_flag = reg->case_fold_flag;\r
- UChar *s, *q, *sbegin;\r
- UChar *p = reg->p;\r
- char *alloca_base;\r
- OnigStackType *stk_alloc, *stk_base, *stk, *stk_end;\r
- OnigStackType *stkp; /* used as any purpose. */\r
- OnigStackIndex si;\r
- OnigStackIndex *repeat_stk;\r
- OnigStackIndex *mem_start_stk, *mem_end_stk;\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- int scv;\r
- unsigned char* state_check_buff = msa->state_check_buff;\r
- int num_comb_exp_check = reg->num_comb_exp_check;\r
-#endif\r
- n = reg->num_repeat + reg->num_mem * 2;\r
-\r
- STACK_INIT(alloca_base, n, INIT_MATCH_STACK_SIZE);\r
- pop_level = reg->stack_pop_level;\r
- num_mem = reg->num_mem;\r
- repeat_stk = (OnigStackIndex* )alloca_base;\r
-\r
- mem_start_stk = (OnigStackIndex* )(repeat_stk + reg->num_repeat);\r
- mem_end_stk = mem_start_stk + num_mem;\r
- mem_start_stk--; /* for index start from 1,\r
- mem_start_stk[1]..mem_start_stk[num_mem] */\r
- mem_end_stk--; /* for index start from 1,\r
- mem_end_stk[1]..mem_end_stk[num_mem] */\r
- for (i = 1; i <= num_mem; i++) {\r
- mem_start_stk[i] = mem_end_stk[i] = INVALID_STACK_INDEX;\r
- }\r
-\r
-#ifdef ONIG_DEBUG_MATCH\r
- fprintf(stderr, "match_at: str: %d, end: %d, start: %d, sprev: %d\n",\r
- (int )str, (int )end, (int )sstart, (int )sprev);\r
- fprintf(stderr, "size: %d, start offset: %d\n",\r
- (int )(end - str), (int )(sstart - str));\r
-#endif\r
-\r
- STACK_PUSH_ENSURED(STK_ALT, FinishCode); /* bottom stack */\r
- best_len = ONIG_MISMATCH;\r
- s = (UChar* )sstart;\r
- while (1) {\r
-#ifdef ONIG_DEBUG_MATCH\r
- {\r
- UChar *q, *bp, buf[50];\r
- int len;\r
- fprintf(stderr, "%4d> \"", (int )(s - str));\r
- bp = buf;\r
- for (i = 0, q = s; i < 7 && q < end; i++) {\r
- len = enclen(encode, q);\r
- while (len-- > 0) *bp++ = *q++;\r
- }\r
- if (q < end) { xmemcpy(bp, "...\"", 4); bp += 4; }\r
- else { xmemcpy(bp, "\"", 1); bp += 1; }\r
- *bp = 0;\r
- fputs((char* )buf, stderr);\r
- for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);\r
- onig_print_compiled_byte_code(stderr, p, NULL, encode);\r
- fprintf(stderr, "\n");\r
- }\r
-#endif\r
-\r
- sbegin = s;\r
- switch (*p++) {\r
- case OP_END: MOP_IN(OP_END);\r
- n = (int)(s - sstart);\r
- if (n > best_len) {\r
- OnigRegion* region;\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
- if (IS_FIND_LONGEST(option)) {\r
- if (n > msa->best_len) {\r
- msa->best_len = n;\r
- msa->best_s = (UChar* )sstart;\r
- }\r
- else\r
- goto end_best_len;\r
- }\r
-#endif\r
- best_len = n;\r
- region = msa->region;\r
- if (region) {\r
-#ifdef USE_POSIX_API_REGION_OPTION\r
- if (IS_POSIX_REGION(msa->options)) {\r
- posix_regmatch_t* rmt = (posix_regmatch_t* )region;\r
-\r
- rmt[0].rm_so = (regoff_t)(sstart - str);\r
- rmt[0].rm_eo = (regoff_t)(s - str);\r
- for (i = 1; i <= num_mem; i++) {\r
- if (mem_end_stk[i] != INVALID_STACK_INDEX) {\r
- if (BIT_STATUS_AT(reg->bt_mem_start, i))\r
- rmt[i].rm_so = (regoff_t)(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);\r
- else\r
- rmt[i].rm_so = (regoff_t)((UChar* )((void* )(mem_start_stk[i])) - str);\r
-\r
- rmt[i].rm_eo = (regoff_t)((BIT_STATUS_AT(reg->bt_mem_end, i)\r
- ? STACK_AT(mem_end_stk[i])->u.mem.pstr\r
- : (UChar* )((void* )mem_end_stk[i])) - str);\r
- }\r
- else {\r
- rmt[i].rm_so = rmt[i].rm_eo = ONIG_REGION_NOTPOS;\r
- }\r
- }\r
- }\r
- else {\r
-#endif /* USE_POSIX_API_REGION_OPTION */\r
- region->beg[0] = (int)(sstart - str);\r
- region->end[0] = (int)(s - str);\r
- for (i = 1; i <= num_mem; i++) {\r
- if (mem_end_stk[i] != INVALID_STACK_INDEX) {\r
- if (BIT_STATUS_AT(reg->bt_mem_start, i))\r
- region->beg[i] = (int)(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);\r
- else\r
- region->beg[i] = (int)((UChar* )((void* )mem_start_stk[i]) - str);\r
-\r
- region->end[i] = (int)((BIT_STATUS_AT(reg->bt_mem_end, i)\r
- ? STACK_AT(mem_end_stk[i])->u.mem.pstr\r
- : (UChar* )((void* )mem_end_stk[i])) - str);\r
- }\r
- else {\r
- region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;\r
- }\r
- }\r
-\r
-#ifdef USE_CAPTURE_HISTORY\r
- if (reg->capture_history != 0) {\r
- int r;\r
- OnigCaptureTreeNode* node;\r
-\r
- if (IS_NULL(region->history_root)) {\r
- region->history_root = node = history_node_new();\r
- CHECK_NULL_RETURN_MEMERR(node);\r
- }\r
- else {\r
- node = region->history_root;\r
- history_tree_clear(node);\r
- }\r
-\r
- node->group = 0;\r
- node->beg = (int)(sstart - str);\r
- node->end = (int)(s - str);\r
-\r
- stkp = stk_base;\r
- r = make_capture_history_tree(region->history_root, &stkp,\r
- stk, (UChar* )str, reg);\r
- if (r < 0) {\r
- best_len = r; /* error code */\r
- goto finish;\r
- }\r
- }\r
-#endif /* USE_CAPTURE_HISTORY */\r
-#ifdef USE_POSIX_API_REGION_OPTION\r
- } /* else IS_POSIX_REGION() */\r
-#endif\r
- } /* if (region) */\r
- } /* n > best_len */\r
-\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
- end_best_len:\r
-#endif\r
- MOP_OUT;\r
-\r
- if (IS_FIND_CONDITION(option)) {\r
- if (IS_FIND_NOT_EMPTY(option) && s == sstart) {\r
- best_len = ONIG_MISMATCH;\r
- goto fail; /* for retry */\r
- }\r
- if (IS_FIND_LONGEST(option) && DATA_ENSURE_CHECK1) {\r
- goto fail; /* for retry */\r
- }\r
- }\r
-\r
- /* default behavior: return first-matching result. */\r
- goto finish;\r
- break;\r
-\r
- case OP_EXACT1: MOP_IN(OP_EXACT1);\r
-#if 0\r
- DATA_ENSURE(1);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
-#endif\r
- if (*p != *s++) goto fail;\r
- DATA_ENSURE(0);\r
- p++;\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_EXACT1_IC: MOP_IN(OP_EXACT1_IC);\r
- {\r
- int len;\r
- UChar *q, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
-\r
- DATA_ENSURE(1);\r
- len = ONIGENC_MBC_CASE_FOLD(encode,\r
- /* DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag), */\r
- case_fold_flag,\r
- &s, end, lowbuf);\r
- DATA_ENSURE(0);\r
- q = lowbuf;\r
- while (len-- > 0) {\r
- if (*p != *q) {\r
- goto fail;\r
- }\r
- p++; q++;\r
- }\r
- }\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_EXACT2: MOP_IN(OP_EXACT2);\r
- DATA_ENSURE(2);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- sprev = s;\r
- p++; s++;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACT3: MOP_IN(OP_EXACT3);\r
- DATA_ENSURE(3);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- sprev = s;\r
- p++; s++;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACT4: MOP_IN(OP_EXACT4);\r
- DATA_ENSURE(4);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- sprev = s;\r
- p++; s++;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACT5: MOP_IN(OP_EXACT5);\r
- DATA_ENSURE(5);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- sprev = s;\r
- p++; s++;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACTN: MOP_IN(OP_EXACTN);\r
- GET_LENGTH_INC(tlen, p);\r
- DATA_ENSURE(tlen);\r
- while (tlen-- > 0) {\r
- if (*p++ != *s++) goto fail;\r
- }\r
- sprev = s - 1;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACTN_IC: MOP_IN(OP_EXACTN_IC);\r
- {\r
- int len;\r
- UChar *q, *endp, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
-\r
- GET_LENGTH_INC(tlen, p);\r
- endp = p + tlen;\r
-\r
- while (p < endp) {\r
- sprev = s;\r
- DATA_ENSURE(1);\r
- len = ONIGENC_MBC_CASE_FOLD(encode,\r
- /* DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag), */\r
- case_fold_flag,\r
- &s, end, lowbuf);\r
- DATA_ENSURE(0);\r
- q = lowbuf;\r
- while (len-- > 0) {\r
- if (*p != *q) goto fail;\r
- p++; q++;\r
- }\r
- }\r
- }\r
-\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACTMB2N1: MOP_IN(OP_EXACTMB2N1);\r
- DATA_ENSURE(2);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_EXACTMB2N2: MOP_IN(OP_EXACTMB2N2);\r
- DATA_ENSURE(4);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- sprev = s;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACTMB2N3: MOP_IN(OP_EXACTMB2N3);\r
- DATA_ENSURE(6);\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- sprev = s;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACTMB2N: MOP_IN(OP_EXACTMB2N);\r
- GET_LENGTH_INC(tlen, p);\r
- DATA_ENSURE(tlen * 2);\r
- while (tlen-- > 0) {\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- }\r
- sprev = s - 2;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACTMB3N: MOP_IN(OP_EXACTMB3N);\r
- GET_LENGTH_INC(tlen, p);\r
- DATA_ENSURE(tlen * 3);\r
- while (tlen-- > 0) {\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- }\r
- sprev = s - 3;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_EXACTMBN: MOP_IN(OP_EXACTMBN);\r
- GET_LENGTH_INC(tlen, p); /* mb-len */\r
- GET_LENGTH_INC(tlen2, p); /* string len */\r
- tlen2 *= tlen;\r
- DATA_ENSURE(tlen2);\r
- while (tlen2-- > 0) {\r
- if (*p != *s) goto fail;\r
- p++; s++;\r
- }\r
- sprev = s - tlen;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_CCLASS: MOP_IN(OP_CCLASS);\r
- DATA_ENSURE(1);\r
- if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail;\r
- p += SIZE_BITSET;\r
- s += enclen(encode, s); /* OP_CCLASS can match mb-code. \D, \S */\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_CCLASS_MB: MOP_IN(OP_CCLASS_MB);\r
- if (! ONIGENC_IS_MBC_HEAD(encode, s)) goto fail;\r
-\r
- cclass_mb:\r
- GET_LENGTH_INC(tlen, p);\r
- {\r
- OnigCodePoint code;\r
- UChar *ss;\r
- int mb_len;\r
-\r
- DATA_ENSURE(1);\r
- mb_len = enclen(encode, s);\r
- DATA_ENSURE(mb_len);\r
- ss = s;\r
- s += mb_len;\r
- code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
-\r
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
- if (! onig_is_in_code_range(p, code)) goto fail;\r
-#else\r
- q = p;\r
- ALIGNMENT_RIGHT(q);\r
- if (! onig_is_in_code_range(q, code)) goto fail;\r
-#endif\r
- }\r
- p += tlen;\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_CCLASS_MIX: MOP_IN(OP_CCLASS_MIX);\r
- DATA_ENSURE(1);\r
- if (ONIGENC_IS_MBC_HEAD(encode, s)) {\r
- p += SIZE_BITSET;\r
- goto cclass_mb;\r
- }\r
- else {\r
- if (BITSET_AT(((BitSetRef )p), *s) == 0)\r
- goto fail;\r
-\r
- p += SIZE_BITSET;\r
- GET_LENGTH_INC(tlen, p);\r
- p += tlen;\r
- s++;\r
- }\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_CCLASS_NOT: MOP_IN(OP_CCLASS_NOT);\r
- DATA_ENSURE(1);\r
- if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail;\r
- p += SIZE_BITSET;\r
- s += enclen(encode, s);\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_CCLASS_MB_NOT: MOP_IN(OP_CCLASS_MB_NOT);\r
- DATA_ENSURE(1);\r
- if (! ONIGENC_IS_MBC_HEAD(encode, s)) {\r
- s++;\r
- GET_LENGTH_INC(tlen, p);\r
- p += tlen;\r
- goto cc_mb_not_success;\r
- }\r
-\r
- cclass_mb_not:\r
- GET_LENGTH_INC(tlen, p);\r
- {\r
- OnigCodePoint code;\r
- UChar *ss;\r
- int mb_len = enclen(encode, s);\r
-\r
- if (! DATA_ENSURE_CHECK(mb_len)) {\r
- DATA_ENSURE(1);\r
- s = (UChar* )end;\r
- p += tlen;\r
- goto cc_mb_not_success;\r
- }\r
-\r
- ss = s;\r
- s += mb_len;\r
- code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
-\r
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
- if (onig_is_in_code_range(p, code)) goto fail;\r
-#else\r
- q = p;\r
- ALIGNMENT_RIGHT(q);\r
- if (onig_is_in_code_range(q, code)) goto fail;\r
-#endif\r
- }\r
- p += tlen;\r
-\r
- cc_mb_not_success:\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_CCLASS_MIX_NOT: MOP_IN(OP_CCLASS_MIX_NOT);\r
- DATA_ENSURE(1);\r
- if (ONIGENC_IS_MBC_HEAD(encode, s)) {\r
- p += SIZE_BITSET;\r
- goto cclass_mb_not;\r
- }\r
- else {\r
- if (BITSET_AT(((BitSetRef )p), *s) != 0)\r
- goto fail;\r
-\r
- p += SIZE_BITSET;\r
- GET_LENGTH_INC(tlen, p);\r
- p += tlen;\r
- s++;\r
- }\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_CCLASS_NODE: MOP_IN(OP_CCLASS_NODE);\r
- {\r
- OnigCodePoint code;\r
- void *node;\r
- int mb_len;\r
- UChar *ss;\r
-\r
- DATA_ENSURE(1);\r
- GET_POINTER_INC(node, p);\r
- mb_len = enclen(encode, s);\r
- ss = s;\r
- s += mb_len;\r
- DATA_ENSURE(0);\r
- code = ONIGENC_MBC_TO_CODE(encode, ss, s);\r
- if (onig_is_code_in_cc_len(mb_len, code, node) == 0) goto fail;\r
- }\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_ANYCHAR: MOP_IN(OP_ANYCHAR);\r
- DATA_ENSURE(1);\r
- n = enclen(encode, s);\r
- DATA_ENSURE(n);\r
- if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;\r
- s += n;\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_ANYCHAR_ML: MOP_IN(OP_ANYCHAR_ML);\r
- DATA_ENSURE(1);\r
- n = enclen(encode, s);\r
- DATA_ENSURE(n);\r
- s += n;\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_ANYCHAR_STAR: MOP_IN(OP_ANYCHAR_STAR);\r
- while (DATA_ENSURE_CHECK1) {\r
- STACK_PUSH_ALT(p, s, sprev);\r
- n = enclen(encode, s);\r
- DATA_ENSURE(n);\r
- if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;\r
- sprev = s;\r
- s += n;\r
- }\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_ANYCHAR_ML_STAR: MOP_IN(OP_ANYCHAR_ML_STAR);\r
- while (DATA_ENSURE_CHECK1) {\r
- STACK_PUSH_ALT(p, s, sprev);\r
- n = enclen(encode, s);\r
- if (n > 1) {\r
- DATA_ENSURE(n);\r
- sprev = s;\r
- s += n;\r
- }\r
- else {\r
- sprev = s;\r
- s++;\r
- }\r
- }\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_ANYCHAR_STAR_PEEK_NEXT: MOP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);\r
- while (DATA_ENSURE_CHECK1) {\r
- if (*p == *s) {\r
- STACK_PUSH_ALT(p + 1, s, sprev);\r
- }\r
- n = enclen(encode, s);\r
- DATA_ENSURE(n);\r
- if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;\r
- sprev = s;\r
- s += n;\r
- }\r
- p++;\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_ANYCHAR_ML_STAR_PEEK_NEXT:MOP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT);\r
- while (DATA_ENSURE_CHECK1) {\r
- if (*p == *s) {\r
- STACK_PUSH_ALT(p + 1, s, sprev);\r
- }\r
- n = enclen(encode, s);\r
- if (n > 1) {\r
- DATA_ENSURE(n);\r
- sprev = s;\r
- s += n;\r
- }\r
- else {\r
- sprev = s;\r
- s++;\r
- }\r
- }\r
- p++;\r
- MOP_OUT;\r
- break;\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- case OP_STATE_CHECK_ANYCHAR_STAR: MOP_IN(OP_STATE_CHECK_ANYCHAR_STAR);\r
- GET_STATE_CHECK_NUM_INC(mem, p);\r
- while (DATA_ENSURE_CHECK1) {\r
- STATE_CHECK_VAL(scv, mem);\r
- if (scv) goto fail;\r
-\r
- STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem);\r
- n = enclen(encode, s);\r
- DATA_ENSURE(n);\r
- if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;\r
- sprev = s;\r
- s += n;\r
- }\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_STATE_CHECK_ANYCHAR_ML_STAR:\r
- MOP_IN(OP_STATE_CHECK_ANYCHAR_ML_STAR);\r
-\r
- GET_STATE_CHECK_NUM_INC(mem, p);\r
- while (DATA_ENSURE_CHECK1) {\r
- STATE_CHECK_VAL(scv, mem);\r
- if (scv) goto fail;\r
-\r
- STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem);\r
- n = enclen(encode, s);\r
- if (n > 1) {\r
- DATA_ENSURE(n);\r
- sprev = s;\r
- s += n;\r
- }\r
- else {\r
- sprev = s;\r
- s++;\r
- }\r
- }\r
- MOP_OUT;\r
- break;\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
- case OP_WORD: MOP_IN(OP_WORD);\r
- DATA_ENSURE(1);\r
- if (! ONIGENC_IS_MBC_WORD(encode, s, end))\r
- goto fail;\r
-\r
- s += enclen(encode, s);\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_NOT_WORD: MOP_IN(OP_NOT_WORD);\r
- DATA_ENSURE(1);\r
- if (ONIGENC_IS_MBC_WORD(encode, s, end))\r
- goto fail;\r
-\r
- s += enclen(encode, s);\r
- MOP_OUT;\r
- break;\r
-\r
- case OP_WORD_BOUND: MOP_IN(OP_WORD_BOUND);\r
- if (ON_STR_BEGIN(s)) {\r
- DATA_ENSURE(1);\r
- if (! ONIGENC_IS_MBC_WORD(encode, s, end))\r
- goto fail;\r
- }\r
- else if (ON_STR_END(s)) {\r
- if (! ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
- goto fail;\r
- }\r
- else {\r
- if (ONIGENC_IS_MBC_WORD(encode, s, end)\r
- == ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
- goto fail;\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_NOT_WORD_BOUND: MOP_IN(OP_NOT_WORD_BOUND);\r
- if (ON_STR_BEGIN(s)) {\r
- if (DATA_ENSURE_CHECK1 && ONIGENC_IS_MBC_WORD(encode, s, end))\r
- goto fail;\r
- }\r
- else if (ON_STR_END(s)) {\r
- if (ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
- goto fail;\r
- }\r
- else {\r
- if (ONIGENC_IS_MBC_WORD(encode, s, end)\r
- != ONIGENC_IS_MBC_WORD(encode, sprev, end))\r
- goto fail;\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
-#ifdef USE_WORD_BEGIN_END\r
- case OP_WORD_BEGIN: MOP_IN(OP_WORD_BEGIN);\r
- if (DATA_ENSURE_CHECK1 && ONIGENC_IS_MBC_WORD(encode, s, end)) {\r
- if (ON_STR_BEGIN(s) || !ONIGENC_IS_MBC_WORD(encode, sprev, end)) {\r
- MOP_OUT;\r
- continue;\r
- }\r
- }\r
- goto fail;\r
- break;\r
-\r
- case OP_WORD_END: MOP_IN(OP_WORD_END);\r
- if (!ON_STR_BEGIN(s) && ONIGENC_IS_MBC_WORD(encode, sprev, end)) {\r
- if (ON_STR_END(s) || !ONIGENC_IS_MBC_WORD(encode, s, end)) {\r
- MOP_OUT;\r
- continue;\r
- }\r
- }\r
- goto fail;\r
- break;\r
-#endif\r
-\r
- case OP_BEGIN_BUF: MOP_IN(OP_BEGIN_BUF);\r
- if (! ON_STR_BEGIN(s)) goto fail;\r
-\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_END_BUF: MOP_IN(OP_END_BUF);\r
- if (! ON_STR_END(s)) goto fail;\r
-\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_BEGIN_LINE: MOP_IN(OP_BEGIN_LINE);\r
- if (ON_STR_BEGIN(s)) {\r
- if (IS_NOTBOL(msa->options)) goto fail;\r
- MOP_OUT;\r
- continue;\r
- }\r
- else if (ONIGENC_IS_MBC_NEWLINE(encode, sprev, end) && !ON_STR_END(s)) {\r
- MOP_OUT;\r
- continue;\r
- }\r
- goto fail;\r
- break;\r
-\r
- case OP_END_LINE: MOP_IN(OP_END_LINE);\r
- if (ON_STR_END(s)) {\r
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
- if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {\r
-#endif\r
- if (IS_NOTEOL(msa->options)) goto fail;\r
- MOP_OUT;\r
- continue;\r
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
- }\r
-#endif\r
- }\r
- else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) {\r
- MOP_OUT;\r
- continue;\r
- }\r
-#ifdef USE_CRNL_AS_LINE_TERMINATOR\r
- else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {\r
- MOP_OUT;\r
- continue;\r
- }\r
-#endif\r
- goto fail;\r
- break;\r
-\r
- case OP_SEMI_END_BUF: MOP_IN(OP_SEMI_END_BUF);\r
- if (ON_STR_END(s)) {\r
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
- if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {\r
-#endif\r
- if (IS_NOTEOL(msa->options)) goto fail;\r
- MOP_OUT;\r
- continue;\r
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
- }\r
-#endif\r
- }\r
- else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end) &&\r
- ON_STR_END(s + enclen(encode, s))) {\r
- MOP_OUT;\r
- continue;\r
- }\r
-#ifdef USE_CRNL_AS_LINE_TERMINATOR\r
- else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {\r
- UChar* ss = s + enclen(encode, s);\r
- ss += enclen(encode, ss);\r
- if (ON_STR_END(ss)) {\r
- MOP_OUT;\r
- continue;\r
- }\r
- }\r
-#endif\r
- goto fail;\r
- break;\r
-\r
- case OP_BEGIN_POSITION: MOP_IN(OP_BEGIN_POSITION);\r
- if (s != msa->start)\r
- goto fail;\r
-\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_MEMORY_START_PUSH: MOP_IN(OP_MEMORY_START_PUSH);\r
- GET_MEMNUM_INC(mem, p);\r
- STACK_PUSH_MEM_START(mem, s);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_MEMORY_START: MOP_IN(OP_MEMORY_START);\r
- GET_MEMNUM_INC(mem, p);\r
- mem_start_stk[mem] = (OnigStackIndex )((void* )s);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_MEMORY_END_PUSH: MOP_IN(OP_MEMORY_END_PUSH);\r
- GET_MEMNUM_INC(mem, p);\r
- STACK_PUSH_MEM_END(mem, s);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_MEMORY_END: MOP_IN(OP_MEMORY_END);\r
- GET_MEMNUM_INC(mem, p);\r
- mem_end_stk[mem] = (OnigStackIndex )((void* )s);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case OP_MEMORY_END_PUSH_REC: MOP_IN(OP_MEMORY_END_PUSH_REC);\r
- GET_MEMNUM_INC(mem, p);\r
- STACK_GET_MEM_START(mem, stkp); /* should be before push mem-end. */\r
- STACK_PUSH_MEM_END(mem, s);\r
- mem_start_stk[mem] = GET_STACK_INDEX(stkp);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_MEMORY_END_REC: MOP_IN(OP_MEMORY_END_REC);\r
- GET_MEMNUM_INC(mem, p);\r
- mem_end_stk[mem] = (OnigStackIndex )((void* )s);\r
- STACK_GET_MEM_START(mem, stkp);\r
-\r
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
- mem_start_stk[mem] = GET_STACK_INDEX(stkp);\r
- else\r
- mem_start_stk[mem] = (OnigStackIndex )((void* )stkp->u.mem.pstr);\r
-\r
- STACK_PUSH_MEM_END_MARK(mem);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-#endif\r
-\r
- case OP_BACKREF1: MOP_IN(OP_BACKREF1);\r
- mem = 1;\r
- goto backref;\r
- break;\r
-\r
- case OP_BACKREF2: MOP_IN(OP_BACKREF2);\r
- mem = 2;\r
- goto backref;\r
- break;\r
-\r
- case OP_BACKREFN: MOP_IN(OP_BACKREFN);\r
- GET_MEMNUM_INC(mem, p);\r
- backref:\r
- {\r
- int len;\r
- UChar *pstart, *pend;\r
-\r
- /* if you want to remove following line, \r
- you should check in parse and compile time. */\r
- if (mem > num_mem) goto fail;\r
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
-\r
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
- else\r
- pstart = (UChar* )((void* )mem_start_stk[mem]);\r
-\r
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
- : (UChar* )((void* )mem_end_stk[mem]));\r
- n = (int)(pend - pstart);\r
- DATA_ENSURE(n);\r
- sprev = s;\r
- STRING_CMP(pstart, s, n);\r
- while (sprev + (len = enclen(encode, sprev)) < s)\r
- sprev += len;\r
-\r
- MOP_OUT;\r
- continue;\r
- }\r
- break;\r
-\r
- case OP_BACKREFN_IC: MOP_IN(OP_BACKREFN_IC);\r
- GET_MEMNUM_INC(mem, p);\r
- {\r
- int len;\r
- UChar *pstart, *pend;\r
-\r
- /* if you want to remove following line, \r
- you should check in parse and compile time. */\r
- if (mem > num_mem) goto fail;\r
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail;\r
-\r
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
- else\r
- pstart = (UChar* )((void* )mem_start_stk[mem]);\r
-\r
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
- : (UChar* )((void* )mem_end_stk[mem]));\r
- n = (int)(pend - pstart);\r
- DATA_ENSURE(n);\r
- sprev = s;\r
- STRING_CMP_IC(case_fold_flag, pstart, &s, n);\r
- while (sprev + (len = enclen(encode, sprev)) < s)\r
- sprev += len;\r
-\r
- MOP_OUT;\r
- continue;\r
- }\r
- break;\r
-\r
- case OP_BACKREF_MULTI: MOP_IN(OP_BACKREF_MULTI);\r
- {\r
- int len, is_fail;\r
- UChar *pstart, *pend, *swork;\r
-\r
- GET_LENGTH_INC(tlen, p);\r
- for (i = 0; i < tlen; i++) {\r
- GET_MEMNUM_INC(mem, p);\r
-\r
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue;\r
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;\r
-\r
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
- else\r
- pstart = (UChar* )((void* )mem_start_stk[mem]);\r
-\r
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
- : (UChar* )((void* )mem_end_stk[mem]));\r
- n = (int)(pend - pstart);\r
- DATA_ENSURE(n);\r
- sprev = s;\r
- swork = s;\r
- STRING_CMP_VALUE(pstart, swork, n, is_fail);\r
- if (is_fail) continue;\r
- s = swork;\r
- while (sprev + (len = enclen(encode, sprev)) < s)\r
- sprev += len;\r
-\r
- p += (SIZE_MEMNUM * (tlen - i - 1));\r
- break; /* success */\r
- }\r
- if (i == tlen) goto fail;\r
- MOP_OUT;\r
- continue;\r
- }\r
- break;\r
-\r
- case OP_BACKREF_MULTI_IC: MOP_IN(OP_BACKREF_MULTI_IC);\r
- {\r
- int len, is_fail;\r
- UChar *pstart, *pend, *swork;\r
-\r
- GET_LENGTH_INC(tlen, p);\r
- for (i = 0; i < tlen; i++) {\r
- GET_MEMNUM_INC(mem, p);\r
-\r
- if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue;\r
- if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;\r
-\r
- if (BIT_STATUS_AT(reg->bt_mem_start, mem))\r
- pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr;\r
- else\r
- pstart = (UChar* )((void* )mem_start_stk[mem]);\r
-\r
- pend = (BIT_STATUS_AT(reg->bt_mem_end, mem)\r
- ? STACK_AT(mem_end_stk[mem])->u.mem.pstr\r
- : (UChar* )((void* )mem_end_stk[mem]));\r
- n = (int)(pend - pstart);\r
- DATA_ENSURE(n);\r
- sprev = s;\r
- swork = s;\r
- STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);\r
- if (is_fail) continue;\r
- s = swork;\r
- while (sprev + (len = enclen(encode, sprev)) < s)\r
- sprev += len;\r
-\r
- p += (SIZE_MEMNUM * (tlen - i - 1));\r
- break; /* success */\r
- }\r
- if (i == tlen) goto fail;\r
- MOP_OUT;\r
- continue;\r
- }\r
- break;\r
-\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- case OP_BACKREF_WITH_LEVEL:\r
- {\r
- int len;\r
- OnigOptionType ic;\r
- LengthType level;\r
-\r
- GET_OPTION_INC(ic, p);\r
- GET_LENGTH_INC(level, p);\r
- GET_LENGTH_INC(tlen, p);\r
-\r
- sprev = s;\r
- if (backref_match_at_nested_level(reg, stk, stk_base, ic\r
- , case_fold_flag, (int )level, (int )tlen, p, &s, end)) {\r
- while (sprev + (len = enclen(encode, sprev)) < s)\r
- sprev += len;\r
-\r
- p += (SIZE_MEMNUM * tlen);\r
- }\r
- else\r
- goto fail;\r
-\r
- MOP_OUT;\r
- continue;\r
- }\r
- \r
- break;\r
-#endif\r
-\r
-#if 0 /* no need: IS_DYNAMIC_OPTION() == 0 */\r
- case OP_SET_OPTION_PUSH: MOP_IN(OP_SET_OPTION_PUSH);\r
- GET_OPTION_INC(option, p);\r
- STACK_PUSH_ALT(p, s, sprev);\r
- p += SIZE_OP_SET_OPTION + SIZE_OP_FAIL;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_SET_OPTION: MOP_IN(OP_SET_OPTION);\r
- GET_OPTION_INC(option, p);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-#endif\r
-\r
- case OP_NULL_CHECK_START: MOP_IN(OP_NULL_CHECK_START);\r
- GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
- STACK_PUSH_NULL_CHECK_START(mem, s);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_NULL_CHECK_END: MOP_IN(OP_NULL_CHECK_END);\r
- {\r
- int isnull;\r
-\r
- GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
- STACK_NULL_CHECK(isnull, mem, s);\r
- if (isnull) {\r
-#ifdef ONIG_DEBUG_MATCH\r
- fprintf(stderr, "NULL_CHECK_END: skip id:%d, s:%d\n",\r
- (int )mem, (int )s);\r
-#endif\r
- null_check_found:\r
- /* empty loop founded, skip next instruction */\r
- switch (*p++) {\r
- case OP_JUMP:\r
- case OP_PUSH:\r
- p += SIZE_RELADDR;\r
- break;\r
- case OP_REPEAT_INC:\r
- case OP_REPEAT_INC_NG:\r
- case OP_REPEAT_INC_SG:\r
- case OP_REPEAT_INC_NG_SG:\r
- p += SIZE_MEMNUM;\r
- break;\r
- default:\r
- goto unexpected_bytecode_error;\r
- break;\r
- }\r
- }\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
- case OP_NULL_CHECK_END_MEMST: MOP_IN(OP_NULL_CHECK_END_MEMST);\r
- {\r
- int isnull;\r
-\r
- GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
- STACK_NULL_CHECK_MEMST(isnull, mem, s, reg);\r
- if (isnull) {\r
-#ifdef ONIG_DEBUG_MATCH\r
- fprintf(stderr, "NULL_CHECK_END_MEMST: skip id:%d, s:%d\n",\r
- (int )mem, (int )s);\r
-#endif\r
- if (isnull == -1) goto fail;\r
- goto null_check_found;\r
- }\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-#endif\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case OP_NULL_CHECK_END_MEMST_PUSH:\r
- MOP_IN(OP_NULL_CHECK_END_MEMST_PUSH);\r
- {\r
- int isnull;\r
-\r
- GET_MEMNUM_INC(mem, p); /* mem: null check id */\r
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT\r
- STACK_NULL_CHECK_MEMST_REC(isnull, mem, s, reg);\r
-#else\r
- STACK_NULL_CHECK_REC(isnull, mem, s);\r
-#endif\r
- if (isnull) {\r
-#ifdef ONIG_DEBUG_MATCH\r
- fprintf(stderr, "NULL_CHECK_END_MEMST_PUSH: skip id:%d, s:%d\n",\r
- (int )mem, (int )s);\r
-#endif\r
- if (isnull == -1) goto fail;\r
- goto null_check_found;\r
- }\r
- else {\r
- STACK_PUSH_NULL_CHECK_END(mem);\r
- }\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-#endif\r
-\r
- case OP_JUMP: MOP_IN(OP_JUMP);\r
- GET_RELADDR_INC(addr, p);\r
- p += addr;\r
- MOP_OUT;\r
- CHECK_INTERRUPT_IN_MATCH_AT;\r
- continue;\r
- break;\r
-\r
- case OP_PUSH: MOP_IN(OP_PUSH);\r
- GET_RELADDR_INC(addr, p);\r
- STACK_PUSH_ALT(p + addr, s, sprev);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- case OP_STATE_CHECK_PUSH: MOP_IN(OP_STATE_CHECK_PUSH);\r
- GET_STATE_CHECK_NUM_INC(mem, p);\r
- STATE_CHECK_VAL(scv, mem);\r
- if (scv) goto fail;\r
-\r
- GET_RELADDR_INC(addr, p);\r
- STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_STATE_CHECK_PUSH_OR_JUMP: MOP_IN(OP_STATE_CHECK_PUSH_OR_JUMP);\r
- GET_STATE_CHECK_NUM_INC(mem, p);\r
- GET_RELADDR_INC(addr, p);\r
- STATE_CHECK_VAL(scv, mem);\r
- if (scv) {\r
- p += addr;\r
- }\r
- else {\r
- STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem);\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_STATE_CHECK: MOP_IN(OP_STATE_CHECK);\r
- GET_STATE_CHECK_NUM_INC(mem, p);\r
- STATE_CHECK_VAL(scv, mem);\r
- if (scv) goto fail;\r
-\r
- STACK_PUSH_STATE_CHECK(s, mem);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-#endif /* USE_COMBINATION_EXPLOSION_CHECK */\r
-\r
- case OP_POP: MOP_IN(OP_POP);\r
- STACK_POP_ONE;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_PUSH_OR_JUMP_EXACT1: MOP_IN(OP_PUSH_OR_JUMP_EXACT1);\r
- GET_RELADDR_INC(addr, p);\r
- if (*p == *s && DATA_ENSURE_CHECK1) {\r
- p++;\r
- STACK_PUSH_ALT(p + addr, s, sprev);\r
- MOP_OUT;\r
- continue;\r
- }\r
- p += (addr + 1);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_PUSH_IF_PEEK_NEXT: MOP_IN(OP_PUSH_IF_PEEK_NEXT);\r
- GET_RELADDR_INC(addr, p);\r
- if (*p == *s) {\r
- p++;\r
- STACK_PUSH_ALT(p + addr, s, sprev);\r
- MOP_OUT;\r
- continue;\r
- }\r
- p++;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_REPEAT: MOP_IN(OP_REPEAT);\r
- {\r
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
- GET_RELADDR_INC(addr, p);\r
-\r
- STACK_ENSURE(1);\r
- repeat_stk[mem] = GET_STACK_INDEX(stk);\r
- STACK_PUSH_REPEAT(mem, p);\r
-\r
- if (reg->repeat_range[mem].lower == 0) {\r
- STACK_PUSH_ALT(p + addr, s, sprev);\r
- }\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_REPEAT_NG: MOP_IN(OP_REPEAT_NG);\r
- {\r
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
- GET_RELADDR_INC(addr, p);\r
-\r
- STACK_ENSURE(1);\r
- repeat_stk[mem] = GET_STACK_INDEX(stk);\r
- STACK_PUSH_REPEAT(mem, p);\r
-\r
- if (reg->repeat_range[mem].lower == 0) {\r
- STACK_PUSH_ALT(p, s, sprev);\r
- p += addr;\r
- }\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_REPEAT_INC: MOP_IN(OP_REPEAT_INC);\r
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
- si = repeat_stk[mem];\r
- stkp = STACK_AT(si);\r
-\r
- repeat_inc:\r
- stkp->u.repeat.count++;\r
- if (stkp->u.repeat.count >= reg->repeat_range[mem].upper) {\r
- /* end of repeat. Nothing to do. */\r
- }\r
- else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {\r
- STACK_PUSH_ALT(p, s, sprev);\r
- p = STACK_AT(si)->u.repeat.pcode; /* Don't use stkp after PUSH. */\r
- }\r
- else {\r
- p = stkp->u.repeat.pcode;\r
- }\r
- STACK_PUSH_REPEAT_INC(si);\r
- MOP_OUT;\r
- CHECK_INTERRUPT_IN_MATCH_AT;\r
- continue;\r
- break;\r
-\r
- case OP_REPEAT_INC_SG: MOP_IN(OP_REPEAT_INC_SG);\r
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
- STACK_GET_REPEAT(mem, stkp);\r
- si = GET_STACK_INDEX(stkp);\r
- goto repeat_inc;\r
- break;\r
-\r
- case OP_REPEAT_INC_NG: MOP_IN(OP_REPEAT_INC_NG);\r
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
- si = repeat_stk[mem];\r
- stkp = STACK_AT(si);\r
-\r
- repeat_inc_ng:\r
- stkp->u.repeat.count++;\r
- if (stkp->u.repeat.count < reg->repeat_range[mem].upper) {\r
- if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {\r
- UChar* pcode = stkp->u.repeat.pcode;\r
-\r
- STACK_PUSH_REPEAT_INC(si);\r
- STACK_PUSH_ALT(pcode, s, sprev);\r
- }\r
- else {\r
- p = stkp->u.repeat.pcode;\r
- STACK_PUSH_REPEAT_INC(si);\r
- }\r
- }\r
- else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {\r
- STACK_PUSH_REPEAT_INC(si);\r
- }\r
- MOP_OUT;\r
- CHECK_INTERRUPT_IN_MATCH_AT;\r
- continue;\r
- break;\r
-\r
- case OP_REPEAT_INC_NG_SG: MOP_IN(OP_REPEAT_INC_NG_SG);\r
- GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */\r
- STACK_GET_REPEAT(mem, stkp);\r
- si = GET_STACK_INDEX(stkp);\r
- goto repeat_inc_ng;\r
- break;\r
-\r
- case OP_PUSH_POS: MOP_IN(OP_PUSH_POS);\r
- STACK_PUSH_POS(s, sprev);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_POP_POS: MOP_IN(OP_POP_POS);\r
- {\r
- STACK_POS_END(stkp);\r
- s = stkp->u.state.pstr;\r
- sprev = stkp->u.state.pstr_prev;\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_PUSH_POS_NOT: MOP_IN(OP_PUSH_POS_NOT);\r
- GET_RELADDR_INC(addr, p);\r
- STACK_PUSH_POS_NOT(p + addr, s, sprev);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_FAIL_POS: MOP_IN(OP_FAIL_POS);\r
- STACK_POP_TIL_POS_NOT;\r
- goto fail;\r
- break;\r
-\r
- case OP_PUSH_STOP_BT: MOP_IN(OP_PUSH_STOP_BT);\r
- STACK_PUSH_STOP_BT;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_POP_STOP_BT: MOP_IN(OP_POP_STOP_BT);\r
- STACK_STOP_BT_END;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_LOOK_BEHIND: MOP_IN(OP_LOOK_BEHIND);\r
- GET_LENGTH_INC(tlen, p);\r
- s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);\r
- if (IS_NULL(s)) goto fail;\r
- sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_PUSH_LOOK_BEHIND_NOT: MOP_IN(OP_PUSH_LOOK_BEHIND_NOT);\r
- GET_RELADDR_INC(addr, p);\r
- GET_LENGTH_INC(tlen, p);\r
- q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);\r
- if (IS_NULL(q)) {\r
- /* too short case -> success. ex. /(?<!XXX)a/.match("a")\r
- If you want to change to fail, replace following line. */\r
- p += addr;\r
- /* goto fail; */\r
- }\r
- else {\r
- STACK_PUSH_LOOK_BEHIND_NOT(p + addr, s, sprev);\r
- s = q;\r
- sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);\r
- }\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_FAIL_LOOK_BEHIND_NOT: MOP_IN(OP_FAIL_LOOK_BEHIND_NOT);\r
- STACK_POP_TIL_LOOK_BEHIND_NOT;\r
- goto fail;\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case OP_CALL: MOP_IN(OP_CALL);\r
- GET_ABSADDR_INC(addr, p);\r
- STACK_PUSH_CALL_FRAME(p);\r
- p = reg->p + addr;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- case OP_RETURN: MOP_IN(OP_RETURN);\r
- STACK_RETURN(p);\r
- STACK_PUSH_RETURN;\r
- MOP_OUT;\r
- continue;\r
- break;\r
-#endif\r
-\r
- case OP_FINISH:\r
- goto finish;\r
- break;\r
-\r
- fail:\r
- MOP_OUT;\r
- /* fall */\r
- case OP_FAIL: MOP_IN(OP_FAIL);\r
- STACK_POP;\r
- p = stk->u.state.pcode;\r
- s = stk->u.state.pstr;\r
- sprev = stk->u.state.pstr_prev;\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- if (stk->u.state.state_check != 0) {\r
- stk->type = STK_STATE_CHECK_MARK;\r
- stk++;\r
- }\r
-#endif\r
-\r
- MOP_OUT;\r
- continue;\r
- break;\r
-\r
- default:\r
- goto bytecode_error;\r
-\r
- } /* end of switch */\r
- sprev = sbegin;\r
- } /* end of while(1) */\r
-\r
- finish:\r
- STACK_SAVE;\r
- xfree(alloca_base);\r
- return best_len;\r
-\r
-#ifdef ONIG_DEBUG\r
- stack_error:\r
- STACK_SAVE;\r
- xfree(alloca_base);\r
- return ONIGERR_STACK_BUG;\r
-#endif\r
-\r
- bytecode_error:\r
- STACK_SAVE;\r
- xfree(alloca_base);\r
- return ONIGERR_UNDEFINED_BYTECODE;\r
-\r
- unexpected_bytecode_error:\r
- STACK_SAVE;\r
- xfree(alloca_base);\r
- return ONIGERR_UNEXPECTED_BYTECODE;\r
-}\r
-\r
-\r
-static UChar*\r
-slow_search(OnigEncoding enc, UChar* target, UChar* target_end,\r
- const UChar* text, const UChar* text_end, UChar* text_range)\r
-{\r
- UChar *t, *p, *s, *end;\r
-\r
- end = (UChar* )text_end;\r
- end -= target_end - target - 1;\r
- if (end > text_range)\r
- end = text_range;\r
-\r
- s = (UChar* )text;\r
-\r
- while (s < end) {\r
- if (*s == *target) {\r
- p = s + 1;\r
- t = target + 1;\r
- while (t < target_end) {\r
- if (*t != *p++)\r
- break;\r
- t++;\r
- }\r
- if (t == target_end)\r
- return s;\r
- }\r
- s += enclen(enc, s);\r
- }\r
-\r
- return (UChar* )NULL;\r
-}\r
-\r
-static int\r
-str_lower_case_match(OnigEncoding enc, int case_fold_flag,\r
- const UChar* t, const UChar* tend,\r
- const UChar* p, const UChar* end)\r
-{\r
- int lowlen;\r
- UChar *q, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];\r
-\r
- while (t < tend) {\r
- lowlen = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &p, end, lowbuf);\r
- q = lowbuf;\r
- while (lowlen > 0) {\r
- if (*t++ != *q++) return 0;\r
- lowlen--;\r
- }\r
- }\r
-\r
- return 1;\r
-}\r
-\r
-static UChar*\r
-slow_search_ic(OnigEncoding enc, int case_fold_flag,\r
- UChar* target, UChar* target_end,\r
- const UChar* text, const UChar* text_end, UChar* text_range)\r
-{\r
- UChar *s, *end;\r
-\r
- end = (UChar* )text_end;\r
- end -= target_end - target - 1;\r
- if (end > text_range)\r
- end = text_range;\r
-\r
- s = (UChar* )text;\r
-\r
- while (s < end) {\r
- if (str_lower_case_match(enc, case_fold_flag, target, target_end,\r
- s, text_end))\r
- return s;\r
-\r
- s += enclen(enc, s);\r
- }\r
-\r
- return (UChar* )NULL;\r
-}\r
-\r
-static UChar*\r
-slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end,\r
- const UChar* text, const UChar* adjust_text,\r
- const UChar* text_end, const UChar* text_start)\r
-{\r
- UChar *t, *p, *s;\r
-\r
- s = (UChar* )text_end;\r
- s -= (target_end - target);\r
- if (s > text_start)\r
- s = (UChar* )text_start;\r
- else\r
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);\r
-\r
- while (s >= text) {\r
- if (*s == *target) {\r
- p = s + 1;\r
- t = target + 1;\r
- while (t < target_end) {\r
- if (*t != *p++)\r
- break;\r
- t++;\r
- }\r
- if (t == target_end)\r
- return s;\r
- }\r
- s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s);\r
- }\r
-\r
- return (UChar* )NULL;\r
-}\r
-\r
-static UChar*\r
-slow_search_backward_ic(OnigEncoding enc, int case_fold_flag,\r
- UChar* target, UChar* target_end,\r
- const UChar* text, const UChar* adjust_text,\r
- const UChar* text_end, const UChar* text_start)\r
-{\r
- UChar *s;\r
-\r
- s = (UChar* )text_end;\r
- s -= (target_end - target);\r
- if (s > text_start)\r
- s = (UChar* )text_start;\r
- else\r
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);\r
-\r
- while (s >= text) {\r
- if (str_lower_case_match(enc, case_fold_flag,\r
- target, target_end, s, text_end))\r
- return s;\r
-\r
- s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s);\r
- }\r
-\r
- return (UChar* )NULL;\r
-}\r
-\r
-static UChar*\r
-bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end,\r
- const UChar* text, const UChar* text_end,\r
- const UChar* text_range)\r
-{\r
- const UChar *s, *se, *t, *p, *end;\r
- const UChar *tail;\r
- int skip, tlen1;\r
-\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr, "bm_search_notrev: text: %d, text_end: %d, text_range: %d\n",\r
- (int )text, (int )text_end, (int )text_range);\r
-#endif\r
-\r
- tail = target_end - 1;\r
- tlen1 = (int)(tail - target);\r
- end = text_range;\r
- if (end + tlen1 > text_end)\r
- end = text_end - tlen1;\r
-\r
- s = text;\r
-\r
- if (IS_NULL(reg->int_map)) {\r
- while (s < end) {\r
- p = se = s + tlen1;\r
- t = tail;\r
- while (*p == *t) {\r
- if (t == target) return (UChar* )s;\r
- p--; t--;\r
- }\r
- skip = reg->map[*se];\r
- t = s;\r
- do {\r
- s += enclen(reg->enc, s);\r
- } while ((s - t) < skip && s < end);\r
- }\r
- }\r
- else {\r
- while (s < end) {\r
- p = se = s + tlen1;\r
- t = tail;\r
- while (*p == *t) {\r
- if (t == target) return (UChar* )s;\r
- p--; t--;\r
- }\r
- skip = reg->int_map[*se];\r
- t = s;\r
- do {\r
- s += enclen(reg->enc, s);\r
- } while ((s - t) < skip && s < end);\r
- }\r
- }\r
-\r
- return (UChar* )NULL;\r
-}\r
-\r
-static UChar*\r
-bm_search(regex_t* reg, const UChar* target, const UChar* target_end,\r
- const UChar* text, const UChar* text_end, const UChar* text_range)\r
-{\r
- const UChar *s, *t, *p, *end;\r
- const UChar *tail;\r
-\r
- end = text_range + (target_end - target) - 1;\r
- if (end > text_end)\r
- end = text_end;\r
-\r
- tail = target_end - 1;\r
- s = text + (target_end - target) - 1;\r
- if (IS_NULL(reg->int_map)) {\r
- while (s < end) {\r
- p = s;\r
- t = tail;\r
- while (*p == *t) {\r
- if (t == target) return (UChar* )p;\r
- p--; t--;\r
- }\r
- s += reg->map[*s];\r
- }\r
- }\r
- else { /* see int_map[] */\r
- while (s < end) {\r
- p = s;\r
- t = tail;\r
- while (*p == *t) {\r
- if (t == target) return (UChar* )p;\r
- p--; t--;\r
- }\r
- s += reg->int_map[*s];\r
- }\r
- }\r
- return (UChar* )NULL;\r
-}\r
-\r
-static int\r
-set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,\r
- int** skip)\r
- \r
-{\r
- int i, len;\r
-\r
- if (IS_NULL(*skip)) {\r
- *skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);\r
- if (IS_NULL(*skip)) return ONIGERR_MEMORY;\r
- }\r
-\r
- len = (int)(end - s);\r
- for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++)\r
- (*skip)[i] = len;\r
-\r
- for (i = len - 1; i > 0; i--)\r
- (*skip)[s[i]] = i;\r
-\r
- return 0;\r
-}\r
-\r
-static UChar*\r
-bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end,\r
- const UChar* text, const UChar* adjust_text,\r
- const UChar* text_end, const UChar* text_start)\r
-{\r
- const UChar *s, *t, *p;\r
-\r
- s = text_end - (target_end - target);\r
- if (text_start < s)\r
- s = text_start;\r
- else\r
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);\r
-\r
- while (s >= text) {\r
- p = s;\r
- t = target;\r
- while (t < target_end && *p == *t) {\r
- p++; t++;\r
- }\r
- if (t == target_end)\r
- return (UChar* )s;\r
-\r
- s -= reg->int_map_backward[*s];\r
- s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);\r
- }\r
-\r
- return (UChar* )NULL;\r
-}\r
-\r
-static UChar*\r
-map_search(OnigEncoding enc, UChar map[],\r
- const UChar* text, const UChar* text_range)\r
-{\r
- const UChar *s = text;\r
-\r
- while (s < text_range) {\r
- if (map[*s]) return (UChar* )s;\r
-\r
- s += enclen(enc, s);\r
- }\r
- return (UChar* )NULL;\r
-}\r
-\r
-static UChar*\r
-map_search_backward(OnigEncoding enc, UChar map[],\r
- const UChar* text, const UChar* adjust_text,\r
- const UChar* text_start)\r
-{\r
- const UChar *s = text_start;\r
-\r
- while (s >= text) {\r
- if (map[*s]) return (UChar* )s;\r
-\r
- s = onigenc_get_prev_char_head(enc, adjust_text, s);\r
- }\r
- return (UChar* )NULL;\r
-}\r
-\r
-extern int\r
-onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, OnigRegion* region,\r
- OnigOptionType option)\r
-{\r
- int r;\r
- UChar *prev;\r
- OnigMatchArg msa;\r
-\r
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)\r
- start:\r
- THREAD_ATOMIC_START;\r
- if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) {\r
- ONIG_STATE_INC(reg);\r
- if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) {\r
- onig_chain_reduce(reg);\r
- ONIG_STATE_INC(reg);\r
- }\r
- }\r
- else {\r
- int n;\r
-\r
- THREAD_ATOMIC_END;\r
- n = 0;\r
- while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) {\r
- if (++n > THREAD_PASS_LIMIT_COUNT)\r
- return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;\r
- THREAD_PASS;\r
- }\r
- goto start;\r
- }\r
- THREAD_ATOMIC_END;\r
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */\r
-\r
- MATCH_ARG_INIT(msa, option, region, at);\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- {\r
- int offset = at - str;\r
- STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check);\r
- }\r
-#endif\r
-\r
- if (region\r
-#ifdef USE_POSIX_API_REGION_OPTION\r
- && !IS_POSIX_REGION(option)\r
-#endif\r
- ) {\r
- r = onig_region_resize_clear(region, reg->num_mem + 1);\r
- }\r
- else\r
- r = 0;\r
-\r
- if (r == 0) {\r
- prev = (UChar* )onigenc_get_prev_char_head(reg->enc, str, at);\r
- r = match_at(reg, str, end,\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
- end,\r
-#endif\r
- at, prev, &msa);\r
- }\r
-\r
- MATCH_ARG_FREE(msa);\r
- ONIG_STATE_DEC_THREAD(reg);\r
- return r;\r
-}\r
-\r
-static int\r
-forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s,\r
- UChar* range, UChar** low, UChar** high, UChar** low_prev)\r
-{\r
- UChar *p, *pprev = (UChar* )NULL;\r
-\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr, "forward_search_range: str: %d, end: %d, s: %d, range: %d\n",\r
- (int )str, (int )end, (int )s, (int )range);\r
-#endif\r
-\r
- p = s;\r
- if (reg->dmin > 0) {\r
- if (ONIGENC_IS_SINGLEBYTE(reg->enc)) {\r
- p += reg->dmin;\r
- }\r
- else {\r
- UChar *q = p + reg->dmin;\r
- while (p < q) p += enclen(reg->enc, p);\r
- }\r
- }\r
-\r
- retry:\r
- switch (reg->optimize) {\r
- case ONIG_OPTIMIZE_EXACT:\r
- p = slow_search(reg->enc, reg->exact, reg->exact_end, p, end, range);\r
- break;\r
- case ONIG_OPTIMIZE_EXACT_IC:\r
- p = slow_search_ic(reg->enc, reg->case_fold_flag,\r
- reg->exact, reg->exact_end, p, end, range);\r
- break;\r
-\r
- case ONIG_OPTIMIZE_EXACT_BM:\r
- p = bm_search(reg, reg->exact, reg->exact_end, p, end, range);\r
- break;\r
-\r
- case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:\r
- p = bm_search_notrev(reg, reg->exact, reg->exact_end, p, end, range);\r
- break;\r
-\r
- case ONIG_OPTIMIZE_MAP:\r
- p = map_search(reg->enc, reg->map, p, range);\r
- break;\r
- }\r
-\r
- if (p && p < range) {\r
- if (p - reg->dmin < s) {\r
- retry_gate:\r
- pprev = p;\r
- p += enclen(reg->enc, p);\r
- goto retry;\r
- }\r
-\r
- if (reg->sub_anchor) {\r
- UChar* prev;\r
-\r
- switch (reg->sub_anchor) {\r
- case ANCHOR_BEGIN_LINE:\r
- if (!ON_STR_BEGIN(p)) {\r
- prev = onigenc_get_prev_char_head(reg->enc,\r
- (pprev ? pprev : str), p);\r
- if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end))\r
- goto retry_gate;\r
- }\r
- break;\r
-\r
- case ANCHOR_END_LINE:\r
- if (ON_STR_END(p)) {\r
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
- prev = (UChar* )onigenc_get_prev_char_head(reg->enc,\r
- (pprev ? pprev : str), p);\r
- if (prev && ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end))\r
- goto retry_gate;\r
-#endif\r
- }\r
- else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end)\r
-#ifdef USE_CRNL_AS_LINE_TERMINATOR\r
- && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end)\r
-#endif\r
- )\r
- goto retry_gate;\r
- break;\r
- }\r
- }\r
-\r
- if (reg->dmax == 0) {\r
- *low = p;\r
- if (low_prev) {\r
- if (*low > s)\r
- *low_prev = onigenc_get_prev_char_head(reg->enc, s, p);\r
- else\r
- *low_prev = onigenc_get_prev_char_head(reg->enc,\r
- (pprev ? pprev : str), p);\r
- }\r
- }\r
- else {\r
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {\r
- *low = p - reg->dmax;\r
- if (*low > s) {\r
- *low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s,\r
- *low, (const UChar** )low_prev);\r
- if (low_prev && IS_NULL(*low_prev))\r
- *low_prev = onigenc_get_prev_char_head(reg->enc,\r
- (pprev ? pprev : s), *low);\r
- }\r
- else {\r
- if (low_prev)\r
- *low_prev = onigenc_get_prev_char_head(reg->enc,\r
- (pprev ? pprev : str), *low);\r
- }\r
- }\r
- }\r
- /* no needs to adjust *high, *high is used as range check only */\r
- *high = p - reg->dmin;\r
-\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr,\r
- "forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n",\r
- (int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax);\r
-#endif\r
- return 1; /* success */\r
- }\r
-\r
- return 0; /* fail */\r
-}\r
-\r
-static int set_bm_backward_skip P_((UChar* s, UChar* end, OnigEncoding enc,\r
- int** skip));\r
-\r
-#define BM_BACKWARD_SEARCH_LENGTH_THRESHOLD 100\r
-\r
-static int\r
-backward_search_range(regex_t* reg, const UChar* str, const UChar* end,\r
- UChar* s, const UChar* range, UChar* adjrange,\r
- UChar** low, UChar** high)\r
-{\r
- int r;\r
- UChar *p;\r
-\r
- range += reg->dmin;\r
- p = s;\r
-\r
- retry:\r
- switch (reg->optimize) {\r
- case ONIG_OPTIMIZE_EXACT:\r
- exact_method:\r
- p = slow_search_backward(reg->enc, reg->exact, reg->exact_end,\r
- range, adjrange, end, p);\r
- break;\r
-\r
- case ONIG_OPTIMIZE_EXACT_IC:\r
- p = slow_search_backward_ic(reg->enc, reg->case_fold_flag,\r
- reg->exact, reg->exact_end,\r
- range, adjrange, end, p);\r
- break;\r
-\r
- case ONIG_OPTIMIZE_EXACT_BM:\r
- case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:\r
- if (IS_NULL(reg->int_map_backward)) {\r
- if (s - range < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD)\r
- goto exact_method;\r
-\r
- r = set_bm_backward_skip(reg->exact, reg->exact_end, reg->enc,\r
- &(reg->int_map_backward));\r
- if (r) return r;\r
- }\r
- p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange,\r
- end, p);\r
- break;\r
-\r
- case ONIG_OPTIMIZE_MAP:\r
- p = map_search_backward(reg->enc, reg->map, range, adjrange, p);\r
- break;\r
- }\r
-\r
- if (p) {\r
- if (reg->sub_anchor) {\r
- UChar* prev;\r
-\r
- switch (reg->sub_anchor) {\r
- case ANCHOR_BEGIN_LINE:\r
- if (!ON_STR_BEGIN(p)) {\r
- prev = onigenc_get_prev_char_head(reg->enc, str, p);\r
- if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {\r
- p = prev;\r
- goto retry;\r
- }\r
- }\r
- break;\r
-\r
- case ANCHOR_END_LINE:\r
- if (ON_STR_END(p)) {\r
-#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE\r
- prev = onigenc_get_prev_char_head(reg->enc, adjrange, p);\r
- if (IS_NULL(prev)) goto fail;\r
- if (ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) {\r
- p = prev;\r
- goto retry;\r
- }\r
-#endif\r
- }\r
- else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end)\r
-#ifdef USE_CRNL_AS_LINE_TERMINATOR\r
- && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end)\r
-#endif\r
- ) {\r
- p = onigenc_get_prev_char_head(reg->enc, adjrange, p);\r
- if (IS_NULL(p)) goto fail;\r
- goto retry;\r
- }\r
- break;\r
- }\r
- }\r
-\r
- /* no needs to adjust *high, *high is used as range check only */\r
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {\r
- *low = p - reg->dmax;\r
- *high = p - reg->dmin;\r
- *high = onigenc_get_right_adjust_char_head(reg->enc, adjrange, *high);\r
- }\r
-\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr, "backward_search_range: low: %d, high: %d\n",\r
- (int )(*low - str), (int )(*high - str));\r
-#endif\r
- return 1; /* success */\r
- }\r
-\r
- fail:\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr, "backward_search_range: fail.\n");\r
-#endif\r
- return 0; /* fail */\r
-}\r
-\r
-\r
-extern int\r
-onig_search(regex_t* reg, const UChar* str, const UChar* end,\r
- const UChar* start, const UChar* range, OnigRegion* region, OnigOptionType option)\r
-{\r
- int r;\r
- UChar *s, *prev;\r
- OnigMatchArg msa;\r
- const UChar *orig_start = start;\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
- const UChar *orig_range = range;\r
-#endif\r
-\r
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)\r
- start:\r
- THREAD_ATOMIC_START;\r
- if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) {\r
- ONIG_STATE_INC(reg);\r
- if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) {\r
- onig_chain_reduce(reg);\r
- ONIG_STATE_INC(reg);\r
- }\r
- }\r
- else {\r
- int n;\r
-\r
- THREAD_ATOMIC_END;\r
- n = 0;\r
- while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) {\r
- if (++n > THREAD_PASS_LIMIT_COUNT)\r
- return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;\r
- THREAD_PASS;\r
- }\r
- goto start;\r
- }\r
- THREAD_ATOMIC_END;\r
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */\r
-\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr,\r
- "onig_search (entry point): str: %d, end: %d, start: %d, range: %d\n",\r
- (int )str, (int )(end - str), (int )(start - str), (int )(range - str));\r
-#endif\r
-\r
- if (region\r
-#ifdef USE_POSIX_API_REGION_OPTION\r
- && !IS_POSIX_REGION(option)\r
-#endif\r
- ) {\r
- r = onig_region_resize_clear(region, reg->num_mem + 1);\r
- if (r) goto finish_no_msa;\r
- }\r
-\r
- if (start > end || start < str) goto mismatch_no_msa;\r
-\r
-\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-#define MATCH_AND_RETURN_CHECK(upper_range) \\r
- r = match_at(reg, str, end, (upper_range), s, prev, &msa); \\r
- if (r != ONIG_MISMATCH) {\\r
- if (r >= 0) {\\r
- if (! IS_FIND_LONGEST(reg->options)) {\\r
- goto match;\\r
- }\\r
- }\\r
- else goto finish; /* error */ \\r
- }\r
-#else\r
-#define MATCH_AND_RETURN_CHECK(upper_range) \\r
- r = match_at(reg, str, end, (upper_range), s, prev, &msa); \\r
- if (r != ONIG_MISMATCH) {\\r
- if (r >= 0) {\\r
- goto match;\\r
- }\\r
- else goto finish; /* error */ \\r
- }\r
-#endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */\r
-#else\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-#define MATCH_AND_RETURN_CHECK(none) \\r
- r = match_at(reg, str, end, s, prev, &msa);\\r
- if (r != ONIG_MISMATCH) {\\r
- if (r >= 0) {\\r
- if (! IS_FIND_LONGEST(reg->options)) {\\r
- goto match;\\r
- }\\r
- }\\r
- else goto finish; /* error */ \\r
- }\r
-#else\r
-#define MATCH_AND_RETURN_CHECK(none) \\r
- r = match_at(reg, str, end, s, prev, &msa);\\r
- if (r != ONIG_MISMATCH) {\\r
- if (r >= 0) {\\r
- goto match;\\r
- }\\r
- else goto finish; /* error */ \\r
- }\r
-#endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */\r
-#endif /* USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE */\r
-\r
-\r
- /* anchor optimize: resume search range */\r
- if (reg->anchor != 0 && str < end) {\r
- UChar *min_semi_end, *max_semi_end;\r
-\r
- if (reg->anchor & ANCHOR_BEGIN_POSITION) {\r
- /* search start-position only */\r
- begin_position:\r
- if (range > start)\r
- range = start + 1;\r
- else\r
- range = start;\r
- }\r
- else if (reg->anchor & ANCHOR_BEGIN_BUF) {\r
- /* search str-position only */\r
- if (range > start) {\r
- if (start != str) goto mismatch_no_msa;\r
- range = str + 1;\r
- }\r
- else {\r
- if (range <= str) {\r
- start = str;\r
- range = str;\r
- }\r
- else\r
- goto mismatch_no_msa;\r
- }\r
- }\r
- else if (reg->anchor & ANCHOR_END_BUF) {\r
- min_semi_end = max_semi_end = (UChar* )end;\r
-\r
- end_buf:\r
- if ((OnigDistance )(max_semi_end - str) < reg->anchor_dmin)\r
- goto mismatch_no_msa;\r
-\r
- if (range > start) {\r
- if ((OnigDistance )(min_semi_end - start) > reg->anchor_dmax) {\r
- start = min_semi_end - reg->anchor_dmax;\r
- if (start < end)\r
- start = onigenc_get_right_adjust_char_head(reg->enc, str, start);\r
- else { /* match with empty at end */\r
- start = onigenc_get_prev_char_head(reg->enc, str, end);\r
- }\r
- }\r
- if ((OnigDistance )(max_semi_end - (range - 1)) < reg->anchor_dmin) {\r
- range = max_semi_end - reg->anchor_dmin + 1;\r
- }\r
-\r
- if (start >= range) goto mismatch_no_msa;\r
- }\r
- else {\r
- if ((OnigDistance )(min_semi_end - range) > reg->anchor_dmax) {\r
- range = min_semi_end - reg->anchor_dmax;\r
- }\r
- if ((OnigDistance )(max_semi_end - start) < reg->anchor_dmin) {\r
- start = max_semi_end - reg->anchor_dmin;\r
- start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start);\r
- }\r
- if (range > start) goto mismatch_no_msa;\r
- }\r
- }\r
- else if (reg->anchor & ANCHOR_SEMI_END_BUF) {\r
- UChar* pre_end = ONIGENC_STEP_BACK(reg->enc, str, end, 1);\r
-\r
- max_semi_end = (UChar* )end;\r
- if (ONIGENC_IS_MBC_NEWLINE(reg->enc, pre_end, end)) {\r
- min_semi_end = pre_end;\r
-\r
-#ifdef USE_CRNL_AS_LINE_TERMINATOR\r
- pre_end = ONIGENC_STEP_BACK(reg->enc, str, pre_end, 1);\r
- if (IS_NOT_NULL(pre_end) &&\r
- ONIGENC_IS_MBC_CRNL(reg->enc, pre_end, end)) {\r
- min_semi_end = pre_end;\r
- }\r
-#endif\r
- if (min_semi_end > str && start <= min_semi_end) {\r
- goto end_buf;\r
- }\r
- }\r
- else {\r
- min_semi_end = (UChar* )end;\r
- goto end_buf;\r
- }\r
- }\r
- else if ((reg->anchor & ANCHOR_ANYCHAR_STAR_ML)) {\r
- goto begin_position;\r
- }\r
- }\r
- else if (str == end) { /* empty string */\r
- static const UChar* address_for_empty_string = (UChar* )"";\r
-\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr, "onig_search: empty string.\n");\r
-#endif\r
-\r
- if (reg->threshold_len == 0) {\r
- start = end = str = address_for_empty_string;\r
- s = (UChar* )start;\r
- prev = (UChar* )NULL;\r
-\r
- MATCH_ARG_INIT(msa, option, region, start);\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- msa.state_check_buff = (void* )0;\r
- msa.state_check_buff_size = 0; /* NO NEED, for valgrind */\r
-#endif\r
- MATCH_AND_RETURN_CHECK(end);\r
- goto mismatch;\r
- }\r
- goto mismatch_no_msa;\r
- }\r
-\r
-#ifdef ONIG_DEBUG_SEARCH\r
- fprintf(stderr, "onig_search(apply anchor): end: %d, start: %d, range: %d\n",\r
- (int )(end - str), (int )(start - str), (int )(range - str));\r
-#endif\r
-\r
- MATCH_ARG_INIT(msa, option, region, orig_start);\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- {\r
- int offset = (MIN(start, range) - str);\r
- STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check);\r
- }\r
-#endif\r
-\r
- s = (UChar* )start;\r
- if (range > start) { /* forward search */\r
- if (s > str)\r
- prev = onigenc_get_prev_char_head(reg->enc, str, s);\r
- else\r
- prev = (UChar* )NULL;\r
-\r
- if (reg->optimize != ONIG_OPTIMIZE_NONE) {\r
- UChar *sch_range, *low, *high, *low_prev;\r
-\r
- sch_range = (UChar* )range;\r
- if (reg->dmax != 0) {\r
- if (reg->dmax == ONIG_INFINITE_DISTANCE)\r
- sch_range = (UChar* )end;\r
- else {\r
- sch_range += reg->dmax;\r
- if (sch_range > end) sch_range = (UChar* )end;\r
- }\r
- }\r
-\r
- if ((end - start) < reg->threshold_len)\r
- goto mismatch;\r
-\r
- if (reg->dmax != ONIG_INFINITE_DISTANCE) {\r
- do {\r
- if (! forward_search_range(reg, str, end, s, sch_range,\r
- &low, &high, &low_prev)) goto mismatch;\r
- if (s < low) {\r
- s = low;\r
- prev = low_prev;\r
- }\r
- while (s <= high) {\r
- MATCH_AND_RETURN_CHECK(orig_range);\r
- prev = s;\r
- s += enclen(reg->enc, s);\r
- }\r
- } while (s < range);\r
- goto mismatch;\r
- }\r
- else { /* check only. */\r
- if (! forward_search_range(reg, str, end, s, sch_range,\r
- &low, &high, (UChar** )NULL)) goto mismatch;\r
-\r
- if ((reg->anchor & ANCHOR_ANYCHAR_STAR) != 0) {\r
- do {\r
- MATCH_AND_RETURN_CHECK(orig_range);\r
- prev = s;\r
- s += enclen(reg->enc, s);\r
-\r
- while (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end) && s < range) {\r
- prev = s;\r
- s += enclen(reg->enc, s);\r
- }\r
- } while (s < range);\r
- goto mismatch;\r
- }\r
- }\r
- }\r
-\r
- do {\r
- MATCH_AND_RETURN_CHECK(orig_range);\r
- prev = s;\r
- s += enclen(reg->enc, s);\r
- } while (s < range);\r
-\r
- if (s == range) { /* because empty match with /$/. */\r
- MATCH_AND_RETURN_CHECK(orig_range);\r
- }\r
- }\r
- else { /* backward search */\r
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE\r
- if (orig_start < end)\r
- orig_start += enclen(reg->enc, orig_start); /* is upper range */\r
-#endif\r
-\r
- if (reg->optimize != ONIG_OPTIMIZE_NONE) {\r
- UChar *low, *high, *adjrange, *sch_start;\r
-\r
- if (range < end)\r
- adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range);\r
- else\r
- adjrange = (UChar* )end;\r
-\r
- if (reg->dmax != ONIG_INFINITE_DISTANCE &&\r
- (end - range) >= reg->threshold_len) {\r
- do {\r
- sch_start = s + reg->dmax;\r
- if (sch_start > end) sch_start = (UChar* )end;\r
- if (backward_search_range(reg, str, end, sch_start, range, adjrange,\r
- &low, &high) <= 0)\r
- goto mismatch;\r
-\r
- if (s > high)\r
- s = high;\r
-\r
- while (s >= low) {\r
- prev = onigenc_get_prev_char_head(reg->enc, str, s);\r
- MATCH_AND_RETURN_CHECK(orig_start);\r
- s = prev;\r
- }\r
- } while (s >= range);\r
- goto mismatch;\r
- }\r
- else { /* check only. */\r
- if ((end - range) < reg->threshold_len) goto mismatch;\r
-\r
- sch_start = s;\r
- if (reg->dmax != 0) {\r
- if (reg->dmax == ONIG_INFINITE_DISTANCE)\r
- sch_start = (UChar* )end;\r
- else {\r
- sch_start += reg->dmax;\r
- if (sch_start > end) sch_start = (UChar* )end;\r
- else\r
- sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc,\r
- start, sch_start);\r
- }\r
- }\r
- if (backward_search_range(reg, str, end, sch_start, range, adjrange,\r
- &low, &high) <= 0) goto mismatch;\r
- }\r
- }\r
-\r
- do {\r
- prev = onigenc_get_prev_char_head(reg->enc, str, s);\r
- MATCH_AND_RETURN_CHECK(orig_start);\r
- s = prev;\r
- } while (s >= range);\r
- }\r
-\r
- mismatch:\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
- if (IS_FIND_LONGEST(reg->options)) {\r
- if (msa.best_len >= 0) {\r
- s = msa.best_s;\r
- goto match;\r
- }\r
- }\r
-#endif\r
- r = ONIG_MISMATCH;\r
-\r
- finish:\r
- MATCH_ARG_FREE(msa);\r
- ONIG_STATE_DEC_THREAD(reg);\r
-\r
- /* If result is mismatch and no FIND_NOT_EMPTY option,\r
- then the region is not setted in match_at(). */\r
- if (IS_FIND_NOT_EMPTY(reg->options) && region\r
-#ifdef USE_POSIX_API_REGION_OPTION\r
- && !IS_POSIX_REGION(option)\r
-#endif\r
- ) {\r
- onig_region_clear(region);\r
- }\r
-\r
-#ifdef ONIG_DEBUG\r
- if (r != ONIG_MISMATCH)\r
- fprintf(stderr, "onig_search: error %d\n", r);\r
-#endif\r
- return r;\r
-\r
- mismatch_no_msa:\r
- r = ONIG_MISMATCH;\r
- finish_no_msa:\r
- ONIG_STATE_DEC_THREAD(reg);\r
-#ifdef ONIG_DEBUG\r
- if (r != ONIG_MISMATCH)\r
- fprintf(stderr, "onig_search: error %d\n", r);\r
-#endif\r
- return r;\r
-\r
- match:\r
- ONIG_STATE_DEC_THREAD(reg);\r
- MATCH_ARG_FREE(msa);\r
- return (int)(s - str);\r
-}\r
-\r
-extern OnigEncoding\r
-onig_get_encoding(regex_t* reg)\r
-{\r
- return reg->enc;\r
-}\r
-\r
-extern OnigOptionType\r
-onig_get_options(regex_t* reg)\r
-{\r
- return reg->options;\r
-}\r
-\r
-extern OnigCaseFoldType\r
-onig_get_case_fold_flag(regex_t* reg)\r
-{\r
- return reg->case_fold_flag;\r
-}\r
-\r
-extern OnigSyntaxType*\r
-onig_get_syntax(regex_t* reg)\r
-{\r
- return reg->syntax;\r
-}\r
-\r
-extern int\r
-onig_number_of_captures(regex_t* reg)\r
-{\r
- return reg->num_mem;\r
-}\r
-\r
-extern int\r
-onig_number_of_capture_histories(regex_t* reg)\r
-{\r
-#ifdef USE_CAPTURE_HISTORY\r
- int i, n;\r
-\r
- n = 0;\r
- for (i = 0; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) {\r
- if (BIT_STATUS_AT(reg->capture_history, i) != 0)\r
- n++;\r
- }\r
- return n;\r
-#else\r
- return 0;\r
-#endif\r
-}\r
-\r
-extern void\r
-onig_copy_encoding(OnigEncoding to, OnigEncoding from)\r
-{\r
- *to = *from;\r
-}\r
-\r
+++ /dev/null
-/**********************************************************************\r
- reggnu.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-#ifndef ONIGGNU_H\r
-#include "oniggnu.h"\r
-#endif\r
-\r
-extern void\r
-re_free_registers(OnigRegion* r)\r
-{\r
- /* 0: don't free self */\r
- onig_region_free(r, 0);\r
-}\r
-\r
-extern int\r
-re_adjust_startpos(regex_t* reg, const char* string, int size,\r
- int startpos, int range)\r
-{\r
- if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) {\r
- UChar *p;\r
- UChar *s = (UChar* )string + startpos;\r
-\r
- if (range > 0) {\r
- p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s);\r
- }\r
- else {\r
- p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s);\r
- }\r
- return (int)(p - (UChar* )string);\r
- }\r
-\r
- return startpos;\r
-}\r
-\r
-extern int\r
-re_match(regex_t* reg, const char* str, int size, int pos,\r
- struct re_registers* regs)\r
-{\r
- return onig_match(reg, (UChar* )str, (UChar* )(str + size),\r
- (UChar* )(str + pos), regs, ONIG_OPTION_NONE);\r
-}\r
-\r
-extern int\r
-re_search(regex_t* bufp, const char* string, int size, int startpos, int range,\r
- struct re_registers* regs)\r
-{\r
- return onig_search(bufp, (UChar* )string, (UChar* )(string + size),\r
- (UChar* )(string + startpos),\r
- (UChar* )(string + startpos + range),\r
- regs, ONIG_OPTION_NONE);\r
-}\r
-\r
-extern int\r
-re_compile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)\r
-{\r
- int r;\r
- OnigErrorInfo einfo;\r
-\r
- r = onig_compile(reg, (UChar* )pattern, (UChar* )(pattern + size), &einfo);\r
- if (r != ONIG_NORMAL) {\r
- if (IS_NOT_NULL(ebuf))\r
- (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);\r
- }\r
-\r
- return r;\r
-}\r
-\r
-#ifdef USE_RECOMPILE_API\r
-extern int\r
-re_recompile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)\r
-{\r
- int r;\r
- OnigErrorInfo einfo;\r
- OnigEncoding enc;\r
-\r
- /* I think encoding and options should be arguments of this function.\r
- But this is adapted to present re.c. (2002/11/29)\r
- */\r
- enc = OnigEncDefaultCharEncoding;\r
-\r
- r = onig_recompile(reg, (UChar* )pattern, (UChar* )(pattern + size),\r
- reg->options, enc, OnigDefaultSyntax, &einfo);\r
- if (r != ONIG_NORMAL) {\r
- if (IS_NOT_NULL(ebuf))\r
- (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);\r
- }\r
- return r;\r
-}\r
-#endif\r
-\r
-extern void\r
-re_free_pattern(regex_t* reg)\r
-{\r
- onig_free(reg);\r
-}\r
-\r
-extern int\r
-re_alloc_pattern(regex_t** reg)\r
-{\r
- *reg = (regex_t* )xmalloc(sizeof(regex_t));\r
- if (IS_NULL(*reg)) return ONIGERR_MEMORY;\r
-\r
- return onig_reg_init(*reg, ONIG_OPTION_DEFAULT,\r
- ONIGENC_CASE_FOLD_DEFAULT,\r
- OnigEncDefaultCharEncoding,\r
- OnigDefaultSyntax);\r
-}\r
-\r
-extern void\r
-re_set_casetable(const char* table)\r
-{\r
- onigenc_set_default_caseconv_table((UChar* )table);\r
-}\r
-\r
-extern void\r
-re_mbcinit(int mb_code)\r
-{\r
- OnigEncoding enc;\r
-\r
- switch (mb_code) {\r
- case RE_MBCTYPE_ASCII:\r
- enc = ONIG_ENCODING_ASCII;\r
- break;\r
- case RE_MBCTYPE_EUC:\r
- enc = ONIG_ENCODING_EUC_JP;\r
- break;\r
- case RE_MBCTYPE_SJIS:\r
- enc = ONIG_ENCODING_SJIS;\r
- break;\r
- case RE_MBCTYPE_UTF8:\r
- enc = ONIG_ENCODING_UTF8;\r
- break;\r
- default:\r
- return ;\r
- break;\r
- }\r
-\r
- onigenc_set_default_encoding(enc);\r
-}\r
+++ /dev/null
-#ifndef REGINT_H\r
-#define REGINT_H\r
-/**********************************************************************\r
- regint.h - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2013 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-/* for debug */\r
-/* #define ONIG_DEBUG_PARSE_TREE */\r
-/* #define ONIG_DEBUG_COMPILE */\r
-/* #define ONIG_DEBUG_SEARCH */\r
-/* #define ONIG_DEBUG_MATCH */\r
-/* #define ONIG_DONT_OPTIMIZE */\r
-\r
-/* for byte-code statistical data. */\r
-/* #define ONIG_DEBUG_STATISTICS */\r
-\r
-#if defined(ONIG_DEBUG_PARSE_TREE) || defined(ONIG_DEBUG_MATCH) || \\r
- defined(ONIG_DEBUG_SEARCH) || defined(ONIG_DEBUG_COMPILE) || \\r
- defined(ONIG_DEBUG_STATISTICS)\r
-#ifndef ONIG_DEBUG\r
-#define ONIG_DEBUG\r
-#endif\r
-#endif\r
-\r
-#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \\r
- (defined(__ppc__) && defined(__APPLE__)) || \\r
- defined(__x86_64) || defined(__x86_64__) || \\r
- defined(__mc68020__)\r
-#define PLATFORM_UNALIGNED_WORD_ACCESS\r
-#endif\r
-\r
-/* config */\r
-/* spec. config */\r
-#define USE_NAMED_GROUP\r
-#define USE_SUBEXP_CALL\r
-#define USE_BACKREF_WITH_LEVEL /* \k<name+n>, \k<name-n> */\r
-#define USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT /* /(?:()|())*\2/ */\r
-#define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE /* /\n$/ =~ "\n" */\r
-#define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR\r
-/* #define USE_RECOMPILE_API */\r
-/* !!! moved to regenc.h. */ /* #define USE_CRNL_AS_LINE_TERMINATOR */\r
-\r
-/* internal config */\r
-#define USE_PARSE_TREE_NODE_RECYCLE\r
-#define USE_OP_PUSH_OR_JUMP_EXACT\r
-#define USE_QTFR_PEEK_NEXT\r
-#define USE_ST_LIBRARY\r
-#define USE_SHARED_CCLASS_TABLE\r
-\r
-#define INIT_MATCH_STACK_SIZE 160\r
-#define DEFAULT_MATCH_STACK_LIMIT_SIZE 0 /* unlimited */\r
-\r
-#if defined(__GNUC__)\r
-# define ARG_UNUSED __attribute__ ((unused))\r
-#else\r
-# define ARG_UNUSED\r
-#endif\r
-\r
-/* */\r
-/* escape other system UChar definition */\r
-//#include "config.h"\r
-#ifdef ONIG_ESCAPE_UCHAR_COLLISION\r
-#undef ONIG_ESCAPE_UCHAR_COLLISION\r
-#endif\r
-\r
-#define USE_WORD_BEGIN_END /* "\<", "\>" */\r
-#define USE_CAPTURE_HISTORY\r
-#define USE_VARIABLE_META_CHARS\r
-#define USE_POSIX_API_REGION_OPTION\r
-#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
-/* #define USE_COMBINATION_EXPLOSION_CHECK */ /* (X*)* */\r
-\r
-/* #define USE_MULTI_THREAD_SYSTEM */\r
-#define THREAD_SYSTEM_INIT /* depend on thread system */\r
-#define THREAD_SYSTEM_END /* depend on thread system */\r
-#define THREAD_ATOMIC_START /* depend on thread system */\r
-#define THREAD_ATOMIC_END /* depend on thread system */\r
-#define THREAD_PASS /* depend on thread system */\r
-#define xmalloc malloc\r
-#define xrealloc realloc\r
-#define xcalloc calloc\r
-#define xfree free\r
-\r
-#define CHECK_INTERRUPT_IN_MATCH_AT\r
-\r
-#define st_init_table onig_st_init_table\r
-#define st_init_table_with_size onig_st_init_table_with_size\r
-#define st_init_numtable onig_st_init_numtable\r
-#define st_init_numtable_with_size onig_st_init_numtable_with_size\r
-#define st_init_strtable onig_st_init_strtable\r
-#define st_init_strtable_with_size onig_st_init_strtable_with_size\r
-#define st_delete onig_st_delete\r
-#define st_delete_safe onig_st_delete_safe\r
-#define st_insert onig_st_insert\r
-#define st_lookup onig_st_lookup\r
-#define st_foreach onig_st_foreach\r
-#define st_add_direct onig_st_add_direct\r
-#define st_free_table onig_st_free_table\r
-#define st_cleanup_safe onig_st_cleanup_safe\r
-#define st_copy onig_st_copy\r
-#define st_nothing_key_clone onig_st_nothing_key_clone\r
-#define st_nothing_key_free onig_st_nothing_key_free\r
-/* */\r
-#define onig_st_is_member st_is_member\r
-\r
-#define STATE_CHECK_STRING_THRESHOLD_LEN 7\r
-#define STATE_CHECK_BUFF_MAX_SIZE 0x4000\r
-\r
-#define THREAD_PASS_LIMIT_COUNT 8\r
-//#define xmemset memset\r
-//#define xmemcpy memcpy\r
-//#define xmemmove memmove\r
-\r
-#if defined(_WIN32) && !defined(__GNUC__)\r
-#define xalloca _alloca\r
-#define xvsnprintf _vsnprintf\r
-#else\r
-#define xalloca alloca\r
-#define xvsnprintf vsnprintf\r
-#endif\r
-\r
-\r
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)\r
-#define ONIG_STATE_INC(reg) (reg)->state++\r
-#define ONIG_STATE_DEC(reg) (reg)->state--\r
-\r
-#define ONIG_STATE_INC_THREAD(reg) do {\\r
- THREAD_ATOMIC_START;\\r
- (reg)->state++;\\r
- THREAD_ATOMIC_END;\\r
-} while(0)\r
-#define ONIG_STATE_DEC_THREAD(reg) do {\\r
- THREAD_ATOMIC_START;\\r
- (reg)->state--;\\r
- THREAD_ATOMIC_END;\\r
-} while(0)\r
-#else\r
-#define ONIG_STATE_INC(reg) /* Nothing */\r
-#define ONIG_STATE_DEC(reg) /* Nothing */\r
-#define ONIG_STATE_INC_THREAD(reg) /* Nothing */\r
-#define ONIG_STATE_DEC_THREAD(reg) /* Nothing */\r
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */\r
-\r
-#if 0\r
-#ifdef HAVE_STDLIB_H\r
-#include <stdlib.h>\r
-#endif\r
-\r
-#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__)\r
-#include <alloca.h>\r
-#endif\r
-\r
-#ifdef HAVE_STRING_H\r
-# include <string.h>\r
-#else\r
-# include <strings.h>\r
-#endif\r
-\r
-#include <ctype.h>\r
-#ifdef HAVE_SYS_TYPES_H\r
-#ifndef __BORLANDC__\r
-#include <sys/types.h>\r
-#endif\r
-#endif\r
-\r
-#ifdef __BORLANDC__\r
-#include <malloc.h>\r
-#endif\r
-\r
-#ifdef ONIG_DEBUG\r
-# include <stdio.h>\r
-#endif\r
-#endif\r
-\r
-#include "regenc.h"\r
-\r
-#ifdef MIN\r
-#undef MIN\r
-#endif\r
-#ifdef MAX\r
-#undef MAX\r
-#endif\r
-#define MIN(a,b) (((a)>(b))?(b):(a))\r
-#define MAX(a,b) (((a)<(b))?(b):(a))\r
-\r
-#define IS_NULL(p) (((void*)(p)) == (void*)0)\r
-#define IS_NOT_NULL(p) (((void*)(p)) != (void*)0)\r
-#define CHECK_NULL_RETURN(p) if (IS_NULL(p)) return NULL\r
-#define CHECK_NULL_RETURN_MEMERR(p) if (IS_NULL(p)) return ONIGERR_MEMORY\r
-#define NULL_UCHARP ((UChar* )0)\r
-\r
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
-\r
-#define PLATFORM_GET_INC(val,p,type) do{\\r
- val = *(type* )p;\\r
- (p) += sizeof(type);\\r
-} while(0)\r
-\r
-#else\r
-\r
-#define PLATFORM_GET_INC(val,p,type) do{\\r
- xmemcpy(&val, (p), sizeof(type));\\r
- (p) += sizeof(type);\\r
-} while(0)\r
-\r
-/* sizeof(OnigCodePoint) */\r
-#define WORD_ALIGNMENT_SIZE SIZEOF_LONG\r
-\r
-#define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\\r
- (pad_size) = WORD_ALIGNMENT_SIZE \\r
- - ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\\r
- if ((pad_size) == WORD_ALIGNMENT_SIZE) (pad_size) = 0;\\r
-} while (0)\r
-\r
-#define ALIGNMENT_RIGHT(addr) do {\\r
- (addr) += (WORD_ALIGNMENT_SIZE - 1);\\r
- (addr) -= ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\\r
-} while (0)\r
-\r
-#endif /* PLATFORM_UNALIGNED_WORD_ACCESS */\r
-\r
-/* stack pop level */\r
-#define STACK_POP_LEVEL_FREE 0\r
-#define STACK_POP_LEVEL_MEM_START 1\r
-#define STACK_POP_LEVEL_ALL 2\r
-\r
-/* optimize flags */\r
-#define ONIG_OPTIMIZE_NONE 0\r
-#define ONIG_OPTIMIZE_EXACT 1 /* Slow Search */\r
-#define ONIG_OPTIMIZE_EXACT_BM 2 /* Boyer Moore Search */\r
-#define ONIG_OPTIMIZE_EXACT_BM_NOT_REV 3 /* BM (but not simple match) */\r
-#define ONIG_OPTIMIZE_EXACT_IC 4 /* Slow Search (ignore case) */\r
-#define ONIG_OPTIMIZE_MAP 5 /* char map */\r
-\r
-/* bit status */\r
-typedef unsigned int BitStatusType;\r
-\r
-#define BIT_STATUS_BITS_NUM (sizeof(BitStatusType) * 8)\r
-#define BIT_STATUS_CLEAR(stats) (stats) = 0\r
-#define BIT_STATUS_ON_ALL(stats) (stats) = ~((BitStatusType )0)\r
-#define BIT_STATUS_AT(stats,n) \\r
- ((n) < (int )BIT_STATUS_BITS_NUM ? ((stats) & (1 << n)) : ((stats) & 1))\r
-\r
-#define BIT_STATUS_ON_AT(stats,n) do {\\r
- if ((n) < (int )BIT_STATUS_BITS_NUM) \\r
- (stats) |= (1 << (n));\\r
- else\\r
- (stats) |= 1;\\r
-} while (0)\r
-\r
-#define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\\r
- if ((n) < (int )BIT_STATUS_BITS_NUM)\\r
- (stats) |= (1 << (n));\\r
-} while (0)\r
-\r
-\r
-#define INT_MAX_LIMIT ((1UL << (SIZEOF_INT * 8 - 1)) - 1)\r
-\r
-#define DIGITVAL(code) ((code) - '0')\r
-#define ODIGITVAL(code) DIGITVAL(code)\r
-#define XDIGITVAL(enc,code) \\r
- (ONIGENC_IS_CODE_DIGIT(enc,code) ? DIGITVAL(code) \\r
- : (ONIGENC_IS_CODE_UPPER(enc,code) ? (code) - 'A' + 10 : (code) - 'a' + 10))\r
-\r
-#define IS_SINGLELINE(option) ((option) & ONIG_OPTION_SINGLELINE)\r
-#define IS_MULTILINE(option) ((option) & ONIG_OPTION_MULTILINE)\r
-#define IS_IGNORECASE(option) ((option) & ONIG_OPTION_IGNORECASE)\r
-#define IS_EXTEND(option) ((option) & ONIG_OPTION_EXTEND)\r
-#define IS_FIND_LONGEST(option) ((option) & ONIG_OPTION_FIND_LONGEST)\r
-#define IS_FIND_NOT_EMPTY(option) ((option) & ONIG_OPTION_FIND_NOT_EMPTY)\r
-#define IS_FIND_CONDITION(option) ((option) & \\r
- (ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))\r
-#define IS_NOTBOL(option) ((option) & ONIG_OPTION_NOTBOL)\r
-#define IS_NOTEOL(option) ((option) & ONIG_OPTION_NOTEOL)\r
-#define IS_POSIX_REGION(option) ((option) & ONIG_OPTION_POSIX_REGION)\r
-\r
-/* OP_SET_OPTION is required for these options.\r
-#define IS_DYNAMIC_OPTION(option) \\r
- (((option) & (ONIG_OPTION_MULTILINE | ONIG_OPTION_IGNORECASE)) != 0)\r
-*/\r
-/* ignore-case and multibyte status are included in compiled code. */\r
-#define IS_DYNAMIC_OPTION(option) 0\r
-\r
-#define DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag) \\r
- ((case_fold_flag) & ~INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR)\r
-\r
-#define REPEAT_INFINITE -1\r
-#define IS_REPEAT_INFINITE(n) ((n) == REPEAT_INFINITE)\r
-\r
-/* bitset */\r
-#define BITS_PER_BYTE 8\r
-#define SINGLE_BYTE_SIZE (1 << BITS_PER_BYTE)\r
-#define BITS_IN_ROOM (sizeof(Bits) * BITS_PER_BYTE)\r
-#define BITSET_SIZE (SINGLE_BYTE_SIZE / BITS_IN_ROOM)\r
-\r
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS\r
-typedef unsigned int Bits;\r
-#else\r
-typedef unsigned char Bits;\r
-#endif\r
-typedef Bits BitSet[BITSET_SIZE];\r
-typedef Bits* BitSetRef;\r
-\r
-#define SIZE_BITSET sizeof(BitSet)\r
-\r
-#define BITSET_CLEAR(bs) do {\\r
- int i;\\r
- for (i = 0; i < (int )BITSET_SIZE; i++) { (bs)[i] = 0; } \\r
-} while (0)\r
-\r
-#define BS_ROOM(bs,pos) (bs)[pos / BITS_IN_ROOM]\r
-#define BS_BIT(pos) (1 << (pos % BITS_IN_ROOM))\r
-\r
-#define BITSET_AT(bs, pos) (BS_ROOM(bs,pos) & BS_BIT(pos))\r
-#define BITSET_SET_BIT(bs, pos) BS_ROOM(bs,pos) |= BS_BIT(pos)\r
-#define BITSET_CLEAR_BIT(bs, pos) BS_ROOM(bs,pos) &= ~(BS_BIT(pos))\r
-#define BITSET_INVERT_BIT(bs, pos) BS_ROOM(bs,pos) ^= BS_BIT(pos)\r
-\r
-/* bytes buffer */\r
-typedef struct _BBuf {\r
- UChar* p;\r
- unsigned int used;\r
- unsigned int alloc;\r
-} BBuf;\r
-\r
-#define BBUF_INIT(buf,size) onig_bbuf_init((BBuf* )(buf), (size))\r
-\r
-#define BBUF_SIZE_INC(buf,inc) do{\\r
- (buf)->alloc += (inc);\\r
- (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\\r
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\\r
-} while (0)\r
-\r
-#define BBUF_EXPAND(buf,low) do{\\r
- unsigned int OldSize_ = (buf)->alloc * sizeof((buf)->p[0]);\\r
- do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\\r
- (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc, OldSize_);\\r
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\\r
-} while (0)\r
-\r
-#define BBUF_ENSURE_SIZE(buf,size) do{\\r
- unsigned int new_alloc = (buf)->alloc;\\r
- while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\\r
- if ((buf)->alloc != new_alloc) {\\r
- (buf)->p = (UChar* )xrealloc((buf)->p, new_alloc, (buf)->alloc);\\r
- if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\\r
- (buf)->alloc = new_alloc;\\r
- }\\r
-} while (0)\r
-\r
-#define BBUF_WRITE(buf,pos,bytes,n) do{\\r
- int used = (pos) + (n);\\r
- if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\\r
- xmemcpy((buf)->p + (pos), (bytes), (n));\\r
- if ((buf)->used < (unsigned int )used) (buf)->used = used;\\r
-} while (0)\r
-\r
-#define BBUF_WRITE1(buf,pos,byte) do{\\r
- int used = (pos) + 1;\\r
- if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\\r
- (buf)->p[(pos)] = (byte);\\r
- if ((buf)->used < (unsigned int )used) (buf)->used = used;\\r
-} while (0)\r
-\r
-#define BBUF_ADD(buf,bytes,n) BBUF_WRITE((buf),(buf)->used,(bytes),(n))\r
-#define BBUF_ADD1(buf,byte) BBUF_WRITE1((buf),(buf)->used,(byte))\r
-#define BBUF_GET_ADD_ADDRESS(buf) ((buf)->p + (buf)->used)\r
-#define BBUF_GET_OFFSET_POS(buf) ((buf)->used)\r
-\r
-/* from < to */\r
-#define BBUF_MOVE_RIGHT(buf,from,to,n) do {\\r
- if ((unsigned int )((to)+(n)) > (buf)->alloc) BBUF_EXPAND((buf),(to) + (n));\\r
- xmemmove((buf)->p + (to), (buf)->p + (from), (n));\\r
- if ((unsigned int )((to)+(n)) > (buf)->used) (buf)->used = (to) + (n);\\r
-} while (0)\r
-\r
-/* from > to */\r
-#define BBUF_MOVE_LEFT(buf,from,to,n) do {\\r
- xmemmove((buf)->p + (to), (buf)->p + (from), (n));\\r
-} while (0)\r
-\r
-/* from > to */\r
-#define BBUF_MOVE_LEFT_REDUCE(buf,from,to) do {\\r
- xmemmove((buf)->p + (to), (buf)->p + (from), (buf)->used - (from));\\r
- (buf)->used -= (from - to);\\r
-} while (0)\r
-\r
-#define BBUF_INSERT(buf,pos,bytes,n) do {\\r
- if (pos >= (buf)->used) {\\r
- BBUF_WRITE(buf,pos,bytes,n);\\r
- }\\r
- else {\\r
- BBUF_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\\r
- xmemcpy((buf)->p + (pos), (bytes), (n));\\r
- }\\r
-} while (0)\r
-\r
-#define BBUF_GET_BYTE(buf, pos) (buf)->p[(pos)]\r
-\r
-\r
-#define ANCHOR_BEGIN_BUF (1<<0)\r
-#define ANCHOR_BEGIN_LINE (1<<1)\r
-#define ANCHOR_BEGIN_POSITION (1<<2)\r
-#define ANCHOR_END_BUF (1<<3)\r
-#define ANCHOR_SEMI_END_BUF (1<<4)\r
-#define ANCHOR_END_LINE (1<<5)\r
-\r
-#define ANCHOR_WORD_BOUND (1<<6)\r
-#define ANCHOR_NOT_WORD_BOUND (1<<7)\r
-#define ANCHOR_WORD_BEGIN (1<<8)\r
-#define ANCHOR_WORD_END (1<<9)\r
-#define ANCHOR_PREC_READ (1<<10)\r
-#define ANCHOR_PREC_READ_NOT (1<<11)\r
-#define ANCHOR_LOOK_BEHIND (1<<12)\r
-#define ANCHOR_LOOK_BEHIND_NOT (1<<13)\r
-\r
-#define ANCHOR_ANYCHAR_STAR (1<<14) /* ".*" optimize info */\r
-#define ANCHOR_ANYCHAR_STAR_ML (1<<15) /* ".*" optimize info (multi-line) */\r
-\r
-/* operation code */\r
-enum OpCode {\r
- OP_FINISH = 0, /* matching process terminator (no more alternative) */\r
- OP_END = 1, /* pattern code terminator (success end) */\r
-\r
- OP_EXACT1 = 2, /* single byte, N = 1 */\r
- OP_EXACT2, /* single byte, N = 2 */\r
- OP_EXACT3, /* single byte, N = 3 */\r
- OP_EXACT4, /* single byte, N = 4 */\r
- OP_EXACT5, /* single byte, N = 5 */\r
- OP_EXACTN, /* single byte */\r
- OP_EXACTMB2N1, /* mb-length = 2 N = 1 */\r
- OP_EXACTMB2N2, /* mb-length = 2 N = 2 */\r
- OP_EXACTMB2N3, /* mb-length = 2 N = 3 */\r
- OP_EXACTMB2N, /* mb-length = 2 */\r
- OP_EXACTMB3N, /* mb-length = 3 */\r
- OP_EXACTMBN, /* other length */\r
-\r
- OP_EXACT1_IC, /* single byte, N = 1, ignore case */\r
- OP_EXACTN_IC, /* single byte, ignore case */\r
-\r
- OP_CCLASS,\r
- OP_CCLASS_MB,\r
- OP_CCLASS_MIX,\r
- OP_CCLASS_NOT,\r
- OP_CCLASS_MB_NOT,\r
- OP_CCLASS_MIX_NOT,\r
- OP_CCLASS_NODE, /* pointer to CClassNode node */\r
-\r
- OP_ANYCHAR, /* "." */\r
- OP_ANYCHAR_ML, /* "." multi-line */\r
- OP_ANYCHAR_STAR, /* ".*" */\r
- OP_ANYCHAR_ML_STAR, /* ".*" multi-line */\r
- OP_ANYCHAR_STAR_PEEK_NEXT,\r
- OP_ANYCHAR_ML_STAR_PEEK_NEXT,\r
-\r
- OP_WORD,\r
- OP_NOT_WORD,\r
- OP_WORD_BOUND,\r
- OP_NOT_WORD_BOUND,\r
- OP_WORD_BEGIN,\r
- OP_WORD_END,\r
-\r
- OP_BEGIN_BUF,\r
- OP_END_BUF,\r
- OP_BEGIN_LINE,\r
- OP_END_LINE,\r
- OP_SEMI_END_BUF,\r
- OP_BEGIN_POSITION,\r
-\r
- OP_BACKREF1,\r
- OP_BACKREF2,\r
- OP_BACKREFN,\r
- OP_BACKREFN_IC,\r
- OP_BACKREF_MULTI,\r
- OP_BACKREF_MULTI_IC,\r
- OP_BACKREF_WITH_LEVEL, /* \k<xxx+n>, \k<xxx-n> */\r
-\r
- OP_MEMORY_START,\r
- OP_MEMORY_START_PUSH, /* push back-tracker to stack */\r
- OP_MEMORY_END_PUSH, /* push back-tracker to stack */\r
- OP_MEMORY_END_PUSH_REC, /* push back-tracker to stack */\r
- OP_MEMORY_END,\r
- OP_MEMORY_END_REC, /* push marker to stack */\r
-\r
- OP_FAIL, /* pop stack and move */\r
- OP_JUMP,\r
- OP_PUSH,\r
- OP_POP,\r
- OP_PUSH_OR_JUMP_EXACT1, /* if match exact then push, else jump. */\r
- OP_PUSH_IF_PEEK_NEXT, /* if match exact then push, else none. */\r
- OP_REPEAT, /* {n,m} */\r
- OP_REPEAT_NG, /* {n,m}? (non greedy) */\r
- OP_REPEAT_INC,\r
- OP_REPEAT_INC_NG, /* non greedy */\r
- OP_REPEAT_INC_SG, /* search and get in stack */\r
- OP_REPEAT_INC_NG_SG, /* search and get in stack (non greedy) */\r
- OP_NULL_CHECK_START, /* null loop checker start */\r
- OP_NULL_CHECK_END, /* null loop checker end */\r
- OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */\r
- OP_NULL_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */\r
-\r
- OP_PUSH_POS, /* (?=...) start */\r
- OP_POP_POS, /* (?=...) end */\r
- OP_PUSH_POS_NOT, /* (?!...) start */\r
- OP_FAIL_POS, /* (?!...) end */\r
- OP_PUSH_STOP_BT, /* (?>...) start */\r
- OP_POP_STOP_BT, /* (?>...) end */\r
- OP_LOOK_BEHIND, /* (?<=...) start (no needs end opcode) */\r
- OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */\r
- OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end */\r
-\r
- OP_CALL, /* \g<name> */\r
- OP_RETURN,\r
-\r
- OP_STATE_CHECK_PUSH, /* combination explosion check and push */\r
- OP_STATE_CHECK_PUSH_OR_JUMP, /* check ok -> push, else jump */\r
- OP_STATE_CHECK, /* check only */\r
- OP_STATE_CHECK_ANYCHAR_STAR,\r
- OP_STATE_CHECK_ANYCHAR_ML_STAR,\r
-\r
- /* no need: IS_DYNAMIC_OPTION() == 0 */\r
- OP_SET_OPTION_PUSH, /* set option and push recover option */\r
- OP_SET_OPTION /* set option */\r
-};\r
-\r
-typedef int RelAddrType;\r
-typedef int AbsAddrType;\r
-typedef int LengthType;\r
-typedef int RepeatNumType;\r
-typedef short int MemNumType;\r
-typedef short int StateCheckNumType;\r
-typedef void* PointerType;\r
-\r
-#define SIZE_OPCODE 1\r
-#define SIZE_RELADDR sizeof(RelAddrType)\r
-#define SIZE_ABSADDR sizeof(AbsAddrType)\r
-#define SIZE_LENGTH sizeof(LengthType)\r
-#define SIZE_MEMNUM sizeof(MemNumType)\r
-#define SIZE_STATE_CHECK_NUM sizeof(StateCheckNumType)\r
-#define SIZE_REPEATNUM sizeof(RepeatNumType)\r
-#define SIZE_OPTION sizeof(OnigOptionType)\r
-#define SIZE_CODE_POINT sizeof(OnigCodePoint)\r
-#define SIZE_POINTER sizeof(PointerType)\r
-\r
-\r
-#define GET_RELADDR_INC(addr,p) PLATFORM_GET_INC(addr, p, RelAddrType)\r
-#define GET_ABSADDR_INC(addr,p) PLATFORM_GET_INC(addr, p, AbsAddrType)\r
-#define GET_LENGTH_INC(len,p) PLATFORM_GET_INC(len, p, LengthType)\r
-#define GET_MEMNUM_INC(num,p) PLATFORM_GET_INC(num, p, MemNumType)\r
-#define GET_REPEATNUM_INC(num,p) PLATFORM_GET_INC(num, p, RepeatNumType)\r
-#define GET_OPTION_INC(option,p) PLATFORM_GET_INC(option, p, OnigOptionType)\r
-#define GET_POINTER_INC(ptr,p) PLATFORM_GET_INC(ptr, p, PointerType)\r
-#define GET_STATE_CHECK_NUM_INC(num,p) PLATFORM_GET_INC(num, p, StateCheckNumType)\r
-\r
-/* code point's address must be aligned address. */\r
-#define GET_CODE_POINT(code,p) code = *((OnigCodePoint* )(p))\r
-#define GET_BYTE_INC(byte,p) do{\\r
- byte = *(p);\\r
- (p)++;\\r
-} while(0)\r
-\r
-\r
-/* op-code + arg size */\r
-#define SIZE_OP_ANYCHAR_STAR SIZE_OPCODE\r
-#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)\r
-#define SIZE_OP_JUMP (SIZE_OPCODE + SIZE_RELADDR)\r
-#define SIZE_OP_PUSH (SIZE_OPCODE + SIZE_RELADDR)\r
-#define SIZE_OP_POP SIZE_OPCODE\r
-#define SIZE_OP_PUSH_OR_JUMP_EXACT1 (SIZE_OPCODE + SIZE_RELADDR + 1)\r
-#define SIZE_OP_PUSH_IF_PEEK_NEXT (SIZE_OPCODE + SIZE_RELADDR + 1)\r
-#define SIZE_OP_REPEAT_INC (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_REPEAT_INC_NG (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_PUSH_POS SIZE_OPCODE\r
-#define SIZE_OP_PUSH_POS_NOT (SIZE_OPCODE + SIZE_RELADDR)\r
-#define SIZE_OP_POP_POS SIZE_OPCODE\r
-#define SIZE_OP_FAIL_POS SIZE_OPCODE\r
-#define SIZE_OP_SET_OPTION (SIZE_OPCODE + SIZE_OPTION)\r
-#define SIZE_OP_SET_OPTION_PUSH (SIZE_OPCODE + SIZE_OPTION)\r
-#define SIZE_OP_FAIL SIZE_OPCODE\r
-#define SIZE_OP_MEMORY_START (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_MEMORY_START_PUSH (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_MEMORY_END_PUSH (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_MEMORY_END_PUSH_REC (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_MEMORY_END (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_MEMORY_END_REC (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_PUSH_STOP_BT SIZE_OPCODE\r
-#define SIZE_OP_POP_STOP_BT SIZE_OPCODE\r
-#define SIZE_OP_NULL_CHECK_START (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_NULL_CHECK_END (SIZE_OPCODE + SIZE_MEMNUM)\r
-#define SIZE_OP_LOOK_BEHIND (SIZE_OPCODE + SIZE_LENGTH)\r
-#define SIZE_OP_PUSH_LOOK_BEHIND_NOT (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)\r
-#define SIZE_OP_FAIL_LOOK_BEHIND_NOT SIZE_OPCODE\r
-#define SIZE_OP_CALL (SIZE_OPCODE + SIZE_ABSADDR)\r
-#define SIZE_OP_RETURN SIZE_OPCODE\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
-#define SIZE_OP_STATE_CHECK (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)\r
-#define SIZE_OP_STATE_CHECK_PUSH (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)\r
-#define SIZE_OP_STATE_CHECK_PUSH_OR_JUMP (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)\r
-#define SIZE_OP_STATE_CHECK_ANYCHAR_STAR (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)\r
-#endif\r
-\r
-#define MC_ESC(syn) (syn)->meta_char_table.esc\r
-#define MC_ANYCHAR(syn) (syn)->meta_char_table.anychar\r
-#define MC_ANYTIME(syn) (syn)->meta_char_table.anytime\r
-#define MC_ZERO_OR_ONE_TIME(syn) (syn)->meta_char_table.zero_or_one_time\r
-#define MC_ONE_OR_MORE_TIME(syn) (syn)->meta_char_table.one_or_more_time\r
-#define MC_ANYCHAR_ANYTIME(syn) (syn)->meta_char_table.anychar_anytime\r
-\r
-#define IS_MC_ESC_CODE(code, syn) \\r
- ((code) == MC_ESC(syn) && \\r
- !IS_SYNTAX_OP2((syn), ONIG_SYN_OP2_INEFFECTIVE_ESCAPE))\r
-\r
-\r
-#define SYN_POSIX_COMMON_OP \\r
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_POSIX_BRACKET | \\r
- ONIG_SYN_OP_DECIMAL_BACKREF | \\r
- ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_ASTERISK_ZERO_INF | \\r
- ONIG_SYN_OP_LINE_ANCHOR | \\r
- ONIG_SYN_OP_ESC_CONTROL_CHARS )\r
-\r
-#define SYN_GNU_REGEX_OP \\r
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | \\r
- ONIG_SYN_OP_POSIX_BRACKET | ONIG_SYN_OP_DECIMAL_BACKREF | \\r
- ONIG_SYN_OP_BRACE_INTERVAL | ONIG_SYN_OP_LPAREN_SUBEXP | \\r
- ONIG_SYN_OP_VBAR_ALT | \\r
- ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF | \\r
- ONIG_SYN_OP_QMARK_ZERO_ONE | \\r
- ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR | ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR | \\r
- ONIG_SYN_OP_ESC_W_WORD | \\r
- ONIG_SYN_OP_ESC_B_WORD_BOUND | ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | \\r
- ONIG_SYN_OP_ESC_S_WHITE_SPACE | ONIG_SYN_OP_ESC_D_DIGIT | \\r
- ONIG_SYN_OP_LINE_ANCHOR )\r
-\r
-#define SYN_GNU_REGEX_BV \\r
- ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | \\r
- ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | ONIG_SYN_ALLOW_INVALID_INTERVAL | \\r
- ONIG_SYN_BACKSLASH_ESCAPE_IN_CC | ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )\r
-\r
-\r
-#define NCCLASS_FLAGS(cc) ((cc)->flags)\r
-#define NCCLASS_FLAG_SET(cc,flag) (NCCLASS_FLAGS(cc) |= (flag))\r
-#define NCCLASS_FLAG_CLEAR(cc,flag) (NCCLASS_FLAGS(cc) &= ~(flag))\r
-#define IS_NCCLASS_FLAG_ON(cc,flag) ((NCCLASS_FLAGS(cc) & (flag)) != 0)\r
-\r
-/* cclass node */\r
-#define FLAG_NCCLASS_NOT (1<<0)\r
-#define FLAG_NCCLASS_SHARE (1<<1)\r
-\r
-#define NCCLASS_SET_NOT(nd) NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_NOT)\r
-#define NCCLASS_SET_SHARE(nd) NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_SHARE)\r
-#define NCCLASS_CLEAR_NOT(nd) NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)\r
-#define IS_NCCLASS_NOT(nd) IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)\r
-#define IS_NCCLASS_SHARE(nd) IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_SHARE)\r
-\r
-typedef struct {\r
- int type;\r
- /* struct _Node* next; */\r
- /* unsigned int flags; */\r
-} NodeBase;\r
-\r
-typedef struct {\r
- NodeBase base;\r
- unsigned int flags;\r
- BitSet bs;\r
- BBuf* mbuf; /* multi-byte info or NULL */\r
-} CClassNode;\r
-\r
-typedef long OnigStackIndex;\r
-\r
-typedef struct _OnigStackType {\r
- unsigned int type;\r
- union {\r
- struct {\r
- UChar *pcode; /* byte code position */\r
- UChar *pstr; /* string position */\r
- UChar *pstr_prev; /* previous char position of pstr */\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- unsigned int state_check;\r
-#endif\r
- } state;\r
- struct {\r
- int count; /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */\r
- UChar *pcode; /* byte code position (head of repeated target) */\r
- int num; /* repeat id */\r
- } repeat;\r
- struct {\r
- OnigStackIndex si; /* index of stack */\r
- } repeat_inc;\r
- struct {\r
- int num; /* memory num */\r
- UChar *pstr; /* start/end position */\r
- /* Following information is setted, if this stack type is MEM-START */\r
- OnigStackIndex start; /* prev. info (for backtrack "(...)*" ) */\r
- OnigStackIndex end; /* prev. info (for backtrack "(...)*" ) */\r
- } mem;\r
- struct {\r
- int num; /* null check id */\r
- UChar *pstr; /* start position */\r
- } null_check;\r
-#ifdef USE_SUBEXP_CALL\r
- struct {\r
- UChar *ret_addr; /* byte code position */\r
- int num; /* null check id */\r
- UChar *pstr; /* string position */\r
- } call_frame;\r
-#endif\r
- } u;\r
-} OnigStackType;\r
-\r
-typedef struct {\r
- void* stack_p;\r
- int stack_n;\r
- OnigOptionType options;\r
- OnigRegion* region;\r
- const UChar* start; /* search start position (for \G: BEGIN_POSITION) */\r
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE\r
- int best_len; /* for ONIG_OPTION_FIND_LONGEST */\r
- UChar* best_s;\r
-#endif\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- void* state_check_buff;\r
- int state_check_buff_size;\r
-#endif\r
-} OnigMatchArg;\r
-\r
-\r
-#define IS_CODE_SB_WORD(enc,code) \\r
- (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))\r
-\r
-typedef struct OnigEndCallListItem {\r
- struct OnigEndCallListItem* next;\r
- void (*func)(void);\r
-} OnigEndCallListItemType;\r
-\r
-extern void onig_add_end_call(void (*func)(void));\r
-\r
-\r
-#ifdef ONIG_DEBUG\r
-\r
-typedef struct {\r
- short int opcode;\r
- char* name;\r
- short int arg_type;\r
-} OnigOpInfoType;\r
-\r
-extern OnigOpInfoType OnigOpInfo[];\r
-\r
-\r
-extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar** nextp, OnigEncoding enc));\r
-\r
-#ifdef ONIG_DEBUG_STATISTICS\r
-extern void onig_statistics_init P_((void));\r
-extern void onig_print_statistics P_((FILE* f));\r
-#endif\r
-#endif\r
-\r
-extern UChar* onig_error_code_to_format P_((int code));\r
-extern void onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));\r
-extern int onig_bbuf_init P_((BBuf* buf, int size));\r
-extern int onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));\r
-extern void onig_chain_reduce P_((regex_t* reg));\r
-extern void onig_chain_link_add P_((regex_t* to, regex_t* add));\r
-extern void onig_transfer P_((regex_t* to, regex_t* from));\r
-extern int onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));\r
-extern int onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, CClassNode* cc));\r
-\r
-/* strend hash */\r
-typedef void hash_table_type;\r
-typedef unsigned long hash_data_type;\r
-\r
-extern hash_table_type* onig_st_init_strend_table_with_size P_((int size));\r
-extern int onig_st_lookup_strend P_((hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type *value));\r
-extern int onig_st_insert_strend P_((hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type value));\r
-\r
-/* encoding property management */\r
-#define PROPERTY_LIST_ADD_PROP(Name, CR) \\r
- r = onigenc_property_list_add_property((UChar* )Name, CR,\\r
- &PropertyNameTable, &PropertyList, &PropertyListNum,\\r
- &PropertyListSize);\\r
- if (r != 0) goto end\r
-\r
-#define PROPERTY_LIST_INIT_CHECK \\r
- if (PropertyInited == 0) {\\r
- int r = onigenc_property_list_init(init_property_list);\\r
- if (r != 0) return r;\\r
- }\r
-\r
-extern int onigenc_property_list_add_property P_((UChar* name, const OnigCodePoint* prop, hash_table_type **table, const OnigCodePoint*** plist, int *pnum, int *psize));\r
-\r
-typedef int (*ONIGENC_INIT_PROPERTY_LIST_FUNC_TYPE)(void);\r
-\r
-extern int onigenc_property_list_init P_((ONIGENC_INIT_PROPERTY_LIST_FUNC_TYPE));\r
-\r
-#endif /* REGINT_H */\r
+++ /dev/null
-/**********************************************************************\r
- regparse.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regparse.h"\r
-#include "st.h"\r
-\r
-#define WARN_BUFSIZE 256\r
-\r
-#define CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
-\r
-\r
-OnigSyntaxType OnigSyntaxRuby = {\r
- (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
- ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |\r
- ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
- ONIG_SYN_OP_ESC_C_CONTROL )\r
- & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
- , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |\r
- ONIG_SYN_OP2_OPTION_RUBY |\r
- ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |\r
- ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |\r
- ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |\r
- ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |\r
- ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |\r
- ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL |\r
- ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |\r
- ONIG_SYN_OP2_ESC_H_XDIGIT )\r
- , ( SYN_GNU_REGEX_BV | \r
- ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |\r
- ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND |\r
- ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |\r
- ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |\r
- ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY |\r
- ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |\r
- ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )\r
- , ONIG_OPTION_NONE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType* OnigDefaultSyntax = ONIG_SYNTAX_RUBY;\r
-\r
-extern void onig_null_warn(const char* s ARG_UNUSED) { }\r
-\r
-#ifdef DEFAULT_WARN_FUNCTION\r
-static OnigWarnFunc onig_warn = (OnigWarnFunc )DEFAULT_WARN_FUNCTION;\r
-#else\r
-static OnigWarnFunc onig_warn = onig_null_warn;\r
-#endif\r
-\r
-#ifdef DEFAULT_VERB_WARN_FUNCTION\r
-static OnigWarnFunc onig_verb_warn = (OnigWarnFunc )DEFAULT_VERB_WARN_FUNCTION;\r
-#else\r
-static OnigWarnFunc onig_verb_warn = onig_null_warn;\r
-#endif\r
-\r
-extern void onig_set_warn_func(OnigWarnFunc f)\r
-{\r
- onig_warn = f;\r
-}\r
-\r
-extern void onig_set_verb_warn_func(OnigWarnFunc f)\r
-{\r
- onig_verb_warn = f;\r
-}\r
-\r
-static void\r
-bbuf_free(BBuf* bbuf)\r
-{\r
- if (IS_NOT_NULL(bbuf)) {\r
- if (IS_NOT_NULL(bbuf->p)) xfree(bbuf->p);\r
- xfree(bbuf);\r
- }\r
-}\r
-\r
-static int\r
-bbuf_clone(BBuf** rto, BBuf* from)\r
-{\r
- int r;\r
- BBuf *to;\r
-\r
- *rto = to = (BBuf* )xmalloc(sizeof(BBuf));\r
- CHECK_NULL_RETURN_MEMERR(to);\r
- r = BBUF_INIT(to, from->alloc);\r
- if (r != 0) return r;\r
- to->used = from->used;\r
- xmemcpy(to->p, from->p, from->used);\r
- return 0;\r
-}\r
-\r
-#define BACKREF_REL_TO_ABS(rel_no, env) \\r
- ((env)->num_mem + 1 + (rel_no))\r
-\r
-#define ONOFF(v,f,negative) (negative) ? ((v) &= ~(f)) : ((v) |= (f))\r
-\r
-#define MBCODE_START_POS(enc) \\r
- (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)\r
-\r
-#define SET_ALL_MULTI_BYTE_RANGE(enc, pbuf) \\r
- add_code_range_to_buf(pbuf, MBCODE_START_POS(enc), ~((OnigCodePoint )0))\r
-\r
-#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\\r
- if (! ONIGENC_IS_SINGLEBYTE(enc)) {\\r
- r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\\r
- if (r) return r;\\r
- }\\r
-} while (0)\r
-\r
-\r
-#define BITSET_IS_EMPTY(bs,empty) do {\\r
- int i;\\r
- empty = 1;\\r
- for (i = 0; i < (int )BITSET_SIZE; i++) {\\r
- if ((bs)[i] != 0) {\\r
- empty = 0; break;\\r
- }\\r
- }\\r
-} while (0)\r
-\r
-static void\r
-bitset_set_range(BitSetRef bs, int from, int to)\r
-{\r
- int i;\r
- for (i = from; i <= to && i < SINGLE_BYTE_SIZE; i++) {\r
- BITSET_SET_BIT(bs, i);\r
- }\r
-}\r
-\r
-#if 0\r
-static void\r
-bitset_set_all(BitSetRef bs)\r
-{\r
- int i;\r
- for (i = 0; i < BITSET_SIZE; i++) { bs[i] = ~((Bits )0); }\r
-}\r
-#endif\r
-\r
-static void\r
-bitset_invert(BitSetRef bs)\r
-{\r
- int i;\r
- for (i = 0; i < (int )BITSET_SIZE; i++) { bs[i] = ~(bs[i]); }\r
-}\r
-\r
-static void\r
-bitset_invert_to(BitSetRef from, BitSetRef to)\r
-{\r
- int i;\r
- for (i = 0; i < (int )BITSET_SIZE; i++) { to[i] = ~(from[i]); }\r
-}\r
-\r
-static void\r
-bitset_and(BitSetRef dest, BitSetRef bs)\r
-{\r
- int i;\r
- for (i = 0; i < (int )BITSET_SIZE; i++) { dest[i] &= bs[i]; }\r
-}\r
-\r
-static void\r
-bitset_or(BitSetRef dest, BitSetRef bs)\r
-{\r
- int i;\r
- for (i = 0; i < (int )BITSET_SIZE; i++) { dest[i] |= bs[i]; }\r
-}\r
-\r
-static void\r
-bitset_copy(BitSetRef dest, BitSetRef bs)\r
-{\r
- int i;\r
- for (i = 0; i < (int )BITSET_SIZE; i++) { dest[i] = bs[i]; }\r
-}\r
-\r
-extern int\r
-onig_strncmp(const UChar* s1, const UChar* s2, int n)\r
-{\r
- int x;\r
-\r
- while (n-- > 0) {\r
- x = *s2++ - *s1++;\r
- if (x) return x;\r
- }\r
- return 0;\r
-}\r
-\r
-extern void\r
-onig_strcpy(UChar* dest, const UChar* src, const UChar* end)\r
-{\r
- int len = (int)(end - src);\r
- if (len > 0) {\r
- xmemcpy(dest, src, len);\r
- dest[len] = (UChar )0;\r
- }\r
-}\r
-\r
-#ifdef USE_NAMED_GROUP\r
-static UChar*\r
-strdup_with_null(OnigEncoding enc, UChar* s, UChar* end)\r
-{\r
- int slen, term_len, i;\r
- UChar *r;\r
-\r
- slen = (int)(end - s);\r
- term_len = ONIGENC_MBC_MINLEN(enc);\r
-\r
- r = (UChar* )xmalloc(slen + term_len);\r
- CHECK_NULL_RETURN(r);\r
- xmemcpy(r, s, slen);\r
-\r
- for (i = 0; i < term_len; i++)\r
- r[slen + i] = (UChar )0;\r
-\r
- return r;\r
-}\r
-#endif\r
-\r
-/* scan pattern methods */\r
-#define PEND_VALUE 0\r
-\r
-#define PFETCH_READY UChar* pfetch_prev\r
-#define PEND (p < end ? 0 : 1)\r
-#define PUNFETCH p = pfetch_prev\r
-#define PINC do { \\r
- pfetch_prev = p; \\r
- p += ONIGENC_MBC_ENC_LEN(enc, p); \\r
-} while (0)\r
-#define PFETCH(c) do { \\r
- c = ONIGENC_MBC_TO_CODE(enc, p, end); \\r
- pfetch_prev = p; \\r
- p += ONIGENC_MBC_ENC_LEN(enc, p); \\r
-} while (0)\r
-\r
-#define PINC_S do { \\r
- p += ONIGENC_MBC_ENC_LEN(enc, p); \\r
-} while (0)\r
-#define PFETCH_S(c) do { \\r
- c = ONIGENC_MBC_TO_CODE(enc, p, end); \\r
- p += ONIGENC_MBC_ENC_LEN(enc, p); \\r
-} while (0)\r
-\r
-#define PPEEK (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE)\r
-#define PPEEK_IS(c) (PPEEK == (OnigCodePoint )c)\r
-\r
-static UChar*\r
-strcat_capa(UChar* dest, UChar* dest_end, const UChar* src, const UChar* src_end,\r
- int capa, int oldCapa)\r
-{\r
- UChar* r;\r
-\r
- if (dest)\r
- r = (UChar* )xrealloc(dest, capa + 1, oldCapa);\r
- else\r
- r = (UChar* )xmalloc(capa + 1);\r
-\r
- CHECK_NULL_RETURN(r);\r
- onig_strcpy(r + (dest_end - dest), src, src_end);\r
- return r;\r
-}\r
-\r
-/* dest on static area */\r
-static UChar*\r
-strcat_capa_from_static(UChar* dest, UChar* dest_end,\r
- const UChar* src, const UChar* src_end, int capa)\r
-{\r
- UChar* r;\r
-\r
- r = (UChar* )xmalloc(capa + 1);\r
- CHECK_NULL_RETURN(r);\r
- onig_strcpy(r, dest, dest_end);\r
- onig_strcpy(r + (dest_end - dest), src, src_end);\r
- return r;\r
-}\r
-\r
-\r
-#ifdef USE_ST_LIBRARY\r
-\r
-typedef struct {\r
- UChar* s;\r
- UChar* end;\r
-} st_str_end_key;\r
-\r
-static int\r
-str_end_cmp(st_str_end_key* x, st_str_end_key* y)\r
-{\r
- UChar *p, *q;\r
- int c;\r
-\r
- if ((x->end - x->s) != (y->end - y->s))\r
- return 1;\r
-\r
- p = x->s;\r
- q = y->s;\r
- while (p < x->end) {\r
- c = (int )*p - (int )*q;\r
- if (c != 0) return c;\r
-\r
- p++; q++;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static int\r
-str_end_hash(st_str_end_key* x)\r
-{\r
- UChar *p;\r
- int val = 0;\r
-\r
- p = x->s;\r
- while (p < x->end) {\r
- val = val * 997 + (int )*p++;\r
- }\r
-\r
- return val + (val >> 5);\r
-}\r
-\r
-extern hash_table_type*\r
-onig_st_init_strend_table_with_size(int size)\r
-{\r
- static struct st_hash_type hashType = {\r
- str_end_cmp,\r
- str_end_hash,\r
- };\r
-\r
- return (hash_table_type* )\r
- onig_st_init_table_with_size(&hashType, size);\r
-}\r
-\r
-extern int\r
-onig_st_lookup_strend(hash_table_type* table, const UChar* str_key,\r
- const UChar* end_key, hash_data_type *value)\r
-{\r
- st_str_end_key key;\r
-\r
- key.s = (UChar* )str_key;\r
- key.end = (UChar* )end_key;\r
-\r
- return onig_st_lookup(table, (st_data_t )(&key), value);\r
-}\r
-\r
-extern int\r
-onig_st_insert_strend(hash_table_type* table, const UChar* str_key,\r
- const UChar* end_key, hash_data_type value)\r
-{\r
- st_str_end_key* key;\r
- int result;\r
-\r
- key = (st_str_end_key* )xmalloc(sizeof(st_str_end_key));\r
- key->s = (UChar* )str_key;\r
- key->end = (UChar* )end_key;\r
- result = onig_st_insert(table, (st_data_t )key, value);\r
- if (result) {\r
- xfree(key);\r
- }\r
- return result;\r
-}\r
-\r
-#endif /* USE_ST_LIBRARY */\r
-\r
-\r
-#ifdef USE_NAMED_GROUP\r
-\r
-#define INIT_NAME_BACKREFS_ALLOC_NUM 8\r
-\r
-typedef struct {\r
- UChar* name;\r
- int name_len; /* byte length */\r
- int back_num; /* number of backrefs */\r
- int back_alloc;\r
- int back_ref1;\r
- int* back_refs;\r
-} NameEntry;\r
-\r
-#ifdef USE_ST_LIBRARY\r
-\r
-typedef st_table NameTable;\r
-typedef st_data_t HashDataType; /* 1.6 st.h doesn't define st_data_t type */\r
-\r
-#define NAMEBUF_SIZE 24\r
-#define NAMEBUF_SIZE_1 25\r
-\r
-#ifdef ONIG_DEBUG\r
-static int\r
-i_print_name_entry(UChar* key, NameEntry* e, void* arg)\r
-{\r
- int i;\r
- FILE* fp = (FILE* )arg;\r
-\r
- fprintf(fp, "%s: ", e->name);\r
- if (e->back_num == 0)\r
- fputs("-", fp);\r
- else if (e->back_num == 1)\r
- fprintf(fp, "%d", e->back_ref1);\r
- else {\r
- for (i = 0; i < e->back_num; i++) {\r
- if (i > 0) fprintf(fp, ", ");\r
- fprintf(fp, "%d", e->back_refs[i]);\r
- }\r
- }\r
- fputs("\n", fp);\r
- return ST_CONTINUE;\r
-}\r
-\r
-extern int\r
-onig_print_names(FILE* fp, regex_t* reg)\r
-{\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t)) {\r
- fprintf(fp, "name table\n");\r
- onig_st_foreach(t, i_print_name_entry, (HashDataType )fp);\r
- fputs("\n", fp);\r
- }\r
- return 0;\r
-}\r
-#endif /* ONIG_DEBUG */\r
-\r
-static int\r
-i_free_name_entry(UChar* key, NameEntry* e, void* arg ARG_UNUSED)\r
-{\r
- xfree(e->name);\r
- if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);\r
- xfree(key);\r
- xfree(e);\r
- return ST_DELETE;\r
-}\r
-\r
-static int\r
-names_clear(regex_t* reg)\r
-{\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t)) {\r
- onig_st_foreach(t, i_free_name_entry, 0);\r
- }\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_names_free(regex_t* reg)\r
-{\r
- int r;\r
- NameTable* t;\r
-\r
- r = names_clear(reg);\r
- if (r) return r;\r
-\r
- t = (NameTable* )reg->name_table;\r
- if (IS_NOT_NULL(t)) onig_st_free_table(t);\r
- reg->name_table = (void* )NULL;\r
- return 0;\r
-}\r
-\r
-static NameEntry*\r
-name_find(regex_t* reg, const UChar* name, const UChar* name_end)\r
-{\r
- NameEntry* e;\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- e = (NameEntry* )NULL;\r
- if (IS_NOT_NULL(t)) {\r
- onig_st_lookup_strend(t, name, name_end, (HashDataType* )((void* )(&e)));\r
- }\r
- return e;\r
-}\r
-\r
-typedef struct {\r
- int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*);\r
- regex_t* reg;\r
- void* arg;\r
- int ret;\r
- OnigEncoding enc;\r
-} INamesArg;\r
-\r
-static int\r
-i_names(UChar* key ARG_UNUSED, NameEntry* e, INamesArg* arg)\r
-{\r
- int r = (*(arg->func))(e->name,\r
- e->name + e->name_len,\r
- e->back_num,\r
- (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),\r
- arg->reg, arg->arg);\r
- if (r != 0) {\r
- arg->ret = r;\r
- return ST_STOP;\r
- }\r
- return ST_CONTINUE;\r
-}\r
-\r
-extern int\r
-onig_foreach_name(regex_t* reg,\r
- int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), void* arg)\r
-{\r
- INamesArg narg;\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- narg.ret = 0;\r
- if (IS_NOT_NULL(t)) {\r
- narg.func = func;\r
- narg.reg = reg;\r
- narg.arg = arg;\r
- narg.enc = reg->enc; /* should be pattern encoding. */\r
- onig_st_foreach(t, i_names, (HashDataType )&narg);\r
- }\r
- return narg.ret;\r
-}\r
-\r
-static int\r
-i_renumber_name(UChar* key ARG_UNUSED, NameEntry* e, GroupNumRemap* map)\r
-{\r
- int i;\r
-\r
- if (e->back_num > 1) {\r
- for (i = 0; i < e->back_num; i++) {\r
- e->back_refs[i] = map[e->back_refs[i]].new_val;\r
- }\r
- }\r
- else if (e->back_num == 1) {\r
- e->back_ref1 = map[e->back_ref1].new_val;\r
- }\r
-\r
- return ST_CONTINUE;\r
-}\r
-\r
-extern int\r
-onig_renumber_name_table(regex_t* reg, GroupNumRemap* map)\r
-{\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t)) {\r
- onig_st_foreach(t, i_renumber_name, (HashDataType )map);\r
- }\r
- return 0;\r
-}\r
-\r
-\r
-extern int\r
-onig_number_of_names(regex_t* reg)\r
-{\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t))\r
- return t->num_entries;\r
- else\r
- return 0;\r
-}\r
-\r
-#else /* USE_ST_LIBRARY */\r
-\r
-#define INIT_NAMES_ALLOC_NUM 8\r
-\r
-typedef struct {\r
- NameEntry* e;\r
- int num;\r
- int alloc;\r
-} NameTable;\r
-\r
-#ifdef ONIG_DEBUG\r
-extern int\r
-onig_print_names(FILE* fp, regex_t* reg)\r
-{\r
- int i, j;\r
- NameEntry* e;\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t) && t->num > 0) {\r
- fprintf(fp, "name table\n");\r
- for (i = 0; i < t->num; i++) {\r
- e = &(t->e[i]);\r
- fprintf(fp, "%s: ", e->name);\r
- if (e->back_num == 0) {\r
- fputs("-", fp);\r
- }\r
- else if (e->back_num == 1) {\r
- fprintf(fp, "%d", e->back_ref1);\r
- }\r
- else {\r
- for (j = 0; j < e->back_num; j++) {\r
- if (j > 0) fprintf(fp, ", ");\r
- fprintf(fp, "%d", e->back_refs[j]);\r
- }\r
- }\r
- fputs("\n", fp);\r
- }\r
- fputs("\n", fp);\r
- }\r
- return 0;\r
-}\r
-#endif\r
-\r
-static int\r
-names_clear(regex_t* reg)\r
-{\r
- int i;\r
- NameEntry* e;\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t)) {\r
- for (i = 0; i < t->num; i++) {\r
- e = &(t->e[i]);\r
- if (IS_NOT_NULL(e->name)) {\r
- xfree(e->name);\r
- e->name = NULL;\r
- e->name_len = 0;\r
- e->back_num = 0;\r
- e->back_alloc = 0;\r
- if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs);\r
- e->back_refs = (int* )NULL;\r
- }\r
- }\r
- if (IS_NOT_NULL(t->e)) {\r
- xfree(t->e);\r
- t->e = NULL;\r
- }\r
- t->num = 0;\r
- }\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_names_free(regex_t* reg)\r
-{\r
- int r;\r
- NameTable* t;\r
-\r
- r = names_clear(reg);\r
- if (r) return r;\r
-\r
- t = (NameTable* )reg->name_table;\r
- if (IS_NOT_NULL(t)) xfree(t);\r
- reg->name_table = NULL;\r
- return 0;\r
-}\r
-\r
-static NameEntry*\r
-name_find(regex_t* reg, UChar* name, UChar* name_end)\r
-{\r
- int i, len;\r
- NameEntry* e;\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t)) {\r
- len = name_end - name;\r
- for (i = 0; i < t->num; i++) {\r
- e = &(t->e[i]);\r
- if (len == e->name_len && onig_strncmp(name, e->name, len) == 0)\r
- return e;\r
- }\r
- }\r
- return (NameEntry* )NULL;\r
-}\r
-\r
-extern int\r
-onig_foreach_name(regex_t* reg,\r
- int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), void* arg)\r
-{\r
- int i, r;\r
- NameEntry* e;\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t)) {\r
- for (i = 0; i < t->num; i++) {\r
- e = &(t->e[i]);\r
- r = (*func)(e->name, e->name + e->name_len, e->back_num,\r
- (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),\r
- reg, arg);\r
- if (r != 0) return r;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_number_of_names(regex_t* reg)\r
-{\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (IS_NOT_NULL(t))\r
- return t->num;\r
- else\r
- return 0;\r
-}\r
-\r
-#endif /* else USE_ST_LIBRARY */\r
-\r
-static int\r
-name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env)\r
-{\r
- int alloc;\r
- NameEntry* e;\r
- NameTable* t = (NameTable* )reg->name_table;\r
-\r
- if (name_end - name <= 0)\r
- return ONIGERR_EMPTY_GROUP_NAME;\r
-\r
- e = name_find(reg, name, name_end);\r
- if (IS_NULL(e)) {\r
-#ifdef USE_ST_LIBRARY\r
- if (IS_NULL(t)) {\r
- t = onig_st_init_strend_table_with_size(5);\r
- reg->name_table = (void* )t;\r
- }\r
- e = (NameEntry* )xmalloc(sizeof(NameEntry));\r
- CHECK_NULL_RETURN_MEMERR(e);\r
-\r
- e->name = strdup_with_null(reg->enc, name, name_end);\r
- if (IS_NULL(e->name)) {\r
- xfree(e); return ONIGERR_MEMORY;\r
- }\r
- onig_st_insert_strend(t, e->name, (e->name + (name_end - name)),\r
- (HashDataType )e);\r
-\r
- e->name_len = (int)(name_end - name);\r
- e->back_num = 0;\r
- e->back_alloc = 0;\r
- e->back_refs = (int* )NULL;\r
-\r
-#else\r
-\r
- if (IS_NULL(t)) {\r
- alloc = INIT_NAMES_ALLOC_NUM;\r
- t = (NameTable* )xmalloc(sizeof(NameTable));\r
- CHECK_NULL_RETURN_MEMERR(t);\r
- t->e = NULL;\r
- t->alloc = 0;\r
- t->num = 0;\r
-\r
- t->e = (NameEntry* )xmalloc(sizeof(NameEntry) * alloc);\r
- if (IS_NULL(t->e)) {\r
- xfree(t);\r
- return ONIGERR_MEMORY;\r
- }\r
- t->alloc = alloc;\r
- reg->name_table = t;\r
- goto clear;\r
- }\r
- else if (t->num == t->alloc) {\r
- int i;\r
-\r
- alloc = t->alloc * 2;\r
- t->e = (NameEntry* )xrealloc(t->e, sizeof(NameEntry) * alloc);\r
- CHECK_NULL_RETURN_MEMERR(t->e);\r
- t->alloc = alloc;\r
-\r
- clear:\r
- for (i = t->num; i < t->alloc; i++) {\r
- t->e[i].name = NULL;\r
- t->e[i].name_len = 0;\r
- t->e[i].back_num = 0;\r
- t->e[i].back_alloc = 0;\r
- t->e[i].back_refs = (int* )NULL;\r
- }\r
- }\r
- e = &(t->e[t->num]);\r
- t->num++;\r
- e->name = strdup_with_null(reg->enc, name, name_end);\r
- if (IS_NULL(e->name)) return ONIGERR_MEMORY;\r
- e->name_len = name_end - name;\r
-#endif\r
- }\r
-\r
- if (e->back_num >= 1 &&\r
- ! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME)) {\r
- onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINED_NAME,\r
- name, name_end);\r
- return ONIGERR_MULTIPLEX_DEFINED_NAME;\r
- }\r
-\r
- e->back_num++;\r
- if (e->back_num == 1) {\r
- e->back_ref1 = backref;\r
- }\r
- else {\r
- if (e->back_num == 2) {\r
- alloc = INIT_NAME_BACKREFS_ALLOC_NUM;\r
- e->back_refs = (int* )xmalloc(sizeof(int) * alloc);\r
- CHECK_NULL_RETURN_MEMERR(e->back_refs);\r
- e->back_alloc = alloc;\r
- e->back_refs[0] = e->back_ref1;\r
- e->back_refs[1] = backref;\r
- }\r
- else {\r
- if (e->back_num > e->back_alloc) {\r
- alloc = e->back_alloc * 2;\r
- e->back_refs = (int* )xrealloc(e->back_refs, sizeof(int) * alloc, sizeof(int) * e->back_alloc);\r
- CHECK_NULL_RETURN_MEMERR(e->back_refs);\r
- e->back_alloc = alloc;\r
- }\r
- e->back_refs[e->back_num - 1] = backref;\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_name_to_group_numbers(regex_t* reg, const UChar* name,\r
- const UChar* name_end, int** nums)\r
-{\r
- NameEntry* e = name_find(reg, name, name_end);\r
-\r
- if (IS_NULL(e)) return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
-\r
- switch (e->back_num) {\r
- case 0:\r
- break;\r
- case 1:\r
- *nums = &(e->back_ref1);\r
- break;\r
- default:\r
- *nums = e->back_refs;\r
- break;\r
- }\r
- return e->back_num;\r
-}\r
-\r
-extern int\r
-onig_name_to_backref_number(regex_t* reg, const UChar* name,\r
- const UChar* name_end, OnigRegion *region)\r
-{\r
- int i, n, *nums;\r
-\r
- n = onig_name_to_group_numbers(reg, name, name_end, &nums);\r
- if (n < 0)\r
- return n;\r
- else if (n == 0)\r
- return ONIGERR_PARSER_BUG;\r
- else if (n == 1)\r
- return nums[0];\r
- else {\r
- if (IS_NOT_NULL(region)) {\r
- for (i = n - 1; i >= 0; i--) {\r
- if (region->beg[nums[i]] != ONIG_REGION_NOTPOS)\r
- return nums[i];\r
- }\r
- }\r
- return nums[n - 1];\r
- }\r
-}\r
-\r
-#else /* USE_NAMED_GROUP */\r
-\r
-extern int\r
-onig_name_to_group_numbers(regex_t* reg, const UChar* name,\r
- const UChar* name_end, int** nums)\r
-{\r
- return ONIG_NO_SUPPORT_CONFIG;\r
-}\r
-\r
-extern int\r
-onig_name_to_backref_number(regex_t* reg, const UChar* name,\r
- const UChar* name_end, OnigRegion* region)\r
-{\r
- return ONIG_NO_SUPPORT_CONFIG;\r
-}\r
-\r
-extern int\r
-onig_foreach_name(regex_t* reg,\r
- int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), void* arg)\r
-{\r
- return ONIG_NO_SUPPORT_CONFIG;\r
-}\r
-\r
-extern int\r
-onig_number_of_names(regex_t* reg)\r
-{\r
- return 0;\r
-}\r
-#endif /* else USE_NAMED_GROUP */\r
-\r
-extern int\r
-onig_noname_group_capture_is_active(regex_t* reg)\r
-{\r
- if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_DONT_CAPTURE_GROUP))\r
- return 0;\r
-\r
-#ifdef USE_NAMED_GROUP\r
- if (onig_number_of_names(reg) > 0 &&\r
- IS_SYNTAX_BV(reg->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&\r
- !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) {\r
- return 0;\r
- }\r
-#endif\r
-\r
- return 1;\r
-}\r
-\r
-\r
-#define INIT_SCANENV_MEMNODES_ALLOC_SIZE 16\r
-\r
-static void\r
-scan_env_clear(ScanEnv* env)\r
-{\r
- int i;\r
-\r
- BIT_STATUS_CLEAR(env->capture_history);\r
- BIT_STATUS_CLEAR(env->bt_mem_start);\r
- BIT_STATUS_CLEAR(env->bt_mem_end);\r
- BIT_STATUS_CLEAR(env->backrefed_mem);\r
- env->error = (UChar* )NULL;\r
- env->error_end = (UChar* )NULL;\r
- env->num_call = 0;\r
- env->num_mem = 0;\r
-#ifdef USE_NAMED_GROUP\r
- env->num_named = 0;\r
-#endif\r
- env->mem_alloc = 0;\r
- env->mem_nodes_dynamic = (Node** )NULL;\r
-\r
- for (i = 0; i < SCANENV_MEMNODES_SIZE; i++)\r
- env->mem_nodes_static[i] = NULL_NODE;\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- env->num_comb_exp_check = 0;\r
- env->comb_exp_max_regnum = 0;\r
- env->curr_max_regnum = 0;\r
- env->has_recursion = 0;\r
-#endif\r
-}\r
-\r
-static int\r
-scan_env_add_mem_entry(ScanEnv* env)\r
-{\r
- int i, need, alloc;\r
- Node** p;\r
-\r
- need = env->num_mem + 1;\r
- if (need >= SCANENV_MEMNODES_SIZE) {\r
- if (env->mem_alloc <= need) {\r
- if (IS_NULL(env->mem_nodes_dynamic)) {\r
- alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE;\r
- p = (Node** )xmalloc(sizeof(Node*) * alloc);\r
- xmemcpy(p, env->mem_nodes_static,\r
- sizeof(Node*) * SCANENV_MEMNODES_SIZE);\r
- }\r
- else {\r
- alloc = env->mem_alloc * 2;\r
- p = (Node** )xrealloc(env->mem_nodes_dynamic, sizeof(Node*) * alloc, sizeof(Node*) * env->mem_alloc);\r
- }\r
- CHECK_NULL_RETURN_MEMERR(p);\r
-\r
- for (i = env->num_mem + 1; i < alloc; i++)\r
- p[i] = NULL_NODE;\r
-\r
- env->mem_nodes_dynamic = p;\r
- env->mem_alloc = alloc;\r
- }\r
- }\r
-\r
- env->num_mem++;\r
- return env->num_mem;\r
-}\r
-\r
-static int\r
-scan_env_set_mem_node(ScanEnv* env, int num, Node* node)\r
-{\r
- if (env->num_mem >= num)\r
- SCANENV_MEM_NODES(env)[num] = node;\r
- else\r
- return ONIGERR_PARSER_BUG;\r
- return 0;\r
-}\r
-\r
-\r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-typedef struct _FreeNode {\r
- struct _FreeNode* next;\r
-} FreeNode;\r
-\r
-static FreeNode* FreeNodeList = (FreeNode* )NULL;\r
-#endif\r
-\r
-extern void\r
-onig_node_free(Node* node)\r
-{\r
- start:\r
- if (IS_NULL(node)) return ;\r
-\r
- switch (NTYPE(node)) {\r
- case NT_STR:\r
- if (NSTR(node)->capa != 0 &&\r
- IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {\r
- xfree(NSTR(node)->s);\r
- }\r
- break;\r
-\r
- case NT_LIST:\r
- case NT_ALT:\r
- onig_node_free(NCAR(node));\r
- {\r
- Node* next_node = NCDR(node);\r
-\r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
- {\r
- FreeNode* n = (FreeNode* )node;\r
-\r
- THREAD_ATOMIC_START;\r
- n->next = FreeNodeList;\r
- FreeNodeList = n;\r
- THREAD_ATOMIC_END;\r
- }\r
-#else\r
- xfree(node);\r
-#endif\r
- node = next_node;\r
- goto start;\r
- }\r
- break;\r
-\r
- case NT_CCLASS:\r
- {\r
- CClassNode* cc = NCCLASS(node);\r
-\r
- if (IS_NCCLASS_SHARE(cc)) return ;\r
- if (cc->mbuf)\r
- bbuf_free(cc->mbuf);\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- if (NQTFR(node)->target)\r
- onig_node_free(NQTFR(node)->target);\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- if (NENCLOSE(node)->target)\r
- onig_node_free(NENCLOSE(node)->target);\r
- break;\r
-\r
- case NT_BREF:\r
- if (IS_NOT_NULL(NBREF(node)->back_dynamic))\r
- xfree(NBREF(node)->back_dynamic);\r
- break;\r
-\r
- case NT_ANCHOR:\r
- if (NANCHOR(node)->target)\r
- onig_node_free(NANCHOR(node)->target);\r
- break;\r
- }\r
-\r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
- {\r
- FreeNode* n = (FreeNode* )node;\r
-\r
- THREAD_ATOMIC_START;\r
- n->next = FreeNodeList;\r
- FreeNodeList = n;\r
- THREAD_ATOMIC_END;\r
- }\r
-#else\r
- xfree(node);\r
-#endif\r
-}\r
-\r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
-extern int\r
-onig_free_node_list(void)\r
-{\r
- FreeNode* n;\r
-\r
- /* THREAD_ATOMIC_START; */\r
- while (IS_NOT_NULL(FreeNodeList)) {\r
- n = FreeNodeList;\r
- FreeNodeList = FreeNodeList->next;\r
- xfree(n);\r
- }\r
- /* THREAD_ATOMIC_END; */\r
- return 0;\r
-}\r
-#endif\r
-\r
-static Node*\r
-node_new(void)\r
-{\r
- Node* node;\r
-\r
-#ifdef USE_PARSE_TREE_NODE_RECYCLE\r
- THREAD_ATOMIC_START;\r
- if (IS_NOT_NULL(FreeNodeList)) {\r
- node = (Node* )FreeNodeList;\r
- FreeNodeList = FreeNodeList->next;\r
- THREAD_ATOMIC_END;\r
- return node;\r
- }\r
- THREAD_ATOMIC_END;\r
-#endif\r
-\r
- node = (Node* )xmalloc(sizeof(Node));\r
- /* xmemset(node, 0, sizeof(Node)); */\r
- return node;\r
-}\r
-\r
-\r
-static void\r
-initialize_cclass(CClassNode* cc)\r
-{\r
- BITSET_CLEAR(cc->bs);\r
- /* cc->base.flags = 0; */\r
- cc->flags = 0;\r
- cc->mbuf = NULL;\r
-}\r
-\r
-static Node*\r
-node_new_cclass(void)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_CCLASS);\r
- initialize_cclass(NCCLASS(node));\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,\r
- const OnigCodePoint ranges[])\r
-{\r
- int n, i;\r
- CClassNode* cc;\r
- OnigCodePoint j;\r
-\r
- Node* node = node_new_cclass();\r
- CHECK_NULL_RETURN(node);\r
-\r
- cc = NCCLASS(node);\r
- if (not != 0) NCCLASS_SET_NOT(cc);\r
-\r
- BITSET_CLEAR(cc->bs);\r
- if (sb_out > 0 && IS_NOT_NULL(ranges)) {\r
- n = ONIGENC_CODE_RANGE_NUM(ranges);\r
- for (i = 0; i < n; i++) {\r
- for (j = ONIGENC_CODE_RANGE_FROM(ranges, i);\r
- j <= (OnigCodePoint )ONIGENC_CODE_RANGE_TO(ranges, i); j++) {\r
- if (j >= sb_out) goto sb_end;\r
-\r
- BITSET_SET_BIT(cc->bs, j);\r
- }\r
- }\r
- }\r
-\r
- sb_end:\r
- if (IS_NULL(ranges)) {\r
- is_null:\r
- cc->mbuf = NULL;\r
- }\r
- else {\r
- BBuf* bbuf;\r
-\r
- n = ONIGENC_CODE_RANGE_NUM(ranges);\r
- if (n == 0) goto is_null;\r
-\r
- bbuf = (BBuf* )xmalloc(sizeof(BBuf));\r
- CHECK_NULL_RETURN(bbuf);\r
- bbuf->alloc = n + 1;\r
- bbuf->used = n + 1;\r
- bbuf->p = (UChar* )((void* )ranges);\r
-\r
- cc->mbuf = bbuf;\r
- }\r
-\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_ctype(int type, int not)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_CTYPE);\r
- NCTYPE(node)->ctype = type;\r
- NCTYPE(node)->not = not;\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_anychar(void)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_CANY);\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_list(Node* left, Node* right)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_LIST);\r
- NCAR(node) = left;\r
- NCDR(node) = right;\r
- return node;\r
-}\r
-\r
-extern Node*\r
-onig_node_new_list(Node* left, Node* right)\r
-{\r
- return node_new_list(left, right);\r
-}\r
-\r
-extern Node*\r
-onig_node_list_add(Node* list, Node* x)\r
-{\r
- Node *n;\r
-\r
- n = onig_node_new_list(x, NULL);\r
- if (IS_NULL(n)) return NULL_NODE;\r
-\r
- if (IS_NOT_NULL(list)) {\r
- while (IS_NOT_NULL(NCDR(list)))\r
- list = NCDR(list);\r
-\r
- NCDR(list) = n;\r
- }\r
-\r
- return n;\r
-}\r
-\r
-extern Node*\r
-onig_node_new_alt(Node* left, Node* right)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_ALT);\r
- NCAR(node) = left;\r
- NCDR(node) = right;\r
- return node;\r
-}\r
-\r
-extern Node*\r
-onig_node_new_anchor(int type)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_ANCHOR);\r
- NANCHOR(node)->type = type;\r
- NANCHOR(node)->target = NULL;\r
- NANCHOR(node)->char_len = -1;\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_backref(int back_num, int* backrefs, int by_name,\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- int exist_level, int nest_level,\r
-#endif\r
- ScanEnv* env)\r
-{\r
- int i;\r
- Node* node = node_new();\r
-\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_BREF);\r
- NBREF(node)->state = 0;\r
- NBREF(node)->back_num = back_num;\r
- NBREF(node)->back_dynamic = (int* )NULL;\r
- if (by_name != 0)\r
- NBREF(node)->state |= NST_NAME_REF;\r
-\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- if (exist_level != 0) {\r
- NBREF(node)->state |= NST_NEST_LEVEL;\r
- NBREF(node)->nest_level = nest_level;\r
- }\r
-#endif\r
-\r
- for (i = 0; i < back_num; i++) {\r
- if (backrefs[i] <= env->num_mem &&\r
- IS_NULL(SCANENV_MEM_NODES(env)[backrefs[i]])) {\r
- NBREF(node)->state |= NST_RECURSION; /* /...(\1).../ */\r
- break;\r
- }\r
- }\r
-\r
- if (back_num <= NODE_BACKREFS_SIZE) {\r
- for (i = 0; i < back_num; i++)\r
- NBREF(node)->back_static[i] = backrefs[i];\r
- }\r
- else {\r
- int* p = (int* )xmalloc(sizeof(int) * back_num);\r
- if (IS_NULL(p)) {\r
- onig_node_free(node);\r
- return NULL;\r
- }\r
- NBREF(node)->back_dynamic = p;\r
- for (i = 0; i < back_num; i++)\r
- p[i] = backrefs[i];\r
- }\r
- return node;\r
-}\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-static Node*\r
-node_new_call(UChar* name, UChar* name_end, int gnum)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_CALL);\r
- NCALL(node)->state = 0;\r
- NCALL(node)->target = NULL_NODE;\r
- NCALL(node)->name = name;\r
- NCALL(node)->name_end = name_end;\r
- NCALL(node)->group_num = gnum; /* call by number if gnum != 0 */\r
- return node;\r
-}\r
-#endif\r
-\r
-static Node*\r
-node_new_quantifier(int lower, int upper, int by_number)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_QTFR);\r
- NQTFR(node)->state = 0;\r
- NQTFR(node)->target = NULL;\r
- NQTFR(node)->lower = lower;\r
- NQTFR(node)->upper = upper;\r
- NQTFR(node)->greedy = 1;\r
- NQTFR(node)->target_empty_info = NQ_TARGET_ISNOT_EMPTY;\r
- NQTFR(node)->head_exact = NULL_NODE;\r
- NQTFR(node)->next_head_exact = NULL_NODE;\r
- NQTFR(node)->is_refered = 0;\r
- if (by_number != 0)\r
- NQTFR(node)->state |= NST_BY_NUMBER;\r
-\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- NQTFR(node)->comb_exp_check_num = 0;\r
-#endif\r
-\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_enclose(int type)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_ENCLOSE);\r
- NENCLOSE(node)->type = type;\r
- NENCLOSE(node)->state = 0;\r
- NENCLOSE(node)->regnum = 0;\r
- NENCLOSE(node)->option = 0;\r
- NENCLOSE(node)->target = NULL;\r
- NENCLOSE(node)->call_addr = -1;\r
- NENCLOSE(node)->opt_count = 0;\r
- return node;\r
-}\r
-\r
-extern Node*\r
-onig_node_new_enclose(int type)\r
-{\r
- return node_new_enclose(type);\r
-}\r
-\r
-static Node*\r
-node_new_enclose_memory(OnigOptionType option, int is_named)\r
-{\r
- Node* node = node_new_enclose(ENCLOSE_MEMORY);\r
- CHECK_NULL_RETURN(node);\r
- if (is_named != 0)\r
- SET_ENCLOSE_STATUS(node, NST_NAMED_GROUP);\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- NENCLOSE(node)->option = option;\r
-#endif\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_option(OnigOptionType option)\r
-{\r
- Node* node = node_new_enclose(ENCLOSE_OPTION);\r
- CHECK_NULL_RETURN(node);\r
- NENCLOSE(node)->option = option;\r
- return node;\r
-}\r
-\r
-extern int\r
-onig_node_str_cat(Node* node, const UChar* s, const UChar* end)\r
-{\r
- int addlen = (int)(end - s);\r
-\r
- if (addlen > 0) {\r
- int len = (int)(NSTR(node)->end - NSTR(node)->s);\r
-\r
- if (NSTR(node)->capa > 0 || (len + addlen > NODE_STR_BUF_SIZE - 1)) {\r
- UChar* p;\r
- int capa = len + addlen + NODE_STR_MARGIN;\r
-\r
- if (capa <= NSTR(node)->capa) {\r
- onig_strcpy(NSTR(node)->s + len, s, end);\r
- }\r
- else {\r
- if (NSTR(node)->s == NSTR(node)->buf)\r
- p = strcat_capa_from_static(NSTR(node)->s, NSTR(node)->end,\r
- s, end, capa);\r
- else\r
- p = strcat_capa(NSTR(node)->s, NSTR(node)->end, s, end, capa, NSTR(node)->capa);\r
-\r
- CHECK_NULL_RETURN_MEMERR(p);\r
- NSTR(node)->s = p;\r
- NSTR(node)->capa = capa;\r
- }\r
- }\r
- else {\r
- onig_strcpy(NSTR(node)->s + len, s, end);\r
- }\r
- NSTR(node)->end = NSTR(node)->s + len + addlen;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_node_str_set(Node* node, const UChar* s, const UChar* end)\r
-{\r
- onig_node_str_clear(node);\r
- return onig_node_str_cat(node, s, end);\r
-}\r
-\r
-static int\r
-node_str_cat_char(Node* node, UChar c)\r
-{\r
- UChar s[1];\r
-\r
- s[0] = c;\r
- return onig_node_str_cat(node, s, s + 1);\r
-}\r
-\r
-extern void\r
-onig_node_conv_to_str_node(Node* node, int flag)\r
-{\r
- SET_NTYPE(node, NT_STR);\r
- NSTR(node)->flag = flag;\r
- NSTR(node)->capa = 0;\r
- NSTR(node)->s = NSTR(node)->buf;\r
- NSTR(node)->end = NSTR(node)->buf;\r
-}\r
-\r
-extern void\r
-onig_node_str_clear(Node* node)\r
-{\r
- if (NSTR(node)->capa != 0 &&\r
- IS_NOT_NULL(NSTR(node)->s) && NSTR(node)->s != NSTR(node)->buf) {\r
- xfree(NSTR(node)->s);\r
- }\r
-\r
- NSTR(node)->capa = 0;\r
- NSTR(node)->flag = 0;\r
- NSTR(node)->s = NSTR(node)->buf;\r
- NSTR(node)->end = NSTR(node)->buf;\r
-}\r
-\r
-static Node*\r
-node_new_str(const UChar* s, const UChar* end)\r
-{\r
- Node* node = node_new();\r
- CHECK_NULL_RETURN(node);\r
-\r
- SET_NTYPE(node, NT_STR);\r
- NSTR(node)->capa = 0;\r
- NSTR(node)->flag = 0;\r
- NSTR(node)->s = NSTR(node)->buf;\r
- NSTR(node)->end = NSTR(node)->buf;\r
- if (onig_node_str_cat(node, s, end)) {\r
- onig_node_free(node);\r
- return NULL;\r
- }\r
- return node;\r
-}\r
-\r
-extern Node*\r
-onig_node_new_str(const UChar* s, const UChar* end)\r
-{\r
- return node_new_str(s, end);\r
-}\r
-\r
-static Node*\r
-node_new_str_raw(UChar* s, UChar* end)\r
-{\r
- Node* node = node_new_str(s, end);\r
- NSTRING_SET_RAW(node);\r
- return node;\r
-}\r
-\r
-static Node*\r
-node_new_empty(void)\r
-{\r
- return node_new_str(NULL, NULL);\r
-}\r
-\r
-static Node*\r
-node_new_str_raw_char(UChar c)\r
-{\r
- UChar p[1];\r
-\r
- p[0] = c;\r
- return node_new_str_raw(p, p + 1);\r
-}\r
-\r
-static Node*\r
-str_node_split_last_char(StrNode* sn, OnigEncoding enc)\r
-{\r
- const UChar *p;\r
- Node* n = NULL_NODE;\r
-\r
- if (sn->end > sn->s) {\r
- p = onigenc_get_prev_char_head(enc, sn->s, sn->end);\r
- if (p && p > sn->s) { /* can be splitted. */\r
- n = node_new_str(p, sn->end);\r
- if ((sn->flag & NSTR_RAW) != 0)\r
- NSTRING_SET_RAW(n);\r
- sn->end = (UChar* )p;\r
- }\r
- }\r
- return n;\r
-}\r
-\r
-static int\r
-str_node_can_be_split(StrNode* sn, OnigEncoding enc)\r
-{\r
- if (sn->end > sn->s) {\r
- return ((enclen(enc, sn->s) < sn->end - sn->s) ? 1 : 0);\r
- }\r
- return 0;\r
-}\r
-\r
-#ifdef USE_PAD_TO_SHORT_BYTE_CHAR\r
-static int\r
-node_str_head_pad(StrNode* sn, int num, UChar val)\r
-{\r
- UChar buf[NODE_STR_BUF_SIZE];\r
- int i, len;\r
-\r
- len = sn->end - sn->s;\r
- onig_strcpy(buf, sn->s, sn->end);\r
- onig_strcpy(&(sn->s[num]), buf, buf + len);\r
- sn->end += num;\r
-\r
- for (i = 0; i < num; i++) {\r
- sn->s[i] = val;\r
- }\r
-}\r
-#endif\r
-\r
-extern int\r
-onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc)\r
-{\r
- unsigned int num, val;\r
- OnigCodePoint c;\r
- UChar* p = *src;\r
- PFETCH_READY;\r
-\r
- num = 0;\r
- while (!PEND) {\r
- PFETCH(c);\r
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
- val = (unsigned int )DIGITVAL(c);\r
- if ((INT_MAX_LIMIT - val) / 10UL < num)\r
- return -1; /* overflow */\r
-\r
- num = num * 10 + val;\r
- }\r
- else {\r
- PUNFETCH;\r
- break;\r
- }\r
- }\r
- *src = p;\r
- return num;\r
-}\r
-\r
-static int\r
-scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int maxlen,\r
- OnigEncoding enc)\r
-{\r
- OnigCodePoint c;\r
- unsigned int num, val;\r
- UChar* p = *src;\r
- PFETCH_READY;\r
-\r
- num = 0;\r
- while (!PEND && maxlen-- != 0) {\r
- PFETCH(c);\r
- if (ONIGENC_IS_CODE_XDIGIT(enc, c)) {\r
- val = (unsigned int )XDIGITVAL(enc,c);\r
- if ((INT_MAX_LIMIT - val) / 16UL < num)\r
- return -1; /* overflow */\r
-\r
- num = (num << 4) + XDIGITVAL(enc,c);\r
- }\r
- else {\r
- PUNFETCH;\r
- break;\r
- }\r
- }\r
- *src = p;\r
- return num;\r
-}\r
-\r
-static int\r
-scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen,\r
- OnigEncoding enc)\r
-{\r
- OnigCodePoint c;\r
- unsigned int num, val;\r
- UChar* p = *src;\r
- PFETCH_READY;\r
-\r
- num = 0;\r
- while (!PEND && maxlen-- != 0) {\r
- PFETCH(c);\r
- if (ONIGENC_IS_CODE_DIGIT(enc, c) && c < '8') {\r
- val = ODIGITVAL(c);\r
- if ((INT_MAX_LIMIT - val) / 8UL < num)\r
- return -1; /* overflow */\r
-\r
- num = (num << 3) + val;\r
- }\r
- else {\r
- PUNFETCH;\r
- break;\r
- }\r
- }\r
- *src = p;\r
- return num;\r
-}\r
-\r
-\r
-#define BBUF_WRITE_CODE_POINT(bbuf,pos,code) \\r
- BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT)\r
-\r
-/* data format:\r
- [n][from-1][to-1][from-2][to-2] ... [from-n][to-n]\r
- (all data size is OnigCodePoint)\r
- */\r
-static int\r
-new_code_range(BBuf** pbuf)\r
-{\r
-#define INIT_MULTI_BYTE_RANGE_SIZE (SIZE_CODE_POINT * 5)\r
- int r;\r
- OnigCodePoint n;\r
- BBuf* bbuf;\r
-\r
- bbuf = *pbuf = (BBuf* )xmalloc(sizeof(BBuf));\r
- CHECK_NULL_RETURN_MEMERR(*pbuf);\r
- r = BBUF_INIT(*pbuf, INIT_MULTI_BYTE_RANGE_SIZE);\r
- if (r) return r;\r
-\r
- n = 0;\r
- BBUF_WRITE_CODE_POINT(bbuf, 0, n);\r
- return 0;\r
-}\r
-\r
-static int\r
-add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)\r
-{\r
- int r, inc_n, pos;\r
- int low, high, bound, x;\r
- OnigCodePoint n, *data;\r
- BBuf* bbuf;\r
-\r
- if (from > to) {\r
- n = from; from = to; to = n;\r
- }\r
-\r
- if (IS_NULL(*pbuf)) {\r
- r = new_code_range(pbuf);\r
- if (r) return r;\r
- bbuf = *pbuf;\r
- n = 0;\r
- }\r
- else {\r
- bbuf = *pbuf;\r
- GET_CODE_POINT(n, bbuf->p);\r
- }\r
- data = (OnigCodePoint* )(bbuf->p);\r
- data++;\r
-\r
- for (low = 0, bound = n; low < bound; ) {\r
- x = (low + bound) >> 1;\r
- if (from > data[x*2 + 1])\r
- low = x + 1;\r
- else\r
- bound = x;\r
- }\r
-\r
- for (high = low, bound = n; high < bound; ) {\r
- x = (high + bound) >> 1;\r
- if (to >= data[x*2] - 1)\r
- high = x + 1;\r
- else\r
- bound = x;\r
- }\r
-\r
- inc_n = low + 1 - high;\r
- if (n + inc_n > ONIG_MAX_MULTI_BYTE_RANGES_NUM)\r
- return ONIGERR_TOO_MANY_MULTI_BYTE_RANGES;\r
-\r
- if (inc_n != 1) {\r
- if (from > data[low*2])\r
- from = data[low*2];\r
- if (to < data[(high - 1)*2 + 1])\r
- to = data[(high - 1)*2 + 1];\r
- }\r
-\r
- if (inc_n != 0 && (OnigCodePoint )high < n) {\r
- int from_pos = SIZE_CODE_POINT * (1 + high * 2);\r
- int to_pos = SIZE_CODE_POINT * (1 + (low + 1) * 2);\r
- int size = (n - high) * 2 * SIZE_CODE_POINT;\r
-\r
- if (inc_n > 0) {\r
- BBUF_MOVE_RIGHT(bbuf, from_pos, to_pos, size);\r
- }\r
- else {\r
- BBUF_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos);\r
- }\r
- }\r
-\r
- pos = SIZE_CODE_POINT * (1 + low * 2);\r
- BBUF_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2);\r
- BBUF_WRITE_CODE_POINT(bbuf, pos, from);\r
- BBUF_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to);\r
- n += inc_n;\r
- BBUF_WRITE_CODE_POINT(bbuf, 0, n);\r
-\r
- return 0;\r
-}\r
-\r
-static int\r
-add_code_range(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)\r
-{\r
- if (from > to) {\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
- return 0;\r
- else\r
- return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
- }\r
-\r
- return add_code_range_to_buf(pbuf, from, to);\r
-}\r
-\r
-static int\r
-not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf)\r
-{\r
- int r, i, n;\r
- OnigCodePoint pre, from, *data, to = 0;\r
-\r
- *pbuf = (BBuf* )NULL;\r
- if (IS_NULL(bbuf)) {\r
- set_all:\r
- return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
- }\r
-\r
- data = (OnigCodePoint* )(bbuf->p);\r
- GET_CODE_POINT(n, data);\r
- data++;\r
- if (n <= 0) goto set_all;\r
-\r
- r = 0;\r
- pre = MBCODE_START_POS(enc);\r
- for (i = 0; i < n; i++) {\r
- from = data[i*2];\r
- to = data[i*2+1];\r
- if (pre <= from - 1) {\r
- r = add_code_range_to_buf(pbuf, pre, from - 1);\r
- if (r != 0) return r;\r
- }\r
- if (to == ~((OnigCodePoint )0)) break;\r
- pre = to + 1;\r
- }\r
- if (to < ~((OnigCodePoint )0)) {\r
- r = add_code_range_to_buf(pbuf, to + 1, ~((OnigCodePoint )0));\r
- }\r
- return r;\r
-}\r
-\r
-#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\\r
- BBuf *tbuf; \\r
- int tnot; \\r
- tnot = not1; not1 = not2; not2 = tnot; \\r
- tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \\r
-} while (0)\r
-\r
-static int\r
-or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,\r
- BBuf* bbuf2, int not2, BBuf** pbuf)\r
-{\r
- int r;\r
- OnigCodePoint i, n1, *data1;\r
- OnigCodePoint from, to;\r
-\r
- *pbuf = (BBuf* )NULL;\r
- if (IS_NULL(bbuf1) && IS_NULL(bbuf2)) {\r
- if (not1 != 0 || not2 != 0)\r
- return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
- return 0;\r
- }\r
-\r
- r = 0;\r
- if (IS_NULL(bbuf2))\r
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);\r
-\r
- if (IS_NULL(bbuf1)) {\r
- if (not1 != 0) {\r
- return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf);\r
- }\r
- else {\r
- if (not2 == 0) {\r
- return bbuf_clone(pbuf, bbuf2);\r
- }\r
- else {\r
- return not_code_range_buf(enc, bbuf2, pbuf);\r
- }\r
- }\r
- }\r
-\r
- if (not1 != 0)\r
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);\r
-\r
- data1 = (OnigCodePoint* )(bbuf1->p);\r
- GET_CODE_POINT(n1, data1);\r
- data1++;\r
-\r
- if (not2 == 0 && not1 == 0) { /* 1 OR 2 */\r
- r = bbuf_clone(pbuf, bbuf2);\r
- }\r
- else if (not1 == 0) { /* 1 OR (not 2) */\r
- r = not_code_range_buf(enc, bbuf2, pbuf);\r
- }\r
- if (r != 0) return r;\r
-\r
- for (i = 0; i < n1; i++) {\r
- from = data1[i*2];\r
- to = data1[i*2+1];\r
- r = add_code_range_to_buf(pbuf, from, to);\r
- if (r != 0) return r;\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1,\r
- OnigCodePoint* data, int n)\r
-{\r
- int i, r;\r
- OnigCodePoint from2, to2;\r
-\r
- for (i = 0; i < n; i++) {\r
- from2 = data[i*2];\r
- to2 = data[i*2+1];\r
- if (from2 < from1) {\r
- if (to2 < from1) continue;\r
- else {\r
- from1 = to2 + 1;\r
- }\r
- }\r
- else if (from2 <= to1) {\r
- if (to2 < to1) {\r
- if (from1 <= from2 - 1) {\r
- r = add_code_range_to_buf(pbuf, from1, from2-1);\r
- if (r != 0) return r;\r
- }\r
- from1 = to2 + 1;\r
- }\r
- else {\r
- to1 = from2 - 1;\r
- }\r
- }\r
- else {\r
- from1 = from2;\r
- }\r
- if (from1 > to1) break;\r
- }\r
- if (from1 <= to1) {\r
- r = add_code_range_to_buf(pbuf, from1, to1);\r
- if (r != 0) return r;\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)\r
-{\r
- int r;\r
- OnigCodePoint i, j, n1, n2, *data1, *data2;\r
- OnigCodePoint from, to, from1, to1, from2, to2;\r
-\r
- *pbuf = (BBuf* )NULL;\r
- if (IS_NULL(bbuf1)) {\r
- if (not1 != 0 && IS_NOT_NULL(bbuf2)) /* not1 != 0 -> not2 == 0 */\r
- return bbuf_clone(pbuf, bbuf2);\r
- return 0;\r
- }\r
- else if (IS_NULL(bbuf2)) {\r
- if (not2 != 0)\r
- return bbuf_clone(pbuf, bbuf1);\r
- return 0;\r
- }\r
-\r
- if (not1 != 0)\r
- SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2);\r
-\r
- data1 = (OnigCodePoint* )(bbuf1->p);\r
- data2 = (OnigCodePoint* )(bbuf2->p);\r
- GET_CODE_POINT(n1, data1);\r
- GET_CODE_POINT(n2, data2);\r
- data1++;\r
- data2++;\r
-\r
- if (not2 == 0 && not1 == 0) { /* 1 AND 2 */\r
- for (i = 0; i < n1; i++) {\r
- from1 = data1[i*2];\r
- to1 = data1[i*2+1];\r
- for (j = 0; j < n2; j++) {\r
- from2 = data2[j*2];\r
- to2 = data2[j*2+1];\r
- if (from2 > to1) break;\r
- if (to2 < from1) continue;\r
- from = MAX(from1, from2);\r
- to = MIN(to1, to2);\r
- r = add_code_range_to_buf(pbuf, from, to);\r
- if (r != 0) return r;\r
- }\r
- }\r
- }\r
- else if (not1 == 0) { /* 1 AND (not 2) */\r
- for (i = 0; i < n1; i++) {\r
- from1 = data1[i*2];\r
- to1 = data1[i*2+1];\r
- r = and_code_range1(pbuf, from1, to1, data2, n2);\r
- if (r != 0) return r;\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static int\r
-and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)\r
-{\r
- int r, not1, not2;\r
- BBuf *buf1, *buf2, *pbuf;\r
- BitSetRef bsr1, bsr2;\r
- BitSet bs1, bs2;\r
-\r
- not1 = IS_NCCLASS_NOT(dest);\r
- bsr1 = dest->bs;\r
- buf1 = dest->mbuf;\r
- not2 = IS_NCCLASS_NOT(cc);\r
- bsr2 = cc->bs;\r
- buf2 = cc->mbuf;\r
-\r
- if (not1 != 0) {\r
- bitset_invert_to(bsr1, bs1);\r
- bsr1 = bs1;\r
- }\r
- if (not2 != 0) {\r
- bitset_invert_to(bsr2, bs2);\r
- bsr2 = bs2;\r
- }\r
- bitset_and(bsr1, bsr2);\r
- if (bsr1 != dest->bs) {\r
- bitset_copy(dest->bs, bsr1);\r
- bsr1 = dest->bs;\r
- }\r
- if (not1 != 0) {\r
- bitset_invert(dest->bs);\r
- }\r
-\r
- if (! ONIGENC_IS_SINGLEBYTE(enc)) {\r
- if (not1 != 0 && not2 != 0) {\r
- r = or_code_range_buf(enc, buf1, 0, buf2, 0, &pbuf);\r
- }\r
- else {\r
- r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf);\r
- if (r == 0 && not1 != 0) {\r
- BBuf *tbuf;\r
- r = not_code_range_buf(enc, pbuf, &tbuf);\r
- if (r != 0) {\r
- bbuf_free(pbuf);\r
- return r;\r
- }\r
- bbuf_free(pbuf);\r
- pbuf = tbuf;\r
- }\r
- }\r
- if (r != 0) return r;\r
-\r
- dest->mbuf = pbuf;\r
- bbuf_free(buf1);\r
- return r;\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)\r
-{\r
- int r, not1, not2;\r
- BBuf *buf1, *buf2, *pbuf;\r
- BitSetRef bsr1, bsr2;\r
- BitSet bs1, bs2;\r
-\r
- not1 = IS_NCCLASS_NOT(dest);\r
- bsr1 = dest->bs;\r
- buf1 = dest->mbuf;\r
- not2 = IS_NCCLASS_NOT(cc);\r
- bsr2 = cc->bs;\r
- buf2 = cc->mbuf;\r
-\r
- if (not1 != 0) {\r
- bitset_invert_to(bsr1, bs1);\r
- bsr1 = bs1;\r
- }\r
- if (not2 != 0) {\r
- bitset_invert_to(bsr2, bs2);\r
- bsr2 = bs2;\r
- }\r
- bitset_or(bsr1, bsr2);\r
- if (bsr1 != dest->bs) {\r
- bitset_copy(dest->bs, bsr1);\r
- bsr1 = dest->bs;\r
- }\r
- if (not1 != 0) {\r
- bitset_invert(dest->bs);\r
- }\r
-\r
- if (! ONIGENC_IS_SINGLEBYTE(enc)) {\r
- if (not1 != 0 && not2 != 0) {\r
- r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf);\r
- }\r
- else {\r
- r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf);\r
- if (r == 0 && not1 != 0) {\r
- BBuf *tbuf;\r
- r = not_code_range_buf(enc, pbuf, &tbuf);\r
- if (r != 0) {\r
- bbuf_free(pbuf);\r
- return r;\r
- }\r
- bbuf_free(pbuf);\r
- pbuf = tbuf;\r
- }\r
- }\r
- if (r != 0) return r;\r
-\r
- dest->mbuf = pbuf;\r
- bbuf_free(buf1);\r
- return r;\r
- }\r
- else\r
- return 0;\r
-}\r
-\r
-static int\r
-conv_backslash_value(int c, ScanEnv* env)\r
-{\r
- if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_CONTROL_CHARS)) {\r
- switch (c) {\r
- case 'n': return '\n';\r
- case 't': return '\t';\r
- case 'r': return '\r';\r
- case 'f': return '\f';\r
- case 'a': return '\007';\r
- case 'b': return '\010';\r
- case 'e': return '\033';\r
- case 'v':\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_V_VTAB))\r
- return '\v';\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- }\r
- return c;\r
-}\r
-\r
-static int\r
-is_invalid_quantifier_target(Node* node)\r
-{\r
- switch (NTYPE(node)) {\r
- case NT_ANCHOR:\r
- return 1;\r
- break;\r
-\r
- case NT_ENCLOSE:\r
- /* allow enclosed elements */\r
- /* return is_invalid_quantifier_target(NENCLOSE(node)->target); */\r
- break;\r
-\r
- case NT_LIST:\r
- do {\r
- if (! is_invalid_quantifier_target(NCAR(node))) return 0;\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- return 0;\r
- break;\r
-\r
- case NT_ALT:\r
- do {\r
- if (is_invalid_quantifier_target(NCAR(node))) return 1;\r
- } while (IS_NOT_NULL(node = NCDR(node)));\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
- return 0;\r
-}\r
-\r
-/* ?:0, *:1, +:2, ??:3, *?:4, +?:5 */\r
-static int\r
-popular_quantifier_num(QtfrNode* q)\r
-{\r
- if (q->greedy) {\r
- if (q->lower == 0) {\r
- if (q->upper == 1) return 0;\r
- else if (IS_REPEAT_INFINITE(q->upper)) return 1;\r
- }\r
- else if (q->lower == 1) {\r
- if (IS_REPEAT_INFINITE(q->upper)) return 2;\r
- }\r
- }\r
- else {\r
- if (q->lower == 0) {\r
- if (q->upper == 1) return 3;\r
- else if (IS_REPEAT_INFINITE(q->upper)) return 4;\r
- }\r
- else if (q->lower == 1) {\r
- if (IS_REPEAT_INFINITE(q->upper)) return 5;\r
- }\r
- }\r
- return -1;\r
-}\r
-\r
-\r
-enum ReduceType {\r
- RQ_ASIS = 0, /* as is */\r
- RQ_DEL = 1, /* delete parent */\r
- RQ_A, /* to '*' */\r
- RQ_AQ, /* to '*?' */\r
- RQ_QQ, /* to '??' */\r
- RQ_P_QQ, /* to '+)??' */\r
- RQ_PQ_Q /* to '+?)?' */\r
-};\r
-\r
-static enum ReduceType ReduceTypeTable[6][6] = {\r
- {RQ_DEL, RQ_A, RQ_A, RQ_QQ, RQ_AQ, RQ_ASIS}, /* '?' */\r
- {RQ_DEL, RQ_DEL, RQ_DEL, RQ_P_QQ, RQ_P_QQ, RQ_DEL}, /* '*' */\r
- {RQ_A, RQ_A, RQ_DEL, RQ_ASIS, RQ_P_QQ, RQ_DEL}, /* '+' */\r
- {RQ_DEL, RQ_AQ, RQ_AQ, RQ_DEL, RQ_AQ, RQ_AQ}, /* '??' */\r
- {RQ_DEL, RQ_DEL, RQ_DEL, RQ_DEL, RQ_DEL, RQ_DEL}, /* '*?' */\r
- {RQ_ASIS, RQ_PQ_Q, RQ_DEL, RQ_AQ, RQ_AQ, RQ_DEL} /* '+?' */\r
-};\r
-\r
-extern void\r
-onig_reduce_nested_quantifier(Node* pnode, Node* cnode)\r
-{\r
- int pnum, cnum;\r
- QtfrNode *p, *c;\r
-\r
- p = NQTFR(pnode);\r
- c = NQTFR(cnode);\r
- pnum = popular_quantifier_num(p);\r
- cnum = popular_quantifier_num(c);\r
- if (pnum < 0 || cnum < 0) return ;\r
-\r
- switch(ReduceTypeTable[cnum][pnum]) {\r
- case RQ_DEL:\r
- *pnode = *cnode;\r
- break;\r
- case RQ_A:\r
- p->target = c->target;\r
- p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 1;\r
- break;\r
- case RQ_AQ:\r
- p->target = c->target;\r
- p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 0;\r
- break;\r
- case RQ_QQ:\r
- p->target = c->target;\r
- p->lower = 0; p->upper = 1; p->greedy = 0;\r
- break;\r
- case RQ_P_QQ:\r
- p->target = cnode;\r
- p->lower = 0; p->upper = 1; p->greedy = 0;\r
- c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 1;\r
- return ;\r
- break;\r
- case RQ_PQ_Q:\r
- p->target = cnode;\r
- p->lower = 0; p->upper = 1; p->greedy = 1;\r
- c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 0;\r
- return ;\r
- break;\r
- case RQ_ASIS:\r
- p->target = cnode;\r
- return ;\r
- break;\r
- }\r
-\r
- c->target = NULL_NODE;\r
- onig_node_free(cnode);\r
-}\r
-\r
-\r
-enum TokenSyms {\r
- TK_EOT = 0, /* end of token */\r
- TK_RAW_BYTE = 1,\r
- TK_CHAR,\r
- TK_STRING,\r
- TK_CODE_POINT,\r
- TK_ANYCHAR,\r
- TK_CHAR_TYPE,\r
- TK_BACKREF,\r
- TK_CALL,\r
- TK_ANCHOR,\r
- TK_OP_REPEAT,\r
- TK_INTERVAL,\r
- TK_ANYCHAR_ANYTIME, /* SQL '%' == .* */\r
- TK_ALT,\r
- TK_SUBEXP_OPEN,\r
- TK_SUBEXP_CLOSE,\r
- TK_CC_OPEN,\r
- TK_QUOTE_OPEN,\r
- TK_CHAR_PROPERTY, /* \p{...}, \P{...} */\r
- /* in cc */\r
- TK_CC_CLOSE,\r
- TK_CC_RANGE,\r
- TK_POSIX_BRACKET_OPEN,\r
- TK_CC_AND, /* && */\r
- TK_CC_CC_OPEN /* [ */\r
-};\r
-\r
-typedef struct {\r
- enum TokenSyms type;\r
- int escaped;\r
- int base; /* is number: 8, 16 (used in [....]) */\r
- UChar* backp;\r
- union {\r
- UChar* s;\r
- int c;\r
- OnigCodePoint code;\r
- int anchor;\r
- int subtype;\r
- struct {\r
- int lower;\r
- int upper;\r
- int greedy;\r
- int possessive;\r
- } repeat;\r
- struct {\r
- int num;\r
- int ref1;\r
- int* refs;\r
- int by_name;\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- int exist_level;\r
- int level; /* \k<name+n> */\r
-#endif\r
- } backref;\r
- struct {\r
- UChar* name;\r
- UChar* name_end;\r
- int gnum;\r
- } call;\r
- struct {\r
- int ctype;\r
- int not;\r
- } prop;\r
- } u;\r
-} OnigToken;\r
-\r
-\r
-static int\r
-fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)\r
-{\r
- int low, up, syn_allow, non_low = 0;\r
- int r = 0;\r
- OnigCodePoint c;\r
- OnigEncoding enc = env->enc;\r
- UChar* p = *src;\r
- PFETCH_READY;\r
-\r
- syn_allow = IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_INVALID_INTERVAL);\r
-\r
- if (PEND) {\r
- if (syn_allow)\r
- return 1; /* "....{" : OK! */\r
- else\r
- return ONIGERR_END_PATTERN_AT_LEFT_BRACE; /* "....{" syntax error */\r
- }\r
-\r
- if (! syn_allow) {\r
- c = PPEEK;\r
- if (c == ')' || c == '(' || c == '|') {\r
- return ONIGERR_END_PATTERN_AT_LEFT_BRACE;\r
- }\r
- }\r
-\r
- low = onig_scan_unsigned_number(&p, end, env->enc);\r
- if (low < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;\r
- if (low > ONIG_MAX_REPEAT_NUM)\r
- return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;\r
-\r
- if (p == *src) { /* can't read low */\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV)) {\r
- /* allow {,n} as {0,n} */\r
- low = 0;\r
- non_low = 1;\r
- }\r
- else\r
- goto invalid;\r
- }\r
-\r
- if (PEND) goto invalid;\r
- PFETCH(c);\r
- if (c == ',') {\r
- UChar* prev = p;\r
- up = onig_scan_unsigned_number(&p, end, env->enc);\r
- if (up < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;\r
- if (up > ONIG_MAX_REPEAT_NUM)\r
- return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;\r
-\r
- if (p == prev) {\r
- if (non_low != 0)\r
- goto invalid;\r
- up = REPEAT_INFINITE; /* {n,} : {n,infinite} */\r
- }\r
- }\r
- else {\r
- if (non_low != 0)\r
- goto invalid;\r
-\r
- PUNFETCH;\r
- up = low; /* {n} : exact n times */\r
- r = 2; /* fixed */\r
- }\r
-\r
- if (PEND) goto invalid;\r
- PFETCH(c);\r
- if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) {\r
- if (c != MC_ESC(env->syntax)) goto invalid;\r
- PFETCH(c);\r
- }\r
- if (c != '}') goto invalid;\r
-\r
- if (!IS_REPEAT_INFINITE(up) && low > up) {\r
- return ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE;\r
- }\r
-\r
- tok->type = TK_INTERVAL;\r
- tok->u.repeat.lower = low;\r
- tok->u.repeat.upper = up;\r
- *src = p;\r
- return r; /* 0: normal {n,m}, 2: fixed {n} */\r
-\r
- invalid:\r
- if (syn_allow)\r
- return 1; /* OK */\r
- else\r
- return ONIGERR_INVALID_REPEAT_RANGE_PATTERN;\r
-}\r
-\r
-/* \M-, \C-, \c, or \... */\r
-static int\r
-fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int v;\r
- OnigCodePoint c;\r
- OnigEncoding enc = env->enc;\r
- UChar* p = *src;\r
-\r
- if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;\r
-\r
- PFETCH_S(c);\r
- switch (c) {\r
- case 'M':\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META)) {\r
- if (PEND) return ONIGERR_END_PATTERN_AT_META;\r
- PFETCH_S(c);\r
- if (c != '-') return ONIGERR_META_CODE_SYNTAX;\r
- if (PEND) return ONIGERR_END_PATTERN_AT_META;\r
- PFETCH_S(c);\r
- if (c == MC_ESC(env->syntax)) {\r
- v = fetch_escaped_value(&p, end, env);\r
- if (v < 0) return v;\r
- c = (OnigCodePoint )v;\r
- }\r
- c = ((c & 0xff) | 0x80);\r
- }\r
- else\r
- goto backslash;\r
- break;\r
-\r
- case 'C':\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL)) {\r
- if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;\r
- PFETCH_S(c);\r
- if (c != '-') return ONIGERR_CONTROL_CODE_SYNTAX;\r
- goto control;\r
- }\r
- else\r
- goto backslash;\r
-\r
- case 'c':\r
- if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_C_CONTROL)) {\r
- control:\r
- if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL;\r
- PFETCH_S(c);\r
- if (c == '?') {\r
- c = 0177;\r
- }\r
- else {\r
- if (c == MC_ESC(env->syntax)) {\r
- v = fetch_escaped_value(&p, end, env);\r
- if (v < 0) return v;\r
- c = (OnigCodePoint )v;\r
- }\r
- c &= 0x9f;\r
- }\r
- break;\r
- }\r
- /* fall through */\r
-\r
- default:\r
- {\r
- backslash:\r
- c = conv_backslash_value(c, env);\r
- }\r
- break;\r
- }\r
-\r
- *src = p;\r
- return c;\r
-}\r
-\r
-static int fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env);\r
-\r
-static OnigCodePoint\r
-get_name_end_code_point(OnigCodePoint start)\r
-{\r
- switch (start) {\r
- case '<': return (OnigCodePoint )'>'; break;\r
- case '\'': return (OnigCodePoint )'\''; break;\r
- default:\r
- break;\r
- }\r
-\r
- return (OnigCodePoint )0;\r
-}\r
-\r
-#ifdef USE_NAMED_GROUP\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
-/*\r
- \k<name+n>, \k<name-n>\r
- \k<num+n>, \k<num-n>\r
- \k<-num+n>, \k<-num-n>\r
-*/\r
-static int\r
-fetch_name_with_level(OnigCodePoint start_code, UChar** src, UChar* end,\r
- UChar** rname_end, ScanEnv* env,\r
- int* rback_num, int* rlevel)\r
-{\r
- int r, sign, is_num, exist_level;\r
- OnigCodePoint end_code;\r
- OnigCodePoint c = 0;\r
- OnigEncoding enc = env->enc;\r
- UChar *name_end;\r
- UChar *pnum_head;\r
- UChar *p = *src;\r
- PFETCH_READY;\r
-\r
- *rback_num = 0;\r
- is_num = exist_level = 0;\r
- sign = 1;\r
- pnum_head = *src;\r
-\r
- end_code = get_name_end_code_point(start_code);\r
-\r
- name_end = end;\r
- r = 0;\r
- if (PEND) {\r
- return ONIGERR_EMPTY_GROUP_NAME;\r
- }\r
- else {\r
- PFETCH(c);\r
- if (c == end_code)\r
- return ONIGERR_EMPTY_GROUP_NAME;\r
-\r
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
- is_num = 1;\r
- }\r
- else if (c == '-') {\r
- is_num = 2;\r
- sign = -1;\r
- pnum_head = p;\r
- }\r
- else if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
- }\r
- }\r
-\r
- while (!PEND) {\r
- name_end = p;\r
- PFETCH(c);\r
- if (c == end_code || c == ')' || c == '+' || c == '-') {\r
- if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;\r
- break;\r
- }\r
-\r
- if (is_num != 0) {\r
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
- is_num = 1;\r
- }\r
- else {\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- is_num = 0;\r
- }\r
- }\r
- else if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
- }\r
- }\r
-\r
- if (r == 0 && c != end_code) {\r
- if (c == '+' || c == '-') {\r
- int level;\r
- int flag = (c == '-' ? -1 : 1);\r
-\r
- PFETCH(c);\r
- if (! ONIGENC_IS_CODE_DIGIT(enc, c)) goto err;\r
- PUNFETCH;\r
- level = onig_scan_unsigned_number(&p, end, enc);\r
- if (level < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- *rlevel = (level * flag);\r
- exist_level = 1;\r
-\r
- PFETCH(c);\r
- if (c == end_code)\r
- goto end;\r
- }\r
-\r
- err:\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- name_end = end;\r
- }\r
-\r
- end:\r
- if (r == 0) {\r
- if (is_num != 0) {\r
- *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);\r
- if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- else if (*rback_num == 0) goto err;\r
-\r
- *rback_num *= sign;\r
- }\r
-\r
- *rname_end = name_end;\r
- *src = p;\r
- return (exist_level ? 1 : 0);\r
- }\r
- else {\r
- onig_scan_env_set_error_string(env, r, *src, name_end);\r
- return r;\r
- }\r
-}\r
-#endif /* USE_BACKREF_WITH_LEVEL */\r
-\r
-/*\r
- def: 0 -> define name (don't allow number name)\r
- 1 -> reference name (allow number name)\r
-*/\r
-static int\r
-fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,\r
- UChar** rname_end, ScanEnv* env, int* rback_num, int ref)\r
-{\r
- int r, is_num, sign;\r
- OnigCodePoint end_code;\r
- OnigCodePoint c = 0;\r
- OnigEncoding enc = env->enc;\r
- UChar *name_end;\r
- UChar *pnum_head;\r
- UChar *p = *src;\r
-\r
- *rback_num = 0;\r
-\r
- end_code = get_name_end_code_point(start_code);\r
-\r
- name_end = end;\r
- pnum_head = *src;\r
- r = 0;\r
- is_num = 0;\r
- sign = 1;\r
- if (PEND) {\r
- return ONIGERR_EMPTY_GROUP_NAME;\r
- }\r
- else {\r
- PFETCH_S(c);\r
- if (c == end_code)\r
- return ONIGERR_EMPTY_GROUP_NAME;\r
-\r
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
- if (ref == 1)\r
- is_num = 1;\r
- else {\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- is_num = 0;\r
- }\r
- }\r
- else if (c == '-') {\r
- if (ref == 1) {\r
- is_num = 2;\r
- sign = -1;\r
- pnum_head = p;\r
- }\r
- else {\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- is_num = 0;\r
- }\r
- }\r
- else if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
- }\r
- }\r
-\r
- if (r == 0) {\r
- while (!PEND) {\r
- name_end = p;\r
- PFETCH_S(c);\r
- if (c == end_code || c == ')') {\r
- if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;\r
- break;\r
- }\r
-\r
- if (is_num != 0) {\r
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
- is_num = 1;\r
- }\r
- else {\r
- if (!ONIGENC_IS_CODE_WORD(enc, c))\r
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
- else\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- is_num = 0;\r
- }\r
- }\r
- else {\r
- if (!ONIGENC_IS_CODE_WORD(enc, c)) {\r
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
- }\r
- }\r
- }\r
-\r
- if (c != end_code) {\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- name_end = end;\r
- }\r
-\r
- if (is_num != 0) {\r
- *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);\r
- if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- else if (*rback_num == 0) {\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- goto err;\r
- }\r
-\r
- *rback_num *= sign;\r
- }\r
-\r
- *rname_end = name_end;\r
- *src = p;\r
- return 0;\r
- }\r
- else {\r
- while (!PEND) {\r
- name_end = p;\r
- PFETCH_S(c);\r
- if (c == end_code || c == ')')\r
- break;\r
- }\r
- if (PEND)\r
- name_end = end;\r
-\r
- err:\r
- onig_scan_env_set_error_string(env, r, *src, name_end);\r
- return r;\r
- }\r
-}\r
-#else\r
-static int\r
-fetch_name(OnigCodePoint start_code, UChar** src, UChar* end,\r
- UChar** rname_end, ScanEnv* env, int* rback_num, int ref)\r
-{\r
- int r, is_num, sign;\r
- OnigCodePoint end_code;\r
- OnigCodePoint c = 0;\r
- UChar *name_end;\r
- OnigEncoding enc = env->enc;\r
- UChar *pnum_head;\r
- UChar *p = *src;\r
- PFETCH_READY;\r
-\r
- *rback_num = 0;\r
-\r
- end_code = get_name_end_code_point(start_code);\r
-\r
- *rname_end = name_end = end;\r
- r = 0;\r
- pnum_head = *src;\r
- is_num = 0;\r
- sign = 1;\r
-\r
- if (PEND) {\r
- return ONIGERR_EMPTY_GROUP_NAME;\r
- }\r
- else {\r
- PFETCH(c);\r
- if (c == end_code)\r
- return ONIGERR_EMPTY_GROUP_NAME;\r
-\r
- if (ONIGENC_IS_CODE_DIGIT(enc, c)) {\r
- is_num = 1;\r
- }\r
- else if (c == '-') {\r
- is_num = 2;\r
- sign = -1;\r
- pnum_head = p;\r
- }\r
- else {\r
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
- }\r
- }\r
-\r
- while (!PEND) {\r
- name_end = p;\r
-\r
- PFETCH(c);\r
- if (c == end_code || c == ')') break;\r
- if (! ONIGENC_IS_CODE_DIGIT(enc, c))\r
- r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;\r
- }\r
- if (r == 0 && c != end_code) {\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- name_end = end;\r
- }\r
-\r
- if (r == 0) {\r
- *rback_num = onig_scan_unsigned_number(&pnum_head, name_end, enc);\r
- if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- else if (*rback_num == 0) {\r
- r = ONIGERR_INVALID_GROUP_NAME;\r
- goto err;\r
- }\r
- *rback_num *= sign;\r
-\r
- *rname_end = name_end;\r
- *src = p;\r
- return 0;\r
- }\r
- else {\r
- err:\r
- onig_scan_env_set_error_string(env, r, *src, name_end);\r
- return r;\r
- }\r
-}\r
-#endif /* USE_NAMED_GROUP */\r
-\r
-static void\r
-CC_ESC_WARN(ScanEnv* env, UChar *c)\r
-{\r
- if (onig_warn == onig_null_warn) return ;\r
-\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED) &&\r
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC)) {\r
- UChar buf[WARN_BUFSIZE];\r
- onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,\r
- env->pattern, env->pattern_end,\r
- (UChar* )"character class has '%s' without escape", c);\r
- (*onig_warn)((char* )buf);\r
- }\r
-}\r
-\r
-static void\r
-CLOSE_BRACKET_WITHOUT_ESC_WARN(ScanEnv* env, UChar* c)\r
-{\r
- if (onig_warn == onig_null_warn) return ;\r
-\r
- if (IS_SYNTAX_BV((env)->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED)) {\r
- UChar buf[WARN_BUFSIZE];\r
- onig_snprintf_with_pattern(buf, WARN_BUFSIZE, (env)->enc,\r
- (env)->pattern, (env)->pattern_end,\r
- (UChar* )"regular expression has '%s' without escape", c);\r
- (*onig_warn)((char* )buf);\r
- }\r
-}\r
-\r
-static UChar*\r
-find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,\r
- UChar **next, OnigEncoding enc)\r
-{\r
- int i;\r
- OnigCodePoint x;\r
- UChar *q;\r
- UChar *p = from;\r
- \r
- while (p < to) {\r
- x = ONIGENC_MBC_TO_CODE(enc, p, to);\r
- q = p + enclen(enc, p);\r
- if (x == s[0]) {\r
- for (i = 1; i < n && q < to; i++) {\r
- x = ONIGENC_MBC_TO_CODE(enc, q, to);\r
- if (x != s[i]) break;\r
- q += enclen(enc, q);\r
- }\r
- if (i >= n) {\r
- if (IS_NOT_NULL(next))\r
- *next = q;\r
- return p;\r
- }\r
- }\r
- p = q;\r
- }\r
- return NULL_UCHARP;\r
-}\r
-\r
-static int\r
-str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,\r
- OnigCodePoint bad, OnigEncoding enc, OnigSyntaxType* syn)\r
-{\r
- int i, in_esc;\r
- OnigCodePoint x;\r
- UChar *q;\r
- UChar *p = from;\r
-\r
- in_esc = 0;\r
- while (p < to) {\r
- if (in_esc) {\r
- in_esc = 0;\r
- p += enclen(enc, p);\r
- }\r
- else {\r
- x = ONIGENC_MBC_TO_CODE(enc, p, to);\r
- q = p + enclen(enc, p);\r
- if (x == s[0]) {\r
- for (i = 1; i < n && q < to; i++) {\r
- x = ONIGENC_MBC_TO_CODE(enc, q, to);\r
- if (x != s[i]) break;\r
- q += enclen(enc, q);\r
- }\r
- if (i >= n) return 1;\r
- p += enclen(enc, p);\r
- }\r
- else {\r
- x = ONIGENC_MBC_TO_CODE(enc, p, to);\r
- if (x == bad) return 0;\r
- else if (x == MC_ESC(syn)) in_esc = 1;\r
- p = q;\r
- }\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int num;\r
- OnigCodePoint c, c2;\r
- OnigSyntaxType* syn = env->syntax;\r
- OnigEncoding enc = env->enc;\r
- UChar* prev;\r
- UChar* p = *src;\r
- PFETCH_READY;\r
-\r
- if (PEND) {\r
- tok->type = TK_EOT;\r
- return tok->type;\r
- }\r
-\r
- PFETCH(c);\r
- tok->type = TK_CHAR;\r
- tok->base = 0;\r
- tok->u.c = c;\r
- tok->escaped = 0;\r
-\r
- if (c == ']') {\r
- tok->type = TK_CC_CLOSE;\r
- }\r
- else if (c == '-') {\r
- tok->type = TK_CC_RANGE;\r
- }\r
- else if (c == MC_ESC(syn)) {\r
- if (! IS_SYNTAX_BV(syn, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC))\r
- goto end;\r
-\r
- if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;\r
-\r
- PFETCH(c);\r
- tok->escaped = 1;\r
- tok->u.c = c;\r
- switch (c) {\r
- case 'w':\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_WORD;\r
- tok->u.prop.not = 0;\r
- break;\r
- case 'W':\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_WORD;\r
- tok->u.prop.not = 1;\r
- break;\r
- case 'd':\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;\r
- tok->u.prop.not = 0;\r
- break;\r
- case 'D':\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;\r
- tok->u.prop.not = 1;\r
- break;\r
- case 's':\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;\r
- tok->u.prop.not = 0;\r
- break;\r
- case 'S':\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;\r
- tok->u.prop.not = 1;\r
- break;\r
- case 'h':\r
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;\r
- tok->u.prop.not = 0;\r
- break;\r
- case 'H':\r
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;\r
- tok->u.prop.not = 1;\r
- break;\r
-\r
- case 'p':\r
- case 'P':\r
- c2 = PPEEK;\r
- if (c2 == '{' &&\r
- IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {\r
- PINC;\r
- tok->type = TK_CHAR_PROPERTY;\r
- tok->u.prop.not = (c == 'P' ? 1 : 0);\r
-\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {\r
- PFETCH(c2);\r
- if (c2 == '^') {\r
- tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);\r
- }\r
- else\r
- PUNFETCH;\r
- }\r
- }\r
- break;\r
-\r
- case 'x':\r
- if (PEND) break;\r
-\r
- prev = p;\r
- if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {\r
- PINC;\r
- num = scan_unsigned_hexadecimal_number(&p, end, 8, enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
- if (!PEND) {\r
- c2 = PPEEK;\r
- if (ONIGENC_IS_CODE_XDIGIT(enc, c2))\r
- return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;\r
- }\r
-\r
- if (p > prev + enclen(enc, prev) && !PEND && (PPEEK_IS('}'))) {\r
- PINC;\r
- tok->type = TK_CODE_POINT;\r
- tok->base = 16;\r
- tok->u.code = (OnigCodePoint )num;\r
- }\r
- else {\r
- /* can't read nothing or invalid format */\r
- p = prev;\r
- }\r
- }\r
- else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {\r
- num = scan_unsigned_hexadecimal_number(&p, end, 2, enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- if (p == prev) { /* can't read nothing. */\r
- num = 0; /* but, it's not error */\r
- }\r
- tok->type = TK_RAW_BYTE;\r
- tok->base = 16;\r
- tok->u.c = num;\r
- }\r
- break;\r
-\r
- case 'u':\r
- if (PEND) break;\r
-\r
- prev = p;\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {\r
- num = scan_unsigned_hexadecimal_number(&p, end, 4, enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- if (p == prev) { /* can't read nothing. */\r
- num = 0; /* but, it's not error */\r
- }\r
- tok->type = TK_CODE_POINT;\r
- tok->base = 16;\r
- tok->u.code = (OnigCodePoint )num;\r
- }\r
- break;\r
-\r
- case '0':\r
- case '1': case '2': case '3': case '4': case '5': case '6': case '7':\r
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {\r
- PUNFETCH;\r
- prev = p;\r
- num = scan_unsigned_octal_number(&p, end, 3, enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- if (p == prev) { /* can't read nothing. */\r
- num = 0; /* but, it's not error */\r
- }\r
- tok->type = TK_RAW_BYTE;\r
- tok->base = 8;\r
- tok->u.c = num;\r
- }\r
- break;\r
-\r
- default:\r
- PUNFETCH;\r
- num = fetch_escaped_value(&p, end, env);\r
- if (num < 0) return num;\r
- if (tok->u.c != num) {\r
- tok->u.code = (OnigCodePoint )num;\r
- tok->type = TK_CODE_POINT;\r
- }\r
- break;\r
- }\r
- }\r
- else if (c == '[') {\r
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_POSIX_BRACKET) && (PPEEK_IS(':'))) {\r
- OnigCodePoint send[] = { (OnigCodePoint )':', (OnigCodePoint )']' };\r
- tok->backp = p; /* point at '[' is readed */\r
- PINC;\r
- if (str_exist_check_with_esc(send, 2, p, end,\r
- (OnigCodePoint )']', enc, syn)) {\r
- tok->type = TK_POSIX_BRACKET_OPEN;\r
- }\r
- else {\r
- PUNFETCH;\r
- goto cc_in_cc;\r
- }\r
- }\r
- else {\r
- cc_in_cc:\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP)) {\r
- tok->type = TK_CC_CC_OPEN;\r
- }\r
- else {\r
- CC_ESC_WARN(env, (UChar* )"[");\r
- }\r
- }\r
- }\r
- else if (c == '&') {\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP) &&\r
- !PEND && (PPEEK_IS('&'))) {\r
- PINC;\r
- tok->type = TK_CC_AND;\r
- }\r
- }\r
-\r
- end:\r
- *src = p;\r
- return tok->type;\r
-}\r
-\r
-static int\r
-fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int r, num;\r
- OnigCodePoint c;\r
- OnigEncoding enc = env->enc;\r
- OnigSyntaxType* syn = env->syntax;\r
- UChar* prev;\r
- UChar* p = *src;\r
- PFETCH_READY;\r
-\r
- start:\r
- if (PEND) {\r
- tok->type = TK_EOT;\r
- return tok->type;\r
- }\r
-\r
- tok->type = TK_STRING;\r
- tok->base = 0;\r
- tok->backp = p;\r
-\r
- PFETCH(c);\r
- if (IS_MC_ESC_CODE(c, syn)) {\r
- if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE;\r
-\r
- tok->backp = p;\r
- PFETCH(c);\r
-\r
- tok->u.c = c;\r
- tok->escaped = 1;\r
- switch (c) {\r
- case '*':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF)) break;\r
- tok->type = TK_OP_REPEAT;\r
- tok->u.repeat.lower = 0;\r
- tok->u.repeat.upper = REPEAT_INFINITE;\r
- goto greedy_check;\r
- break;\r
-\r
- case '+':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_PLUS_ONE_INF)) break;\r
- tok->type = TK_OP_REPEAT;\r
- tok->u.repeat.lower = 1;\r
- tok->u.repeat.upper = REPEAT_INFINITE;\r
- goto greedy_check;\r
- break;\r
-\r
- case '?':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_QMARK_ZERO_ONE)) break;\r
- tok->type = TK_OP_REPEAT;\r
- tok->u.repeat.lower = 0;\r
- tok->u.repeat.upper = 1;\r
- greedy_check:\r
- if (!PEND && PPEEK_IS('?') &&\r
- IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) {\r
- PFETCH(c);\r
- tok->u.repeat.greedy = 0;\r
- tok->u.repeat.possessive = 0;\r
- }\r
- else {\r
- possessive_check:\r
- if (!PEND && PPEEK_IS('+') &&\r
- ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) &&\r
- tok->type != TK_INTERVAL) ||\r
- (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) &&\r
- tok->type == TK_INTERVAL))) {\r
- PFETCH(c);\r
- tok->u.repeat.greedy = 1;\r
- tok->u.repeat.possessive = 1;\r
- }\r
- else {\r
- tok->u.repeat.greedy = 1;\r
- tok->u.repeat.possessive = 0;\r
- }\r
- }\r
- break;\r
-\r
- case '{':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) break;\r
- r = fetch_range_quantifier(&p, end, tok, env);\r
- if (r < 0) return r; /* error */\r
- if (r == 0) goto greedy_check;\r
- else if (r == 2) { /* {n} */\r
- if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))\r
- goto possessive_check;\r
-\r
- goto greedy_check;\r
- }\r
- /* r == 1 : normal char */\r
- break;\r
-\r
- case '|':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_VBAR_ALT)) break;\r
- tok->type = TK_ALT;\r
- break;\r
-\r
- case '(':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break;\r
- tok->type = TK_SUBEXP_OPEN;\r
- break;\r
-\r
- case ')':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break;\r
- tok->type = TK_SUBEXP_CLOSE;\r
- break;\r
-\r
- case 'w':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_WORD;\r
- tok->u.prop.not = 0;\r
- break;\r
-\r
- case 'W':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_WORD;\r
- tok->u.prop.not = 1;\r
- break;\r
-\r
- case 'b':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.anchor = ANCHOR_WORD_BOUND;\r
- break;\r
-\r
- case 'B':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.anchor = ANCHOR_NOT_WORD_BOUND;\r
- break;\r
-\r
-#ifdef USE_WORD_BEGIN_END\r
- case '<':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.anchor = ANCHOR_WORD_BEGIN;\r
- break;\r
-\r
- case '>':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.anchor = ANCHOR_WORD_END;\r
- break;\r
-#endif\r
-\r
- case 's':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;\r
- tok->u.prop.not = 0;\r
- break;\r
-\r
- case 'S':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_SPACE;\r
- tok->u.prop.not = 1;\r
- break;\r
-\r
- case 'd':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;\r
- tok->u.prop.not = 0;\r
- break;\r
-\r
- case 'D':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_DIGIT;\r
- tok->u.prop.not = 1;\r
- break;\r
-\r
- case 'h':\r
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;\r
- tok->u.prop.not = 0;\r
- break;\r
-\r
- case 'H':\r
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break;\r
- tok->type = TK_CHAR_TYPE;\r
- tok->u.prop.ctype = ONIGENC_CTYPE_XDIGIT;\r
- tok->u.prop.not = 1;\r
- break;\r
-\r
- case 'A':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;\r
- begin_buf:\r
- tok->type = TK_ANCHOR;\r
- tok->u.subtype = ANCHOR_BEGIN_BUF;\r
- break;\r
-\r
- case 'Z':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.subtype = ANCHOR_SEMI_END_BUF;\r
- break;\r
-\r
- case 'z':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break;\r
- end_buf:\r
- tok->type = TK_ANCHOR;\r
- tok->u.subtype = ANCHOR_END_BUF;\r
- break;\r
-\r
- case 'G':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.subtype = ANCHOR_BEGIN_POSITION;\r
- break;\r
-\r
- case '`':\r
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break;\r
- goto begin_buf;\r
- break;\r
-\r
- case '\'':\r
- if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break;\r
- goto end_buf;\r
- break;\r
-\r
- case 'x':\r
- if (PEND) break;\r
-\r
- prev = p;\r
- if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) {\r
- PINC;\r
- num = scan_unsigned_hexadecimal_number(&p, end, 8, enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;\r
- if (!PEND) {\r
- if (ONIGENC_IS_CODE_XDIGIT(enc, PPEEK))\r
- return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;\r
- }\r
-\r
- if ((p > prev + enclen(enc, prev)) && !PEND && PPEEK_IS('}')) {\r
- PINC;\r
- tok->type = TK_CODE_POINT;\r
- tok->u.code = (OnigCodePoint )num;\r
- }\r
- else {\r
- /* can't read nothing or invalid format */\r
- p = prev;\r
- }\r
- }\r
- else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) {\r
- num = scan_unsigned_hexadecimal_number(&p, end, 2, enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- if (p == prev) { /* can't read nothing. */\r
- num = 0; /* but, it's not error */\r
- }\r
- tok->type = TK_RAW_BYTE;\r
- tok->base = 16;\r
- tok->u.c = num;\r
- }\r
- break;\r
-\r
- case 'u':\r
- if (PEND) break;\r
-\r
- prev = p;\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) {\r
- num = scan_unsigned_hexadecimal_number(&p, end, 4, enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- if (p == prev) { /* can't read nothing. */\r
- num = 0; /* but, it's not error */\r
- }\r
- tok->type = TK_CODE_POINT;\r
- tok->base = 16;\r
- tok->u.code = (OnigCodePoint )num;\r
- }\r
- break;\r
-\r
- case '1': case '2': case '3': case '4':\r
- case '5': case '6': case '7': case '8': case '9':\r
- PUNFETCH;\r
- prev = p;\r
- num = onig_scan_unsigned_number(&p, end, enc);\r
- if (num < 0 || num > ONIG_MAX_BACKREF_NUM) {\r
- goto skip_backref;\r
- }\r
-\r
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) && \r
- (num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */\r
- if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
- if (num > env->num_mem || IS_NULL(SCANENV_MEM_NODES(env)[num]))\r
- return ONIGERR_INVALID_BACKREF;\r
- }\r
-\r
- tok->type = TK_BACKREF;\r
- tok->u.backref.num = 1;\r
- tok->u.backref.ref1 = num;\r
- tok->u.backref.by_name = 0;\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- tok->u.backref.exist_level = 0;\r
-#endif\r
- break;\r
- }\r
-\r
- skip_backref:\r
- if (c == '8' || c == '9') {\r
- /* normal char */\r
- p = prev; PINC;\r
- break;\r
- }\r
-\r
- p = prev;\r
- /* fall through */\r
- case '0':\r
- if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) {\r
- prev = p;\r
- num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), enc);\r
- if (num < 0) return ONIGERR_TOO_BIG_NUMBER;\r
- if (p == prev) { /* can't read nothing. */\r
- num = 0; /* but, it's not error */\r
- }\r
- tok->type = TK_RAW_BYTE;\r
- tok->base = 8;\r
- tok->u.c = num;\r
- }\r
- else if (c != '0') {\r
- PINC;\r
- }\r
- break;\r
-\r
-#ifdef USE_NAMED_GROUP\r
- case 'k':\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {\r
- PFETCH(c);\r
- if (c == '<' || c == '\'') {\r
- UChar* name_end;\r
- int* backs;\r
- int back_num;\r
-\r
- prev = p;\r
-\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- name_end = NULL_UCHARP; /* no need. escape gcc warning. */\r
- r = fetch_name_with_level((OnigCodePoint )c, &p, end, &name_end,\r
- env, &back_num, &tok->u.backref.level);\r
- if (r == 1) tok->u.backref.exist_level = 1;\r
- else tok->u.backref.exist_level = 0;\r
-#else\r
- r = fetch_name(&p, end, &name_end, env, &back_num, 1);\r
-#endif\r
- if (r < 0) return r;\r
-\r
- if (back_num != 0) {\r
- if (back_num < 0) {\r
- back_num = BACKREF_REL_TO_ABS(back_num, env);\r
- if (back_num <= 0)\r
- return ONIGERR_INVALID_BACKREF;\r
- }\r
-\r
- if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
- if (back_num > env->num_mem ||\r
- IS_NULL(SCANENV_MEM_NODES(env)[back_num]))\r
- return ONIGERR_INVALID_BACKREF;\r
- }\r
- tok->type = TK_BACKREF;\r
- tok->u.backref.by_name = 0;\r
- tok->u.backref.num = 1;\r
- tok->u.backref.ref1 = back_num;\r
- }\r
- else {\r
- num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);\r
- if (num <= 0) {\r
- onig_scan_env_set_error_string(env,\r
- ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);\r
- return ONIGERR_UNDEFINED_NAME_REFERENCE;\r
- }\r
- if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {\r
- int i;\r
- for (i = 0; i < num; i++) {\r
- if (backs[i] > env->num_mem ||\r
- IS_NULL(SCANENV_MEM_NODES(env)[backs[i]]))\r
- return ONIGERR_INVALID_BACKREF;\r
- }\r
- }\r
-\r
- tok->type = TK_BACKREF;\r
- tok->u.backref.by_name = 1;\r
- if (num == 1) {\r
- tok->u.backref.num = 1;\r
- tok->u.backref.ref1 = backs[0];\r
- }\r
- else {\r
- tok->u.backref.num = num;\r
- tok->u.backref.refs = backs;\r
- }\r
- }\r
- }\r
- else\r
- PUNFETCH;\r
- }\r
- break;\r
-#endif\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case 'g':\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {\r
- PFETCH(c);\r
- if (c == '<' || c == '\'') {\r
- int gnum;\r
- UChar* name_end;\r
-\r
- prev = p;\r
- r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &gnum, 1);\r
- if (r < 0) return r;\r
-\r
- tok->type = TK_CALL;\r
- tok->u.call.name = prev;\r
- tok->u.call.name_end = name_end;\r
- tok->u.call.gnum = gnum;\r
- }\r
- else\r
- PUNFETCH;\r
- }\r
- break;\r
-#endif\r
-\r
- case 'Q':\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE)) {\r
- tok->type = TK_QUOTE_OPEN;\r
- }\r
- break;\r
-\r
- case 'p':\r
- case 'P':\r
- if (PPEEK_IS('{') &&\r
- IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) {\r
- PINC;\r
- tok->type = TK_CHAR_PROPERTY;\r
- tok->u.prop.not = (c == 'P' ? 1 : 0);\r
-\r
- if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {\r
- PFETCH(c);\r
- if (c == '^') {\r
- tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0);\r
- }\r
- else\r
- PUNFETCH;\r
- }\r
- }\r
- break;\r
-\r
- default:\r
- PUNFETCH;\r
- num = fetch_escaped_value(&p, end, env);\r
- if (num < 0) return num;\r
- /* set_raw: */\r
- if (tok->u.c != num) {\r
- tok->type = TK_CODE_POINT;\r
- tok->u.code = (OnigCodePoint )num;\r
- }\r
- else { /* string */\r
- p = tok->backp + enclen(enc, tok->backp);\r
- }\r
- break;\r
- }\r
- }\r
- else {\r
- tok->u.c = c;\r
- tok->escaped = 0;\r
-\r
-#ifdef USE_VARIABLE_META_CHARS\r
- if ((c != ONIG_INEFFECTIVE_META_CHAR) &&\r
- IS_SYNTAX_OP(syn, ONIG_SYN_OP_VARIABLE_META_CHARACTERS)) {\r
- if (c == MC_ANYCHAR(syn))\r
- goto any_char;\r
- else if (c == MC_ANYTIME(syn))\r
- goto anytime;\r
- else if (c == MC_ZERO_OR_ONE_TIME(syn))\r
- goto zero_or_one_time;\r
- else if (c == MC_ONE_OR_MORE_TIME(syn))\r
- goto one_or_more_time;\r
- else if (c == MC_ANYCHAR_ANYTIME(syn)) {\r
- tok->type = TK_ANYCHAR_ANYTIME;\r
- goto out;\r
- }\r
- }\r
-#endif\r
-\r
- switch (c) {\r
- case '.':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_DOT_ANYCHAR)) break;\r
-#ifdef USE_VARIABLE_META_CHARS\r
- any_char:\r
-#endif\r
- tok->type = TK_ANYCHAR;\r
- break;\r
-\r
- case '*':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ASTERISK_ZERO_INF)) break;\r
-#ifdef USE_VARIABLE_META_CHARS\r
- anytime:\r
-#endif\r
- tok->type = TK_OP_REPEAT;\r
- tok->u.repeat.lower = 0;\r
- tok->u.repeat.upper = REPEAT_INFINITE;\r
- goto greedy_check;\r
- break;\r
-\r
- case '+':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_PLUS_ONE_INF)) break;\r
-#ifdef USE_VARIABLE_META_CHARS\r
- one_or_more_time:\r
-#endif\r
- tok->type = TK_OP_REPEAT;\r
- tok->u.repeat.lower = 1;\r
- tok->u.repeat.upper = REPEAT_INFINITE;\r
- goto greedy_check;\r
- break;\r
-\r
- case '?':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_ZERO_ONE)) break;\r
-#ifdef USE_VARIABLE_META_CHARS\r
- zero_or_one_time:\r
-#endif\r
- tok->type = TK_OP_REPEAT;\r
- tok->u.repeat.lower = 0;\r
- tok->u.repeat.upper = 1;\r
- goto greedy_check;\r
- break;\r
-\r
- case '{':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACE_INTERVAL)) break;\r
- r = fetch_range_quantifier(&p, end, tok, env);\r
- if (r < 0) return r; /* error */\r
- if (r == 0) goto greedy_check;\r
- else if (r == 2) { /* {n} */\r
- if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))\r
- goto possessive_check;\r
-\r
- goto greedy_check;\r
- }\r
- /* r == 1 : normal char */\r
- break;\r
-\r
- case '|':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_VBAR_ALT)) break;\r
- tok->type = TK_ALT;\r
- break;\r
-\r
- case '(':\r
- if (PPEEK_IS('?') &&\r
- IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {\r
- PINC;\r
- if (PPEEK_IS('#')) {\r
- PFETCH(c);\r
- while (1) {\r
- if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
- PFETCH(c);\r
- if (c == MC_ESC(syn)) {\r
- if (!PEND) PFETCH(c);\r
- }\r
- else {\r
- if (c == ')') break;\r
- }\r
- }\r
- goto start;\r
- }\r
- PUNFETCH;\r
- }\r
-\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break;\r
- tok->type = TK_SUBEXP_OPEN;\r
- break;\r
-\r
- case ')':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break;\r
- tok->type = TK_SUBEXP_CLOSE;\r
- break;\r
-\r
- case '^':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.subtype = (IS_SINGLELINE(env->option)\r
- ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE);\r
- break;\r
-\r
- case '$':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break;\r
- tok->type = TK_ANCHOR;\r
- tok->u.subtype = (IS_SINGLELINE(env->option)\r
- ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE);\r
- break;\r
-\r
- case '[':\r
- if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACKET_CC)) break;\r
- tok->type = TK_CC_OPEN;\r
- break;\r
-\r
- case ']':\r
- if (*src > env->pattern) /* /].../ is allowed. */\r
- CLOSE_BRACKET_WITHOUT_ESC_WARN(env, (UChar* )"]");\r
- break;\r
-\r
- case '#':\r
- if (IS_EXTEND(env->option)) {\r
- while (!PEND) {\r
- PFETCH(c);\r
- if (ONIGENC_IS_CODE_NEWLINE(enc, c))\r
- break;\r
- }\r
- goto start;\r
- break;\r
- }\r
- break;\r
-\r
- case ' ': case '\t': case '\n': case '\r': case '\f':\r
- if (IS_EXTEND(env->option))\r
- goto start;\r
- break;\r
-\r
- default:\r
- /* string */\r
- break;\r
- }\r
- }\r
-\r
-#ifdef USE_VARIABLE_META_CHARS\r
- out:\r
-#endif\r
- *src = p;\r
- return tok->type;\r
-}\r
-\r
-static int\r
-add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,\r
- OnigEncoding enc ARG_UNUSED,\r
- OnigCodePoint sb_out, const OnigCodePoint mbr[])\r
-{\r
- int i, r;\r
- OnigCodePoint j;\r
-\r
- int n = ONIGENC_CODE_RANGE_NUM(mbr);\r
-\r
- if (not == 0) {\r
- for (i = 0; i < n; i++) {\r
- for (j = ONIGENC_CODE_RANGE_FROM(mbr, i);\r
- j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {\r
- if (j >= sb_out) {\r
- if (j == ONIGENC_CODE_RANGE_TO(mbr, i)) i++;\r
- else if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {\r
- r = add_code_range_to_buf(&(cc->mbuf), j,\r
- ONIGENC_CODE_RANGE_TO(mbr, i));\r
- if (r != 0) return r;\r
- i++;\r
- }\r
-\r
- goto sb_end;\r
- }\r
- BITSET_SET_BIT(cc->bs, j);\r
- }\r
- }\r
-\r
- sb_end:\r
- for ( ; i < n; i++) {\r
- r = add_code_range_to_buf(&(cc->mbuf),\r
- ONIGENC_CODE_RANGE_FROM(mbr, i),\r
- ONIGENC_CODE_RANGE_TO(mbr, i));\r
- if (r != 0) return r;\r
- }\r
- }\r
- else {\r
- OnigCodePoint prev = 0;\r
-\r
- for (i = 0; i < n; i++) {\r
- for (j = prev;\r
- j < ONIGENC_CODE_RANGE_FROM(mbr, i); j++) {\r
- if (j >= sb_out) {\r
- goto sb_end2;\r
- }\r
- BITSET_SET_BIT(cc->bs, j);\r
- }\r
- prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;\r
- }\r
- for (j = prev; j < sb_out; j++) {\r
- BITSET_SET_BIT(cc->bs, j);\r
- }\r
-\r
- sb_end2:\r
- prev = sb_out;\r
-\r
- for (i = 0; i < n; i++) {\r
- if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) {\r
- r = add_code_range_to_buf(&(cc->mbuf), prev,\r
- ONIGENC_CODE_RANGE_FROM(mbr, i) - 1);\r
- if (r != 0) return r;\r
- }\r
- prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;\r
- }\r
- if (prev < 0x7fffffff) {\r
- r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff);\r
- if (r != 0) return r;\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static int\r
-add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env)\r
-{\r
- int c, r;\r
- const OnigCodePoint *ranges;\r
- OnigCodePoint sb_out;\r
- OnigEncoding enc = env->enc;\r
-\r
- r = ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, &sb_out, &ranges);\r
- if (r == 0) {\r
- return add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sb_out, ranges);\r
- }\r
- else if (r != ONIG_NO_SUPPORT_CONFIG) {\r
- return r;\r
- }\r
-\r
- r = 0;\r
- switch (ctype) {\r
- case ONIGENC_CTYPE_ALPHA:\r
- case ONIGENC_CTYPE_BLANK:\r
- case ONIGENC_CTYPE_CNTRL:\r
- case ONIGENC_CTYPE_DIGIT:\r
- case ONIGENC_CTYPE_LOWER:\r
- case ONIGENC_CTYPE_PUNCT:\r
- case ONIGENC_CTYPE_SPACE:\r
- case ONIGENC_CTYPE_UPPER:\r
- case ONIGENC_CTYPE_XDIGIT:\r
- case ONIGENC_CTYPE_ASCII:\r
- case ONIGENC_CTYPE_ALNUM:\r
- if (not != 0) {\r
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
- if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
- BITSET_SET_BIT(cc->bs, c);\r
- }\r
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);\r
- }\r
- else {\r
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
- if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
- BITSET_SET_BIT(cc->bs, c);\r
- }\r
- }\r
- break;\r
-\r
- case ONIGENC_CTYPE_GRAPH:\r
- case ONIGENC_CTYPE_PRINT:\r
- if (not != 0) {\r
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
- if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
- BITSET_SET_BIT(cc->bs, c);\r
- }\r
- }\r
- else {\r
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
- if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))\r
- BITSET_SET_BIT(cc->bs, c);\r
- }\r
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);\r
- }\r
- break;\r
-\r
- case ONIGENC_CTYPE_WORD:\r
- if (not == 0) {\r
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
- if (IS_CODE_SB_WORD(enc, c)) BITSET_SET_BIT(cc->bs, c);\r
- }\r
- ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);\r
- }\r
- else {\r
- for (c = 0; c < SINGLE_BYTE_SIZE; c++) {\r
- if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* check invalid code point */\r
- && ! ONIGENC_IS_CODE_WORD(enc, c))\r
- BITSET_SET_BIT(cc->bs, c);\r
- }\r
- }\r
- break;\r
-\r
- default:\r
- return ONIGERR_PARSER_BUG;\r
- break;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-parse_posix_bracket(CClassNode* cc, UChar** src, UChar* end, ScanEnv* env)\r
-{\r
-#define POSIX_BRACKET_CHECK_LIMIT_LENGTH 20\r
-#define POSIX_BRACKET_NAME_MIN_LEN 4\r
-\r
- static PosixBracketEntryType PBS[] = {\r
- { (UChar* )"alnum", ONIGENC_CTYPE_ALNUM, 5 },\r
- { (UChar* )"alpha", ONIGENC_CTYPE_ALPHA, 5 },\r
- { (UChar* )"blank", ONIGENC_CTYPE_BLANK, 5 },\r
- { (UChar* )"cntrl", ONIGENC_CTYPE_CNTRL, 5 },\r
- { (UChar* )"digit", ONIGENC_CTYPE_DIGIT, 5 },\r
- { (UChar* )"graph", ONIGENC_CTYPE_GRAPH, 5 },\r
- { (UChar* )"lower", ONIGENC_CTYPE_LOWER, 5 },\r
- { (UChar* )"print", ONIGENC_CTYPE_PRINT, 5 },\r
- { (UChar* )"punct", ONIGENC_CTYPE_PUNCT, 5 },\r
- { (UChar* )"space", ONIGENC_CTYPE_SPACE, 5 },\r
- { (UChar* )"upper", ONIGENC_CTYPE_UPPER, 5 },\r
- { (UChar* )"xdigit", ONIGENC_CTYPE_XDIGIT, 6 },\r
- { (UChar* )"ascii", ONIGENC_CTYPE_ASCII, 5 },\r
- { (UChar* )"word", ONIGENC_CTYPE_WORD, 4 },\r
- { (UChar* )NULL, -1, 0 }\r
- };\r
-\r
- PosixBracketEntryType *pb;\r
- int not, i, r;\r
- OnigCodePoint c;\r
- OnigEncoding enc = env->enc;\r
- UChar *p = *src;\r
-\r
- if (PPEEK_IS('^')) {\r
- PINC_S;\r
- not = 1;\r
- }\r
- else\r
- not = 0;\r
-\r
- if (onigenc_strlen(enc, p, end) < POSIX_BRACKET_NAME_MIN_LEN + 3)\r
- goto not_posix_bracket;\r
-\r
- for (pb = PBS; IS_NOT_NULL(pb->name); pb++) {\r
- if (onigenc_with_ascii_strncmp(enc, p, end, pb->name, pb->len) == 0) {\r
- p = (UChar* )onigenc_step(enc, p, end, pb->len);\r
- if (onigenc_with_ascii_strncmp(enc, p, end, (UChar* )":]", 2) != 0)\r
- return ONIGERR_INVALID_POSIX_BRACKET_TYPE;\r
-\r
- r = add_ctype_to_cc(cc, pb->ctype, not, env);\r
- if (r != 0) return r;\r
-\r
- PINC_S; PINC_S;\r
- *src = p;\r
- return 0;\r
- }\r
- }\r
-\r
- not_posix_bracket:\r
- c = 0;\r
- i = 0;\r
- while (!PEND && ((c = PPEEK) != ':') && c != ']') {\r
- PINC_S;\r
- if (++i > POSIX_BRACKET_CHECK_LIMIT_LENGTH) break;\r
- }\r
- if (c == ':' && ! PEND) {\r
- PINC_S;\r
- if (! PEND) {\r
- PFETCH_S(c);\r
- if (c == ']')\r
- return ONIGERR_INVALID_POSIX_BRACKET_TYPE;\r
- }\r
- }\r
-\r
- return 1; /* 1: is not POSIX bracket, but no error. */\r
-}\r
-\r
-static int\r
-fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int r;\r
- OnigCodePoint c;\r
- OnigEncoding enc = env->enc;\r
- UChar *prev, *start, *p = *src;\r
-\r
- r = 0;\r
- start = prev = p;\r
-\r
- while (!PEND) {\r
- prev = p;\r
- PFETCH_S(c);\r
- if (c == '}') {\r
- r = ONIGENC_PROPERTY_NAME_TO_CTYPE(enc, start, prev);\r
- if (r < 0) break;\r
-\r
- *src = p;\r
- return r;\r
- }\r
- else if (c == '(' || c == ')' || c == '{' || c == '|') {\r
- r = ONIGERR_INVALID_CHAR_PROPERTY_NAME;\r
- break;\r
- }\r
- }\r
-\r
- onig_scan_env_set_error_string(env, r, *src, prev);\r
- return r;\r
-}\r
-\r
-static int\r
-parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end,\r
- ScanEnv* env)\r
-{\r
- int r, ctype;\r
- CClassNode* cc;\r
-\r
- ctype = fetch_char_property_to_ctype(src, end, env);\r
- if (ctype < 0) return ctype;\r
-\r
- *np = node_new_cclass();\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- cc = NCCLASS(*np);\r
- r = add_ctype_to_cc(cc, ctype, 0, env);\r
- if (r != 0) return r;\r
- if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);\r
-\r
- return 0;\r
-}\r
-\r
-\r
-enum CCSTATE {\r
- CCS_VALUE,\r
- CCS_RANGE,\r
- CCS_COMPLETE,\r
- CCS_START\r
-};\r
-\r
-enum CCVALTYPE {\r
- CCV_SB,\r
- CCV_CODE_POINT,\r
- CCV_CLASS\r
-};\r
-\r
-static int\r
-next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type,\r
- enum CCSTATE* state, ScanEnv* env)\r
-{\r
- int r;\r
-\r
- if (*state == CCS_RANGE)\r
- return ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE;\r
-\r
- if (*state == CCS_VALUE && *type != CCV_CLASS) {\r
- if (*type == CCV_SB)\r
- BITSET_SET_BIT(cc->bs, (int )(*vs));\r
- else if (*type == CCV_CODE_POINT) {\r
- r = add_code_range(&(cc->mbuf), env, *vs, *vs);\r
- if (r < 0) return r;\r
- }\r
- }\r
-\r
- *state = CCS_VALUE;\r
- *type = CCV_CLASS;\r
- return 0;\r
-}\r
-\r
-static int\r
-next_state_val(CClassNode* cc, OnigCodePoint *vs, OnigCodePoint v,\r
- int* vs_israw, int v_israw,\r
- enum CCVALTYPE intype, enum CCVALTYPE* type,\r
- enum CCSTATE* state, ScanEnv* env)\r
-{\r
- int r;\r
-\r
- switch (*state) {\r
- case CCS_VALUE:\r
- if (*type == CCV_SB)\r
- BITSET_SET_BIT(cc->bs, (int )(*vs));\r
- else if (*type == CCV_CODE_POINT) {\r
- r = add_code_range(&(cc->mbuf), env, *vs, *vs);\r
- if (r < 0) return r;\r
- }\r
- break;\r
-\r
- case CCS_RANGE:\r
- if (intype == *type) {\r
- if (intype == CCV_SB) {\r
- if (*vs > 0xff || v > 0xff)\r
- return ONIGERR_INVALID_CODE_POINT_VALUE;\r
-\r
- if (*vs > v) {\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
- goto ccs_range_end;\r
- else\r
- return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
- }\r
- bitset_set_range(cc->bs, (int )*vs, (int )v);\r
- }\r
- else {\r
- r = add_code_range(&(cc->mbuf), env, *vs, v);\r
- if (r < 0) return r;\r
- }\r
- }\r
- else {\r
-#if 0\r
- if (intype == CCV_CODE_POINT && *type == CCV_SB) {\r
-#endif\r
- if (*vs > v) {\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))\r
- goto ccs_range_end;\r
- else\r
- return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;\r
- }\r
- bitset_set_range(cc->bs, (int )*vs, (int )(v < 0xff ? v : 0xff));\r
- r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*vs, v);\r
- if (r < 0) return r;\r
-#if 0\r
- }\r
- else\r
- return ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE;\r
-#endif\r
- }\r
- ccs_range_end:\r
- *state = CCS_COMPLETE;\r
- break;\r
-\r
- case CCS_COMPLETE:\r
- case CCS_START:\r
- *state = CCS_VALUE;\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- *vs_israw = v_israw;\r
- *vs = v;\r
- *type = intype;\r
- return 0;\r
-}\r
-\r
-static int\r
-code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,\r
- ScanEnv* env)\r
-{\r
- int in_esc;\r
- OnigCodePoint code;\r
- OnigEncoding enc = env->enc;\r
- UChar* p = from;\r
-\r
- in_esc = 0;\r
- while (! PEND) {\r
- if (ignore_escaped && in_esc) {\r
- in_esc = 0;\r
- }\r
- else {\r
- PFETCH_S(code);\r
- if (code == c) return 1;\r
- if (code == MC_ESC(env->syntax)) in_esc = 1;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end,\r
- ScanEnv* env)\r
-{\r
- int r, neg, len, fetched, and_start;\r
- OnigCodePoint v, vs;\r
- UChar *p;\r
- Node* node;\r
- CClassNode *cc, *prev_cc;\r
- CClassNode work_cc;\r
-\r
- enum CCSTATE state;\r
- enum CCVALTYPE val_type, in_type;\r
- int val_israw, in_israw;\r
-\r
- prev_cc = (CClassNode* )NULL;\r
- *np = NULL_NODE;\r
- r = fetch_token_in_cc(tok, src, end, env);\r
- if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) {\r
- neg = 1;\r
- r = fetch_token_in_cc(tok, src, end, env);\r
- }\r
- else {\r
- neg = 0;\r
- }\r
-\r
- if (r < 0) return r;\r
- if (r == TK_CC_CLOSE) {\r
- if (! code_exist_check((OnigCodePoint )']',\r
- *src, env->pattern_end, 1, env))\r
- return ONIGERR_EMPTY_CHAR_CLASS;\r
-\r
- CC_ESC_WARN(env, (UChar* )"]");\r
- r = tok->type = TK_CHAR; /* allow []...] */\r
- }\r
-\r
- *np = node = node_new_cclass();\r
- CHECK_NULL_RETURN_MEMERR(node);\r
- cc = NCCLASS(node);\r
-\r
- and_start = 0;\r
- state = CCS_START;\r
- p = *src;\r
- while (r != TK_CC_CLOSE) {\r
- fetched = 0;\r
- switch (r) {\r
- case TK_CHAR:\r
- len = ONIGENC_CODE_TO_MBCLEN(env->enc, tok->u.c);\r
- if (len > 1) {\r
- in_type = CCV_CODE_POINT;\r
- }\r
- else if (len < 0) {\r
- r = len;\r
- goto err;\r
- }\r
- else {\r
- sb_char:\r
- in_type = CCV_SB;\r
- }\r
- v = (OnigCodePoint )tok->u.c;\r
- in_israw = 0;\r
- goto val_entry2;\r
- break;\r
-\r
- case TK_RAW_BYTE:\r
- /* tok->base != 0 : octal or hexadec. */\r
- if (! ONIGENC_IS_SINGLEBYTE(env->enc) && tok->base != 0) {\r
- UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
- UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;\r
- UChar* psave = p;\r
- int i, base = tok->base;\r
-\r
- buf[0] = (UChar)tok->u.c;\r
- for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) {\r
- r = fetch_token_in_cc(tok, &p, end, env);\r
- if (r < 0) goto err;\r
- if (r != TK_RAW_BYTE || tok->base != base) {\r
- fetched = 1;\r
- break;\r
- }\r
- buf[i] = (UChar)tok->u.c;\r
- }\r
-\r
- if (i < ONIGENC_MBC_MINLEN(env->enc)) {\r
- r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
- goto err;\r
- }\r
-\r
- len = enclen(env->enc, buf);\r
- if (i < len) {\r
- r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
- goto err;\r
- }\r
- else if (i > len) { /* fetch back */\r
- p = psave;\r
- for (i = 1; i < len; i++) {\r
- r = fetch_token_in_cc(tok, &p, end, env);\r
- }\r
- fetched = 0;\r
- }\r
-\r
- if (i == 1) {\r
- v = (OnigCodePoint )buf[0];\r
- goto raw_single;\r
- }\r
- else {\r
- v = ONIGENC_MBC_TO_CODE(env->enc, buf, bufe);\r
- in_type = CCV_CODE_POINT;\r
- }\r
- }\r
- else {\r
- v = (OnigCodePoint )tok->u.c;\r
- raw_single:\r
- in_type = CCV_SB;\r
- }\r
- in_israw = 1;\r
- goto val_entry2;\r
- break;\r
-\r
- case TK_CODE_POINT:\r
- v = tok->u.code;\r
- in_israw = 1;\r
- val_entry:\r
- len = ONIGENC_CODE_TO_MBCLEN(env->enc, v);\r
- if (len < 0) {\r
- r = len;\r
- goto err;\r
- }\r
- in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);\r
- val_entry2:\r
- r = next_state_val(cc, &vs, v, &val_israw, in_israw, in_type, &val_type,\r
- &state, env);\r
- if (r != 0) goto err;\r
- break;\r
-\r
- case TK_POSIX_BRACKET_OPEN:\r
- r = parse_posix_bracket(cc, &p, end, env);\r
- if (r < 0) goto err;\r
- if (r == 1) { /* is not POSIX bracket */\r
- CC_ESC_WARN(env, (UChar* )"[");\r
- p = tok->backp;\r
- v = (OnigCodePoint )tok->u.c;\r
- in_israw = 0;\r
- goto val_entry;\r
- }\r
- goto next_class;\r
- break;\r
-\r
- case TK_CHAR_TYPE:\r
- r = add_ctype_to_cc(cc, tok->u.prop.ctype, tok->u.prop.not, env);\r
- if (r != 0) return r;\r
-\r
- next_class:\r
- r = next_state_class(cc, &vs, &val_type, &state, env);\r
- if (r != 0) goto err;\r
- break;\r
-\r
- case TK_CHAR_PROPERTY:\r
- {\r
- int ctype;\r
-\r
- ctype = fetch_char_property_to_ctype(&p, end, env);\r
- if (ctype < 0) return ctype;\r
- r = add_ctype_to_cc(cc, ctype, tok->u.prop.not, env);\r
- if (r != 0) return r;\r
- goto next_class;\r
- }\r
- break;\r
-\r
- case TK_CC_RANGE:\r
- if (state == CCS_VALUE) {\r
- r = fetch_token_in_cc(tok, &p, end, env);\r
- if (r < 0) goto err;\r
- fetched = 1;\r
- if (r == TK_CC_CLOSE) { /* allow [x-] */\r
- range_end_val:\r
- v = (OnigCodePoint )'-';\r
- in_israw = 0;\r
- goto val_entry;\r
- }\r
- else if (r == TK_CC_AND) {\r
- CC_ESC_WARN(env, (UChar* )"-");\r
- goto range_end_val;\r
- }\r
- state = CCS_RANGE;\r
- }\r
- else if (state == CCS_START) {\r
- /* [-xa] is allowed */\r
- v = (OnigCodePoint )tok->u.c;\r
- in_israw = 0;\r
-\r
- r = fetch_token_in_cc(tok, &p, end, env);\r
- if (r < 0) goto err;\r
- fetched = 1;\r
- /* [--x] or [a&&-x] is warned. */\r
- if (r == TK_CC_RANGE || and_start != 0)\r
- CC_ESC_WARN(env, (UChar* )"-");\r
-\r
- goto val_entry;\r
- }\r
- else if (state == CCS_RANGE) {\r
- CC_ESC_WARN(env, (UChar* )"-");\r
- goto sb_char; /* [!--x] is allowed */\r
- }\r
- else { /* CCS_COMPLETE */\r
- r = fetch_token_in_cc(tok, &p, end, env);\r
- if (r < 0) goto err;\r
- fetched = 1;\r
- if (r == TK_CC_CLOSE) goto range_end_val; /* allow [a-b-] */\r
- else if (r == TK_CC_AND) {\r
- CC_ESC_WARN(env, (UChar* )"-");\r
- goto range_end_val;\r
- }\r
- \r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC)) {\r
- CC_ESC_WARN(env, (UChar* )"-");\r
- goto sb_char; /* [0-9-a] is allowed as [0-9\-a] */\r
- }\r
- r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;\r
- goto err;\r
- }\r
- break;\r
-\r
- case TK_CC_CC_OPEN: /* [ */\r
- {\r
- Node *anode;\r
- CClassNode* acc;\r
-\r
- r = parse_char_class(&anode, tok, &p, end, env);\r
- if (r != 0) goto cc_open_err;\r
- acc = NCCLASS(anode);\r
- r = or_cclass(cc, acc, env->enc);\r
-\r
- onig_node_free(anode);\r
- cc_open_err:\r
- if (r != 0) goto err;\r
- }\r
- break;\r
-\r
- case TK_CC_AND: /* && */\r
- {\r
- if (state == CCS_VALUE) {\r
- r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type,\r
- &val_type, &state, env);\r
- if (r != 0) goto err;\r
- }\r
- /* initialize local variables */\r
- and_start = 1;\r
- state = CCS_START;\r
-\r
- if (IS_NOT_NULL(prev_cc)) {\r
- r = and_cclass(prev_cc, cc, env->enc);\r
- if (r != 0) goto err;\r
- bbuf_free(cc->mbuf);\r
- }\r
- else {\r
- prev_cc = cc;\r
- cc = &work_cc;\r
- }\r
- initialize_cclass(cc);\r
- }\r
- break;\r
-\r
- case TK_EOT:\r
- r = ONIGERR_PREMATURE_END_OF_CHAR_CLASS;\r
- goto err;\r
- break;\r
- default:\r
- r = ONIGERR_PARSER_BUG;\r
- goto err;\r
- break;\r
- }\r
-\r
- if (fetched)\r
- r = tok->type;\r
- else {\r
- r = fetch_token_in_cc(tok, &p, end, env);\r
- if (r < 0) goto err;\r
- }\r
- }\r
-\r
- if (state == CCS_VALUE) {\r
- r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type,\r
- &val_type, &state, env);\r
- if (r != 0) goto err;\r
- }\r
-\r
- if (IS_NOT_NULL(prev_cc)) {\r
- r = and_cclass(prev_cc, cc, env->enc);\r
- if (r != 0) goto err;\r
- bbuf_free(cc->mbuf);\r
- cc = prev_cc;\r
- }\r
-\r
- if (neg != 0)\r
- NCCLASS_SET_NOT(cc);\r
- else\r
- NCCLASS_CLEAR_NOT(cc);\r
- if (IS_NCCLASS_NOT(cc) &&\r
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC)) {\r
- int is_empty;\r
-\r
- is_empty = (IS_NULL(cc->mbuf) ? 1 : 0);\r
- if (is_empty != 0)\r
- BITSET_IS_EMPTY(cc->bs, is_empty);\r
-\r
- if (is_empty == 0) {\r
-#define NEWLINE_CODE 0x0a\r
-\r
- if (ONIGENC_IS_CODE_NEWLINE(env->enc, NEWLINE_CODE)) {\r
- if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1)\r
- BITSET_SET_BIT(cc->bs, NEWLINE_CODE);\r
- else\r
- add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);\r
- }\r
- }\r
- }\r
- *src = p;\r
- return 0;\r
-\r
- err:\r
- if (cc != NCCLASS(*np))\r
- bbuf_free(cc->mbuf);\r
- onig_node_free(*np);\r
- return r;\r
-}\r
-\r
-static int parse_subexp(Node** top, OnigToken* tok, int term,\r
- UChar** src, UChar* end, ScanEnv* env);\r
-\r
-static int\r
-parse_enclose(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,\r
- ScanEnv* env)\r
-{\r
- int r, num;\r
- Node *target;\r
- OnigOptionType option;\r
- OnigCodePoint c;\r
- OnigEncoding enc = env->enc;\r
-\r
-#ifdef USE_NAMED_GROUP\r
- int list_capture;\r
-#endif\r
-\r
- UChar* p = *src;\r
- PFETCH_READY;\r
-\r
- *np = NULL;\r
- if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;\r
-\r
- option = env->option;\r
- if (PPEEK_IS('?') &&\r
- IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {\r
- PINC;\r
- if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
-\r
- PFETCH(c);\r
- switch (c) {\r
- case ':': /* (?:...) grouping only */\r
- group:\r
- r = fetch_token(tok, &p, end, env);\r
- if (r < 0) return r;\r
- r = parse_subexp(np, tok, term, &p, end, env);\r
- if (r < 0) return r;\r
- *src = p;\r
- return 1; /* group */\r
- break;\r
-\r
- case '=':\r
- *np = onig_node_new_anchor(ANCHOR_PREC_READ);\r
- break;\r
- case '!': /* preceding read */\r
- *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT);\r
- break;\r
- case '>': /* (?>...) stop backtrack */\r
- *np = node_new_enclose(ENCLOSE_STOP_BACKTRACK);\r
- break;\r
-\r
-#ifdef USE_NAMED_GROUP\r
- case '\'':\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
- goto named_group1;\r
- }\r
- else\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- break;\r
-#endif\r
-\r
- case '<': /* look behind (?<=...), (?<!...) */\r
- PFETCH(c);\r
- if (c == '=')\r
- *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND);\r
- else if (c == '!')\r
- *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT);\r
-#ifdef USE_NAMED_GROUP\r
- else {\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
- UChar *name;\r
- UChar *name_end;\r
-\r
- PUNFETCH;\r
- c = '<';\r
-\r
- named_group1:\r
- list_capture = 0;\r
-\r
- named_group2:\r
- name = p;\r
- r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num, 0);\r
- if (r < 0) return r;\r
-\r
- num = scan_env_add_mem_entry(env);\r
- if (num < 0) return num;\r
- if (list_capture != 0 && num >= (int )BIT_STATUS_BITS_NUM)\r
- return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;\r
-\r
- r = name_add(env->reg, name, name_end, num, env);\r
- if (r != 0) return r;\r
- *np = node_new_enclose_memory(env->option, 1);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- NENCLOSE(*np)->regnum = num;\r
- if (list_capture != 0)\r
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);\r
- env->num_named++;\r
- }\r
- else {\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- }\r
- }\r
-#else\r
- else {\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- }\r
-#endif\r
- break;\r
-\r
- case '@':\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {\r
-#ifdef USE_NAMED_GROUP\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {\r
- PFETCH(c);\r
- if (c == '<' || c == '\'') {\r
- list_capture = 1;\r
- goto named_group2; /* (?@<name>...) */\r
- }\r
- PUNFETCH;\r
- }\r
-#endif\r
- *np = node_new_enclose_memory(env->option, 0);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- num = scan_env_add_mem_entry(env);\r
- if (num < 0) {\r
- onig_node_free(*np);\r
- return num;\r
- }\r
- else if (num >= (int )BIT_STATUS_BITS_NUM) {\r
- onig_node_free(*np);\r
- return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY;\r
- }\r
- NENCLOSE(*np)->regnum = num;\r
- BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num);\r
- }\r
- else {\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- }\r
- break;\r
-\r
-#ifdef USE_POSIXLINE_OPTION\r
- case 'p':\r
-#endif\r
- case '-': case 'i': case 'm': case 's': case 'x':\r
- {\r
- int neg = 0;\r
-\r
- while (1) {\r
- switch (c) {\r
- case ':':\r
- case ')':\r
- break;\r
-\r
- case '-': neg = 1; break;\r
- case 'x': ONOFF(option, ONIG_OPTION_EXTEND, neg); break;\r
- case 'i': ONOFF(option, ONIG_OPTION_IGNORECASE, neg); break;\r
- case 's':\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {\r
- ONOFF(option, ONIG_OPTION_MULTILINE, neg);\r
- }\r
- else\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- break;\r
-\r
- case 'm':\r
- if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {\r
- ONOFF(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));\r
- }\r
- else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {\r
- ONOFF(option, ONIG_OPTION_MULTILINE, neg);\r
- }\r
- else\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- break;\r
-#ifdef USE_POSIXLINE_OPTION\r
- case 'p':\r
- ONOFF(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg);\r
- break;\r
-#endif\r
- default:\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- }\r
-\r
- if (c == ')') {\r
- *np = node_new_option(option);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- *src = p;\r
- return 2; /* option only */\r
- }\r
- else if (c == ':') {\r
- OnigOptionType prev = env->option;\r
-\r
- env->option = option;\r
- r = fetch_token(tok, &p, end, env);\r
- if (r < 0) return r;\r
- r = parse_subexp(&target, tok, term, &p, end, env);\r
- env->option = prev;\r
- if (r < 0) return r;\r
- *np = node_new_option(option);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- NENCLOSE(*np)->target = target;\r
- *src = p;\r
- return 0;\r
- }\r
-\r
- if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;\r
- PFETCH(c);\r
- }\r
- }\r
- break;\r
-\r
- default:\r
- return ONIGERR_UNDEFINED_GROUP_OPTION;\r
- }\r
- }\r
- else {\r
- if (ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_DONT_CAPTURE_GROUP))\r
- goto group;\r
-\r
- *np = node_new_enclose_memory(env->option, 0);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- num = scan_env_add_mem_entry(env);\r
- if (num < 0) return num;\r
- NENCLOSE(*np)->regnum = num;\r
- }\r
-\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- r = fetch_token(tok, &p, end, env);\r
- if (r < 0) return r;\r
- r = parse_subexp(&target, tok, term, &p, end, env);\r
- if (r < 0) return r;\r
-\r
- if (NTYPE(*np) == NT_ANCHOR)\r
- NANCHOR(*np)->target = target;\r
- else {\r
- NENCLOSE(*np)->target = target;\r
- if (NENCLOSE(*np)->type == ENCLOSE_MEMORY) {\r
- /* Don't move this to previous of parse_subexp() */\r
- r = scan_env_set_mem_node(env, NENCLOSE(*np)->regnum, *np);\r
- if (r != 0) return r;\r
- }\r
- }\r
-\r
- *src = p;\r
- return 0;\r
-}\r
-\r
-static const char* PopularQStr[] = {\r
- "?", "*", "+", "??", "*?", "+?"\r
-};\r
-\r
-static const char* ReduceQStr[] = {\r
- "", "", "*", "*?", "??", "+ and ??", "+? and ?"\r
-};\r
-\r
-static int\r
-set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)\r
-{\r
- QtfrNode* qn;\r
-\r
- qn = NQTFR(qnode);\r
- if (qn->lower == 1 && qn->upper == 1) {\r
- return 1;\r
- }\r
-\r
- switch (NTYPE(target)) {\r
- case NT_STR:\r
- if (! group) {\r
- StrNode* sn = NSTR(target);\r
- if (str_node_can_be_split(sn, env->enc)) {\r
- Node* n = str_node_split_last_char(sn, env->enc);\r
- if (IS_NOT_NULL(n)) {\r
- qn->target = n;\r
- return 2;\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case NT_QTFR:\r
- { /* check redundant double repeat. */\r
- /* verbose warn (?:.?)? etc... but not warn (.?)? etc... */\r
- QtfrNode* qnt = NQTFR(target);\r
- int nestq_num = popular_quantifier_num(qn);\r
- int targetq_num = popular_quantifier_num(qnt);\r
-\r
-#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR\r
- if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) &&\r
- IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {\r
- UChar buf[WARN_BUFSIZE];\r
-\r
- switch(ReduceTypeTable[targetq_num][nestq_num]) {\r
- case RQ_ASIS:\r
- break;\r
-\r
- case RQ_DEL:\r
- if (onig_verb_warn != onig_null_warn) {\r
- onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,\r
- env->pattern, env->pattern_end,\r
- (UChar* )"redundant nested repeat operator");\r
- (*onig_verb_warn)((char* )buf);\r
- }\r
- goto warn_exit;\r
- break;\r
-\r
- default:\r
- if (onig_verb_warn != onig_null_warn) {\r
- onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,\r
- env->pattern, env->pattern_end,\r
- (UChar* )"nested repeat operator %s and %s was replaced with '%s'",\r
- PopularQStr[targetq_num], PopularQStr[nestq_num],\r
- ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);\r
- (*onig_verb_warn)((char* )buf);\r
- }\r
- goto warn_exit;\r
- break;\r
- }\r
- }\r
-\r
- warn_exit:\r
-#endif\r
- if (targetq_num >= 0) {\r
- if (nestq_num >= 0) {\r
- onig_reduce_nested_quantifier(qnode, target);\r
- goto q_exit;\r
- }\r
- else if (targetq_num == 1 || targetq_num == 2) { /* * or + */\r
- /* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */\r
- if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) {\r
- qn->upper = (qn->lower == 0 ? 1 : qn->lower);\r
- }\r
- }\r
- }\r
- }\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- qn->target = target;\r
- q_exit:\r
- return 0;\r
-}\r
-\r
-\r
-#ifdef USE_SHARED_CCLASS_TABLE\r
-\r
-#define THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS 8\r
-\r
-/* for ctype node hash table */\r
-\r
-typedef struct {\r
- OnigEncoding enc;\r
- int not;\r
- int type;\r
-} type_cclass_key;\r
-\r
-static int type_cclass_cmp(type_cclass_key* x, type_cclass_key* y)\r
-{\r
- if (x->type != y->type) return 1;\r
- if (x->enc != y->enc) return 1;\r
- if (x->not != y->not) return 1;\r
- return 0;\r
-}\r
-\r
-static int type_cclass_hash(type_cclass_key* key)\r
-{\r
- int i, val;\r
- UChar *p;\r
-\r
- val = 0;\r
-\r
- p = (UChar* )&(key->enc);\r
- for (i = 0; i < (int )sizeof(key->enc); i++) {\r
- val = val * 997 + (int )*p++;\r
- }\r
-\r
- p = (UChar* )(&key->type);\r
- for (i = 0; i < (int )sizeof(key->type); i++) {\r
- val = val * 997 + (int )*p++;\r
- }\r
-\r
- val += key->not;\r
- return val + (val >> 5);\r
-}\r
-\r
-static struct st_hash_type type_type_cclass_hash = {\r
- type_cclass_cmp,\r
- type_cclass_hash,\r
-};\r
-\r
-static st_table* OnigTypeCClassTable;\r
-\r
-\r
-static int\r
-i_free_shared_class(type_cclass_key* key, Node* node, void* arg ARG_UNUSED)\r
-{\r
- if (IS_NOT_NULL(node)) {\r
- CClassNode* cc = NCCLASS(node);\r
- if (IS_NOT_NULL(cc->mbuf)) xfree(cc->mbuf);\r
- xfree(node);\r
- }\r
-\r
- if (IS_NOT_NULL(key)) xfree(key);\r
- return ST_DELETE;\r
-}\r
-\r
-extern int\r
-onig_free_shared_cclass_table(void)\r
-{\r
- if (IS_NOT_NULL(OnigTypeCClassTable)) {\r
- onig_st_foreach(OnigTypeCClassTable, i_free_shared_class, 0);\r
- onig_st_free_table(OnigTypeCClassTable);\r
- OnigTypeCClassTable = NULL;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-#endif /* USE_SHARED_CCLASS_TABLE */\r
-\r
-\r
-#ifndef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
-static int\r
-clear_not_flag_cclass(CClassNode* cc, OnigEncoding enc)\r
-{\r
- BBuf *tbuf;\r
- int r;\r
-\r
- if (IS_NCCLASS_NOT(cc)) {\r
- bitset_invert(cc->bs);\r
-\r
- if (! ONIGENC_IS_SINGLEBYTE(enc)) {\r
- r = not_code_range_buf(enc, cc->mbuf, &tbuf);\r
- if (r != 0) return r;\r
-\r
- bbuf_free(cc->mbuf);\r
- cc->mbuf = tbuf;\r
- }\r
-\r
- NCCLASS_CLEAR_NOT(cc);\r
- }\r
-\r
- return 0;\r
-}\r
-#endif /* CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS */\r
-\r
-typedef struct {\r
- ScanEnv* env;\r
- CClassNode* cc;\r
- Node* alt_root;\r
- Node** ptail;\r
-} IApplyCaseFoldArg;\r
-\r
-static int\r
-i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[],\r
- int to_len, void* arg)\r
-{\r
- IApplyCaseFoldArg* iarg;\r
- ScanEnv* env;\r
- CClassNode* cc;\r
- BitSetRef bs;\r
-\r
- iarg = (IApplyCaseFoldArg* )arg;\r
- env = iarg->env;\r
- cc = iarg->cc;\r
- bs = cc->bs;\r
-\r
- if (to_len == 1) {\r
- int is_in = onig_is_code_in_cc(env->enc, from, cc);\r
-#ifdef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
- if ((is_in != 0 && !IS_NCCLASS_NOT(cc)) ||\r
- (is_in == 0 && IS_NCCLASS_NOT(cc))) {\r
- if (ONIGENC_MBC_MINLEN(env->enc) > 1 || *to >= SINGLE_BYTE_SIZE) {\r
- add_code_range(&(cc->mbuf), env, *to, *to);\r
- }\r
- else {\r
- BITSET_SET_BIT(bs, *to);\r
- }\r
- }\r
-#else\r
- if (is_in != 0) {\r
- if (ONIGENC_MBC_MINLEN(env->enc) > 1 || *to >= SINGLE_BYTE_SIZE) {\r
- if (IS_NCCLASS_NOT(cc)) clear_not_flag_cclass(cc, env->enc);\r
- add_code_range(&(cc->mbuf), env, *to, *to);\r
- }\r
- else {\r
- if (IS_NCCLASS_NOT(cc)) {\r
- BITSET_CLEAR_BIT(bs, *to);\r
- }\r
- else\r
- BITSET_SET_BIT(bs, *to);\r
- }\r
- }\r
-#endif /* CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS */\r
- }\r
- else {\r
- int r, i, len;\r
- UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
- Node *snode = NULL_NODE;\r
-\r
- if (onig_is_code_in_cc(env->enc, from, cc)\r
-#ifdef CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS\r
- && !IS_NCCLASS_NOT(cc)\r
-#endif\r
- ) {\r
- for (i = 0; i < to_len; i++) {\r
- len = ONIGENC_CODE_TO_MBC(env->enc, to[i], buf);\r
- if (i == 0) {\r
- snode = onig_node_new_str(buf, buf + len);\r
- CHECK_NULL_RETURN_MEMERR(snode);\r
-\r
- /* char-class expanded multi-char only\r
- compare with string folded at match time. */\r
- NSTRING_SET_AMBIG(snode);\r
- }\r
- else {\r
- r = onig_node_str_cat(snode, buf, buf + len);\r
- if (r < 0) {\r
- onig_node_free(snode);\r
- return r;\r
- }\r
- }\r
- }\r
-\r
- *(iarg->ptail) = onig_node_new_alt(snode, NULL_NODE);\r
- CHECK_NULL_RETURN_MEMERR(*(iarg->ptail));\r
- iarg->ptail = &(NCDR((*(iarg->ptail))));\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static int\r
-parse_exp(Node** np, OnigToken* tok, int term,\r
- UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int r, len, group = 0;\r
- Node* qn;\r
- Node** targetp;\r
-\r
- *np = NULL;\r
- if (tok->type == (enum TokenSyms )term)\r
- goto end_of_token;\r
-\r
- switch (tok->type) {\r
- case TK_ALT:\r
- case TK_EOT:\r
- end_of_token:\r
- *np = node_new_empty();\r
- return tok->type;\r
- break;\r
-\r
- case TK_SUBEXP_OPEN:\r
- r = parse_enclose(np, tok, TK_SUBEXP_CLOSE, src, end, env);\r
- if (r < 0) return r;\r
- if (r == 1) group = 1;\r
- else if (r == 2) { /* option only */\r
- Node* target;\r
- OnigOptionType prev = env->option;\r
-\r
- env->option = NENCLOSE(*np)->option;\r
- r = fetch_token(tok, src, end, env);\r
- if (r < 0) return r;\r
- r = parse_subexp(&target, tok, term, src, end, env);\r
- env->option = prev;\r
- if (r < 0) return r;\r
- NENCLOSE(*np)->target = target; \r
- return tok->type;\r
- }\r
- break;\r
-\r
- case TK_SUBEXP_CLOSE:\r
- if (! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP))\r
- return ONIGERR_UNMATCHED_CLOSE_PARENTHESIS;\r
-\r
- if (tok->escaped) goto tk_raw_byte;\r
- else goto tk_byte;\r
- break;\r
-\r
- case TK_STRING:\r
- tk_byte:\r
- {\r
- *np = node_new_str(tok->backp, *src);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
-\r
- while (1) {\r
- r = fetch_token(tok, src, end, env);\r
- if (r < 0) return r;\r
- if (r != TK_STRING) break;\r
-\r
- r = onig_node_str_cat(*np, tok->backp, *src);\r
- if (r < 0) return r;\r
- }\r
-\r
- string_end:\r
- targetp = np;\r
- goto repeat;\r
- }\r
- break;\r
-\r
- case TK_RAW_BYTE:\r
- tk_raw_byte:\r
- {\r
- *np = node_new_str_raw_char((UChar )tok->u.c);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- len = 1;\r
- while (1) {\r
- if (len >= ONIGENC_MBC_MINLEN(env->enc)) {\r
- if (len == enclen(env->enc, NSTR(*np)->s)) {\r
- r = fetch_token(tok, src, end, env);\r
- NSTRING_CLEAR_RAW(*np);\r
- goto string_end;\r
- }\r
- }\r
-\r
- r = fetch_token(tok, src, end, env);\r
- if (r < 0) return r;\r
- if (r != TK_RAW_BYTE) {\r
- /* Don't use this, it is wrong for little endian encodings. */\r
-#ifdef USE_PAD_TO_SHORT_BYTE_CHAR\r
- int rem;\r
- if (len < ONIGENC_MBC_MINLEN(env->enc)) {\r
- rem = ONIGENC_MBC_MINLEN(env->enc) - len;\r
- (void )node_str_head_pad(NSTR(*np), rem, (UChar )0);\r
- if (len + rem == enclen(env->enc, NSTR(*np)->s)) {\r
- NSTRING_CLEAR_RAW(*np);\r
- goto string_end;\r
- }\r
- }\r
-#endif\r
- return ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;\r
- }\r
-\r
- r = node_str_cat_char(*np, (UChar )tok->u.c);\r
- if (r < 0) return r;\r
-\r
- len++;\r
- }\r
- }\r
- break;\r
-\r
- case TK_CODE_POINT:\r
- {\r
- UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];\r
- int num = ONIGENC_CODE_TO_MBC(env->enc, tok->u.code, buf);\r
- if (num < 0) return num;\r
-#ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG\r
- *np = node_new_str_raw(buf, buf + num);\r
-#else\r
- *np = node_new_str(buf, buf + num);\r
-#endif\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- }\r
- break;\r
-\r
- case TK_QUOTE_OPEN:\r
- {\r
- OnigCodePoint end_op[2];\r
- UChar *qstart, *qend, *nextp;\r
-\r
- end_op[0] = (OnigCodePoint )MC_ESC(env->syntax);\r
- end_op[1] = (OnigCodePoint )'E';\r
- qstart = *src;\r
- qend = find_str_position(end_op, 2, qstart, end, &nextp, env->enc);\r
- if (IS_NULL(qend)) {\r
- nextp = qend = end;\r
- }\r
- *np = node_new_str(qstart, qend);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- *src = nextp;\r
- }\r
- break;\r
-\r
- case TK_CHAR_TYPE:\r
- {\r
- switch (tok->u.prop.ctype) {\r
- case ONIGENC_CTYPE_WORD:\r
- *np = node_new_ctype(tok->u.prop.ctype, tok->u.prop.not);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- break;\r
-\r
- case ONIGENC_CTYPE_SPACE:\r
- case ONIGENC_CTYPE_DIGIT:\r
- case ONIGENC_CTYPE_XDIGIT:\r
- {\r
- CClassNode* cc;\r
-\r
-#ifdef USE_SHARED_CCLASS_TABLE\r
- const OnigCodePoint *mbr;\r
- OnigCodePoint sb_out;\r
-\r
- r = ONIGENC_GET_CTYPE_CODE_RANGE(env->enc, tok->u.prop.ctype,\r
- &sb_out, &mbr);\r
- if (r == 0 &&\r
- ONIGENC_CODE_RANGE_NUM(mbr)\r
- >= THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS) {\r
- type_cclass_key key;\r
- type_cclass_key* new_key;\r
-\r
- key.enc = env->enc;\r
- key.not = tok->u.prop.not;\r
- key.type = tok->u.prop.ctype;\r
-\r
- THREAD_ATOMIC_START;\r
-\r
- if (IS_NULL(OnigTypeCClassTable)) {\r
- OnigTypeCClassTable\r
- = onig_st_init_table_with_size(&type_type_cclass_hash, 10);\r
- if (IS_NULL(OnigTypeCClassTable)) {\r
- THREAD_ATOMIC_END;\r
- return ONIGERR_MEMORY;\r
- }\r
- }\r
- else {\r
- if (onig_st_lookup(OnigTypeCClassTable, (st_data_t )&key,\r
- (st_data_t* )np)) {\r
- THREAD_ATOMIC_END;\r
- break;\r
- }\r
- }\r
-\r
- *np = node_new_cclass_by_codepoint_range(tok->u.prop.not,\r
- sb_out, mbr);\r
- if (IS_NULL(*np)) {\r
- THREAD_ATOMIC_END;\r
- return ONIGERR_MEMORY;\r
- }\r
-\r
- cc = NCCLASS(*np);\r
- NCCLASS_SET_SHARE(cc);\r
- new_key = (type_cclass_key* )xmalloc(sizeof(type_cclass_key));\r
- xmemcpy(new_key, &key, sizeof(type_cclass_key));\r
- onig_st_add_direct(OnigTypeCClassTable, (st_data_t )new_key,\r
- (st_data_t )*np);\r
- \r
- THREAD_ATOMIC_END;\r
- }\r
- else {\r
-#endif\r
- *np = node_new_cclass();\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- cc = NCCLASS(*np);\r
- add_ctype_to_cc(cc, tok->u.prop.ctype, 0, env);\r
- if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);\r
-#ifdef USE_SHARED_CCLASS_TABLE\r
- }\r
-#endif\r
- }\r
- break;\r
-\r
- default:\r
- return ONIGERR_PARSER_BUG;\r
- break;\r
- }\r
- }\r
- break;\r
-\r
- case TK_CHAR_PROPERTY:\r
- r = parse_char_property(np, tok, src, end, env);\r
- if (r != 0) return r;\r
- break;\r
-\r
- case TK_CC_OPEN:\r
- {\r
- CClassNode* cc;\r
-\r
- r = parse_char_class(np, tok, src, end, env);\r
- if (r != 0) return r;\r
-\r
- cc = NCCLASS(*np);\r
- if (IS_IGNORECASE(env->option)) {\r
- IApplyCaseFoldArg iarg;\r
-\r
- iarg.env = env;\r
- iarg.cc = cc;\r
- iarg.alt_root = NULL_NODE;\r
- iarg.ptail = &(iarg.alt_root);\r
-\r
- r = ONIGENC_APPLY_ALL_CASE_FOLD(env->enc, env->case_fold_flag,\r
- i_apply_case_fold, &iarg);\r
- if (r != 0) {\r
- onig_node_free(iarg.alt_root);\r
- return r;\r
- }\r
- if (IS_NOT_NULL(iarg.alt_root)) {\r
- Node* work = onig_node_new_alt(*np, iarg.alt_root);\r
- if (IS_NULL(work)) {\r
- onig_node_free(iarg.alt_root);\r
- return ONIGERR_MEMORY;\r
- }\r
- *np = work;\r
- }\r
- }\r
- }\r
- break;\r
-\r
- case TK_ANYCHAR:\r
- *np = node_new_anychar();\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- break;\r
-\r
- case TK_ANYCHAR_ANYTIME:\r
- *np = node_new_anychar();\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- qn = node_new_quantifier(0, REPEAT_INFINITE, 0);\r
- CHECK_NULL_RETURN_MEMERR(qn);\r
- NQTFR(qn)->target = *np;\r
- *np = qn;\r
- break;\r
-\r
- case TK_BACKREF:\r
- len = tok->u.backref.num;\r
- *np = node_new_backref(len,\r
- (len > 1 ? tok->u.backref.refs : &(tok->u.backref.ref1)),\r
- tok->u.backref.by_name,\r
-#ifdef USE_BACKREF_WITH_LEVEL\r
- tok->u.backref.exist_level,\r
- tok->u.backref.level,\r
-#endif\r
- env);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- break;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
- case TK_CALL:\r
- {\r
- int gnum = tok->u.call.gnum;\r
-\r
- if (gnum < 0) {\r
- gnum = BACKREF_REL_TO_ABS(gnum, env);\r
- if (gnum <= 0)\r
- return ONIGERR_INVALID_BACKREF;\r
- }\r
- *np = node_new_call(tok->u.call.name, tok->u.call.name_end, gnum);\r
- CHECK_NULL_RETURN_MEMERR(*np);\r
- env->num_call++;\r
- }\r
- break;\r
-#endif\r
-\r
- case TK_ANCHOR:\r
- *np = onig_node_new_anchor(tok->u.anchor);\r
- break;\r
-\r
- case TK_OP_REPEAT:\r
- case TK_INTERVAL:\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS)) {\r
- if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS))\r
- return ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED;\r
- else\r
- *np = node_new_empty();\r
- }\r
- else {\r
- goto tk_byte;\r
- }\r
- break;\r
-\r
- default:\r
- return ONIGERR_PARSER_BUG;\r
- break;\r
- }\r
-\r
- {\r
- targetp = np;\r
-\r
- re_entry:\r
- r = fetch_token(tok, src, end, env);\r
- if (r < 0) return r;\r
-\r
- repeat:\r
- if (r == TK_OP_REPEAT || r == TK_INTERVAL) {\r
- if (is_invalid_quantifier_target(*targetp))\r
- return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID;\r
-\r
- qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper,\r
- (r == TK_INTERVAL ? 1 : 0));\r
- CHECK_NULL_RETURN_MEMERR(qn);\r
- NQTFR(qn)->greedy = tok->u.repeat.greedy;\r
- r = set_quantifier(qn, *targetp, group, env);\r
- if (r < 0) {\r
- onig_node_free(qn);\r
- return r;\r
- }\r
-\r
- if (tok->u.repeat.possessive != 0) {\r
- Node* en;\r
- en = node_new_enclose(ENCLOSE_STOP_BACKTRACK);\r
- if (IS_NULL(en)) {\r
- onig_node_free(qn);\r
- return ONIGERR_MEMORY;\r
- }\r
- NENCLOSE(en)->target = qn;\r
- qn = en;\r
- }\r
-\r
- if (r == 0) {\r
- *targetp = qn;\r
- }\r
- else if (r == 1) {\r
- onig_node_free(qn);\r
- }\r
- else if (r == 2) { /* split case: /abc+/ */\r
- Node *tmp;\r
-\r
- *targetp = node_new_list(*targetp, NULL);\r
- if (IS_NULL(*targetp)) {\r
- onig_node_free(qn);\r
- return ONIGERR_MEMORY;\r
- }\r
- tmp = NCDR(*targetp) = node_new_list(qn, NULL);\r
- if (IS_NULL(tmp)) {\r
- onig_node_free(qn);\r
- return ONIGERR_MEMORY;\r
- }\r
- targetp = &(NCAR(tmp));\r
- }\r
- goto re_entry;\r
- }\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-parse_branch(Node** top, OnigToken* tok, int term,\r
- UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int r;\r
- Node *node, **headp;\r
-\r
- *top = NULL;\r
- r = parse_exp(&node, tok, term, src, end, env);\r
- if (r < 0) return r;\r
-\r
- if (r == TK_EOT || r == term || r == TK_ALT) {\r
- *top = node;\r
- }\r
- else {\r
- *top = node_new_list(node, NULL);\r
- headp = &(NCDR(*top));\r
- while (r != TK_EOT && r != term && r != TK_ALT) {\r
- r = parse_exp(&node, tok, term, src, end, env);\r
- if (r < 0) return r;\r
-\r
- if (NTYPE(node) == NT_LIST) {\r
- *headp = node;\r
- while (IS_NOT_NULL(NCDR(node))) node = NCDR(node);\r
- headp = &(NCDR(node));\r
- }\r
- else {\r
- *headp = node_new_list(node, NULL);\r
- headp = &(NCDR(*headp));\r
- }\r
- }\r
- }\r
-\r
- return r;\r
-}\r
-\r
-/* term_tok: TK_EOT or TK_SUBEXP_CLOSE */\r
-static int\r
-parse_subexp(Node** top, OnigToken* tok, int term,\r
- UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int r;\r
- Node *node, **headp;\r
-\r
- *top = NULL;\r
- r = parse_branch(&node, tok, term, src, end, env);\r
- if (r < 0) {\r
- onig_node_free(node);\r
- return r;\r
- }\r
-\r
- if (r == term) {\r
- *top = node;\r
- }\r
- else if (r == TK_ALT) {\r
- *top = onig_node_new_alt(node, NULL);\r
- headp = &(NCDR(*top));\r
- while (r == TK_ALT) {\r
- r = fetch_token(tok, src, end, env);\r
- if (r < 0) return r;\r
- r = parse_branch(&node, tok, term, src, end, env);\r
- if (r < 0) return r;\r
-\r
- *headp = onig_node_new_alt(node, NULL);\r
- headp = &(NCDR(*headp));\r
- }\r
-\r
- if (tok->type != (enum TokenSyms )term)\r
- goto err;\r
- }\r
- else {\r
- err:\r
- if (term == TK_SUBEXP_CLOSE)\r
- return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;\r
- else\r
- return ONIGERR_PARSER_BUG;\r
- }\r
-\r
- return r;\r
-}\r
-\r
-static int\r
-parse_regexp(Node** top, UChar** src, UChar* end, ScanEnv* env)\r
-{\r
- int r;\r
- OnigToken tok;\r
-\r
- r = fetch_token(&tok, src, end, env);\r
- if (r < 0) return r;\r
- r = parse_subexp(top, &tok, TK_EOT, src, end, env);\r
- if (r < 0) return r;\r
- return 0;\r
-}\r
-\r
-extern int\r
-onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end,\r
- regex_t* reg, ScanEnv* env)\r
-{\r
- int r;\r
- UChar* p;\r
-\r
-#ifdef USE_NAMED_GROUP\r
- names_clear(reg);\r
-#endif\r
-\r
- scan_env_clear(env);\r
- env->option = reg->options;\r
- env->case_fold_flag = reg->case_fold_flag;\r
- env->enc = reg->enc;\r
- env->syntax = reg->syntax;\r
- env->pattern = (UChar* )pattern;\r
- env->pattern_end = (UChar* )end;\r
- env->reg = reg;\r
-\r
- *root = NULL;\r
- p = (UChar* )pattern;\r
- r = parse_regexp(root, &p, (UChar* )end, env);\r
- reg->num_mem = env->num_mem;\r
- return r;\r
-}\r
-\r
-extern void\r
-onig_scan_env_set_error_string(ScanEnv* env, int ecode ARG_UNUSED,\r
- UChar* arg, UChar* arg_end)\r
-{\r
- env->error = arg;\r
- env->error_end = arg_end;\r
-}\r
+++ /dev/null
-#ifndef REGPARSE_H\r
-#define REGPARSE_H\r
-/**********************************************************************\r
- regparse.h - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- * \r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-/* node type */\r
-#define NT_STR 0\r
-#define NT_CCLASS 1\r
-#define NT_CTYPE 2\r
-#define NT_CANY 3\r
-#define NT_BREF 4\r
-#define NT_QTFR 5\r
-#define NT_ENCLOSE 6\r
-#define NT_ANCHOR 7\r
-#define NT_LIST 8\r
-#define NT_ALT 9\r
-#define NT_CALL 10\r
-\r
-/* node type bit */\r
-#define NTYPE2BIT(type) (1<<(type))\r
-\r
-#define BIT_NT_STR NTYPE2BIT(NT_STR)\r
-#define BIT_NT_CCLASS NTYPE2BIT(NT_CCLASS)\r
-#define BIT_NT_CTYPE NTYPE2BIT(NT_CTYPE)\r
-#define BIT_NT_CANY NTYPE2BIT(NT_CANY)\r
-#define BIT_NT_BREF NTYPE2BIT(NT_BREF)\r
-#define BIT_NT_QTFR NTYPE2BIT(NT_QTFR)\r
-#define BIT_NT_ENCLOSE NTYPE2BIT(NT_ENCLOSE)\r
-#define BIT_NT_ANCHOR NTYPE2BIT(NT_ANCHOR)\r
-#define BIT_NT_LIST NTYPE2BIT(NT_LIST)\r
-#define BIT_NT_ALT NTYPE2BIT(NT_ALT)\r
-#define BIT_NT_CALL NTYPE2BIT(NT_CALL)\r
-\r
-#define IS_NODE_TYPE_SIMPLE(type) \\r
- ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\\r
- BIT_NT_CANY | BIT_NT_BREF)) != 0)\r
-\r
-#define NTYPE(node) ((node)->u.base.type)\r
-#define SET_NTYPE(node, ntype) (node)->u.base.type = (ntype)\r
-\r
-#define NSTR(node) (&((node)->u.str))\r
-#define NCCLASS(node) (&((node)->u.cclass))\r
-#define NCTYPE(node) (&((node)->u.ctype))\r
-#define NBREF(node) (&((node)->u.bref))\r
-#define NQTFR(node) (&((node)->u.qtfr))\r
-#define NENCLOSE(node) (&((node)->u.enclose))\r
-#define NANCHOR(node) (&((node)->u.anchor))\r
-#define NCONS(node) (&((node)->u.cons))\r
-#define NCALL(node) (&((node)->u.call))\r
-\r
-#define NCAR(node) (NCONS(node)->car)\r
-#define NCDR(node) (NCONS(node)->cdr)\r
-\r
-\r
-\r
-#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)\r
-#define ANCHOR_END_BUF_MASK (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)\r
-\r
-#define ENCLOSE_MEMORY (1<<0)\r
-#define ENCLOSE_OPTION (1<<1)\r
-#define ENCLOSE_STOP_BACKTRACK (1<<2)\r
-\r
-#define NODE_STR_MARGIN 16\r
-#define NODE_STR_BUF_SIZE 24 /* sizeof(CClassNode) - sizeof(int)*4 */\r
-#define NODE_BACKREFS_SIZE 6\r
-\r
-#define NSTR_RAW (1<<0) /* by backslashed number */\r
-#define NSTR_AMBIG (1<<1)\r
-#define NSTR_DONT_GET_OPT_INFO (1<<2)\r
-\r
-#define NSTRING_LEN(node) ((int)((node)->u.str.end - (node)->u.str.s))\r
-#define NSTRING_SET_RAW(node) (node)->u.str.flag |= NSTR_RAW\r
-#define NSTRING_CLEAR_RAW(node) (node)->u.str.flag &= ~NSTR_RAW\r
-#define NSTRING_SET_AMBIG(node) (node)->u.str.flag |= NSTR_AMBIG\r
-#define NSTRING_SET_DONT_GET_OPT_INFO(node) \\r
- (node)->u.str.flag |= NSTR_DONT_GET_OPT_INFO\r
-#define NSTRING_IS_RAW(node) (((node)->u.str.flag & NSTR_RAW) != 0)\r
-#define NSTRING_IS_AMBIG(node) (((node)->u.str.flag & NSTR_AMBIG) != 0)\r
-#define NSTRING_IS_DONT_GET_OPT_INFO(node) \\r
- (((node)->u.str.flag & NSTR_DONT_GET_OPT_INFO) != 0)\r
-\r
-#define BACKREFS_P(br) \\r
- (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);\r
-\r
-#define NQ_TARGET_ISNOT_EMPTY 0\r
-#define NQ_TARGET_IS_EMPTY 1\r
-#define NQ_TARGET_IS_EMPTY_MEM 2\r
-#define NQ_TARGET_IS_EMPTY_REC 3\r
-\r
-/* status bits */\r
-#define NST_MIN_FIXED (1<<0)\r
-#define NST_MAX_FIXED (1<<1)\r
-#define NST_CLEN_FIXED (1<<2)\r
-#define NST_MARK1 (1<<3)\r
-#define NST_MARK2 (1<<4)\r
-#define NST_MEM_BACKREFED (1<<5)\r
-#define NST_STOP_BT_SIMPLE_REPEAT (1<<6)\r
-#define NST_RECURSION (1<<7)\r
-#define NST_CALLED (1<<8)\r
-#define NST_ADDR_FIXED (1<<9)\r
-#define NST_NAMED_GROUP (1<<10)\r
-#define NST_NAME_REF (1<<11)\r
-#define NST_IN_REPEAT (1<<12) /* STK_REPEAT is nested in stack. */\r
-#define NST_NEST_LEVEL (1<<13)\r
-#define NST_BY_NUMBER (1<<14) /* {n,m} */\r
-\r
-#define SET_ENCLOSE_STATUS(node,f) (node)->u.enclose.state |= (f)\r
-#define CLEAR_ENCLOSE_STATUS(node,f) (node)->u.enclose.state &= ~(f)\r
-\r
-#define IS_ENCLOSE_CALLED(en) (((en)->state & NST_CALLED) != 0)\r
-#define IS_ENCLOSE_ADDR_FIXED(en) (((en)->state & NST_ADDR_FIXED) != 0)\r
-#define IS_ENCLOSE_RECURSION(en) (((en)->state & NST_RECURSION) != 0)\r
-#define IS_ENCLOSE_MARK1(en) (((en)->state & NST_MARK1) != 0)\r
-#define IS_ENCLOSE_MARK2(en) (((en)->state & NST_MARK2) != 0)\r
-#define IS_ENCLOSE_MIN_FIXED(en) (((en)->state & NST_MIN_FIXED) != 0)\r
-#define IS_ENCLOSE_MAX_FIXED(en) (((en)->state & NST_MAX_FIXED) != 0)\r
-#define IS_ENCLOSE_CLEN_FIXED(en) (((en)->state & NST_CLEN_FIXED) != 0)\r
-#define IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(en) \\r
- (((en)->state & NST_STOP_BT_SIMPLE_REPEAT) != 0)\r
-#define IS_ENCLOSE_NAMED_GROUP(en) (((en)->state & NST_NAMED_GROUP) != 0)\r
-\r
-#define SET_CALL_RECURSION(node) (node)->u.call.state |= NST_RECURSION\r
-#define IS_CALL_RECURSION(cn) (((cn)->state & NST_RECURSION) != 0)\r
-#define IS_CALL_NAME_REF(cn) (((cn)->state & NST_NAME_REF) != 0)\r
-#define IS_BACKREF_NAME_REF(bn) (((bn)->state & NST_NAME_REF) != 0)\r
-#define IS_BACKREF_NEST_LEVEL(bn) (((bn)->state & NST_NEST_LEVEL) != 0)\r
-#define IS_QUANTIFIER_IN_REPEAT(qn) (((qn)->state & NST_IN_REPEAT) != 0)\r
-#define IS_QUANTIFIER_BY_NUMBER(qn) (((qn)->state & NST_BY_NUMBER) != 0)\r
-\r
-#define CALLNODE_REFNUM_UNDEF -1\r
-\r
-typedef struct {\r
- NodeBase base;\r
- UChar* s;\r
- UChar* end;\r
- unsigned int flag;\r
- int capa; /* (allocated size - 1) or 0: use buf[] */\r
- UChar buf[NODE_STR_BUF_SIZE];\r
-} StrNode;\r
-\r
-typedef struct {\r
- NodeBase base;\r
- int state;\r
- struct _Node* target;\r
- int lower;\r
- int upper;\r
- int greedy;\r
- int target_empty_info;\r
- struct _Node* head_exact;\r
- struct _Node* next_head_exact;\r
- int is_refered; /* include called node. don't eliminate even if {0} */\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- int comb_exp_check_num; /* 1,2,3...: check, 0: no check */\r
-#endif\r
-} QtfrNode;\r
-\r
-typedef struct {\r
- NodeBase base;\r
- int state;\r
- int type;\r
- int regnum;\r
- OnigOptionType option;\r
- struct _Node* target;\r
- AbsAddrType call_addr;\r
- /* for multiple call reference */\r
- OnigDistance min_len; /* min length (byte) */\r
- OnigDistance max_len; /* max length (byte) */ \r
- int char_len; /* character length */\r
- int opt_count; /* referenced count in optimize_node_left() */\r
-} EncloseNode;\r
-\r
-#ifdef USE_SUBEXP_CALL\r
-\r
-typedef struct {\r
- int offset;\r
- struct _Node* target;\r
-} UnsetAddr;\r
-\r
-typedef struct {\r
- int num;\r
- int alloc;\r
- UnsetAddr* us;\r
-} UnsetAddrList;\r
-\r
-typedef struct {\r
- NodeBase base;\r
- int state;\r
- int group_num;\r
- UChar* name;\r
- UChar* name_end;\r
- struct _Node* target; /* EncloseNode : ENCLOSE_MEMORY */\r
- UnsetAddrList* unset_addr_list;\r
-} CallNode;\r
-\r
-#endif\r
-\r
-typedef struct {\r
- NodeBase base;\r
- int state;\r
- int back_num;\r
- int back_static[NODE_BACKREFS_SIZE];\r
- int* back_dynamic;\r
- int nest_level;\r
-} BRefNode;\r
-\r
-typedef struct {\r
- NodeBase base;\r
- int type;\r
- struct _Node* target;\r
- int char_len;\r
-} AnchorNode;\r
-\r
-typedef struct {\r
- NodeBase base;\r
- struct _Node* car;\r
- struct _Node* cdr;\r
-} ConsAltNode;\r
-\r
-typedef struct {\r
- NodeBase base;\r
- int ctype;\r
- int not;\r
-} CtypeNode;\r
-\r
-typedef struct _Node {\r
- union {\r
- NodeBase base;\r
- StrNode str;\r
- CClassNode cclass;\r
- QtfrNode qtfr;\r
- EncloseNode enclose;\r
- BRefNode bref;\r
- AnchorNode anchor;\r
- ConsAltNode cons;\r
- CtypeNode ctype;\r
-#ifdef USE_SUBEXP_CALL\r
- CallNode call;\r
-#endif\r
- } u;\r
-} Node;\r
-\r
-\r
-#define NULL_NODE ((Node* )0)\r
-\r
-#define SCANENV_MEMNODES_SIZE 8\r
-#define SCANENV_MEM_NODES(senv) \\r
- (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \\r
- (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)\r
-\r
-typedef struct {\r
- OnigOptionType option;\r
- OnigCaseFoldType case_fold_flag;\r
- OnigEncoding enc;\r
- OnigSyntaxType* syntax;\r
- BitStatusType capture_history;\r
- BitStatusType bt_mem_start;\r
- BitStatusType bt_mem_end;\r
- BitStatusType backrefed_mem;\r
- UChar* pattern;\r
- UChar* pattern_end;\r
- UChar* error;\r
- UChar* error_end;\r
- regex_t* reg; /* for reg->names only */\r
- int num_call;\r
-#ifdef USE_SUBEXP_CALL\r
- UnsetAddrList* unset_addr_list;\r
-#endif\r
- int num_mem;\r
-#ifdef USE_NAMED_GROUP\r
- int num_named;\r
-#endif\r
- int mem_alloc;\r
- Node* mem_nodes_static[SCANENV_MEMNODES_SIZE];\r
- Node** mem_nodes_dynamic;\r
-#ifdef USE_COMBINATION_EXPLOSION_CHECK\r
- int num_comb_exp_check;\r
- int comb_exp_max_regnum;\r
- int curr_max_regnum;\r
- int has_recursion;\r
-#endif\r
-} ScanEnv;\r
-\r
-\r
-#define IS_SYNTAX_OP(syn, opm) (((syn)->op & (opm)) != 0)\r
-#define IS_SYNTAX_OP2(syn, opm) (((syn)->op2 & (opm)) != 0)\r
-#define IS_SYNTAX_BV(syn, bvm) (((syn)->behavior & (bvm)) != 0)\r
-\r
-#ifdef USE_NAMED_GROUP\r
-typedef struct {\r
- int new_val;\r
-} GroupNumRemap;\r
-\r
-extern int onig_renumber_name_table P_((regex_t* reg, GroupNumRemap* map));\r
-#endif\r
-\r
-extern int onig_strncmp P_((const UChar* s1, const UChar* s2, int n));\r
-extern void onig_strcpy P_((UChar* dest, const UChar* src, const UChar* end));\r
-extern void onig_scan_env_set_error_string P_((ScanEnv* env, int ecode, UChar* arg, UChar* arg_end));\r
-extern int onig_scan_unsigned_number P_((UChar** src, const UChar* end, OnigEncoding enc));\r
-extern void onig_reduce_nested_quantifier P_((Node* pnode, Node* cnode));\r
-extern void onig_node_conv_to_str_node P_((Node* node, int raw));\r
-extern int onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end));\r
-extern int onig_node_str_set P_((Node* node, const UChar* s, const UChar* end));\r
-extern void onig_node_free P_((Node* node));\r
-extern Node* onig_node_new_enclose P_((int type));\r
-extern Node* onig_node_new_anchor P_((int type));\r
-extern Node* onig_node_new_str P_((const UChar* s, const UChar* end));\r
-extern Node* onig_node_new_list P_((Node* left, Node* right));\r
-extern Node* onig_node_list_add P_((Node* list, Node* x));\r
-extern Node* onig_node_new_alt P_((Node* left, Node* right));\r
-extern void onig_node_str_clear P_((Node* node));\r
-extern int onig_free_node_list P_((void));\r
-extern int onig_names_free P_((regex_t* reg));\r
-extern int onig_parse_make_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));\r
-extern int onig_free_shared_cclass_table P_((void));\r
-\r
-#ifdef ONIG_DEBUG\r
-#ifdef USE_NAMED_GROUP\r
-extern int onig_print_names(FILE*, regex_t*);\r
-#endif\r
-#endif\r
-\r
-#endif /* REGPARSE_H */\r
+++ /dev/null
-/**********************************************************************\r
- regposerr.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR> \r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-/*#include "config.h"*/\r
-#include "onigposix.h"\r
-\r
-#if 0\r
-#ifdef HAVE_STRING_H\r
-# include <string.h>\r
-#else\r
-# include <strings.h>\r
-#endif\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-# define ARG_UNUSED __attribute__ ((unused))\r
-#else\r
-# define ARG_UNUSED\r
-#endif\r
-\r
-static char* ESTRING[] = {\r
- NULL,\r
- "failed to match", /* REG_NOMATCH */\r
- "Invalid regular expression", /* REG_BADPAT */\r
- "invalid collating element referenced", /* REG_ECOLLATE */\r
- "invalid character class type referenced", /* REG_ECTYPE */\r
- "bad backslash-escape sequence", /* REG_EESCAPE */\r
- "invalid back reference number", /* REG_ESUBREG */\r
- "imbalanced [ and ]", /* REG_EBRACK */\r
- "imbalanced ( and )", /* REG_EPAREN */\r
- "imbalanced { and }", /* REG_EBRACE */\r
- "invalid repeat range {n,m}", /* REG_BADBR */\r
- "invalid range", /* REG_ERANGE */\r
- "Out of memory", /* REG_ESPACE */\r
- "? * + not preceded by valid regular expression", /* REG_BADRPT */\r
-\r
- /* Extended errors */\r
- "internal error", /* REG_EONIG_INTERNAL */\r
- "invalid wide char value", /* REG_EONIG_BADWC */\r
- "invalid argument", /* REG_EONIG_BADARG */\r
- "multi-thread error" /* REG_EONIG_THREAD */\r
-};\r
-\r
-//#include <stdio.h>\r
-\r
-\r
-extern size_t\r
-regerror(int posix_ecode, const regex_t* reg ARG_UNUSED, char* buf,\r
- size_t size)\r
-{\r
- char* s;\r
- char tbuf[35];\r
- size_t len;\r
-\r
- if (posix_ecode > 0\r
- && posix_ecode < (int )(sizeof(ESTRING) / sizeof(ESTRING[0]))) {\r
- s = ESTRING[posix_ecode];\r
- }\r
- else if (posix_ecode == 0) {\r
- s = "";\r
- }\r
- else {\r
- sprintf(tbuf, "undefined error code (%d)", posix_ecode);\r
- s = tbuf;\r
- }\r
-\r
- len = strlen_s(s, MAX_STRING_SIZE) + 1; /* use strlen() because s is ascii encoding. */\r
-\r
- if (buf != NULL && size > 0) {\r
- strncpy_s(buf, size, s, size - 1);\r
- buf[size - 1] = '\0';\r
- }\r
- return len;\r
-}\r
+++ /dev/null
-/**********************************************************************\r
- regposix.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#define regex_t onig_regex_t\r
-#include "regint.h"\r
-#undef regex_t\r
-#include "onigposix.h"\r
-\r
-#define ONIG_C(reg) ((onig_regex_t* )((reg)->onig))\r
-#define PONIG_C(reg) ((onig_regex_t** )(&(reg)->onig))\r
-\r
-/* #define ENC_STRING_LEN(enc,s,len) len = strlen(s) */\r
-#define ENC_STRING_LEN(enc,s,len) do { \\r
- if (ONIGENC_MBC_MINLEN(enc) == 1) { \\r
- UChar* tmps = (UChar* )(s); \\r
- while (*tmps != 0) tmps++; \\r
- len = (int)(tmps - (UChar* )(s)); \\r
- } \\r
- else { \\r
- len = onigenc_str_bytelen_null(enc, (UChar* )s); \\r
- } \\r
-} while(0)\r
-\r
-typedef struct {\r
- int onig_err;\r
- int posix_err;\r
-} O2PERR;\r
-\r
-static int\r
-onig2posix_error_code(int code)\r
-{\r
- static const O2PERR o2p[] = {\r
- { ONIG_MISMATCH, REG_NOMATCH },\r
- { ONIG_NO_SUPPORT_CONFIG, REG_EONIG_INTERNAL },\r
- { ONIGERR_MEMORY, REG_ESPACE },\r
- { ONIGERR_MATCH_STACK_LIMIT_OVER, REG_EONIG_INTERNAL },\r
- { ONIGERR_TYPE_BUG, REG_EONIG_INTERNAL },\r
- { ONIGERR_PARSER_BUG, REG_EONIG_INTERNAL },\r
- { ONIGERR_STACK_BUG, REG_EONIG_INTERNAL },\r
- { ONIGERR_UNDEFINED_BYTECODE, REG_EONIG_INTERNAL },\r
- { ONIGERR_UNEXPECTED_BYTECODE, REG_EONIG_INTERNAL },\r
- { ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED, REG_EONIG_BADARG },\r
- { ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR, REG_EONIG_BADARG },\r
- { ONIGERR_INVALID_ARGUMENT, REG_EONIG_BADARG },\r
- { ONIGERR_END_PATTERN_AT_LEFT_BRACE, REG_EBRACE },\r
- { ONIGERR_END_PATTERN_AT_LEFT_BRACKET, REG_EBRACK },\r
- { ONIGERR_EMPTY_CHAR_CLASS, REG_ECTYPE },\r
- { ONIGERR_PREMATURE_END_OF_CHAR_CLASS, REG_ECTYPE },\r
- { ONIGERR_END_PATTERN_AT_ESCAPE, REG_EESCAPE },\r
- { ONIGERR_END_PATTERN_AT_META, REG_EESCAPE },\r
- { ONIGERR_END_PATTERN_AT_CONTROL, REG_EESCAPE },\r
- { ONIGERR_META_CODE_SYNTAX, REG_BADPAT },\r
- { ONIGERR_CONTROL_CODE_SYNTAX, REG_BADPAT },\r
- { ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE, REG_ECTYPE },\r
- { ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE, REG_ECTYPE },\r
- { ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS, REG_ECTYPE },\r
- { ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED, REG_BADRPT },\r
- { ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID, REG_BADRPT },\r
- { ONIGERR_NESTED_REPEAT_OPERATOR, REG_BADRPT },\r
- { ONIGERR_UNMATCHED_CLOSE_PARENTHESIS, REG_EPAREN },\r
- { ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS, REG_EPAREN },\r
- { ONIGERR_END_PATTERN_IN_GROUP, REG_BADPAT },\r
- { ONIGERR_UNDEFINED_GROUP_OPTION, REG_BADPAT },\r
- { ONIGERR_INVALID_POSIX_BRACKET_TYPE, REG_BADPAT },\r
- { ONIGERR_INVALID_LOOK_BEHIND_PATTERN, REG_BADPAT },\r
- { ONIGERR_INVALID_REPEAT_RANGE_PATTERN, REG_BADPAT },\r
- { ONIGERR_TOO_BIG_NUMBER, REG_BADPAT },\r
- { ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE, REG_BADBR },\r
- { ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE, REG_BADBR },\r
- { ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS, REG_ECTYPE },\r
- { ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE, REG_ECTYPE },\r
- { ONIGERR_TOO_MANY_MULTI_BYTE_RANGES, REG_ECTYPE },\r
- { ONIGERR_TOO_SHORT_MULTI_BYTE_STRING, REG_BADPAT },\r
- { ONIGERR_TOO_BIG_BACKREF_NUMBER, REG_ESUBREG },\r
- { ONIGERR_INVALID_BACKREF, REG_ESUBREG },\r
- { ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED, REG_BADPAT },\r
- { ONIGERR_TOO_BIG_WIDE_CHAR_VALUE, REG_EONIG_BADWC },\r
- { ONIGERR_TOO_LONG_WIDE_CHAR_VALUE, REG_EONIG_BADWC },\r
- { ONIGERR_INVALID_CODE_POINT_VALUE, REG_EONIG_BADWC },\r
- { ONIGERR_EMPTY_GROUP_NAME, REG_BADPAT },\r
- { ONIGERR_INVALID_GROUP_NAME, REG_BADPAT },\r
- { ONIGERR_INVALID_CHAR_IN_GROUP_NAME, REG_BADPAT },\r
- { ONIGERR_UNDEFINED_NAME_REFERENCE, REG_BADPAT },\r
- { ONIGERR_UNDEFINED_GROUP_REFERENCE, REG_BADPAT },\r
- { ONIGERR_MULTIPLEX_DEFINED_NAME, REG_BADPAT },\r
- { ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, REG_BADPAT },\r
- { ONIGERR_NEVER_ENDING_RECURSION, REG_BADPAT },\r
- { ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY, REG_BADPAT },\r
- { ONIGERR_INVALID_CHAR_PROPERTY_NAME, REG_BADPAT },\r
- { ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION, REG_EONIG_BADARG },\r
- { ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT, REG_EONIG_THREAD }\r
-\r
- };\r
-\r
- int i;\r
-\r
- if (code >= 0) return 0;\r
-\r
- for (i = 0; i < (int )(sizeof(o2p) / sizeof(o2p[0])); i++) {\r
- if (code == o2p[i].onig_err)\r
- return o2p[i].posix_err;\r
- }\r
-\r
- return REG_EONIG_INTERNAL; /* but, unknown error code */\r
-}\r
-\r
-extern int\r
-regcomp(regex_t* reg, const char* pattern, int posix_options)\r
-{\r
- int r, len;\r
- OnigSyntaxType* syntax = OnigDefaultSyntax;\r
- OnigOptionType options;\r
-\r
- if ((posix_options & REG_EXTENDED) == 0)\r
- syntax = ONIG_SYNTAX_POSIX_BASIC;\r
-\r
- options = syntax->options;\r
- if ((posix_options & REG_ICASE) != 0)\r
- ONIG_OPTION_ON(options, ONIG_OPTION_IGNORECASE);\r
- if ((posix_options & REG_NEWLINE) != 0) {\r
- ONIG_OPTION_ON( options, ONIG_OPTION_NEGATE_SINGLELINE);\r
- ONIG_OPTION_OFF(options, ONIG_OPTION_SINGLELINE);\r
- }\r
-\r
- reg->comp_options = posix_options;\r
-\r
- ENC_STRING_LEN(OnigEncDefaultCharEncoding, pattern, len);\r
- r = onig_new(PONIG_C(reg), (UChar* )pattern, (UChar* )(pattern + len),\r
- options, OnigEncDefaultCharEncoding, syntax,\r
- (OnigErrorInfo* )NULL);\r
- if (r != ONIG_NORMAL) {\r
- return onig2posix_error_code(r);\r
- }\r
-\r
- reg->re_nsub = ONIG_C(reg)->num_mem;\r
- return 0;\r
-}\r
-\r
-extern int\r
-regexec(regex_t* reg, const char* str, size_t nmatch,\r
- regmatch_t pmatch[], int posix_options)\r
-{\r
- int r, i, len;\r
- UChar* end;\r
- regmatch_t* pm;\r
- OnigOptionType options;\r
-\r
- options = ONIG_OPTION_POSIX_REGION;\r
- if ((posix_options & REG_NOTBOL) != 0) options |= ONIG_OPTION_NOTBOL;\r
- if ((posix_options & REG_NOTEOL) != 0) options |= ONIG_OPTION_NOTEOL;\r
-\r
- if (nmatch == 0 || (reg->comp_options & REG_NOSUB) != 0) {\r
- pm = (regmatch_t* )NULL;\r
- nmatch = 0;\r
- }\r
- else if ((int )nmatch < ONIG_C(reg)->num_mem + 1) {\r
- pm = (regmatch_t* )xmalloc(sizeof(regmatch_t)\r
- * (ONIG_C(reg)->num_mem + 1));\r
- if (pm == NULL)\r
- return REG_ESPACE;\r
- }\r
- else {\r
- pm = pmatch;\r
- }\r
-\r
- ENC_STRING_LEN(ONIG_C(reg)->enc, str, len);\r
- end = (UChar* )(str + len);\r
- r = onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end,\r
- (OnigRegion* )pm, options);\r
-\r
- if (r >= 0) {\r
- r = 0; /* Match */\r
- if (pm != pmatch && pm != NULL) {\r
- xmemcpy(pmatch, pm, sizeof(regmatch_t) * nmatch);\r
- }\r
- }\r
- else if (r == ONIG_MISMATCH) {\r
- r = REG_NOMATCH;\r
- for (i = 0; i < (int )nmatch; i++)\r
- pmatch[i].rm_so = pmatch[i].rm_eo = ONIG_REGION_NOTPOS;\r
- }\r
- else {\r
- r = onig2posix_error_code(r);\r
- }\r
-\r
- if (pm != pmatch && pm != NULL)\r
- xfree(pm);\r
-\r
-#if 0\r
- if (reg->re_nsub > nmatch - 1)\r
- reg->re_nsub = (nmatch <= 1 ? 0 : nmatch - 1);\r
-#endif\r
-\r
- return r;\r
-}\r
-\r
-extern void\r
-regfree(regex_t* reg)\r
-{\r
- onig_free(ONIG_C(reg));\r
-}\r
-\r
-\r
-extern void\r
-reg_set_encoding(int mb_code)\r
-{\r
- OnigEncoding enc;\r
-\r
- switch (mb_code) {\r
- case REG_POSIX_ENCODING_ASCII:\r
- enc = ONIG_ENCODING_ASCII;\r
- break;\r
- case REG_POSIX_ENCODING_EUC_JP:\r
- enc = ONIG_ENCODING_EUC_JP;\r
- break;\r
- case REG_POSIX_ENCODING_SJIS:\r
- enc = ONIG_ENCODING_SJIS;\r
- break;\r
- case REG_POSIX_ENCODING_UTF8:\r
- enc = ONIG_ENCODING_UTF8;\r
- break;\r
- case REG_POSIX_ENCODING_UTF16_BE:\r
- enc = ONIG_ENCODING_UTF16_BE;\r
- break;\r
- case REG_POSIX_ENCODING_UTF16_LE:\r
- enc = ONIG_ENCODING_UTF16_LE;\r
- break;\r
-\r
- default:\r
- return ;\r
- break;\r
- }\r
-\r
- onigenc_set_default_encoding(enc);\r
-}\r
-\r
-extern int\r
-reg_name_to_group_numbers(regex_t* reg,\r
- const unsigned char* name, const unsigned char* name_end, int** nums)\r
-{\r
- return onig_name_to_group_numbers(ONIG_C(reg), name, name_end, nums);\r
-}\r
-\r
-typedef struct {\r
- int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*);\r
- regex_t* reg;\r
- void* arg;\r
-} i_wrap;\r
-\r
-static int\r
-i_wrapper(const UChar* name, const UChar* name_end, int ng, int* gs,\r
- onig_regex_t* reg ARG_UNUSED, void* arg)\r
-{\r
- i_wrap* warg = (i_wrap* )arg;\r
-\r
- return (*warg->func)(name, name_end, ng, gs, warg->reg, warg->arg);\r
-}\r
-\r
-extern int\r
-reg_foreach_name(regex_t* reg,\r
- int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*),\r
- void* arg)\r
-{\r
- i_wrap warg;\r
-\r
- warg.func = func;\r
- warg.reg = reg;\r
- warg.arg = arg;\r
-\r
- return onig_foreach_name(ONIG_C(reg), i_wrapper, &warg);\r
-}\r
-\r
-extern int\r
-reg_number_of_names(regex_t* reg)\r
-{\r
- return onig_number_of_names(ONIG_C(reg));\r
-}\r
+++ /dev/null
-/**********************************************************************\r
- regsyntax.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-OnigSyntaxType OnigSyntaxASIS = {\r
- 0\r
- , ONIG_SYN_OP2_INEFFECTIVE_ESCAPE\r
- , 0\r
- , ONIG_OPTION_NONE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType OnigSyntaxPosixBasic = {\r
- ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |\r
- ONIG_SYN_OP_ESC_BRACE_INTERVAL )\r
- , 0\r
- , 0\r
- , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType OnigSyntaxPosixExtended = {\r
- ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_LPAREN_SUBEXP |\r
- ONIG_SYN_OP_BRACE_INTERVAL |\r
- ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT )\r
- , 0\r
- , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | \r
- ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | \r
- ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP |\r
- ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )\r
- , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE )\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType OnigSyntaxEmacs = {\r
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC |\r
- ONIG_SYN_OP_ESC_BRACE_INTERVAL |\r
- ONIG_SYN_OP_ESC_LPAREN_SUBEXP | ONIG_SYN_OP_ESC_VBAR_ALT |\r
- ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF |\r
- ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_DECIMAL_BACKREF |\r
- ONIG_SYN_OP_LINE_ANCHOR | ONIG_SYN_OP_ESC_CONTROL_CHARS )\r
- , ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR\r
- , ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC\r
- , ONIG_OPTION_NONE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType OnigSyntaxGrep = {\r
- ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_POSIX_BRACKET |\r
- ONIG_SYN_OP_ESC_BRACE_INTERVAL | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |\r
- ONIG_SYN_OP_ESC_VBAR_ALT |\r
- ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_ESC_PLUS_ONE_INF |\r
- ONIG_SYN_OP_ESC_QMARK_ZERO_ONE | ONIG_SYN_OP_LINE_ANCHOR |\r
- ONIG_SYN_OP_ESC_W_WORD | ONIG_SYN_OP_ESC_B_WORD_BOUND |\r
- ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | ONIG_SYN_OP_DECIMAL_BACKREF )\r
- , 0\r
- , ( ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC | ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC )\r
- , ONIG_OPTION_NONE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType OnigSyntaxGnuRegex = {\r
- SYN_GNU_REGEX_OP\r
- , 0\r
- , SYN_GNU_REGEX_BV\r
- , ONIG_OPTION_NONE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType OnigSyntaxJava = {\r
- (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
- ONIG_SYN_OP_ESC_CONTROL_CHARS | ONIG_SYN_OP_ESC_C_CONTROL |\r
- ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 )\r
- & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
- , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | ONIG_SYN_OP2_QMARK_GROUP_EFFECT |\r
- ONIG_SYN_OP2_OPTION_PERL | ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT |\r
- ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | ONIG_SYN_OP2_CCLASS_SET_OP |\r
- ONIG_SYN_OP2_ESC_V_VTAB | ONIG_SYN_OP2_ESC_U_HEX4 |\r
- ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY )\r
- , ( SYN_GNU_REGEX_BV | ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND )\r
- , ONIG_OPTION_SINGLELINE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-OnigSyntaxType OnigSyntaxPerl = {\r
- (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
- ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |\r
- ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
- ONIG_SYN_OP_ESC_C_CONTROL )\r
- & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
- , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |\r
- ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |\r
- ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |\r
- ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT )\r
- , SYN_GNU_REGEX_BV\r
- , ONIG_OPTION_SINGLELINE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-/* Perl + named group */\r
-OnigSyntaxType OnigSyntaxPerl_NG = {\r
- (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |\r
- ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |\r
- ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |\r
- ONIG_SYN_OP_ESC_C_CONTROL )\r
- & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )\r
- , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |\r
- ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |\r
- ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |\r
- ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |\r
- ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP |\r
- ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |\r
- ONIG_SYN_OP2_ESC_G_SUBEXP_CALL )\r
- , ( SYN_GNU_REGEX_BV |\r
- ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |\r
- ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME )\r
- , ONIG_OPTION_SINGLELINE\r
- ,\r
- {\r
- (OnigCodePoint )'\\' /* esc */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */\r
- , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */\r
- }\r
-};\r
-\r
-\r
-\r
-extern int\r
-onig_set_default_syntax(OnigSyntaxType* syntax)\r
-{\r
- if (IS_NULL(syntax))\r
- syntax = ONIG_SYNTAX_RUBY;\r
-\r
- OnigDefaultSyntax = syntax;\r
- return 0;\r
-}\r
-\r
-extern void\r
-onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from)\r
-{\r
- *to = *from;\r
-}\r
-\r
-extern void\r
-onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op)\r
-{\r
- syntax->op = op;\r
-}\r
-\r
-extern void\r
-onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2)\r
-{\r
- syntax->op2 = op2;\r
-}\r
-\r
-extern void\r
-onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior)\r
-{\r
- syntax->behavior = behavior;\r
-}\r
-\r
-extern void\r
-onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options)\r
-{\r
- syntax->options = options;\r
-}\r
-\r
-extern unsigned int\r
-onig_get_syntax_op(OnigSyntaxType* syntax)\r
-{\r
- return syntax->op;\r
-}\r
-\r
-extern unsigned int\r
-onig_get_syntax_op2(OnigSyntaxType* syntax)\r
-{\r
- return syntax->op2;\r
-}\r
-\r
-extern unsigned int\r
-onig_get_syntax_behavior(OnigSyntaxType* syntax)\r
-{\r
- return syntax->behavior;\r
-}\r
-\r
-extern OnigOptionType\r
-onig_get_syntax_options(OnigSyntaxType* syntax)\r
-{\r
- return syntax->options;\r
-}\r
-\r
-#ifdef USE_VARIABLE_META_CHARS\r
-extern int onig_set_meta_char(OnigSyntaxType* enc,\r
- unsigned int what, OnigCodePoint code)\r
-{\r
- switch (what) {\r
- case ONIG_META_CHAR_ESCAPE:\r
- enc->meta_char_table.esc = code;\r
- break;\r
- case ONIG_META_CHAR_ANYCHAR:\r
- enc->meta_char_table.anychar = code;\r
- break;\r
- case ONIG_META_CHAR_ANYTIME:\r
- enc->meta_char_table.anytime = code;\r
- break;\r
- case ONIG_META_CHAR_ZERO_OR_ONE_TIME:\r
- enc->meta_char_table.zero_or_one_time = code;\r
- break;\r
- case ONIG_META_CHAR_ONE_OR_MORE_TIME:\r
- enc->meta_char_table.one_or_more_time = code;\r
- break;\r
- case ONIG_META_CHAR_ANYCHAR_ANYTIME:\r
- enc->meta_char_table.anychar_anytime = code;\r
- break;\r
- default:\r
- return ONIGERR_INVALID_ARGUMENT;\r
- break;\r
- }\r
- return 0;\r
-}\r
-#endif /* USE_VARIABLE_META_CHARS */\r
+++ /dev/null
-/**********************************************************************\r
- regtrav.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-#include "regint.h"\r
-\r
-#ifdef USE_CAPTURE_HISTORY\r
-\r
-static int\r
-capture_tree_traverse(OnigCaptureTreeNode* node, int at,\r
- int(*callback_func)(int,int,int,int,int,void*),\r
- int level, void* arg)\r
-{\r
- int r, i;\r
-\r
- if (node == (OnigCaptureTreeNode* )0)\r
- return 0;\r
-\r
- if ((at & ONIG_TRAVERSE_CALLBACK_AT_FIRST) != 0) {\r
- r = (*callback_func)(node->group, node->beg, node->end,\r
- level, ONIG_TRAVERSE_CALLBACK_AT_FIRST, arg);\r
- if (r != 0) return r;\r
- }\r
-\r
- for (i = 0; i < node->num_childs; i++) {\r
- r = capture_tree_traverse(node->childs[i], at,\r
- callback_func, level + 1, arg);\r
- if (r != 0) return r;\r
- }\r
-\r
- if ((at & ONIG_TRAVERSE_CALLBACK_AT_LAST) != 0) {\r
- r = (*callback_func)(node->group, node->beg, node->end,\r
- level, ONIG_TRAVERSE_CALLBACK_AT_LAST, arg);\r
- if (r != 0) return r;\r
- }\r
-\r
- return 0;\r
-}\r
-#endif /* USE_CAPTURE_HISTORY */\r
-\r
-extern int\r
-onig_capture_tree_traverse(OnigRegion* region, int at,\r
- int(*callback_func)(int,int,int,int,int,void*), void* arg)\r
-{\r
-#ifdef USE_CAPTURE_HISTORY\r
- return capture_tree_traverse(region->history_root, at,\r
- callback_func, 0, arg);\r
-#else\r
- return ONIG_NO_SUPPORT_CONFIG;\r
-#endif\r
-}\r
+++ /dev/null
-/**********************************************************************\r
- regversion.c - Oniguruma (regular expression library)\r
-**********************************************************************/\r
-/*-\r
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- * notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- * notice, this list of conditions and the following disclaimer in the\r
- * documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-//#include "config.h"\r
-#include "oniguruma.h"\r
-//#include <stdio.h>\r
-\r
-extern const char*\r
-onig_version(void)\r
-{\r
- static char s[12];\r
-\r
- sprintf(s, "%d.%d.%d",\r
- ONIGURUMA_VERSION_MAJOR,\r
- ONIGURUMA_VERSION_MINOR,\r
- ONIGURUMA_VERSION_TEENY);\r
- return s;\r
-}\r
-\r
-extern const char*\r
-onig_copyright(void)\r
-{\r
- static char s[58];\r
-\r
- sprintf(s, "Oniguruma %d.%d.%d : Copyright (C) 2002-2008 K.Kosako",\r
- ONIGURUMA_VERSION_MAJOR,\r
- ONIGURUMA_VERSION_MINOR,\r
- ONIGURUMA_VERSION_TEENY);\r
- return s;\r
-}\r
+++ /dev/null
-/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */\r
-\r
-/* static char sccsid[] = "@(#) st.c 5.1 89/12/14 Crucible"; */\r
-\r
-//#include <stdio.h>\r
-//#include <stdlib.h>\r
-//#include <string.h>\r
-#include "OnigurumaUefiPort.h"\r
-\r
-#ifdef _WIN32\r
-#include <malloc.h>\r
-#endif\r
-\r
-#include "regint.h"\r
-#include "st.h"\r
-\r
-typedef struct st_table_entry st_table_entry;\r
-\r
-struct st_table_entry {\r
- unsigned int hash;\r
- st_data_t key;\r
- st_data_t record;\r
- st_table_entry *next;\r
-};\r
-\r
-#define ST_DEFAULT_MAX_DENSITY 5\r
-#define ST_DEFAULT_INIT_TABLE_SIZE 11\r
-\r
- /*\r
- * DEFAULT_MAX_DENSITY is the default for the largest we allow the\r
- * average number of items per bin before increasing the number of\r
- * bins\r
- *\r
- * DEFAULT_INIT_TABLE_SIZE is the default for the number of bins\r
- * allocated initially\r
- *\r
- */\r
-\r
-static int numcmp(long, long);\r
-static int numhash(long);\r
-static struct st_hash_type type_numhash = {\r
- numcmp,\r
- numhash,\r
-};\r
-\r
-/* extern int strcmp(const char *, const char *); */\r
-static int strhash(const char *);\r
-static struct st_hash_type type_strhash = {\r
- strcmp,\r
- strhash,\r
-};\r
-\r
-static void rehash(st_table *);\r
-\r
-#define alloc(type) (type*)xmalloc((unsigned)sizeof(type))\r
-#define Calloc(n,s) (char*)xcalloc((n),(s))\r
-\r
-#define EQUAL(table,x,y) ((x)==(y) || (*table->type->compare)((x),(y)) == 0)\r
-\r
-#define do_hash(key,table) (unsigned int)(*(table)->type->hash)((key))\r
-#define do_hash_bin(key,table) (do_hash(key, table)%(table)->num_bins)\r
-\r
-/*\r
- * MINSIZE is the minimum size of a dictionary.\r
- */\r
-\r
-#define MINSIZE 8\r
-\r
-/*\r
-Table of prime numbers 2^n+a, 2<=n<=30.\r
-*/\r
-static const long primes[] = {\r
- 8 + 3,\r
- 16 + 3,\r
- 32 + 5,\r
- 64 + 3,\r
- 128 + 3,\r
- 256 + 27,\r
- 512 + 9,\r
- 1024 + 9,\r
- 2048 + 5,\r
- 4096 + 3,\r
- 8192 + 27,\r
- 16384 + 43,\r
- 32768 + 3,\r
- 65536 + 45,\r
- 131072 + 29,\r
- 262144 + 3,\r
- 524288 + 21,\r
- 1048576 + 7,\r
- 2097152 + 17,\r
- 4194304 + 15,\r
- 8388608 + 9,\r
- 16777216 + 43,\r
- 33554432 + 35,\r
- 67108864 + 15,\r
- 134217728 + 29,\r
- 268435456 + 3,\r
- 536870912 + 11,\r
- 1073741824 + 85,\r
- 0\r
-};\r
-\r
-static int\r
-new_size(size)\r
- int size;\r
-{\r
- int i;\r
-\r
-#if 0\r
- for (i=3; i<31; i++) {\r
- if ((1<<i) > size) return 1<<i;\r
- }\r
- return -1;\r
-#else\r
- int newsize;\r
-\r
- for (i = 0, newsize = MINSIZE;\r
- i < (int )(sizeof(primes)/sizeof(primes[0]));\r
- i++, newsize <<= 1)\r
- {\r
- if (newsize > size) return primes[i];\r
- }\r
- /* Ran out of polynomials */\r
- return -1; /* should raise exception */\r
-#endif\r
-}\r
-\r
-#ifdef HASH_LOG\r
-static int collision = 0;\r
-static int init_st = 0;\r
-\r
-static void\r
-stat_col()\r
-{\r
- FILE *f = fopen("/tmp/col", "w");\r
- fprintf(f, "collision: %d\n", collision);\r
- fclose(f);\r
-}\r
-#endif\r
-\r
-st_table*\r
-st_init_table_with_size(type, size)\r
- struct st_hash_type *type;\r
- int size;\r
-{\r
- st_table *tbl;\r
-\r
-#ifdef HASH_LOG\r
- if (init_st == 0) {\r
- init_st = 1;\r
- atexit(stat_col);\r
- }\r
-#endif\r
-\r
- size = new_size(size); /* round up to prime number */\r
-\r
- tbl = alloc(st_table);\r
- tbl->type = type;\r
- tbl->num_entries = 0;\r
- tbl->num_bins = size;\r
- tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*));\r
-\r
- return tbl;\r
-}\r
-\r
-st_table*\r
-st_init_table(type)\r
- struct st_hash_type *type;\r
-{\r
- return st_init_table_with_size(type, 0);\r
-}\r
-\r
-st_table*\r
-st_init_numtable(void)\r
-{\r
- return st_init_table(&type_numhash);\r
-}\r
-\r
-st_table*\r
-st_init_numtable_with_size(size)\r
- int size;\r
-{\r
- return st_init_table_with_size(&type_numhash, size);\r
-}\r
-\r
-st_table*\r
-st_init_strtable(void)\r
-{\r
- return st_init_table(&type_strhash);\r
-}\r
-\r
-st_table*\r
-st_init_strtable_with_size(size)\r
- int size;\r
-{\r
- return st_init_table_with_size(&type_strhash, size);\r
-}\r
-\r
-void\r
-st_free_table(table)\r
- st_table *table;\r
-{\r
- register st_table_entry *ptr, *next;\r
- int i;\r
-\r
- for(i = 0; i < table->num_bins; i++) {\r
- ptr = table->bins[i];\r
- while (ptr != 0) {\r
- next = ptr->next;\r
- free(ptr);\r
- ptr = next;\r
- }\r
- }\r
- free(table->bins);\r
- free(table);\r
-}\r
-\r
-#define PTR_NOT_EQUAL(table, ptr, hash_val, key) \\r
-((ptr) != 0 && (ptr->hash != (hash_val) || !EQUAL((table), (key), (ptr)->key)))\r
-\r
-#ifdef HASH_LOG\r
-#define COLLISION collision++\r
-#else\r
-#define COLLISION\r
-#endif\r
-\r
-#define FIND_ENTRY(table, ptr, hash_val, bin_pos) do {\\r
- bin_pos = hash_val%(table)->num_bins;\\r
- ptr = (table)->bins[bin_pos];\\r
- if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\\r
- COLLISION;\\r
- while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\\r
- ptr = ptr->next;\\r
- }\\r
- ptr = ptr->next;\\r
- }\\r
-} while (0)\r
-\r
-int\r
-st_lookup(table, key, value)\r
- st_table *table;\r
- register st_data_t key;\r
- st_data_t *value;\r
-{\r
- unsigned int hash_val, bin_pos;\r
- register st_table_entry *ptr;\r
-\r
- hash_val = do_hash(key, table);\r
- FIND_ENTRY(table, ptr, hash_val, bin_pos);\r
-\r
- if (ptr == 0) {\r
- return 0;\r
- }\r
- else {\r
- if (value != 0) *value = ptr->record;\r
- return 1;\r
- }\r
-}\r
-\r
-#define ADD_DIRECT(table, key, value, hash_val, bin_pos)\\r
-do {\\r
- st_table_entry *entry;\\r
- if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\\r
- rehash(table);\\r
- bin_pos = hash_val % table->num_bins;\\r
- }\\r
- \\r
- entry = alloc(st_table_entry);\\r
- \\r
- entry->hash = hash_val;\\r
- entry->key = key;\\r
- entry->record = value;\\r
- entry->next = table->bins[bin_pos];\\r
- table->bins[bin_pos] = entry;\\r
- table->num_entries++;\\r
-} while (0)\r
-\r
-int\r
-st_insert(table, key, value)\r
- register st_table *table;\r
- register st_data_t key;\r
- st_data_t value;\r
-{\r
- unsigned int hash_val, bin_pos;\r
- register st_table_entry *ptr;\r
-\r
- hash_val = do_hash(key, table);\r
- FIND_ENTRY(table, ptr, hash_val, bin_pos);\r
-\r
- if (ptr == 0) {\r
- ADD_DIRECT(table, key, value, hash_val, bin_pos);\r
- return 0;\r
- }\r
- else {\r
- ptr->record = value;\r
- return 1;\r
- }\r
-}\r
-\r
-void\r
-st_add_direct(table, key, value)\r
- st_table *table;\r
- st_data_t key;\r
- st_data_t value;\r
-{\r
- unsigned int hash_val, bin_pos;\r
-\r
- hash_val = do_hash(key, table);\r
- bin_pos = hash_val % table->num_bins;\r
- ADD_DIRECT(table, key, value, hash_val, bin_pos);\r
-}\r
-\r
-static void\r
-rehash(table)\r
- register st_table *table;\r
-{\r
- register st_table_entry *ptr, *next, **new_bins;\r
- int i, old_num_bins = table->num_bins, new_num_bins;\r
- unsigned int hash_val;\r
-\r
- new_num_bins = new_size(old_num_bins+1);\r
- new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*));\r
-\r
- for(i = 0; i < old_num_bins; i++) {\r
- ptr = table->bins[i];\r
- while (ptr != 0) {\r
- next = ptr->next;\r
- hash_val = ptr->hash % new_num_bins;\r
- ptr->next = new_bins[hash_val];\r
- new_bins[hash_val] = ptr;\r
- ptr = next;\r
- }\r
- }\r
- free(table->bins);\r
- table->num_bins = new_num_bins;\r
- table->bins = new_bins;\r
-}\r
-\r
-st_table*\r
-st_copy(old_table)\r
- st_table *old_table;\r
-{\r
- st_table *new_table;\r
- st_table_entry *ptr, *entry;\r
- int i, num_bins = old_table->num_bins;\r
-\r
- new_table = alloc(st_table);\r
- if (new_table == 0) {\r
- return 0;\r
- }\r
-\r
- *new_table = *old_table;\r
- new_table->bins = (st_table_entry**)\r
- Calloc((unsigned)num_bins, sizeof(st_table_entry*));\r
-\r
- if (new_table->bins == 0) {\r
- free(new_table);\r
- return 0;\r
- }\r
-\r
- for(i = 0; i < num_bins; i++) {\r
- new_table->bins[i] = 0;\r
- ptr = old_table->bins[i];\r
- while (ptr != 0) {\r
- entry = alloc(st_table_entry);\r
- if (entry == 0) {\r
- free(new_table->bins);\r
- free(new_table);\r
- return 0;\r
- }\r
- *entry = *ptr;\r
- entry->next = new_table->bins[i];\r
- new_table->bins[i] = entry;\r
- ptr = ptr->next;\r
- }\r
- }\r
- return new_table;\r
-}\r
-\r
-int\r
-st_delete(table, key, value)\r
- register st_table *table;\r
- register st_data_t *key;\r
- st_data_t *value;\r
-{\r
- unsigned int hash_val;\r
- st_table_entry *tmp;\r
- register st_table_entry *ptr;\r
-\r
- hash_val = do_hash_bin(*key, table);\r
- ptr = table->bins[hash_val];\r
-\r
- if (ptr == 0) {\r
- if (value != 0) *value = 0;\r
- return 0;\r
- }\r
-\r
- if (EQUAL(table, *key, ptr->key)) {\r
- table->bins[hash_val] = ptr->next;\r
- table->num_entries--;\r
- if (value != 0) *value = ptr->record;\r
- *key = ptr->key;\r
- free(ptr);\r
- return 1;\r
- }\r
-\r
- for(; ptr->next != 0; ptr = ptr->next) {\r
- if (EQUAL(table, ptr->next->key, *key)) {\r
- tmp = ptr->next;\r
- ptr->next = ptr->next->next;\r
- table->num_entries--;\r
- if (value != 0) *value = tmp->record;\r
- *key = tmp->key;\r
- free(tmp);\r
- return 1;\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int\r
-st_delete_safe(table, key, value, never)\r
- register st_table *table;\r
- register st_data_t *key;\r
- st_data_t *value;\r
- st_data_t never;\r
-{\r
- unsigned int hash_val;\r
- register st_table_entry *ptr;\r
-\r
- hash_val = do_hash_bin(*key, table);\r
- ptr = table->bins[hash_val];\r
-\r
- if (ptr == 0) {\r
- if (value != 0) *value = 0;\r
- return 0;\r
- }\r
-\r
- for(; ptr != 0; ptr = ptr->next) {\r
- if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {\r
- table->num_entries--;\r
- *key = ptr->key;\r
- if (value != 0) *value = ptr->record;\r
- ptr->key = ptr->record = never;\r
- return 1;\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-static int\r
-#if defined(__GNUC__)\r
-delete_never(st_data_t key __attribute__ ((unused)), st_data_t value,\r
- st_data_t never)\r
-#else\r
-delete_never(key, value, never)\r
- st_data_t key, value, never;\r
-#endif\r
-{\r
- if (value == never) return ST_DELETE;\r
- return ST_CONTINUE;\r
-}\r
-\r
-void\r
-st_cleanup_safe(table, never)\r
- st_table *table;\r
- st_data_t never;\r
-{\r
- int num_entries = table->num_entries;\r
-\r
- st_foreach(table, delete_never, never);\r
- table->num_entries = num_entries;\r
-}\r
-\r
-int\r
-st_foreach(table, func, arg)\r
- st_table *table;\r
- int (*func)();\r
- st_data_t arg;\r
-{\r
- st_table_entry *ptr, *last, *tmp;\r
- enum st_retval retval;\r
- int i;\r
-\r
- for(i = 0; i < table->num_bins; i++) {\r
- last = 0;\r
- for(ptr = table->bins[i]; ptr != 0;) {\r
- retval = (*func)(ptr->key, ptr->record, arg);\r
- switch (retval) {\r
- case ST_CHECK: /* check if hash is modified during iteration */\r
- tmp = 0;\r
- if (i < table->num_bins) {\r
- for (tmp = table->bins[i]; tmp; tmp=tmp->next) {\r
- if (tmp == ptr) break;\r
- }\r
- }\r
- if (!tmp) {\r
- /* call func with error notice */\r
- return 1;\r
- }\r
- /* fall through */\r
- case ST_CONTINUE:\r
- last = ptr;\r
- ptr = ptr->next;\r
- break;\r
- case ST_STOP:\r
- return 0;\r
- case ST_DELETE:\r
- tmp = ptr;\r
- if (last == 0) {\r
- table->bins[i] = ptr->next;\r
- }\r
- else {\r
- last->next = ptr->next;\r
- }\r
- ptr = ptr->next;\r
- free(tmp);\r
- table->num_entries--;\r
- }\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-static int\r
-strhash(string)\r
- register const char *string;\r
-{\r
- register int c;\r
-\r
-#ifdef HASH_ELFHASH\r
- register unsigned int h = 0, g;\r
-\r
- while ((c = *string++) != '\0') {\r
- h = ( h << 4 ) + c;\r
- if ( g = h & 0xF0000000 )\r
- h ^= g >> 24;\r
- h &= ~g;\r
- }\r
- return h;\r
-#elif HASH_PERL\r
- register int val = 0;\r
-\r
- while ((c = *string++) != '\0') {\r
- val += c;\r
- val += (val << 10);\r
- val ^= (val >> 6);\r
- }\r
- val += (val << 3);\r
- val ^= (val >> 11);\r
-\r
- return val + (val << 15);\r
-#else\r
- register int val = 0;\r
-\r
- while ((c = *string++) != '\0') {\r
- val = val*997 + c;\r
- }\r
-\r
- return val + (val>>5);\r
-#endif\r
-}\r
-\r
-static int\r
-numcmp(x, y)\r
- long x, y;\r
-{\r
- return x != y;\r
-}\r
-\r
-static int\r
-numhash(n)\r
- long n;\r
-{\r
- return n;\r
-}\r
+++ /dev/null
-/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */\r
-\r
-/* @(#) st.h 5.1 89/12/14 */\r
-\r
-#ifndef ST_INCLUDED\r
-\r
-#define ST_INCLUDED\r
-\r
-#ifdef _WIN32\r
-# include <windows.h>\r
-typedef ULONG_PTR st_data_t;\r
-#else\r
-typedef unsigned long st_data_t;\r
-#endif\r
-#define ST_DATA_T_DEFINED\r
-\r
-typedef struct st_table st_table;\r
-\r
-struct st_hash_type {\r
- int (*compare)();\r
- int (*hash)();\r
-};\r
-\r
-struct st_table {\r
- struct st_hash_type *type;\r
- int num_bins;\r
- int num_entries;\r
- struct st_table_entry **bins;\r
-};\r
-\r
-#define st_is_member(table,key) st_lookup(table,key,(st_data_t *)0)\r
-\r
-enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK};\r
-\r
-#ifndef _\r
-# define _(args) args\r
-#endif\r
-#ifndef ANYARGS\r
-# ifdef __cplusplus\r
-# define ANYARGS ...\r
-# else\r
-# define ANYARGS\r
-# endif\r
-#endif\r
-\r
-st_table *st_init_table _((struct st_hash_type *));\r
-st_table *st_init_table_with_size _((struct st_hash_type *, int));\r
-st_table *st_init_numtable _((void));\r
-st_table *st_init_numtable_with_size _((int));\r
-st_table *st_init_strtable _((void));\r
-st_table *st_init_strtable_with_size _((int));\r
-int st_delete _((st_table *, st_data_t *, st_data_t *));\r
-int st_delete_safe _((st_table *, st_data_t *, st_data_t *, st_data_t));\r
-int st_insert _((st_table *, st_data_t, st_data_t));\r
-int st_lookup _((st_table *, st_data_t, st_data_t *));\r
-int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t));\r
-void st_add_direct _((st_table *, st_data_t, st_data_t));\r
-void st_free_table _((st_table *));\r
-void st_cleanup_safe _((st_table *, st_data_t));\r
-st_table *st_copy _((st_table *));\r
-\r
-#define ST_NUMCMP ((int (*)()) 0)\r
-#define ST_NUMHASH ((int (*)()) -2)\r
-\r
-#define st_numcmp ST_NUMCMP\r
-#define st_numhash ST_NUMHASH\r
-\r
-#endif /* ST_INCLUDED */\r
+++ /dev/null
-/**\r
- @file\r
-\r
- EFI_REGULAR_EXPRESSION_PROTOCOL Implementation\r
-\r
- Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
-\r
- This program and the accompanying materials are licensed and made available\r
- under the terms and conditions of the BSD License that accompanies this\r
- distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
- WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-**/\r
-\r
-#include "RegularExpressionDxe.h"\r
-\r
-STATIC\r
-EFI_REGEX_SYNTAX_TYPE * CONST mSupportedSyntaxes[] = {\r
- &gEfiRegexSyntaxTypePosixExtendedGuid,\r
- &gEfiRegexSyntaxTypePerlGuid\r
-};\r
-\r
-STATIC\r
-EFI_REGULAR_EXPRESSION_PROTOCOL mProtocolInstance = {\r
- RegularExpressionMatch,\r
- RegularExpressionGetInfo\r
-};\r
-\r
-\r
-\r
-#define CHAR16_ENCODING ONIG_ENCODING_UTF16_LE\r
-\r
-/**\r
- Call the Oniguruma regex match API.\r
-\r
- Same parameters as RegularExpressionMatch, except SyntaxType is required.\r
-\r
- @retval EFI_SUCCESS Regex compilation and match completed successfully.\r
- @retval EFI_DEVICE_ERROR Regex compilation failed.\r
-**/\r
-STATIC\r
-EFI_STATUS\r
-OnigurumaMatch (\r
- IN CHAR16 *String,\r
- IN CHAR16 *Pattern,\r
- IN EFI_REGEX_SYNTAX_TYPE *SyntaxType,\r
- OUT BOOLEAN *Result,\r
- OUT EFI_REGEX_CAPTURE **Captures, OPTIONAL\r
- OUT UINTN *CapturesCount\r
- )\r
-{\r
- regex_t *OnigRegex;\r
- OnigSyntaxType *OnigSyntax;\r
- OnigRegion *Region;\r
- INT32 OnigResult;\r
- OnigErrorInfo ErrorInfo;\r
- CHAR8 ErrorMessage[ONIG_MAX_ERROR_MESSAGE_LEN];\r
- UINT32 Index;\r
- OnigUChar *Start;\r
-\r
- //\r
- // Detemine the internal syntax type\r
- //\r
- OnigSyntax = ONIG_SYNTAX_DEFAULT;\r
- if (CompareGuid (SyntaxType, &gEfiRegexSyntaxTypePosixExtendedGuid)) {\r
- OnigSyntax = ONIG_SYNTAX_POSIX_EXTENDED;\r
- } else if (CompareGuid (SyntaxType, &gEfiRegexSyntaxTypePerlGuid)) {\r
- OnigSyntax = ONIG_SYNTAX_PERL;\r
- } else {\r
- DEBUG ((DEBUG_ERROR, "Unsupported regex syntax - using default\n"));\r
- ASSERT (FALSE);\r
- }\r
-\r
- //\r
- // Compile pattern\r
- //\r
- Start = (OnigUChar*)Pattern;\r
- OnigResult = onig_new (\r
- &OnigRegex,\r
- Start,\r
- Start + onigenc_str_bytelen_null (CHAR16_ENCODING, Start),\r
- ONIG_OPTION_DEFAULT,\r
- CHAR16_ENCODING,\r
- OnigSyntax,\r
- &ErrorInfo\r
- );\r
-\r
- if (OnigResult != ONIG_NORMAL) {\r
- onig_error_code_to_str (ErrorMessage, OnigResult, &ErrorInfo);\r
- DEBUG ((DEBUG_ERROR, "Regex compilation failed: %a\n", ErrorMessage));\r
- return EFI_DEVICE_ERROR;\r
- }\r
-\r
- //\r
- // Try to match\r
- //\r
- Start = (OnigUChar*)String;\r
- Region = onig_region_new ();\r
- OnigResult = onig_search (\r
- OnigRegex,\r
- Start,\r
- Start + onigenc_str_bytelen_null (CHAR16_ENCODING, Start),\r
- Start,\r
- Start + onigenc_str_bytelen_null (CHAR16_ENCODING, Start),\r
- Region,\r
- ONIG_OPTION_NONE\r
- );\r
- if (OnigResult >= 0) {\r
- *Result = TRUE;\r
- } else {\r
- *Result = FALSE;\r
- if (OnigResult != ONIG_MISMATCH) {\r
- onig_error_code_to_str (ErrorMessage, OnigResult);\r
- DEBUG ((DEBUG_ERROR, "Regex match failed: %a\n", ErrorMessage));\r
- }\r
- }\r
-\r
- //\r
- // If successful, copy out the region (capture) information\r
- //\r
- if (*Result && Captures != NULL) {\r
- *CapturesCount = Region->num_regs;\r
- *Captures = AllocatePool (*CapturesCount * sizeof(**Captures));\r
- if (*Captures != NULL) {\r
- for (Index = 0; Index < *CapturesCount; ++Index) {\r
- //\r
- // Region beg/end values represent bytes, not characters\r
- //\r
- (*Captures)[Index].CapturePtr = (CHAR16*)((UINTN)String + Region->beg[Index]);\r
- (*Captures)[Index].Length = (Region->end[Index] - Region->beg[Index]) / sizeof(CHAR16);\r
- }\r
- }\r
- }\r
-\r
- onig_region_free (Region, 1);\r
- onig_free (OnigRegex);\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Returns information about the regular expression syntax types supported\r
- by the implementation.\r
-\r
- This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL\r
- instance.\r
-\r
- RegExSyntaxTypeListSize On input, the size in bytes of RegExSyntaxTypeList.\r
- On output with a return code of EFI_SUCCESS, the\r
- size in bytes of the data returned in\r
- RegExSyntaxTypeList. On output with a return code\r
- of EFI_BUFFER_TOO_SMALL, the size of\r
- RegExSyntaxTypeList required to obtain the list.\r
-\r
- RegExSyntaxTypeList A caller-allocated memory buffer filled by the\r
- driver with one EFI_REGEX_SYNTAX_TYPE element\r
- for each supported Regular expression syntax\r
- type. The list must not change across multiple\r
- calls to the same driver. The first syntax\r
- type in the list is the default type for the\r
- driver.\r
-\r
- @retval EFI_SUCCESS The regular expression syntax types list\r
- was returned successfully.\r
- @retval EFI_UNSUPPORTED The service is not supported by this driver.\r
- @retval EFI_DEVICE_ERROR The list of syntax types could not be\r
- retrieved due to a hardware or firmware error.\r
- @retval EFI_BUFFER_TOO_SMALL The buffer RegExSyntaxTypeList is too small\r
- to hold the result.\r
- @retval EFI_INVALID_PARAMETER RegExSyntaxTypeListSize is NULL\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-RegularExpressionGetInfo (\r
- IN EFI_REGULAR_EXPRESSION_PROTOCOL *This,\r
- IN OUT UINTN *RegExSyntaxTypeListSize,\r
- OUT EFI_REGEX_SYNTAX_TYPE *RegExSyntaxTypeList\r
- )\r
-{\r
- UINTN SyntaxSize;\r
- UINTN Index;\r
-\r
- if (This == NULL || RegExSyntaxTypeListSize == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if (*RegExSyntaxTypeListSize != 0 && RegExSyntaxTypeList == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- SyntaxSize = ARRAY_SIZE (mSupportedSyntaxes) * sizeof(**mSupportedSyntaxes);\r
-\r
- if (*RegExSyntaxTypeListSize < SyntaxSize) {\r
- *RegExSyntaxTypeListSize = SyntaxSize;\r
- return EFI_BUFFER_TOO_SMALL;\r
- }\r
-\r
- for (Index = 0; Index < ARRAY_SIZE (mSupportedSyntaxes); ++Index) {\r
- CopyMem (&RegExSyntaxTypeList[Index], mSupportedSyntaxes[Index], sizeof(**mSupportedSyntaxes));\r
- }\r
- *RegExSyntaxTypeListSize = SyntaxSize;\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Checks if the input string matches to the regular expression pattern.\r
-\r
- This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL instance.\r
- Type EFI_REGULAR_EXPRESSION_PROTOCOL is defined in Section\r
- XYZ.\r
-\r
- String A pointer to a NULL terminated string to match against the\r
- regular expression string specified by Pattern.\r
-\r
- Pattern A pointer to a NULL terminated string that represents the\r
- regular expression.\r
-\r
- SyntaxType A pointer to the EFI_REGEX_SYNTAX_TYPE that identifies the\r
- regular expression syntax type to use. May be NULL in which\r
- case the function will use its default regular expression\r
- syntax type.\r
-\r
- Result On return, points to TRUE if String fully matches against\r
- the regular expression Pattern using the regular expression\r
- SyntaxType. Otherwise, points to FALSE.\r
-\r
- Captures A Pointer to an array of EFI_REGEX_CAPTURE objects to receive\r
- the captured groups in the event of a match. The full\r
- sub-string match is put in Captures[0], and the results of N\r
- capturing groups are put in Captures[1:N]. If Captures is\r
- NULL, then this function doesn't allocate the memory for the\r
- array and does not build up the elements. It only returns the\r
- number of matching patterns in CapturesCount. If Captures is\r
- not NULL, this function returns a pointer to an array and\r
- builds up the elements in the array. CapturesCount is also\r
- updated to the number of matching patterns found. It is the\r
- caller's responsibility to free the memory pool in Captures\r
- and in each CapturePtr in the array elements.\r
-\r
- CapturesCount On output, CapturesCount is the number of matching patterns\r
- found in String. Zero means no matching patterns were found\r
- in the string.\r
-\r
- @retval EFI_SUCCESS The regular expression string matching\r
- completed successfully.\r
- @retval EFI_UNSUPPORTED The regular expression syntax specified by\r
- SyntaxType is not supported by this driver.\r
- @retval EFI_DEVICE_ERROR The regular expression string matching\r
- failed due to a hardware or firmware error.\r
- @retval EFI_INVALID_PARAMETER String, Pattern, Result, or CapturesCountis\r
- NULL.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-RegularExpressionMatch (\r
- IN EFI_REGULAR_EXPRESSION_PROTOCOL *This,\r
- IN CHAR16 *String,\r
- IN CHAR16 *Pattern,\r
- IN EFI_REGEX_SYNTAX_TYPE *SyntaxType, OPTIONAL\r
- OUT BOOLEAN *Result,\r
- OUT EFI_REGEX_CAPTURE **Captures, OPTIONAL\r
- OUT UINTN *CapturesCount\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINT32 Index;\r
- BOOLEAN Supported;\r
-\r
- if (This == NULL || String == NULL || Pattern == NULL || Result == NULL || CapturesCount == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- //\r
- // Figure out which syntax to use\r
- //\r
- if (SyntaxType == NULL) {\r
- SyntaxType = mSupportedSyntaxes[0];\r
- } else {\r
- Supported = FALSE;\r
- for (Index = 0; Index < ARRAY_SIZE (mSupportedSyntaxes); ++Index) {\r
- if (CompareGuid (SyntaxType, mSupportedSyntaxes[Index])) {\r
- Supported = TRUE;\r
- break;\r
- }\r
- }\r
- if (!Supported) {\r
- return EFI_UNSUPPORTED;\r
- }\r
- }\r
-\r
- Status = OnigurumaMatch (String, Pattern, SyntaxType, Result, Captures, CapturesCount);\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Entry point for RegularExpressionDxe.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-RegularExpressionDxeEntry (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &ImageHandle,\r
- &gEfiRegularExpressionProtocolGuid,\r
- &mProtocolInstance,\r
- NULL\r
- );\r
-\r
- return Status;\r
-}\r
+++ /dev/null
-/**\r
- @file\r
-\r
- EFI_REGULAR_EXPRESSION_PROTOCOL Header File.\r
-\r
- Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
- \r
- This program and the accompanying materials are licensed and made available\r
- under the terms and conditions of the BSD License that accompanies this\r
- distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
- WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-**/\r
-\r
-#include "Oniguruma/oniguruma.h"\r
-\r
-#include <Uefi.h>\r
-#include <Protocol/RegularExpressionProtocol.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/BaseLib.h>\r
-\r
-#define ARRAY_SIZE(Array) (sizeof(Array) / sizeof(*Array))\r
-\r
-/**\r
- Checks if the input string matches to the regular expression pattern.\r
-\r
- This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL instance.\r
- Type EFI_REGULAR_EXPRESSION_PROTOCOL is defined in Section\r
- XYZ.\r
-\r
- String A pointer to a NULL terminated string to match against the\r
- regular expression string specified by Pattern.\r
-\r
- Pattern A pointer to a NULL terminated string that represents the\r
- regular expression.\r
-\r
- SyntaxType A pointer to the EFI_REGEX_SYNTAX_TYPE that identifies the\r
- regular expression syntax type to use. May be NULL in which\r
- case the function will use its default regular expression\r
- syntax type.\r
-\r
- Result On return, points to TRUE if String fully matches against\r
- the regular expression Pattern using the regular expression\r
- SyntaxType. Otherwise, points to FALSE.\r
-\r
- Captures A Pointer to an array of EFI_REGEX_CAPTURE objects to receive\r
- the captured groups in the event of a match. The full\r
- sub-string match is put in Captures[0], and the results of N\r
- capturing groups are put in Captures[1:N]. If Captures is\r
- NULL, then this function doesn't allocate the memory for the\r
- array and does not build up the elements. It only returns the\r
- number of matching patterns in CapturesCount. If Captures is\r
- not NULL, this function returns a pointer to an array and\r
- builds up the elements in the array. CapturesCount is also\r
- updated to the number of matching patterns found. It is the\r
- caller's responsibility to free the memory pool in Captures\r
- and in each CapturePtr in the array elements.\r
-\r
- CapturesCount On output, CapturesCount is the number of matching patterns\r
- found in String. Zero means no matching patterns were found\r
- in the string.\r
-\r
- @retval EFI_SUCCESS The regular expression string matching\r
- completed successfully.\r
- @retval EFI_UNSUPPORTED The regular expression syntax specified by\r
- SyntaxType is not supported by this driver.\r
- @retval EFI_DEVICE_ERROR The regular expression string matching\r
- failed due to a hardware or firmware error.\r
- @retval EFI_INVALID_PARAMETER String, Pattern, Result, or CapturesCountis\r
- NULL.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-RegularExpressionMatch (\r
- IN EFI_REGULAR_EXPRESSION_PROTOCOL *This,\r
- IN CHAR16 *String,\r
- IN CHAR16 *Pattern,\r
- IN EFI_REGEX_SYNTAX_TYPE *SyntaxType, OPTIONAL\r
- OUT BOOLEAN *Result,\r
- OUT EFI_REGEX_CAPTURE **Captures, OPTIONAL\r
- OUT UINTN *CapturesCount\r
- );\r
-\r
-/**\r
- Returns information about the regular expression syntax types supported\r
- by the implementation.\r
-\r
- This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL\r
- instance.\r
-\r
- RegExSyntaxTypeListSize On input, the size in bytes of RegExSyntaxTypeList.\r
- On output with a return code of EFI_SUCCESS, the\r
- size in bytes of the data returned in\r
- RegExSyntaxTypeList. On output with a return code\r
- of EFI_BUFFER_TOO_SMALL, the size of\r
- RegExSyntaxTypeList required to obtain the list.\r
-\r
- RegExSyntaxTypeList A caller-allocated memory buffer filled by the\r
- driver with one EFI_REGEX_SYNTAX_TYPE element\r
- for each supported Regular expression syntax\r
- type. The list must not change across multiple\r
- calls to the same driver. The first syntax\r
- type in the list is the default type for the\r
- driver.\r
-\r
- @retval EFI_SUCCESS The regular expression syntax types list\r
- was returned successfully.\r
- @retval EFI_UNSUPPORTED The service is not supported by this driver.\r
- @retval EFI_DEVICE_ERROR The list of syntax types could not be\r
- retrieved due to a hardware or firmware error.\r
- @retval EFI_BUFFER_TOO_SMALL The buffer RegExSyntaxTypeList is too small\r
- to hold the result.\r
- @retval EFI_INVALID_PARAMETER RegExSyntaxTypeListSize is NULL\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-RegularExpressionGetInfo (\r
- IN EFI_REGULAR_EXPRESSION_PROTOCOL *This,\r
- IN OUT UINTN *RegExSyntaxTypeListSize,\r
- OUT EFI_REGEX_SYNTAX_TYPE *RegExSyntaxTypeList\r
- );\r
-\r
-\r
+++ /dev/null
-##\r
-# @file\r
-#\r
-# EFI_REGULAR_EXPRESSION_PROTOCOL Implementation\r
-#\r
-# Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
-#\r
-# This program and the accompanying materials are licensed and made available\r
-# under the terms and conditions of the BSD License that accompanies this\r
-# distribution. The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php.\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
-# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-##\r
-\r
-[Defines]\r
- INF_VERSION = 0x00010018\r
- BASE_NAME = RegularExpressionDxe\r
- FILE_GUID = 3E197E9C-D8DC-42D3-89CE-B04FA9833756\r
- MODULE_TYPE = UEFI_DRIVER\r
- VERSION_STRING = 1.0\r
- ENTRY_POINT = RegularExpressionDxeEntry\r
-\r
-[Sources]\r
- RegularExpressionDxe.c\r
- RegularExpressionDxe.h\r
- Oniguruma/OnigurumaUefiPort.h\r
- Oniguruma/OnigurumaUefiPort.c\r
- Oniguruma/OnigurumaIntrinsics.c | MSFT\r
-\r
-# Upstream Oniguruma code\r
- Oniguruma/oniguruma.h\r
- Oniguruma/regcomp.c\r
- Oniguruma/regenc.c\r
- Oniguruma/regenc.h\r
- Oniguruma/regerror.c\r
- Oniguruma/regexec.c\r
- Oniguruma/oniggnu.h\r
- Oniguruma/reggnu.c\r
- Oniguruma/regint.h\r
- Oniguruma/regparse.c\r
- Oniguruma/regparse.h\r
- Oniguruma/regposerr.c\r
- Oniguruma/onigposix.h\r
- Oniguruma/regposix.c\r
- Oniguruma/regsyntax.c\r
- Oniguruma/regtrav.c\r
- Oniguruma/regversion.c\r
- Oniguruma/st.c\r
- Oniguruma/st.h\r
-\r
-# Supported Character Encodings\r
- Oniguruma/enc/ascii.c\r
- Oniguruma/enc/unicode.c\r
- Oniguruma/enc/utf16_le.c\r
-\r
-[Packages]\r
- MdePkg/MdePkg.dec\r
- MdeModulePkg/MdeModulePkg.dec\r
-\r
-[LibraryClasses]\r
- UefiBootServicesTableLib\r
- UefiDriverEntryPoint\r
- MemoryAllocationLib\r
- BaseMemoryLib\r
- DebugLib\r
-\r
-[Guids]\r
- gEfiRegexSyntaxTypePosixExtendedGuid\r
- gEfiRegexSyntaxTypePerlGuid\r
-\r
-[Protocols]\r
- gEfiRegularExpressionProtocolGuid\r
-\r
-[BuildOptions]\r
- # Override MSFT build option to remove /Oi and /GL\r
- MSFT:DEBUG_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2 /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm \r
- MSFT:RELEASE_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2 /FIAutoGen.h /EHs-c- /GR- /GF \r
- MSFT:DEBUG_*_X64_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /X \r
- MSFT:RELEASE_*_X64_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /X \r
- MSFT:DEBUG_*_IPF_CC_FLAGS == /nologo /c /WX /GS- /W4 /EHs-c- /GR- /Gy /Os /FIAutoGen.h /QIPF_fr32 /Zi /X \r
- MSFT:RELEASE_*_IPF_CC_FLAGS == /nologo /c /WX /GS- /W4 /EHs-c- /GR- /Gy /Os /FIAutoGen.h /QIPF_fr32 /X \r
- INTEL:*_*_*_CC_FLAGS = /Oi-\r
- GCC:*_*_*_CC_FLAGS = -fno-builtin\r
-\r
- # Oniguruma: potentially uninitialized local variable used\r
- MSFT:*_*_*_CC_FLAGS = /wd4701\r
-\r
- # Oniguruma: intrinsic function not declared\r
- MSFT:*_*_*_CC_FLAGS = /wd4164\r
-\r
- # Oniguruma: old style declaration in st.c\r
- MSFT:*_*_*_CC_FLAGS = /wd4131\r
-\r
- # Oniguruma: 'type cast' : truncation from 'OnigUChar *' to 'unsigned int' \r
- MSFT:*_*_*_CC_FLAGS = /wd4305 /wd4306\r
-\r