]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c
MdeModulePkg: Regular expression protocol
[mirror_edk2.git] / MdeModulePkg / Universal / RegularExpressionDxe / Oniguruma / regenc.c
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c b/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.c
new file mode 100644 (file)
index 0000000..9e0f001
--- /dev/null
@@ -0,0 +1,904 @@
+/**********************************************************************\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