Annotation of embedaddon/libiconv/srclib/c-ctype.c, revision 1.1.1.2

1.1       misho       1: /* Character handling in C locale.
                      2: 
1.1.1.2 ! misho       3:    Copyright 2000-2003, 2006, 2009-2011 Free Software Foundation, Inc.
1.1       misho       4: 
                      5: This program is free software; you can redistribute it and/or modify
                      6: it under the terms of the GNU General Public License as published by
                      7: the Free Software Foundation; either version 3 of the License, or
                      8: (at your option) any later version.
                      9: 
                     10: This program is distributed in the hope that it will be useful,
                     11: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     13: GNU General Public License for more details.
                     14: 
                     15: You should have received a copy of the GNU General Public License
                     16: along with this program; if not, write to the Free Software Foundation,
                     17: Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
                     18: 
                     19: #include <config.h>
                     20: 
                     21: /* Specification.  */
                     22: #define NO_C_CTYPE_MACROS
                     23: #include "c-ctype.h"
                     24: 
                     25: /* The function isascii is not locale dependent. Its use in EBCDIC is
                     26:    questionable. */
                     27: bool
                     28: c_isascii (int c)
                     29: {
                     30:   return (c >= 0x00 && c <= 0x7f);
                     31: }
                     32: 
                     33: bool
                     34: c_isalnum (int c)
                     35: {
                     36: #if C_CTYPE_CONSECUTIVE_DIGITS \
                     37:     && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
                     38: #if C_CTYPE_ASCII
                     39:   return ((c >= '0' && c <= '9')
                     40:           || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
                     41: #else
                     42:   return ((c >= '0' && c <= '9')
                     43:           || (c >= 'A' && c <= 'Z')
                     44:           || (c >= 'a' && c <= 'z'));
                     45: #endif
                     46: #else
                     47:   switch (c)
                     48:     {
                     49:     case '0': case '1': case '2': case '3': case '4': case '5':
                     50:     case '6': case '7': case '8': case '9':
                     51:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                     52:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
                     53:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
                     54:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
                     55:     case 'Y': case 'Z':
                     56:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                     57:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
                     58:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
                     59:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
                     60:     case 'y': case 'z':
                     61:       return 1;
                     62:     default:
                     63:       return 0;
                     64:     }
                     65: #endif
                     66: }
                     67: 
                     68: bool
                     69: c_isalpha (int c)
                     70: {
                     71: #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
                     72: #if C_CTYPE_ASCII
                     73:   return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
                     74: #else
                     75:   return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
                     76: #endif
                     77: #else
                     78:   switch (c)
                     79:     {
                     80:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                     81:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
                     82:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
                     83:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
                     84:     case 'Y': case 'Z':
                     85:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                     86:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
                     87:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
                     88:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
                     89:     case 'y': case 'z':
                     90:       return 1;
                     91:     default:
                     92:       return 0;
                     93:     }
                     94: #endif
                     95: }
                     96: 
                     97: bool
                     98: c_isblank (int c)
                     99: {
                    100:   return (c == ' ' || c == '\t');
                    101: }
                    102: 
                    103: bool
                    104: c_iscntrl (int c)
                    105: {
                    106: #if C_CTYPE_ASCII
                    107:   return ((c & ~0x1f) == 0 || c == 0x7f);
                    108: #else
                    109:   switch (c)
                    110:     {
                    111:     case ' ': case '!': case '"': case '#': case '$': case '%':
                    112:     case '&': case '\'': case '(': case ')': case '*': case '+':
                    113:     case ',': case '-': case '.': case '/':
                    114:     case '0': case '1': case '2': case '3': case '4': case '5':
                    115:     case '6': case '7': case '8': case '9':
                    116:     case ':': case ';': case '<': case '=': case '>': case '?':
                    117:     case '@':
                    118:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                    119:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
                    120:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
                    121:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
                    122:     case 'Y': case 'Z':
                    123:     case '[': case '\\': case ']': case '^': case '_': case '`':
                    124:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                    125:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
                    126:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
                    127:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
                    128:     case 'y': case 'z':
                    129:     case '{': case '|': case '}': case '~':
                    130:       return 0;
                    131:     default:
                    132:       return 1;
                    133:     }
                    134: #endif
                    135: }
                    136: 
                    137: bool
                    138: c_isdigit (int c)
                    139: {
                    140: #if C_CTYPE_CONSECUTIVE_DIGITS
                    141:   return (c >= '0' && c <= '9');
                    142: #else
                    143:   switch (c)
                    144:     {
                    145:     case '0': case '1': case '2': case '3': case '4': case '5':
                    146:     case '6': case '7': case '8': case '9':
                    147:       return 1;
                    148:     default:
                    149:       return 0;
                    150:     }
                    151: #endif
                    152: }
                    153: 
                    154: bool
                    155: c_islower (int c)
                    156: {
                    157: #if C_CTYPE_CONSECUTIVE_LOWERCASE
                    158:   return (c >= 'a' && c <= 'z');
                    159: #else
                    160:   switch (c)
                    161:     {
                    162:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                    163:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
                    164:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
                    165:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
                    166:     case 'y': case 'z':
                    167:       return 1;
                    168:     default:
                    169:       return 0;
                    170:     }
                    171: #endif
                    172: }
                    173: 
                    174: bool
                    175: c_isgraph (int c)
                    176: {
                    177: #if C_CTYPE_ASCII
                    178:   return (c >= '!' && c <= '~');
                    179: #else
                    180:   switch (c)
                    181:     {
                    182:     case '!': case '"': case '#': case '$': case '%': case '&':
                    183:     case '\'': case '(': case ')': case '*': case '+': case ',':
                    184:     case '-': case '.': case '/':
                    185:     case '0': case '1': case '2': case '3': case '4': case '5':
                    186:     case '6': case '7': case '8': case '9':
                    187:     case ':': case ';': case '<': case '=': case '>': case '?':
                    188:     case '@':
                    189:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                    190:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
                    191:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
                    192:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
                    193:     case 'Y': case 'Z':
                    194:     case '[': case '\\': case ']': case '^': case '_': case '`':
                    195:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                    196:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
                    197:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
                    198:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
                    199:     case 'y': case 'z':
                    200:     case '{': case '|': case '}': case '~':
                    201:       return 1;
                    202:     default:
                    203:       return 0;
                    204:     }
                    205: #endif
                    206: }
                    207: 
                    208: bool
                    209: c_isprint (int c)
                    210: {
                    211: #if C_CTYPE_ASCII
                    212:   return (c >= ' ' && c <= '~');
                    213: #else
                    214:   switch (c)
                    215:     {
                    216:     case ' ': case '!': case '"': case '#': case '$': case '%':
                    217:     case '&': case '\'': case '(': case ')': case '*': case '+':
                    218:     case ',': case '-': case '.': case '/':
                    219:     case '0': case '1': case '2': case '3': case '4': case '5':
                    220:     case '6': case '7': case '8': case '9':
                    221:     case ':': case ';': case '<': case '=': case '>': case '?':
                    222:     case '@':
                    223:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                    224:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
                    225:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
                    226:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
                    227:     case 'Y': case 'Z':
                    228:     case '[': case '\\': case ']': case '^': case '_': case '`':
                    229:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                    230:     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
                    231:     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
                    232:     case 's': case 't': case 'u': case 'v': case 'w': case 'x':
                    233:     case 'y': case 'z':
                    234:     case '{': case '|': case '}': case '~':
                    235:       return 1;
                    236:     default:
                    237:       return 0;
                    238:     }
                    239: #endif
                    240: }
                    241: 
                    242: bool
                    243: c_ispunct (int c)
                    244: {
                    245: #if C_CTYPE_ASCII
                    246:   return ((c >= '!' && c <= '~')
                    247:           && !((c >= '0' && c <= '9')
                    248:                || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
                    249: #else
                    250:   switch (c)
                    251:     {
                    252:     case '!': case '"': case '#': case '$': case '%': case '&':
                    253:     case '\'': case '(': case ')': case '*': case '+': case ',':
                    254:     case '-': case '.': case '/':
                    255:     case ':': case ';': case '<': case '=': case '>': case '?':
                    256:     case '@':
                    257:     case '[': case '\\': case ']': case '^': case '_': case '`':
                    258:     case '{': case '|': case '}': case '~':
                    259:       return 1;
                    260:     default:
                    261:       return 0;
                    262:     }
                    263: #endif
                    264: }
                    265: 
                    266: bool
                    267: c_isspace (int c)
                    268: {
                    269:   return (c == ' ' || c == '\t'
                    270:           || c == '\n' || c == '\v' || c == '\f' || c == '\r');
                    271: }
                    272: 
                    273: bool
                    274: c_isupper (int c)
                    275: {
                    276: #if C_CTYPE_CONSECUTIVE_UPPERCASE
                    277:   return (c >= 'A' && c <= 'Z');
                    278: #else
                    279:   switch (c)
                    280:     {
                    281:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                    282:     case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
                    283:     case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
                    284:     case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
                    285:     case 'Y': case 'Z':
                    286:       return 1;
                    287:     default:
                    288:       return 0;
                    289:     }
                    290: #endif
                    291: }
                    292: 
                    293: bool
                    294: c_isxdigit (int c)
                    295: {
                    296: #if C_CTYPE_CONSECUTIVE_DIGITS \
                    297:     && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
                    298: #if C_CTYPE_ASCII
                    299:   return ((c >= '0' && c <= '9')
                    300:           || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
                    301: #else
                    302:   return ((c >= '0' && c <= '9')
                    303:           || (c >= 'A' && c <= 'F')
                    304:           || (c >= 'a' && c <= 'f'));
                    305: #endif
                    306: #else
                    307:   switch (c)
                    308:     {
                    309:     case '0': case '1': case '2': case '3': case '4': case '5':
                    310:     case '6': case '7': case '8': case '9':
                    311:     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
                    312:     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
                    313:       return 1;
                    314:     default:
                    315:       return 0;
                    316:     }
                    317: #endif
                    318: }
                    319: 
                    320: int
                    321: c_tolower (int c)
                    322: {
                    323: #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
                    324:   return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
                    325: #else
                    326:   switch (c)
                    327:     {
                    328:     case 'A': return 'a';
                    329:     case 'B': return 'b';
                    330:     case 'C': return 'c';
                    331:     case 'D': return 'd';
                    332:     case 'E': return 'e';
                    333:     case 'F': return 'f';
                    334:     case 'G': return 'g';
                    335:     case 'H': return 'h';
                    336:     case 'I': return 'i';
                    337:     case 'J': return 'j';
                    338:     case 'K': return 'k';
                    339:     case 'L': return 'l';
                    340:     case 'M': return 'm';
                    341:     case 'N': return 'n';
                    342:     case 'O': return 'o';
                    343:     case 'P': return 'p';
                    344:     case 'Q': return 'q';
                    345:     case 'R': return 'r';
                    346:     case 'S': return 's';
                    347:     case 'T': return 't';
                    348:     case 'U': return 'u';
                    349:     case 'V': return 'v';
                    350:     case 'W': return 'w';
                    351:     case 'X': return 'x';
                    352:     case 'Y': return 'y';
                    353:     case 'Z': return 'z';
                    354:     default: return c;
                    355:     }
                    356: #endif
                    357: }
                    358: 
                    359: int
                    360: c_toupper (int c)
                    361: {
                    362: #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
                    363:   return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
                    364: #else
                    365:   switch (c)
                    366:     {
                    367:     case 'a': return 'A';
                    368:     case 'b': return 'B';
                    369:     case 'c': return 'C';
                    370:     case 'd': return 'D';
                    371:     case 'e': return 'E';
                    372:     case 'f': return 'F';
                    373:     case 'g': return 'G';
                    374:     case 'h': return 'H';
                    375:     case 'i': return 'I';
                    376:     case 'j': return 'J';
                    377:     case 'k': return 'K';
                    378:     case 'l': return 'L';
                    379:     case 'm': return 'M';
                    380:     case 'n': return 'N';
                    381:     case 'o': return 'O';
                    382:     case 'p': return 'P';
                    383:     case 'q': return 'Q';
                    384:     case 'r': return 'R';
                    385:     case 's': return 'S';
                    386:     case 't': return 'T';
                    387:     case 'u': return 'U';
                    388:     case 'v': return 'V';
                    389:     case 'w': return 'W';
                    390:     case 'x': return 'X';
                    391:     case 'y': return 'Y';
                    392:     case 'z': return 'Z';
                    393:     default: return c;
                    394:     }
                    395: #endif
                    396: }

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