Annotation of embedaddon/php/ext/mbstring/oniguruma/regenc.c, revision 1.1.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>