Blame gl/c-ctype.h

Packit Service 4684c1
/* Character handling in C locale.
Packit Service 4684c1
Packit Service 4684c1
   These functions work like the corresponding functions in <ctype.h>,
Packit Service 4684c1
   except that they have the C (POSIX) locale hardwired, whereas the
Packit Service 4684c1
   <ctype.h> functions' behaviour depends on the current locale set via
Packit Service 4684c1
   setlocale.
Packit Service 4684c1
Packit Service 4684c1
   Copyright (C) 2000-2003, 2006, 2008-2020 Free Software Foundation, Inc.
Packit Service 4684c1
Packit Service 4684c1
This program is free software; you can redistribute it and/or modify
Packit Service 4684c1
it under the terms of the GNU Lesser General Public License as published by
Packit Service 4684c1
the Free Software Foundation; either version 2.1 of the License, or
Packit Service 4684c1
(at your option) any later version.
Packit Service 4684c1
Packit Service 4684c1
This program is distributed in the hope that it will be useful,
Packit Service 4684c1
but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 4684c1
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 4684c1
GNU Lesser General Public License for more details.
Packit Service 4684c1
Packit Service 4684c1
You should have received a copy of the GNU Lesser General Public License
Packit Service 4684c1
along with this program; if not, see <https://www.gnu.org/licenses/>.  */
Packit Service 4684c1
Packit Service 4684c1
#ifndef C_CTYPE_H
Packit Service 4684c1
#define C_CTYPE_H
Packit Service 4684c1
Packit Service 4684c1
#include <stdbool.h>
Packit Service 4684c1
Packit Service 4684c1
#ifndef _GL_INLINE_HEADER_BEGIN
Packit Service 4684c1
 #error "Please include config.h first."
