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

1.1     ! misho       1: /**********************************************************************
        !             2:   regenc.c -  Oniguruma (regular expression library)
        !             3: **********************************************************************/
        !             4: /*-
        !             5:  * Copyright (c) 2002-2007  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 "regint.h"
        !            31: 
        !            32: OnigEncoding OnigEncDefaultCharEncoding = ONIG_ENCODING_INIT_DEFAULT;
        !            33: 
        !            34: extern int
        !            35: onigenc_init(void)
        !            36: {
        !            37:   return 0;
        !            38: }
        !            39: 
        !            40: extern OnigEncoding
        !            41: onigenc_get_default_encoding(void)
        !            42: {
        !            43:   return OnigEncDefaultCharEncoding;
        !            44: }
        !            45: 
        !            46: extern int
        !            47: onigenc_set_default_encoding(OnigEncoding enc)
        !            48: {
        !            49:   OnigEncDefaultCharEncoding = enc;
        !            50:   return 0;
        !            51: }
        !            52: 
        !            53: extern UChar*
        !            54: onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
        !            55: {
        !            56:   UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
        !            57:   if (p < s) {
        !            58:     p += enc_len(enc, p);
        !            59:   }
        !            60:   return p;
        !            61: }
        !            62: 
        !            63: extern UChar*
        !            64: onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,
        !            65:                                   const UChar* start, const UChar* s, const UChar** prev)
        !            66: {
        !            67:   UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
        !            68: 
        !            69:   if (p < s) {
        !            70:     if (prev) *prev = (const UChar* )p;
        !            71:     p += enc_len(enc, p);
        !            72:   }
        !            73:   else {
        !            74:     if (prev) *prev = (const UChar* )NULL; /* Sorry */
        !            75:   }
        !            76:   return p;
        !            77: }
        !            78: 
        !            79: extern UChar*
        !            80: onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
        !            81: {
        !            82:   if (s <= start)
        !            83:     return (UChar* )NULL;
        !            84: 
        !            85:   return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
        !            86: }
        !            87: 
        !            88: extern UChar*
        !            89: onigenc_step_back(OnigEncoding enc, const UChar* start, const UChar* s, int n)
        !            90: {
        !            91:   while (ONIG_IS_NOT_NULL(s) && n-- > 0) {
        !            92:     if (s <= start)
        !            93:       return (UChar* )NULL;
        !            94: 
        !            95:     s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
        !            96:   }
        !            97:   return (UChar* )s;
        !            98: }
        !            99: 
        !           100: extern UChar*
        !           101: onigenc_step(OnigEncoding enc, const UChar* p, const UChar* end, int n)
        !           102: {
        !           103:   UChar* q = (UChar* )p;
        !           104:   while (n-- > 0) {
        !           105:     q += ONIGENC_MBC_ENC_LEN(enc, q);
        !           106:   }
        !           107:   return (q <= end ? q : NULL);
        !           108: }
        !           109: 
        !           110: extern int
        !           111: onigenc_strlen(OnigEncoding enc, const UChar* p, const UChar* end)
        !           112: {
        !           113:   int n = 0;
        !           114:   UChar* q = (UChar* )p;
        !           115:   
        !           116:   while (q < end) {
        !           117:     q += ONIGENC_MBC_ENC_LEN(enc, q);
        !           118:     n++;
        !           119:   }
        !           120:   return n;
        !           121: }
        !           122: 
        !           123: extern int
        !           124: onigenc_strlen_null(OnigEncoding enc, const UChar* s)
        !           125: {
        !           126:   int n = 0;
        !           127:   UChar* p = (UChar* )s;
        !           128:   
        !           129:   while (1) {
        !           130:     if (*p == '\0') {
        !           131:       UChar* q;
        !           132:       int len = ONIGENC_MBC_MINLEN(enc);
        !           133: 
        !           134:       if (len == 1) return n;
        !           135:       q = p + 1;
        !           136:       while (len > 1) {
        !           137:         if (*q != '\0') break;
        !           138:         q++;
        !           139:         len--;
        !           140:       }
        !           141:       if (len == 1) return n;
        !           142:     }
        !           143:     p += ONIGENC_MBC_ENC_LEN(enc, p);
        !           144:     n++;
        !           145:   }
        !           146: }
        !           147: 
        !           148: extern int
        !           149: onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s)
        !           150: {
        !           151:   UChar* start = (UChar* )s;
        !           152:   UChar* p = (UChar* )s;
        !           153: 
        !           154:   while (1) {
        !           155:     if (*p == '\0') {
        !           156:       UChar* q;
        !           157:       int len = ONIGENC_MBC_MINLEN(enc);
        !           158: 
        !           159:       if (len == 1) return (int )(p - start);
        !           160:       q = p + 1;
        !           161:       while (len > 1) {
        !           162:         if (*q != '\0') break;
        !           163:         q++;
        !           164:         len--;
        !           165:       }
        !           166:       if (len == 1) return (int )(p - start);
        !           167:     }
        !           168:     p += ONIGENC_MBC_ENC_LEN(enc, p);
        !           169:   }
        !           170: }
        !           171: 
        !           172: #ifndef ONIG_RUBY_M17N
        !           173: 
        !           174: #ifndef NOT_RUBY
        !           175: 
        !           176: #define USE_APPLICATION_TO_LOWER_CASE_TABLE
        !           177: 
        !           178: const unsigned short OnigEnc_Unicode_ISO_8859_1_CtypeTable[256] = {
        !           179:   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
        !           180:   0x2008, 0x228c, 0x2289, 0x2288, 0x2288, 0x2288, 0x2008, 0x2008,
        !           181:   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
        !           182:   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
        !           183:   0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
        !           184:   0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
        !           185:   0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0,
        !           186:   0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
        !           187:   0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2,
        !           188:   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
        !           189:   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
        !           190:   0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0,
        !           191:   0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2,
        !           192:   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
        !           193:   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
        !           194:   0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008,
        !           195:   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008,
        !           196:   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
        !           197:   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
        !           198:   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
        !           199:   0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0,
        !           200:   0x00a0, 0x00a0, 0x10e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0,
        !           201:   0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x00a0, 0x01a0,
        !           202:   0x00a0, 0x10a0, 0x10e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0,
        !           203:   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2,
        !           204:   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2,
        !           205:   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0,
        !           206:   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2,
        !           207:   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2,
        !           208:   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2,
        !           209:   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0,
        !           210:   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2
        !           211: };
        !           212: #endif
        !           213: 
        !           214: const UChar* OnigEncAsciiToLowerCaseTable = (const UChar* )0;
        !           215: 
        !           216: #ifndef USE_APPLICATION_TO_LOWER_CASE_TABLE
        !           217: static const UChar BuiltInAsciiToLowerCaseTable[] = {
        !           218:   '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
        !           219:   '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
        !           220:   '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
        !           221:   '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
        !           222:   '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
        !           223:   '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
        !           224:   '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
        !           225:   '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
        !           226:   '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
        !           227:   '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
        !           228:   '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
        !           229:   '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
        !           230:   '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
        !           231:   '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
        !           232:   '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
        !           233:   '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
        !           234:   '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
        !           235:   '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
        !           236:   '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
        !           237:   '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
        !           238:   '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
        !           239:   '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
        !           240:   '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
        !           241:   '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
        !           242:   '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
        !           243:   '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
        !           244:   '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
        !           245:   '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
        !           246:   '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
        !           247:   '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
        !           248:   '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
        !           249:   '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
        !           250: };
        !           251: #endif /* not USE_APPLICATION_TO_LOWER_CASE_TABLE */
        !           252: 
        !           253: #ifdef USE_UPPER_CASE_TABLE
        !           254: const UChar OnigEncAsciiToUpperCaseTable[256] = {
        !           255:   '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
        !           256:   '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
        !           257:   '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
        !           258:   '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
        !           259:   '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
        !           260:   '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
        !           261:   '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
        !           262:   '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
        !           263:   '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
        !           264:   '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
        !           265:   '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
        !           266:   '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137',
        !           267:   '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
        !           268:   '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
        !           269:   '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
        !           270:   '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177',
        !           271:   '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
        !           272:   '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
        !           273:   '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
        !           274:   '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
        !           275:   '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
        !           276:   '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
        !           277:   '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
        !           278:   '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
        !           279:   '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
        !           280:   '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
        !           281:   '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
        !           282:   '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
        !           283:   '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
        !           284:   '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
        !           285:   '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
        !           286:   '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
        !           287: };
        !           288: #endif
        !           289: 
        !           290: const unsigned short OnigEncAsciiCtypeTable[256] = {
        !           291:   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
        !           292:   0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008,
        !           293:   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
        !           294:   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
        !           295:   0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
        !           296:   0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
        !           297:   0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0,
        !           298:   0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
        !           299:   0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2,
        !           300:   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
        !           301:   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
        !           302:   0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0,
        !           303:   0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2,
        !           304:   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
        !           305:   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
        !           306:   0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008,
        !           307: 
        !           308:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           309:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           310:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           311:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           312:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           313:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           314:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           315:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           316:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           317:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           318:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           319:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           320:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           321:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           322:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        !           323:   0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
        !           324: };
        !           325: 
        !           326: const UChar OnigEncISO_8859_1_ToLowerCaseTable[256] = {
        !           327:   '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
        !           328:   '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
        !           329:   '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
        !           330:   '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
        !           331:   '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
        !           332:   '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
        !           333:   '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
        !           334:   '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
        !           335:   '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
        !           336:   '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
        !           337:   '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
        !           338:   '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
        !           339:   '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
        !           340:   '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
        !           341:   '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
        !           342:   '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
        !           343:   '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
        !           344:   '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
        !           345:   '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
        !           346:   '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
        !           347:   '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
        !           348:   '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
        !           349:   '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
        !           350:   '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
        !           351:   '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
        !           352:   '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
        !           353:   '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
        !           354:   '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
        !           355:   '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
        !           356:   '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
        !           357:   '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
        !           358:   '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
        !           359: };
        !           360: 
        !           361: #ifdef USE_UPPER_CASE_TABLE
        !           362: const UChar OnigEncISO_8859_1_ToUpperCaseTable[256] = {
        !           363:   '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
        !           364:   '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
        !           365:   '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
        !           366:   '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
        !           367:   '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
        !           368:   '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
        !           369:   '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
        !           370:   '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
        !           371:   '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
        !           372:   '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
        !           373:   '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
        !           374:   '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137',
        !           375:   '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
        !           376:   '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117',
        !           377:   '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
        !           378:   '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177',
        !           379:   '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
        !           380:   '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
        !           381:   '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
        !           382:   '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
        !           383:   '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
        !           384:   '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
        !           385:   '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
        !           386:   '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
        !           387:   '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
        !           388:   '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
        !           389:   '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
        !           390:   '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
        !           391:   '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
        !           392:   '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
        !           393:   '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\367',
        !           394:   '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\377',
        !           395: };
        !           396: #endif
        !           397: 
        !           398: extern void
        !           399: onigenc_set_default_caseconv_table(const UChar* table)
        !           400: {
        !           401:   if (table == (const UChar* )0) {
        !           402: #ifndef USE_APPLICATION_TO_LOWER_CASE_TABLE
        !           403:     table = BuiltInAsciiToLowerCaseTable;
        !           404: #else
        !           405:     return ;
        !           406: #endif
        !           407:   }
        !           408: 
        !           409:   if (table != OnigEncAsciiToLowerCaseTable) {
        !           410:     OnigEncAsciiToLowerCaseTable = table;
        !           411:   }
        !           412: }
        !           413: 
        !           414: extern UChar*
        !           415: onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
        !           416: {
        !           417:   return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
        !           418: }
        !           419: 
        !           420: const OnigPairAmbigCodes OnigAsciiPairAmbigCodes[] = {
        !           421:   { 0x41, 0x61 },
        !           422:   { 0x42, 0x62 },
        !           423:   { 0x43, 0x63 },
        !           424:   { 0x44, 0x64 },
        !           425:   { 0x45, 0x65 },
        !           426:   { 0x46, 0x66 },
        !           427:   { 0x47, 0x67 },
        !           428:   { 0x48, 0x68 },
        !           429:   { 0x49, 0x69 },
        !           430:   { 0x4a, 0x6a },
        !           431:   { 0x4b, 0x6b },
        !           432:   { 0x4c, 0x6c },
        !           433:   { 0x4d, 0x6d },
        !           434:   { 0x4e, 0x6e },
        !           435:   { 0x4f, 0x6f },
        !           436:   { 0x50, 0x70 },
        !           437:   { 0x51, 0x71 },
        !           438:   { 0x52, 0x72 },
        !           439:   { 0x53, 0x73 },
        !           440:   { 0x54, 0x74 },
        !           441:   { 0x55, 0x75 },
        !           442:   { 0x56, 0x76 },
        !           443:   { 0x57, 0x77 },
        !           444:   { 0x58, 0x78 },
        !           445:   { 0x59, 0x79 },
        !           446:   { 0x5a, 0x7a },
        !           447: 
        !           448:   { 0x61, 0x41 },
        !           449:   { 0x62, 0x42 },
        !           450:   { 0x63, 0x43 },
        !           451:   { 0x64, 0x44 },
        !           452:   { 0x65, 0x45 },
        !           453:   { 0x66, 0x46 },
        !           454:   { 0x67, 0x47 },
        !           455:   { 0x68, 0x48 },
        !           456:   { 0x69, 0x49 },
        !           457:   { 0x6a, 0x4a },
        !           458:   { 0x6b, 0x4b },
        !           459:   { 0x6c, 0x4c },
        !           460:   { 0x6d, 0x4d },
        !           461:   { 0x6e, 0x4e },
        !           462:   { 0x6f, 0x4f },
        !           463:   { 0x70, 0x50 },
        !           464:   { 0x71, 0x51 },
        !           465:   { 0x72, 0x52 },
        !           466:   { 0x73, 0x53 },
        !           467:   { 0x74, 0x54 },
        !           468:   { 0x75, 0x55 },
        !           469:   { 0x76, 0x56 },
        !           470:   { 0x77, 0x57 },
        !           471:   { 0x78, 0x58 },
        !           472:   { 0x79, 0x59 },
        !           473:   { 0x7a, 0x5a }
        !           474: };
        !           475: 
        !           476: extern int
        !           477: onigenc_ascii_get_all_pair_ambig_codes(OnigAmbigType flag,
        !           478:                                        const OnigPairAmbigCodes** ccs)
        !           479: {
        !           480:   if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) {
        !           481:     *ccs = OnigAsciiPairAmbigCodes;
        !           482:     return (sizeof(OnigAsciiPairAmbigCodes) / sizeof(OnigPairAmbigCodes));
        !           483:   }
        !           484:   else {
        !           485:     return 0;
        !           486:   }
        !           487: }
        !           488: 
        !           489: extern int
        !           490: onigenc_nothing_get_all_comp_ambig_codes(OnigAmbigType flag,
        !           491:                                          const OnigCompAmbigCodes** ccs)
        !           492: {
        !           493:   return 0;
        !           494: }
        !           495: 
        !           496: extern int
        !           497: onigenc_iso_8859_1_get_all_pair_ambig_codes(OnigAmbigType flag,
        !           498:                                             const OnigPairAmbigCodes** ccs)
        !           499: {
        !           500:   static const OnigPairAmbigCodes cc[] = {
        !           501:     { 0xc0, 0xe0 },
        !           502:     { 0xc1, 0xe1 },
        !           503:     { 0xc2, 0xe2 },
        !           504:     { 0xc3, 0xe3 },
        !           505:     { 0xc4, 0xe4 },
        !           506:     { 0xc5, 0xe5 },
        !           507:     { 0xc6, 0xe6 },
        !           508:     { 0xc7, 0xe7 },
        !           509:     { 0xc8, 0xe8 },
        !           510:     { 0xc9, 0xe9 },
        !           511:     { 0xca, 0xea },
        !           512:     { 0xcb, 0xeb },
        !           513:     { 0xcc, 0xec },
        !           514:     { 0xcd, 0xed },
        !           515:     { 0xce, 0xee },
        !           516:     { 0xcf, 0xef },
        !           517: 
        !           518:     { 0xd0, 0xf0 },
        !           519:     { 0xd1, 0xf1 },
        !           520:     { 0xd2, 0xf2 },
        !           521:     { 0xd3, 0xf3 },
        !           522:     { 0xd4, 0xf4 },
        !           523:     { 0xd5, 0xf5 },
        !           524:     { 0xd6, 0xf6 },
        !           525:     { 0xd8, 0xf8 },
        !           526:     { 0xd9, 0xf9 },
        !           527:     { 0xda, 0xfa },
        !           528:     { 0xdb, 0xfb },
        !           529:     { 0xdc, 0xfc },
        !           530:     { 0xdd, 0xfd },
        !           531:     { 0xde, 0xfe },
        !           532: 
        !           533:     { 0xe0, 0xc0 },
        !           534:     { 0xe1, 0xc1 },
        !           535:     { 0xe2, 0xc2 },
        !           536:     { 0xe3, 0xc3 },
        !           537:     { 0xe4, 0xc4 },
        !           538:     { 0xe5, 0xc5 },
        !           539:     { 0xe6, 0xc6 },
        !           540:     { 0xe7, 0xc7 },
        !           541:     { 0xe8, 0xc8 },
        !           542:     { 0xe9, 0xc9 },
        !           543:     { 0xea, 0xca },
        !           544:     { 0xeb, 0xcb },
        !           545:     { 0xec, 0xcc },
        !           546:     { 0xed, 0xcd },
        !           547:     { 0xee, 0xce },
        !           548:     { 0xef, 0xcf },
        !           549: 
        !           550:     { 0xf0, 0xd0 },
        !           551:     { 0xf1, 0xd1 },
        !           552:     { 0xf2, 0xd2 },
        !           553:     { 0xf3, 0xd3 },
        !           554:     { 0xf4, 0xd4 },
        !           555:     { 0xf5, 0xd5 },
        !           556:     { 0xf6, 0xd6 },
        !           557:     { 0xf8, 0xd8 },
        !           558:     { 0xf9, 0xd9 },
        !           559:     { 0xfa, 0xda },
        !           560:     { 0xfb, 0xdb },
        !           561:     { 0xfc, 0xdc },
        !           562:     { 0xfd, 0xdd },
        !           563:     { 0xfe, 0xde }
        !           564:   };
        !           565: 
        !           566:   if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) {
        !           567:     *ccs = OnigAsciiPairAmbigCodes;
        !           568:     return (sizeof(OnigAsciiPairAmbigCodes) / sizeof(OnigPairAmbigCodes));
        !           569:   }
        !           570:   else if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) {
        !           571:     *ccs = cc;
        !           572:     return sizeof(cc) / sizeof(OnigPairAmbigCodes);
        !           573:   }
        !           574:   else
        !           575:     return 0;
        !           576: }
        !           577: 
        !           578: extern int
        !           579: onigenc_ess_tsett_get_all_comp_ambig_codes(OnigAmbigType flag,
        !           580:                                            const OnigCompAmbigCodes** ccs)
        !           581: {
        !           582:   static const OnigCompAmbigCodes folds[] = {
        !           583:     { 2, 0xdf, {{ 2, { 0x53, 0x53 } }, { 2, { 0x73, 0x73} } } }
        !           584:   };
        !           585: 
        !           586:   if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) {
        !           587:     *ccs = folds;
        !           588:     return sizeof(folds) / sizeof(OnigCompAmbigCodes);
        !           589:   }
        !           590:   else
        !           591:     return 0;
        !           592: }
        !           593: 
        !           594: extern int
        !           595: onigenc_not_support_get_ctype_code_range(int ctype,
        !           596:                              const OnigCodePoint* sbr[], const OnigCodePoint* mbr[])
        !           597: {
        !           598:   return ONIG_NO_SUPPORT_CONFIG;
        !           599: }
        !           600: 
        !           601: extern int
        !           602: onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end)
        !           603: {
        !           604:   if (p < end) {
        !           605:     if (*p == 0x0a) return 1;
        !           606:   }
        !           607:   return 0;
        !           608: }
        !           609: 
        !           610: /* for single byte encodings */
        !           611: extern int
        !           612: onigenc_ascii_mbc_to_normalize(OnigAmbigType flag, const UChar** p, const UChar*end,
        !           613:                                UChar* lower)
        !           614: {
        !           615:   if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) {
        !           616:     *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p);
        !           617:   }
        !           618:   else {
        !           619:     *lower = **p;
        !           620:   }
        !           621: 
        !           622:   (*p)++;
        !           623:   return 1; /* return byte length of converted char to lower */
        !           624: }
        !           625: 
        !           626: extern int
        !           627: onigenc_ascii_is_mbc_ambiguous(OnigAmbigType flag,
        !           628:                               const UChar** pp, const UChar* end)
        !           629: {
        !           630:   const UChar* p = *pp;
        !           631: 
        !           632:   (*pp)++;
        !           633:   if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) {
        !           634:     return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
        !           635:   }
        !           636:   else {
        !           637:     return FALSE;
        !           638:   }
        !           639: }
        !           640: 
        !           641: extern int
        !           642: onigenc_single_byte_mbc_enc_len(const UChar* p)
        !           643: {
        !           644:   return 1;
        !           645: }
        !           646: 
        !           647: extern OnigCodePoint
        !           648: onigenc_single_byte_mbc_to_code(const UChar* p, const UChar* end)
        !           649: {
        !           650:   return (OnigCodePoint )(*p);
        !           651: }
        !           652: 
        !           653: extern int
        !           654: onigenc_single_byte_code_to_mbclen(OnigCodePoint code)
        !           655: {
        !           656:   return 1;
        !           657: }
        !           658: 
        !           659: extern int
        !           660: onigenc_single_byte_code_to_mbc_first(OnigCodePoint code)
        !           661: {
        !           662:   return (code & 0xff);
        !           663: }
        !           664: 
        !           665: extern int
        !           666: onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf)
        !           667: {
        !           668:   *buf = (UChar )(code & 0xff);
        !           669:   return 1;
        !           670: }
        !           671: 
        !           672: extern UChar*
        !           673: onigenc_single_byte_left_adjust_char_head(const UChar* start, const UChar* s)
        !           674: {
        !           675:   return (UChar* )s;
        !           676: }
        !           677: 
        !           678: extern int
        !           679: onigenc_always_true_is_allowed_reverse_match(const UChar* s, const UChar* end)
        !           680: {
        !           681:   return TRUE;
        !           682: }
        !           683: 
        !           684: extern int
        !           685: onigenc_always_false_is_allowed_reverse_match(const UChar* s, const UChar* end)
        !           686: {
        !           687:   return FALSE;
        !           688: }
        !           689: 
        !           690: extern OnigCodePoint
        !           691: onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end)
        !           692: {
        !           693:   int c, i, len;
        !           694:   OnigCodePoint n;
        !           695: 
        !           696:   len = enc_len(enc, p);
        !           697:   n = (OnigCodePoint )(*p++);
        !           698:   if (len == 1) return n;
        !           699: 
        !           700:   for (i = 1; i < len; i++) {
        !           701:     if (p >= end) break;
        !           702:     c = *p++;
        !           703:     n <<= 8;  n += c;
        !           704:   }
        !           705:   return n;
        !           706: }
        !           707: 
        !           708: extern int
        !           709: onigenc_mbn_mbc_to_normalize(OnigEncoding enc, OnigAmbigType flag,
        !           710:                              const UChar** pp, const UChar* end, UChar* lower)
        !           711: {
        !           712:   int len;
        !           713:   const UChar *p = *pp;
        !           714: 
        !           715:   if (ONIGENC_IS_MBC_ASCII(p)) {
        !           716:     if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) {
        !           717:       *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
        !           718:     }
        !           719:     else {
        !           720:       *lower = *p;
        !           721:     }
        !           722:     (*pp)++;
        !           723:     return 1;
        !           724:   }
        !           725:   else {
        !           726:     len = enc_len(enc, p);
        !           727:     if (lower != p) {
        !           728:       int i;
        !           729:       for (i = 0; i < len; i++) {
        !           730:        *lower++ = *p++;
        !           731:       }
        !           732:     }
        !           733:     (*pp) += len;
        !           734:     return len; /* return byte length of converted to lower char */
        !           735:   }
        !           736: }
        !           737: 
        !           738: extern int
        !           739: onigenc_mbn_is_mbc_ambiguous(OnigEncoding enc, OnigAmbigType flag,
        !           740:                              const UChar** pp, const UChar* end)
        !           741: {
        !           742:   const UChar* p = *pp;
        !           743: 
        !           744:   if (ONIGENC_IS_MBC_ASCII(p)) {
        !           745:     (*pp)++;
        !           746:     if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) {
        !           747:       return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
        !           748:     }
        !           749:     else {
        !           750:       return FALSE;
        !           751:     }
        !           752:   }
        !           753: 
        !           754:   (*pp) += enc_len(enc, p);
        !           755:   return FALSE;
        !           756: }
        !           757: 
        !           758: extern int
        !           759: onigenc_mb2_code_to_mbclen(OnigCodePoint code)
        !           760: {
        !           761:   if ((code & 0xff00) != 0) return 2;
        !           762:   else return 1;
        !           763: }
        !           764: 
        !           765: extern int
        !           766: onigenc_mb4_code_to_mbclen(OnigCodePoint code)
        !           767: {
        !           768:        if ((code & 0xff000000) != 0) return 4;
        !           769:   else if ((code & 0xff0000) != 0) return 3;
        !           770:   else if ((code & 0xff00) != 0) return 2;
        !           771:   else return 1;
        !           772: }
        !           773: 
        !           774: extern int
        !           775: onigenc_mb2_code_to_mbc_first(OnigCodePoint code)
        !           776: {
        !           777:   int first;
        !           778: 
        !           779:   if ((code & 0xff00) != 0) {
        !           780:     first = (code >> 8) & 0xff;
        !           781:   }
        !           782:   else {
        !           783:     return (int )code;
        !           784:   }
        !           785:   return first;
        !           786: }
        !           787: 
        !           788: extern int
        !           789: onigenc_mb4_code_to_mbc_first(OnigCodePoint code)
        !           790: {
        !           791:   int first;
        !           792: 
        !           793:   if ((code & 0xff000000) != 0) {
        !           794:     first = (code >> 24) & 0xff;
        !           795:   }
        !           796:   else if ((code & 0xff0000) != 0) {
        !           797:     first = (code >> 16) & 0xff;
        !           798:   }
        !           799:   else if ((code & 0xff00) != 0) {
        !           800:     first = (code >>  8) & 0xff;
        !           801:   }
        !           802:   else {
        !           803:     return (int )code;
        !           804:   }
        !           805:   return first;
        !           806: }
        !           807: 
        !           808: extern int
        !           809: onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
        !           810: {
        !           811:   UChar *p = buf;
        !           812: 
        !           813:   if ((code & 0xff00) != 0) {
        !           814:     *p++ = (UChar )((code >>  8) & 0xff);
        !           815:   }
        !           816:   *p++ = (UChar )(code & 0xff);
        !           817: 
        !           818: #if 1
        !           819:   if (enc_len(enc, buf) != (p - buf))
        !           820:     return ONIGENCERR_INVALID_WIDE_CHAR_VALUE;
        !           821: #endif
        !           822:   return p - buf;
        !           823: }
        !           824: 
        !           825: extern int
        !           826: onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
        !           827: {
        !           828:   UChar *p = buf;
        !           829: 
        !           830:   if ((code & 0xff000000) != 0) {
        !           831:     *p++ = (UChar )((code >> 24) & 0xff);
        !           832:   }
        !           833:   if ((code & 0xff0000) != 0 || p != buf) {
        !           834:     *p++ = (UChar )((code >> 16) & 0xff);
        !           835:   }
        !           836:   if ((code & 0xff00) != 0 || p != buf) {
        !           837:     *p++ = (UChar )((code >> 8) & 0xff);
        !           838:   }
        !           839:   *p++ = (UChar )(code & 0xff);
        !           840: 
        !           841: #if 1
        !           842:   if (enc_len(enc, buf) != (p - buf))
        !           843:     return ONIGENCERR_INVALID_WIDE_CHAR_VALUE;
        !           844: #endif
        !           845:   return p - buf;
        !           846: }
        !           847: 
        !           848: extern int
        !           849: onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
        !           850:                          unsigned int ctype)
        !           851: {
        !           852:   if (code < 128)
        !           853:     return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
        !           854:   else {
        !           855:     if ((ctype & (ONIGENC_CTYPE_WORD |
        !           856:                   ONIGENC_CTYPE_GRAPH | ONIGENC_CTYPE_PRINT)) != 0) {
        !           857:       return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE);
        !           858:     }
        !           859:   }
        !           860: 
        !           861:   return FALSE;
        !           862: }
        !           863: 
        !           864: extern int
        !           865: onigenc_mb4_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
        !           866:                          unsigned int ctype)
        !           867: {
        !           868:   if (code < 128)
        !           869:     return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
        !           870:   else {
        !           871:     if ((ctype & (ONIGENC_CTYPE_WORD |
        !           872:                   ONIGENC_CTYPE_GRAPH | ONIGENC_CTYPE_PRINT)) != 0) {
        !           873:       return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE);
        !           874:     }
        !           875:   }
        !           876: 
        !           877:   return FALSE;
        !           878: }
        !           879: 
        !           880: extern int
        !           881: onigenc_with_ascii_strncmp(OnigEncoding enc, const UChar* p, const UChar* end,
        !           882:                            const UChar* sascii /* ascii */, int n)
        !           883: {
        !           884:   int x, c;
        !           885: 
        !           886:   while (n-- > 0) {
        !           887:     if (p >= end) return (int )(*sascii);
        !           888: 
        !           889:     c = (int )ONIGENC_MBC_TO_CODE(enc, p, end);
        !           890:     x = *sascii - c;
        !           891:     if (x) return x;
        !           892: 
        !           893:     sascii++;
        !           894:     p += enc_len(enc, p);
        !           895:   }
        !           896:   return 0;
        !           897: }
        !           898: 
        !           899: #else /* ONIG_RUBY_M17N */
        !           900: 
        !           901: extern int
        !           902: onigenc_is_code_ctype(OnigEncoding enc, OnigCodePoint code, int ctype)
        !           903: {
        !           904:   switch (ctype) {
        !           905:   case ONIGENC_CTYPE_NEWLINE:
        !           906:     if (code == 0x0a) return 1;
        !           907:     break;
        !           908: 
        !           909:   case ONIGENC_CTYPE_ALPHA:
        !           910:     return m17n_isalpha(enc, code);
        !           911:     break;
        !           912:   case ONIGENC_CTYPE_BLANK:
        !           913:     return ONIGENC_IS_CODE_BLANK(enc, (int )(code));
        !           914:     break;
        !           915:   case ONIGENC_CTYPE_CNTRL:
        !           916:     return m17n_iscntrl(enc, code);
        !           917:     break;
        !           918:   case ONIGENC_CTYPE_DIGIT:
        !           919:     return m17n_isdigit(enc, code);
        !           920:     break;
        !           921:   case ONIGENC_CTYPE_GRAPH:
        !           922:     return ONIGENC_IS_CODE_GRAPH(enc, (int )(code));
        !           923:     break;
        !           924:   case ONIGENC_CTYPE_LOWER:
        !           925:     return m17n_islower(enc, code);
        !           926:     break;
        !           927:   case ONIGENC_CTYPE_PRINT:
        !           928:     return m17n_isprint(enc, code);
        !           929:     break;
        !           930:   case ONIGENC_CTYPE_PUNCT:
        !           931:     return m17n_ispunct(enc, code);
        !           932:     break;
        !           933:   case ONIGENC_CTYPE_SPACE:
        !           934:     return m17n_isspace(enc, code);
        !           935:     break;
        !           936:   case ONIGENC_CTYPE_UPPER:
        !           937:     return m17n_isupper(enc, code);
        !           938:     break;
        !           939:   case ONIGENC_CTYPE_XDIGIT:
        !           940:     return m17n_isxdigit(enc, code);
        !           941:     break;
        !           942:   case ONIGENC_CTYPE_WORD:
        !           943:     return m17n_iswchar(enc, code);
        !           944:     break;
        !           945:   case ONIGENC_CTYPE_ASCII:
        !           946:     return (code < 128 ? TRUE : FALSE);
        !           947:     break;
        !           948:   case ONIGENC_CTYPE_ALNUM:
        !           949:     return m17n_isalnum(enc, code);
        !           950:     break;
        !           951:   default:
        !           952:     break;
        !           953:   }
        !           954: 
        !           955:   return 0;
        !           956: }
        !           957: 
        !           958: extern int
        !           959: onigenc_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf)
        !           960: {
        !           961:   int c, len;
        !           962: 
        !           963:   m17n_mbcput(enc, code, buf);
        !           964:   c = m17n_firstbyte(enc, code);
        !           965:   len = enc_len(enc, c);
        !           966:   return len;
        !           967: }
        !           968: 
        !           969: extern int
        !           970: onigenc_mbc_to_lower(OnigEncoding enc, UChar* p, UChar* buf)
        !           971: {
        !           972:   unsigned int c, low;
        !           973: 
        !           974:   c   = m17n_codepoint(enc, p, p + enc_len(enc, *p));
        !           975:   low = m17n_tolower(enc, c);
        !           976:   m17n_mbcput(enc, low, buf);
        !           977: 
        !           978:   return m17n_codelen(enc, low);
        !           979: }
        !           980: 
        !           981: extern int
        !           982: onigenc_is_mbc_ambiguous(OnigEncoding enc, OnigAmbigType flag,
        !           983:                          UChar** pp, UChar* end)
        !           984: {
        !           985:   int len;
        !           986:   unsigned int c;
        !           987:   UChar* p = *pp;
        !           988: 
        !           989:   len = enc_len(enc, *p);
        !           990:   (*pp) += len;
        !           991:   c = m17n_codepoint(enc, p, p + len);
        !           992: 
        !           993:   if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) {
        !           994:     if (m17n_isupper(enc, c) || m17n_islower(enc, c))
        !           995:       return TRUE;
        !           996:   }
        !           997: 
        !           998:   return FALSE;
        !           999: }
        !          1000: 
        !          1001: extern UChar*
        !          1002: onigenc_get_left_adjust_char_head(OnigEncoding enc, UChar* start, UChar* s)
        !          1003: {
        !          1004:   UChar *p;
        !          1005:   int len;
        !          1006: 
        !          1007:   if (s <= start) return s;
        !          1008:   p = s;
        !          1009: 
        !          1010:   while (!m17n_islead(enc, *p) && p > start) p--;
        !          1011:   while (p + (len = enc_len(enc, *p)) < s) {
        !          1012:     p += len;
        !          1013:   }
        !          1014:   if (p + len == s) return s;
        !          1015:   return p;
        !          1016: }
        !          1017: 
        !          1018: extern int
        !          1019: onigenc_is_allowed_reverse_match(OnigEncoding enc,
        !          1020:                                 const UChar* s, const UChar* end)
        !          1021: {
        !          1022:   return ONIGENC_IS_SINGLEBYTE(enc);
        !          1023: }
        !          1024: 
        !          1025: extern void
        !          1026: onigenc_set_default_caseconv_table(UChar* table) { }
        !          1027: 
        !          1028: #endif /* ONIG_RUBY_M17N */

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