1 /*=============================================================================
2 Copyright (c) 2001-2011 Hartmut Kaiser
3 Copyright (c) 2001-2011 Joel de Guzman
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
16 #include <boost/assert.hpp>
17 #include <boost/cstdint.hpp>
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
31 namespace boost { namespace spirit { namespace char_encoding
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.
37 ///////////////////////////////////////////////////////////////////////////
38 // ISO 8859-1 character classification table
40 // the comments intentionally contain non-ascii characters
41 // boostinspect:noascii
42 ///////////////////////////////////////////////////////////////////////////
43 const unsigned char iso8859_1_char_types[] =
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,
303 ///////////////////////////////////////////////////////////////////////////
304 // ISO 8859-1 character conversion table
305 ///////////////////////////////////////////////////////////////////////////
306 const unsigned char iso8859_1_char_conversion[] =
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',
334 /* SUB 26 1a */ '\0',
335 /* ESC 27 1b */ '\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',
566 ///////////////////////////////////////////////////////////////////////////
567 // Test characters for specified conditions (using iso8859-1)
568 ///////////////////////////////////////////////////////////////////////////
571 typedef unsigned char char_type;
572 typedef unsigned char classify_type;
577 return 0 == (ch & ~0x7f);
583 // iso8859.1 uses all 8 bits
584 // we have to watch out for sign extensions
585 return (0 == (ch & ~0xff) || ~0 == (ch | 0xff)) != 0;
588 // *** Note on assertions: The precondition is that the calls to
589 // these functions do not violate the required range of ch (type int)
590 // which is that strict_ischar(ch) should be true. It is the
591 // responsibility of the caller to make sure this precondition is not
595 strict_ischar(int ch)
597 return ch >= 0 && ch <= 255;
603 BOOST_ASSERT(strict_ischar(ch));
604 return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA)
605 || (iso8859_1_char_types[ch] & BOOST_CC_DIGIT);
611 BOOST_ASSERT(strict_ischar(ch));
612 return (iso8859_1_char_types[ch] & BOOST_CC_ALPHA) != 0;
618 BOOST_ASSERT(strict_ischar(ch));
619 return (iso8859_1_char_types[ch] & BOOST_CC_DIGIT) != 0;
625 BOOST_ASSERT(strict_ischar(ch));
626 return (iso8859_1_char_types[ch] & BOOST_CC_XDIGIT) != 0;
632 BOOST_ASSERT(strict_ischar(ch));
633 return (iso8859_1_char_types[ch] & BOOST_CC_CTRL) != 0;
639 return ('\x21' <= ch && ch <= '\x7e') || ('\xa1' <= ch && ch <= '\xff');
645 BOOST_ASSERT(strict_ischar(ch));
646 return (iso8859_1_char_types[ch] & BOOST_CC_LOWER) != 0;
652 return ('\x20' <= ch && ch <= '\x7e') || ('\xa0' <= ch && ch <= '\xff');
658 BOOST_ASSERT(strict_ischar(ch));
659 return (iso8859_1_char_types[ch] & BOOST_CC_PUNCT) != 0;
665 BOOST_ASSERT(strict_ischar(ch));
666 return (iso8859_1_char_types[ch] & BOOST_CC_SPACE) != 0;
670 isblank BOOST_PREVENT_MACRO_SUBSTITUTION (int ch)
672 BOOST_ASSERT(strict_ischar(ch));
673 return ('\x09' == ch || '\x20' == ch || '\xa0' == ch);
679 BOOST_ASSERT(strict_ischar(ch));
680 return (iso8859_1_char_types[ch] & BOOST_CC_UPPER) != 0;
683 ///////////////////////////////////////////////////////////////////////////
684 // Simple character conversions
685 ///////////////////////////////////////////////////////////////////////////
690 BOOST_ASSERT(strict_ischar(ch));
691 return isupper(ch) && '\0' != iso8859_1_char_conversion[ch] ?
692 iso8859_1_char_conversion[ch] : ch;
698 BOOST_ASSERT(strict_ischar(ch));
699 return islower(ch) && '\0' != iso8859_1_char_conversion[ch] ?
700 iso8859_1_char_conversion[ch] : ch;
703 static ::boost::uint32_t
706 // The first 256 characters in Unicode and the UCS are
707 // identical to those in ISO/IEC-8859-1.
708 BOOST_ASSERT(strict_ischar(ch));
715 ///////////////////////////////////////////////////////////////////////////////
717 ///////////////////////////////////////////////////////////////////////////////
718 #undef BOOST_CC_DIGIT
719 #undef BOOST_CC_XDIGIT
720 #undef BOOST_CC_ALPHA
722 #undef BOOST_CC_LOWER
723 #undef BOOST_CC_UPPER
724 #undef BOOST_CC_PUNCT
725 #undef BOOST_CC_SPACE