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