Chris@16: /*============================================================================= Chris@16: Copyright (c) 2001-2011 Joel de Guzman Chris@16: Copyright (c) 2001-2011 Hartmut Kaiser Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: #if !defined(BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM) Chris@16: #define BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM Chris@16: Chris@16: #if defined(_MSC_VER) Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: Chris@16: #include // needs to be included before proto Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #if defined(BOOST_MSVC) Chris@16: # pragma warning(push) Chris@16: # pragma warning(disable: 4800) // 'int' : forcing value to bool 'true' or 'false' warning Chris@16: #endif Chris@16: Chris@16: namespace boost { namespace spirit { namespace detail Chris@16: { Chris@16: // Here's the thing... typical encodings (except ASCII) deal with unsigned Chris@16: // integers > 127. ASCII uses only 127. Yet, most char and wchar_t are signed. Chris@16: // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you Chris@16: // cast this to an unsigned int with 32 bits, you get 4294967273! Chris@16: // Chris@16: // The trick is to cast to an unsigned version of the source char first Chris@16: // before casting to the target. {P.S. Don't worry about the code, the Chris@16: // optimizer will optimize the if-else branches} Chris@16: Chris@16: template Chris@16: TargetChar cast_char(SourceChar ch) Chris@16: { Chris@16: if (is_signed::value != is_signed::value) Chris@16: { Chris@16: if (is_signed::value) Chris@16: { Chris@16: // source is signed, target is unsigned Chris@16: typedef typename make_unsigned::type USourceChar; Chris@16: return TargetChar(USourceChar(ch)); Chris@16: } Chris@16: else Chris@16: { Chris@16: // source is unsigned, target is signed Chris@16: typedef typename make_signed::type SSourceChar; Chris@16: return TargetChar(SSourceChar(ch)); Chris@16: } Chris@16: } Chris@16: else Chris@16: { Chris@16: // source and target has same signedness Chris@16: return TargetChar(ch); // just cast Chris@16: } Chris@16: } Chris@16: }}} Chris@16: Chris@16: namespace boost { namespace spirit { namespace tag Chris@16: { Chris@16: struct char_ { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct string { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // classification tags Chris@16: struct alnum { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct alpha { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct digit { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct xdigit { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct cntrl { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct graph { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct print { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct punct { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct space { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct blank { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // classification/conversion tags Chris@16: struct no_case { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lower { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct upper { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lowernum { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct uppernum { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct ucs4 { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct encoding { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: #if defined(BOOST_SPIRIT_UNICODE) Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Major Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: struct letter { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct mark { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct number { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct separator { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct other { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct symbol { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode General Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: struct uppercase_letter { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lowercase_letter { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct titlecase_letter { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct modifier_letter { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct other_letter { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: struct nonspacing_mark { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct enclosing_mark { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct spacing_mark { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: struct decimal_number { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct letter_number { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct other_number { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: struct space_separator { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct line_separator { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct paragraph_separator { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: struct control { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct format { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct private_use { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct surrogate { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct unassigned { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: struct dash_punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct open_punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct close_punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct connector_punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct other_punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct initial_punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct final_punctuation { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: struct math_symbol { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct currency_symbol { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct modifier_symbol { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct other_symbol { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Derived Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: struct alphabetic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct uppercase { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lowercase { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct white_space { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct hex_digit { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct noncharacter_code_point { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct default_ignorable_code_point { BOOST_SPIRIT_IS_TAG() }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Scripts Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: struct arabic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct imperial_aramaic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct armenian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct avestan { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct balinese { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct bamum { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct bengali { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct bopomofo { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct braille { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct buginese { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct buhid { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct canadian_aboriginal { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct carian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct cham { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct cherokee { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct coptic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct cypriot { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct cyrillic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct devanagari { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct deseret { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct egyptian_hieroglyphs { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct ethiopic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct georgian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct glagolitic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct gothic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct greek { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct gujarati { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct gurmukhi { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct hangul { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct han { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct hanunoo { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct hebrew { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct hiragana { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct katakana_or_hiragana { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct old_italic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct javanese { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct kayah_li { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct katakana { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct kharoshthi { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct khmer { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct kannada { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct kaithi { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tai_tham { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lao { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct latin { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lepcha { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct limbu { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct linear_b { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lisu { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lycian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct lydian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct malayalam { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct mongolian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct meetei_mayek { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct myanmar { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct nko { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct ogham { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct ol_chiki { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct old_turkic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct oriya { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct osmanya { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct phags_pa { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct inscriptional_pahlavi { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct phoenician { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct inscriptional_parthian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct rejang { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct runic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct samaritan { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct old_south_arabian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct saurashtra { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct shavian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct sinhala { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct sundanese { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct syloti_nagri { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct syriac { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tagbanwa { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tai_le { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct new_tai_lue { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tamil { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tai_viet { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct telugu { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tifinagh { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tagalog { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct thaana { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct thai { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct tibetan { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct ugaritic { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct vai { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct old_persian { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct cuneiform { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct yi { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct inherited { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct common { BOOST_SPIRIT_IS_TAG() }; Chris@16: struct unknown { BOOST_SPIRIT_IS_TAG() }; Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // This composite tag type encodes both the character Chris@16: // set and the specific char tag (used for classification Chris@16: // or conversion). char_code_base and char_encoding_base Chris@16: // can be used to test for modifier membership (see modifier.hpp) Chris@16: template Chris@16: struct char_code_base {}; Chris@16: Chris@16: template Chris@16: struct char_encoding_base {}; Chris@16: Chris@16: template Chris@16: struct char_code Chris@16: : char_code_base, char_encoding_base Chris@16: { Chris@16: BOOST_SPIRIT_IS_TAG() Chris@16: typedef CharEncoding char_encoding; // e.g. ascii Chris@16: typedef CharClass char_class; // e.g. tag::alnum Chris@16: }; Chris@16: }}} Chris@16: Chris@16: namespace boost { namespace spirit { namespace char_class Chris@16: { Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Test characters for classification Chris@16: template Chris@16: struct classify Chris@16: { Chris@16: typedef typename CharEncoding::char_type char_type; Chris@16: Chris@16: #define BOOST_SPIRIT_CLASSIFY(name, isname) \ Chris@16: template \ Chris@16: static bool \ Chris@16: is(tag::name, Char ch) \ Chris@16: { \ Chris@16: return CharEncoding::isname \ Chris@16: BOOST_PREVENT_MACRO_SUBSTITUTION \ Chris@16: (detail::cast_char(ch)); \ Chris@16: } \ Chris@16: /***/ Chris@16: Chris@16: BOOST_SPIRIT_CLASSIFY(char_, ischar) Chris@16: BOOST_SPIRIT_CLASSIFY(alnum, isalnum) Chris@16: BOOST_SPIRIT_CLASSIFY(alpha, isalpha) Chris@16: BOOST_SPIRIT_CLASSIFY(digit, isdigit) Chris@16: BOOST_SPIRIT_CLASSIFY(xdigit, isxdigit) Chris@16: BOOST_SPIRIT_CLASSIFY(cntrl, iscntrl) Chris@16: BOOST_SPIRIT_CLASSIFY(graph, isgraph) Chris@16: BOOST_SPIRIT_CLASSIFY(lower, islower) Chris@16: BOOST_SPIRIT_CLASSIFY(print, isprint) Chris@16: BOOST_SPIRIT_CLASSIFY(punct, ispunct) Chris@16: BOOST_SPIRIT_CLASSIFY(space, isspace) Chris@16: BOOST_SPIRIT_CLASSIFY(blank, isblank) Chris@16: BOOST_SPIRIT_CLASSIFY(upper, isupper) Chris@16: Chris@16: #undef BOOST_SPIRIT_CLASSIFY Chris@16: Chris@16: template Chris@16: static bool Chris@16: is(tag::lowernum, Char ch) Chris@16: { Chris@16: return CharEncoding::islower(detail::cast_char(ch)) || Chris@16: CharEncoding::isdigit(detail::cast_char(ch)); Chris@16: } Chris@16: Chris@16: template Chris@16: static bool Chris@16: is(tag::uppernum, Char ch) Chris@16: { Chris@16: return CharEncoding::isupper(detail::cast_char(ch)) || Chris@16: CharEncoding::isdigit(detail::cast_char(ch)); Chris@16: } Chris@16: Chris@16: #if defined(BOOST_SPIRIT_UNICODE) Chris@16: Chris@16: #define BOOST_SPIRIT_UNICODE_CLASSIFY(name) \ Chris@16: template \ Chris@16: static bool \ Chris@16: is(tag::name, Char ch) \ Chris@16: { \ Chris@16: return CharEncoding::is_##name(detail::cast_char(ch)); \ Chris@16: } \ Chris@16: /***/ Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Major Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(mark) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(number) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(separator) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(other) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(symbol) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode General Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(titlecase_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(other_letter) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(nonspacing_mark) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(enclosing_mark) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(spacing_mark) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(decimal_number) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(letter_number) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(other_number) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(space_separator) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(line_separator) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(paragraph_separator) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(control) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(format) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(private_use) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(surrogate) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(unassigned) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(dash_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(open_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(close_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(connector_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(other_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(initial_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(final_punctuation) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(math_symbol) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(currency_symbol) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_symbol) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(other_symbol) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Derived Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(alphabetic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(white_space) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(hex_digit) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(noncharacter_code_point) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(default_ignorable_code_point) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Scripts Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(arabic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(imperial_aramaic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(armenian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(avestan) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(balinese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(bamum) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(bengali) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(bopomofo) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(braille) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(buginese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(buhid) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(canadian_aboriginal) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(carian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(cham) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(cherokee) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(coptic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(cypriot) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(cyrillic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(devanagari) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(deseret) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(egyptian_hieroglyphs) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(ethiopic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(georgian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(glagolitic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(gothic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(greek) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(gujarati) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(gurmukhi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(hangul) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(han) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(hanunoo) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(hebrew) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(hiragana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(katakana_or_hiragana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(old_italic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(javanese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(kayah_li) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(katakana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(kharoshthi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(khmer) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(kannada) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(kaithi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tai_tham) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(lao) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(latin) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(lepcha) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(limbu) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(linear_b) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(lisu) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(lycian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(lydian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(malayalam) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(mongolian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(meetei_mayek) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(myanmar) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(nko) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(ogham) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(ol_chiki) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(old_turkic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(oriya) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(osmanya) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(phags_pa) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_pahlavi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(phoenician) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_parthian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(rejang) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(runic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(samaritan) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(old_south_arabian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(saurashtra) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(shavian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(sinhala) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(sundanese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(syloti_nagri) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(syriac) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tagbanwa) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tai_le) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(new_tai_lue) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tamil) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tai_viet) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(telugu) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tifinagh) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tagalog) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(thaana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(thai) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(tibetan) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(ugaritic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(vai) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(old_persian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(cuneiform) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(yi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(inherited) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(common) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY(unknown) Chris@16: Chris@16: #undef BOOST_SPIRIT_UNICODE_CLASSIFY Chris@16: #endif Chris@16: Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Convert characters Chris@16: template Chris@16: struct convert Chris@16: { Chris@16: typedef typename CharEncoding::char_type char_type; Chris@16: Chris@16: template Chris@16: static Char Chris@16: to(tag::lower, Char ch) Chris@16: { Chris@16: return static_cast( Chris@16: CharEncoding::tolower(detail::cast_char(ch))); Chris@16: } Chris@16: Chris@16: template Chris@16: static Char Chris@16: to(tag::upper, Char ch) Chris@16: { Chris@16: return static_cast( Chris@16: CharEncoding::toupper(detail::cast_char(ch))); Chris@16: } Chris@16: Chris@16: template Chris@16: static Char Chris@16: to(tag::ucs4, Char ch) Chris@16: { Chris@16: return static_cast( Chris@16: CharEncoding::toucs4(detail::cast_char(ch))); Chris@16: } Chris@16: Chris@16: template Chris@16: static Char Chris@16: to(unused_type, Char ch) Chris@16: { Chris@16: return ch; Chris@16: } Chris@16: }; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Info on character classification Chris@16: template Chris@16: struct what Chris@16: { Chris@16: #define BOOST_SPIRIT_CLASSIFY_WHAT(name, isname) \ Chris@16: static char const* is(tag::name) \ Chris@16: { \ Chris@16: return isname; \ Chris@16: } \ Chris@16: /***/ Chris@16: Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(char_, "char") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(alnum, "alnum") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(alpha, "alpha") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(digit, "digit") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(xdigit, "xdigit") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(cntrl, "cntrl") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(graph, "graph") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(lower, "lower") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(lowernum, "lowernum") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(print, "print") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(punct, "punct") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(space, "space") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(blank, "blank") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(upper, "upper") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(uppernum, "uppernum") Chris@16: BOOST_SPIRIT_CLASSIFY_WHAT(ucs4, "ucs4") Chris@16: Chris@16: #undef BOOST_SPIRIT_CLASSIFY_WHAT Chris@16: Chris@16: #if defined(BOOST_SPIRIT_UNICODE) Chris@16: Chris@16: #define BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(name) \ Chris@16: static char const* is(tag::name) \ Chris@16: { \ Chris@16: return BOOST_PP_STRINGIZE(name); \ Chris@16: } \ Chris@16: /***/ Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Major Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mark) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(number) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(separator) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(symbol) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode General Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(titlecase_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_letter) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_letter) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nonspacing_mark) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(enclosing_mark) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(spacing_mark) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(decimal_number) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter_number) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_number) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(space_separator) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(line_separator) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(paragraph_separator) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(control) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(format) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(private_use) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(surrogate) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unassigned) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(dash_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(open_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(close_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(connector_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(initial_punctuation) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(final_punctuation) Chris@16: Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(math_symbol) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(currency_symbol) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_symbol) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_symbol) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Derived Categories Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(alphabetic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(white_space) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hex_digit) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(noncharacter_code_point) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(default_ignorable_code_point) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Unicode Scripts Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(arabic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(imperial_aramaic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(armenian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(avestan) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(balinese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bamum) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bengali) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bopomofo) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(braille) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buginese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buhid) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(canadian_aboriginal) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(carian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cham) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cherokee) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(coptic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cypriot) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cyrillic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(devanagari) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(deseret) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(egyptian_hieroglyphs) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ethiopic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(georgian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(glagolitic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gothic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(greek) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gujarati) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gurmukhi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hangul) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(han) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hanunoo) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hebrew) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hiragana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana_or_hiragana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_italic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(javanese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kayah_li) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kharoshthi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khmer) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kannada) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kaithi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_tham) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lao) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(latin) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lepcha) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(limbu) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(linear_b) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lisu) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lycian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lydian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(malayalam) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mongolian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(meetei_mayek) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(myanmar) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nko) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ogham) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ol_chiki) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_turkic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(oriya) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(osmanya) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phags_pa) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_pahlavi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phoenician) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_parthian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(rejang) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(runic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(samaritan) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_south_arabian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(saurashtra) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(shavian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sinhala) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sundanese) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syloti_nagri) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syriac) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagbanwa) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_le) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(new_tai_lue) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tamil) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_viet) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(telugu) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tifinagh) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagalog) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thaana) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thai) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tibetan) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ugaritic) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(vai) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_persian) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cuneiform) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(yi) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inherited) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(common) Chris@16: BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unknown) Chris@16: Chris@16: #undef BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT Chris@16: #endif Chris@16: Chris@16: }; Chris@16: }}} Chris@16: Chris@16: namespace boost { namespace spirit { namespace traits Chris@16: { Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // This meta-function evaluates to mpl::true_ if the function Chris@16: // char_encoding::ischar() needs to be called to ensure correct matching. Chris@16: // This happens mainly if the character type returned from the underlying Chris@16: // iterator is larger than the character type of the used character Chris@16: // encoding. Additionally, this meta-function provides a customization Chris@16: // point for the lexer library to enforce this behavior while parsing Chris@16: // a token stream. Chris@16: template Chris@16: struct mustcheck_ischar Chris@16: : mpl::bool_<(sizeof(Char) > sizeof(BaseChar)) ? true : false> {}; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // The following template calls char_encoding::ischar, if necessary Chris@16: template ::value> Chris@16: struct ischar Chris@16: { Chris@16: static bool call(CharParam) Chris@16: { Chris@16: return true; Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct ischar Chris@16: { Chris@16: static bool call(CharParam const& ch) Chris@16: { Chris@16: return CharEncoding::ischar(int(ch)); Chris@16: } Chris@16: }; Chris@16: Chris@16: }}} Chris@16: Chris@16: #if defined(BOOST_MSVC) Chris@16: # pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: #endif Chris@16: Chris@16: