1/*=============================================================================
2 Copyright (c) 2001-2011 Joel de Guzman
3 Copyright (c) 2001-2011 Hartmut Kaiser
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_CHAR_CLASS_NOVEMBER_10_2006_0907AM)
9#define BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM
10
11#if defined(_MSC_VER)
12#pragma once
13#endif
14
15#include <boost/config.hpp>
16#include <boost/mpl/bool.hpp>
17#include <boost/spirit/home/support/unused.hpp>
18#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
19#include <boost/type_traits/is_signed.hpp>
20#include <boost/type_traits/make_unsigned.hpp>
21#include <boost/type_traits/make_signed.hpp>
22
23#if defined(BOOST_MSVC)
24# pragma warning(push)
25# pragma warning(disable: 4127) // conditional expression is constant
26# pragma warning(disable: 4800) // 'int' : forcing value to bool 'true' or 'false' warning
27#endif
28
29namespace boost { namespace spirit { namespace detail
30{
31 // Here's the thing... typical encodings (except ASCII) deal with unsigned
32 // integers > 127. ASCII uses only 127. Yet, most char and wchar_t are signed.
33 // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you
34 // cast this to an unsigned int with 32 bits, you get 4294967273!
35 //
36 // The trick is to cast to an unsigned version of the source char first
37 // before casting to the target. {P.S. Don't worry about the code, the
38 // optimizer will optimize the if-else branches}
39
40 template <typename TargetChar, typename SourceChar>
41 TargetChar cast_char(SourceChar ch)
42 {
43 if (is_signed<TargetChar>::value != is_signed<SourceChar>::value)
44 {
45 if (is_signed<SourceChar>::value)
46 {
47 // source is signed, target is unsigned
48 typedef typename make_unsigned<SourceChar>::type USourceChar;
49 return TargetChar(USourceChar(ch));
50 }
51 else
52 {
53 // source is unsigned, target is signed
54 typedef typename make_signed<SourceChar>::type SSourceChar;
55 return TargetChar(SSourceChar(ch));
56 }
57 }
58 else
59 {
60 // source and target has same signedness
61 return TargetChar(ch); // just cast
62 }
63 }
64}}}
65
66namespace boost { namespace spirit { namespace tag
67{
68 struct char_ { BOOST_SPIRIT_IS_TAG() };
69 struct string { BOOST_SPIRIT_IS_TAG() };
70
71 ///////////////////////////////////////////////////////////////////////////
72 // classification tags
73 struct alnum { BOOST_SPIRIT_IS_TAG() };
74 struct alpha { BOOST_SPIRIT_IS_TAG() };
75 struct digit { BOOST_SPIRIT_IS_TAG() };
76 struct xdigit { BOOST_SPIRIT_IS_TAG() };
77 struct cntrl { BOOST_SPIRIT_IS_TAG() };
78 struct graph { BOOST_SPIRIT_IS_TAG() };
79 struct print { BOOST_SPIRIT_IS_TAG() };
80 struct punct { BOOST_SPIRIT_IS_TAG() };
81 struct space { BOOST_SPIRIT_IS_TAG() };
82 struct blank { BOOST_SPIRIT_IS_TAG() };
83
84 ///////////////////////////////////////////////////////////////////////////
85 // classification/conversion tags
86 struct no_case { BOOST_SPIRIT_IS_TAG() };
87 struct lower { BOOST_SPIRIT_IS_TAG() };
88 struct upper { BOOST_SPIRIT_IS_TAG() };
89 struct lowernum { BOOST_SPIRIT_IS_TAG() };
90 struct uppernum { BOOST_SPIRIT_IS_TAG() };
91 struct ucs4 { BOOST_SPIRIT_IS_TAG() };
92 struct encoding { BOOST_SPIRIT_IS_TAG() };
93
94#if defined(BOOST_SPIRIT_UNICODE)
95///////////////////////////////////////////////////////////////////////////
96// Unicode Major Categories
97///////////////////////////////////////////////////////////////////////////
98 struct letter { BOOST_SPIRIT_IS_TAG() };
99 struct mark { BOOST_SPIRIT_IS_TAG() };
100 struct number { BOOST_SPIRIT_IS_TAG() };
101 struct separator { BOOST_SPIRIT_IS_TAG() };
102 struct other { BOOST_SPIRIT_IS_TAG() };
103 struct punctuation { BOOST_SPIRIT_IS_TAG() };
104 struct symbol { BOOST_SPIRIT_IS_TAG() };
105
106///////////////////////////////////////////////////////////////////////////
107// Unicode General Categories
108///////////////////////////////////////////////////////////////////////////
109 struct uppercase_letter { BOOST_SPIRIT_IS_TAG() };
110 struct lowercase_letter { BOOST_SPIRIT_IS_TAG() };
111 struct titlecase_letter { BOOST_SPIRIT_IS_TAG() };
112 struct modifier_letter { BOOST_SPIRIT_IS_TAG() };
113 struct other_letter { BOOST_SPIRIT_IS_TAG() };
114
115 struct nonspacing_mark { BOOST_SPIRIT_IS_TAG() };
116 struct enclosing_mark { BOOST_SPIRIT_IS_TAG() };
117 struct spacing_mark { BOOST_SPIRIT_IS_TAG() };
118
119 struct decimal_number { BOOST_SPIRIT_IS_TAG() };
120 struct letter_number { BOOST_SPIRIT_IS_TAG() };
121 struct other_number { BOOST_SPIRIT_IS_TAG() };
122
123 struct space_separator { BOOST_SPIRIT_IS_TAG() };
124 struct line_separator { BOOST_SPIRIT_IS_TAG() };
125 struct paragraph_separator { BOOST_SPIRIT_IS_TAG() };
126
127 struct control { BOOST_SPIRIT_IS_TAG() };
128 struct format { BOOST_SPIRIT_IS_TAG() };
129 struct private_use { BOOST_SPIRIT_IS_TAG() };
130 struct surrogate { BOOST_SPIRIT_IS_TAG() };
131 struct unassigned { BOOST_SPIRIT_IS_TAG() };
132
133 struct dash_punctuation { BOOST_SPIRIT_IS_TAG() };
134 struct open_punctuation { BOOST_SPIRIT_IS_TAG() };
135 struct close_punctuation { BOOST_SPIRIT_IS_TAG() };
136 struct connector_punctuation { BOOST_SPIRIT_IS_TAG() };
137 struct other_punctuation { BOOST_SPIRIT_IS_TAG() };
138 struct initial_punctuation { BOOST_SPIRIT_IS_TAG() };
139 struct final_punctuation { BOOST_SPIRIT_IS_TAG() };
140
141 struct math_symbol { BOOST_SPIRIT_IS_TAG() };
142 struct currency_symbol { BOOST_SPIRIT_IS_TAG() };
143 struct modifier_symbol { BOOST_SPIRIT_IS_TAG() };
144 struct other_symbol { BOOST_SPIRIT_IS_TAG() };
145
146///////////////////////////////////////////////////////////////////////////
147// Unicode Derived Categories
148///////////////////////////////////////////////////////////////////////////
149 struct alphabetic { BOOST_SPIRIT_IS_TAG() };
150 struct uppercase { BOOST_SPIRIT_IS_TAG() };
151 struct lowercase { BOOST_SPIRIT_IS_TAG() };
152 struct white_space { BOOST_SPIRIT_IS_TAG() };
153 struct hex_digit { BOOST_SPIRIT_IS_TAG() };
154 struct noncharacter_code_point { BOOST_SPIRIT_IS_TAG() };
155 struct default_ignorable_code_point { BOOST_SPIRIT_IS_TAG() };
156
157///////////////////////////////////////////////////////////////////////////
158// Unicode Scripts
159///////////////////////////////////////////////////////////////////////////
160 struct adlam { BOOST_SPIRIT_IS_TAG() };
161 struct caucasian_albanian { BOOST_SPIRIT_IS_TAG() };
162 struct ahom { BOOST_SPIRIT_IS_TAG() };
163 struct arabic { BOOST_SPIRIT_IS_TAG() };
164 struct imperial_aramaic { BOOST_SPIRIT_IS_TAG() };
165 struct armenian { BOOST_SPIRIT_IS_TAG() };
166 struct avestan { BOOST_SPIRIT_IS_TAG() };
167 struct balinese { BOOST_SPIRIT_IS_TAG() };
168 struct bamum { BOOST_SPIRIT_IS_TAG() };
169 struct bassa_vah { BOOST_SPIRIT_IS_TAG() };
170 struct batak { BOOST_SPIRIT_IS_TAG() };
171 struct bengali { BOOST_SPIRIT_IS_TAG() };
172 struct bhaiksuki { BOOST_SPIRIT_IS_TAG() };
173 struct bopomofo { BOOST_SPIRIT_IS_TAG() };
174 struct brahmi { BOOST_SPIRIT_IS_TAG() };
175 struct braille { BOOST_SPIRIT_IS_TAG() };
176 struct buginese { BOOST_SPIRIT_IS_TAG() };
177 struct buhid { BOOST_SPIRIT_IS_TAG() };
178 struct chakma { BOOST_SPIRIT_IS_TAG() };
179 struct canadian_aboriginal { BOOST_SPIRIT_IS_TAG() };
180 struct carian { BOOST_SPIRIT_IS_TAG() };
181 struct cham { BOOST_SPIRIT_IS_TAG() };
182 struct cherokee { BOOST_SPIRIT_IS_TAG() };
183 struct chorasmian { BOOST_SPIRIT_IS_TAG() };
184 struct coptic { BOOST_SPIRIT_IS_TAG() };
185 struct cypro_minoan { BOOST_SPIRIT_IS_TAG() };
186 struct cypriot { BOOST_SPIRIT_IS_TAG() };
187 struct cyrillic { BOOST_SPIRIT_IS_TAG() };
188 struct devanagari { BOOST_SPIRIT_IS_TAG() };
189 struct dives_akuru { BOOST_SPIRIT_IS_TAG() };
190 struct dogra { BOOST_SPIRIT_IS_TAG() };
191 struct deseret { BOOST_SPIRIT_IS_TAG() };
192 struct duployan { BOOST_SPIRIT_IS_TAG() };
193 struct egyptian_hieroglyphs { BOOST_SPIRIT_IS_TAG() };
194 struct elbasan { BOOST_SPIRIT_IS_TAG() };
195 struct elymaic { BOOST_SPIRIT_IS_TAG() };
196 struct ethiopic { BOOST_SPIRIT_IS_TAG() };
197 struct georgian { BOOST_SPIRIT_IS_TAG() };
198 struct glagolitic { BOOST_SPIRIT_IS_TAG() };
199 struct gunjala_gondi { BOOST_SPIRIT_IS_TAG() };
200 struct masaram_gondi { BOOST_SPIRIT_IS_TAG() };
201 struct gothic { BOOST_SPIRIT_IS_TAG() };
202 struct grantha { BOOST_SPIRIT_IS_TAG() };
203 struct greek { BOOST_SPIRIT_IS_TAG() };
204 struct gujarati { BOOST_SPIRIT_IS_TAG() };
205 struct gurmukhi { BOOST_SPIRIT_IS_TAG() };
206 struct hangul { BOOST_SPIRIT_IS_TAG() };
207 struct han { BOOST_SPIRIT_IS_TAG() };
208 struct hanunoo { BOOST_SPIRIT_IS_TAG() };
209 struct hatran { BOOST_SPIRIT_IS_TAG() };
210 struct hebrew { BOOST_SPIRIT_IS_TAG() };
211 struct hiragana { BOOST_SPIRIT_IS_TAG() };
212 struct anatolian_hieroglyphs { BOOST_SPIRIT_IS_TAG() };
213 struct pahawh_hmong { BOOST_SPIRIT_IS_TAG() };
214 struct nyiakeng_puachue_hmong { BOOST_SPIRIT_IS_TAG() };
215 struct katakana_or_hiragana { BOOST_SPIRIT_IS_TAG() };
216 struct old_hungarian { BOOST_SPIRIT_IS_TAG() };
217 struct old_italic { BOOST_SPIRIT_IS_TAG() };
218 struct javanese { BOOST_SPIRIT_IS_TAG() };
219 struct kayah_li { BOOST_SPIRIT_IS_TAG() };
220 struct katakana { BOOST_SPIRIT_IS_TAG() };
221 struct kawi { BOOST_SPIRIT_IS_TAG() };
222 struct kharoshthi { BOOST_SPIRIT_IS_TAG() };
223 struct khmer { BOOST_SPIRIT_IS_TAG() };
224 struct khojki { BOOST_SPIRIT_IS_TAG() };
225 struct khitan_small_script { BOOST_SPIRIT_IS_TAG() };
226 struct kannada { BOOST_SPIRIT_IS_TAG() };
227 struct kaithi { BOOST_SPIRIT_IS_TAG() };
228 struct tai_tham { BOOST_SPIRIT_IS_TAG() };
229 struct lao { BOOST_SPIRIT_IS_TAG() };
230 struct latin { BOOST_SPIRIT_IS_TAG() };
231 struct lepcha { BOOST_SPIRIT_IS_TAG() };
232 struct limbu { BOOST_SPIRIT_IS_TAG() };
233 struct linear_a { BOOST_SPIRIT_IS_TAG() };
234 struct linear_b { BOOST_SPIRIT_IS_TAG() };
235 struct lisu { BOOST_SPIRIT_IS_TAG() };
236 struct lycian { BOOST_SPIRIT_IS_TAG() };
237 struct lydian { BOOST_SPIRIT_IS_TAG() };
238 struct mahajani { BOOST_SPIRIT_IS_TAG() };
239 struct makasar { BOOST_SPIRIT_IS_TAG() };
240 struct mandaic { BOOST_SPIRIT_IS_TAG() };
241 struct manichaean { BOOST_SPIRIT_IS_TAG() };
242 struct marchen { BOOST_SPIRIT_IS_TAG() };
243 struct medefaidrin { BOOST_SPIRIT_IS_TAG() };
244 struct mende_kikakui { BOOST_SPIRIT_IS_TAG() };
245 struct meroitic_cursive { BOOST_SPIRIT_IS_TAG() };
246 struct meroitic_hieroglyphs { BOOST_SPIRIT_IS_TAG() };
247 struct malayalam { BOOST_SPIRIT_IS_TAG() };
248 struct modi { BOOST_SPIRIT_IS_TAG() };
249 struct mongolian { BOOST_SPIRIT_IS_TAG() };
250 struct mro { BOOST_SPIRIT_IS_TAG() };
251 struct meetei_mayek { BOOST_SPIRIT_IS_TAG() };
252 struct multani { BOOST_SPIRIT_IS_TAG() };
253 struct myanmar { BOOST_SPIRIT_IS_TAG() };
254 struct nag_mundari { BOOST_SPIRIT_IS_TAG() };
255 struct nandinagari { BOOST_SPIRIT_IS_TAG() };
256 struct old_north_arabian { BOOST_SPIRIT_IS_TAG() };
257 struct nabataean { BOOST_SPIRIT_IS_TAG() };
258 struct newa { BOOST_SPIRIT_IS_TAG() };
259 struct nko { BOOST_SPIRIT_IS_TAG() };
260 struct nushu { BOOST_SPIRIT_IS_TAG() };
261 struct ogham { BOOST_SPIRIT_IS_TAG() };
262 struct ol_chiki { BOOST_SPIRIT_IS_TAG() };
263 struct old_turkic { BOOST_SPIRIT_IS_TAG() };
264 struct oriya { BOOST_SPIRIT_IS_TAG() };
265 struct osage { BOOST_SPIRIT_IS_TAG() };
266 struct osmanya { BOOST_SPIRIT_IS_TAG() };
267 struct old_uyghur { BOOST_SPIRIT_IS_TAG() };
268 struct palmyrene { BOOST_SPIRIT_IS_TAG() };
269 struct pau_cin_hau { BOOST_SPIRIT_IS_TAG() };
270 struct old_permic { BOOST_SPIRIT_IS_TAG() };
271 struct phags_pa { BOOST_SPIRIT_IS_TAG() };
272 struct inscriptional_pahlavi { BOOST_SPIRIT_IS_TAG() };
273 struct psalter_pahlavi { BOOST_SPIRIT_IS_TAG() };
274 struct phoenician { BOOST_SPIRIT_IS_TAG() };
275 struct miao { BOOST_SPIRIT_IS_TAG() };
276 struct inscriptional_parthian { BOOST_SPIRIT_IS_TAG() };
277 struct rejang { BOOST_SPIRIT_IS_TAG() };
278 struct hanifi_rohingya { BOOST_SPIRIT_IS_TAG() };
279 struct runic { BOOST_SPIRIT_IS_TAG() };
280 struct samaritan { BOOST_SPIRIT_IS_TAG() };
281 struct old_south_arabian { BOOST_SPIRIT_IS_TAG() };
282 struct saurashtra { BOOST_SPIRIT_IS_TAG() };
283 struct signwriting { BOOST_SPIRIT_IS_TAG() };
284 struct shavian { BOOST_SPIRIT_IS_TAG() };
285 struct sharada { BOOST_SPIRIT_IS_TAG() };
286 struct siddham { BOOST_SPIRIT_IS_TAG() };
287 struct khudawadi { BOOST_SPIRIT_IS_TAG() };
288 struct sinhala { BOOST_SPIRIT_IS_TAG() };
289 struct sogdian { BOOST_SPIRIT_IS_TAG() };
290 struct old_sogdian { BOOST_SPIRIT_IS_TAG() };
291 struct sora_sompeng { BOOST_SPIRIT_IS_TAG() };
292 struct soyombo { BOOST_SPIRIT_IS_TAG() };
293 struct sundanese { BOOST_SPIRIT_IS_TAG() };
294 struct syloti_nagri { BOOST_SPIRIT_IS_TAG() };
295 struct syriac { BOOST_SPIRIT_IS_TAG() };
296 struct tagbanwa { BOOST_SPIRIT_IS_TAG() };
297 struct takri { BOOST_SPIRIT_IS_TAG() };
298 struct tai_le { BOOST_SPIRIT_IS_TAG() };
299 struct new_tai_lue { BOOST_SPIRIT_IS_TAG() };
300 struct tamil { BOOST_SPIRIT_IS_TAG() };
301 struct tangut { BOOST_SPIRIT_IS_TAG() };
302 struct tai_viet { BOOST_SPIRIT_IS_TAG() };
303 struct telugu { BOOST_SPIRIT_IS_TAG() };
304 struct tifinagh { BOOST_SPIRIT_IS_TAG() };
305 struct tagalog { BOOST_SPIRIT_IS_TAG() };
306 struct thaana { BOOST_SPIRIT_IS_TAG() };
307 struct thai { BOOST_SPIRIT_IS_TAG() };
308 struct tibetan { BOOST_SPIRIT_IS_TAG() };
309 struct tirhuta { BOOST_SPIRIT_IS_TAG() };
310 struct tangsa { BOOST_SPIRIT_IS_TAG() };
311 struct toto { BOOST_SPIRIT_IS_TAG() };
312 struct ugaritic { BOOST_SPIRIT_IS_TAG() };
313 struct vai { BOOST_SPIRIT_IS_TAG() };
314 struct vithkuqi { BOOST_SPIRIT_IS_TAG() };
315 struct warang_citi { BOOST_SPIRIT_IS_TAG() };
316 struct wancho { BOOST_SPIRIT_IS_TAG() };
317 struct old_persian { BOOST_SPIRIT_IS_TAG() };
318 struct cuneiform { BOOST_SPIRIT_IS_TAG() };
319 struct yezidi { BOOST_SPIRIT_IS_TAG() };
320 struct yi { BOOST_SPIRIT_IS_TAG() };
321 struct zanabazar_square { BOOST_SPIRIT_IS_TAG() };
322 struct inherited { BOOST_SPIRIT_IS_TAG() };
323 struct common { BOOST_SPIRIT_IS_TAG() };
324 struct unknown { BOOST_SPIRIT_IS_TAG() };
325#endif
326
327 ///////////////////////////////////////////////////////////////////////////
328 // This composite tag type encodes both the character
329 // set and the specific char tag (used for classification
330 // or conversion). char_code_base and char_encoding_base
331 // can be used to test for modifier membership (see modifier.hpp)
332 template <typename CharClass>
333 struct char_code_base {};
334
335 template <typename CharEncoding>
336 struct char_encoding_base {};
337
338 template <typename CharClass, typename CharEncoding>
339 struct char_code
340 : char_code_base<CharClass>, char_encoding_base<CharEncoding>
341 {
342 BOOST_SPIRIT_IS_TAG()
343 typedef CharEncoding char_encoding; // e.g. ascii
344 typedef CharClass char_class; // e.g. tag::alnum
345 };
346}}}
347
348namespace boost { namespace spirit { namespace char_class
349{
350 ///////////////////////////////////////////////////////////////////////////
351 // Test characters for classification
352 template <typename CharEncoding>
353 struct classify
354 {
355 typedef typename CharEncoding::classify_type char_type;
356
357#define BOOST_SPIRIT_CLASSIFY(name, isname) \
358 template <typename Char> \
359 static bool \
360 is(tag::name, Char ch) \
361 { \
362 return CharEncoding::isname \
363 BOOST_PREVENT_MACRO_SUBSTITUTION \
364 (detail::cast_char<char_type>(ch)); \
365 } \
366 /***/
367
368 BOOST_SPIRIT_CLASSIFY(char_, ischar)
369 BOOST_SPIRIT_CLASSIFY(alnum, isalnum)
370 BOOST_SPIRIT_CLASSIFY(alpha, isalpha)
371 BOOST_SPIRIT_CLASSIFY(digit, isdigit)
372 BOOST_SPIRIT_CLASSIFY(xdigit, isxdigit)
373 BOOST_SPIRIT_CLASSIFY(cntrl, iscntrl)
374 BOOST_SPIRIT_CLASSIFY(graph, isgraph)
375 BOOST_SPIRIT_CLASSIFY(lower, islower)
376 BOOST_SPIRIT_CLASSIFY(print, isprint)
377 BOOST_SPIRIT_CLASSIFY(punct, ispunct)
378 BOOST_SPIRIT_CLASSIFY(space, isspace)
379 BOOST_SPIRIT_CLASSIFY(blank, isblank)
380 BOOST_SPIRIT_CLASSIFY(upper, isupper)
381
382#undef BOOST_SPIRIT_CLASSIFY
383
384 template <typename Char>
385 static bool
386 is(tag::lowernum, Char ch)
387 {
388 return CharEncoding::islower(detail::cast_char<char_type>(ch)) ||
389 CharEncoding::isdigit(detail::cast_char<char_type>(ch));
390 }
391
392 template <typename Char>
393 static bool
394 is(tag::uppernum, Char ch)
395 {
396 return CharEncoding::isupper(detail::cast_char<char_type>(ch)) ||
397 CharEncoding::isdigit(detail::cast_char<char_type>(ch));
398 }
399
400#if defined(BOOST_SPIRIT_UNICODE)
401
402#define BOOST_SPIRIT_UNICODE_CLASSIFY(name) \
403 template <typename Char> \
404 static bool \
405 is(tag::name, Char ch) \
406 { \
407 return CharEncoding::is_##name(detail::cast_char<char_type>(ch)); \
408 } \
409 /***/
410
411///////////////////////////////////////////////////////////////////////////
412// Unicode Major Categories
413///////////////////////////////////////////////////////////////////////////
414 BOOST_SPIRIT_UNICODE_CLASSIFY(letter)
415 BOOST_SPIRIT_UNICODE_CLASSIFY(mark)
416 BOOST_SPIRIT_UNICODE_CLASSIFY(number)
417 BOOST_SPIRIT_UNICODE_CLASSIFY(separator)
418 BOOST_SPIRIT_UNICODE_CLASSIFY(other)
419 BOOST_SPIRIT_UNICODE_CLASSIFY(punctuation)
420 BOOST_SPIRIT_UNICODE_CLASSIFY(symbol)
421
422///////////////////////////////////////////////////////////////////////////
423// Unicode General Categories
424///////////////////////////////////////////////////////////////////////////
425 BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase_letter)
426 BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase_letter)
427 BOOST_SPIRIT_UNICODE_CLASSIFY(titlecase_letter)
428 BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_letter)
429 BOOST_SPIRIT_UNICODE_CLASSIFY(other_letter)
430
431 BOOST_SPIRIT_UNICODE_CLASSIFY(nonspacing_mark)
432 BOOST_SPIRIT_UNICODE_CLASSIFY(enclosing_mark)
433 BOOST_SPIRIT_UNICODE_CLASSIFY(spacing_mark)
434
435 BOOST_SPIRIT_UNICODE_CLASSIFY(decimal_number)
436 BOOST_SPIRIT_UNICODE_CLASSIFY(letter_number)
437 BOOST_SPIRIT_UNICODE_CLASSIFY(other_number)
438
439 BOOST_SPIRIT_UNICODE_CLASSIFY(space_separator)
440 BOOST_SPIRIT_UNICODE_CLASSIFY(line_separator)
441 BOOST_SPIRIT_UNICODE_CLASSIFY(paragraph_separator)
442
443 BOOST_SPIRIT_UNICODE_CLASSIFY(control)
444 BOOST_SPIRIT_UNICODE_CLASSIFY(format)
445 BOOST_SPIRIT_UNICODE_CLASSIFY(private_use)
446 BOOST_SPIRIT_UNICODE_CLASSIFY(surrogate)
447 BOOST_SPIRIT_UNICODE_CLASSIFY(unassigned)
448
449 BOOST_SPIRIT_UNICODE_CLASSIFY(dash_punctuation)
450 BOOST_SPIRIT_UNICODE_CLASSIFY(open_punctuation)
451 BOOST_SPIRIT_UNICODE_CLASSIFY(close_punctuation)
452 BOOST_SPIRIT_UNICODE_CLASSIFY(connector_punctuation)
453 BOOST_SPIRIT_UNICODE_CLASSIFY(other_punctuation)
454 BOOST_SPIRIT_UNICODE_CLASSIFY(initial_punctuation)
455 BOOST_SPIRIT_UNICODE_CLASSIFY(final_punctuation)
456
457 BOOST_SPIRIT_UNICODE_CLASSIFY(math_symbol)
458 BOOST_SPIRIT_UNICODE_CLASSIFY(currency_symbol)
459 BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_symbol)
460 BOOST_SPIRIT_UNICODE_CLASSIFY(other_symbol)
461
462///////////////////////////////////////////////////////////////////////////
463// Unicode Derived Categories
464///////////////////////////////////////////////////////////////////////////
465 BOOST_SPIRIT_UNICODE_CLASSIFY(alphabetic)
466 BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase)
467 BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase)
468 BOOST_SPIRIT_UNICODE_CLASSIFY(white_space)
469 BOOST_SPIRIT_UNICODE_CLASSIFY(hex_digit)
470 BOOST_SPIRIT_UNICODE_CLASSIFY(noncharacter_code_point)
471 BOOST_SPIRIT_UNICODE_CLASSIFY(default_ignorable_code_point)
472
473///////////////////////////////////////////////////////////////////////////
474// Unicode Scripts
475///////////////////////////////////////////////////////////////////////////
476 BOOST_SPIRIT_UNICODE_CLASSIFY(adlam)
477 BOOST_SPIRIT_UNICODE_CLASSIFY(caucasian_albanian)
478 BOOST_SPIRIT_UNICODE_CLASSIFY(ahom)
479 BOOST_SPIRIT_UNICODE_CLASSIFY(arabic)
480 BOOST_SPIRIT_UNICODE_CLASSIFY(imperial_aramaic)
481 BOOST_SPIRIT_UNICODE_CLASSIFY(armenian)
482 BOOST_SPIRIT_UNICODE_CLASSIFY(avestan)
483 BOOST_SPIRIT_UNICODE_CLASSIFY(balinese)
484 BOOST_SPIRIT_UNICODE_CLASSIFY(bamum)
485 BOOST_SPIRIT_UNICODE_CLASSIFY(bassa_vah)
486 BOOST_SPIRIT_UNICODE_CLASSIFY(batak)
487 BOOST_SPIRIT_UNICODE_CLASSIFY(bengali)
488 BOOST_SPIRIT_UNICODE_CLASSIFY(bhaiksuki)
489 BOOST_SPIRIT_UNICODE_CLASSIFY(bopomofo)
490 BOOST_SPIRIT_UNICODE_CLASSIFY(brahmi)
491 BOOST_SPIRIT_UNICODE_CLASSIFY(braille)
492 BOOST_SPIRIT_UNICODE_CLASSIFY(buginese)
493 BOOST_SPIRIT_UNICODE_CLASSIFY(buhid)
494 BOOST_SPIRIT_UNICODE_CLASSIFY(chakma)
495 BOOST_SPIRIT_UNICODE_CLASSIFY(canadian_aboriginal)
496 BOOST_SPIRIT_UNICODE_CLASSIFY(carian)
497 BOOST_SPIRIT_UNICODE_CLASSIFY(cham)
498 BOOST_SPIRIT_UNICODE_CLASSIFY(cherokee)
499 BOOST_SPIRIT_UNICODE_CLASSIFY(chorasmian)
500 BOOST_SPIRIT_UNICODE_CLASSIFY(coptic)
501 BOOST_SPIRIT_UNICODE_CLASSIFY(cypro_minoan)
502 BOOST_SPIRIT_UNICODE_CLASSIFY(cypriot)
503 BOOST_SPIRIT_UNICODE_CLASSIFY(cyrillic)
504 BOOST_SPIRIT_UNICODE_CLASSIFY(devanagari)
505 BOOST_SPIRIT_UNICODE_CLASSIFY(dives_akuru)
506 BOOST_SPIRIT_UNICODE_CLASSIFY(dogra)
507 BOOST_SPIRIT_UNICODE_CLASSIFY(deseret)
508 BOOST_SPIRIT_UNICODE_CLASSIFY(duployan)
509 BOOST_SPIRIT_UNICODE_CLASSIFY(egyptian_hieroglyphs)
510 BOOST_SPIRIT_UNICODE_CLASSIFY(elbasan)
511 BOOST_SPIRIT_UNICODE_CLASSIFY(elymaic)
512 BOOST_SPIRIT_UNICODE_CLASSIFY(ethiopic)
513 BOOST_SPIRIT_UNICODE_CLASSIFY(georgian)
514 BOOST_SPIRIT_UNICODE_CLASSIFY(glagolitic)
515 BOOST_SPIRIT_UNICODE_CLASSIFY(gunjala_gondi)
516 BOOST_SPIRIT_UNICODE_CLASSIFY(masaram_gondi)
517 BOOST_SPIRIT_UNICODE_CLASSIFY(gothic)
518 BOOST_SPIRIT_UNICODE_CLASSIFY(grantha)
519 BOOST_SPIRIT_UNICODE_CLASSIFY(greek)
520 BOOST_SPIRIT_UNICODE_CLASSIFY(gujarati)
521 BOOST_SPIRIT_UNICODE_CLASSIFY(gurmukhi)
522 BOOST_SPIRIT_UNICODE_CLASSIFY(hangul)
523 BOOST_SPIRIT_UNICODE_CLASSIFY(han)
524 BOOST_SPIRIT_UNICODE_CLASSIFY(hanunoo)
525 BOOST_SPIRIT_UNICODE_CLASSIFY(hatran)
526 BOOST_SPIRIT_UNICODE_CLASSIFY(hebrew)
527 BOOST_SPIRIT_UNICODE_CLASSIFY(hiragana)
528 BOOST_SPIRIT_UNICODE_CLASSIFY(anatolian_hieroglyphs)
529 BOOST_SPIRIT_UNICODE_CLASSIFY(pahawh_hmong)
530 BOOST_SPIRIT_UNICODE_CLASSIFY(nyiakeng_puachue_hmong)
531 BOOST_SPIRIT_UNICODE_CLASSIFY(katakana_or_hiragana)
532 BOOST_SPIRIT_UNICODE_CLASSIFY(old_hungarian)
533 BOOST_SPIRIT_UNICODE_CLASSIFY(old_italic)
534 BOOST_SPIRIT_UNICODE_CLASSIFY(javanese)
535 BOOST_SPIRIT_UNICODE_CLASSIFY(kayah_li)
536 BOOST_SPIRIT_UNICODE_CLASSIFY(katakana)
537 BOOST_SPIRIT_UNICODE_CLASSIFY(kawi)
538 BOOST_SPIRIT_UNICODE_CLASSIFY(kharoshthi)
539 BOOST_SPIRIT_UNICODE_CLASSIFY(khmer)
540 BOOST_SPIRIT_UNICODE_CLASSIFY(khojki)
541 BOOST_SPIRIT_UNICODE_CLASSIFY(khitan_small_script)
542 BOOST_SPIRIT_UNICODE_CLASSIFY(kannada)
543 BOOST_SPIRIT_UNICODE_CLASSIFY(kaithi)
544 BOOST_SPIRIT_UNICODE_CLASSIFY(tai_tham)
545 BOOST_SPIRIT_UNICODE_CLASSIFY(lao)
546 BOOST_SPIRIT_UNICODE_CLASSIFY(latin)
547 BOOST_SPIRIT_UNICODE_CLASSIFY(lepcha)
548 BOOST_SPIRIT_UNICODE_CLASSIFY(limbu)
549 BOOST_SPIRIT_UNICODE_CLASSIFY(linear_a)
550 BOOST_SPIRIT_UNICODE_CLASSIFY(linear_b)
551 BOOST_SPIRIT_UNICODE_CLASSIFY(lisu)
552 BOOST_SPIRIT_UNICODE_CLASSIFY(lycian)
553 BOOST_SPIRIT_UNICODE_CLASSIFY(lydian)
554 BOOST_SPIRIT_UNICODE_CLASSIFY(mahajani)
555 BOOST_SPIRIT_UNICODE_CLASSIFY(makasar)
556 BOOST_SPIRIT_UNICODE_CLASSIFY(mandaic)
557 BOOST_SPIRIT_UNICODE_CLASSIFY(manichaean)
558 BOOST_SPIRIT_UNICODE_CLASSIFY(marchen)
559 BOOST_SPIRIT_UNICODE_CLASSIFY(medefaidrin)
560 BOOST_SPIRIT_UNICODE_CLASSIFY(mende_kikakui)
561 BOOST_SPIRIT_UNICODE_CLASSIFY(meroitic_cursive)
562 BOOST_SPIRIT_UNICODE_CLASSIFY(meroitic_hieroglyphs)
563 BOOST_SPIRIT_UNICODE_CLASSIFY(malayalam)
564 BOOST_SPIRIT_UNICODE_CLASSIFY(modi)
565 BOOST_SPIRIT_UNICODE_CLASSIFY(mongolian)
566 BOOST_SPIRIT_UNICODE_CLASSIFY(mro)
567 BOOST_SPIRIT_UNICODE_CLASSIFY(meetei_mayek)
568 BOOST_SPIRIT_UNICODE_CLASSIFY(multani)
569 BOOST_SPIRIT_UNICODE_CLASSIFY(myanmar)
570 BOOST_SPIRIT_UNICODE_CLASSIFY(nag_mundari)
571 BOOST_SPIRIT_UNICODE_CLASSIFY(nandinagari)
572 BOOST_SPIRIT_UNICODE_CLASSIFY(old_north_arabian)
573 BOOST_SPIRIT_UNICODE_CLASSIFY(nabataean)
574 BOOST_SPIRIT_UNICODE_CLASSIFY(newa)
575 BOOST_SPIRIT_UNICODE_CLASSIFY(nko)
576 BOOST_SPIRIT_UNICODE_CLASSIFY(nushu)
577 BOOST_SPIRIT_UNICODE_CLASSIFY(ogham)
578 BOOST_SPIRIT_UNICODE_CLASSIFY(ol_chiki)
579 BOOST_SPIRIT_UNICODE_CLASSIFY(old_turkic)
580 BOOST_SPIRIT_UNICODE_CLASSIFY(oriya)
581 BOOST_SPIRIT_UNICODE_CLASSIFY(osage)
582 BOOST_SPIRIT_UNICODE_CLASSIFY(osmanya)
583 BOOST_SPIRIT_UNICODE_CLASSIFY(old_uyghur)
584 BOOST_SPIRIT_UNICODE_CLASSIFY(palmyrene)
585 BOOST_SPIRIT_UNICODE_CLASSIFY(pau_cin_hau)
586 BOOST_SPIRIT_UNICODE_CLASSIFY(old_permic)
587 BOOST_SPIRIT_UNICODE_CLASSIFY(phags_pa)
588 BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_pahlavi)
589 BOOST_SPIRIT_UNICODE_CLASSIFY(psalter_pahlavi)
590 BOOST_SPIRIT_UNICODE_CLASSIFY(phoenician)
591 BOOST_SPIRIT_UNICODE_CLASSIFY(miao)
592 BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_parthian)
593 BOOST_SPIRIT_UNICODE_CLASSIFY(rejang)
594 BOOST_SPIRIT_UNICODE_CLASSIFY(hanifi_rohingya)
595 BOOST_SPIRIT_UNICODE_CLASSIFY(runic)
596 BOOST_SPIRIT_UNICODE_CLASSIFY(samaritan)
597 BOOST_SPIRIT_UNICODE_CLASSIFY(old_south_arabian)
598 BOOST_SPIRIT_UNICODE_CLASSIFY(saurashtra)
599 BOOST_SPIRIT_UNICODE_CLASSIFY(signwriting)
600 BOOST_SPIRIT_UNICODE_CLASSIFY(shavian)
601 BOOST_SPIRIT_UNICODE_CLASSIFY(sharada)
602 BOOST_SPIRIT_UNICODE_CLASSIFY(siddham)
603 BOOST_SPIRIT_UNICODE_CLASSIFY(khudawadi)
604 BOOST_SPIRIT_UNICODE_CLASSIFY(sinhala)
605 BOOST_SPIRIT_UNICODE_CLASSIFY(sogdian)
606 BOOST_SPIRIT_UNICODE_CLASSIFY(old_sogdian)
607 BOOST_SPIRIT_UNICODE_CLASSIFY(sora_sompeng)
608 BOOST_SPIRIT_UNICODE_CLASSIFY(soyombo)
609 BOOST_SPIRIT_UNICODE_CLASSIFY(sundanese)
610 BOOST_SPIRIT_UNICODE_CLASSIFY(syloti_nagri)
611 BOOST_SPIRIT_UNICODE_CLASSIFY(syriac)
612 BOOST_SPIRIT_UNICODE_CLASSIFY(tagbanwa)
613 BOOST_SPIRIT_UNICODE_CLASSIFY(takri)
614 BOOST_SPIRIT_UNICODE_CLASSIFY(tai_le)
615 BOOST_SPIRIT_UNICODE_CLASSIFY(new_tai_lue)
616 BOOST_SPIRIT_UNICODE_CLASSIFY(tamil)
617 BOOST_SPIRIT_UNICODE_CLASSIFY(tangut)
618 BOOST_SPIRIT_UNICODE_CLASSIFY(tai_viet)
619 BOOST_SPIRIT_UNICODE_CLASSIFY(telugu)
620 BOOST_SPIRIT_UNICODE_CLASSIFY(tifinagh)
621 BOOST_SPIRIT_UNICODE_CLASSIFY(tagalog)
622 BOOST_SPIRIT_UNICODE_CLASSIFY(thaana)
623 BOOST_SPIRIT_UNICODE_CLASSIFY(thai)
624 BOOST_SPIRIT_UNICODE_CLASSIFY(tibetan)
625 BOOST_SPIRIT_UNICODE_CLASSIFY(tirhuta)
626 BOOST_SPIRIT_UNICODE_CLASSIFY(tangsa)
627 BOOST_SPIRIT_UNICODE_CLASSIFY(toto)
628 BOOST_SPIRIT_UNICODE_CLASSIFY(ugaritic)
629 BOOST_SPIRIT_UNICODE_CLASSIFY(vai)
630 BOOST_SPIRIT_UNICODE_CLASSIFY(vithkuqi)
631 BOOST_SPIRIT_UNICODE_CLASSIFY(warang_citi)
632 BOOST_SPIRIT_UNICODE_CLASSIFY(wancho)
633 BOOST_SPIRIT_UNICODE_CLASSIFY(old_persian)
634 BOOST_SPIRIT_UNICODE_CLASSIFY(cuneiform)
635 BOOST_SPIRIT_UNICODE_CLASSIFY(yezidi)
636 BOOST_SPIRIT_UNICODE_CLASSIFY(yi)
637 BOOST_SPIRIT_UNICODE_CLASSIFY(zanabazar_square)
638 BOOST_SPIRIT_UNICODE_CLASSIFY(inherited)
639 BOOST_SPIRIT_UNICODE_CLASSIFY(common)
640 BOOST_SPIRIT_UNICODE_CLASSIFY(unknown)
641
642#undef BOOST_SPIRIT_UNICODE_CLASSIFY
643#endif
644
645 };
646
647 ///////////////////////////////////////////////////////////////////////////
648 // Convert characters
649 template <typename CharEncoding>
650 struct convert
651 {
652 typedef typename CharEncoding::classify_type char_type;
653
654 template <typename Char>
655 static Char
656 to(tag::lower, Char ch)
657 {
658 return static_cast<Char>(
659 CharEncoding::tolower(detail::cast_char<char_type>(ch)));
660 }
661
662 template <typename Char>
663 static Char
664 to(tag::upper, Char ch)
665 {
666 return static_cast<Char>(
667 CharEncoding::toupper(detail::cast_char<char_type>(ch)));
668 }
669
670 template <typename Char>
671 static Char
672 to(tag::ucs4, Char ch)
673 {
674 return static_cast<Char>(
675 CharEncoding::toucs4(detail::cast_char<char_type>(ch)));
676 }
677
678 template <typename Char>
679 static Char
680 to(unused_type, Char ch)
681 {
682 return ch;
683 }
684 };
685
686 ///////////////////////////////////////////////////////////////////////////
687 // Info on character classification
688 template <typename CharEncoding>
689 struct what
690 {
691#define BOOST_SPIRIT_CLASSIFY_WHAT(name, isname) \
692 static char const* is(tag::name) \
693 { \
694 return isname; \
695 } \
696 /***/
697
698 BOOST_SPIRIT_CLASSIFY_WHAT(char_, "char")
699 BOOST_SPIRIT_CLASSIFY_WHAT(alnum, "alnum")
700 BOOST_SPIRIT_CLASSIFY_WHAT(alpha, "alpha")
701 BOOST_SPIRIT_CLASSIFY_WHAT(digit, "digit")
702 BOOST_SPIRIT_CLASSIFY_WHAT(xdigit, "xdigit")
703 BOOST_SPIRIT_CLASSIFY_WHAT(cntrl, "cntrl")
704 BOOST_SPIRIT_CLASSIFY_WHAT(graph, "graph")
705 BOOST_SPIRIT_CLASSIFY_WHAT(lower, "lower")
706 BOOST_SPIRIT_CLASSIFY_WHAT(lowernum, "lowernum")
707 BOOST_SPIRIT_CLASSIFY_WHAT(print, "print")
708 BOOST_SPIRIT_CLASSIFY_WHAT(punct, "punct")
709 BOOST_SPIRIT_CLASSIFY_WHAT(space, "space")
710 BOOST_SPIRIT_CLASSIFY_WHAT(blank, "blank")
711 BOOST_SPIRIT_CLASSIFY_WHAT(upper, "upper")
712 BOOST_SPIRIT_CLASSIFY_WHAT(uppernum, "uppernum")
713 BOOST_SPIRIT_CLASSIFY_WHAT(ucs4, "ucs4")
714
715#undef BOOST_SPIRIT_CLASSIFY_WHAT
716
717#if defined(BOOST_SPIRIT_UNICODE)
718
719#define BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(name) \
720 static char const* is(tag::name) \
721 { \
722 return BOOST_PP_STRINGIZE(name); \
723 } \
724 /***/
725
726///////////////////////////////////////////////////////////////////////////
727// Unicode Major Categories
728///////////////////////////////////////////////////////////////////////////
729 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter)
730 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mark)
731 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(number)
732 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(separator)
733 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other)
734 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(punctuation)
735 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(symbol)
736
737///////////////////////////////////////////////////////////////////////////
738// Unicode General Categories
739///////////////////////////////////////////////////////////////////////////
740 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase_letter)
741 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase_letter)
742 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(titlecase_letter)
743 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_letter)
744 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_letter)
745
746 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nonspacing_mark)
747 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(enclosing_mark)
748 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(spacing_mark)
749
750 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(decimal_number)
751 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter_number)
752 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_number)
753
754 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(space_separator)
755 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(line_separator)
756 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(paragraph_separator)
757
758 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(control)
759 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(format)
760 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(private_use)
761 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(surrogate)
762 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unassigned)
763
764 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(dash_punctuation)
765 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(open_punctuation)
766 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(close_punctuation)
767 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(connector_punctuation)
768 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_punctuation)
769 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(initial_punctuation)
770 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(final_punctuation)
771
772 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(math_symbol)
773 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(currency_symbol)
774 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_symbol)
775 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_symbol)
776
777///////////////////////////////////////////////////////////////////////////
778// Unicode Derived Categories
779///////////////////////////////////////////////////////////////////////////
780 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(alphabetic)
781 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase)
782 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase)
783 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(white_space)
784 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hex_digit)
785 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(noncharacter_code_point)
786 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(default_ignorable_code_point)
787
788///////////////////////////////////////////////////////////////////////////
789// Unicode Scripts
790///////////////////////////////////////////////////////////////////////////
791 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(adlam)
792 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(caucasian_albanian)
793 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ahom)
794 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(arabic)
795 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(imperial_aramaic)
796 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(armenian)
797 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(avestan)
798 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(balinese)
799 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bamum)
800 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bassa_vah)
801 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(batak)
802 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bengali)
803 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bhaiksuki)
804 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bopomofo)
805 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(brahmi)
806 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(braille)
807 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buginese)
808 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buhid)
809 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(chakma)
810 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(canadian_aboriginal)
811 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(carian)
812 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cham)
813 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cherokee)
814 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(chorasmian)
815 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(coptic)
816 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cypro_minoan)
817 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cypriot)
818 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cyrillic)
819 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(devanagari)
820 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(dives_akuru)
821 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(dogra)
822 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(deseret)
823 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(duployan)
824 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(egyptian_hieroglyphs)
825 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(elbasan)
826 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(elymaic)
827 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ethiopic)
828 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(georgian)
829 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(glagolitic)
830 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gunjala_gondi)
831 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(masaram_gondi)
832 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gothic)
833 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(grantha)
834 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(greek)
835 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gujarati)
836 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gurmukhi)
837 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hangul)
838 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(han)
839 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hanunoo)
840 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hatran)
841 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hebrew)
842 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hiragana)
843 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(anatolian_hieroglyphs)
844 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(pahawh_hmong)
845 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nyiakeng_puachue_hmong)
846 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana_or_hiragana)
847 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_hungarian)
848 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_italic)
849 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(javanese)
850 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kayah_li)
851 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana)
852 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kawi)
853 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kharoshthi)
854 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khmer)
855 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khojki)
856 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khitan_small_script)
857 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kannada)
858 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kaithi)
859 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_tham)
860 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lao)
861 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(latin)
862 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lepcha)
863 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(limbu)
864 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(linear_a)
865 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(linear_b)
866 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lisu)
867 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lycian)
868 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lydian)
869 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mahajani)
870 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(makasar)
871 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mandaic)
872 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(manichaean)
873 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(marchen)
874 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(medefaidrin)
875 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mende_kikakui)
876 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(meroitic_cursive)
877 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(meroitic_hieroglyphs)
878 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(malayalam)
879 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modi)
880 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mongolian)
881 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mro)
882 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(meetei_mayek)
883 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(multani)
884 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(myanmar)
885 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nag_mundari)
886 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nandinagari)
887 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_north_arabian)
888 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nabataean)
889 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(newa)
890 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nko)
891 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nushu)
892 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ogham)
893 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ol_chiki)
894 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_turkic)
895 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(oriya)
896 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(osage)
897 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(osmanya)
898 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_uyghur)
899 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(palmyrene)
900 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(pau_cin_hau)
901 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_permic)
902 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phags_pa)
903 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_pahlavi)
904 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(psalter_pahlavi)
905 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phoenician)
906 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(miao)
907 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_parthian)
908 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(rejang)
909 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hanifi_rohingya)
910 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(runic)
911 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(samaritan)
912 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_south_arabian)
913 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(saurashtra)
914 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(signwriting)
915 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(shavian)
916 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sharada)
917 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(siddham)
918 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khudawadi)
919 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sinhala)
920 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sogdian)
921 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_sogdian)
922 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sora_sompeng)
923 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(soyombo)
924 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sundanese)
925 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syloti_nagri)
926 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syriac)
927 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagbanwa)
928 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(takri)
929 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_le)
930 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(new_tai_lue)
931 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tamil)
932 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tangut)
933 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_viet)
934 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(telugu)
935 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tifinagh)
936 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagalog)
937 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thaana)
938 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thai)
939 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tibetan)
940 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tirhuta)
941 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tangsa)
942 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(toto)
943 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ugaritic)
944 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(vai)
945 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(vithkuqi)
946 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(warang_citi)
947 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(wancho)
948 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_persian)
949 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cuneiform)
950 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(yezidi)
951 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(yi)
952 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(zanabazar_square)
953 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inherited)
954 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(common)
955 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unknown)
956
957#undef BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT
958#endif
959
960 };
961}}}
962
963namespace boost { namespace spirit { namespace traits
964{
965 ///////////////////////////////////////////////////////////////////////////
966 template <typename CharParam, typename CharEncoding>
967 struct ischar
968 {
969 static bool call(CharParam const& ch)
970 {
971 return CharEncoding::ischar(int(ch));
972 }
973 };
974}}}
975
976#if defined(BOOST_MSVC)
977# pragma warning(pop)
978#endif
979
980#endif
981
982
983