10b57cec5SDimitry Andric //===--- CharInfo.cpp - Static Data for Classifying ASCII Characters ------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "clang/Basic/CharInfo.h"
100b57cec5SDimitry Andric 
110b57cec5SDimitry Andric using namespace clang::charinfo;
120b57cec5SDimitry Andric 
130b57cec5SDimitry Andric // Statically initialize CharInfo table based on ASCII character set
140b57cec5SDimitry Andric // Reference: FreeBSD 7.2 /usr/share/misc/ascii
150b57cec5SDimitry Andric const uint16_t clang::charinfo::InfoTable[256] = {
160b57cec5SDimitry Andric   // 0 NUL         1 SOH         2 STX         3 ETX
170b57cec5SDimitry Andric   // 4 EOT         5 ENQ         6 ACK         7 BEL
180b57cec5SDimitry Andric   0           , 0           , 0           , 0           ,
190b57cec5SDimitry Andric   0           , 0           , 0           , 0           ,
200b57cec5SDimitry Andric   // 8 BS          9 HT         10 NL         11 VT
210b57cec5SDimitry Andric   //12 NP         13 CR         14 SO         15 SI
220b57cec5SDimitry Andric   0           , CHAR_HORZ_WS, CHAR_VERT_WS, CHAR_HORZ_WS,
230b57cec5SDimitry Andric   CHAR_HORZ_WS, CHAR_VERT_WS, 0           , 0           ,
240b57cec5SDimitry Andric   //16 DLE        17 DC1        18 DC2        19 DC3
250b57cec5SDimitry Andric   //20 DC4        21 NAK        22 SYN        23 ETB
260b57cec5SDimitry Andric   0           , 0           , 0           , 0           ,
270b57cec5SDimitry Andric   0           , 0           , 0           , 0           ,
280b57cec5SDimitry Andric   //24 CAN        25 EM         26 SUB        27 ESC
290b57cec5SDimitry Andric   //28 FS         29 GS         30 RS         31 US
300b57cec5SDimitry Andric   0           , 0           , 0           , 0           ,
310b57cec5SDimitry Andric   0           , 0           , 0           , 0           ,
320b57cec5SDimitry Andric   //32 SP         33  !         34  "         35  #
330b57cec5SDimitry Andric   //36  $         37  %         38  &         39  '
340b57cec5SDimitry Andric   CHAR_SPACE  , CHAR_RAWDEL , CHAR_RAWDEL , CHAR_RAWDEL ,
350b57cec5SDimitry Andric   CHAR_PUNCT  , CHAR_RAWDEL , CHAR_RAWDEL , CHAR_RAWDEL ,
360b57cec5SDimitry Andric   //40  (         41  )         42  *         43  +
370b57cec5SDimitry Andric   //44  ,         45  -         46  .         47  /
380b57cec5SDimitry Andric   CHAR_PUNCT  , CHAR_PUNCT  , CHAR_RAWDEL , CHAR_RAWDEL ,
390b57cec5SDimitry Andric   CHAR_RAWDEL , CHAR_RAWDEL , CHAR_PERIOD , CHAR_RAWDEL ,
400b57cec5SDimitry Andric   //48  0         49  1         50  2         51  3
410b57cec5SDimitry Andric   //52  4         53  5         54  6         55  7
420b57cec5SDimitry Andric   CHAR_DIGIT  , CHAR_DIGIT  , CHAR_DIGIT  , CHAR_DIGIT  ,
430b57cec5SDimitry Andric   CHAR_DIGIT  , CHAR_DIGIT  , CHAR_DIGIT  , CHAR_DIGIT  ,
440b57cec5SDimitry Andric   //56  8         57  9         58  :         59  ;
450b57cec5SDimitry Andric   //60  <         61  =         62  >         63  ?
460b57cec5SDimitry Andric   CHAR_DIGIT  , CHAR_DIGIT  , CHAR_RAWDEL , CHAR_RAWDEL ,
470b57cec5SDimitry Andric   CHAR_RAWDEL , CHAR_RAWDEL , CHAR_RAWDEL , CHAR_RAWDEL ,
480b57cec5SDimitry Andric   //64  @         65  A         66  B         67  C
490b57cec5SDimitry Andric   //68  D         69  E         70  F         71  G
500b57cec5SDimitry Andric   CHAR_PUNCT  , CHAR_XUPPER , CHAR_XUPPER , CHAR_XUPPER ,
510b57cec5SDimitry Andric   CHAR_XUPPER , CHAR_XUPPER , CHAR_XUPPER , CHAR_UPPER  ,
520b57cec5SDimitry Andric   //72  H         73  I         74  J         75  K
530b57cec5SDimitry Andric   //76  L         77  M         78  N         79  O
540b57cec5SDimitry Andric   CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  ,
550b57cec5SDimitry Andric   CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  ,
560b57cec5SDimitry Andric   //80  P         81  Q         82  R         83  S
570b57cec5SDimitry Andric   //84  T         85  U         86  V         87  W
580b57cec5SDimitry Andric   CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  ,
590b57cec5SDimitry Andric   CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  ,
600b57cec5SDimitry Andric   //88  X         89  Y         90  Z         91  [
610b57cec5SDimitry Andric   //92  \         93  ]         94  ^         95  _
620b57cec5SDimitry Andric   CHAR_UPPER  , CHAR_UPPER  , CHAR_UPPER  , CHAR_RAWDEL ,
630b57cec5SDimitry Andric   CHAR_PUNCT  , CHAR_RAWDEL , CHAR_RAWDEL , CHAR_UNDER  ,
640b57cec5SDimitry Andric   //96  `         97  a         98  b         99  c
650b57cec5SDimitry Andric   //100  d       101  e        102  f        103  g
660b57cec5SDimitry Andric   CHAR_PUNCT  , CHAR_XLOWER , CHAR_XLOWER , CHAR_XLOWER ,
670b57cec5SDimitry Andric   CHAR_XLOWER , CHAR_XLOWER , CHAR_XLOWER , CHAR_LOWER  ,
680b57cec5SDimitry Andric   //104  h       105  i        106  j        107  k
690b57cec5SDimitry Andric   //108  l       109  m        110  n        111  o
700b57cec5SDimitry Andric   CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  ,
710b57cec5SDimitry Andric   CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  ,
720b57cec5SDimitry Andric   //112  p       113  q        114  r        115  s
730b57cec5SDimitry Andric   //116  t       117  u        118  v        119  w
740b57cec5SDimitry Andric   CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  ,
750b57cec5SDimitry Andric   CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  ,
760b57cec5SDimitry Andric   //120  x       121  y        122  z        123  {
770b57cec5SDimitry Andric   //124  |       125  }        126  ~        127 DEL
780b57cec5SDimitry Andric   CHAR_LOWER  , CHAR_LOWER  , CHAR_LOWER  , CHAR_RAWDEL ,
790b57cec5SDimitry Andric   CHAR_RAWDEL , CHAR_RAWDEL , CHAR_RAWDEL , 0
800b57cec5SDimitry Andric };
81