--- /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