Home | History | Annotate | Download | only in Ctype
      1 /** @file
      2   Character classification and case conversion tables, and functions,
      3   for the C Standard Library as required to implement ctype.h.
      4 
      5   These are the default, C locale, tables.
      6 
      7   Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
      8   This program and the accompanying materials are licensed and made available under
      9   the terms and conditions of the BSD License that accompanies this distribution.
     10   The full text of the license may be found at
     11   http://opensource.org/licenses/bsd-license.
     12 
     13   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     14   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     15 **/
     16 #include  <LibConfig.h>
     17 #include  <ctype.h>
     18 
     19 /// ASCII-7 Character Classification Table
     20 const UINT16  _C_CharClassTable[128] = {
     21   /* 00 NUL */    ( _CC ),
     22   /* 01 SOH */    ( _CC ),
     23   /* 02 STX */    ( _CC ),
     24   /* 03 ETX */    ( _CC ),
     25   /* 04 EOT */    ( _CC ),
     26   /* 05 ENQ */    ( _CC ),
     27   /* 06 ACK */    ( _CC ),
     28   /* 07 BEL */    ( _CC ),
     29   /* 08 BS  */    ( _CC ),
     30   /* 09 TAB */    ( _CC | _CW | _CB  ),
     31   /* 0A LF  */    ( _CC | _CW  ),
     32   /* 0B VT  */    ( _CC | _CW  ),
     33   /* 0C FF  */    ( _CC | _CW  ),
     34   /* 0D CR  */    ( _CC | _CW  ),
     35   /* 0E SO  */    ( _CC ),
     36   /* 0F SI  */    ( _CC ),
     37   /* 10 DLE */    ( _CC ),
     38   /* 11 DC1 */    ( _CC ),
     39   /* 12 DC2 */    ( _CC ),
     40   /* 13 DC3 */    ( _CC ),
     41   /* 14 DC4 */    ( _CC ),
     42   /* 15 NAK */    ( _CC ),
     43   /* 16 SYN */    ( _CC ),
     44   /* 17 ETB */    ( _CC ),
     45   /* 18 CAN */    ( _CC ),
     46   /* 19 EM  */    ( _CC ),
     47   /* 1A SUB */    ( _CC ),
     48   /* 1B ESC */    ( _CC ),
     49   /* 1C FS  */    ( _CC ),
     50   /* 1D GS  */    ( _CC ),
     51   /* 1E RS  */    ( _CC ),
     52   /* 1F US  */    ( _CC ),
     53   /* 20 ' ' */    ( _CW | _CS | _CB  ),
     54   /* 21 '!' */    ( _CP | _CG  ),
     55   /* 22 '"' */    ( _CP | _CG  ),
     56   /* 23 '#' */    ( _CP | _CG  ),
     57   /* 24 '$' */    ( _CP | _CG  ),
     58   /* 25 '%' */    ( _CP | _CG  ),
     59   /* 26 '&' */    ( _CP | _CG  ),
     60   /* 27 '\''*/    ( _CP | _CG | _C0  ),
     61   /* 28 '(' */    ( _CP | _CG  ),
     62   /* 29 ')' */    ( _CP | _CG  ),
     63   /* 2A '*' */    ( _CP | _CG  ),
     64   /* 2B '+' */    ( _CP | _CG  ),
     65   /* 2C ',' */    ( _CP | _CG  ),
     66   /* 2D '-' */    ( _CP | _CG  ),
     67   /* 2E '.' */    ( _CP | _CG  ),
     68   /* 2F '/' */    ( _CP | _CG | _C0  ),
     69   /* 30 '0' */    ( _CD | _CG  ),
     70   /* 31 '1' */    ( _CD | _CG  ),
     71   /* 32 '2' */    ( _CD | _CG  ),
     72   /* 33 '3' */    ( _CD | _CG  ),
     73   /* 34 '4' */    ( _CD | _CG  ),
     74   /* 35 '5' */    ( _CD | _CG  ),
     75   /* 36 '6' */    ( _CD | _CG  ),
     76   /* 37 '7' */    ( _CD | _CG  ),
     77   /* 38 '8' */    ( _CD | _CG  ),
     78   /* 39 '9' */    ( _CD | _CG  ),
     79   /* 3A ':' */    ( _CP | _CG  ),
     80   /* 3B ';' */    ( _CP | _CG  ),
     81   /* 3C '<' */    ( _CP | _CG  ),
     82   /* 3D '=' */    ( _CP | _CG  ),
     83   /* 3E '>' */    ( _CP | _CG  ),
     84   /* 3F '?' */    ( _CP | _CG  ),
     85   /* 40 '@' */    ( _CP | _CG  ),
     86   /* 41 'A' */    ( _CU | _CX | _CG  ),
     87   /* 42 'B' */    ( _CU | _CX | _CG  ),
     88   /* 43 'C' */    ( _CU | _CX | _CG  ),
     89   /* 44 'D' */    ( _CU | _CX | _CG  ),
     90   /* 45 'E' */    ( _CU | _CX | _CG  ),
     91   /* 46 'F' */    ( _CU | _CX | _CG  ),
     92   /* 47 'G' */    ( _CU | _CG  ),
     93   /* 48 'H' */    ( _CU | _CG  ),
     94   /* 49 'I' */    ( _CU | _CG  ),
     95   /* 4A 'J' */    ( _CU | _CG  ),
     96   /* 4B 'K' */    ( _CU | _CG  ),
     97   /* 4C 'L' */    ( _CU | _CG  ),
     98   /* 4D 'M' */    ( _CU | _CG  ),
     99   /* 4E 'N' */    ( _CU | _CG  ),
    100   /* 4F 'O' */    ( _CU | _CG  ),
    101   /* 50 'P' */    ( _CU | _CG  ),
    102   /* 51 'Q' */    ( _CU | _CG  ),
    103   /* 52 'R' */    ( _CU | _CG  ),
    104   /* 53 'S' */    ( _CU | _CG  ),
    105   /* 54 'T' */    ( _CU | _CG  ),
    106   /* 55 'U' */    ( _CU | _CG  ),
    107   /* 56 'V' */    ( _CU | _CG  ),
    108   /* 57 'W' */    ( _CU | _CG  ),
    109   /* 58 'X' */    ( _CU | _CG  ),
    110   /* 59 'Y' */    ( _CU | _CG  ),
    111   /* 5A 'Z' */    ( _CU | _CG  ),
    112   /* 5B '[' */    ( _CP | _CG  ),
    113   /* 5C '\' */    ( _CP | _CG  ),
    114   /* 5D ']' */    ( _CP | _CG  ),
    115   /* 5E '^' */    ( _CP | _CG  ),
    116   /* 5F '_' */    ( _CP | _CG  ),
    117   /* 60 '`' */    ( _CP | _CG  ),
    118   /* 61 'a' */    ( _CL | _CX | _CG  ),
    119   /* 62 'b' */    ( _CL | _CX | _CG  ),
    120   /* 63 'c' */    ( _CL | _CX | _CG  ),
    121   /* 64 'd' */    ( _CL | _CX | _CG  ),
    122   /* 65 'e' */    ( _CL | _CX | _CG  ),
    123   /* 66 'f' */    ( _CL | _CX | _CG  ),
    124   /* 67 'g' */    ( _CL | _CG  ),
    125   /* 68 'h' */    ( _CL | _CG  ),
    126   /* 69 'i' */    ( _CL | _CG  ),
    127   /* 6A 'j' */    ( _CL | _CG  ),
    128   /* 6B 'k' */    ( _CL | _CG  ),
    129   /* 6C 'l' */    ( _CL | _CG  ),
    130   /* 6D 'm' */    ( _CL | _CG  ),
    131   /* 6E 'n' */    ( _CL | _CG  ),
    132   /* 6F 'o' */    ( _CL | _CG  ),
    133   /* 70 'p' */    ( _CL | _CG  ),
    134   /* 71 'q' */    ( _CL | _CG  ),
    135   /* 72 'r' */    ( _CL | _CG  ),
    136   /* 73 's' */    ( _CL | _CG  ),
    137   /* 74 't' */    ( _CL | _CG  ),
    138   /* 75 'u' */    ( _CL | _CG  ),
    139   /* 76 'v' */    ( _CL | _CG  ),
    140   /* 77 'w' */    ( _CL | _CG  ),
    141   /* 78 'x' */    ( _CL | _CG  ),
    142   /* 79 'y' */    ( _CL | _CG  ),
    143   /* 7A 'z' */    ( _CL | _CG  ),
    144   /* 7B '{' */    ( _CP | _CG  ),
    145   /* 7C '|' */    ( _CP | _CG  ),
    146   /* 7D '}' */    ( _CP | _CG  ),
    147   /* 7E '~' */    ( _CP | _CG  ),
    148   /* 7F DEL */    ( _CC )
    149 };
    150 
    151 /// ASCII-7 Upper case to Lower case character conversion table
    152 const UINT8  _C_ToLowerTable[128] = {
    153   /* 00 NUL */    0x00,           /* 01 SOH */    0x01,
    154   /* 02 STX */    0x02,           /* 03 ETX */    0x03,
    155   /* 04 EOT */    0x04,           /* 05 ENQ */    0x05,
    156   /* 06 ACK */    0x06,           /* 07 BEL */    0x07,
    157   /* 08 BS  */    0x08,           /* 09 TAB */    0x09,
    158   /* 0A LF  */    0x0A,           /* 0B VT  */    0x0B,
    159   /* 0C FF  */    0x0C,           /* 0D CR  */    0x0D,
    160   /* 0E SO  */    0x0E,           /* 0F SI  */    0x0F,
    161   /* 10 DLE */    0x10,           /* 11 DC1 */    0x11,
    162   /* 12 DC2 */    0x12,           /* 13 DC3 */    0x13,
    163   /* 14 DC4 */    0x14,           /* 15 NAK */    0x15,
    164   /* 16 SYN */    0x16,           /* 17 ETB */    0x17,
    165   /* 18 CAN */    0x18,           /* 19 EM  */    0x19,
    166   /* 1A SUB */    0x1A,           /* 1B ESC */    0x1B,
    167   /* 1C FS  */    0x1C,           /* 1D GS  */    0x1D,
    168   /* 1E RS  */    0x1E,           /* 1F US  */    0x1F,
    169   /* 20 ' ' */    0x20,           /* 21 '!' */    0x21,
    170   /* 22 '"' */    0x22,           /* 23 '#' */    0x23,
    171   /* 24 '$' */    0x24,           /* 25 '%' */    0x25,
    172   /* 26 '&' */    0x26,           /* 27 '\''*/    0x27,
    173   /* 28 '(' */    0x28,           /* 29 ')' */    0x29,
    174   /* 2A '*' */    0x2A,           /* 2B '+' */    0x2B,
    175   /* 2C ',' */    0x2C,           /* 2D '-' */    0x2D,
    176   /* 2E '.' */    0x2E,           /* 2F '/' */    0x2F,
    177   /* 30 '0' */    0x30,           /* 31 '1' */    0x31,
    178   /* 32 '2' */    0x32,           /* 33 '3' */    0x33,
    179   /* 34 '4' */    0x34,           /* 35 '5' */    0x35,
    180   /* 36 '6' */    0x36,           /* 37 '7' */    0x37,
    181   /* 38 '8' */    0x38,           /* 39 '9' */    0x39,
    182   /* 3A ':' */    0x3A,           /* 3B ';' */    0x3B,
    183   /* 3C '<' */    0x3C,           /* 3D '=' */    0x3D,
    184   /* 3E '>' */    0x3E,           /* 3F '?' */    0x3F,
    185   /* 40 '@' */    0x40,           /* 41 'A' */    0x61,
    186   /* 42 'B' */    0x62,           /* 43 'C' */    0x63,
    187   /* 44 'D' */    0x64,           /* 45 'E' */    0x65,
    188   /* 46 'F' */    0x66,           /* 47 'G' */    0x67,
    189   /* 48 'H' */    0x68,           /* 49 'I' */    0x69,
    190   /* 4A 'J' */    0x6A,           /* 4B 'K' */    0x6B,
    191   /* 4C 'L' */    0x6C,           /* 4D 'M' */    0x6D,
    192   /* 4E 'N' */    0x6E,           /* 4F 'O' */    0x6F,
    193   /* 50 'P' */    0x70,           /* 51 'Q' */    0x71,
    194   /* 52 'R' */    0x72,           /* 53 'S' */    0x73,
    195   /* 54 'T' */    0x74,           /* 55 'U' */    0x75,
    196   /* 56 'V' */    0x76,           /* 57 'W' */    0x77,
    197   /* 58 'X' */    0x78,           /* 59 'Y' */    0x79,
    198   /* 5A 'Z' */    0x7A,           /* 5B '[' */    0x5B,
    199   /* 5C '\' */    0x5C,           /* 5D ']' */    0x5D,
    200   /* 5E '^' */    0x5E,           /* 5F '_' */    0x5F,
    201   /* 60 '`' */    0x60,           /* 61 'a' */    0x61,
    202   /* 62 'b' */    0x62,           /* 63 'c' */    0x63,
    203   /* 64 'd' */    0x64,           /* 65 'e' */    0x65,
    204   /* 66 'f' */    0x66,           /* 67 'g' */    0x67,
    205   /* 68 'h' */    0x68,           /* 69 'i' */    0x69,
    206   /* 6A 'j' */    0x6A,           /* 6B 'k' */    0x6B,
    207   /* 6C 'l' */    0x6C,           /* 6D 'm' */    0x6D,
    208   /* 6E 'n' */    0x6E,           /* 6F 'o' */    0x6F,
    209   /* 70 'p' */    0x70,           /* 71 'q' */    0x71,
    210   /* 72 'r' */    0x72,           /* 73 's' */    0x73,
    211   /* 74 't' */    0x74,           /* 75 'u' */    0x75,
    212   /* 76 'v' */    0x76,           /* 77 'w' */    0x77,
    213   /* 78 'x' */    0x78,           /* 79 'y' */    0x79,
    214   /* 7A 'z' */    0x7A,           /* 7B '{' */    0x7B,
    215   /* 7C '|' */    0x7C,           /* 7D '}' */    0x7D,
    216   /* 7E '~' */    0x7E,           /* 7F DEL */    0x7F
    217 };
    218 
    219 /// ASCII-7 Lower case to Upper case character conversion table
    220 const UINT8  _C_ToUpperTable[128] = {
    221   /* 00 NUL */    0x00,           /* 01 SOH */    0x01,
    222   /* 02 STX */    0x02,           /* 03 ETX */    0x03,
    223   /* 04 EOT */    0x04,           /* 05 ENQ */    0x05,
    224   /* 06 ACK */    0x06,           /* 07 BEL */    0x07,
    225   /* 08 BS  */    0x08,           /* 09 TAB */    0x09,
    226   /* 0A LF  */    0x0A,           /* 0B VT  */    0x0B,
    227   /* 0C FF  */    0x0C,           /* 0D CR  */    0x0D,
    228   /* 0E SO  */    0x0E,           /* 0F SI  */    0x0F,
    229   /* 10 DLE */    0x10,           /* 11 DC1 */    0x11,
    230   /* 12 DC2 */    0x12,           /* 13 DC3 */    0x13,
    231   /* 14 DC4 */    0x14,           /* 15 NAK */    0x15,
    232   /* 16 SYN */    0x16,           /* 17 ETB */    0x17,
    233   /* 18 CAN */    0x18,           /* 19 EM  */    0x19,
    234   /* 1A SUB */    0x1A,           /* 1B ESC */    0x1B,
    235   /* 1C FS  */    0x1C,           /* 1D GS  */    0x1D,
    236   /* 1E RS  */    0x1E,           /* 1F US  */    0x1F,
    237   /* 20 ' ' */    0x20,           /* 21 '!' */    0x21,
    238   /* 22 '"' */    0x22,           /* 23 '#' */    0x23,
    239   /* 24 '$' */    0x24,           /* 25 '%' */    0x25,
    240   /* 26 '&' */    0x26,           /* 27 '\''*/    0x27,
    241   /* 28 '(' */    0x28,           /* 29 ')' */    0x29,
    242   /* 2A '*' */    0x2A,           /* 2B '+' */    0x2B,
    243   /* 2C ',' */    0x2C,           /* 2D '-' */    0x2D,
    244   /* 2E '.' */    0x2E,           /* 2F '/' */    0x2F,
    245   /* 30 '0' */    0x30,           /* 31 '1' */    0x31,
    246   /* 32 '2' */    0x32,           /* 33 '3' */    0x33,
    247   /* 34 '4' */    0x34,           /* 35 '5' */    0x35,
    248   /* 36 '6' */    0x36,           /* 37 '7' */    0x37,
    249   /* 38 '8' */    0x38,           /* 39 '9' */    0x39,
    250   /* 3A ':' */    0x3A,           /* 3B ';' */    0x3B,
    251   /* 3C '<' */    0x3C,           /* 3D '=' */    0x3D,
    252   /* 3E '>' */    0x3E,           /* 3F '?' */    0x3F,
    253   /* 40 '@' */    0x40,           /* 41 'A' */    0x41,
    254   /* 42 'B' */    0x42,           /* 43 'C' */    0x43,
    255   /* 44 'D' */    0x44,           /* 45 'E' */    0x45,
    256   /* 46 'F' */    0x46,           /* 47 'G' */    0x47,
    257   /* 48 'H' */    0x48,           /* 49 'I' */    0x49,
    258   /* 4A 'J' */    0x4A,           /* 4B 'K' */    0x4B,
    259   /* 4C 'L' */    0x4C,           /* 4D 'M' */    0x4D,
    260   /* 4E 'N' */    0x4E,           /* 4F 'O' */    0x4F,
    261   /* 50 'P' */    0x50,           /* 51 'Q' */    0x51,
    262   /* 52 'R' */    0x52,           /* 53 'S' */    0x53,
    263   /* 54 'T' */    0x54,           /* 55 'U' */    0x55,
    264   /* 56 'V' */    0x56,           /* 57 'W' */    0x57,
    265   /* 58 'X' */    0x58,           /* 59 'Y' */    0x59,
    266   /* 5A 'Z' */    0x5A,           /* 5B '[' */    0x5B,
    267   /* 5C '\' */    0x5C,           /* 5D ']' */    0x5D,
    268   /* 5E '^' */    0x5E,           /* 5F '_' */    0x5F,
    269   /* 60 '`' */    0x60,           /* 61 'a' */    0x41,
    270   /* 62 'b' */    0x42,           /* 63 'c' */    0x43,
    271   /* 64 'd' */    0x44,           /* 65 'e' */    0x45,
    272   /* 66 'f' */    0x46,           /* 67 'g' */    0x47,
    273   /* 68 'h' */    0x48,           /* 69 'i' */    0x49,
    274   /* 6A 'j' */    0x4A,           /* 6B 'k' */    0x4B,
    275   /* 6C 'l' */    0x4C,           /* 6D 'm' */    0x4D,
    276   /* 6E 'n' */    0x4E,           /* 6F 'o' */    0x4F,
    277   /* 70 'p' */    0x50,           /* 71 'q' */    0x51,
    278   /* 72 'r' */    0x52,           /* 73 's' */    0x53,
    279   /* 74 't' */    0x54,           /* 75 'u' */    0x55,
    280   /* 76 'v' */    0x56,           /* 77 'w' */    0x57,
    281   /* 78 'x' */    0x58,           /* 79 'y' */    0x59,
    282   /* 7A 'z' */    0x5A,           /* 7B '{' */    0x7B,
    283   /* 7C '|' */    0x7C,           /* 7D '}' */    0x7D,
    284   /* 7E '~' */    0x7E,           /* 7F DEL */    0x7F
    285 };
    286 
    287 /// Default character classification table is 7-bit ASCII
    288 const UINT16  *_cClass = _C_CharClassTable;
    289 
    290 /// Default upper to lower conversion table is 7-bit ASCII
    291 const UINT8  *_lConvT = _C_ToLowerTable;
    292 
    293 /// Default lower to upper conversion table is 7-bit ASCII
    294 const UINT8  *_uConvT = _C_ToUpperTable;
    295 
    296 /** Sets the character classification and case conversion tables for the 'C' locale.
    297 
    298     A set of locale-independent pointers are used to point to the classification and
    299     conversion tables for the currently specified locale.  This function is used to
    300     establish the tables for the 'C' locale.
    301 **/
    302 void
    303 __set_C_locale( void )
    304 {
    305   _cClass = _C_CharClassTable;
    306   _lConvT = _C_ToLowerTable;
    307   _uConvT = _C_ToUpperTable;
    308 }
    309