Imported Upstream version 1.49.0
[platform/upstream/boost.git] / boost / spirit / home / support / char_encoding / iso8859_1.hpp
1 /*=============================================================================
2     Copyright (c) 2001-2011 Hartmut Kaiser
3     Copyright (c) 2001-2011 Joel de Guzman
4
5     Distributed under the Boost Software License, Version 1.0. (See accompanying
6     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 =============================================================================*/
8 #if !defined(BOOST_SPIRIT_ISO8859_1_APRIL_26_2006_1106PM)
9 #define BOOST_SPIRIT_ISO8859_1_APRIL_26_2006_1106PM
10
11 #if defined(_MSC_VER)
12 #pragma once
13 #endif
14
15 #include <climits>
16 #include <boost/assert.hpp>
17 #include <boost/cstdint.hpp>
18
19 ///////////////////////////////////////////////////////////////////////////////
20 // constants used to classify the single characters
21 ///////////////////////////////////////////////////////////////////////////////
22 #define BOOST_CC_DIGIT    0x0001
23 #define BOOST_CC_XDIGIT   0x0002
24 #define BOOST_CC_ALPHA    0x0004
25 #define BOOST_CC_CTRL     0x0008
26 #define BOOST_CC_LOWER    0x0010
27 #define BOOST_CC_UPPER    0x0020
28 #define BOOST_CC_SPACE    0x0040
29 #define BOOST_CC_PUNCT    0x0080
30
31 namespace boost { namespace spirit { namespace char_encoding
32 {
33     // The detection of isgraph(), isprint() and isblank() is done programmatically
34     // to keep the character type table small. Additionally, these functions are
35     // rather seldom used and the programmatic detection is very simple.
36
37     ///////////////////////////////////////////////////////////////////////////
38     // ISO 8859-1 character classification table
39     //
40     // the comments intentionally contain non-ascii characters
41     // boostinspect:noascii
42     ///////////////////////////////////////////////////////////////////////////
43     const unsigned char iso8859_1_char_types[] =
44     {
45         /* NUL   0   0 */   BOOST_CC_CTRL,
46         /* SOH   1   1 */   BOOST_CC_CTRL,
47         /* STX   2   2 */   BOOST_CC_CTRL,
48         /* ETX   3   3 */   BOOST_CC_CTRL,
49         /* EOT   4   4 */   BOOST_CC_CTRL,
50         /* ENQ   5   5 */   BOOST_CC_CTRL,
51         /* ACK   6   6 */   BOOST_CC_CTRL,
52         /* BEL   7   7 */   BOOST_CC_CTRL,
53         /* BS    8   8 */   BOOST_CC_CTRL,
54         /* HT    9   9 */   BOOST_CC_CTRL|BOOST_CC_SPACE,
55         /* NL   10   a */   BOOST_CC_CTRL|BOOST_CC_SPACE,
56         /* VT   11   b */   BOOST_CC_CTRL|BOOST_CC_SPACE,
57         /* NP   12   c */   BOOST_CC_CTRL|BOOST_CC_SPACE,
58         /* CR   13   d */   BOOST_CC_CTRL|BOOST_CC_SPACE,
59         /* SO   14   e */   BOOST_CC_CTRL,
60         /* SI   15   f */   BOOST_CC_CTRL,
61         /* DLE  16  10 */   BOOST_CC_CTRL,
62         /* DC1  17  11 */   BOOST_CC_CTRL,
63         /* DC2  18  12 */   BOOST_CC_CTRL,
64         /* DC3  19  13 */   BOOST_CC_CTRL,
65         /* DC4  20  14 */   BOOST_CC_CTRL,
66         /* NAK  21  15 */   BOOST_CC_CTRL,
67         /* SYN  22  16 */   BOOST_CC_CTRL,
68         /* ETB  23  17 */   BOOST_CC_CTRL,
69         /* CAN  24  18 */   BOOST_CC_CTRL,
70         /* EM   25  19 */   BOOST_CC_CTRL,
71         /* SUB  26  1a */   BOOST_CC_CTRL,
72         /* ESC  27  1b */   BOOST_CC_CTRL,
73         /* FS   28  1c */   BOOST_CC_CTRL,
74         /* GS   29  1d */   BOOST_CC_CTRL,
75         /* RS   30  1e */   BOOST_CC_CTRL,
76         /* US   31  1f */   BOOST_CC_CTRL,
77         /* SP   32  20 */   BOOST_CC_SPACE,
78         /*  !   33  21 */   BOOST_CC_PUNCT,
79         /*  "   34  22 */   BOOST_CC_PUNCT,
80         /*  #   35  23 */   BOOST_CC_PUNCT,
81         /*  $   36  24 */   BOOST_CC_PUNCT,
82         /*  %   37  25 */   BOOST_CC_PUNCT,
83         /*  &   38  26 */   BOOST_CC_PUNCT,
84         /*  '   39  27 */   BOOST_CC_PUNCT,
85         /*  (   40  28 */   BOOST_CC_PUNCT,
86         /*  )   41  29 */   BOOST_CC_PUNCT,
87         /*  *   42  2a */   BOOST_CC_PUNCT,
88         /*  +   43  2b */   BOOST_CC_PUNCT,
89         /*  ,   44  2c */   BOOST_CC_PUNCT,
90         /*  -   45  2d */   BOOST_CC_PUNCT,
91         /*  .   46  2e */   BOOST_CC_PUNCT,
92         /*  /   47  2f */   BOOST_CC_PUNCT,
93         /*  0   48  30 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
94         /*  1   49  31 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
95         /*  2   50  32 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
96         /*  3   51  33 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
97         /*  4   52  34 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
98         /*  5   53  35 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
99         /*  6   54  36 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
100         /*  7   55  37 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
101         /*  8   56  38 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
102         /*  9   57  39 */   BOOST_CC_DIGIT|BOOST_CC_XDIGIT,
103         /*  :   58  3a */   BOOST_CC_PUNCT,
104         /*  ;   59  3b */   BOOST_CC_PUNCT,
105         /*  <   60  3c */   BOOST_CC_PUNCT,
106         /*  =   61  3d */   BOOST_CC_PUNCT,
107         /*  >   62  3e */   BOOST_CC_PUNCT,
108         /*  ?   63  3f */   BOOST_CC_PUNCT,
109         /*  @   64  40 */   BOOST_CC_PUNCT,
110         /*  A   65  41 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
111         /*  B   66  42 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
112         /*  C   67  43 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
113         /*  D   68  44 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
114         /*  E   69  45 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
115         /*  F   70  46 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_UPPER,
116         /*  G   71  47 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
117         /*  H   72  48 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
118         /*  I   73  49 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
119         /*  J   74  4a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
120         /*  K   75  4b */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
121         /*  L   76  4c */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
122         /*  M   77  4d */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
123         /*  N   78  4e */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
124         /*  O   79  4f */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
125         /*  P   80  50 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
126         /*  Q   81  51 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
127         /*  R   82  52 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
128         /*  S   83  53 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
129         /*  T   84  54 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
130         /*  U   85  55 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
131         /*  V   86  56 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
132         /*  W   87  57 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
133         /*  X   88  58 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
134         /*  Y   89  59 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
135         /*  Z   90  5a */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
136         /*  [   91  5b */   BOOST_CC_PUNCT,
137         /*  \   92  5c */   BOOST_CC_PUNCT,
138         /*  ]   93  5d */   BOOST_CC_PUNCT,
139         /*  ^   94  5e */   BOOST_CC_PUNCT,
140         /*  _   95  5f */   BOOST_CC_PUNCT,
141         /*  `   96  60 */   BOOST_CC_PUNCT,
142         /*  a   97  61 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
143         /*  b   98  62 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
144         /*  c   99  63 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
145         /*  d  100  64 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
146         /*  e  101  65 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
147         /*  f  102  66 */   BOOST_CC_ALPHA|BOOST_CC_XDIGIT|BOOST_CC_LOWER,
148         /*  g  103  67 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
149         /*  h  104  68 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
150         /*  i  105  69 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
151         /*  j  106  6a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
152         /*  k  107  6b */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
153         /*  l  108  6c */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
154         /*  m  109  6d */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
155         /*  n  110  6e */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
156         /*  o  111  6f */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
157         /*  p  112  70 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
158         /*  q  113  71 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
159         /*  r  114  72 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
160         /*  s  115  73 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
161         /*  t  116  74 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
162         /*  u  117  75 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
163         /*  v  118  76 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
164         /*  w  119  77 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
165         /*  x  120  78 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
166         /*  y  121  79 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
167         /*  z  122  7a */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
168         /*  {  123  7b */   BOOST_CC_PUNCT,
169         /*  |  124  7c */   BOOST_CC_PUNCT,
170         /*  }  125  7d */   BOOST_CC_PUNCT,
171         /*  ~  126  7e */   BOOST_CC_PUNCT,
172         /* DEL 127  7f */   BOOST_CC_CTRL,
173         /* --  128  80 */   BOOST_CC_CTRL,
174         /* --  129  81 */   BOOST_CC_CTRL,
175         /* --  130  82 */   BOOST_CC_CTRL,
176         /* --  131  83 */   BOOST_CC_CTRL,
177         /* --  132  84 */   BOOST_CC_CTRL,
178         /* --  133  85 */   BOOST_CC_CTRL,
179         /* --  134  86 */   BOOST_CC_CTRL,
180         /* --  135  87 */   BOOST_CC_CTRL,
181         /* --  136  88 */   BOOST_CC_CTRL,
182         /* --  137  89 */   BOOST_CC_CTRL,
183         /* --  138  8a */   BOOST_CC_CTRL,
184         /* --  139  8b */   BOOST_CC_CTRL,
185         /* --  140  8c */   BOOST_CC_CTRL,
186         /* --  141  8d */   BOOST_CC_CTRL,
187         /* --  142  8e */   BOOST_CC_CTRL,
188         /* --  143  8f */   BOOST_CC_CTRL,
189         /* --  144  90 */   BOOST_CC_CTRL,
190         /* --  145  91 */   BOOST_CC_CTRL,
191         /* --  146  92 */   BOOST_CC_CTRL,
192         /* --  147  93 */   BOOST_CC_CTRL,
193         /* --  148  94 */   BOOST_CC_CTRL,
194         /* --  149  95 */   BOOST_CC_CTRL,
195         /* --  150  96 */   BOOST_CC_CTRL,
196         /* --  151  97 */   BOOST_CC_CTRL,
197         /* --  152  98 */   BOOST_CC_CTRL,
198         /* --  153  99 */   BOOST_CC_CTRL,
199         /* --  154  9a */   BOOST_CC_CTRL,
200         /* --  155  9b */   BOOST_CC_CTRL,
201         /* --  156  9c */   BOOST_CC_CTRL,
202         /* --  157  9d */   BOOST_CC_CTRL,
203         /* --  158  9e */   BOOST_CC_CTRL,
204         /* --  159  9f */   BOOST_CC_CTRL,
205         /*     160  a0 */   BOOST_CC_SPACE,
206         /*  ¡  161  a1 */   BOOST_CC_PUNCT,
207         /*  ¢  162  a2 */   BOOST_CC_PUNCT,
208         /*  £  163  a3 */   BOOST_CC_PUNCT,
209         /*  ¤  164  a4 */   BOOST_CC_PUNCT,
210         /*  ¥  165  a5 */   BOOST_CC_PUNCT,
211         /*  ¦  166  a6 */   BOOST_CC_PUNCT,
212         /*  §  167  a7 */   BOOST_CC_PUNCT,
213         /*  ¨  168  a8 */   BOOST_CC_PUNCT,
214         /*  ©  169  a9 */   BOOST_CC_PUNCT,
215         /*  ª  170  aa */   BOOST_CC_PUNCT,
216         /*  «  171  ab */   BOOST_CC_PUNCT,
217         /*  ¬  172  ac */   BOOST_CC_PUNCT,
218         /*  ­  173  ad */   BOOST_CC_PUNCT,
219         /*  ®  174  ae */   BOOST_CC_PUNCT,
220         /*  ¯  175  af */   BOOST_CC_PUNCT,
221         /*  °  176  b0 */   BOOST_CC_PUNCT,
222         /*  ±  177  b1 */   BOOST_CC_PUNCT,
223         /*  ²  178  b2 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
224         /*  ³  179  b3 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
225         /*  ´  180  b4 */   BOOST_CC_PUNCT,
226         /*  µ  181  b5 */   BOOST_CC_PUNCT,
227         /*  ¶  182  b6 */   BOOST_CC_PUNCT,
228         /*  ·  183  b7 */   BOOST_CC_PUNCT,
229         /*  ¸  184  b8 */   BOOST_CC_PUNCT,
230         /*  ¹  185  b9 */   BOOST_CC_DIGIT|BOOST_CC_PUNCT,
231         /*  º  186  ba */   BOOST_CC_PUNCT,
232         /*  »  187  bb */   BOOST_CC_PUNCT,
233         /*  ¼  188  bc */   BOOST_CC_PUNCT,
234         /*  ½  189  bd */   BOOST_CC_PUNCT,
235         /*  ¾  190  be */   BOOST_CC_PUNCT,
236         /*  ¿  191  bf */   BOOST_CC_PUNCT,
237         /*  À  192  c0 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
238         /*  Á  193  c1 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
239         /*  Â  194  c2 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
240         /*  Ã  195  c3 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
241         /*  Ä  196  c4 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
242         /*  Å  197  c5 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
243         /*  Æ  198  c6 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
244         /*  Ç  199  c7 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
245         /*  È  200  c8 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
246         /*  É  201  c9 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
247         /*  Ê  202  ca */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
248         /*  Ë  203  cb */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
249         /*  Ì  204  cc */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
250         /*  Í  205  cd */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
251         /*  Î  206  ce */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
252         /*  Ï  207  cf */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
253         /*  Ð  208  d0 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
254         /*  Ñ  209  d1 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
255         /*  Ò  210  d2 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
256         /*  Ó  211  d3 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
257         /*  Ô  212  d4 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
258         /*  Õ  213  d5 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
259         /*  Ö  214  d6 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
260         /*  ×  215  d7 */   BOOST_CC_PUNCT,
261         /*  Ø  216  d8 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
262         /*  Ù  217  d9 */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
263         /*  Ú  218  da */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
264         /*  Û  219  db */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
265         /*  Ü  220  dc */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
266         /*  Ý  221  dd */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
267         /*  Þ  222  de */   BOOST_CC_ALPHA|BOOST_CC_UPPER,
268         /*  ß  223  df */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
269         /*  à  224  e0 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
270         /*  á  225  e1 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
271         /*  â  226  e2 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
272         /*  ã  227  e3 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
273         /*  ä  228  e4 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
274         /*  å  229  e5 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
275         /*  æ  230  e6 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
276         /*  ç  231  e7 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
277         /*  è  232  e8 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
278         /*  é  233  e9 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
279         /*  ê  234  ea */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
280         /*  ë  235  eb */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
281         /*  ì  236  ec */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
282         /*  í  237  ed */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
283         /*  î  238  ee */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
284         /*  ï  239  ef */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
285         /*  ð  240  f0 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
286         /*  ñ  241  f1 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
287         /*  ò  242  f2 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
288         /*  ó  243  f3 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
289         /*  ô  244  f4 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
290         /*  õ  245  f5 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
291         /*  ö  246  f6 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
292         /*  ÷  247  f7 */   BOOST_CC_PUNCT,
293         /*  ø  248  f8 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
294         /*  ù  249  f9 */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
295         /*  ú  250  fa */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
296         /*  û  251  fb */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
297         /*  ü  252  fc */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
298         /*  ý  253  fd */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
299         /*  þ  254  fe */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
300         /*  ÿ  255  ff */   BOOST_CC_ALPHA|BOOST_CC_LOWER,
301     };
302
303     ///////////////////////////////////////////////////////////////////////////
304     // ISO 8859-1 character conversion table
305     ///////////////////////////////////////////////////////////////////////////
306     const unsigned char iso8859_1_char_conversion[] =
307     {
308         /* NUL   0   0 */   '\0',
309         /* SOH   1   1 */   '\0',
310         /* STX   2   2 */   '\0',
311         /* ETX   3   3 */   '\0',
312         /* EOT   4   4 */   '\0',
313         /* ENQ   5   5 */   '\0',
314         /* ACK   6   6 */   '\0',
315         /* BEL   7   7 */   '\0',
316         /* BS    8   8 */   '\0',
317         /* HT    9   9 */   '\0',
318         /* NL   10   a */   '\0',
319         /* VT   11   b */   '\0',
320         /* NP   12   c */   '\0',
321         /* CR   13   d */   '\0',
322         /* SO   14   e */   '\0',
323         /* SI   15   f */   '\0',
324         /* DLE  16  10 */   '\0',
325         /* DC1  17  11 */   '\0',
326         /* DC2  18  12 */   '\0',
327         /* DC3  19  13 */   '\0',
328         /* DC4  20  14 */   '\0',
329         /* NAK  21  15 */   '\0',
330         /* SYN  22  16 */   '\0',
331         /* ETB  23  17 */   '\0',
332         /* CAN  24  18 */   '\0',
333         /* EM   25  19 */   '\0',
334         /* SUB  26  1a */   '\0',
335         /* ESC  27  1b */   '\0',
336         /* FS   28  1c */   '\0',
337         /* GS   29  1d */   '\0',
338         /* RS   30  1e */   '\0',
339         /* US   31  1f */   '\0',
340         /* SP   32  20 */   '\0',
341         /*  !   33  21 */   '\0',
342         /*  "   34  22 */   '\0',
343         /*  #   35  23 */   '\0',
344         /*  $   36  24 */   '\0',
345         /*  %   37  25 */   '\0',
346         /*  &   38  26 */   '\0',
347         /*  '   39  27 */   '\0',
348         /*  (   40  28 */   '\0',
349         /*  )   41  29 */   '\0',
350         /*  *   42  2a */   '\0',
351         /*  +   43  2b */   '\0',
352         /*  ,   44  2c */   '\0',
353         /*  -   45  2d */   '\0',
354         /*  .   46  2e */   '\0',
355         /*  /   47  2f */   '\0',
356         /*  0   48  30 */   '\0',
357         /*  1   49  31 */   '\0',
358         /*  2   50  32 */   '\0',
359         /*  3   51  33 */   '\0',
360         /*  4   52  34 */   '\0',
361         /*  5   53  35 */   '\0',
362         /*  6   54  36 */   '\0',
363         /*  7   55  37 */   '\0',
364         /*  8   56  38 */   '\0',
365         /*  9   57  39 */   '\0',
366         /*  :   58  3a */   '\0',
367         /*  ;   59  3b */   '\0',
368         /*  <   60  3c */   '\0',
369         /*  =   61  3d */   '\0',
370         /*  >   62  3e */   '\0',
371         /*  ?   63  3f */   '\0',
372         /*  @   64  40 */   '\0',
373         /*  A   65  41 */   'a',
374         /*  B   66  42 */   'b',
375         /*  C   67  43 */   'c',
376         /*  D   68  44 */   'd',
377         /*  E   69  45 */   'e',
378         /*  F   70  46 */   'f',
379         /*  G   71  47 */   'g',
380         /*  H   72  48 */   'h',
381         /*  I   73  49 */   'i',
382         /*  J   74  4a */   'j',
383         /*  K   75  4b */   'k',
384         /*  L   76  4c */   'l',
385         /*  M   77  4d */   'm',
386         /*  N   78  4e */   'n',
387         /*  O   79  4f */   'o',
388         /*  P   80  50 */   'p',
389         /*  Q   81  51 */   'q',
390         /*  R   82  52 */   'r',
391         /*  S   83  53 */   's',
392         /*  T   84  54 */   't',
393         /*  U   85  55 */   'u',
394         /*  V   86  56 */   'v',
395         /*  W   87  57 */   'w',
396         /*  X   88  58 */   'x',
397         /*  Y   89  59 */   'y',
398         /*  Z   90  5a */   'z',
399         /*  [   91  5b */   '\0',
400         /*  \   92  5c */   '\0',
401         /*  ]   93  5d */   '\0',
402         /*  ^   94  5e */   '\0',
403         /*  _   95  5f */   '\0',
404         /*  `   96  60 */   '\0',
405         /*  a   97  61 */   'A',
406         /*  b   98  62 */   'B',
407         /*  c   99  63 */   'C',
408         /*  d  100  64 */   'D',
409         /*  e  101  65 */   'E',
410         /*  f  102  66 */   'F',
411         /*  g  103  67 */   'G',
412         /*  h  104  68 */   'H',
413         /*  i  105  69 */   'I',
414         /*  j  106  6a */   'J',
415         /*  k  107  6b */   'K',
416         /*  l  108  6c */   'L',
417         /*  m  109  6d */   'M',
418         /*  n  110  6e */   'N',
419         /*  o  111  6f */   'O',
420         /*  p  112  70 */   'P',
421         /*  q  113  71 */   'Q',
422         /*  r  114  72 */   'R',
423         /*  s  115  73 */   'S',
424         /*  t  116  74 */   'T',
425         /*  u  117  75 */   'U',
426         /*  v  118  76 */   'V',
427         /*  w  119  77 */   'W',
428         /*  x  120  78 */   'X',
429         /*  y  121  79 */   'Y',
430         /*  z  122  7a */   'Z',
431         /*  {  123  7b */   '\0',
432         /*  |  124  7c */   '\0',
433         /*  }  125  7d */   '\0',
434         /*  ~  126  7e */   '\0',
435         /* DEL 127  7f */   '\0',
436         /* --  128  80 */   '\0',
437         /* --  129  81 */   '\0',
438         /* --  130  82 */   '\0',
439         /* --  131  83 */   '\0',
440         /* --  132  84 */   '\0',
441         /* --  133  85 */   '\0',
442         /* --  134  86 */   '\0',
443         /* --  135  87 */   '\0',
444         /* --  136  88 */   '\0',
445         /* --  137  89 */   '\0',
446         /* --  138  8a */   '\0',
447         /* --  139  8b */   '\0',
448         /* --  140  8c */   '\0',
449         /* --  141  8d */   '\0',
450         /* --  142  8e */   '\0',
451         /* --  143  8f */   '\0',
452         /* --  144  90 */   '\0',
453         /* --  145  91 */   '\0',
454         /* --  146  92 */   '\0',
455         /* --  147  93 */   '\0',
456         /* --  148  94 */   '\0',
457         /* --  149  95 */   '\0',
458         /* --  150  96 */   '\0',
459         /* --  151  97 */   '\0',
460         /* --  152  98 */   '\0',
461         /* --  153  99 */   '\0',
462         /* --  154  9a */   '\0',
463         /* --  155  9b */   '\0',
464         /* --  156  9c */   '\0',
465         /* --  157  9d */   '\0',
466         /* --  158  9e */   '\0',
467         /* --  159  9f */   '\0',
468         /*     160  a0 */   '\0',
469         /*  ¡  161  a1 */   '\0',
470         /*  ¢  162  a2 */   '\0',
471         /*  £  163  a3 */   '\0',
472         /*  ¤  164  a4 */   '\0',
473         /*  ¥  165  a5 */   '\0',
474         /*  ¦  166  a6 */   '\0',
475         /*  §  167  a7 */   '\0',
476         /*  ¨  168  a8 */   '\0',
477         /*  ©  169  a9 */   '\0',
478         /*  ª  170  aa */   '\0',
479         /*  «  171  ab */   '\0',
480         /*  ¬  172  ac */   '\0',
481         /*  ­  173  ad */   '\0',
482         /*  ®  174  ae */   '\0',
483         /*  ¯  175  af */   '\0',
484         /*  °  176  b0 */   '\0',
485         /*  ±  177  b1 */   '\0',
486         /*  ²  178  b2 */   '\0',
487         /*  ³  179  b3 */   '\0',
488         /*  ´  180  b4 */   '\0',
489         /*  µ  181  b5 */   '\0',
490         /*  ¶  182  b6 */   '\0',
491         /*  ·  183  b7 */   '\0',
492         /*  ¸  184  b8 */   '\0',
493         /*  ¹  185  b9 */   '\0',
494         /*  º  186  ba */   '\0',
495         /*  »  187  bb */   '\0',
496         /*  ¼  188  bc */   '\0',
497         /*  ½  189  bd */   '\0',
498         /*  ¾  190  be */   '\0',
499         /*  ¿  191  bf */   '\0',
500         /*  à  192  c0 */   0xe0,
501         /*  á  193  c1 */   0xe1,
502         /*  â  194  c2 */   0xe2,
503         /*  ã  195  c3 */   0xe3,
504         /*  ä  196  c4 */   0xe4,
505         /*  å  197  c5 */   0xe5,
506         /*  æ  198  c6 */   0xe6,
507         /*  ç  199  c7 */   0xe7,
508         /*  è  200  c8 */   0xe8,
509         /*  é  201  c9 */   0xe9,
510         /*  ê  202  ca */   0xea,
511         /*  ë  203  cb */   0xeb,
512         /*  ì  204  cc */   0xec,
513         /*  í  205  cd */   0xed,
514         /*  î  206  ce */   0xee,
515         /*  ï  207  cf */   0xef,
516         /*  ð  208  d0 */   0xf0,
517         /*  ñ  209  d1 */   0xf1,
518         /*  ò  210  d2 */   0xf2,
519         /*  ó  211  d3 */   0xf3,
520         /*  ô  212  d4 */   0xf4,
521         /*  õ  213  d5 */   0xf5,
522         /*  ö  214  d6 */   0xf6,
523         /*  ×  215  d7 */   '\0',
524         /*  ø  216  d8 */   0xf8,
525         /*  ù  217  d9 */   0xf9,
526         /*  ú  218  da */   0xfa,
527         /*  û  219  db */   0xfb,
528         /*  ü  220  dc */   0xfc,
529         /*  ý  221  dd */   0xfd,
530         /*  þ  222  de */   0xfe,
531         /*  ß  223  df */   '\0',
532         /*  À  224  e0 */   0xc0,
533         /*  Á  225  e1 */   0xc1,
534         /*  Â  226  e2 */   0xc2,
535         /*  Ã  227  e3 */   0xc3,
536         /*  Ä  228  e4 */   0xc4,
537         /*  Å  229  e5 */   0xc5,
538         /*  Æ  230  e6 */   0xc6,
539         /*  Ç  231  e7 */   0xc7,
540         /*  È  232  e8 */   0xc8,
541         /*  É  233  e9 */   0xc9,
542         /*  Ê  234  ea */   0xca,
543         /*  Ë  235  eb */   0xcb,
544         /*  Ì  236  ec */   0xcc,
545         /*  Í  237  ed */   0xcd,
546         /*  Î  238  ee */   0xce,
547         /*  Ï  239  ef */   0xcf,
548         /*  Ð  240  f0 */   0xd0,
549         /*  Ñ  241  f1 */   0xd1,
550         /*  Ò  242  f2 */   0xd2,
551         /*  Ó  243  f3 */   0xd3,
552         /*  Ô  244  f4 */   0xd4,
553         /*  Õ  245  f5 */   0xd5,
554         /*  Ö  246  f6 */   0xd6,
555         /*  ÷  247  f7 */   '\0',
556         /*  Ø  248  f8 */   0xd8,
557         /*  Ù  249  f9 */   0xd9,
558         /*  Ú  250  fa */   0xda,
559         /*  Û  251  fb */   0xdb,
560         /*  Ü  252  fc */   0xdc,
561         /*  Ý  253  fd */   0xdd,
562         /*  Þ  254  fe */   0xde,
563         /*  ÿ  255  ff */   '\0',
564     };
565
566     ///////////////////////////////////////////////////////////////////////////
567     //  Test characters for specified conditions (using iso8859-1)
568     ///////////////////////////////////////////////////////////////////////////
569     struct iso8859_1
570     {
571         typedef unsigned char char_type;
572
573         static bool
574         isascii_(int ch)
575         {
576             return 0 == (ch & ~0x7f);
577         }
578
579         static bool
580         ischar(int ch)
581         {
582             // iso8859.1 uses all 8 bits
583             // we have to watch out for sign extensions
584             return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) ? true : false;
585         }
586
587         static int
588         isalnum(int ch)
589         {
590             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
591             return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA)
592                 || (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
593         }
594
595         static int
596         isalpha(int ch)
597         {
598             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
599             return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA);
600         }
601
602         static int
603         isdigit(int ch)
604         {
605             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
606             return (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
607         }
608
609         static int
610         isxdigit(int ch)
611         {
612             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
613             return (iso8859_1_char_types[ch] & BOOST_CC_XDIGIT);
614         }
615
616         static int
617         iscntrl(int ch)
618         {
619             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
620             return (iso8859_1_char_types[ch] & BOOST_CC_CTRL);
621         }
622
623         static int
624         isgraph(int ch)
625         {
626             return ('\x21' <= ch && ch <= '\x7e') || ('\xa1' <= ch && ch <= '\xff');
627         }
628
629         static int
630         islower(int ch)
631         {
632             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
633             return (iso8859_1_char_types[ch] & BOOST_CC_LOWER);
634         }
635
636         static int
637         isprint(int ch)
638         {
639             return ('\x20' <= ch && ch <= '\x7e') || ('\xa0' <= ch && ch <= '\xff');
640         }
641
642         static int
643         ispunct(int ch)
644         {
645             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
646             return (iso8859_1_char_types[ch] & BOOST_CC_PUNCT);
647         }
648
649         static int
650         isspace(int ch)
651         {
652             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
653             return (iso8859_1_char_types[ch] & BOOST_CC_SPACE);
654         }
655
656         static int
657         isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
658         {
659             return ('\x09' == ch || '\x20' == ch || '\xa0' == ch);
660         }
661
662         static int
663         isupper(int ch)
664         {
665             BOOST_ASSERT(0 == (ch & ~UCHAR_MAX));
666             return (iso8859_1_char_types[ch] & BOOST_CC_UPPER);
667         }
668
669     ///////////////////////////////////////////////////////////////////////////
670     //  Simple character conversions
671     ///////////////////////////////////////////////////////////////////////////
672
673         static int
674         tolower(int ch)
675         {
676             return isupper(ch) && '\0' != iso8859_1_char_conversion[ch] ?
677                 iso8859_1_char_conversion[ch] : ch;
678         }
679
680         static int
681         toupper(int ch)
682         {
683             return islower(ch) && '\0' != iso8859_1_char_conversion[ch] ?
684                 iso8859_1_char_conversion[ch] : ch;
685         }
686
687         static ::boost::uint32_t
688         toucs4(int ch)
689         {
690             // The first 256 characters in Unicode and the UCS are
691             // identical to those in ISO/IEC-8859-1.
692             return ch;
693         }
694     };
695
696 }}}
697
698 ///////////////////////////////////////////////////////////////////////////////
699 // undefine macros
700 ///////////////////////////////////////////////////////////////////////////////
701 #undef BOOST_CC_DIGIT
702 #undef BOOST_CC_XDIGIT
703 #undef BOOST_CC_ALPHA
704 #undef BOOST_CC_CTRL
705 #undef BOOST_CC_LOWER
706 #undef BOOST_CC_UPPER
707 #undef BOOST_CC_PUNCT
708 #undef BOOST_CC_SPACE
709
710 #endif
711