Annotation of embedaddon/libiconv/srclib/c-ctype.c, revision 1.1
1.1 ! misho 1: /* Character handling in C locale.
! 2:
! 3: Copyright 2000-2003, 2006 Free Software Foundation, Inc.
! 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>