Annotation of embedaddon/php/ext/mbstring/oniguruma/enc/utf8.c, revision 1.1

1.1     ! misho       1: /**********************************************************************
        !             2:   utf8.c -  Oniguruma (regular expression library)
        !             3: **********************************************************************/
        !             4: /*-
        !             5:  * Copyright (c) 2002-2006  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  *
        !            17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            27:  * SUCH DAMAGE.
        !            28:  */
        !            29: 
        !            30: #include "regenc.h"
        !            31: 
        !            32: #define USE_INVALID_CODE_SCHEME
        !            33: 
        !            34: #ifdef USE_INVALID_CODE_SCHEME
        !            35: /* virtual codepoint values for invalid encoding byte 0xfe and 0xff */
        !            36: #define INVALID_CODE_FE   0xfffffffe
        !            37: #define INVALID_CODE_FF   0xffffffff
        !            38: #define VALID_CODE_LIMIT  0x7fffffff
        !            39: #endif
        !            40: 
        !            41: #define utf8_islead(c)     ((UChar )((c) & 0xc0) != 0x80)
        !            42: 
        !            43: static const int EncLen_UTF8[] = {
        !            44:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            45:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            46:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            47:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            48:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            49:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            50:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            51:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            52:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            53:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            54:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            55:   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        !            56:   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
        !            57:   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
        !            58:   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
        !            59:   4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
        !            60: };
        !            61: 
        !            62: static int
        !            63: utf8_mbc_enc_len(const UChar* p)
        !            64: {
        !            65:   return EncLen_UTF8[*p];
        !            66: }
        !            67: 
        !            68: static int
        !            69: utf8_is_mbc_newline(const UChar* p, const UChar* end)
        !            70: {
        !            71:   if (p < end) {
        !            72:     if (*p == 0x0a) return 1;
        !            73: 
        !            74: #ifdef USE_UNICODE_ALL_LINE_TERMINATORS
        !            75:     if (*p == 0x0d) return 1;
        !            76:     if (p + 1 < end) {
        !            77:       if (*(p+1) == 0x85 && *p == 0xc2) /* U+0085 */
        !            78:        return 1;
        !            79:       if (p + 2 < end) {
        !            80:        if ((*(p+2) == 0xa8 || *(p+2) == 0xa9)
        !            81:            && *(p+1) == 0x80 && *p == 0xe2)  /* U+2028, U+2029 */
        !            82:          return 1;
        !            83:       }
        !            84:     }
        !            85: #endif
        !            86:   }
        !            87: 
        !            88:   return 0;
        !            89: }
        !            90: 
        !            91: static OnigCodePoint
        !            92: utf8_mbc_to_code(const UChar* p, const UChar* end)
        !            93: {
        !            94:   int c, len;
        !            95:   OnigCodePoint n;
        !            96: 
        !            97:   len = enc_len(ONIG_ENCODING_UTF8, p);
        !            98:   c = *p++;
        !            99:   if (len > 1) {
        !           100:     len--;
        !           101:     n = c & ((1 << (6 - len)) - 1);
        !           102:     while (len--) {
        !           103:       c = *p++;
        !           104:       n = (n << 6) | (c & ((1 << 6) - 1));
        !           105:     }
        !           106:     return n;
        !           107:   }
        !           108:   else {
        !           109: #ifdef USE_INVALID_CODE_SCHEME
        !           110:     if (c > 0xfd) {
        !           111:       return ((c == 0xfe) ? INVALID_CODE_FE : INVALID_CODE_FF);
        !           112:     }
        !           113: #endif
        !           114:     return (OnigCodePoint )c;
        !           115:   }
        !           116: }
        !           117: 
        !           118: static int
        !           119: utf8_code_to_mbclen(OnigCodePoint code)
        !           120: {
        !           121:   if      ((code & 0xffffff80) == 0) return 1;
        !           122:   else if ((code & 0xfffff800) == 0) {
        !           123:     if (code <= 0xff && code >= 0xfe)
        !           124:       return 1;
        !           125:     return 2;
        !           126:   }
        !           127:   else if ((code & 0xffff0000) == 0) return 3;
        !           128:   else if ((code & 0xffe00000) == 0) return 4;
        !           129:   else if ((code & 0xfc000000) == 0) return 5;
        !           130:   else if ((code & 0x80000000) == 0) return 6;
        !           131: #ifdef USE_INVALID_CODE_SCHEME
        !           132:   else if (code == INVALID_CODE_FE) return 1;
        !           133:   else if (code == INVALID_CODE_FF) return 1;
        !           134: #endif
        !           135:   else
        !           136:     return ONIGENCERR_TOO_BIG_WIDE_CHAR_VALUE;
        !           137: }
        !           138: 
        !           139: #if 0
        !           140: static int
        !           141: utf8_code_to_mbc_first(OnigCodePoint code)
        !           142: {
        !           143:   if ((code & 0xffffff80) == 0)
        !           144:     return code;
        !           145:   else {
        !           146:     if ((code & 0xfffff800) == 0)
        !           147:       return ((code>>6)& 0x1f) | 0xc0;
        !           148:     else if ((code & 0xffff0000) == 0)
        !           149:       return ((code>>12) & 0x0f) | 0xe0;
        !           150:     else if ((code & 0xffe00000) == 0)
        !           151:       return ((code>>18) & 0x07) | 0xf0;
        !           152:     else if ((code & 0xfc000000) == 0)
        !           153:       return ((code>>24) & 0x03) | 0xf8;
        !           154:     else if ((code & 0x80000000) == 0)
        !           155:       return ((code>>30) & 0x01) | 0xfc;
        !           156:     else {
        !           157:       return ONIGENCERR_TOO_BIG_WIDE_CHAR_VALUE;
        !           158:     }
        !           159:   }
        !           160: }
        !           161: #endif
        !           162: 
        !           163: static int
        !           164: utf8_code_to_mbc(OnigCodePoint code, UChar *buf)
        !           165: {
        !           166: #define UTF8_TRAILS(code, shift) (UChar )((((code) >> (shift)) & 0x3f) | 0x80)
        !           167: #define UTF8_TRAIL0(code)        (UChar )(((code) & 0x3f) | 0x80)
        !           168: 
        !           169:   if ((code & 0xffffff80) == 0) {
        !           170:     *buf = (UChar )code;
        !           171:     return 1;
        !           172:   }
        !           173:   else {
        !           174:     UChar *p = buf;
        !           175: 
        !           176:     if ((code & 0xfffff800) == 0) {
        !           177:       *p++ = (UChar )(((code>>6)& 0x1f) | 0xc0);
        !           178:     }
        !           179:     else if ((code & 0xffff0000) == 0) {
        !           180:       *p++ = (UChar )(((code>>12) & 0x0f) | 0xe0);
        !           181:       *p++ = UTF8_TRAILS(code, 6);
        !           182:     }
        !           183:     else if ((code & 0xffe00000) == 0) {
        !           184:       *p++ = (UChar )(((code>>18) & 0x07) | 0xf0);
        !           185:       *p++ = UTF8_TRAILS(code, 12);
        !           186:       *p++ = UTF8_TRAILS(code,  6);
        !           187:     }
        !           188:     else if ((code & 0xfc000000) == 0) {
        !           189:       *p++ = (UChar )(((code>>24) & 0x03) | 0xf8);
        !           190:       *p++ = UTF8_TRAILS(code, 18);
        !           191:       *p++ = UTF8_TRAILS(code, 12);
        !           192:       *p++ = UTF8_TRAILS(code,  6);
        !           193:     }
        !           194:     else if ((code & 0x80000000) == 0) {
        !           195:       *p++ = (UChar )(((code>>30) & 0x01) | 0xfc);
        !           196:       *p++ = UTF8_TRAILS(code, 24);
        !           197:       *p++ = UTF8_TRAILS(code, 18);
        !           198:       *p++ = UTF8_TRAILS(code, 12);
        !           199:       *p++ = UTF8_TRAILS(code,  6);
        !           200:     }
        !           201: #ifdef USE_INVALID_CODE_SCHEME
        !           202:     else if (code == INVALID_CODE_FE) {
        !           203:       *p = 0xfe;
        !           204:       return 1;
        !           205:     }
        !           206:     else if (code == INVALID_CODE_FF) {
        !           207:       *p = 0xff;
        !           208:       return 1;
        !           209:     }
        !           210: #endif
        !           211:     else {
        !           212:       return ONIGENCERR_TOO_BIG_WIDE_CHAR_VALUE;
        !           213:     }
        !           214: 
        !           215:     *p++ = UTF8_TRAIL0(code);
        !           216:     return p - buf;
        !           217:   }
        !           218: }
        !           219: 
        !           220: static int
        !           221: utf8_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, UChar* lower)
        !           222: {
        !           223:   const UChar* p = *pp;
        !           224: 
        !           225:   if (ONIGENC_IS_MBC_ASCII(p)) {
        !           226:     if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) {
        !           227:       *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
        !           228:     }
        !           229:     else {
        !           230:       *lower = *p;
        !           231:     }
        !           232:     (*pp)++;
        !           233:     return 1; /* return byte length of converted char to lower */
        !           234:   }
        !           235:   else {
        !           236:     int len;
        !           237: 
        !           238:     if (*p == 195) { /* 195 == '\303' */
        !           239:       int c = *(p + 1);
        !           240:       if (c >= 128) {
        !           241:         if (c <= (UChar )'\236' &&  /* upper */
        !           242:             (flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0) {
        !           243:           if (c != (UChar )'\227') {
        !           244:             *lower++ = *p;
        !           245:             *lower   = (UChar )(c + 32);
        !           246:             (*pp) += 2;
        !           247:             return 2;
        !           248:           }
        !           249:         }
        !           250:       }
        !           251:     }
        !           252: 
        !           253:     len = enc_len(ONIG_ENCODING_UTF8, p);
        !           254:     if (lower != p) {
        !           255:       int i;
        !           256:       for (i = 0; i < len; i++) {
        !           257:        *lower++ = *p++;
        !           258:       }
        !           259:     }
        !           260:     (*pp) += len;
        !           261:     return len; /* return byte length of converted char to lower */
        !           262:   }
        !           263: }
        !           264: 
        !           265: static int
        !           266: utf8_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end)
        !           267: {
        !           268:   const UChar* p = *pp;
        !           269: 
        !           270:   if (ONIGENC_IS_MBC_ASCII(p)) {
        !           271:     (*pp)++;
        !           272:     if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) {
        !           273:       return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
        !           274:     }
        !           275:   }
        !           276:   else {
        !           277:     (*pp) += enc_len(ONIG_ENCODING_UTF8, p);
        !           278: 
        !           279:     if (*p == 195) { /* 195 == '\303' */
        !           280:       int c = *(p + 1);
        !           281:       if (c >= 128) {
        !           282:         if ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0) {
        !           283:           if (c <= (UChar )'\236') { /* upper */
        !           284:             if (c == (UChar )'\227') return FALSE;
        !           285:             return TRUE;
        !           286:           }
        !           287:           else if (c >= (UChar )'\240' && c <= (UChar )'\276') { /* lower */
        !           288:             if (c == (UChar )'\267') return FALSE;
        !           289:             return TRUE;
        !           290:           }
        !           291:         }
        !           292:       }
        !           293:     }
        !           294:   }
        !           295: 
        !           296:   return FALSE;
        !           297: }
        !           298: 
        !           299: 
        !           300: static const OnigCodePoint EmptyRange[] = { 0 };
        !           301: 
        !           302: static const OnigCodePoint SBAlnum[] = {
        !           303:   3,
        !           304:   0x0030, 0x0039,
        !           305:   0x0041, 0x005a,
        !           306:   0x0061, 0x007a
        !           307: };
        !           308: 
        !           309: static const OnigCodePoint MBAlnum[] = {
        !           310: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !           311:   411,
        !           312: #else
        !           313:   6,
        !           314: #endif
        !           315:   0x00aa, 0x00aa,
        !           316:   0x00b5, 0x00b5,
        !           317:   0x00ba, 0x00ba,
        !           318:   0x00c0, 0x00d6,
        !           319:   0x00d8, 0x00f6,
        !           320:   0x00f8, 0x0236
        !           321: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !           322:   ,
        !           323:   0x0250, 0x02c1,
        !           324:   0x02c6, 0x02d1,
        !           325:   0x02e0, 0x02e4,
        !           326:   0x02ee, 0x02ee,
        !           327:   0x0300, 0x0357,
        !           328:   0x035d, 0x036f,
        !           329:   0x037a, 0x037a,
        !           330:   0x0386, 0x0386,
        !           331:   0x0388, 0x038a,
        !           332:   0x038c, 0x038c,
        !           333:   0x038e, 0x03a1,
        !           334:   0x03a3, 0x03ce,
        !           335:   0x03d0, 0x03f5,
        !           336:   0x03f7, 0x03fb,
        !           337:   0x0400, 0x0481,
        !           338:   0x0483, 0x0486,
        !           339:   0x0488, 0x04ce,
        !           340:   0x04d0, 0x04f5,
        !           341:   0x04f8, 0x04f9,
        !           342:   0x0500, 0x050f,
        !           343:   0x0531, 0x0556,
        !           344:   0x0559, 0x0559,
        !           345:   0x0561, 0x0587,
        !           346:   0x0591, 0x05a1,
        !           347:   0x05a3, 0x05b9,
        !           348:   0x05bb, 0x05bd,
        !           349:   0x05bf, 0x05bf,
        !           350:   0x05c1, 0x05c2,
        !           351:   0x05c4, 0x05c4,
        !           352:   0x05d0, 0x05ea,
        !           353:   0x05f0, 0x05f2,
        !           354:   0x0610, 0x0615,
        !           355:   0x0621, 0x063a,
        !           356:   0x0640, 0x0658,
        !           357:   0x0660, 0x0669,
        !           358:   0x066e, 0x06d3,
        !           359:   0x06d5, 0x06dc,
        !           360:   0x06de, 0x06e8,
        !           361:   0x06ea, 0x06fc,
        !           362:   0x06ff, 0x06ff,
        !           363:   0x0710, 0x074a,
        !           364:   0x074d, 0x074f,
        !           365:   0x0780, 0x07b1,
        !           366:   0x0901, 0x0939,
        !           367:   0x093c, 0x094d,
        !           368:   0x0950, 0x0954,
        !           369:   0x0958, 0x0963,
        !           370:   0x0966, 0x096f,
        !           371:   0x0981, 0x0983,
        !           372:   0x0985, 0x098c,
        !           373:   0x098f, 0x0990,
        !           374:   0x0993, 0x09a8,
        !           375:   0x09aa, 0x09b0,
        !           376:   0x09b2, 0x09b2,
        !           377:   0x09b6, 0x09b9,
        !           378:   0x09bc, 0x09c4,
        !           379:   0x09c7, 0x09c8,
        !           380:   0x09cb, 0x09cd,
        !           381:   0x09d7, 0x09d7,
        !           382:   0x09dc, 0x09dd,
        !           383:   0x09df, 0x09e3,
        !           384:   0x09e6, 0x09f1,
        !           385:   0x0a01, 0x0a03,
        !           386:   0x0a05, 0x0a0a,
        !           387:   0x0a0f, 0x0a10,
        !           388:   0x0a13, 0x0a28,
        !           389:   0x0a2a, 0x0a30,
        !           390:   0x0a32, 0x0a33,
        !           391:   0x0a35, 0x0a36,
        !           392:   0x0a38, 0x0a39,
        !           393:   0x0a3c, 0x0a3c,
        !           394:   0x0a3e, 0x0a42,
        !           395:   0x0a47, 0x0a48,
        !           396:   0x0a4b, 0x0a4d,
        !           397:   0x0a59, 0x0a5c,
        !           398:   0x0a5e, 0x0a5e,
        !           399:   0x0a66, 0x0a74,
        !           400:   0x0a81, 0x0a83,
        !           401:   0x0a85, 0x0a8d,
        !           402:   0x0a8f, 0x0a91,
        !           403:   0x0a93, 0x0aa8,
        !           404:   0x0aaa, 0x0ab0,
        !           405:   0x0ab2, 0x0ab3,
        !           406:   0x0ab5, 0x0ab9,
        !           407:   0x0abc, 0x0ac5,
        !           408:   0x0ac7, 0x0ac9,
        !           409:   0x0acb, 0x0acd,
        !           410:   0x0ad0, 0x0ad0,
        !           411:   0x0ae0, 0x0ae3,
        !           412:   0x0ae6, 0x0aef,
        !           413:   0x0b01, 0x0b03,
        !           414:   0x0b05, 0x0b0c,
        !           415:   0x0b0f, 0x0b10,
        !           416:   0x0b13, 0x0b28,
        !           417:   0x0b2a, 0x0b30,
        !           418:   0x0b32, 0x0b33,
        !           419:   0x0b35, 0x0b39,
        !           420:   0x0b3c, 0x0b43,
        !           421:   0x0b47, 0x0b48,
        !           422:   0x0b4b, 0x0b4d,
        !           423:   0x0b56, 0x0b57,
        !           424:   0x0b5c, 0x0b5d,
        !           425:   0x0b5f, 0x0b61,
        !           426:   0x0b66, 0x0b6f,
        !           427:   0x0b71, 0x0b71,
        !           428:   0x0b82, 0x0b83,
        !           429:   0x0b85, 0x0b8a,
        !           430:   0x0b8e, 0x0b90,
        !           431:   0x0b92, 0x0b95,
        !           432:   0x0b99, 0x0b9a,
        !           433:   0x0b9c, 0x0b9c,
        !           434:   0x0b9e, 0x0b9f,
        !           435:   0x0ba3, 0x0ba4,
        !           436:   0x0ba8, 0x0baa,
        !           437:   0x0bae, 0x0bb5,
        !           438:   0x0bb7, 0x0bb9,
        !           439:   0x0bbe, 0x0bc2,
        !           440:   0x0bc6, 0x0bc8,
        !           441:   0x0bca, 0x0bcd,
        !           442:   0x0bd7, 0x0bd7,
        !           443:   0x0be7, 0x0bef,
        !           444:   0x0c01, 0x0c03,
        !           445:   0x0c05, 0x0c0c,
        !           446:   0x0c0e, 0x0c10,
        !           447:   0x0c12, 0x0c28,
        !           448:   0x0c2a, 0x0c33,
        !           449:   0x0c35, 0x0c39,
        !           450:   0x0c3e, 0x0c44,
        !           451:   0x0c46, 0x0c48,
        !           452:   0x0c4a, 0x0c4d,
        !           453:   0x0c55, 0x0c56,
        !           454:   0x0c60, 0x0c61,
        !           455:   0x0c66, 0x0c6f,
        !           456:   0x0c82, 0x0c83,
        !           457:   0x0c85, 0x0c8c,
        !           458:   0x0c8e, 0x0c90,
        !           459:   0x0c92, 0x0ca8,
        !           460:   0x0caa, 0x0cb3,
        !           461:   0x0cb5, 0x0cb9,
        !           462:   0x0cbc, 0x0cc4,
        !           463:   0x0cc6, 0x0cc8,
        !           464:   0x0cca, 0x0ccd,
        !           465:   0x0cd5, 0x0cd6,
        !           466:   0x0cde, 0x0cde,
        !           467:   0x0ce0, 0x0ce1,
        !           468:   0x0ce6, 0x0cef,
        !           469:   0x0d02, 0x0d03,
        !           470:   0x0d05, 0x0d0c,
        !           471:   0x0d0e, 0x0d10,
        !           472:   0x0d12, 0x0d28,
        !           473:   0x0d2a, 0x0d39,
        !           474:   0x0d3e, 0x0d43,
        !           475:   0x0d46, 0x0d48,
        !           476:   0x0d4a, 0x0d4d,
        !           477:   0x0d57, 0x0d57,
        !           478:   0x0d60, 0x0d61,
        !           479:   0x0d66, 0x0d6f,
        !           480:   0x0d82, 0x0d83,
        !           481:   0x0d85, 0x0d96,
        !           482:   0x0d9a, 0x0db1,
        !           483:   0x0db3, 0x0dbb,
        !           484:   0x0dbd, 0x0dbd,
        !           485:   0x0dc0, 0x0dc6,
        !           486:   0x0dca, 0x0dca,
        !           487:   0x0dcf, 0x0dd4,
        !           488:   0x0dd6, 0x0dd6,
        !           489:   0x0dd8, 0x0ddf,
        !           490:   0x0df2, 0x0df3,
        !           491:   0x0e01, 0x0e3a,
        !           492:   0x0e40, 0x0e4e,
        !           493:   0x0e50, 0x0e59,
        !           494:   0x0e81, 0x0e82,
        !           495:   0x0e84, 0x0e84,
        !           496:   0x0e87, 0x0e88,
        !           497:   0x0e8a, 0x0e8a,
        !           498:   0x0e8d, 0x0e8d,
        !           499:   0x0e94, 0x0e97,
        !           500:   0x0e99, 0x0e9f,
        !           501:   0x0ea1, 0x0ea3,
        !           502:   0x0ea5, 0x0ea5,
        !           503:   0x0ea7, 0x0ea7,
        !           504:   0x0eaa, 0x0eab,
        !           505:   0x0ead, 0x0eb9,
        !           506:   0x0ebb, 0x0ebd,
        !           507:   0x0ec0, 0x0ec4,
        !           508:   0x0ec6, 0x0ec6,
        !           509:   0x0ec8, 0x0ecd,
        !           510:   0x0ed0, 0x0ed9,
        !           511:   0x0edc, 0x0edd,
        !           512:   0x0f00, 0x0f00,
        !           513:   0x0f18, 0x0f19,
        !           514:   0x0f20, 0x0f29,
        !           515:   0x0f35, 0x0f35,
        !           516:   0x0f37, 0x0f37,
        !           517:   0x0f39, 0x0f39,
        !           518:   0x0f3e, 0x0f47,
        !           519:   0x0f49, 0x0f6a,
        !           520:   0x0f71, 0x0f84,
        !           521:   0x0f86, 0x0f8b,
        !           522:   0x0f90, 0x0f97,
        !           523:   0x0f99, 0x0fbc,
        !           524:   0x0fc6, 0x0fc6,
        !           525:   0x1000, 0x1021,
        !           526:   0x1023, 0x1027,
        !           527:   0x1029, 0x102a,
        !           528:   0x102c, 0x1032,
        !           529:   0x1036, 0x1039,
        !           530:   0x1040, 0x1049,
        !           531:   0x1050, 0x1059,
        !           532:   0x10a0, 0x10c5,
        !           533:   0x10d0, 0x10f8,
        !           534:   0x1100, 0x1159,
        !           535:   0x115f, 0x11a2,
        !           536:   0x11a8, 0x11f9,
        !           537:   0x1200, 0x1206,
        !           538:   0x1208, 0x1246,
        !           539:   0x1248, 0x1248,
        !           540:   0x124a, 0x124d,
        !           541:   0x1250, 0x1256,
        !           542:   0x1258, 0x1258,
        !           543:   0x125a, 0x125d,
        !           544:   0x1260, 0x1286,
        !           545:   0x1288, 0x1288,
        !           546:   0x128a, 0x128d,
        !           547:   0x1290, 0x12ae,
        !           548:   0x12b0, 0x12b0,
        !           549:   0x12b2, 0x12b5,
        !           550:   0x12b8, 0x12be,
        !           551:   0x12c0, 0x12c0,
        !           552:   0x12c2, 0x12c5,
        !           553:   0x12c8, 0x12ce,
        !           554:   0x12d0, 0x12d6,
        !           555:   0x12d8, 0x12ee,
        !           556:   0x12f0, 0x130e,
        !           557:   0x1310, 0x1310,
        !           558:   0x1312, 0x1315,
        !           559:   0x1318, 0x131e,
        !           560:   0x1320, 0x1346,
        !           561:   0x1348, 0x135a,
        !           562:   0x1369, 0x1371,
        !           563:   0x13a0, 0x13f4,
        !           564:   0x1401, 0x166c,
        !           565:   0x166f, 0x1676,
        !           566:   0x1681, 0x169a,
        !           567:   0x16a0, 0x16ea,
        !           568:   0x1700, 0x170c,
        !           569:   0x170e, 0x1714,
        !           570:   0x1720, 0x1734,
        !           571:   0x1740, 0x1753,
        !           572:   0x1760, 0x176c,
        !           573:   0x176e, 0x1770,
        !           574:   0x1772, 0x1773,
        !           575:   0x1780, 0x17b3,
        !           576:   0x17b6, 0x17d3,
        !           577:   0x17d7, 0x17d7,
        !           578:   0x17dc, 0x17dd,
        !           579:   0x17e0, 0x17e9,
        !           580:   0x180b, 0x180d,
        !           581:   0x1810, 0x1819,
        !           582:   0x1820, 0x1877,
        !           583:   0x1880, 0x18a9,
        !           584:   0x1900, 0x191c,
        !           585:   0x1920, 0x192b,
        !           586:   0x1930, 0x193b,
        !           587:   0x1946, 0x196d,
        !           588:   0x1970, 0x1974,
        !           589:   0x1d00, 0x1d6b,
        !           590:   0x1e00, 0x1e9b,
        !           591:   0x1ea0, 0x1ef9,
        !           592:   0x1f00, 0x1f15,
        !           593:   0x1f18, 0x1f1d,
        !           594:   0x1f20, 0x1f45,
        !           595:   0x1f48, 0x1f4d,
        !           596:   0x1f50, 0x1f57,
        !           597:   0x1f59, 0x1f59,
        !           598:   0x1f5b, 0x1f5b,
        !           599:   0x1f5d, 0x1f5d,
        !           600:   0x1f5f, 0x1f7d,
        !           601:   0x1f80, 0x1fb4,
        !           602:   0x1fb6, 0x1fbc,
        !           603:   0x1fbe, 0x1fbe,
        !           604:   0x1fc2, 0x1fc4,
        !           605:   0x1fc6, 0x1fcc,
        !           606:   0x1fd0, 0x1fd3,
        !           607:   0x1fd6, 0x1fdb,
        !           608:   0x1fe0, 0x1fec,
        !           609:   0x1ff2, 0x1ff4,
        !           610:   0x1ff6, 0x1ffc,
        !           611:   0x2071, 0x2071,
        !           612:   0x207f, 0x207f,
        !           613:   0x20d0, 0x20ea,
        !           614:   0x2102, 0x2102,
        !           615:   0x2107, 0x2107,
        !           616:   0x210a, 0x2113,
        !           617:   0x2115, 0x2115,
        !           618:   0x2119, 0x211d,
        !           619:   0x2124, 0x2124,
        !           620:   0x2126, 0x2126,
        !           621:   0x2128, 0x2128,
        !           622:   0x212a, 0x212d,
        !           623:   0x212f, 0x2131,
        !           624:   0x2133, 0x2139,
        !           625:   0x213d, 0x213f,
        !           626:   0x2145, 0x2149,
        !           627:   0x3005, 0x3006,
        !           628:   0x302a, 0x302f,
        !           629:   0x3031, 0x3035,
        !           630:   0x303b, 0x303c,
        !           631:   0x3041, 0x3096,
        !           632:   0x3099, 0x309a,
        !           633:   0x309d, 0x309f,
        !           634:   0x30a1, 0x30fa,
        !           635:   0x30fc, 0x30ff,
        !           636:   0x3105, 0x312c,
        !           637:   0x3131, 0x318e,
        !           638:   0x31a0, 0x31b7,
        !           639:   0x31f0, 0x31ff,
        !           640:   0x3400, 0x4db5,
        !           641:   0x4e00, 0x9fa5,
        !           642:   0xa000, 0xa48c,
        !           643:   0xac00, 0xd7a3,
        !           644:   0xf900, 0xfa2d,
        !           645:   0xfa30, 0xfa6a,
        !           646:   0xfb00, 0xfb06,
        !           647:   0xfb13, 0xfb17,
        !           648:   0xfb1d, 0xfb28,
        !           649:   0xfb2a, 0xfb36,
        !           650:   0xfb38, 0xfb3c,
        !           651:   0xfb3e, 0xfb3e,
        !           652:   0xfb40, 0xfb41,
        !           653:   0xfb43, 0xfb44,
        !           654:   0xfb46, 0xfbb1,
        !           655:   0xfbd3, 0xfd3d,
        !           656:   0xfd50, 0xfd8f,
        !           657:   0xfd92, 0xfdc7,
        !           658:   0xfdf0, 0xfdfb,
        !           659:   0xfe00, 0xfe0f,
        !           660:   0xfe20, 0xfe23,
        !           661:   0xfe70, 0xfe74,
        !           662:   0xfe76, 0xfefc,
        !           663:   0xff10, 0xff19,
        !           664:   0xff21, 0xff3a,
        !           665:   0xff41, 0xff5a,
        !           666:   0xff66, 0xffbe,
        !           667:   0xffc2, 0xffc7,
        !           668:   0xffca, 0xffcf,
        !           669:   0xffd2, 0xffd7,
        !           670:   0xffda, 0xffdc,
        !           671:   0x10000, 0x1000b,
        !           672:   0x1000d, 0x10026,
        !           673:   0x10028, 0x1003a,
        !           674:   0x1003c, 0x1003d,
        !           675:   0x1003f, 0x1004d,
        !           676:   0x10050, 0x1005d,
        !           677:   0x10080, 0x100fa,
        !           678:   0x10300, 0x1031e,
        !           679:   0x10330, 0x10349,
        !           680:   0x10380, 0x1039d,
        !           681:   0x10400, 0x1049d,
        !           682:   0x104a0, 0x104a9,
        !           683:   0x10800, 0x10805,
        !           684:   0x10808, 0x10808,
        !           685:   0x1080a, 0x10835,
        !           686:   0x10837, 0x10838,
        !           687:   0x1083c, 0x1083c,
        !           688:   0x1083f, 0x1083f,
        !           689:   0x1d165, 0x1d169,
        !           690:   0x1d16d, 0x1d172,
        !           691:   0x1d17b, 0x1d182,
        !           692:   0x1d185, 0x1d18b,
        !           693:   0x1d1aa, 0x1d1ad,
        !           694:   0x1d400, 0x1d454,
        !           695:   0x1d456, 0x1d49c,
        !           696:   0x1d49e, 0x1d49f,
        !           697:   0x1d4a2, 0x1d4a2,
        !           698:   0x1d4a5, 0x1d4a6,
        !           699:   0x1d4a9, 0x1d4ac,
        !           700:   0x1d4ae, 0x1d4b9,
        !           701:   0x1d4bb, 0x1d4bb,
        !           702:   0x1d4bd, 0x1d4c3,
        !           703:   0x1d4c5, 0x1d505,
        !           704:   0x1d507, 0x1d50a,
        !           705:   0x1d50d, 0x1d514,
        !           706:   0x1d516, 0x1d51c,
        !           707:   0x1d51e, 0x1d539,
        !           708:   0x1d53b, 0x1d53e,
        !           709:   0x1d540, 0x1d544,
        !           710:   0x1d546, 0x1d546,
        !           711:   0x1d54a, 0x1d550,
        !           712:   0x1d552, 0x1d6a3,
        !           713:   0x1d6a8, 0x1d6c0,
        !           714:   0x1d6c2, 0x1d6da,
        !           715:   0x1d6dc, 0x1d6fa,
        !           716:   0x1d6fc, 0x1d714,
        !           717:   0x1d716, 0x1d734,
        !           718:   0x1d736, 0x1d74e,
        !           719:   0x1d750, 0x1d76e,
        !           720:   0x1d770, 0x1d788,
        !           721:   0x1d78a, 0x1d7a8,
        !           722:   0x1d7aa, 0x1d7c2,
        !           723:   0x1d7c4, 0x1d7c9,
        !           724:   0x1d7ce, 0x1d7ff,
        !           725:   0x20000, 0x2a6d6,
        !           726:   0x2f800, 0x2fa1d,
        !           727:   0xe0100, 0xe01ef
        !           728: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !           729: }; /* end of MBAlnum */
        !           730: 
        !           731: static const OnigCodePoint SBAlpha[] = {
        !           732:   2,
        !           733:   0x0041, 0x005a,
        !           734:   0x0061, 0x007a
        !           735: };
        !           736: 
        !           737: static const OnigCodePoint MBAlpha[] = {
        !           738: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !           739:   394,
        !           740: #else
        !           741:   6,
        !           742: #endif
        !           743:   0x00aa, 0x00aa,
        !           744:   0x00b5, 0x00b5,
        !           745:   0x00ba, 0x00ba,
        !           746:   0x00c0, 0x00d6,
        !           747:   0x00d8, 0x00f6,
        !           748:   0x00f8, 0x0236
        !           749: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !           750:   ,
        !           751:   0x0250, 0x02c1,
        !           752:   0x02c6, 0x02d1,
        !           753:   0x02e0, 0x02e4,
        !           754:   0x02ee, 0x02ee,
        !           755:   0x0300, 0x0357,
        !           756:   0x035d, 0x036f,
        !           757:   0x037a, 0x037a,
        !           758:   0x0386, 0x0386,
        !           759:   0x0388, 0x038a,
        !           760:   0x038c, 0x038c,
        !           761:   0x038e, 0x03a1,
        !           762:   0x03a3, 0x03ce,
        !           763:   0x03d0, 0x03f5,
        !           764:   0x03f7, 0x03fb,
        !           765:   0x0400, 0x0481,
        !           766:   0x0483, 0x0486,
        !           767:   0x0488, 0x04ce,
        !           768:   0x04d0, 0x04f5,
        !           769:   0x04f8, 0x04f9,
        !           770:   0x0500, 0x050f,
        !           771:   0x0531, 0x0556,
        !           772:   0x0559, 0x0559,
        !           773:   0x0561, 0x0587,
        !           774:   0x0591, 0x05a1,
        !           775:   0x05a3, 0x05b9,
        !           776:   0x05bb, 0x05bd,
        !           777:   0x05bf, 0x05bf,
        !           778:   0x05c1, 0x05c2,
        !           779:   0x05c4, 0x05c4,
        !           780:   0x05d0, 0x05ea,
        !           781:   0x05f0, 0x05f2,
        !           782:   0x0610, 0x0615,
        !           783:   0x0621, 0x063a,
        !           784:   0x0640, 0x0658,
        !           785:   0x066e, 0x06d3,
        !           786:   0x06d5, 0x06dc,
        !           787:   0x06de, 0x06e8,
        !           788:   0x06ea, 0x06ef,
        !           789:   0x06fa, 0x06fc,
        !           790:   0x06ff, 0x06ff,
        !           791:   0x0710, 0x074a,
        !           792:   0x074d, 0x074f,
        !           793:   0x0780, 0x07b1,
        !           794:   0x0901, 0x0939,
        !           795:   0x093c, 0x094d,
        !           796:   0x0950, 0x0954,
        !           797:   0x0958, 0x0963,
        !           798:   0x0981, 0x0983,
        !           799:   0x0985, 0x098c,
        !           800:   0x098f, 0x0990,
        !           801:   0x0993, 0x09a8,
        !           802:   0x09aa, 0x09b0,
        !           803:   0x09b2, 0x09b2,
        !           804:   0x09b6, 0x09b9,
        !           805:   0x09bc, 0x09c4,
        !           806:   0x09c7, 0x09c8,
        !           807:   0x09cb, 0x09cd,
        !           808:   0x09d7, 0x09d7,
        !           809:   0x09dc, 0x09dd,
        !           810:   0x09df, 0x09e3,
        !           811:   0x09f0, 0x09f1,
        !           812:   0x0a01, 0x0a03,
        !           813:   0x0a05, 0x0a0a,
        !           814:   0x0a0f, 0x0a10,
        !           815:   0x0a13, 0x0a28,
        !           816:   0x0a2a, 0x0a30,
        !           817:   0x0a32, 0x0a33,
        !           818:   0x0a35, 0x0a36,
        !           819:   0x0a38, 0x0a39,
        !           820:   0x0a3c, 0x0a3c,
        !           821:   0x0a3e, 0x0a42,
        !           822:   0x0a47, 0x0a48,
        !           823:   0x0a4b, 0x0a4d,
        !           824:   0x0a59, 0x0a5c,
        !           825:   0x0a5e, 0x0a5e,
        !           826:   0x0a70, 0x0a74,
        !           827:   0x0a81, 0x0a83,
        !           828:   0x0a85, 0x0a8d,
        !           829:   0x0a8f, 0x0a91,
        !           830:   0x0a93, 0x0aa8,
        !           831:   0x0aaa, 0x0ab0,
        !           832:   0x0ab2, 0x0ab3,
        !           833:   0x0ab5, 0x0ab9,
        !           834:   0x0abc, 0x0ac5,
        !           835:   0x0ac7, 0x0ac9,
        !           836:   0x0acb, 0x0acd,
        !           837:   0x0ad0, 0x0ad0,
        !           838:   0x0ae0, 0x0ae3,
        !           839:   0x0b01, 0x0b03,
        !           840:   0x0b05, 0x0b0c,
        !           841:   0x0b0f, 0x0b10,
        !           842:   0x0b13, 0x0b28,
        !           843:   0x0b2a, 0x0b30,
        !           844:   0x0b32, 0x0b33,
        !           845:   0x0b35, 0x0b39,
        !           846:   0x0b3c, 0x0b43,
        !           847:   0x0b47, 0x0b48,
        !           848:   0x0b4b, 0x0b4d,
        !           849:   0x0b56, 0x0b57,
        !           850:   0x0b5c, 0x0b5d,
        !           851:   0x0b5f, 0x0b61,
        !           852:   0x0b71, 0x0b71,
        !           853:   0x0b82, 0x0b83,
        !           854:   0x0b85, 0x0b8a,
        !           855:   0x0b8e, 0x0b90,
        !           856:   0x0b92, 0x0b95,
        !           857:   0x0b99, 0x0b9a,
        !           858:   0x0b9c, 0x0b9c,
        !           859:   0x0b9e, 0x0b9f,
        !           860:   0x0ba3, 0x0ba4,
        !           861:   0x0ba8, 0x0baa,
        !           862:   0x0bae, 0x0bb5,
        !           863:   0x0bb7, 0x0bb9,
        !           864:   0x0bbe, 0x0bc2,
        !           865:   0x0bc6, 0x0bc8,
        !           866:   0x0bca, 0x0bcd,
        !           867:   0x0bd7, 0x0bd7,
        !           868:   0x0c01, 0x0c03,
        !           869:   0x0c05, 0x0c0c,
        !           870:   0x0c0e, 0x0c10,
        !           871:   0x0c12, 0x0c28,
        !           872:   0x0c2a, 0x0c33,
        !           873:   0x0c35, 0x0c39,
        !           874:   0x0c3e, 0x0c44,
        !           875:   0x0c46, 0x0c48,
        !           876:   0x0c4a, 0x0c4d,
        !           877:   0x0c55, 0x0c56,
        !           878:   0x0c60, 0x0c61,
        !           879:   0x0c82, 0x0c83,
        !           880:   0x0c85, 0x0c8c,
        !           881:   0x0c8e, 0x0c90,
        !           882:   0x0c92, 0x0ca8,
        !           883:   0x0caa, 0x0cb3,
        !           884:   0x0cb5, 0x0cb9,
        !           885:   0x0cbc, 0x0cc4,
        !           886:   0x0cc6, 0x0cc8,
        !           887:   0x0cca, 0x0ccd,
        !           888:   0x0cd5, 0x0cd6,
        !           889:   0x0cde, 0x0cde,
        !           890:   0x0ce0, 0x0ce1,
        !           891:   0x0d02, 0x0d03,
        !           892:   0x0d05, 0x0d0c,
        !           893:   0x0d0e, 0x0d10,
        !           894:   0x0d12, 0x0d28,
        !           895:   0x0d2a, 0x0d39,
        !           896:   0x0d3e, 0x0d43,
        !           897:   0x0d46, 0x0d48,
        !           898:   0x0d4a, 0x0d4d,
        !           899:   0x0d57, 0x0d57,
        !           900:   0x0d60, 0x0d61,
        !           901:   0x0d82, 0x0d83,
        !           902:   0x0d85, 0x0d96,
        !           903:   0x0d9a, 0x0db1,
        !           904:   0x0db3, 0x0dbb,
        !           905:   0x0dbd, 0x0dbd,
        !           906:   0x0dc0, 0x0dc6,
        !           907:   0x0dca, 0x0dca,
        !           908:   0x0dcf, 0x0dd4,
        !           909:   0x0dd6, 0x0dd6,
        !           910:   0x0dd8, 0x0ddf,
        !           911:   0x0df2, 0x0df3,
        !           912:   0x0e01, 0x0e3a,
        !           913:   0x0e40, 0x0e4e,
        !           914:   0x0e81, 0x0e82,
        !           915:   0x0e84, 0x0e84,
        !           916:   0x0e87, 0x0e88,
        !           917:   0x0e8a, 0x0e8a,
        !           918:   0x0e8d, 0x0e8d,
        !           919:   0x0e94, 0x0e97,
        !           920:   0x0e99, 0x0e9f,
        !           921:   0x0ea1, 0x0ea3,
        !           922:   0x0ea5, 0x0ea5,
        !           923:   0x0ea7, 0x0ea7,
        !           924:   0x0eaa, 0x0eab,
        !           925:   0x0ead, 0x0eb9,
        !           926:   0x0ebb, 0x0ebd,
        !           927:   0x0ec0, 0x0ec4,
        !           928:   0x0ec6, 0x0ec6,
        !           929:   0x0ec8, 0x0ecd,
        !           930:   0x0edc, 0x0edd,
        !           931:   0x0f00, 0x0f00,
        !           932:   0x0f18, 0x0f19,
        !           933:   0x0f35, 0x0f35,
        !           934:   0x0f37, 0x0f37,
        !           935:   0x0f39, 0x0f39,
        !           936:   0x0f3e, 0x0f47,
        !           937:   0x0f49, 0x0f6a,
        !           938:   0x0f71, 0x0f84,
        !           939:   0x0f86, 0x0f8b,
        !           940:   0x0f90, 0x0f97,
        !           941:   0x0f99, 0x0fbc,
        !           942:   0x0fc6, 0x0fc6,
        !           943:   0x1000, 0x1021,
        !           944:   0x1023, 0x1027,
        !           945:   0x1029, 0x102a,
        !           946:   0x102c, 0x1032,
        !           947:   0x1036, 0x1039,
        !           948:   0x1050, 0x1059,
        !           949:   0x10a0, 0x10c5,
        !           950:   0x10d0, 0x10f8,
        !           951:   0x1100, 0x1159,
        !           952:   0x115f, 0x11a2,
        !           953:   0x11a8, 0x11f9,
        !           954:   0x1200, 0x1206,
        !           955:   0x1208, 0x1246,
        !           956:   0x1248, 0x1248,
        !           957:   0x124a, 0x124d,
        !           958:   0x1250, 0x1256,
        !           959:   0x1258, 0x1258,
        !           960:   0x125a, 0x125d,
        !           961:   0x1260, 0x1286,
        !           962:   0x1288, 0x1288,
        !           963:   0x128a, 0x128d,
        !           964:   0x1290, 0x12ae,
        !           965:   0x12b0, 0x12b0,
        !           966:   0x12b2, 0x12b5,
        !           967:   0x12b8, 0x12be,
        !           968:   0x12c0, 0x12c0,
        !           969:   0x12c2, 0x12c5,
        !           970:   0x12c8, 0x12ce,
        !           971:   0x12d0, 0x12d6,
        !           972:   0x12d8, 0x12ee,
        !           973:   0x12f0, 0x130e,
        !           974:   0x1310, 0x1310,
        !           975:   0x1312, 0x1315,
        !           976:   0x1318, 0x131e,
        !           977:   0x1320, 0x1346,
        !           978:   0x1348, 0x135a,
        !           979:   0x13a0, 0x13f4,
        !           980:   0x1401, 0x166c,
        !           981:   0x166f, 0x1676,
        !           982:   0x1681, 0x169a,
        !           983:   0x16a0, 0x16ea,
        !           984:   0x1700, 0x170c,
        !           985:   0x170e, 0x1714,
        !           986:   0x1720, 0x1734,
        !           987:   0x1740, 0x1753,
        !           988:   0x1760, 0x176c,
        !           989:   0x176e, 0x1770,
        !           990:   0x1772, 0x1773,
        !           991:   0x1780, 0x17b3,
        !           992:   0x17b6, 0x17d3,
        !           993:   0x17d7, 0x17d7,
        !           994:   0x17dc, 0x17dd,
        !           995:   0x180b, 0x180d,
        !           996:   0x1820, 0x1877,
        !           997:   0x1880, 0x18a9,
        !           998:   0x1900, 0x191c,
        !           999:   0x1920, 0x192b,
        !          1000:   0x1930, 0x193b,
        !          1001:   0x1950, 0x196d,
        !          1002:   0x1970, 0x1974,
        !          1003:   0x1d00, 0x1d6b,
        !          1004:   0x1e00, 0x1e9b,
        !          1005:   0x1ea0, 0x1ef9,
        !          1006:   0x1f00, 0x1f15,
        !          1007:   0x1f18, 0x1f1d,
        !          1008:   0x1f20, 0x1f45,
        !          1009:   0x1f48, 0x1f4d,
        !          1010:   0x1f50, 0x1f57,
        !          1011:   0x1f59, 0x1f59,
        !          1012:   0x1f5b, 0x1f5b,
        !          1013:   0x1f5d, 0x1f5d,
        !          1014:   0x1f5f, 0x1f7d,
        !          1015:   0x1f80, 0x1fb4,
        !          1016:   0x1fb6, 0x1fbc,
        !          1017:   0x1fbe, 0x1fbe,
        !          1018:   0x1fc2, 0x1fc4,
        !          1019:   0x1fc6, 0x1fcc,
        !          1020:   0x1fd0, 0x1fd3,
        !          1021:   0x1fd6, 0x1fdb,
        !          1022:   0x1fe0, 0x1fec,
        !          1023:   0x1ff2, 0x1ff4,
        !          1024:   0x1ff6, 0x1ffc,
        !          1025:   0x2071, 0x2071,
        !          1026:   0x207f, 0x207f,
        !          1027:   0x20d0, 0x20ea,
        !          1028:   0x2102, 0x2102,
        !          1029:   0x2107, 0x2107,
        !          1030:   0x210a, 0x2113,
        !          1031:   0x2115, 0x2115,
        !          1032:   0x2119, 0x211d,
        !          1033:   0x2124, 0x2124,
        !          1034:   0x2126, 0x2126,
        !          1035:   0x2128, 0x2128,
        !          1036:   0x212a, 0x212d,
        !          1037:   0x212f, 0x2131,
        !          1038:   0x2133, 0x2139,
        !          1039:   0x213d, 0x213f,
        !          1040:   0x2145, 0x2149,
        !          1041:   0x3005, 0x3006,
        !          1042:   0x302a, 0x302f,
        !          1043:   0x3031, 0x3035,
        !          1044:   0x303b, 0x303c,
        !          1045:   0x3041, 0x3096,
        !          1046:   0x3099, 0x309a,
        !          1047:   0x309d, 0x309f,
        !          1048:   0x30a1, 0x30fa,
        !          1049:   0x30fc, 0x30ff,
        !          1050:   0x3105, 0x312c,
        !          1051:   0x3131, 0x318e,
        !          1052:   0x31a0, 0x31b7,
        !          1053:   0x31f0, 0x31ff,
        !          1054:   0x3400, 0x4db5,
        !          1055:   0x4e00, 0x9fa5,
        !          1056:   0xa000, 0xa48c,
        !          1057:   0xac00, 0xd7a3,
        !          1058:   0xf900, 0xfa2d,
        !          1059:   0xfa30, 0xfa6a,
        !          1060:   0xfb00, 0xfb06,
        !          1061:   0xfb13, 0xfb17,
        !          1062:   0xfb1d, 0xfb28,
        !          1063:   0xfb2a, 0xfb36,
        !          1064:   0xfb38, 0xfb3c,
        !          1065:   0xfb3e, 0xfb3e,
        !          1066:   0xfb40, 0xfb41,
        !          1067:   0xfb43, 0xfb44,
        !          1068:   0xfb46, 0xfbb1,
        !          1069:   0xfbd3, 0xfd3d,
        !          1070:   0xfd50, 0xfd8f,
        !          1071:   0xfd92, 0xfdc7,
        !          1072:   0xfdf0, 0xfdfb,
        !          1073:   0xfe00, 0xfe0f,
        !          1074:   0xfe20, 0xfe23,
        !          1075:   0xfe70, 0xfe74,
        !          1076:   0xfe76, 0xfefc,
        !          1077:   0xff21, 0xff3a,
        !          1078:   0xff41, 0xff5a,
        !          1079:   0xff66, 0xffbe,
        !          1080:   0xffc2, 0xffc7,
        !          1081:   0xffca, 0xffcf,
        !          1082:   0xffd2, 0xffd7,
        !          1083:   0xffda, 0xffdc,
        !          1084:   0x10000, 0x1000b,
        !          1085:   0x1000d, 0x10026,
        !          1086:   0x10028, 0x1003a,
        !          1087:   0x1003c, 0x1003d,
        !          1088:   0x1003f, 0x1004d,
        !          1089:   0x10050, 0x1005d,
        !          1090:   0x10080, 0x100fa,
        !          1091:   0x10300, 0x1031e,
        !          1092:   0x10330, 0x10349,
        !          1093:   0x10380, 0x1039d,
        !          1094:   0x10400, 0x1049d,
        !          1095:   0x10800, 0x10805,
        !          1096:   0x10808, 0x10808,
        !          1097:   0x1080a, 0x10835,
        !          1098:   0x10837, 0x10838,
        !          1099:   0x1083c, 0x1083c,
        !          1100:   0x1083f, 0x1083f,
        !          1101:   0x1d165, 0x1d169,
        !          1102:   0x1d16d, 0x1d172,
        !          1103:   0x1d17b, 0x1d182,
        !          1104:   0x1d185, 0x1d18b,
        !          1105:   0x1d1aa, 0x1d1ad,
        !          1106:   0x1d400, 0x1d454,
        !          1107:   0x1d456, 0x1d49c,
        !          1108:   0x1d49e, 0x1d49f,
        !          1109:   0x1d4a2, 0x1d4a2,
        !          1110:   0x1d4a5, 0x1d4a6,
        !          1111:   0x1d4a9, 0x1d4ac,
        !          1112:   0x1d4ae, 0x1d4b9,
        !          1113:   0x1d4bb, 0x1d4bb,
        !          1114:   0x1d4bd, 0x1d4c3,
        !          1115:   0x1d4c5, 0x1d505,
        !          1116:   0x1d507, 0x1d50a,
        !          1117:   0x1d50d, 0x1d514,
        !          1118:   0x1d516, 0x1d51c,
        !          1119:   0x1d51e, 0x1d539,
        !          1120:   0x1d53b, 0x1d53e,
        !          1121:   0x1d540, 0x1d544,
        !          1122:   0x1d546, 0x1d546,
        !          1123:   0x1d54a, 0x1d550,
        !          1124:   0x1d552, 0x1d6a3,
        !          1125:   0x1d6a8, 0x1d6c0,
        !          1126:   0x1d6c2, 0x1d6da,
        !          1127:   0x1d6dc, 0x1d6fa,
        !          1128:   0x1d6fc, 0x1d714,
        !          1129:   0x1d716, 0x1d734,
        !          1130:   0x1d736, 0x1d74e,
        !          1131:   0x1d750, 0x1d76e,
        !          1132:   0x1d770, 0x1d788,
        !          1133:   0x1d78a, 0x1d7a8,
        !          1134:   0x1d7aa, 0x1d7c2,
        !          1135:   0x1d7c4, 0x1d7c9,
        !          1136:   0x20000, 0x2a6d6,
        !          1137:   0x2f800, 0x2fa1d,
        !          1138:   0xe0100, 0xe01ef
        !          1139: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          1140: }; /* end of MBAlpha */
        !          1141: 
        !          1142: static const OnigCodePoint SBBlank[] = {
        !          1143:   2,
        !          1144:   0x0009, 0x0009,
        !          1145:   0x0020, 0x0020
        !          1146: };
        !          1147: 
        !          1148: static const OnigCodePoint MBBlank[] = {
        !          1149: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1150:   7,
        !          1151: #else
        !          1152:   1,
        !          1153: #endif
        !          1154:   0x00a0, 0x00a0
        !          1155: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1156:   ,
        !          1157:   0x1680, 0x1680,
        !          1158:   0x180e, 0x180e,
        !          1159:   0x2000, 0x200a,
        !          1160:   0x202f, 0x202f,
        !          1161:   0x205f, 0x205f,
        !          1162:   0x3000, 0x3000
        !          1163: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          1164: }; /* end of MBBlank */
        !          1165: 
        !          1166: static const OnigCodePoint SBCntrl[] = {
        !          1167:   2,
        !          1168:   0x0000, 0x001f,
        !          1169:   0x007f, 0x007f
        !          1170: };
        !          1171: 
        !          1172: static const OnigCodePoint MBCntrl[] = {
        !          1173: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1174:   18,
        !          1175: #else
        !          1176:   2,
        !          1177: #endif
        !          1178:   0x0080, 0x009f,
        !          1179:   0x00ad, 0x00ad
        !          1180: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1181:   ,
        !          1182:   0x0600, 0x0603,
        !          1183:   0x06dd, 0x06dd,
        !          1184:   0x070f, 0x070f,
        !          1185:   0x17b4, 0x17b5,
        !          1186:   0x200b, 0x200f,
        !          1187:   0x202a, 0x202e,
        !          1188:   0x2060, 0x2063,
        !          1189:   0x206a, 0x206f,
        !          1190:   0xd800, 0xf8ff,
        !          1191:   0xfeff, 0xfeff,
        !          1192:   0xfff9, 0xfffb,
        !          1193:   0x1d173, 0x1d17a,
        !          1194:   0xe0001, 0xe0001,
        !          1195:   0xe0020, 0xe007f,
        !          1196:   0xf0000, 0xffffd,
        !          1197:   0x100000, 0x10fffd
        !          1198: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          1199: }; /* end of MBCntrl */
        !          1200: 
        !          1201: static const OnigCodePoint SBDigit[] = {
        !          1202:   1,
        !          1203:   0x0030, 0x0039
        !          1204: };
        !          1205: 
        !          1206: static const OnigCodePoint MBDigit[] = {
        !          1207: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1208:   22,
        !          1209: #else
        !          1210:   0
        !          1211: #endif
        !          1212: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1213:   0x0660, 0x0669,
        !          1214:   0x06f0, 0x06f9,
        !          1215:   0x0966, 0x096f,
        !          1216:   0x09e6, 0x09ef,
        !          1217:   0x0a66, 0x0a6f,
        !          1218:   0x0ae6, 0x0aef,
        !          1219:   0x0b66, 0x0b6f,
        !          1220:   0x0be7, 0x0bef,
        !          1221:   0x0c66, 0x0c6f,
        !          1222:   0x0ce6, 0x0cef,
        !          1223:   0x0d66, 0x0d6f,
        !          1224:   0x0e50, 0x0e59,
        !          1225:   0x0ed0, 0x0ed9,
        !          1226:   0x0f20, 0x0f29,
        !          1227:   0x1040, 0x1049,
        !          1228:   0x1369, 0x1371,
        !          1229:   0x17e0, 0x17e9,
        !          1230:   0x1810, 0x1819,
        !          1231:   0x1946, 0x194f,
        !          1232:   0xff10, 0xff19,
        !          1233:   0x104a0, 0x104a9,
        !          1234:   0x1d7ce, 0x1d7ff
        !          1235: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          1236: }; /* end of MBDigit */
        !          1237: 
        !          1238: static const OnigCodePoint SBGraph[] = {
        !          1239:   1,
        !          1240:   0x0021, 0x007e
        !          1241: };
        !          1242: 
        !          1243: static const OnigCodePoint MBGraph[] = {
        !          1244: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1245:   404,
        !          1246: #else
        !          1247:   1,
        !          1248: #endif
        !          1249:   0x00a1, 0x0236
        !          1250: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1251:   ,
        !          1252:   0x0250, 0x0357,
        !          1253:   0x035d, 0x036f,
        !          1254:   0x0374, 0x0375,
        !          1255:   0x037a, 0x037a,
        !          1256:   0x037e, 0x037e,
        !          1257:   0x0384, 0x038a,
        !          1258:   0x038c, 0x038c,
        !          1259:   0x038e, 0x03a1,
        !          1260:   0x03a3, 0x03ce,
        !          1261:   0x03d0, 0x03fb,
        !          1262:   0x0400, 0x0486,
        !          1263:   0x0488, 0x04ce,
        !          1264:   0x04d0, 0x04f5,
        !          1265:   0x04f8, 0x04f9,
        !          1266:   0x0500, 0x050f,
        !          1267:   0x0531, 0x0556,
        !          1268:   0x0559, 0x055f,
        !          1269:   0x0561, 0x0587,
        !          1270:   0x0589, 0x058a,
        !          1271:   0x0591, 0x05a1,
        !          1272:   0x05a3, 0x05b9,
        !          1273:   0x05bb, 0x05c4,
        !          1274:   0x05d0, 0x05ea,
        !          1275:   0x05f0, 0x05f4,
        !          1276:   0x0600, 0x0603,
        !          1277:   0x060c, 0x0615,
        !          1278:   0x061b, 0x061b,
        !          1279:   0x061f, 0x061f,
        !          1280:   0x0621, 0x063a,
        !          1281:   0x0640, 0x0658,
        !          1282:   0x0660, 0x070d,
        !          1283:   0x070f, 0x074a,
        !          1284:   0x074d, 0x074f,
        !          1285:   0x0780, 0x07b1,
        !          1286:   0x0901, 0x0939,
        !          1287:   0x093c, 0x094d,
        !          1288:   0x0950, 0x0954,
        !          1289:   0x0958, 0x0970,
        !          1290:   0x0981, 0x0983,
        !          1291:   0x0985, 0x098c,
        !          1292:   0x098f, 0x0990,
        !          1293:   0x0993, 0x09a8,
        !          1294:   0x09aa, 0x09b0,
        !          1295:   0x09b2, 0x09b2,
        !          1296:   0x09b6, 0x09b9,
        !          1297:   0x09bc, 0x09c4,
        !          1298:   0x09c7, 0x09c8,
        !          1299:   0x09cb, 0x09cd,
        !          1300:   0x09d7, 0x09d7,
        !          1301:   0x09dc, 0x09dd,
        !          1302:   0x09df, 0x09e3,
        !          1303:   0x09e6, 0x09fa,
        !          1304:   0x0a01, 0x0a03,
        !          1305:   0x0a05, 0x0a0a,
        !          1306:   0x0a0f, 0x0a10,
        !          1307:   0x0a13, 0x0a28,
        !          1308:   0x0a2a, 0x0a30,
        !          1309:   0x0a32, 0x0a33,
        !          1310:   0x0a35, 0x0a36,
        !          1311:   0x0a38, 0x0a39,
        !          1312:   0x0a3c, 0x0a3c,
        !          1313:   0x0a3e, 0x0a42,
        !          1314:   0x0a47, 0x0a48,
        !          1315:   0x0a4b, 0x0a4d,
        !          1316:   0x0a59, 0x0a5c,
        !          1317:   0x0a5e, 0x0a5e,
        !          1318:   0x0a66, 0x0a74,
        !          1319:   0x0a81, 0x0a83,
        !          1320:   0x0a85, 0x0a8d,
        !          1321:   0x0a8f, 0x0a91,
        !          1322:   0x0a93, 0x0aa8,
        !          1323:   0x0aaa, 0x0ab0,
        !          1324:   0x0ab2, 0x0ab3,
        !          1325:   0x0ab5, 0x0ab9,
        !          1326:   0x0abc, 0x0ac5,
        !          1327:   0x0ac7, 0x0ac9,
        !          1328:   0x0acb, 0x0acd,
        !          1329:   0x0ad0, 0x0ad0,
        !          1330:   0x0ae0, 0x0ae3,
        !          1331:   0x0ae6, 0x0aef,
        !          1332:   0x0af1, 0x0af1,
        !          1333:   0x0b01, 0x0b03,
        !          1334:   0x0b05, 0x0b0c,
        !          1335:   0x0b0f, 0x0b10,
        !          1336:   0x0b13, 0x0b28,
        !          1337:   0x0b2a, 0x0b30,
        !          1338:   0x0b32, 0x0b33,
        !          1339:   0x0b35, 0x0b39,
        !          1340:   0x0b3c, 0x0b43,
        !          1341:   0x0b47, 0x0b48,
        !          1342:   0x0b4b, 0x0b4d,
        !          1343:   0x0b56, 0x0b57,
        !          1344:   0x0b5c, 0x0b5d,
        !          1345:   0x0b5f, 0x0b61,
        !          1346:   0x0b66, 0x0b71,
        !          1347:   0x0b82, 0x0b83,
        !          1348:   0x0b85, 0x0b8a,
        !          1349:   0x0b8e, 0x0b90,
        !          1350:   0x0b92, 0x0b95,
        !          1351:   0x0b99, 0x0b9a,
        !          1352:   0x0b9c, 0x0b9c,
        !          1353:   0x0b9e, 0x0b9f,
        !          1354:   0x0ba3, 0x0ba4,
        !          1355:   0x0ba8, 0x0baa,
        !          1356:   0x0bae, 0x0bb5,
        !          1357:   0x0bb7, 0x0bb9,
        !          1358:   0x0bbe, 0x0bc2,
        !          1359:   0x0bc6, 0x0bc8,
        !          1360:   0x0bca, 0x0bcd,
        !          1361:   0x0bd7, 0x0bd7,
        !          1362:   0x0be7, 0x0bfa,
        !          1363:   0x0c01, 0x0c03,
        !          1364:   0x0c05, 0x0c0c,
        !          1365:   0x0c0e, 0x0c10,
        !          1366:   0x0c12, 0x0c28,
        !          1367:   0x0c2a, 0x0c33,
        !          1368:   0x0c35, 0x0c39,
        !          1369:   0x0c3e, 0x0c44,
        !          1370:   0x0c46, 0x0c48,
        !          1371:   0x0c4a, 0x0c4d,
        !          1372:   0x0c55, 0x0c56,
        !          1373:   0x0c60, 0x0c61,
        !          1374:   0x0c66, 0x0c6f,
        !          1375:   0x0c82, 0x0c83,
        !          1376:   0x0c85, 0x0c8c,
        !          1377:   0x0c8e, 0x0c90,
        !          1378:   0x0c92, 0x0ca8,
        !          1379:   0x0caa, 0x0cb3,
        !          1380:   0x0cb5, 0x0cb9,
        !          1381:   0x0cbc, 0x0cc4,
        !          1382:   0x0cc6, 0x0cc8,
        !          1383:   0x0cca, 0x0ccd,
        !          1384:   0x0cd5, 0x0cd6,
        !          1385:   0x0cde, 0x0cde,
        !          1386:   0x0ce0, 0x0ce1,
        !          1387:   0x0ce6, 0x0cef,
        !          1388:   0x0d02, 0x0d03,
        !          1389:   0x0d05, 0x0d0c,
        !          1390:   0x0d0e, 0x0d10,
        !          1391:   0x0d12, 0x0d28,
        !          1392:   0x0d2a, 0x0d39,
        !          1393:   0x0d3e, 0x0d43,
        !          1394:   0x0d46, 0x0d48,
        !          1395:   0x0d4a, 0x0d4d,
        !          1396:   0x0d57, 0x0d57,
        !          1397:   0x0d60, 0x0d61,
        !          1398:   0x0d66, 0x0d6f,
        !          1399:   0x0d82, 0x0d83,
        !          1400:   0x0d85, 0x0d96,
        !          1401:   0x0d9a, 0x0db1,
        !          1402:   0x0db3, 0x0dbb,
        !          1403:   0x0dbd, 0x0dbd,
        !          1404:   0x0dc0, 0x0dc6,
        !          1405:   0x0dca, 0x0dca,
        !          1406:   0x0dcf, 0x0dd4,
        !          1407:   0x0dd6, 0x0dd6,
        !          1408:   0x0dd8, 0x0ddf,
        !          1409:   0x0df2, 0x0df4,
        !          1410:   0x0e01, 0x0e3a,
        !          1411:   0x0e3f, 0x0e5b,
        !          1412:   0x0e81, 0x0e82,
        !          1413:   0x0e84, 0x0e84,
        !          1414:   0x0e87, 0x0e88,
        !          1415:   0x0e8a, 0x0e8a,
        !          1416:   0x0e8d, 0x0e8d,
        !          1417:   0x0e94, 0x0e97,
        !          1418:   0x0e99, 0x0e9f,
        !          1419:   0x0ea1, 0x0ea3,
        !          1420:   0x0ea5, 0x0ea5,
        !          1421:   0x0ea7, 0x0ea7,
        !          1422:   0x0eaa, 0x0eab,
        !          1423:   0x0ead, 0x0eb9,
        !          1424:   0x0ebb, 0x0ebd,
        !          1425:   0x0ec0, 0x0ec4,
        !          1426:   0x0ec6, 0x0ec6,
        !          1427:   0x0ec8, 0x0ecd,
        !          1428:   0x0ed0, 0x0ed9,
        !          1429:   0x0edc, 0x0edd,
        !          1430:   0x0f00, 0x0f47,
        !          1431:   0x0f49, 0x0f6a,
        !          1432:   0x0f71, 0x0f8b,
        !          1433:   0x0f90, 0x0f97,
        !          1434:   0x0f99, 0x0fbc,
        !          1435:   0x0fbe, 0x0fcc,
        !          1436:   0x0fcf, 0x0fcf,
        !          1437:   0x1000, 0x1021,
        !          1438:   0x1023, 0x1027,
        !          1439:   0x1029, 0x102a,
        !          1440:   0x102c, 0x1032,
        !          1441:   0x1036, 0x1039,
        !          1442:   0x1040, 0x1059,
        !          1443:   0x10a0, 0x10c5,
        !          1444:   0x10d0, 0x10f8,
        !          1445:   0x10fb, 0x10fb,
        !          1446:   0x1100, 0x1159,
        !          1447:   0x115f, 0x11a2,
        !          1448:   0x11a8, 0x11f9,
        !          1449:   0x1200, 0x1206,
        !          1450:   0x1208, 0x1246,
        !          1451:   0x1248, 0x1248,
        !          1452:   0x124a, 0x124d,
        !          1453:   0x1250, 0x1256,
        !          1454:   0x1258, 0x1258,
        !          1455:   0x125a, 0x125d,
        !          1456:   0x1260, 0x1286,
        !          1457:   0x1288, 0x1288,
        !          1458:   0x128a, 0x128d,
        !          1459:   0x1290, 0x12ae,
        !          1460:   0x12b0, 0x12b0,
        !          1461:   0x12b2, 0x12b5,
        !          1462:   0x12b8, 0x12be,
        !          1463:   0x12c0, 0x12c0,
        !          1464:   0x12c2, 0x12c5,
        !          1465:   0x12c8, 0x12ce,
        !          1466:   0x12d0, 0x12d6,
        !          1467:   0x12d8, 0x12ee,
        !          1468:   0x12f0, 0x130e,
        !          1469:   0x1310, 0x1310,
        !          1470:   0x1312, 0x1315,
        !          1471:   0x1318, 0x131e,
        !          1472:   0x1320, 0x1346,
        !          1473:   0x1348, 0x135a,
        !          1474:   0x1361, 0x137c,
        !          1475:   0x13a0, 0x13f4,
        !          1476:   0x1401, 0x1676,
        !          1477:   0x1681, 0x169c,
        !          1478:   0x16a0, 0x16f0,
        !          1479:   0x1700, 0x170c,
        !          1480:   0x170e, 0x1714,
        !          1481:   0x1720, 0x1736,
        !          1482:   0x1740, 0x1753,
        !          1483:   0x1760, 0x176c,
        !          1484:   0x176e, 0x1770,
        !          1485:   0x1772, 0x1773,
        !          1486:   0x1780, 0x17dd,
        !          1487:   0x17e0, 0x17e9,
        !          1488:   0x17f0, 0x17f9,
        !          1489:   0x1800, 0x180d,
        !          1490:   0x1810, 0x1819,
        !          1491:   0x1820, 0x1877,
        !          1492:   0x1880, 0x18a9,
        !          1493:   0x1900, 0x191c,
        !          1494:   0x1920, 0x192b,
        !          1495:   0x1930, 0x193b,
        !          1496:   0x1940, 0x1940,
        !          1497:   0x1944, 0x196d,
        !          1498:   0x1970, 0x1974,
        !          1499:   0x19e0, 0x19ff,
        !          1500:   0x1d00, 0x1d6b,
        !          1501:   0x1e00, 0x1e9b,
        !          1502:   0x1ea0, 0x1ef9,
        !          1503:   0x1f00, 0x1f15,
        !          1504:   0x1f18, 0x1f1d,
        !          1505:   0x1f20, 0x1f45,
        !          1506:   0x1f48, 0x1f4d,
        !          1507:   0x1f50, 0x1f57,
        !          1508:   0x1f59, 0x1f59,
        !          1509:   0x1f5b, 0x1f5b,
        !          1510:   0x1f5d, 0x1f5d,
        !          1511:   0x1f5f, 0x1f7d,
        !          1512:   0x1f80, 0x1fb4,
        !          1513:   0x1fb6, 0x1fc4,
        !          1514:   0x1fc6, 0x1fd3,
        !          1515:   0x1fd6, 0x1fdb,
        !          1516:   0x1fdd, 0x1fef,
        !          1517:   0x1ff2, 0x1ff4,
        !          1518:   0x1ff6, 0x1ffe,
        !          1519:   0x200b, 0x2027,
        !          1520:   0x202a, 0x202e,
        !          1521:   0x2030, 0x2054,
        !          1522:   0x2057, 0x2057,
        !          1523:   0x2060, 0x2063,
        !          1524:   0x206a, 0x2071,
        !          1525:   0x2074, 0x208e,
        !          1526:   0x20a0, 0x20b1,
        !          1527:   0x20d0, 0x20ea,
        !          1528:   0x2100, 0x213b,
        !          1529:   0x213d, 0x214b,
        !          1530:   0x2153, 0x2183,
        !          1531:   0x2190, 0x23d0,
        !          1532:   0x2400, 0x2426,
        !          1533:   0x2440, 0x244a,
        !          1534:   0x2460, 0x2617,
        !          1535:   0x2619, 0x267d,
        !          1536:   0x2680, 0x2691,
        !          1537:   0x26a0, 0x26a1,
        !          1538:   0x2701, 0x2704,
        !          1539:   0x2706, 0x2709,
        !          1540:   0x270c, 0x2727,
        !          1541:   0x2729, 0x274b,
        !          1542:   0x274d, 0x274d,
        !          1543:   0x274f, 0x2752,
        !          1544:   0x2756, 0x2756,
        !          1545:   0x2758, 0x275e,
        !          1546:   0x2761, 0x2794,
        !          1547:   0x2798, 0x27af,
        !          1548:   0x27b1, 0x27be,
        !          1549:   0x27d0, 0x27eb,
        !          1550:   0x27f0, 0x2b0d,
        !          1551:   0x2e80, 0x2e99,
        !          1552:   0x2e9b, 0x2ef3,
        !          1553:   0x2f00, 0x2fd5,
        !          1554:   0x2ff0, 0x2ffb,
        !          1555:   0x3001, 0x303f,
        !          1556:   0x3041, 0x3096,
        !          1557:   0x3099, 0x30ff,
        !          1558:   0x3105, 0x312c,
        !          1559:   0x3131, 0x318e,
        !          1560:   0x3190, 0x31b7,
        !          1561:   0x31f0, 0x321e,
        !          1562:   0x3220, 0x3243,
        !          1563:   0x3250, 0x327d,
        !          1564:   0x327f, 0x32fe,
        !          1565:   0x3300, 0x4db5,
        !          1566:   0x4dc0, 0x9fa5,
        !          1567:   0xa000, 0xa48c,
        !          1568:   0xa490, 0xa4c6,
        !          1569:   0xac00, 0xd7a3,
        !          1570:   0xe000, 0xfa2d,
        !          1571:   0xfa30, 0xfa6a,
        !          1572:   0xfb00, 0xfb06,
        !          1573:   0xfb13, 0xfb17,
        !          1574:   0xfb1d, 0xfb36,
        !          1575:   0xfb38, 0xfb3c,
        !          1576:   0xfb3e, 0xfb3e,
        !          1577:   0xfb40, 0xfb41,
        !          1578:   0xfb43, 0xfb44,
        !          1579:   0xfb46, 0xfbb1,
        !          1580:   0xfbd3, 0xfd3f,
        !          1581:   0xfd50, 0xfd8f,
        !          1582:   0xfd92, 0xfdc7,
        !          1583:   0xfdf0, 0xfdfd,
        !          1584:   0xfe00, 0xfe0f,
        !          1585:   0xfe20, 0xfe23,
        !          1586:   0xfe30, 0xfe52,
        !          1587:   0xfe54, 0xfe66,
        !          1588:   0xfe68, 0xfe6b,
        !          1589:   0xfe70, 0xfe74,
        !          1590:   0xfe76, 0xfefc,
        !          1591:   0xfeff, 0xfeff,
        !          1592:   0xff01, 0xffbe,
        !          1593:   0xffc2, 0xffc7,
        !          1594:   0xffca, 0xffcf,
        !          1595:   0xffd2, 0xffd7,
        !          1596:   0xffda, 0xffdc,
        !          1597:   0xffe0, 0xffe6,
        !          1598:   0xffe8, 0xffee,
        !          1599:   0xfff9, 0xfffd,
        !          1600:   0x10000, 0x1000b,
        !          1601:   0x1000d, 0x10026,
        !          1602:   0x10028, 0x1003a,
        !          1603:   0x1003c, 0x1003d,
        !          1604:   0x1003f, 0x1004d,
        !          1605:   0x10050, 0x1005d,
        !          1606:   0x10080, 0x100fa,
        !          1607:   0x10100, 0x10102,
        !          1608:   0x10107, 0x10133,
        !          1609:   0x10137, 0x1013f,
        !          1610:   0x10300, 0x1031e,
        !          1611:   0x10320, 0x10323,
        !          1612:   0x10330, 0x1034a,
        !          1613:   0x10380, 0x1039d,
        !          1614:   0x1039f, 0x1039f,
        !          1615:   0x10400, 0x1049d,
        !          1616:   0x104a0, 0x104a9,
        !          1617:   0x10800, 0x10805,
        !          1618:   0x10808, 0x10808,
        !          1619:   0x1080a, 0x10835,
        !          1620:   0x10837, 0x10838,
        !          1621:   0x1083c, 0x1083c,
        !          1622:   0x1083f, 0x1083f,
        !          1623:   0x1d000, 0x1d0f5,
        !          1624:   0x1d100, 0x1d126,
        !          1625:   0x1d12a, 0x1d1dd,
        !          1626:   0x1d300, 0x1d356,
        !          1627:   0x1d400, 0x1d454,
        !          1628:   0x1d456, 0x1d49c,
        !          1629:   0x1d49e, 0x1d49f,
        !          1630:   0x1d4a2, 0x1d4a2,
        !          1631:   0x1d4a5, 0x1d4a6,
        !          1632:   0x1d4a9, 0x1d4ac,
        !          1633:   0x1d4ae, 0x1d4b9,
        !          1634:   0x1d4bb, 0x1d4bb,
        !          1635:   0x1d4bd, 0x1d4c3,
        !          1636:   0x1d4c5, 0x1d505,
        !          1637:   0x1d507, 0x1d50a,
        !          1638:   0x1d50d, 0x1d514,
        !          1639:   0x1d516, 0x1d51c,
        !          1640:   0x1d51e, 0x1d539,
        !          1641:   0x1d53b, 0x1d53e,
        !          1642:   0x1d540, 0x1d544,
        !          1643:   0x1d546, 0x1d546,
        !          1644:   0x1d54a, 0x1d550,
        !          1645:   0x1d552, 0x1d6a3,
        !          1646:   0x1d6a8, 0x1d7c9,
        !          1647:   0x1d7ce, 0x1d7ff,
        !          1648:   0x20000, 0x2a6d6,
        !          1649:   0x2f800, 0x2fa1d,
        !          1650:   0xe0001, 0xe0001,
        !          1651:   0xe0020, 0xe007f,
        !          1652:   0xe0100, 0xe01ef,
        !          1653:   0xf0000, 0xffffd,
        !          1654:   0x100000, 0x10fffd
        !          1655: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          1656: }; /* end of MBGraph */
        !          1657: 
        !          1658: static const OnigCodePoint SBLower[] = {
        !          1659:   1,
        !          1660:   0x0061, 0x007a
        !          1661: };
        !          1662: 
        !          1663: static const OnigCodePoint MBLower[] = {
        !          1664: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1665:   423,
        !          1666: #else
        !          1667:   5,
        !          1668: #endif
        !          1669:   0x00aa, 0x00aa,
        !          1670:   0x00b5, 0x00b5,
        !          1671:   0x00ba, 0x00ba,
        !          1672:   0x00df, 0x00f6,
        !          1673:   0x00f8, 0x00ff
        !          1674: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          1675:   ,
        !          1676:   0x0101, 0x0101,
        !          1677:   0x0103, 0x0103,
        !          1678:   0x0105, 0x0105,
        !          1679:   0x0107, 0x0107,
        !          1680:   0x0109, 0x0109,
        !          1681:   0x010b, 0x010b,
        !          1682:   0x010d, 0x010d,
        !          1683:   0x010f, 0x010f,
        !          1684:   0x0111, 0x0111,
        !          1685:   0x0113, 0x0113,
        !          1686:   0x0115, 0x0115,
        !          1687:   0x0117, 0x0117,
        !          1688:   0x0119, 0x0119,
        !          1689:   0x011b, 0x011b,
        !          1690:   0x011d, 0x011d,
        !          1691:   0x011f, 0x011f,
        !          1692:   0x0121, 0x0121,
        !          1693:   0x0123, 0x0123,
        !          1694:   0x0125, 0x0125,
        !          1695:   0x0127, 0x0127,
        !          1696:   0x0129, 0x0129,
        !          1697:   0x012b, 0x012b,
        !          1698:   0x012d, 0x012d,
        !          1699:   0x012f, 0x012f,
        !          1700:   0x0131, 0x0131,
        !          1701:   0x0133, 0x0133,
        !          1702:   0x0135, 0x0135,
        !          1703:   0x0137, 0x0138,
        !          1704:   0x013a, 0x013a,
        !          1705:   0x013c, 0x013c,
        !          1706:   0x013e, 0x013e,
        !          1707:   0x0140, 0x0140,
        !          1708:   0x0142, 0x0142,
        !          1709:   0x0144, 0x0144,
        !          1710:   0x0146, 0x0146,
        !          1711:   0x0148, 0x0149,
        !          1712:   0x014b, 0x014b,
        !          1713:   0x014d, 0x014d,
        !          1714:   0x014f, 0x014f,
        !          1715:   0x0151, 0x0151,
        !          1716:   0x0153, 0x0153,
        !          1717:   0x0155, 0x0155,
        !          1718:   0x0157, 0x0157,
        !          1719:   0x0159, 0x0159,
        !          1720:   0x015b, 0x015b,
        !          1721:   0x015d, 0x015d,
        !          1722:   0x015f, 0x015f,
        !          1723:   0x0161, 0x0161,
        !          1724:   0x0163, 0x0163,
        !          1725:   0x0165, 0x0165,
        !          1726:   0x0167, 0x0167,
        !          1727:   0x0169, 0x0169,
        !          1728:   0x016b, 0x016b,
        !          1729:   0x016d, 0x016d,
        !          1730:   0x016f, 0x016f,
        !          1731:   0x0171, 0x0171,
        !          1732:   0x0173, 0x0173,
        !          1733:   0x0175, 0x0175,
        !          1734:   0x0177, 0x0177,
        !          1735:   0x017a, 0x017a,
        !          1736:   0x017c, 0x017c,
        !          1737:   0x017e, 0x0180,
        !          1738:   0x0183, 0x0183,
        !          1739:   0x0185, 0x0185,
        !          1740:   0x0188, 0x0188,
        !          1741:   0x018c, 0x018d,
        !          1742:   0x0192, 0x0192,
        !          1743:   0x0195, 0x0195,
        !          1744:   0x0199, 0x019b,
        !          1745:   0x019e, 0x019e,
        !          1746:   0x01a1, 0x01a1,
        !          1747:   0x01a3, 0x01a3,
        !          1748:   0x01a5, 0x01a5,
        !          1749:   0x01a8, 0x01a8,
        !          1750:   0x01aa, 0x01ab,
        !          1751:   0x01ad, 0x01ad,
        !          1752:   0x01b0, 0x01b0,
        !          1753:   0x01b4, 0x01b4,
        !          1754:   0x01b6, 0x01b6,
        !          1755:   0x01b9, 0x01ba,
        !          1756:   0x01bd, 0x01bf,
        !          1757:   0x01c6, 0x01c6,
        !          1758:   0x01c9, 0x01c9,
        !          1759:   0x01cc, 0x01cc,
        !          1760:   0x01ce, 0x01ce,
        !          1761:   0x01d0, 0x01d0,
        !          1762:   0x01d2, 0x01d2,
        !          1763:   0x01d4, 0x01d4,
        !          1764:   0x01d6, 0x01d6,
        !          1765:   0x01d8, 0x01d8,
        !          1766:   0x01da, 0x01da,
        !          1767:   0x01dc, 0x01dd,
        !          1768:   0x01df, 0x01df,
        !          1769:   0x01e1, 0x01e1,
        !          1770:   0x01e3, 0x01e3,
        !          1771:   0x01e5, 0x01e5,
        !          1772:   0x01e7, 0x01e7,
        !          1773:   0x01e9, 0x01e9,
        !          1774:   0x01eb, 0x01eb,
        !          1775:   0x01ed, 0x01ed,
        !          1776:   0x01ef, 0x01f0,
        !          1777:   0x01f3, 0x01f3,
        !          1778:   0x01f5, 0x01f5,
        !          1779:   0x01f9, 0x01f9,
        !          1780:   0x01fb, 0x01fb,
        !          1781:   0x01fd, 0x01fd,
        !          1782:   0x01ff, 0x01ff,
        !          1783:   0x0201, 0x0201,
        !          1784:   0x0203, 0x0203,
        !          1785:   0x0205, 0x0205,
        !          1786:   0x0207, 0x0207,
        !          1787:   0x0209, 0x0209,
        !          1788:   0x020b, 0x020b,
        !          1789:   0x020d, 0x020d,
        !          1790:   0x020f, 0x020f,
        !          1791:   0x0211, 0x0211,
        !          1792:   0x0213, 0x0213,
        !          1793:   0x0215, 0x0215,
        !          1794:   0x0217, 0x0217,
        !          1795:   0x0219, 0x0219,
        !          1796:   0x021b, 0x021b,
        !          1797:   0x021d, 0x021d,
        !          1798:   0x021f, 0x021f,
        !          1799:   0x0221, 0x0221,
        !          1800:   0x0223, 0x0223,
        !          1801:   0x0225, 0x0225,
        !          1802:   0x0227, 0x0227,
        !          1803:   0x0229, 0x0229,
        !          1804:   0x022b, 0x022b,
        !          1805:   0x022d, 0x022d,
        !          1806:   0x022f, 0x022f,
        !          1807:   0x0231, 0x0231,
        !          1808:   0x0233, 0x0236,
        !          1809:   0x0250, 0x02af,
        !          1810:   0x0390, 0x0390,
        !          1811:   0x03ac, 0x03ce,
        !          1812:   0x03d0, 0x03d1,
        !          1813:   0x03d5, 0x03d7,
        !          1814:   0x03d9, 0x03d9,
        !          1815:   0x03db, 0x03db,
        !          1816:   0x03dd, 0x03dd,
        !          1817:   0x03df, 0x03df,
        !          1818:   0x03e1, 0x03e1,
        !          1819:   0x03e3, 0x03e3,
        !          1820:   0x03e5, 0x03e5,
        !          1821:   0x03e7, 0x03e7,
        !          1822:   0x03e9, 0x03e9,
        !          1823:   0x03eb, 0x03eb,
        !          1824:   0x03ed, 0x03ed,
        !          1825:   0x03ef, 0x03f3,
        !          1826:   0x03f5, 0x03f5,
        !          1827:   0x03f8, 0x03f8,
        !          1828:   0x03fb, 0x03fb,
        !          1829:   0x0430, 0x045f,
        !          1830:   0x0461, 0x0461,
        !          1831:   0x0463, 0x0463,
        !          1832:   0x0465, 0x0465,
        !          1833:   0x0467, 0x0467,
        !          1834:   0x0469, 0x0469,
        !          1835:   0x046b, 0x046b,
        !          1836:   0x046d, 0x046d,
        !          1837:   0x046f, 0x046f,
        !          1838:   0x0471, 0x0471,
        !          1839:   0x0473, 0x0473,
        !          1840:   0x0475, 0x0475,
        !          1841:   0x0477, 0x0477,
        !          1842:   0x0479, 0x0479,
        !          1843:   0x047b, 0x047b,
        !          1844:   0x047d, 0x047d,
        !          1845:   0x047f, 0x047f,
        !          1846:   0x0481, 0x0481,
        !          1847:   0x048b, 0x048b,
        !          1848:   0x048d, 0x048d,
        !          1849:   0x048f, 0x048f,
        !          1850:   0x0491, 0x0491,
        !          1851:   0x0493, 0x0493,
        !          1852:   0x0495, 0x0495,
        !          1853:   0x0497, 0x0497,
        !          1854:   0x0499, 0x0499,
        !          1855:   0x049b, 0x049b,
        !          1856:   0x049d, 0x049d,
        !          1857:   0x049f, 0x049f,
        !          1858:   0x04a1, 0x04a1,
        !          1859:   0x04a3, 0x04a3,
        !          1860:   0x04a5, 0x04a5,
        !          1861:   0x04a7, 0x04a7,
        !          1862:   0x04a9, 0x04a9,
        !          1863:   0x04ab, 0x04ab,
        !          1864:   0x04ad, 0x04ad,
        !          1865:   0x04af, 0x04af,
        !          1866:   0x04b1, 0x04b1,
        !          1867:   0x04b3, 0x04b3,
        !          1868:   0x04b5, 0x04b5,
        !          1869:   0x04b7, 0x04b7,
        !          1870:   0x04b9, 0x04b9,
        !          1871:   0x04bb, 0x04bb,
        !          1872:   0x04bd, 0x04bd,
        !          1873:   0x04bf, 0x04bf,
        !          1874:   0x04c2, 0x04c2,
        !          1875:   0x04c4, 0x04c4,
        !          1876:   0x04c6, 0x04c6,
        !          1877:   0x04c8, 0x04c8,
        !          1878:   0x04ca, 0x04ca,
        !          1879:   0x04cc, 0x04cc,
        !          1880:   0x04ce, 0x04ce,
        !          1881:   0x04d1, 0x04d1,
        !          1882:   0x04d3, 0x04d3,
        !          1883:   0x04d5, 0x04d5,
        !          1884:   0x04d7, 0x04d7,
        !          1885:   0x04d9, 0x04d9,
        !          1886:   0x04db, 0x04db,
        !          1887:   0x04dd, 0x04dd,
        !          1888:   0x04df, 0x04df,
        !          1889:   0x04e1, 0x04e1,
        !          1890:   0x04e3, 0x04e3,
        !          1891:   0x04e5, 0x04e5,
        !          1892:   0x04e7, 0x04e7,
        !          1893:   0x04e9, 0x04e9,
        !          1894:   0x04eb, 0x04eb,
        !          1895:   0x04ed, 0x04ed,
        !          1896:   0x04ef, 0x04ef,
        !          1897:   0x04f1, 0x04f1,
        !          1898:   0x04f3, 0x04f3,
        !          1899:   0x04f5, 0x04f5,
        !          1900:   0x04f9, 0x04f9,
        !          1901:   0x0501, 0x0501,
        !          1902:   0x0503, 0x0503,
        !          1903:   0x0505, 0x0505,
        !          1904:   0x0507, 0x0507,
        !          1905:   0x0509, 0x0509,
        !          1906:   0x050b, 0x050b,
        !          1907:   0x050d, 0x050d,
        !          1908:   0x050f, 0x050f,
        !          1909:   0x0561, 0x0587,
        !          1910:   0x1d00, 0x1d2b,
        !          1911:   0x1d62, 0x1d6b,
        !          1912:   0x1e01, 0x1e01,
        !          1913:   0x1e03, 0x1e03,
        !          1914:   0x1e05, 0x1e05,
        !          1915:   0x1e07, 0x1e07,
        !          1916:   0x1e09, 0x1e09,
        !          1917:   0x1e0b, 0x1e0b,
        !          1918:   0x1e0d, 0x1e0d,
        !          1919:   0x1e0f, 0x1e0f,
        !          1920:   0x1e11, 0x1e11,
        !          1921:   0x1e13, 0x1e13,
        !          1922:   0x1e15, 0x1e15,
        !          1923:   0x1e17, 0x1e17,
        !          1924:   0x1e19, 0x1e19,
        !          1925:   0x1e1b, 0x1e1b,
        !          1926:   0x1e1d, 0x1e1d,
        !          1927:   0x1e1f, 0x1e1f,
        !          1928:   0x1e21, 0x1e21,
        !          1929:   0x1e23, 0x1e23,
        !          1930:   0x1e25, 0x1e25,
        !          1931:   0x1e27, 0x1e27,
        !          1932:   0x1e29, 0x1e29,
        !          1933:   0x1e2b, 0x1e2b,
        !          1934:   0x1e2d, 0x1e2d,
        !          1935:   0x1e2f, 0x1e2f,
        !          1936:   0x1e31, 0x1e31,
        !          1937:   0x1e33, 0x1e33,
        !          1938:   0x1e35, 0x1e35,
        !          1939:   0x1e37, 0x1e37,
        !          1940:   0x1e39, 0x1e39,
        !          1941:   0x1e3b, 0x1e3b,
        !          1942:   0x1e3d, 0x1e3d,
        !          1943:   0x1e3f, 0x1e3f,
        !          1944:   0x1e41, 0x1e41,
        !          1945:   0x1e43, 0x1e43,
        !          1946:   0x1e45, 0x1e45,
        !          1947:   0x1e47, 0x1e47,
        !          1948:   0x1e49, 0x1e49,
        !          1949:   0x1e4b, 0x1e4b,
        !          1950:   0x1e4d, 0x1e4d,
        !          1951:   0x1e4f, 0x1e4f,
        !          1952:   0x1e51, 0x1e51,
        !          1953:   0x1e53, 0x1e53,
        !          1954:   0x1e55, 0x1e55,
        !          1955:   0x1e57, 0x1e57,
        !          1956:   0x1e59, 0x1e59,
        !          1957:   0x1e5b, 0x1e5b,
        !          1958:   0x1e5d, 0x1e5d,
        !          1959:   0x1e5f, 0x1e5f,
        !          1960:   0x1e61, 0x1e61,
        !          1961:   0x1e63, 0x1e63,
        !          1962:   0x1e65, 0x1e65,
        !          1963:   0x1e67, 0x1e67,
        !          1964:   0x1e69, 0x1e69,
        !          1965:   0x1e6b, 0x1e6b,
        !          1966:   0x1e6d, 0x1e6d,
        !          1967:   0x1e6f, 0x1e6f,
        !          1968:   0x1e71, 0x1e71,
        !          1969:   0x1e73, 0x1e73,
        !          1970:   0x1e75, 0x1e75,
        !          1971:   0x1e77, 0x1e77,
        !          1972:   0x1e79, 0x1e79,
        !          1973:   0x1e7b, 0x1e7b,
        !          1974:   0x1e7d, 0x1e7d,
        !          1975:   0x1e7f, 0x1e7f,
        !          1976:   0x1e81, 0x1e81,
        !          1977:   0x1e83, 0x1e83,
        !          1978:   0x1e85, 0x1e85,
        !          1979:   0x1e87, 0x1e87,
        !          1980:   0x1e89, 0x1e89,
        !          1981:   0x1e8b, 0x1e8b,
        !          1982:   0x1e8d, 0x1e8d,
        !          1983:   0x1e8f, 0x1e8f,
        !          1984:   0x1e91, 0x1e91,
        !          1985:   0x1e93, 0x1e93,
        !          1986:   0x1e95, 0x1e9b,
        !          1987:   0x1ea1, 0x1ea1,
        !          1988:   0x1ea3, 0x1ea3,
        !          1989:   0x1ea5, 0x1ea5,
        !          1990:   0x1ea7, 0x1ea7,
        !          1991:   0x1ea9, 0x1ea9,
        !          1992:   0x1eab, 0x1eab,
        !          1993:   0x1ead, 0x1ead,
        !          1994:   0x1eaf, 0x1eaf,
        !          1995:   0x1eb1, 0x1eb1,
        !          1996:   0x1eb3, 0x1eb3,
        !          1997:   0x1eb5, 0x1eb5,
        !          1998:   0x1eb7, 0x1eb7,
        !          1999:   0x1eb9, 0x1eb9,
        !          2000:   0x1ebb, 0x1ebb,
        !          2001:   0x1ebd, 0x1ebd,
        !          2002:   0x1ebf, 0x1ebf,
        !          2003:   0x1ec1, 0x1ec1,
        !          2004:   0x1ec3, 0x1ec3,
        !          2005:   0x1ec5, 0x1ec5,
        !          2006:   0x1ec7, 0x1ec7,
        !          2007:   0x1ec9, 0x1ec9,
        !          2008:   0x1ecb, 0x1ecb,
        !          2009:   0x1ecd, 0x1ecd,
        !          2010:   0x1ecf, 0x1ecf,
        !          2011:   0x1ed1, 0x1ed1,
        !          2012:   0x1ed3, 0x1ed3,
        !          2013:   0x1ed5, 0x1ed5,
        !          2014:   0x1ed7, 0x1ed7,
        !          2015:   0x1ed9, 0x1ed9,
        !          2016:   0x1edb, 0x1edb,
        !          2017:   0x1edd, 0x1edd,
        !          2018:   0x1edf, 0x1edf,
        !          2019:   0x1ee1, 0x1ee1,
        !          2020:   0x1ee3, 0x1ee3,
        !          2021:   0x1ee5, 0x1ee5,
        !          2022:   0x1ee7, 0x1ee7,
        !          2023:   0x1ee9, 0x1ee9,
        !          2024:   0x1eeb, 0x1eeb,
        !          2025:   0x1eed, 0x1eed,
        !          2026:   0x1eef, 0x1eef,
        !          2027:   0x1ef1, 0x1ef1,
        !          2028:   0x1ef3, 0x1ef3,
        !          2029:   0x1ef5, 0x1ef5,
        !          2030:   0x1ef7, 0x1ef7,
        !          2031:   0x1ef9, 0x1ef9,
        !          2032:   0x1f00, 0x1f07,
        !          2033:   0x1f10, 0x1f15,
        !          2034:   0x1f20, 0x1f27,
        !          2035:   0x1f30, 0x1f37,
        !          2036:   0x1f40, 0x1f45,
        !          2037:   0x1f50, 0x1f57,
        !          2038:   0x1f60, 0x1f67,
        !          2039:   0x1f70, 0x1f7d,
        !          2040:   0x1f80, 0x1f87,
        !          2041:   0x1f90, 0x1f97,
        !          2042:   0x1fa0, 0x1fa7,
        !          2043:   0x1fb0, 0x1fb4,
        !          2044:   0x1fb6, 0x1fb7,
        !          2045:   0x1fbe, 0x1fbe,
        !          2046:   0x1fc2, 0x1fc4,
        !          2047:   0x1fc6, 0x1fc7,
        !          2048:   0x1fd0, 0x1fd3,
        !          2049:   0x1fd6, 0x1fd7,
        !          2050:   0x1fe0, 0x1fe7,
        !          2051:   0x1ff2, 0x1ff4,
        !          2052:   0x1ff6, 0x1ff7,
        !          2053:   0x2071, 0x2071,
        !          2054:   0x207f, 0x207f,
        !          2055:   0x210a, 0x210a,
        !          2056:   0x210e, 0x210f,
        !          2057:   0x2113, 0x2113,
        !          2058:   0x212f, 0x212f,
        !          2059:   0x2134, 0x2134,
        !          2060:   0x2139, 0x2139,
        !          2061:   0x213d, 0x213d,
        !          2062:   0x2146, 0x2149,
        !          2063:   0xfb00, 0xfb06,
        !          2064:   0xfb13, 0xfb17,
        !          2065:   0xff41, 0xff5a,
        !          2066:   0x10428, 0x1044f,
        !          2067:   0x1d41a, 0x1d433,
        !          2068:   0x1d44e, 0x1d454,
        !          2069:   0x1d456, 0x1d467,
        !          2070:   0x1d482, 0x1d49b,
        !          2071:   0x1d4b6, 0x1d4b9,
        !          2072:   0x1d4bb, 0x1d4bb,
        !          2073:   0x1d4bd, 0x1d4c3,
        !          2074:   0x1d4c5, 0x1d4cf,
        !          2075:   0x1d4ea, 0x1d503,
        !          2076:   0x1d51e, 0x1d537,
        !          2077:   0x1d552, 0x1d56b,
        !          2078:   0x1d586, 0x1d59f,
        !          2079:   0x1d5ba, 0x1d5d3,
        !          2080:   0x1d5ee, 0x1d607,
        !          2081:   0x1d622, 0x1d63b,
        !          2082:   0x1d656, 0x1d66f,
        !          2083:   0x1d68a, 0x1d6a3,
        !          2084:   0x1d6c2, 0x1d6da,
        !          2085:   0x1d6dc, 0x1d6e1,
        !          2086:   0x1d6fc, 0x1d714,
        !          2087:   0x1d716, 0x1d71b,
        !          2088:   0x1d736, 0x1d74e,
        !          2089:   0x1d750, 0x1d755,
        !          2090:   0x1d770, 0x1d788,
        !          2091:   0x1d78a, 0x1d78f,
        !          2092:   0x1d7aa, 0x1d7c2,
        !          2093:   0x1d7c4, 0x1d7c9
        !          2094: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          2095: }; /* end of MBLower */
        !          2096: 
        !          2097: static const OnigCodePoint SBPrint[] = {
        !          2098:   2,
        !          2099:   0x0009, 0x000d,
        !          2100:   0x0020, 0x007e
        !          2101: };
        !          2102: 
        !          2103: static const OnigCodePoint MBPrint[] = {
        !          2104: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2105:   403,
        !          2106: #else
        !          2107:   2,
        !          2108: #endif
        !          2109:   0x0085, 0x0085,
        !          2110:   0x00a0, 0x0236
        !          2111: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2112:   ,
        !          2113:   0x0250, 0x0357,
        !          2114:   0x035d, 0x036f,
        !          2115:   0x0374, 0x0375,
        !          2116:   0x037a, 0x037a,
        !          2117:   0x037e, 0x037e,
        !          2118:   0x0384, 0x038a,
        !          2119:   0x038c, 0x038c,
        !          2120:   0x038e, 0x03a1,
        !          2121:   0x03a3, 0x03ce,
        !          2122:   0x03d0, 0x03fb,
        !          2123:   0x0400, 0x0486,
        !          2124:   0x0488, 0x04ce,
        !          2125:   0x04d0, 0x04f5,
        !          2126:   0x04f8, 0x04f9,
        !          2127:   0x0500, 0x050f,
        !          2128:   0x0531, 0x0556,
        !          2129:   0x0559, 0x055f,
        !          2130:   0x0561, 0x0587,
        !          2131:   0x0589, 0x058a,
        !          2132:   0x0591, 0x05a1,
        !          2133:   0x05a3, 0x05b9,
        !          2134:   0x05bb, 0x05c4,
        !          2135:   0x05d0, 0x05ea,
        !          2136:   0x05f0, 0x05f4,
        !          2137:   0x0600, 0x0603,
        !          2138:   0x060c, 0x0615,
        !          2139:   0x061b, 0x061b,
        !          2140:   0x061f, 0x061f,
        !          2141:   0x0621, 0x063a,
        !          2142:   0x0640, 0x0658,
        !          2143:   0x0660, 0x070d,
        !          2144:   0x070f, 0x074a,
        !          2145:   0x074d, 0x074f,
        !          2146:   0x0780, 0x07b1,
        !          2147:   0x0901, 0x0939,
        !          2148:   0x093c, 0x094d,
        !          2149:   0x0950, 0x0954,
        !          2150:   0x0958, 0x0970,
        !          2151:   0x0981, 0x0983,
        !          2152:   0x0985, 0x098c,
        !          2153:   0x098f, 0x0990,
        !          2154:   0x0993, 0x09a8,
        !          2155:   0x09aa, 0x09b0,
        !          2156:   0x09b2, 0x09b2,
        !          2157:   0x09b6, 0x09b9,
        !          2158:   0x09bc, 0x09c4,
        !          2159:   0x09c7, 0x09c8,
        !          2160:   0x09cb, 0x09cd,
        !          2161:   0x09d7, 0x09d7,
        !          2162:   0x09dc, 0x09dd,
        !          2163:   0x09df, 0x09e3,
        !          2164:   0x09e6, 0x09fa,
        !          2165:   0x0a01, 0x0a03,
        !          2166:   0x0a05, 0x0a0a,
        !          2167:   0x0a0f, 0x0a10,
        !          2168:   0x0a13, 0x0a28,
        !          2169:   0x0a2a, 0x0a30,
        !          2170:   0x0a32, 0x0a33,
        !          2171:   0x0a35, 0x0a36,
        !          2172:   0x0a38, 0x0a39,
        !          2173:   0x0a3c, 0x0a3c,
        !          2174:   0x0a3e, 0x0a42,
        !          2175:   0x0a47, 0x0a48,
        !          2176:   0x0a4b, 0x0a4d,
        !          2177:   0x0a59, 0x0a5c,
        !          2178:   0x0a5e, 0x0a5e,
        !          2179:   0x0a66, 0x0a74,
        !          2180:   0x0a81, 0x0a83,
        !          2181:   0x0a85, 0x0a8d,
        !          2182:   0x0a8f, 0x0a91,
        !          2183:   0x0a93, 0x0aa8,
        !          2184:   0x0aaa, 0x0ab0,
        !          2185:   0x0ab2, 0x0ab3,
        !          2186:   0x0ab5, 0x0ab9,
        !          2187:   0x0abc, 0x0ac5,
        !          2188:   0x0ac7, 0x0ac9,
        !          2189:   0x0acb, 0x0acd,
        !          2190:   0x0ad0, 0x0ad0,
        !          2191:   0x0ae0, 0x0ae3,
        !          2192:   0x0ae6, 0x0aef,
        !          2193:   0x0af1, 0x0af1,
        !          2194:   0x0b01, 0x0b03,
        !          2195:   0x0b05, 0x0b0c,
        !          2196:   0x0b0f, 0x0b10,
        !          2197:   0x0b13, 0x0b28,
        !          2198:   0x0b2a, 0x0b30,
        !          2199:   0x0b32, 0x0b33,
        !          2200:   0x0b35, 0x0b39,
        !          2201:   0x0b3c, 0x0b43,
        !          2202:   0x0b47, 0x0b48,
        !          2203:   0x0b4b, 0x0b4d,
        !          2204:   0x0b56, 0x0b57,
        !          2205:   0x0b5c, 0x0b5d,
        !          2206:   0x0b5f, 0x0b61,
        !          2207:   0x0b66, 0x0b71,
        !          2208:   0x0b82, 0x0b83,
        !          2209:   0x0b85, 0x0b8a,
        !          2210:   0x0b8e, 0x0b90,
        !          2211:   0x0b92, 0x0b95,
        !          2212:   0x0b99, 0x0b9a,
        !          2213:   0x0b9c, 0x0b9c,
        !          2214:   0x0b9e, 0x0b9f,
        !          2215:   0x0ba3, 0x0ba4,
        !          2216:   0x0ba8, 0x0baa,
        !          2217:   0x0bae, 0x0bb5,
        !          2218:   0x0bb7, 0x0bb9,
        !          2219:   0x0bbe, 0x0bc2,
        !          2220:   0x0bc6, 0x0bc8,
        !          2221:   0x0bca, 0x0bcd,
        !          2222:   0x0bd7, 0x0bd7,
        !          2223:   0x0be7, 0x0bfa,
        !          2224:   0x0c01, 0x0c03,
        !          2225:   0x0c05, 0x0c0c,
        !          2226:   0x0c0e, 0x0c10,
        !          2227:   0x0c12, 0x0c28,
        !          2228:   0x0c2a, 0x0c33,
        !          2229:   0x0c35, 0x0c39,
        !          2230:   0x0c3e, 0x0c44,
        !          2231:   0x0c46, 0x0c48,
        !          2232:   0x0c4a, 0x0c4d,
        !          2233:   0x0c55, 0x0c56,
        !          2234:   0x0c60, 0x0c61,
        !          2235:   0x0c66, 0x0c6f,
        !          2236:   0x0c82, 0x0c83,
        !          2237:   0x0c85, 0x0c8c,
        !          2238:   0x0c8e, 0x0c90,
        !          2239:   0x0c92, 0x0ca8,
        !          2240:   0x0caa, 0x0cb3,
        !          2241:   0x0cb5, 0x0cb9,
        !          2242:   0x0cbc, 0x0cc4,
        !          2243:   0x0cc6, 0x0cc8,
        !          2244:   0x0cca, 0x0ccd,
        !          2245:   0x0cd5, 0x0cd6,
        !          2246:   0x0cde, 0x0cde,
        !          2247:   0x0ce0, 0x0ce1,
        !          2248:   0x0ce6, 0x0cef,
        !          2249:   0x0d02, 0x0d03,
        !          2250:   0x0d05, 0x0d0c,
        !          2251:   0x0d0e, 0x0d10,
        !          2252:   0x0d12, 0x0d28,
        !          2253:   0x0d2a, 0x0d39,
        !          2254:   0x0d3e, 0x0d43,
        !          2255:   0x0d46, 0x0d48,
        !          2256:   0x0d4a, 0x0d4d,
        !          2257:   0x0d57, 0x0d57,
        !          2258:   0x0d60, 0x0d61,
        !          2259:   0x0d66, 0x0d6f,
        !          2260:   0x0d82, 0x0d83,
        !          2261:   0x0d85, 0x0d96,
        !          2262:   0x0d9a, 0x0db1,
        !          2263:   0x0db3, 0x0dbb,
        !          2264:   0x0dbd, 0x0dbd,
        !          2265:   0x0dc0, 0x0dc6,
        !          2266:   0x0dca, 0x0dca,
        !          2267:   0x0dcf, 0x0dd4,
        !          2268:   0x0dd6, 0x0dd6,
        !          2269:   0x0dd8, 0x0ddf,
        !          2270:   0x0df2, 0x0df4,
        !          2271:   0x0e01, 0x0e3a,
        !          2272:   0x0e3f, 0x0e5b,
        !          2273:   0x0e81, 0x0e82,
        !          2274:   0x0e84, 0x0e84,
        !          2275:   0x0e87, 0x0e88,
        !          2276:   0x0e8a, 0x0e8a,
        !          2277:   0x0e8d, 0x0e8d,
        !          2278:   0x0e94, 0x0e97,
        !          2279:   0x0e99, 0x0e9f,
        !          2280:   0x0ea1, 0x0ea3,
        !          2281:   0x0ea5, 0x0ea5,
        !          2282:   0x0ea7, 0x0ea7,
        !          2283:   0x0eaa, 0x0eab,
        !          2284:   0x0ead, 0x0eb9,
        !          2285:   0x0ebb, 0x0ebd,
        !          2286:   0x0ec0, 0x0ec4,
        !          2287:   0x0ec6, 0x0ec6,
        !          2288:   0x0ec8, 0x0ecd,
        !          2289:   0x0ed0, 0x0ed9,
        !          2290:   0x0edc, 0x0edd,
        !          2291:   0x0f00, 0x0f47,
        !          2292:   0x0f49, 0x0f6a,
        !          2293:   0x0f71, 0x0f8b,
        !          2294:   0x0f90, 0x0f97,
        !          2295:   0x0f99, 0x0fbc,
        !          2296:   0x0fbe, 0x0fcc,
        !          2297:   0x0fcf, 0x0fcf,
        !          2298:   0x1000, 0x1021,
        !          2299:   0x1023, 0x1027,
        !          2300:   0x1029, 0x102a,
        !          2301:   0x102c, 0x1032,
        !          2302:   0x1036, 0x1039,
        !          2303:   0x1040, 0x1059,
        !          2304:   0x10a0, 0x10c5,
        !          2305:   0x10d0, 0x10f8,
        !          2306:   0x10fb, 0x10fb,
        !          2307:   0x1100, 0x1159,
        !          2308:   0x115f, 0x11a2,
        !          2309:   0x11a8, 0x11f9,
        !          2310:   0x1200, 0x1206,
        !          2311:   0x1208, 0x1246,
        !          2312:   0x1248, 0x1248,
        !          2313:   0x124a, 0x124d,
        !          2314:   0x1250, 0x1256,
        !          2315:   0x1258, 0x1258,
        !          2316:   0x125a, 0x125d,
        !          2317:   0x1260, 0x1286,
        !          2318:   0x1288, 0x1288,
        !          2319:   0x128a, 0x128d,
        !          2320:   0x1290, 0x12ae,
        !          2321:   0x12b0, 0x12b0,
        !          2322:   0x12b2, 0x12b5,
        !          2323:   0x12b8, 0x12be,
        !          2324:   0x12c0, 0x12c0,
        !          2325:   0x12c2, 0x12c5,
        !          2326:   0x12c8, 0x12ce,
        !          2327:   0x12d0, 0x12d6,
        !          2328:   0x12d8, 0x12ee,
        !          2329:   0x12f0, 0x130e,
        !          2330:   0x1310, 0x1310,
        !          2331:   0x1312, 0x1315,
        !          2332:   0x1318, 0x131e,
        !          2333:   0x1320, 0x1346,
        !          2334:   0x1348, 0x135a,
        !          2335:   0x1361, 0x137c,
        !          2336:   0x13a0, 0x13f4,
        !          2337:   0x1401, 0x1676,
        !          2338:   0x1680, 0x169c,
        !          2339:   0x16a0, 0x16f0,
        !          2340:   0x1700, 0x170c,
        !          2341:   0x170e, 0x1714,
        !          2342:   0x1720, 0x1736,
        !          2343:   0x1740, 0x1753,
        !          2344:   0x1760, 0x176c,
        !          2345:   0x176e, 0x1770,
        !          2346:   0x1772, 0x1773,
        !          2347:   0x1780, 0x17dd,
        !          2348:   0x17e0, 0x17e9,
        !          2349:   0x17f0, 0x17f9,
        !          2350:   0x1800, 0x180e,
        !          2351:   0x1810, 0x1819,
        !          2352:   0x1820, 0x1877,
        !          2353:   0x1880, 0x18a9,
        !          2354:   0x1900, 0x191c,
        !          2355:   0x1920, 0x192b,
        !          2356:   0x1930, 0x193b,
        !          2357:   0x1940, 0x1940,
        !          2358:   0x1944, 0x196d,
        !          2359:   0x1970, 0x1974,
        !          2360:   0x19e0, 0x19ff,
        !          2361:   0x1d00, 0x1d6b,
        !          2362:   0x1e00, 0x1e9b,
        !          2363:   0x1ea0, 0x1ef9,
        !          2364:   0x1f00, 0x1f15,
        !          2365:   0x1f18, 0x1f1d,
        !          2366:   0x1f20, 0x1f45,
        !          2367:   0x1f48, 0x1f4d,
        !          2368:   0x1f50, 0x1f57,
        !          2369:   0x1f59, 0x1f59,
        !          2370:   0x1f5b, 0x1f5b,
        !          2371:   0x1f5d, 0x1f5d,
        !          2372:   0x1f5f, 0x1f7d,
        !          2373:   0x1f80, 0x1fb4,
        !          2374:   0x1fb6, 0x1fc4,
        !          2375:   0x1fc6, 0x1fd3,
        !          2376:   0x1fd6, 0x1fdb,
        !          2377:   0x1fdd, 0x1fef,
        !          2378:   0x1ff2, 0x1ff4,
        !          2379:   0x1ff6, 0x1ffe,
        !          2380:   0x2000, 0x2054,
        !          2381:   0x2057, 0x2057,
        !          2382:   0x205f, 0x2063,
        !          2383:   0x206a, 0x2071,
        !          2384:   0x2074, 0x208e,
        !          2385:   0x20a0, 0x20b1,
        !          2386:   0x20d0, 0x20ea,
        !          2387:   0x2100, 0x213b,
        !          2388:   0x213d, 0x214b,
        !          2389:   0x2153, 0x2183,
        !          2390:   0x2190, 0x23d0,
        !          2391:   0x2400, 0x2426,
        !          2392:   0x2440, 0x244a,
        !          2393:   0x2460, 0x2617,
        !          2394:   0x2619, 0x267d,
        !          2395:   0x2680, 0x2691,
        !          2396:   0x26a0, 0x26a1,
        !          2397:   0x2701, 0x2704,
        !          2398:   0x2706, 0x2709,
        !          2399:   0x270c, 0x2727,
        !          2400:   0x2729, 0x274b,
        !          2401:   0x274d, 0x274d,
        !          2402:   0x274f, 0x2752,
        !          2403:   0x2756, 0x2756,
        !          2404:   0x2758, 0x275e,
        !          2405:   0x2761, 0x2794,
        !          2406:   0x2798, 0x27af,
        !          2407:   0x27b1, 0x27be,
        !          2408:   0x27d0, 0x27eb,
        !          2409:   0x27f0, 0x2b0d,
        !          2410:   0x2e80, 0x2e99,
        !          2411:   0x2e9b, 0x2ef3,
        !          2412:   0x2f00, 0x2fd5,
        !          2413:   0x2ff0, 0x2ffb,
        !          2414:   0x3000, 0x303f,
        !          2415:   0x3041, 0x3096,
        !          2416:   0x3099, 0x30ff,
        !          2417:   0x3105, 0x312c,
        !          2418:   0x3131, 0x318e,
        !          2419:   0x3190, 0x31b7,
        !          2420:   0x31f0, 0x321e,
        !          2421:   0x3220, 0x3243,
        !          2422:   0x3250, 0x327d,
        !          2423:   0x327f, 0x32fe,
        !          2424:   0x3300, 0x4db5,
        !          2425:   0x4dc0, 0x9fa5,
        !          2426:   0xa000, 0xa48c,
        !          2427:   0xa490, 0xa4c6,
        !          2428:   0xac00, 0xd7a3,
        !          2429:   0xe000, 0xfa2d,
        !          2430:   0xfa30, 0xfa6a,
        !          2431:   0xfb00, 0xfb06,
        !          2432:   0xfb13, 0xfb17,
        !          2433:   0xfb1d, 0xfb36,
        !          2434:   0xfb38, 0xfb3c,
        !          2435:   0xfb3e, 0xfb3e,
        !          2436:   0xfb40, 0xfb41,
        !          2437:   0xfb43, 0xfb44,
        !          2438:   0xfb46, 0xfbb1,
        !          2439:   0xfbd3, 0xfd3f,
        !          2440:   0xfd50, 0xfd8f,
        !          2441:   0xfd92, 0xfdc7,
        !          2442:   0xfdf0, 0xfdfd,
        !          2443:   0xfe00, 0xfe0f,
        !          2444:   0xfe20, 0xfe23,
        !          2445:   0xfe30, 0xfe52,
        !          2446:   0xfe54, 0xfe66,
        !          2447:   0xfe68, 0xfe6b,
        !          2448:   0xfe70, 0xfe74,
        !          2449:   0xfe76, 0xfefc,
        !          2450:   0xfeff, 0xfeff,
        !          2451:   0xff01, 0xffbe,
        !          2452:   0xffc2, 0xffc7,
        !          2453:   0xffca, 0xffcf,
        !          2454:   0xffd2, 0xffd7,
        !          2455:   0xffda, 0xffdc,
        !          2456:   0xffe0, 0xffe6,
        !          2457:   0xffe8, 0xffee,
        !          2458:   0xfff9, 0xfffd,
        !          2459:   0x10000, 0x1000b,
        !          2460:   0x1000d, 0x10026,
        !          2461:   0x10028, 0x1003a,
        !          2462:   0x1003c, 0x1003d,
        !          2463:   0x1003f, 0x1004d,
        !          2464:   0x10050, 0x1005d,
        !          2465:   0x10080, 0x100fa,
        !          2466:   0x10100, 0x10102,
        !          2467:   0x10107, 0x10133,
        !          2468:   0x10137, 0x1013f,
        !          2469:   0x10300, 0x1031e,
        !          2470:   0x10320, 0x10323,
        !          2471:   0x10330, 0x1034a,
        !          2472:   0x10380, 0x1039d,
        !          2473:   0x1039f, 0x1039f,
        !          2474:   0x10400, 0x1049d,
        !          2475:   0x104a0, 0x104a9,
        !          2476:   0x10800, 0x10805,
        !          2477:   0x10808, 0x10808,
        !          2478:   0x1080a, 0x10835,
        !          2479:   0x10837, 0x10838,
        !          2480:   0x1083c, 0x1083c,
        !          2481:   0x1083f, 0x1083f,
        !          2482:   0x1d000, 0x1d0f5,
        !          2483:   0x1d100, 0x1d126,
        !          2484:   0x1d12a, 0x1d1dd,
        !          2485:   0x1d300, 0x1d356,
        !          2486:   0x1d400, 0x1d454,
        !          2487:   0x1d456, 0x1d49c,
        !          2488:   0x1d49e, 0x1d49f,
        !          2489:   0x1d4a2, 0x1d4a2,
        !          2490:   0x1d4a5, 0x1d4a6,
        !          2491:   0x1d4a9, 0x1d4ac,
        !          2492:   0x1d4ae, 0x1d4b9,
        !          2493:   0x1d4bb, 0x1d4bb,
        !          2494:   0x1d4bd, 0x1d4c3,
        !          2495:   0x1d4c5, 0x1d505,
        !          2496:   0x1d507, 0x1d50a,
        !          2497:   0x1d50d, 0x1d514,
        !          2498:   0x1d516, 0x1d51c,
        !          2499:   0x1d51e, 0x1d539,
        !          2500:   0x1d53b, 0x1d53e,
        !          2501:   0x1d540, 0x1d544,
        !          2502:   0x1d546, 0x1d546,
        !          2503:   0x1d54a, 0x1d550,
        !          2504:   0x1d552, 0x1d6a3,
        !          2505:   0x1d6a8, 0x1d7c9,
        !          2506:   0x1d7ce, 0x1d7ff,
        !          2507:   0x20000, 0x2a6d6,
        !          2508:   0x2f800, 0x2fa1d,
        !          2509:   0xe0001, 0xe0001,
        !          2510:   0xe0020, 0xe007f,
        !          2511:   0xe0100, 0xe01ef,
        !          2512:   0xf0000, 0xffffd,
        !          2513:   0x100000, 0x10fffd
        !          2514: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          2515: }; /* end of MBPrint */
        !          2516: 
        !          2517: static const OnigCodePoint SBPunct[] = {
        !          2518:   9,
        !          2519:   0x0021, 0x0023,
        !          2520:   0x0025, 0x002a,
        !          2521:   0x002c, 0x002f,
        !          2522:   0x003a, 0x003b,
        !          2523:   0x003f, 0x0040,
        !          2524:   0x005b, 0x005d,
        !          2525:   0x005f, 0x005f,
        !          2526:   0x007b, 0x007b,
        !          2527:   0x007d, 0x007d
        !          2528: }; /* end of SBPunct */
        !          2529: 
        !          2530: static const OnigCodePoint MBPunct[] = {
        !          2531: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2532:   77,
        !          2533: #else
        !          2534:   5,
        !          2535: #endif
        !          2536:   0x00a1, 0x00a1,
        !          2537:   0x00ab, 0x00ab,
        !          2538:   0x00b7, 0x00b7,
        !          2539:   0x00bb, 0x00bb,
        !          2540:   0x00bf, 0x00bf
        !          2541: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2542:   ,
        !          2543:   0x037e, 0x037e,
        !          2544:   0x0387, 0x0387,
        !          2545:   0x055a, 0x055f,
        !          2546:   0x0589, 0x058a,
        !          2547:   0x05be, 0x05be,
        !          2548:   0x05c0, 0x05c0,
        !          2549:   0x05c3, 0x05c3,
        !          2550:   0x05f3, 0x05f4,
        !          2551:   0x060c, 0x060d,
        !          2552:   0x061b, 0x061b,
        !          2553:   0x061f, 0x061f,
        !          2554:   0x066a, 0x066d,
        !          2555:   0x06d4, 0x06d4,
        !          2556:   0x0700, 0x070d,
        !          2557:   0x0964, 0x0965,
        !          2558:   0x0970, 0x0970,
        !          2559:   0x0df4, 0x0df4,
        !          2560:   0x0e4f, 0x0e4f,
        !          2561:   0x0e5a, 0x0e5b,
        !          2562:   0x0f04, 0x0f12,
        !          2563:   0x0f3a, 0x0f3d,
        !          2564:   0x0f85, 0x0f85,
        !          2565:   0x104a, 0x104f,
        !          2566:   0x10fb, 0x10fb,
        !          2567:   0x1361, 0x1368,
        !          2568:   0x166d, 0x166e,
        !          2569:   0x169b, 0x169c,
        !          2570:   0x16eb, 0x16ed,
        !          2571:   0x1735, 0x1736,
        !          2572:   0x17d4, 0x17d6,
        !          2573:   0x17d8, 0x17da,
        !          2574:   0x1800, 0x180a,
        !          2575:   0x1944, 0x1945,
        !          2576:   0x2010, 0x2027,
        !          2577:   0x2030, 0x2043,
        !          2578:   0x2045, 0x2051,
        !          2579:   0x2053, 0x2054,
        !          2580:   0x2057, 0x2057,
        !          2581:   0x207d, 0x207e,
        !          2582:   0x208d, 0x208e,
        !          2583:   0x2329, 0x232a,
        !          2584:   0x23b4, 0x23b6,
        !          2585:   0x2768, 0x2775,
        !          2586:   0x27e6, 0x27eb,
        !          2587:   0x2983, 0x2998,
        !          2588:   0x29d8, 0x29db,
        !          2589:   0x29fc, 0x29fd,
        !          2590:   0x3001, 0x3003,
        !          2591:   0x3008, 0x3011,
        !          2592:   0x3014, 0x301f,
        !          2593:   0x3030, 0x3030,
        !          2594:   0x303d, 0x303d,
        !          2595:   0x30a0, 0x30a0,
        !          2596:   0x30fb, 0x30fb,
        !          2597:   0xfd3e, 0xfd3f,
        !          2598:   0xfe30, 0xfe52,
        !          2599:   0xfe54, 0xfe61,
        !          2600:   0xfe63, 0xfe63,
        !          2601:   0xfe68, 0xfe68,
        !          2602:   0xfe6a, 0xfe6b,
        !          2603:   0xff01, 0xff03,
        !          2604:   0xff05, 0xff0a,
        !          2605:   0xff0c, 0xff0f,
        !          2606:   0xff1a, 0xff1b,
        !          2607:   0xff1f, 0xff20,
        !          2608:   0xff3b, 0xff3d,
        !          2609:   0xff3f, 0xff3f,
        !          2610:   0xff5b, 0xff5b,
        !          2611:   0xff5d, 0xff5d,
        !          2612:   0xff5f, 0xff65,
        !          2613:   0x10100, 0x10101,
        !          2614:   0x1039f, 0x1039f
        !          2615: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          2616: }; /* end of MBPunct */
        !          2617: 
        !          2618: static const OnigCodePoint SBSpace[] = {
        !          2619:   2,
        !          2620:   0x0009, 0x000d,
        !          2621:   0x0020, 0x0020
        !          2622: };
        !          2623: 
        !          2624: static const OnigCodePoint MBSpace[] = {
        !          2625: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2626:   9,
        !          2627: #else
        !          2628:   2,
        !          2629: #endif
        !          2630:   0x0085, 0x0085,
        !          2631:   0x00a0, 0x00a0
        !          2632: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2633:   ,
        !          2634:   0x1680, 0x1680,
        !          2635:   0x180e, 0x180e,
        !          2636:   0x2000, 0x200a,
        !          2637:   0x2028, 0x2029,
        !          2638:   0x202f, 0x202f,
        !          2639:   0x205f, 0x205f,
        !          2640:   0x3000, 0x3000
        !          2641: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          2642: }; /* end of MBSpace */
        !          2643: 
        !          2644: static const OnigCodePoint SBUpper[] = {
        !          2645:   1,
        !          2646:   0x0041, 0x005a
        !          2647: };
        !          2648: 
        !          2649: static const OnigCodePoint MBUpper[] = {
        !          2650: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2651:   420,
        !          2652: #else
        !          2653:   2,
        !          2654: #endif
        !          2655:   0x00c0, 0x00d6,
        !          2656:   0x00d8, 0x00de
        !          2657: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          2658:   ,
        !          2659:   0x0100, 0x0100,
        !          2660:   0x0102, 0x0102,
        !          2661:   0x0104, 0x0104,
        !          2662:   0x0106, 0x0106,
        !          2663:   0x0108, 0x0108,
        !          2664:   0x010a, 0x010a,
        !          2665:   0x010c, 0x010c,
        !          2666:   0x010e, 0x010e,
        !          2667:   0x0110, 0x0110,
        !          2668:   0x0112, 0x0112,
        !          2669:   0x0114, 0x0114,
        !          2670:   0x0116, 0x0116,
        !          2671:   0x0118, 0x0118,
        !          2672:   0x011a, 0x011a,
        !          2673:   0x011c, 0x011c,
        !          2674:   0x011e, 0x011e,
        !          2675:   0x0120, 0x0120,
        !          2676:   0x0122, 0x0122,
        !          2677:   0x0124, 0x0124,
        !          2678:   0x0126, 0x0126,
        !          2679:   0x0128, 0x0128,
        !          2680:   0x012a, 0x012a,
        !          2681:   0x012c, 0x012c,
        !          2682:   0x012e, 0x012e,
        !          2683:   0x0130, 0x0130,
        !          2684:   0x0132, 0x0132,
        !          2685:   0x0134, 0x0134,
        !          2686:   0x0136, 0x0136,
        !          2687:   0x0139, 0x0139,
        !          2688:   0x013b, 0x013b,
        !          2689:   0x013d, 0x013d,
        !          2690:   0x013f, 0x013f,
        !          2691:   0x0141, 0x0141,
        !          2692:   0x0143, 0x0143,
        !          2693:   0x0145, 0x0145,
        !          2694:   0x0147, 0x0147,
        !          2695:   0x014a, 0x014a,
        !          2696:   0x014c, 0x014c,
        !          2697:   0x014e, 0x014e,
        !          2698:   0x0150, 0x0150,
        !          2699:   0x0152, 0x0152,
        !          2700:   0x0154, 0x0154,
        !          2701:   0x0156, 0x0156,
        !          2702:   0x0158, 0x0158,
        !          2703:   0x015a, 0x015a,
        !          2704:   0x015c, 0x015c,
        !          2705:   0x015e, 0x015e,
        !          2706:   0x0160, 0x0160,
        !          2707:   0x0162, 0x0162,
        !          2708:   0x0164, 0x0164,
        !          2709:   0x0166, 0x0166,
        !          2710:   0x0168, 0x0168,
        !          2711:   0x016a, 0x016a,
        !          2712:   0x016c, 0x016c,
        !          2713:   0x016e, 0x016e,
        !          2714:   0x0170, 0x0170,
        !          2715:   0x0172, 0x0172,
        !          2716:   0x0174, 0x0174,
        !          2717:   0x0176, 0x0176,
        !          2718:   0x0178, 0x0179,
        !          2719:   0x017b, 0x017b,
        !          2720:   0x017d, 0x017d,
        !          2721:   0x0181, 0x0182,
        !          2722:   0x0184, 0x0184,
        !          2723:   0x0186, 0x0187,
        !          2724:   0x0189, 0x018b,
        !          2725:   0x018e, 0x0191,
        !          2726:   0x0193, 0x0194,
        !          2727:   0x0196, 0x0198,
        !          2728:   0x019c, 0x019d,
        !          2729:   0x019f, 0x01a0,
        !          2730:   0x01a2, 0x01a2,
        !          2731:   0x01a4, 0x01a4,
        !          2732:   0x01a6, 0x01a7,
        !          2733:   0x01a9, 0x01a9,
        !          2734:   0x01ac, 0x01ac,
        !          2735:   0x01ae, 0x01af,
        !          2736:   0x01b1, 0x01b3,
        !          2737:   0x01b5, 0x01b5,
        !          2738:   0x01b7, 0x01b8,
        !          2739:   0x01bc, 0x01bc,
        !          2740:   0x01c4, 0x01c4,
        !          2741:   0x01c7, 0x01c7,
        !          2742:   0x01ca, 0x01ca,
        !          2743:   0x01cd, 0x01cd,
        !          2744:   0x01cf, 0x01cf,
        !          2745:   0x01d1, 0x01d1,
        !          2746:   0x01d3, 0x01d3,
        !          2747:   0x01d5, 0x01d5,
        !          2748:   0x01d7, 0x01d7,
        !          2749:   0x01d9, 0x01d9,
        !          2750:   0x01db, 0x01db,
        !          2751:   0x01de, 0x01de,
        !          2752:   0x01e0, 0x01e0,
        !          2753:   0x01e2, 0x01e2,
        !          2754:   0x01e4, 0x01e4,
        !          2755:   0x01e6, 0x01e6,
        !          2756:   0x01e8, 0x01e8,
        !          2757:   0x01ea, 0x01ea,
        !          2758:   0x01ec, 0x01ec,
        !          2759:   0x01ee, 0x01ee,
        !          2760:   0x01f1, 0x01f1,
        !          2761:   0x01f4, 0x01f4,
        !          2762:   0x01f6, 0x01f8,
        !          2763:   0x01fa, 0x01fa,
        !          2764:   0x01fc, 0x01fc,
        !          2765:   0x01fe, 0x01fe,
        !          2766:   0x0200, 0x0200,
        !          2767:   0x0202, 0x0202,
        !          2768:   0x0204, 0x0204,
        !          2769:   0x0206, 0x0206,
        !          2770:   0x0208, 0x0208,
        !          2771:   0x020a, 0x020a,
        !          2772:   0x020c, 0x020c,
        !          2773:   0x020e, 0x020e,
        !          2774:   0x0210, 0x0210,
        !          2775:   0x0212, 0x0212,
        !          2776:   0x0214, 0x0214,
        !          2777:   0x0216, 0x0216,
        !          2778:   0x0218, 0x0218,
        !          2779:   0x021a, 0x021a,
        !          2780:   0x021c, 0x021c,
        !          2781:   0x021e, 0x021e,
        !          2782:   0x0220, 0x0220,
        !          2783:   0x0222, 0x0222,
        !          2784:   0x0224, 0x0224,
        !          2785:   0x0226, 0x0226,
        !          2786:   0x0228, 0x0228,
        !          2787:   0x022a, 0x022a,
        !          2788:   0x022c, 0x022c,
        !          2789:   0x022e, 0x022e,
        !          2790:   0x0230, 0x0230,
        !          2791:   0x0232, 0x0232,
        !          2792:   0x0386, 0x0386,
        !          2793:   0x0388, 0x038a,
        !          2794:   0x038c, 0x038c,
        !          2795:   0x038e, 0x038f,
        !          2796:   0x0391, 0x03a1,
        !          2797:   0x03a3, 0x03ab,
        !          2798:   0x03d2, 0x03d4,
        !          2799:   0x03d8, 0x03d8,
        !          2800:   0x03da, 0x03da,
        !          2801:   0x03dc, 0x03dc,
        !          2802:   0x03de, 0x03de,
        !          2803:   0x03e0, 0x03e0,
        !          2804:   0x03e2, 0x03e2,
        !          2805:   0x03e4, 0x03e4,
        !          2806:   0x03e6, 0x03e6,
        !          2807:   0x03e8, 0x03e8,
        !          2808:   0x03ea, 0x03ea,
        !          2809:   0x03ec, 0x03ec,
        !          2810:   0x03ee, 0x03ee,
        !          2811:   0x03f4, 0x03f4,
        !          2812:   0x03f7, 0x03f7,
        !          2813:   0x03f9, 0x03fa,
        !          2814:   0x0400, 0x042f,
        !          2815:   0x0460, 0x0460,
        !          2816:   0x0462, 0x0462,
        !          2817:   0x0464, 0x0464,
        !          2818:   0x0466, 0x0466,
        !          2819:   0x0468, 0x0468,
        !          2820:   0x046a, 0x046a,
        !          2821:   0x046c, 0x046c,
        !          2822:   0x046e, 0x046e,
        !          2823:   0x0470, 0x0470,
        !          2824:   0x0472, 0x0472,
        !          2825:   0x0474, 0x0474,
        !          2826:   0x0476, 0x0476,
        !          2827:   0x0478, 0x0478,
        !          2828:   0x047a, 0x047a,
        !          2829:   0x047c, 0x047c,
        !          2830:   0x047e, 0x047e,
        !          2831:   0x0480, 0x0480,
        !          2832:   0x048a, 0x048a,
        !          2833:   0x048c, 0x048c,
        !          2834:   0x048e, 0x048e,
        !          2835:   0x0490, 0x0490,
        !          2836:   0x0492, 0x0492,
        !          2837:   0x0494, 0x0494,
        !          2838:   0x0496, 0x0496,
        !          2839:   0x0498, 0x0498,
        !          2840:   0x049a, 0x049a,
        !          2841:   0x049c, 0x049c,
        !          2842:   0x049e, 0x049e,
        !          2843:   0x04a0, 0x04a0,
        !          2844:   0x04a2, 0x04a2,
        !          2845:   0x04a4, 0x04a4,
        !          2846:   0x04a6, 0x04a6,
        !          2847:   0x04a8, 0x04a8,
        !          2848:   0x04aa, 0x04aa,
        !          2849:   0x04ac, 0x04ac,
        !          2850:   0x04ae, 0x04ae,
        !          2851:   0x04b0, 0x04b0,
        !          2852:   0x04b2, 0x04b2,
        !          2853:   0x04b4, 0x04b4,
        !          2854:   0x04b6, 0x04b6,
        !          2855:   0x04b8, 0x04b8,
        !          2856:   0x04ba, 0x04ba,
        !          2857:   0x04bc, 0x04bc,
        !          2858:   0x04be, 0x04be,
        !          2859:   0x04c0, 0x04c1,
        !          2860:   0x04c3, 0x04c3,
        !          2861:   0x04c5, 0x04c5,
        !          2862:   0x04c7, 0x04c7,
        !          2863:   0x04c9, 0x04c9,
        !          2864:   0x04cb, 0x04cb,
        !          2865:   0x04cd, 0x04cd,
        !          2866:   0x04d0, 0x04d0,
        !          2867:   0x04d2, 0x04d2,
        !          2868:   0x04d4, 0x04d4,
        !          2869:   0x04d6, 0x04d6,
        !          2870:   0x04d8, 0x04d8,
        !          2871:   0x04da, 0x04da,
        !          2872:   0x04dc, 0x04dc,
        !          2873:   0x04de, 0x04de,
        !          2874:   0x04e0, 0x04e0,
        !          2875:   0x04e2, 0x04e2,
        !          2876:   0x04e4, 0x04e4,
        !          2877:   0x04e6, 0x04e6,
        !          2878:   0x04e8, 0x04e8,
        !          2879:   0x04ea, 0x04ea,
        !          2880:   0x04ec, 0x04ec,
        !          2881:   0x04ee, 0x04ee,
        !          2882:   0x04f0, 0x04f0,
        !          2883:   0x04f2, 0x04f2,
        !          2884:   0x04f4, 0x04f4,
        !          2885:   0x04f8, 0x04f8,
        !          2886:   0x0500, 0x0500,
        !          2887:   0x0502, 0x0502,
        !          2888:   0x0504, 0x0504,
        !          2889:   0x0506, 0x0506,
        !          2890:   0x0508, 0x0508,
        !          2891:   0x050a, 0x050a,
        !          2892:   0x050c, 0x050c,
        !          2893:   0x050e, 0x050e,
        !          2894:   0x0531, 0x0556,
        !          2895:   0x10a0, 0x10c5,
        !          2896:   0x1e00, 0x1e00,
        !          2897:   0x1e02, 0x1e02,
        !          2898:   0x1e04, 0x1e04,
        !          2899:   0x1e06, 0x1e06,
        !          2900:   0x1e08, 0x1e08,
        !          2901:   0x1e0a, 0x1e0a,
        !          2902:   0x1e0c, 0x1e0c,
        !          2903:   0x1e0e, 0x1e0e,
        !          2904:   0x1e10, 0x1e10,
        !          2905:   0x1e12, 0x1e12,
        !          2906:   0x1e14, 0x1e14,
        !          2907:   0x1e16, 0x1e16,
        !          2908:   0x1e18, 0x1e18,
        !          2909:   0x1e1a, 0x1e1a,
        !          2910:   0x1e1c, 0x1e1c,
        !          2911:   0x1e1e, 0x1e1e,
        !          2912:   0x1e20, 0x1e20,
        !          2913:   0x1e22, 0x1e22,
        !          2914:   0x1e24, 0x1e24,
        !          2915:   0x1e26, 0x1e26,
        !          2916:   0x1e28, 0x1e28,
        !          2917:   0x1e2a, 0x1e2a,
        !          2918:   0x1e2c, 0x1e2c,
        !          2919:   0x1e2e, 0x1e2e,
        !          2920:   0x1e30, 0x1e30,
        !          2921:   0x1e32, 0x1e32,
        !          2922:   0x1e34, 0x1e34,
        !          2923:   0x1e36, 0x1e36,
        !          2924:   0x1e38, 0x1e38,
        !          2925:   0x1e3a, 0x1e3a,
        !          2926:   0x1e3c, 0x1e3c,
        !          2927:   0x1e3e, 0x1e3e,
        !          2928:   0x1e40, 0x1e40,
        !          2929:   0x1e42, 0x1e42,
        !          2930:   0x1e44, 0x1e44,
        !          2931:   0x1e46, 0x1e46,
        !          2932:   0x1e48, 0x1e48,
        !          2933:   0x1e4a, 0x1e4a,
        !          2934:   0x1e4c, 0x1e4c,
        !          2935:   0x1e4e, 0x1e4e,
        !          2936:   0x1e50, 0x1e50,
        !          2937:   0x1e52, 0x1e52,
        !          2938:   0x1e54, 0x1e54,
        !          2939:   0x1e56, 0x1e56,
        !          2940:   0x1e58, 0x1e58,
        !          2941:   0x1e5a, 0x1e5a,
        !          2942:   0x1e5c, 0x1e5c,
        !          2943:   0x1e5e, 0x1e5e,
        !          2944:   0x1e60, 0x1e60,
        !          2945:   0x1e62, 0x1e62,
        !          2946:   0x1e64, 0x1e64,
        !          2947:   0x1e66, 0x1e66,
        !          2948:   0x1e68, 0x1e68,
        !          2949:   0x1e6a, 0x1e6a,
        !          2950:   0x1e6c, 0x1e6c,
        !          2951:   0x1e6e, 0x1e6e,
        !          2952:   0x1e70, 0x1e70,
        !          2953:   0x1e72, 0x1e72,
        !          2954:   0x1e74, 0x1e74,
        !          2955:   0x1e76, 0x1e76,
        !          2956:   0x1e78, 0x1e78,
        !          2957:   0x1e7a, 0x1e7a,
        !          2958:   0x1e7c, 0x1e7c,
        !          2959:   0x1e7e, 0x1e7e,
        !          2960:   0x1e80, 0x1e80,
        !          2961:   0x1e82, 0x1e82,
        !          2962:   0x1e84, 0x1e84,
        !          2963:   0x1e86, 0x1e86,
        !          2964:   0x1e88, 0x1e88,
        !          2965:   0x1e8a, 0x1e8a,
        !          2966:   0x1e8c, 0x1e8c,
        !          2967:   0x1e8e, 0x1e8e,
        !          2968:   0x1e90, 0x1e90,
        !          2969:   0x1e92, 0x1e92,
        !          2970:   0x1e94, 0x1e94,
        !          2971:   0x1ea0, 0x1ea0,
        !          2972:   0x1ea2, 0x1ea2,
        !          2973:   0x1ea4, 0x1ea4,
        !          2974:   0x1ea6, 0x1ea6,
        !          2975:   0x1ea8, 0x1ea8,
        !          2976:   0x1eaa, 0x1eaa,
        !          2977:   0x1eac, 0x1eac,
        !          2978:   0x1eae, 0x1eae,
        !          2979:   0x1eb0, 0x1eb0,
        !          2980:   0x1eb2, 0x1eb2,
        !          2981:   0x1eb4, 0x1eb4,
        !          2982:   0x1eb6, 0x1eb6,
        !          2983:   0x1eb8, 0x1eb8,
        !          2984:   0x1eba, 0x1eba,
        !          2985:   0x1ebc, 0x1ebc,
        !          2986:   0x1ebe, 0x1ebe,
        !          2987:   0x1ec0, 0x1ec0,
        !          2988:   0x1ec2, 0x1ec2,
        !          2989:   0x1ec4, 0x1ec4,
        !          2990:   0x1ec6, 0x1ec6,
        !          2991:   0x1ec8, 0x1ec8,
        !          2992:   0x1eca, 0x1eca,
        !          2993:   0x1ecc, 0x1ecc,
        !          2994:   0x1ece, 0x1ece,
        !          2995:   0x1ed0, 0x1ed0,
        !          2996:   0x1ed2, 0x1ed2,
        !          2997:   0x1ed4, 0x1ed4,
        !          2998:   0x1ed6, 0x1ed6,
        !          2999:   0x1ed8, 0x1ed8,
        !          3000:   0x1eda, 0x1eda,
        !          3001:   0x1edc, 0x1edc,
        !          3002:   0x1ede, 0x1ede,
        !          3003:   0x1ee0, 0x1ee0,
        !          3004:   0x1ee2, 0x1ee2,
        !          3005:   0x1ee4, 0x1ee4,
        !          3006:   0x1ee6, 0x1ee6,
        !          3007:   0x1ee8, 0x1ee8,
        !          3008:   0x1eea, 0x1eea,
        !          3009:   0x1eec, 0x1eec,
        !          3010:   0x1eee, 0x1eee,
        !          3011:   0x1ef0, 0x1ef0,
        !          3012:   0x1ef2, 0x1ef2,
        !          3013:   0x1ef4, 0x1ef4,
        !          3014:   0x1ef6, 0x1ef6,
        !          3015:   0x1ef8, 0x1ef8,
        !          3016:   0x1f08, 0x1f0f,
        !          3017:   0x1f18, 0x1f1d,
        !          3018:   0x1f28, 0x1f2f,
        !          3019:   0x1f38, 0x1f3f,
        !          3020:   0x1f48, 0x1f4d,
        !          3021:   0x1f59, 0x1f59,
        !          3022:   0x1f5b, 0x1f5b,
        !          3023:   0x1f5d, 0x1f5d,
        !          3024:   0x1f5f, 0x1f5f,
        !          3025:   0x1f68, 0x1f6f,
        !          3026:   0x1fb8, 0x1fbb,
        !          3027:   0x1fc8, 0x1fcb,
        !          3028:   0x1fd8, 0x1fdb,
        !          3029:   0x1fe8, 0x1fec,
        !          3030:   0x1ff8, 0x1ffb,
        !          3031:   0x2102, 0x2102,
        !          3032:   0x2107, 0x2107,
        !          3033:   0x210b, 0x210d,
        !          3034:   0x2110, 0x2112,
        !          3035:   0x2115, 0x2115,
        !          3036:   0x2119, 0x211d,
        !          3037:   0x2124, 0x2124,
        !          3038:   0x2126, 0x2126,
        !          3039:   0x2128, 0x2128,
        !          3040:   0x212a, 0x212d,
        !          3041:   0x2130, 0x2131,
        !          3042:   0x2133, 0x2133,
        !          3043:   0x213e, 0x213f,
        !          3044:   0x2145, 0x2145,
        !          3045:   0xff21, 0xff3a,
        !          3046:   0x10400, 0x10427,
        !          3047:   0x1d400, 0x1d419,
        !          3048:   0x1d434, 0x1d44d,
        !          3049:   0x1d468, 0x1d481,
        !          3050:   0x1d49c, 0x1d49c,
        !          3051:   0x1d49e, 0x1d49f,
        !          3052:   0x1d4a2, 0x1d4a2,
        !          3053:   0x1d4a5, 0x1d4a6,
        !          3054:   0x1d4a9, 0x1d4ac,
        !          3055:   0x1d4ae, 0x1d4b5,
        !          3056:   0x1d4d0, 0x1d4e9,
        !          3057:   0x1d504, 0x1d505,
        !          3058:   0x1d507, 0x1d50a,
        !          3059:   0x1d50d, 0x1d514,
        !          3060:   0x1d516, 0x1d51c,
        !          3061:   0x1d538, 0x1d539,
        !          3062:   0x1d53b, 0x1d53e,
        !          3063:   0x1d540, 0x1d544,
        !          3064:   0x1d546, 0x1d546,
        !          3065:   0x1d54a, 0x1d550,
        !          3066:   0x1d56c, 0x1d585,
        !          3067:   0x1d5a0, 0x1d5b9,
        !          3068:   0x1d5d4, 0x1d5ed,
        !          3069:   0x1d608, 0x1d621,
        !          3070:   0x1d63c, 0x1d655,
        !          3071:   0x1d670, 0x1d689,
        !          3072:   0x1d6a8, 0x1d6c0,
        !          3073:   0x1d6e2, 0x1d6fa,
        !          3074:   0x1d71c, 0x1d734,
        !          3075:   0x1d756, 0x1d76e,
        !          3076:   0x1d790, 0x1d7a8
        !          3077: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          3078: }; /* end of MBUpper */
        !          3079: 
        !          3080: static const OnigCodePoint SBXDigit[] = {
        !          3081:   3,
        !          3082:   0x0030, 0x0039,
        !          3083:   0x0041, 0x0046,
        !          3084:   0x0061, 0x0066
        !          3085: };
        !          3086: 
        !          3087: static const OnigCodePoint SBASCII[] = {
        !          3088:   1,
        !          3089:   0x0000, 0x007f
        !          3090: };
        !          3091: 
        !          3092: static const OnigCodePoint SBWord[] = {
        !          3093:   4,
        !          3094:   0x0030, 0x0039,
        !          3095:   0x0041, 0x005a,
        !          3096:   0x005f, 0x005f,
        !          3097:   0x0061, 0x007a
        !          3098: };
        !          3099: 
        !          3100: static const OnigCodePoint MBWord[] = {
        !          3101: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          3102:   432,
        !          3103: #else
        !          3104:   8,
        !          3105: #endif
        !          3106:   0x00aa, 0x00aa,
        !          3107:   0x00b2, 0x00b3,
        !          3108:   0x00b5, 0x00b5,
        !          3109:   0x00b9, 0x00ba,
        !          3110:   0x00bc, 0x00be,
        !          3111:   0x00c0, 0x00d6,
        !          3112:   0x00d8, 0x00f6,
        !          3113: #ifndef USE_UNICODE_FULL_RANGE_CTYPE
        !          3114:   0x00f8, 0x7fffffff
        !          3115: #else /* not USE_UNICODE_FULL_RANGE_CTYPE */
        !          3116:   0x00f8, 0x0236,
        !          3117:   0x0250, 0x02c1,
        !          3118:   0x02c6, 0x02d1,
        !          3119:   0x02e0, 0x02e4,
        !          3120:   0x02ee, 0x02ee,
        !          3121:   0x0300, 0x0357,
        !          3122:   0x035d, 0x036f,
        !          3123:   0x037a, 0x037a,
        !          3124:   0x0386, 0x0386,
        !          3125:   0x0388, 0x038a,
        !          3126:   0x038c, 0x038c,
        !          3127:   0x038e, 0x03a1,
        !          3128:   0x03a3, 0x03ce,
        !          3129:   0x03d0, 0x03f5,
        !          3130:   0x03f7, 0x03fb,
        !          3131:   0x0400, 0x0481,
        !          3132:   0x0483, 0x0486,
        !          3133:   0x0488, 0x04ce,
        !          3134:   0x04d0, 0x04f5,
        !          3135:   0x04f8, 0x04f9,
        !          3136:   0x0500, 0x050f,
        !          3137:   0x0531, 0x0556,
        !          3138:   0x0559, 0x0559,
        !          3139:   0x0561, 0x0587,
        !          3140:   0x0591, 0x05a1,
        !          3141:   0x05a3, 0x05b9,
        !          3142:   0x05bb, 0x05bd,
        !          3143:   0x05bf, 0x05bf,
        !          3144:   0x05c1, 0x05c2,
        !          3145:   0x05c4, 0x05c4,
        !          3146:   0x05d0, 0x05ea,
        !          3147:   0x05f0, 0x05f2,
        !          3148:   0x0610, 0x0615,
        !          3149:   0x0621, 0x063a,
        !          3150:   0x0640, 0x0658,
        !          3151:   0x0660, 0x0669,
        !          3152:   0x066e, 0x06d3,
        !          3153:   0x06d5, 0x06dc,
        !          3154:   0x06de, 0x06e8,
        !          3155:   0x06ea, 0x06fc,
        !          3156:   0x06ff, 0x06ff,
        !          3157:   0x0710, 0x074a,
        !          3158:   0x074d, 0x074f,
        !          3159:   0x0780, 0x07b1,
        !          3160:   0x0901, 0x0939,
        !          3161:   0x093c, 0x094d,
        !          3162:   0x0950, 0x0954,
        !          3163:   0x0958, 0x0963,
        !          3164:   0x0966, 0x096f,
        !          3165:   0x0981, 0x0983,
        !          3166:   0x0985, 0x098c,
        !          3167:   0x098f, 0x0990,
        !          3168:   0x0993, 0x09a8,
        !          3169:   0x09aa, 0x09b0,
        !          3170:   0x09b2, 0x09b2,
        !          3171:   0x09b6, 0x09b9,
        !          3172:   0x09bc, 0x09c4,
        !          3173:   0x09c7, 0x09c8,
        !          3174:   0x09cb, 0x09cd,
        !          3175:   0x09d7, 0x09d7,
        !          3176:   0x09dc, 0x09dd,
        !          3177:   0x09df, 0x09e3,
        !          3178:   0x09e6, 0x09f1,
        !          3179:   0x09f4, 0x09f9,
        !          3180:   0x0a01, 0x0a03,
        !          3181:   0x0a05, 0x0a0a,
        !          3182:   0x0a0f, 0x0a10,
        !          3183:   0x0a13, 0x0a28,
        !          3184:   0x0a2a, 0x0a30,
        !          3185:   0x0a32, 0x0a33,
        !          3186:   0x0a35, 0x0a36,
        !          3187:   0x0a38, 0x0a39,
        !          3188:   0x0a3c, 0x0a3c,
        !          3189:   0x0a3e, 0x0a42,
        !          3190:   0x0a47, 0x0a48,
        !          3191:   0x0a4b, 0x0a4d,
        !          3192:   0x0a59, 0x0a5c,
        !          3193:   0x0a5e, 0x0a5e,
        !          3194:   0x0a66, 0x0a74,
        !          3195:   0x0a81, 0x0a83,
        !          3196:   0x0a85, 0x0a8d,
        !          3197:   0x0a8f, 0x0a91,
        !          3198:   0x0a93, 0x0aa8,
        !          3199:   0x0aaa, 0x0ab0,
        !          3200:   0x0ab2, 0x0ab3,
        !          3201:   0x0ab5, 0x0ab9,
        !          3202:   0x0abc, 0x0ac5,
        !          3203:   0x0ac7, 0x0ac9,
        !          3204:   0x0acb, 0x0acd,
        !          3205:   0x0ad0, 0x0ad0,
        !          3206:   0x0ae0, 0x0ae3,
        !          3207:   0x0ae6, 0x0aef,
        !          3208:   0x0b01, 0x0b03,
        !          3209:   0x0b05, 0x0b0c,
        !          3210:   0x0b0f, 0x0b10,
        !          3211:   0x0b13, 0x0b28,
        !          3212:   0x0b2a, 0x0b30,
        !          3213:   0x0b32, 0x0b33,
        !          3214:   0x0b35, 0x0b39,
        !          3215:   0x0b3c, 0x0b43,
        !          3216:   0x0b47, 0x0b48,
        !          3217:   0x0b4b, 0x0b4d,
        !          3218:   0x0b56, 0x0b57,
        !          3219:   0x0b5c, 0x0b5d,
        !          3220:   0x0b5f, 0x0b61,
        !          3221:   0x0b66, 0x0b6f,
        !          3222:   0x0b71, 0x0b71,
        !          3223:   0x0b82, 0x0b83,
        !          3224:   0x0b85, 0x0b8a,
        !          3225:   0x0b8e, 0x0b90,
        !          3226:   0x0b92, 0x0b95,
        !          3227:   0x0b99, 0x0b9a,
        !          3228:   0x0b9c, 0x0b9c,
        !          3229:   0x0b9e, 0x0b9f,
        !          3230:   0x0ba3, 0x0ba4,
        !          3231:   0x0ba8, 0x0baa,
        !          3232:   0x0bae, 0x0bb5,
        !          3233:   0x0bb7, 0x0bb9,
        !          3234:   0x0bbe, 0x0bc2,
        !          3235:   0x0bc6, 0x0bc8,
        !          3236:   0x0bca, 0x0bcd,
        !          3237:   0x0bd7, 0x0bd7,
        !          3238:   0x0be7, 0x0bf2,
        !          3239:   0x0c01, 0x0c03,
        !          3240:   0x0c05, 0x0c0c,
        !          3241:   0x0c0e, 0x0c10,
        !          3242:   0x0c12, 0x0c28,
        !          3243:   0x0c2a, 0x0c33,
        !          3244:   0x0c35, 0x0c39,
        !          3245:   0x0c3e, 0x0c44,
        !          3246:   0x0c46, 0x0c48,
        !          3247:   0x0c4a, 0x0c4d,
        !          3248:   0x0c55, 0x0c56,
        !          3249:   0x0c60, 0x0c61,
        !          3250:   0x0c66, 0x0c6f,
        !          3251:   0x0c82, 0x0c83,
        !          3252:   0x0c85, 0x0c8c,
        !          3253:   0x0c8e, 0x0c90,
        !          3254:   0x0c92, 0x0ca8,
        !          3255:   0x0caa, 0x0cb3,
        !          3256:   0x0cb5, 0x0cb9,
        !          3257:   0x0cbc, 0x0cc4,
        !          3258:   0x0cc6, 0x0cc8,
        !          3259:   0x0cca, 0x0ccd,
        !          3260:   0x0cd5, 0x0cd6,
        !          3261:   0x0cde, 0x0cde,
        !          3262:   0x0ce0, 0x0ce1,
        !          3263:   0x0ce6, 0x0cef,
        !          3264:   0x0d02, 0x0d03,
        !          3265:   0x0d05, 0x0d0c,
        !          3266:   0x0d0e, 0x0d10,
        !          3267:   0x0d12, 0x0d28,
        !          3268:   0x0d2a, 0x0d39,
        !          3269:   0x0d3e, 0x0d43,
        !          3270:   0x0d46, 0x0d48,
        !          3271:   0x0d4a, 0x0d4d,
        !          3272:   0x0d57, 0x0d57,
        !          3273:   0x0d60, 0x0d61,
        !          3274:   0x0d66, 0x0d6f,
        !          3275:   0x0d82, 0x0d83,
        !          3276:   0x0d85, 0x0d96,
        !          3277:   0x0d9a, 0x0db1,
        !          3278:   0x0db3, 0x0dbb,
        !          3279:   0x0dbd, 0x0dbd,
        !          3280:   0x0dc0, 0x0dc6,
        !          3281:   0x0dca, 0x0dca,
        !          3282:   0x0dcf, 0x0dd4,
        !          3283:   0x0dd6, 0x0dd6,
        !          3284:   0x0dd8, 0x0ddf,
        !          3285:   0x0df2, 0x0df3,
        !          3286:   0x0e01, 0x0e3a,
        !          3287:   0x0e40, 0x0e4e,
        !          3288:   0x0e50, 0x0e59,
        !          3289:   0x0e81, 0x0e82,
        !          3290:   0x0e84, 0x0e84,
        !          3291:   0x0e87, 0x0e88,
        !          3292:   0x0e8a, 0x0e8a,
        !          3293:   0x0e8d, 0x0e8d,
        !          3294:   0x0e94, 0x0e97,
        !          3295:   0x0e99, 0x0e9f,
        !          3296:   0x0ea1, 0x0ea3,
        !          3297:   0x0ea5, 0x0ea5,
        !          3298:   0x0ea7, 0x0ea7,
        !          3299:   0x0eaa, 0x0eab,
        !          3300:   0x0ead, 0x0eb9,
        !          3301:   0x0ebb, 0x0ebd,
        !          3302:   0x0ec0, 0x0ec4,
        !          3303:   0x0ec6, 0x0ec6,
        !          3304:   0x0ec8, 0x0ecd,
        !          3305:   0x0ed0, 0x0ed9,
        !          3306:   0x0edc, 0x0edd,
        !          3307:   0x0f00, 0x0f00,
        !          3308:   0x0f18, 0x0f19,
        !          3309:   0x0f20, 0x0f33,
        !          3310:   0x0f35, 0x0f35,
        !          3311:   0x0f37, 0x0f37,
        !          3312:   0x0f39, 0x0f39,
        !          3313:   0x0f3e, 0x0f47,
        !          3314:   0x0f49, 0x0f6a,
        !          3315:   0x0f71, 0x0f84,
        !          3316:   0x0f86, 0x0f8b,
        !          3317:   0x0f90, 0x0f97,
        !          3318:   0x0f99, 0x0fbc,
        !          3319:   0x0fc6, 0x0fc6,
        !          3320:   0x1000, 0x1021,
        !          3321:   0x1023, 0x1027,
        !          3322:   0x1029, 0x102a,
        !          3323:   0x102c, 0x1032,
        !          3324:   0x1036, 0x1039,
        !          3325:   0x1040, 0x1049,
        !          3326:   0x1050, 0x1059,
        !          3327:   0x10a0, 0x10c5,
        !          3328:   0x10d0, 0x10f8,
        !          3329:   0x1100, 0x1159,
        !          3330:   0x115f, 0x11a2,
        !          3331:   0x11a8, 0x11f9,
        !          3332:   0x1200, 0x1206,
        !          3333:   0x1208, 0x1246,
        !          3334:   0x1248, 0x1248,
        !          3335:   0x124a, 0x124d,
        !          3336:   0x1250, 0x1256,
        !          3337:   0x1258, 0x1258,
        !          3338:   0x125a, 0x125d,
        !          3339:   0x1260, 0x1286,
        !          3340:   0x1288, 0x1288,
        !          3341:   0x128a, 0x128d,
        !          3342:   0x1290, 0x12ae,
        !          3343:   0x12b0, 0x12b0,
        !          3344:   0x12b2, 0x12b5,
        !          3345:   0x12b8, 0x12be,
        !          3346:   0x12c0, 0x12c0,
        !          3347:   0x12c2, 0x12c5,
        !          3348:   0x12c8, 0x12ce,
        !          3349:   0x12d0, 0x12d6,
        !          3350:   0x12d8, 0x12ee,
        !          3351:   0x12f0, 0x130e,
        !          3352:   0x1310, 0x1310,
        !          3353:   0x1312, 0x1315,
        !          3354:   0x1318, 0x131e,
        !          3355:   0x1320, 0x1346,
        !          3356:   0x1348, 0x135a,
        !          3357:   0x1369, 0x137c,
        !          3358:   0x13a0, 0x13f4,
        !          3359:   0x1401, 0x166c,
        !          3360:   0x166f, 0x1676,
        !          3361:   0x1681, 0x169a,
        !          3362:   0x16a0, 0x16ea,
        !          3363:   0x16ee, 0x16f0,
        !          3364:   0x1700, 0x170c,
        !          3365:   0x170e, 0x1714,
        !          3366:   0x1720, 0x1734,
        !          3367:   0x1740, 0x1753,
        !          3368:   0x1760, 0x176c,
        !          3369:   0x176e, 0x1770,
        !          3370:   0x1772, 0x1773,
        !          3371:   0x1780, 0x17b3,
        !          3372:   0x17b6, 0x17d3,
        !          3373:   0x17d7, 0x17d7,
        !          3374:   0x17dc, 0x17dd,
        !          3375:   0x17e0, 0x17e9,
        !          3376:   0x17f0, 0x17f9,
        !          3377:   0x180b, 0x180d,
        !          3378:   0x1810, 0x1819,
        !          3379:   0x1820, 0x1877,
        !          3380:   0x1880, 0x18a9,
        !          3381:   0x1900, 0x191c,
        !          3382:   0x1920, 0x192b,
        !          3383:   0x1930, 0x193b,
        !          3384:   0x1946, 0x196d,
        !          3385:   0x1970, 0x1974,
        !          3386:   0x1d00, 0x1d6b,
        !          3387:   0x1e00, 0x1e9b,
        !          3388:   0x1ea0, 0x1ef9,
        !          3389:   0x1f00, 0x1f15,
        !          3390:   0x1f18, 0x1f1d,
        !          3391:   0x1f20, 0x1f45,
        !          3392:   0x1f48, 0x1f4d,
        !          3393:   0x1f50, 0x1f57,
        !          3394:   0x1f59, 0x1f59,
        !          3395:   0x1f5b, 0x1f5b,
        !          3396:   0x1f5d, 0x1f5d,
        !          3397:   0x1f5f, 0x1f7d,
        !          3398:   0x1f80, 0x1fb4,
        !          3399:   0x1fb6, 0x1fbc,
        !          3400:   0x1fbe, 0x1fbe,
        !          3401:   0x1fc2, 0x1fc4,
        !          3402:   0x1fc6, 0x1fcc,
        !          3403:   0x1fd0, 0x1fd3,
        !          3404:   0x1fd6, 0x1fdb,
        !          3405:   0x1fe0, 0x1fec,
        !          3406:   0x1ff2, 0x1ff4,
        !          3407:   0x1ff6, 0x1ffc,
        !          3408:   0x203f, 0x2040,
        !          3409:   0x2054, 0x2054,
        !          3410:   0x2070, 0x2071,
        !          3411:   0x2074, 0x2079,
        !          3412:   0x207f, 0x2089,
        !          3413:   0x20d0, 0x20ea,
        !          3414:   0x2102, 0x2102,
        !          3415:   0x2107, 0x2107,
        !          3416:   0x210a, 0x2113,
        !          3417:   0x2115, 0x2115,
        !          3418:   0x2119, 0x211d,
        !          3419:   0x2124, 0x2124,
        !          3420:   0x2126, 0x2126,
        !          3421:   0x2128, 0x2128,
        !          3422:   0x212a, 0x212d,
        !          3423:   0x212f, 0x2131,
        !          3424:   0x2133, 0x2139,
        !          3425:   0x213d, 0x213f,
        !          3426:   0x2145, 0x2149,
        !          3427:   0x2153, 0x2183,
        !          3428:   0x2460, 0x249b,
        !          3429:   0x24ea, 0x24ff,
        !          3430:   0x2776, 0x2793,
        !          3431:   0x3005, 0x3007,
        !          3432:   0x3021, 0x302f,
        !          3433:   0x3031, 0x3035,
        !          3434:   0x3038, 0x303c,
        !          3435:   0x3041, 0x3096,
        !          3436:   0x3099, 0x309a,
        !          3437:   0x309d, 0x309f,
        !          3438:   0x30a1, 0x30ff,
        !          3439:   0x3105, 0x312c,
        !          3440:   0x3131, 0x318e,
        !          3441:   0x3192, 0x3195,
        !          3442:   0x31a0, 0x31b7,
        !          3443:   0x31f0, 0x31ff,
        !          3444:   0x3220, 0x3229,
        !          3445:   0x3251, 0x325f,
        !          3446:   0x3280, 0x3289,
        !          3447:   0x32b1, 0x32bf,
        !          3448:   0x3400, 0x4db5,
        !          3449:   0x4e00, 0x9fa5,
        !          3450:   0xa000, 0xa48c,
        !          3451:   0xac00, 0xd7a3,
        !          3452:   0xf900, 0xfa2d,
        !          3453:   0xfa30, 0xfa6a,
        !          3454:   0xfb00, 0xfb06,
        !          3455:   0xfb13, 0xfb17,
        !          3456:   0xfb1d, 0xfb28,
        !          3457:   0xfb2a, 0xfb36,
        !          3458:   0xfb38, 0xfb3c,
        !          3459:   0xfb3e, 0xfb3e,
        !          3460:   0xfb40, 0xfb41,
        !          3461:   0xfb43, 0xfb44,
        !          3462:   0xfb46, 0xfbb1,
        !          3463:   0xfbd3, 0xfd3d,
        !          3464:   0xfd50, 0xfd8f,
        !          3465:   0xfd92, 0xfdc7,
        !          3466:   0xfdf0, 0xfdfb,
        !          3467:   0xfe00, 0xfe0f,
        !          3468:   0xfe20, 0xfe23,
        !          3469:   0xfe33, 0xfe34,
        !          3470:   0xfe4d, 0xfe4f,
        !          3471:   0xfe70, 0xfe74,
        !          3472:   0xfe76, 0xfefc,
        !          3473:   0xff10, 0xff19,
        !          3474:   0xff21, 0xff3a,
        !          3475:   0xff3f, 0xff3f,
        !          3476:   0xff41, 0xff5a,
        !          3477:   0xff65, 0xffbe,
        !          3478:   0xffc2, 0xffc7,
        !          3479:   0xffca, 0xffcf,
        !          3480:   0xffd2, 0xffd7,
        !          3481:   0xffda, 0xffdc,
        !          3482:   0x10000, 0x1000b,
        !          3483:   0x1000d, 0x10026,
        !          3484:   0x10028, 0x1003a,
        !          3485:   0x1003c, 0x1003d,
        !          3486:   0x1003f, 0x1004d,
        !          3487:   0x10050, 0x1005d,
        !          3488:   0x10080, 0x100fa,
        !          3489:   0x10107, 0x10133,
        !          3490:   0x10300, 0x1031e,
        !          3491:   0x10320, 0x10323,
        !          3492:   0x10330, 0x1034a,
        !          3493:   0x10380, 0x1039d,
        !          3494:   0x10400, 0x1049d,
        !          3495:   0x104a0, 0x104a9,
        !          3496:   0x10800, 0x10805,
        !          3497:   0x10808, 0x10808,
        !          3498:   0x1080a, 0x10835,
        !          3499:   0x10837, 0x10838,
        !          3500:   0x1083c, 0x1083c,
        !          3501:   0x1083f, 0x1083f,
        !          3502:   0x1d165, 0x1d169,
        !          3503:   0x1d16d, 0x1d172,
        !          3504:   0x1d17b, 0x1d182,
        !          3505:   0x1d185, 0x1d18b,
        !          3506:   0x1d1aa, 0x1d1ad,
        !          3507:   0x1d400, 0x1d454,
        !          3508:   0x1d456, 0x1d49c,
        !          3509:   0x1d49e, 0x1d49f,
        !          3510:   0x1d4a2, 0x1d4a2,
        !          3511:   0x1d4a5, 0x1d4a6,
        !          3512:   0x1d4a9, 0x1d4ac,
        !          3513:   0x1d4ae, 0x1d4b9,
        !          3514:   0x1d4bb, 0x1d4bb,
        !          3515:   0x1d4bd, 0x1d4c3,
        !          3516:   0x1d4c5, 0x1d505,
        !          3517:   0x1d507, 0x1d50a,
        !          3518:   0x1d50d, 0x1d514,
        !          3519:   0x1d516, 0x1d51c,
        !          3520:   0x1d51e, 0x1d539,
        !          3521:   0x1d53b, 0x1d53e,
        !          3522:   0x1d540, 0x1d544,
        !          3523:   0x1d546, 0x1d546,
        !          3524:   0x1d54a, 0x1d550,
        !          3525:   0x1d552, 0x1d6a3,
        !          3526:   0x1d6a8, 0x1d6c0,
        !          3527:   0x1d6c2, 0x1d6da,
        !          3528:   0x1d6dc, 0x1d6fa,
        !          3529:   0x1d6fc, 0x1d714,
        !          3530:   0x1d716, 0x1d734,
        !          3531:   0x1d736, 0x1d74e,
        !          3532:   0x1d750, 0x1d76e,
        !          3533:   0x1d770, 0x1d788,
        !          3534:   0x1d78a, 0x1d7a8,
        !          3535:   0x1d7aa, 0x1d7c2,
        !          3536:   0x1d7c4, 0x1d7c9,
        !          3537:   0x1d7ce, 0x1d7ff,
        !          3538:   0x20000, 0x2a6d6,
        !          3539:   0x2f800, 0x2fa1d,
        !          3540:   0xe0100, 0xe01ef
        !          3541: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          3542: }; /* end of MBWord */
        !          3543: 
        !          3544: 
        !          3545: static int
        !          3546: utf8_get_ctype_code_range(int ctype,
        !          3547:                           const OnigCodePoint* sbr[], const OnigCodePoint* mbr[])
        !          3548: {
        !          3549: #define CR_SET(sbl,mbl) do { \
        !          3550:   *sbr = sbl; \
        !          3551:   *mbr = mbl; \
        !          3552: } while (0)
        !          3553: 
        !          3554: #define CR_SB_SET(sbl) do { \
        !          3555:   *sbr = sbl; \
        !          3556:   *mbr = EmptyRange; \
        !          3557: } while (0)
        !          3558: 
        !          3559:   switch (ctype) {
        !          3560:   case ONIGENC_CTYPE_ALPHA:
        !          3561:     CR_SET(SBAlpha, MBAlpha);
        !          3562:     break;
        !          3563:   case ONIGENC_CTYPE_BLANK:
        !          3564:     CR_SET(SBBlank, MBBlank);
        !          3565:     break;
        !          3566:   case ONIGENC_CTYPE_CNTRL:
        !          3567:     CR_SET(SBCntrl, MBCntrl);
        !          3568:     break;
        !          3569:   case ONIGENC_CTYPE_DIGIT:
        !          3570:     CR_SET(SBDigit, MBDigit);
        !          3571:     break;
        !          3572:   case ONIGENC_CTYPE_GRAPH:
        !          3573:     CR_SET(SBGraph, MBGraph);
        !          3574:     break;
        !          3575:   case ONIGENC_CTYPE_LOWER:
        !          3576:     CR_SET(SBLower, MBLower);
        !          3577:     break;
        !          3578:   case ONIGENC_CTYPE_PRINT:
        !          3579:     CR_SET(SBPrint, MBPrint);
        !          3580:     break;
        !          3581:   case ONIGENC_CTYPE_PUNCT:
        !          3582:     CR_SET(SBPunct, MBPunct);
        !          3583:     break;
        !          3584:   case ONIGENC_CTYPE_SPACE:
        !          3585:     CR_SET(SBSpace, MBSpace);
        !          3586:     break;
        !          3587:   case ONIGENC_CTYPE_UPPER:
        !          3588:     CR_SET(SBUpper, MBUpper);
        !          3589:     break;
        !          3590:   case ONIGENC_CTYPE_XDIGIT:
        !          3591:     CR_SB_SET(SBXDigit);
        !          3592:     break;
        !          3593:   case ONIGENC_CTYPE_WORD:
        !          3594:     CR_SET(SBWord, MBWord);
        !          3595:     break;
        !          3596:   case ONIGENC_CTYPE_ASCII:
        !          3597:     CR_SB_SET(SBASCII);
        !          3598:     break;
        !          3599:   case ONIGENC_CTYPE_ALNUM:
        !          3600:     CR_SET(SBAlnum, MBAlnum);
        !          3601:     break;
        !          3602: 
        !          3603:   default:
        !          3604:     return ONIGENCERR_TYPE_BUG;
        !          3605:     break;
        !          3606:   }
        !          3607: 
        !          3608:   return 0;
        !          3609: }
        !          3610: 
        !          3611: static int
        !          3612: utf8_is_code_ctype(OnigCodePoint code, unsigned int ctype)
        !          3613: {
        !          3614: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          3615:   const OnigCodePoint *range;
        !          3616: #endif
        !          3617: 
        !          3618:   if (code < 256) {
        !          3619:     return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);
        !          3620:   }
        !          3621: 
        !          3622: #ifdef USE_UNICODE_FULL_RANGE_CTYPE
        !          3623: 
        !          3624:   switch (ctype) {
        !          3625:   case ONIGENC_CTYPE_ALPHA:
        !          3626:     range = MBAlpha;
        !          3627:     break;
        !          3628:   case ONIGENC_CTYPE_BLANK:
        !          3629:     range = MBBlank;
        !          3630:     break;
        !          3631:   case ONIGENC_CTYPE_CNTRL:
        !          3632:     range = MBCntrl;
        !          3633:     break;
        !          3634:   case ONIGENC_CTYPE_DIGIT:
        !          3635:     range = MBDigit;
        !          3636:     break;
        !          3637:   case ONIGENC_CTYPE_GRAPH:
        !          3638:     range = MBGraph;
        !          3639:     break;
        !          3640:   case ONIGENC_CTYPE_LOWER:
        !          3641:     range = MBLower;
        !          3642:     break;
        !          3643:   case ONIGENC_CTYPE_PRINT:
        !          3644:     range = MBPrint;
        !          3645:     break;
        !          3646:   case ONIGENC_CTYPE_PUNCT:
        !          3647:     range = MBPunct;
        !          3648:     break;
        !          3649:   case ONIGENC_CTYPE_SPACE:
        !          3650:     range = MBSpace;
        !          3651:     break;
        !          3652:   case ONIGENC_CTYPE_UPPER:
        !          3653:     range = MBUpper;
        !          3654:     break;
        !          3655:   case ONIGENC_CTYPE_XDIGIT:
        !          3656:     return FALSE;
        !          3657:     break;
        !          3658:   case ONIGENC_CTYPE_WORD:
        !          3659:     range = MBWord;
        !          3660:     break;
        !          3661:   case ONIGENC_CTYPE_ASCII:
        !          3662:     return FALSE;
        !          3663:     break;
        !          3664:   case ONIGENC_CTYPE_ALNUM:
        !          3665:     range = MBAlnum;
        !          3666:     break;
        !          3667:   case ONIGENC_CTYPE_NEWLINE:
        !          3668:     return FALSE;
        !          3669:     break;
        !          3670: 
        !          3671:   default:
        !          3672:     return ONIGENCERR_TYPE_BUG;
        !          3673:     break;
        !          3674:   }
        !          3675: 
        !          3676:   return onig_is_in_code_range((UChar* )range, code);
        !          3677: 
        !          3678: #else
        !          3679: 
        !          3680:   if ((ctype & ONIGENC_CTYPE_WORD) != 0) {
        !          3681: #ifdef USE_INVALID_CODE_SCHEME
        !          3682:     if (code <= VALID_CODE_LIMIT)
        !          3683: #endif
        !          3684:       return TRUE;
        !          3685:   }
        !          3686: #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
        !          3687: 
        !          3688:   return FALSE;
        !          3689: }
        !          3690: 
        !          3691: static UChar*
        !          3692: utf8_left_adjust_char_head(const UChar* start, const UChar* s)
        !          3693: {
        !          3694:   const UChar *p;
        !          3695: 
        !          3696:   if (s <= start) return (UChar* )s;
        !          3697:   p = s;
        !          3698: 
        !          3699:   while (!utf8_islead(*p) && p > start) p--;
        !          3700:   return (UChar* )p;
        !          3701: }
        !          3702: 
        !          3703: OnigEncodingType OnigEncodingUTF8 = {
        !          3704:   utf8_mbc_enc_len,
        !          3705:   "UTF-8",     /* name */
        !          3706:   6,           /* max byte length */
        !          3707:   1,           /* min byte length */
        !          3708:   (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | 
        !          3709:    ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ),
        !          3710:   {
        !          3711:       (OnigCodePoint )'\\'                       /* esc */
        !          3712:     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.'  */
        !          3713:     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*'  */
        !          3714:     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */
        !          3715:     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */
        !          3716:     , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */
        !          3717:   },
        !          3718:   utf8_is_mbc_newline,
        !          3719:   utf8_mbc_to_code,
        !          3720:   utf8_code_to_mbclen,
        !          3721:   utf8_code_to_mbc,
        !          3722:   utf8_mbc_to_normalize,
        !          3723:   utf8_is_mbc_ambiguous,
        !          3724:   onigenc_iso_8859_1_get_all_pair_ambig_codes,
        !          3725:   onigenc_ess_tsett_get_all_comp_ambig_codes,
        !          3726:   utf8_is_code_ctype,
        !          3727:   utf8_get_ctype_code_range,
        !          3728:   utf8_left_adjust_char_head,
        !          3729:   onigenc_always_true_is_allowed_reverse_match
        !          3730: };

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>