Packit Service 4684c1
#endif
Packit Service 4684c1
_GL_INLINE_HEADER_BEGIN
Packit Service 4684c1
#ifndef C_CTYPE_INLINE
Packit Service 4684c1
# define C_CTYPE_INLINE _GL_INLINE
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
#ifdef __cplusplus
Packit Service 4684c1
extern "C" {
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
/* The functions defined in this file assume the "C" locale and a character
Packit Service 4684c1
   set without diacritics (ASCII-US or EBCDIC-US or something like that).
Packit Service 4684c1
   Even if the "C" locale on a particular system is an extension of the ASCII
Packit Service 4684c1
   character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
Packit Service 4684c1
   is ISO-8859-1), the functions in this file recognize only the ASCII
Packit Service 4684c1
   characters.  */
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
Packit Service 4684c1
    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
Packit Service 4684c1
    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
Packit Service 4684c1
    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
Packit Service 4684c1
    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
Packit Service 4684c1
    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
Packit Service 4684c1
    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
Packit Service 4684c1
    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
Packit Service 4684c1
    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
Packit Service 4684c1
    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
Packit Service 4684c1
    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
Packit Service 4684c1
    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
Packit Service 4684c1
    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
Packit Service 4684c1
    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
Packit Service 4684c1
    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
Packit Service 4684c1
    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
Packit Service 4684c1
    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
Packit Service 4684c1
    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
Packit Service 4684c1
    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
Packit Service 4684c1
    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
Packit Service 4684c1
    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
Packit Service 4684c1
    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
Packit Service 4684c1
    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
Packit Service 4684c1
/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
Packit Service 4684c1
   Testing the value of '\n' and '\r' is not relevant.  */
Packit Service 4684c1
# define C_CTYPE_ASCII 1
Packit Service 4684c1
#elif ! (' ' == '\x40' && '0' == '\xf0'                     \
Packit Service 4684c1
         && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \
Packit Service 4684c1
         && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2')
Packit Service 4684c1
# error "Only ASCII and EBCDIC are supported"
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
#if 'A' < 0
Packit Service 4684c1
# error "EBCDIC and char is signed -- not supported"
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
/* Cases for control characters.  */
Packit Service 4684c1
Packit Service 4684c1
#define _C_CTYPE_CNTRL \
Packit Service 4684c1
   case '\a': case '\b': case '\f': case '\n': \
Packit Service 4684c1
   case '\r': case '\t': case '\v': \
Packit Service 4684c1
   _C_CTYPE_OTHER_CNTRL
Packit Service 4684c1
Packit Service 4684c1
/* ASCII control characters other than those with \-letter escapes.  */
Packit Service 4684c1
Packit Service 4684c1
#if C_CTYPE_ASCII
Packit Service 4684c1
# define _C_CTYPE_OTHER_CNTRL \
Packit Service 4684c1
    case '\x00': case '\x01': case '\x02': case '\x03': \
Packit Service 4684c1
    case '\x04': case '\x05': case '\x06': case '\x0e': \
Packit Service 4684c1
    case '\x0f': case '\x10': case '\x11': case '\x12': \
Packit Service 4684c1
    case '\x13': case '\x14': case '\x15': case '\x16': \
Packit Service 4684c1
    case '\x17': case '\x18': case '\x19': case '\x1a': \
Packit Service 4684c1
    case '\x1b': case '\x1c': case '\x1d': case '\x1e': \
Packit Service 4684c1
    case '\x1f': case '\x7f'
Packit Service 4684c1
#else
Packit Service 4684c1
   /* Use EBCDIC code page 1047's assignments for ASCII control chars;
Packit Service 4684c1
      assume all EBCDIC code pages agree about these assignments.  */
Packit Service 4684c1
# define _C_CTYPE_OTHER_CNTRL \
Packit Service 4684c1
    case '\x00': case '\x01': case '\x02': case '\x03': \
Packit Service 4684c1
    case '\x07': case '\x0e': case '\x0f': case '\x10': \
Packit Service 4684c1
    case '\x11': case '\x12': case '\x13': case '\x18': \
Packit Service 4684c1
    case '\x19': case '\x1c': case '\x1d': case '\x1e': \
Packit Service 4684c1
    case '\x1f': case '\x26': case '\x27': case '\x2d': \
Packit Service 4684c1
    case '\x2e': case '\x32': case '\x37': case '\x3c': \
Packit Service 4684c1
    case '\x3d': case '\x3f'
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
/* Cases for lowercase hex letters, and lowercase letters, all offset by N.  */
Packit Service 4684c1
Packit Service 4684c1
#define _C_CTYPE_LOWER_A_THRU_F_N(N) \
Packit Service 4684c1
   case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
Packit Service 4684c1
   case 'e' + (N): case 'f' + (N)
Packit Service 4684c1
#define _C_CTYPE_LOWER_N(N) \
Packit Service 4684c1
   _C_CTYPE_LOWER_A_THRU_F_N(N): \
Packit Service 4684c1
   case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
Packit Service 4684c1
   case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
Packit Service 4684c1
   case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
Packit Service 4684c1
   case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
Packit Service 4684c1
   case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
Packit Service 4684c1
Packit Service 4684c1
/* Cases for hex letters, digits, lower, punct, and upper.  */
Packit Service 4684c1
Packit Service 4684c1
#define _C_CTYPE_A_THRU_F \
Packit Service 4684c1
   _C_CTYPE_LOWER_A_THRU_F_N (0): \
Packit Service 4684c1
   _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a')
Packit Service 4684c1
#define _C_CTYPE_DIGIT                     \
Packit Service 4684c1
   case '0': case '1': case '2': case '3': \
Packit Service 4684c1
   case '4': case '5': case '6': case '7': \
Packit Service 4684c1
   case '8': case '9'
Packit Service 4684c1
#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0)
Packit Service 4684c1
#define _C_CTYPE_PUNCT \
Packit Service 4684c1
   case '!': case '"': case '#': case '$':  \
Packit Service 4684c1
   case '%': case '&': case '\'': case '(': \
Packit Service 4684c1
   case ')': case '*': case '+': case ',':  \
Packit Service 4684c1
   case '-': case '.': case '/': case ':':  \
Packit Service 4684c1
   case ';': case '<': case '=': case '>':  \
Packit Service 4684c1
   case '?': case '@': case '[': case '\\': \
Packit Service 4684c1
   case ']': case '^': case '_': case '`':  \
Packit Service 4684c1
   case '{': case '|': case '}': case '~'
Packit Service 4684c1
#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
Packit Service 4684c1
Packit Service 4684c1
Packit Service 4684c1
/* Function definitions.  */
Packit Service 4684c1
Packit Service 4684c1
/* Unlike the functions in <ctype.h>, which require an argument in the range
Packit Service 4684c1
   of the 'unsigned char' type, the functions here operate on values that are
Packit Service 4684c1
   in the 'unsigned char' range or in the 'char' range.  In other words,
Packit Service 4684c1
   when you have a 'char' value, you need to cast it before using it as
Packit Service 4684c1
   argument to a <ctype.h> function:
Packit Service 4684c1
Packit Service 4684c1
         const char *s = ...;
Packit Service 4684c1
         if (isalpha ((unsigned char) *s)) ...
Packit Service 4684c1
Packit Service 4684c1
   but you don't need to cast it for the functions defined in this file:
Packit Service 4684c1
Packit Service 4684c1
         const char *s = ...;
Packit Service 4684c1
         if (c_isalpha (*s)) ...
Packit Service 4684c1
 */
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isalnum (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_DIGIT:
Packit Service 4684c1
    _C_CTYPE_LOWER:
Packit Service 4684c1
    _C_CTYPE_UPPER:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isalpha (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_LOWER:
Packit Service 4684c1
    _C_CTYPE_UPPER:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
/* The function isascii is not locale dependent.
Packit Service 4684c1
   Its use in EBCDIC is questionable. */
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isascii (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    case ' ':
Packit Service 4684c1
    _C_CTYPE_CNTRL:
Packit Service 4684c1
    _C_CTYPE_DIGIT:
Packit Service 4684c1
    _C_CTYPE_LOWER:
Packit Service 4684c1
    _C_CTYPE_PUNCT:
Packit Service 4684c1
    _C_CTYPE_UPPER:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isblank (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  return c == ' ' || c == '\t';
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_iscntrl (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_CNTRL:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isdigit (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_DIGIT:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isgraph (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_DIGIT:
Packit Service 4684c1
    _C_CTYPE_LOWER:
Packit Service 4684c1
    _C_CTYPE_PUNCT:
Packit Service 4684c1
    _C_CTYPE_UPPER:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_islower (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_LOWER:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isprint (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    case ' ':
Packit Service 4684c1
    _C_CTYPE_DIGIT:
Packit Service 4684c1
    _C_CTYPE_LOWER:
Packit Service 4684c1
    _C_CTYPE_PUNCT:
Packit Service 4684c1
    _C_CTYPE_UPPER:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_ispunct (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_PUNCT:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isspace (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    case ' ': case '\t': case '\n': case '\v': case '\f': case '\r':
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isupper (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_UPPER:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE bool
Packit Service 4684c1
c_isxdigit (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_DIGIT:
Packit Service 4684c1
    _C_CTYPE_A_THRU_F:
Packit Service 4684c1
      return true;
Packit Service 4684c1
    default:
Packit Service 4684c1
      return false;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE int
Packit Service 4684c1
c_tolower (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_UPPER:
Packit Service 4684c1
      return c - 'A' + 'a';
Packit Service 4684c1
    default:
Packit Service 4684c1
      return c;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
C_CTYPE_INLINE int
Packit Service 4684c1
c_toupper (int c)
Packit Service 4684c1
{
Packit Service 4684c1
  switch (c)
Packit Service 4684c1
    {
Packit Service 4684c1
    _C_CTYPE_LOWER:
Packit Service 4684c1
      return c - 'a' + 'A';
Packit Service 4684c1
    default:
Packit Service 4684c1
      return c;
Packit Service 4684c1
    }
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
#ifdef __cplusplus
Packit Service 4684c1
}
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
_GL_INLINE_HEADER_END
Packit Service 4684c1
Packit Service 4684c1
#endif /* C_CTYPE_H */