annotate DEPENDENCIES/generic/include/boost/spirit/home/support/char_class.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2001-2011 Joel de Guzman
Chris@16 3 Copyright (c) 2001-2011 Hartmut Kaiser
Chris@16 4
Chris@16 5 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 =============================================================================*/
Chris@16 8 #if !defined(BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM)
Chris@16 9 #define BOOST_SPIRIT_CHAR_CLASS_NOVEMBER_10_2006_0907AM
Chris@16 10
Chris@16 11 #if defined(_MSC_VER)
Chris@16 12 #pragma once
Chris@16 13 #endif
Chris@16 14
Chris@16 15 #include <string>
Chris@16 16
Chris@16 17 #include <boost/spirit/include/phoenix_limits.hpp> // needs to be included before proto
Chris@16 18 #include <boost/proto/proto.hpp>
Chris@16 19 #include <boost/config.hpp>
Chris@16 20 #include <boost/mpl/bool.hpp>
Chris@16 21 #include <boost/spirit/home/support/unused.hpp>
Chris@16 22 #include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
Chris@16 23 #include <boost/type_traits/is_signed.hpp>
Chris@16 24 #include <boost/type_traits/make_unsigned.hpp>
Chris@16 25 #include <boost/type_traits/make_signed.hpp>
Chris@16 26
Chris@16 27 #if defined(BOOST_MSVC)
Chris@16 28 # pragma warning(push)
Chris@16 29 # pragma warning(disable: 4800) // 'int' : forcing value to bool 'true' or 'false' warning
Chris@16 30 #endif
Chris@16 31
Chris@16 32 namespace boost { namespace spirit { namespace detail
Chris@16 33 {
Chris@16 34 // Here's the thing... typical encodings (except ASCII) deal with unsigned
Chris@16 35 // integers > 127. ASCII uses only 127. Yet, most char and wchar_t are signed.
Chris@16 36 // Thus, a char with value > 127 is negative (e.g. char 233 is -23). When you
Chris@16 37 // cast this to an unsigned int with 32 bits, you get 4294967273!
Chris@16 38 //
Chris@16 39 // The trick is to cast to an unsigned version of the source char first
Chris@16 40 // before casting to the target. {P.S. Don't worry about the code, the
Chris@16 41 // optimizer will optimize the if-else branches}
Chris@16 42
Chris@16 43 template <typename TargetChar, typename SourceChar>
Chris@16 44 TargetChar cast_char(SourceChar ch)
Chris@16 45 {
Chris@16 46 if (is_signed<TargetChar>::value != is_signed<SourceChar>::value)
Chris@16 47 {
Chris@16 48 if (is_signed<SourceChar>::value)
Chris@16 49 {
Chris@16 50 // source is signed, target is unsigned
Chris@16 51 typedef typename make_unsigned<SourceChar>::type USourceChar;
Chris@16 52 return TargetChar(USourceChar(ch));
Chris@16 53 }
Chris@16 54 else
Chris@16 55 {
Chris@16 56 // source is unsigned, target is signed
Chris@16 57 typedef typename make_signed<SourceChar>::type SSourceChar;
Chris@16 58 return TargetChar(SSourceChar(ch));
Chris@16 59 }
Chris@16 60 }
Chris@16 61 else
Chris@16 62 {
Chris@16 63 // source and target has same signedness
Chris@16 64 return TargetChar(ch); // just cast
Chris@16 65 }
Chris@16 66 }
Chris@16 67 }}}
Chris@16 68
Chris@16 69 namespace boost { namespace spirit { namespace tag
Chris@16 70 {
Chris@16 71 struct char_ { BOOST_SPIRIT_IS_TAG() };
Chris@16 72 struct string { BOOST_SPIRIT_IS_TAG() };
Chris@16 73
Chris@16 74 ///////////////////////////////////////////////////////////////////////////
Chris@16 75 // classification tags
Chris@16 76 struct alnum { BOOST_SPIRIT_IS_TAG() };
Chris@16 77 struct alpha { BOOST_SPIRIT_IS_TAG() };
Chris@16 78 struct digit { BOOST_SPIRIT_IS_TAG() };
Chris@16 79 struct xdigit { BOOST_SPIRIT_IS_TAG() };
Chris@16 80 struct cntrl { BOOST_SPIRIT_IS_TAG() };
Chris@16 81 struct graph { BOOST_SPIRIT_IS_TAG() };
Chris@16 82 struct print { BOOST_SPIRIT_IS_TAG() };
Chris@16 83 struct punct { BOOST_SPIRIT_IS_TAG() };
Chris@16 84 struct space { BOOST_SPIRIT_IS_TAG() };
Chris@16 85 struct blank { BOOST_SPIRIT_IS_TAG() };
Chris@16 86
Chris@16 87 ///////////////////////////////////////////////////////////////////////////
Chris@16 88 // classification/conversion tags
Chris@16 89 struct no_case { BOOST_SPIRIT_IS_TAG() };
Chris@16 90 struct lower { BOOST_SPIRIT_IS_TAG() };
Chris@16 91 struct upper { BOOST_SPIRIT_IS_TAG() };
Chris@16 92 struct lowernum { BOOST_SPIRIT_IS_TAG() };
Chris@16 93 struct uppernum { BOOST_SPIRIT_IS_TAG() };
Chris@16 94 struct ucs4 { BOOST_SPIRIT_IS_TAG() };
Chris@16 95 struct encoding { BOOST_SPIRIT_IS_TAG() };
Chris@16 96
Chris@16 97 #if defined(BOOST_SPIRIT_UNICODE)
Chris@16 98 ///////////////////////////////////////////////////////////////////////////
Chris@16 99 // Unicode Major Categories
Chris@16 100 ///////////////////////////////////////////////////////////////////////////
Chris@16 101 struct letter { BOOST_SPIRIT_IS_TAG() };
Chris@16 102 struct mark { BOOST_SPIRIT_IS_TAG() };
Chris@16 103 struct number { BOOST_SPIRIT_IS_TAG() };
Chris@16 104 struct separator { BOOST_SPIRIT_IS_TAG() };
Chris@16 105 struct other { BOOST_SPIRIT_IS_TAG() };
Chris@16 106 struct punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 107 struct symbol { BOOST_SPIRIT_IS_TAG() };
Chris@16 108
Chris@16 109 ///////////////////////////////////////////////////////////////////////////
Chris@16 110 // Unicode General Categories
Chris@16 111 ///////////////////////////////////////////////////////////////////////////
Chris@16 112 struct uppercase_letter { BOOST_SPIRIT_IS_TAG() };
Chris@16 113 struct lowercase_letter { BOOST_SPIRIT_IS_TAG() };
Chris@16 114 struct titlecase_letter { BOOST_SPIRIT_IS_TAG() };
Chris@16 115 struct modifier_letter { BOOST_SPIRIT_IS_TAG() };
Chris@16 116 struct other_letter { BOOST_SPIRIT_IS_TAG() };
Chris@16 117
Chris@16 118 struct nonspacing_mark { BOOST_SPIRIT_IS_TAG() };
Chris@16 119 struct enclosing_mark { BOOST_SPIRIT_IS_TAG() };
Chris@16 120 struct spacing_mark { BOOST_SPIRIT_IS_TAG() };
Chris@16 121
Chris@16 122 struct decimal_number { BOOST_SPIRIT_IS_TAG() };
Chris@16 123 struct letter_number { BOOST_SPIRIT_IS_TAG() };
Chris@16 124 struct other_number { BOOST_SPIRIT_IS_TAG() };
Chris@16 125
Chris@16 126 struct space_separator { BOOST_SPIRIT_IS_TAG() };
Chris@16 127 struct line_separator { BOOST_SPIRIT_IS_TAG() };
Chris@16 128 struct paragraph_separator { BOOST_SPIRIT_IS_TAG() };
Chris@16 129
Chris@16 130 struct control { BOOST_SPIRIT_IS_TAG() };
Chris@16 131 struct format { BOOST_SPIRIT_IS_TAG() };
Chris@16 132 struct private_use { BOOST_SPIRIT_IS_TAG() };
Chris@16 133 struct surrogate { BOOST_SPIRIT_IS_TAG() };
Chris@16 134 struct unassigned { BOOST_SPIRIT_IS_TAG() };
Chris@16 135
Chris@16 136 struct dash_punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 137 struct open_punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 138 struct close_punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 139 struct connector_punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 140 struct other_punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 141 struct initial_punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 142 struct final_punctuation { BOOST_SPIRIT_IS_TAG() };
Chris@16 143
Chris@16 144 struct math_symbol { BOOST_SPIRIT_IS_TAG() };
Chris@16 145 struct currency_symbol { BOOST_SPIRIT_IS_TAG() };
Chris@16 146 struct modifier_symbol { BOOST_SPIRIT_IS_TAG() };
Chris@16 147 struct other_symbol { BOOST_SPIRIT_IS_TAG() };
Chris@16 148
Chris@16 149 ///////////////////////////////////////////////////////////////////////////
Chris@16 150 // Unicode Derived Categories
Chris@16 151 ///////////////////////////////////////////////////////////////////////////
Chris@16 152 struct alphabetic { BOOST_SPIRIT_IS_TAG() };
Chris@16 153 struct uppercase { BOOST_SPIRIT_IS_TAG() };
Chris@16 154 struct lowercase { BOOST_SPIRIT_IS_TAG() };
Chris@16 155 struct white_space { BOOST_SPIRIT_IS_TAG() };
Chris@16 156 struct hex_digit { BOOST_SPIRIT_IS_TAG() };
Chris@16 157 struct noncharacter_code_point { BOOST_SPIRIT_IS_TAG() };
Chris@16 158 struct default_ignorable_code_point { BOOST_SPIRIT_IS_TAG() };
Chris@16 159
Chris@16 160 ///////////////////////////////////////////////////////////////////////////
Chris@16 161 // Unicode Scripts
Chris@16 162 ///////////////////////////////////////////////////////////////////////////
Chris@16 163 struct arabic { BOOST_SPIRIT_IS_TAG() };
Chris@16 164 struct imperial_aramaic { BOOST_SPIRIT_IS_TAG() };
Chris@16 165 struct armenian { BOOST_SPIRIT_IS_TAG() };
Chris@16 166 struct avestan { BOOST_SPIRIT_IS_TAG() };
Chris@16 167 struct balinese { BOOST_SPIRIT_IS_TAG() };
Chris@16 168 struct bamum { BOOST_SPIRIT_IS_TAG() };
Chris@16 169 struct bengali { BOOST_SPIRIT_IS_TAG() };
Chris@16 170 struct bopomofo { BOOST_SPIRIT_IS_TAG() };
Chris@16 171 struct braille { BOOST_SPIRIT_IS_TAG() };
Chris@16 172 struct buginese { BOOST_SPIRIT_IS_TAG() };
Chris@16 173 struct buhid { BOOST_SPIRIT_IS_TAG() };
Chris@16 174 struct canadian_aboriginal { BOOST_SPIRIT_IS_TAG() };
Chris@16 175 struct carian { BOOST_SPIRIT_IS_TAG() };
Chris@16 176 struct cham { BOOST_SPIRIT_IS_TAG() };
Chris@16 177 struct cherokee { BOOST_SPIRIT_IS_TAG() };
Chris@16 178 struct coptic { BOOST_SPIRIT_IS_TAG() };
Chris@16 179 struct cypriot { BOOST_SPIRIT_IS_TAG() };
Chris@16 180 struct cyrillic { BOOST_SPIRIT_IS_TAG() };
Chris@16 181 struct devanagari { BOOST_SPIRIT_IS_TAG() };
Chris@16 182 struct deseret { BOOST_SPIRIT_IS_TAG() };
Chris@16 183 struct egyptian_hieroglyphs { BOOST_SPIRIT_IS_TAG() };
Chris@16 184 struct ethiopic { BOOST_SPIRIT_IS_TAG() };
Chris@16 185 struct georgian { BOOST_SPIRIT_IS_TAG() };
Chris@16 186 struct glagolitic { BOOST_SPIRIT_IS_TAG() };
Chris@16 187 struct gothic { BOOST_SPIRIT_IS_TAG() };
Chris@16 188 struct greek { BOOST_SPIRIT_IS_TAG() };
Chris@16 189 struct gujarati { BOOST_SPIRIT_IS_TAG() };
Chris@16 190 struct gurmukhi { BOOST_SPIRIT_IS_TAG() };
Chris@16 191 struct hangul { BOOST_SPIRIT_IS_TAG() };
Chris@16 192 struct han { BOOST_SPIRIT_IS_TAG() };
Chris@16 193 struct hanunoo { BOOST_SPIRIT_IS_TAG() };
Chris@16 194 struct hebrew { BOOST_SPIRIT_IS_TAG() };
Chris@16 195 struct hiragana { BOOST_SPIRIT_IS_TAG() };
Chris@16 196 struct katakana_or_hiragana { BOOST_SPIRIT_IS_TAG() };
Chris@16 197 struct old_italic { BOOST_SPIRIT_IS_TAG() };
Chris@16 198 struct javanese { BOOST_SPIRIT_IS_TAG() };
Chris@16 199 struct kayah_li { BOOST_SPIRIT_IS_TAG() };
Chris@16 200 struct katakana { BOOST_SPIRIT_IS_TAG() };
Chris@16 201 struct kharoshthi { BOOST_SPIRIT_IS_TAG() };
Chris@16 202 struct khmer { BOOST_SPIRIT_IS_TAG() };
Chris@16 203 struct kannada { BOOST_SPIRIT_IS_TAG() };
Chris@16 204 struct kaithi { BOOST_SPIRIT_IS_TAG() };
Chris@16 205 struct tai_tham { BOOST_SPIRIT_IS_TAG() };
Chris@16 206 struct lao { BOOST_SPIRIT_IS_TAG() };
Chris@16 207 struct latin { BOOST_SPIRIT_IS_TAG() };
Chris@16 208 struct lepcha { BOOST_SPIRIT_IS_TAG() };
Chris@16 209 struct limbu { BOOST_SPIRIT_IS_TAG() };
Chris@16 210 struct linear_b { BOOST_SPIRIT_IS_TAG() };
Chris@16 211 struct lisu { BOOST_SPIRIT_IS_TAG() };
Chris@16 212 struct lycian { BOOST_SPIRIT_IS_TAG() };
Chris@16 213 struct lydian { BOOST_SPIRIT_IS_TAG() };
Chris@16 214 struct malayalam { BOOST_SPIRIT_IS_TAG() };
Chris@16 215 struct mongolian { BOOST_SPIRIT_IS_TAG() };
Chris@16 216 struct meetei_mayek { BOOST_SPIRIT_IS_TAG() };
Chris@16 217 struct myanmar { BOOST_SPIRIT_IS_TAG() };
Chris@16 218 struct nko { BOOST_SPIRIT_IS_TAG() };
Chris@16 219 struct ogham { BOOST_SPIRIT_IS_TAG() };
Chris@16 220 struct ol_chiki { BOOST_SPIRIT_IS_TAG() };
Chris@16 221 struct old_turkic { BOOST_SPIRIT_IS_TAG() };
Chris@16 222 struct oriya { BOOST_SPIRIT_IS_TAG() };
Chris@16 223 struct osmanya { BOOST_SPIRIT_IS_TAG() };
Chris@16 224 struct phags_pa { BOOST_SPIRIT_IS_TAG() };
Chris@16 225 struct inscriptional_pahlavi { BOOST_SPIRIT_IS_TAG() };
Chris@16 226 struct phoenician { BOOST_SPIRIT_IS_TAG() };
Chris@16 227 struct inscriptional_parthian { BOOST_SPIRIT_IS_TAG() };
Chris@16 228 struct rejang { BOOST_SPIRIT_IS_TAG() };
Chris@16 229 struct runic { BOOST_SPIRIT_IS_TAG() };
Chris@16 230 struct samaritan { BOOST_SPIRIT_IS_TAG() };
Chris@16 231 struct old_south_arabian { BOOST_SPIRIT_IS_TAG() };
Chris@16 232 struct saurashtra { BOOST_SPIRIT_IS_TAG() };
Chris@16 233 struct shavian { BOOST_SPIRIT_IS_TAG() };
Chris@16 234 struct sinhala { BOOST_SPIRIT_IS_TAG() };
Chris@16 235 struct sundanese { BOOST_SPIRIT_IS_TAG() };
Chris@16 236 struct syloti_nagri { BOOST_SPIRIT_IS_TAG() };
Chris@16 237 struct syriac { BOOST_SPIRIT_IS_TAG() };
Chris@16 238 struct tagbanwa { BOOST_SPIRIT_IS_TAG() };
Chris@16 239 struct tai_le { BOOST_SPIRIT_IS_TAG() };
Chris@16 240 struct new_tai_lue { BOOST_SPIRIT_IS_TAG() };
Chris@16 241 struct tamil { BOOST_SPIRIT_IS_TAG() };
Chris@16 242 struct tai_viet { BOOST_SPIRIT_IS_TAG() };
Chris@16 243 struct telugu { BOOST_SPIRIT_IS_TAG() };
Chris@16 244 struct tifinagh { BOOST_SPIRIT_IS_TAG() };
Chris@16 245 struct tagalog { BOOST_SPIRIT_IS_TAG() };
Chris@16 246 struct thaana { BOOST_SPIRIT_IS_TAG() };
Chris@16 247 struct thai { BOOST_SPIRIT_IS_TAG() };
Chris@16 248 struct tibetan { BOOST_SPIRIT_IS_TAG() };
Chris@16 249 struct ugaritic { BOOST_SPIRIT_IS_TAG() };
Chris@16 250 struct vai { BOOST_SPIRIT_IS_TAG() };
Chris@16 251 struct old_persian { BOOST_SPIRIT_IS_TAG() };
Chris@16 252 struct cuneiform { BOOST_SPIRIT_IS_TAG() };
Chris@16 253 struct yi { BOOST_SPIRIT_IS_TAG() };
Chris@16 254 struct inherited { BOOST_SPIRIT_IS_TAG() };
Chris@16 255 struct common { BOOST_SPIRIT_IS_TAG() };
Chris@16 256 struct unknown { BOOST_SPIRIT_IS_TAG() };
Chris@16 257 #endif
Chris@16 258
Chris@16 259 ///////////////////////////////////////////////////////////////////////////
Chris@16 260 // This composite tag type encodes both the character
Chris@16 261 // set and the specific char tag (used for classification
Chris@16 262 // or conversion). char_code_base and char_encoding_base
Chris@16 263 // can be used to test for modifier membership (see modifier.hpp)
Chris@16 264 template <typename CharClass>
Chris@16 265 struct char_code_base {};
Chris@16 266
Chris@16 267 template <typename CharEncoding>
Chris@16 268 struct char_encoding_base {};
Chris@16 269
Chris@16 270 template <typename CharClass, typename CharEncoding>
Chris@16 271 struct char_code
Chris@16 272 : char_code_base<CharClass>, char_encoding_base<CharEncoding>
Chris@16 273 {
Chris@16 274 BOOST_SPIRIT_IS_TAG()
Chris@16 275 typedef CharEncoding char_encoding; // e.g. ascii
Chris@16 276 typedef CharClass char_class; // e.g. tag::alnum
Chris@16 277 };
Chris@16 278 }}}
Chris@16 279
Chris@16 280 namespace boost { namespace spirit { namespace char_class
Chris@16 281 {
Chris@16 282 ///////////////////////////////////////////////////////////////////////////
Chris@16 283 // Test characters for classification
Chris@16 284 template <typename CharEncoding>
Chris@16 285 struct classify
Chris@16 286 {
Chris@16 287 typedef typename CharEncoding::char_type char_type;
Chris@16 288
Chris@16 289 #define BOOST_SPIRIT_CLASSIFY(name, isname) \
Chris@16 290 template <typename Char> \
Chris@16 291 static bool \
Chris@16 292 is(tag::name, Char ch) \
Chris@16 293 { \
Chris@16 294 return CharEncoding::isname \
Chris@16 295 BOOST_PREVENT_MACRO_SUBSTITUTION \
Chris@16 296 (detail::cast_char<char_type>(ch)); \
Chris@16 297 } \
Chris@16 298 /***/
Chris@16 299
Chris@16 300 BOOST_SPIRIT_CLASSIFY(char_, ischar)
Chris@16 301 BOOST_SPIRIT_CLASSIFY(alnum, isalnum)
Chris@16 302 BOOST_SPIRIT_CLASSIFY(alpha, isalpha)
Chris@16 303 BOOST_SPIRIT_CLASSIFY(digit, isdigit)
Chris@16 304 BOOST_SPIRIT_CLASSIFY(xdigit, isxdigit)
Chris@16 305 BOOST_SPIRIT_CLASSIFY(cntrl, iscntrl)
Chris@16 306 BOOST_SPIRIT_CLASSIFY(graph, isgraph)
Chris@16 307 BOOST_SPIRIT_CLASSIFY(lower, islower)
Chris@16 308 BOOST_SPIRIT_CLASSIFY(print, isprint)
Chris@16 309 BOOST_SPIRIT_CLASSIFY(punct, ispunct)
Chris@16 310 BOOST_SPIRIT_CLASSIFY(space, isspace)
Chris@16 311 BOOST_SPIRIT_CLASSIFY(blank, isblank)
Chris@16 312 BOOST_SPIRIT_CLASSIFY(upper, isupper)
Chris@16 313
Chris@16 314 #undef BOOST_SPIRIT_CLASSIFY
Chris@16 315
Chris@16 316 template <typename Char>
Chris@16 317 static bool
Chris@16 318 is(tag::lowernum, Char ch)
Chris@16 319 {
Chris@16 320 return CharEncoding::islower(detail::cast_char<char_type>(ch)) ||
Chris@16 321 CharEncoding::isdigit(detail::cast_char<char_type>(ch));
Chris@16 322 }
Chris@16 323
Chris@16 324 template <typename Char>
Chris@16 325 static bool
Chris@16 326 is(tag::uppernum, Char ch)
Chris@16 327 {
Chris@16 328 return CharEncoding::isupper(detail::cast_char<char_type>(ch)) ||
Chris@16 329 CharEncoding::isdigit(detail::cast_char<char_type>(ch));
Chris@16 330 }
Chris@16 331
Chris@16 332 #if defined(BOOST_SPIRIT_UNICODE)
Chris@16 333
Chris@16 334 #define BOOST_SPIRIT_UNICODE_CLASSIFY(name) \
Chris@16 335 template <typename Char> \
Chris@16 336 static bool \
Chris@16 337 is(tag::name, Char ch) \
Chris@16 338 { \
Chris@16 339 return CharEncoding::is_##name(detail::cast_char<char_type>(ch)); \
Chris@16 340 } \
Chris@16 341 /***/
Chris@16 342
Chris@16 343 ///////////////////////////////////////////////////////////////////////////
Chris@16 344 // Unicode Major Categories
Chris@16 345 ///////////////////////////////////////////////////////////////////////////
Chris@16 346 BOOST_SPIRIT_UNICODE_CLASSIFY(letter)
Chris@16 347 BOOST_SPIRIT_UNICODE_CLASSIFY(mark)
Chris@16 348 BOOST_SPIRIT_UNICODE_CLASSIFY(number)
Chris@16 349 BOOST_SPIRIT_UNICODE_CLASSIFY(separator)
Chris@16 350 BOOST_SPIRIT_UNICODE_CLASSIFY(other)
Chris@16 351 BOOST_SPIRIT_UNICODE_CLASSIFY(punctuation)
Chris@16 352 BOOST_SPIRIT_UNICODE_CLASSIFY(symbol)
Chris@16 353
Chris@16 354 ///////////////////////////////////////////////////////////////////////////
Chris@16 355 // Unicode General Categories
Chris@16 356 ///////////////////////////////////////////////////////////////////////////
Chris@16 357 BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase_letter)
Chris@16 358 BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase_letter)
Chris@16 359 BOOST_SPIRIT_UNICODE_CLASSIFY(titlecase_letter)
Chris@16 360 BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_letter)
Chris@16 361 BOOST_SPIRIT_UNICODE_CLASSIFY(other_letter)
Chris@16 362
Chris@16 363 BOOST_SPIRIT_UNICODE_CLASSIFY(nonspacing_mark)
Chris@16 364 BOOST_SPIRIT_UNICODE_CLASSIFY(enclosing_mark)
Chris@16 365 BOOST_SPIRIT_UNICODE_CLASSIFY(spacing_mark)
Chris@16 366
Chris@16 367 BOOST_SPIRIT_UNICODE_CLASSIFY(decimal_number)
Chris@16 368 BOOST_SPIRIT_UNICODE_CLASSIFY(letter_number)
Chris@16 369 BOOST_SPIRIT_UNICODE_CLASSIFY(other_number)
Chris@16 370
Chris@16 371 BOOST_SPIRIT_UNICODE_CLASSIFY(space_separator)
Chris@16 372 BOOST_SPIRIT_UNICODE_CLASSIFY(line_separator)
Chris@16 373 BOOST_SPIRIT_UNICODE_CLASSIFY(paragraph_separator)
Chris@16 374
Chris@16 375 BOOST_SPIRIT_UNICODE_CLASSIFY(control)
Chris@16 376 BOOST_SPIRIT_UNICODE_CLASSIFY(format)
Chris@16 377 BOOST_SPIRIT_UNICODE_CLASSIFY(private_use)
Chris@16 378 BOOST_SPIRIT_UNICODE_CLASSIFY(surrogate)
Chris@16 379 BOOST_SPIRIT_UNICODE_CLASSIFY(unassigned)
Chris@16 380
Chris@16 381 BOOST_SPIRIT_UNICODE_CLASSIFY(dash_punctuation)
Chris@16 382 BOOST_SPIRIT_UNICODE_CLASSIFY(open_punctuation)
Chris@16 383 BOOST_SPIRIT_UNICODE_CLASSIFY(close_punctuation)
Chris@16 384 BOOST_SPIRIT_UNICODE_CLASSIFY(connector_punctuation)
Chris@16 385 BOOST_SPIRIT_UNICODE_CLASSIFY(other_punctuation)
Chris@16 386 BOOST_SPIRIT_UNICODE_CLASSIFY(initial_punctuation)
Chris@16 387 BOOST_SPIRIT_UNICODE_CLASSIFY(final_punctuation)
Chris@16 388
Chris@16 389 BOOST_SPIRIT_UNICODE_CLASSIFY(math_symbol)
Chris@16 390 BOOST_SPIRIT_UNICODE_CLASSIFY(currency_symbol)
Chris@16 391 BOOST_SPIRIT_UNICODE_CLASSIFY(modifier_symbol)
Chris@16 392 BOOST_SPIRIT_UNICODE_CLASSIFY(other_symbol)
Chris@16 393
Chris@16 394 ///////////////////////////////////////////////////////////////////////////
Chris@16 395 // Unicode Derived Categories
Chris@16 396 ///////////////////////////////////////////////////////////////////////////
Chris@16 397 BOOST_SPIRIT_UNICODE_CLASSIFY(alphabetic)
Chris@16 398 BOOST_SPIRIT_UNICODE_CLASSIFY(uppercase)
Chris@16 399 BOOST_SPIRIT_UNICODE_CLASSIFY(lowercase)
Chris@16 400 BOOST_SPIRIT_UNICODE_CLASSIFY(white_space)
Chris@16 401 BOOST_SPIRIT_UNICODE_CLASSIFY(hex_digit)
Chris@16 402 BOOST_SPIRIT_UNICODE_CLASSIFY(noncharacter_code_point)
Chris@16 403 BOOST_SPIRIT_UNICODE_CLASSIFY(default_ignorable_code_point)
Chris@16 404
Chris@16 405 ///////////////////////////////////////////////////////////////////////////
Chris@16 406 // Unicode Scripts
Chris@16 407 ///////////////////////////////////////////////////////////////////////////
Chris@16 408 BOOST_SPIRIT_UNICODE_CLASSIFY(arabic)
Chris@16 409 BOOST_SPIRIT_UNICODE_CLASSIFY(imperial_aramaic)
Chris@16 410 BOOST_SPIRIT_UNICODE_CLASSIFY(armenian)
Chris@16 411 BOOST_SPIRIT_UNICODE_CLASSIFY(avestan)
Chris@16 412 BOOST_SPIRIT_UNICODE_CLASSIFY(balinese)
Chris@16 413 BOOST_SPIRIT_UNICODE_CLASSIFY(bamum)
Chris@16 414 BOOST_SPIRIT_UNICODE_CLASSIFY(bengali)
Chris@16 415 BOOST_SPIRIT_UNICODE_CLASSIFY(bopomofo)
Chris@16 416 BOOST_SPIRIT_UNICODE_CLASSIFY(braille)
Chris@16 417 BOOST_SPIRIT_UNICODE_CLASSIFY(buginese)
Chris@16 418 BOOST_SPIRIT_UNICODE_CLASSIFY(buhid)
Chris@16 419 BOOST_SPIRIT_UNICODE_CLASSIFY(canadian_aboriginal)
Chris@16 420 BOOST_SPIRIT_UNICODE_CLASSIFY(carian)
Chris@16 421 BOOST_SPIRIT_UNICODE_CLASSIFY(cham)
Chris@16 422 BOOST_SPIRIT_UNICODE_CLASSIFY(cherokee)
Chris@16 423 BOOST_SPIRIT_UNICODE_CLASSIFY(coptic)
Chris@16 424 BOOST_SPIRIT_UNICODE_CLASSIFY(cypriot)
Chris@16 425 BOOST_SPIRIT_UNICODE_CLASSIFY(cyrillic)
Chris@16 426 BOOST_SPIRIT_UNICODE_CLASSIFY(devanagari)
Chris@16 427 BOOST_SPIRIT_UNICODE_CLASSIFY(deseret)
Chris@16 428 BOOST_SPIRIT_UNICODE_CLASSIFY(egyptian_hieroglyphs)
Chris@16 429 BOOST_SPIRIT_UNICODE_CLASSIFY(ethiopic)
Chris@16 430 BOOST_SPIRIT_UNICODE_CLASSIFY(georgian)
Chris@16 431 BOOST_SPIRIT_UNICODE_CLASSIFY(glagolitic)
Chris@16 432 BOOST_SPIRIT_UNICODE_CLASSIFY(gothic)
Chris@16 433 BOOST_SPIRIT_UNICODE_CLASSIFY(greek)
Chris@16 434 BOOST_SPIRIT_UNICODE_CLASSIFY(gujarati)
Chris@16 435 BOOST_SPIRIT_UNICODE_CLASSIFY(gurmukhi)
Chris@16 436 BOOST_SPIRIT_UNICODE_CLASSIFY(hangul)
Chris@16 437 BOOST_SPIRIT_UNICODE_CLASSIFY(han)
Chris@16 438 BOOST_SPIRIT_UNICODE_CLASSIFY(hanunoo)
Chris@16 439 BOOST_SPIRIT_UNICODE_CLASSIFY(hebrew)
Chris@16 440 BOOST_SPIRIT_UNICODE_CLASSIFY(hiragana)
Chris@16 441 BOOST_SPIRIT_UNICODE_CLASSIFY(katakana_or_hiragana)
Chris@16 442 BOOST_SPIRIT_UNICODE_CLASSIFY(old_italic)
Chris@16 443 BOOST_SPIRIT_UNICODE_CLASSIFY(javanese)
Chris@16 444 BOOST_SPIRIT_UNICODE_CLASSIFY(kayah_li)
Chris@16 445 BOOST_SPIRIT_UNICODE_CLASSIFY(katakana)
Chris@16 446 BOOST_SPIRIT_UNICODE_CLASSIFY(kharoshthi)
Chris@16 447 BOOST_SPIRIT_UNICODE_CLASSIFY(khmer)
Chris@16 448 BOOST_SPIRIT_UNICODE_CLASSIFY(kannada)
Chris@16 449 BOOST_SPIRIT_UNICODE_CLASSIFY(kaithi)
Chris@16 450 BOOST_SPIRIT_UNICODE_CLASSIFY(tai_tham)
Chris@16 451 BOOST_SPIRIT_UNICODE_CLASSIFY(lao)
Chris@16 452 BOOST_SPIRIT_UNICODE_CLASSIFY(latin)
Chris@16 453 BOOST_SPIRIT_UNICODE_CLASSIFY(lepcha)
Chris@16 454 BOOST_SPIRIT_UNICODE_CLASSIFY(limbu)
Chris@16 455 BOOST_SPIRIT_UNICODE_CLASSIFY(linear_b)
Chris@16 456 BOOST_SPIRIT_UNICODE_CLASSIFY(lisu)
Chris@16 457 BOOST_SPIRIT_UNICODE_CLASSIFY(lycian)
Chris@16 458 BOOST_SPIRIT_UNICODE_CLASSIFY(lydian)
Chris@16 459 BOOST_SPIRIT_UNICODE_CLASSIFY(malayalam)
Chris@16 460 BOOST_SPIRIT_UNICODE_CLASSIFY(mongolian)
Chris@16 461 BOOST_SPIRIT_UNICODE_CLASSIFY(meetei_mayek)
Chris@16 462 BOOST_SPIRIT_UNICODE_CLASSIFY(myanmar)
Chris@16 463 BOOST_SPIRIT_UNICODE_CLASSIFY(nko)
Chris@16 464 BOOST_SPIRIT_UNICODE_CLASSIFY(ogham)
Chris@16 465 BOOST_SPIRIT_UNICODE_CLASSIFY(ol_chiki)
Chris@16 466 BOOST_SPIRIT_UNICODE_CLASSIFY(old_turkic)
Chris@16 467 BOOST_SPIRIT_UNICODE_CLASSIFY(oriya)
Chris@16 468 BOOST_SPIRIT_UNICODE_CLASSIFY(osmanya)
Chris@16 469 BOOST_SPIRIT_UNICODE_CLASSIFY(phags_pa)
Chris@16 470 BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_pahlavi)
Chris@16 471 BOOST_SPIRIT_UNICODE_CLASSIFY(phoenician)
Chris@16 472 BOOST_SPIRIT_UNICODE_CLASSIFY(inscriptional_parthian)
Chris@16 473 BOOST_SPIRIT_UNICODE_CLASSIFY(rejang)
Chris@16 474 BOOST_SPIRIT_UNICODE_CLASSIFY(runic)
Chris@16 475 BOOST_SPIRIT_UNICODE_CLASSIFY(samaritan)
Chris@16 476 BOOST_SPIRIT_UNICODE_CLASSIFY(old_south_arabian)
Chris@16 477 BOOST_SPIRIT_UNICODE_CLASSIFY(saurashtra)
Chris@16 478 BOOST_SPIRIT_UNICODE_CLASSIFY(shavian)
Chris@16 479 BOOST_SPIRIT_UNICODE_CLASSIFY(sinhala)
Chris@16 480 BOOST_SPIRIT_UNICODE_CLASSIFY(sundanese)
Chris@16 481 BOOST_SPIRIT_UNICODE_CLASSIFY(syloti_nagri)
Chris@16 482 BOOST_SPIRIT_UNICODE_CLASSIFY(syriac)
Chris@16 483 BOOST_SPIRIT_UNICODE_CLASSIFY(tagbanwa)
Chris@16 484 BOOST_SPIRIT_UNICODE_CLASSIFY(tai_le)
Chris@16 485 BOOST_SPIRIT_UNICODE_CLASSIFY(new_tai_lue)
Chris@16 486 BOOST_SPIRIT_UNICODE_CLASSIFY(tamil)
Chris@16 487 BOOST_SPIRIT_UNICODE_CLASSIFY(tai_viet)
Chris@16 488 BOOST_SPIRIT_UNICODE_CLASSIFY(telugu)
Chris@16 489 BOOST_SPIRIT_UNICODE_CLASSIFY(tifinagh)
Chris@16 490 BOOST_SPIRIT_UNICODE_CLASSIFY(tagalog)
Chris@16 491 BOOST_SPIRIT_UNICODE_CLASSIFY(thaana)
Chris@16 492 BOOST_SPIRIT_UNICODE_CLASSIFY(thai)
Chris@16 493 BOOST_SPIRIT_UNICODE_CLASSIFY(tibetan)
Chris@16 494 BOOST_SPIRIT_UNICODE_CLASSIFY(ugaritic)
Chris@16 495 BOOST_SPIRIT_UNICODE_CLASSIFY(vai)
Chris@16 496 BOOST_SPIRIT_UNICODE_CLASSIFY(old_persian)
Chris@16 497 BOOST_SPIRIT_UNICODE_CLASSIFY(cuneiform)
Chris@16 498 BOOST_SPIRIT_UNICODE_CLASSIFY(yi)
Chris@16 499 BOOST_SPIRIT_UNICODE_CLASSIFY(inherited)
Chris@16 500 BOOST_SPIRIT_UNICODE_CLASSIFY(common)
Chris@16 501 BOOST_SPIRIT_UNICODE_CLASSIFY(unknown)
Chris@16 502
Chris@16 503 #undef BOOST_SPIRIT_UNICODE_CLASSIFY
Chris@16 504 #endif
Chris@16 505
Chris@16 506 };
Chris@16 507
Chris@16 508 ///////////////////////////////////////////////////////////////////////////
Chris@16 509 // Convert characters
Chris@16 510 template <typename CharEncoding>
Chris@16 511 struct convert
Chris@16 512 {
Chris@16 513 typedef typename CharEncoding::char_type char_type;
Chris@16 514
Chris@16 515 template <typename Char>
Chris@16 516 static Char
Chris@16 517 to(tag::lower, Char ch)
Chris@16 518 {
Chris@16 519 return static_cast<Char>(
Chris@16 520 CharEncoding::tolower(detail::cast_char<char_type>(ch)));
Chris@16 521 }
Chris@16 522
Chris@16 523 template <typename Char>
Chris@16 524 static Char
Chris@16 525 to(tag::upper, Char ch)
Chris@16 526 {
Chris@16 527 return static_cast<Char>(
Chris@16 528 CharEncoding::toupper(detail::cast_char<char_type>(ch)));
Chris@16 529 }
Chris@16 530
Chris@16 531 template <typename Char>
Chris@16 532 static Char
Chris@16 533 to(tag::ucs4, Char ch)
Chris@16 534 {
Chris@16 535 return static_cast<Char>(
Chris@16 536 CharEncoding::toucs4(detail::cast_char<char_type>(ch)));
Chris@16 537 }
Chris@16 538
Chris@16 539 template <typename Char>
Chris@16 540 static Char
Chris@16 541 to(unused_type, Char ch)
Chris@16 542 {
Chris@16 543 return ch;
Chris@16 544 }
Chris@16 545 };
Chris@16 546
Chris@16 547 ///////////////////////////////////////////////////////////////////////////
Chris@16 548 // Info on character classification
Chris@16 549 template <typename CharEncoding>
Chris@16 550 struct what
Chris@16 551 {
Chris@16 552 #define BOOST_SPIRIT_CLASSIFY_WHAT(name, isname) \
Chris@16 553 static char const* is(tag::name) \
Chris@16 554 { \
Chris@16 555 return isname; \
Chris@16 556 } \
Chris@16 557 /***/
Chris@16 558
Chris@16 559 BOOST_SPIRIT_CLASSIFY_WHAT(char_, "char")
Chris@16 560 BOOST_SPIRIT_CLASSIFY_WHAT(alnum, "alnum")
Chris@16 561 BOOST_SPIRIT_CLASSIFY_WHAT(alpha, "alpha")
Chris@16 562 BOOST_SPIRIT_CLASSIFY_WHAT(digit, "digit")
Chris@16 563 BOOST_SPIRIT_CLASSIFY_WHAT(xdigit, "xdigit")
Chris@16 564 BOOST_SPIRIT_CLASSIFY_WHAT(cntrl, "cntrl")
Chris@16 565 BOOST_SPIRIT_CLASSIFY_WHAT(graph, "graph")
Chris@16 566 BOOST_SPIRIT_CLASSIFY_WHAT(lower, "lower")
Chris@16 567 BOOST_SPIRIT_CLASSIFY_WHAT(lowernum, "lowernum")
Chris@16 568 BOOST_SPIRIT_CLASSIFY_WHAT(print, "print")
Chris@16 569 BOOST_SPIRIT_CLASSIFY_WHAT(punct, "punct")
Chris@16 570 BOOST_SPIRIT_CLASSIFY_WHAT(space, "space")
Chris@16 571 BOOST_SPIRIT_CLASSIFY_WHAT(blank, "blank")
Chris@16 572 BOOST_SPIRIT_CLASSIFY_WHAT(upper, "upper")
Chris@16 573 BOOST_SPIRIT_CLASSIFY_WHAT(uppernum, "uppernum")
Chris@16 574 BOOST_SPIRIT_CLASSIFY_WHAT(ucs4, "ucs4")
Chris@16 575
Chris@16 576 #undef BOOST_SPIRIT_CLASSIFY_WHAT
Chris@16 577
Chris@16 578 #if defined(BOOST_SPIRIT_UNICODE)
Chris@16 579
Chris@16 580 #define BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(name) \
Chris@16 581 static char const* is(tag::name) \
Chris@16 582 { \
Chris@16 583 return BOOST_PP_STRINGIZE(name); \
Chris@16 584 } \
Chris@16 585 /***/
Chris@16 586
Chris@16 587 ///////////////////////////////////////////////////////////////////////////
Chris@16 588 // Unicode Major Categories
Chris@16 589 ///////////////////////////////////////////////////////////////////////////
Chris@16 590 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter)
Chris@16 591 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mark)
Chris@16 592 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(number)
Chris@16 593 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(separator)
Chris@16 594 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other)
Chris@16 595 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(punctuation)
Chris@16 596 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(symbol)
Chris@16 597
Chris@16 598 ///////////////////////////////////////////////////////////////////////////
Chris@16 599 // Unicode General Categories
Chris@16 600 ///////////////////////////////////////////////////////////////////////////
Chris@16 601 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase_letter)
Chris@16 602 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase_letter)
Chris@16 603 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(titlecase_letter)
Chris@16 604 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_letter)
Chris@16 605 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_letter)
Chris@16 606
Chris@16 607 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nonspacing_mark)
Chris@16 608 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(enclosing_mark)
Chris@16 609 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(spacing_mark)
Chris@16 610
Chris@16 611 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(decimal_number)
Chris@16 612 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(letter_number)
Chris@16 613 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_number)
Chris@16 614
Chris@16 615 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(space_separator)
Chris@16 616 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(line_separator)
Chris@16 617 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(paragraph_separator)
Chris@16 618
Chris@16 619 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(control)
Chris@16 620 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(format)
Chris@16 621 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(private_use)
Chris@16 622 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(surrogate)
Chris@16 623 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unassigned)
Chris@16 624
Chris@16 625 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(dash_punctuation)
Chris@16 626 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(open_punctuation)
Chris@16 627 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(close_punctuation)
Chris@16 628 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(connector_punctuation)
Chris@16 629 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_punctuation)
Chris@16 630 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(initial_punctuation)
Chris@16 631 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(final_punctuation)
Chris@16 632
Chris@16 633 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(math_symbol)
Chris@16 634 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(currency_symbol)
Chris@16 635 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(modifier_symbol)
Chris@16 636 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(other_symbol)
Chris@16 637
Chris@16 638 ///////////////////////////////////////////////////////////////////////////
Chris@16 639 // Unicode Derived Categories
Chris@16 640 ///////////////////////////////////////////////////////////////////////////
Chris@16 641 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(alphabetic)
Chris@16 642 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(uppercase)
Chris@16 643 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lowercase)
Chris@16 644 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(white_space)
Chris@16 645 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hex_digit)
Chris@16 646 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(noncharacter_code_point)
Chris@16 647 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(default_ignorable_code_point)
Chris@16 648
Chris@16 649 ///////////////////////////////////////////////////////////////////////////
Chris@16 650 // Unicode Scripts
Chris@16 651 ///////////////////////////////////////////////////////////////////////////
Chris@16 652 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(arabic)
Chris@16 653 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(imperial_aramaic)
Chris@16 654 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(armenian)
Chris@16 655 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(avestan)
Chris@16 656 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(balinese)
Chris@16 657 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bamum)
Chris@16 658 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bengali)
Chris@16 659 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(bopomofo)
Chris@16 660 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(braille)
Chris@16 661 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buginese)
Chris@16 662 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(buhid)
Chris@16 663 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(canadian_aboriginal)
Chris@16 664 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(carian)
Chris@16 665 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cham)
Chris@16 666 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cherokee)
Chris@16 667 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(coptic)
Chris@16 668 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cypriot)
Chris@16 669 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cyrillic)
Chris@16 670 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(devanagari)
Chris@16 671 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(deseret)
Chris@16 672 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(egyptian_hieroglyphs)
Chris@16 673 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ethiopic)
Chris@16 674 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(georgian)
Chris@16 675 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(glagolitic)
Chris@16 676 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gothic)
Chris@16 677 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(greek)
Chris@16 678 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gujarati)
Chris@16 679 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(gurmukhi)
Chris@16 680 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hangul)
Chris@16 681 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(han)
Chris@16 682 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hanunoo)
Chris@16 683 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hebrew)
Chris@16 684 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(hiragana)
Chris@16 685 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana_or_hiragana)
Chris@16 686 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_italic)
Chris@16 687 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(javanese)
Chris@16 688 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kayah_li)
Chris@16 689 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(katakana)
Chris@16 690 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kharoshthi)
Chris@16 691 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(khmer)
Chris@16 692 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kannada)
Chris@16 693 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(kaithi)
Chris@16 694 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_tham)
Chris@16 695 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lao)
Chris@16 696 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(latin)
Chris@16 697 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lepcha)
Chris@16 698 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(limbu)
Chris@16 699 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(linear_b)
Chris@16 700 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lisu)
Chris@16 701 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lycian)
Chris@16 702 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(lydian)
Chris@16 703 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(malayalam)
Chris@16 704 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(mongolian)
Chris@16 705 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(meetei_mayek)
Chris@16 706 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(myanmar)
Chris@16 707 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(nko)
Chris@16 708 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ogham)
Chris@16 709 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ol_chiki)
Chris@16 710 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_turkic)
Chris@16 711 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(oriya)
Chris@16 712 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(osmanya)
Chris@16 713 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phags_pa)
Chris@16 714 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_pahlavi)
Chris@16 715 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(phoenician)
Chris@16 716 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inscriptional_parthian)
Chris@16 717 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(rejang)
Chris@16 718 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(runic)
Chris@16 719 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(samaritan)
Chris@16 720 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_south_arabian)
Chris@16 721 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(saurashtra)
Chris@16 722 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(shavian)
Chris@16 723 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sinhala)
Chris@16 724 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(sundanese)
Chris@16 725 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syloti_nagri)
Chris@16 726 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(syriac)
Chris@16 727 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagbanwa)
Chris@16 728 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_le)
Chris@16 729 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(new_tai_lue)
Chris@16 730 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tamil)
Chris@16 731 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tai_viet)
Chris@16 732 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(telugu)
Chris@16 733 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tifinagh)
Chris@16 734 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tagalog)
Chris@16 735 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thaana)
Chris@16 736 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(thai)
Chris@16 737 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(tibetan)
Chris@16 738 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(ugaritic)
Chris@16 739 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(vai)
Chris@16 740 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(old_persian)
Chris@16 741 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(cuneiform)
Chris@16 742 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(yi)
Chris@16 743 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(inherited)
Chris@16 744 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(common)
Chris@16 745 BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT(unknown)
Chris@16 746
Chris@16 747 #undef BOOST_SPIRIT_UNICODE_CLASSIFY_WHAT
Chris@16 748 #endif
Chris@16 749
Chris@16 750 };
Chris@16 751 }}}
Chris@16 752
Chris@16 753 namespace boost { namespace spirit { namespace traits
Chris@16 754 {
Chris@16 755 ///////////////////////////////////////////////////////////////////////////
Chris@16 756 // This meta-function evaluates to mpl::true_ if the function
Chris@16 757 // char_encoding::ischar() needs to be called to ensure correct matching.
Chris@16 758 // This happens mainly if the character type returned from the underlying
Chris@16 759 // iterator is larger than the character type of the used character
Chris@16 760 // encoding. Additionally, this meta-function provides a customization
Chris@16 761 // point for the lexer library to enforce this behavior while parsing
Chris@16 762 // a token stream.
Chris@16 763 template <typename Char, typename BaseChar>
Chris@16 764 struct mustcheck_ischar
Chris@16 765 : mpl::bool_<(sizeof(Char) > sizeof(BaseChar)) ? true : false> {};
Chris@16 766
Chris@16 767 ///////////////////////////////////////////////////////////////////////////
Chris@16 768 // The following template calls char_encoding::ischar, if necessary
Chris@16 769 template <typename CharParam, typename CharEncoding
Chris@16 770 , bool MustCheck = mustcheck_ischar<
Chris@16 771 CharParam, typename CharEncoding::char_type>::value>
Chris@16 772 struct ischar
Chris@16 773 {
Chris@16 774 static bool call(CharParam)
Chris@16 775 {
Chris@16 776 return true;
Chris@16 777 }
Chris@16 778 };
Chris@16 779
Chris@16 780 template <typename CharParam, typename CharEncoding>
Chris@16 781 struct ischar<CharParam, CharEncoding, true>
Chris@16 782 {
Chris@16 783 static bool call(CharParam const& ch)
Chris@16 784 {
Chris@16 785 return CharEncoding::ischar(int(ch));
Chris@16 786 }
Chris@16 787 };
Chris@16 788
Chris@16 789 }}}
Chris@16 790
Chris@16 791 #if defined(BOOST_MSVC)
Chris@16 792 # pragma warning(pop)
Chris@16 793 #endif
Chris@16 794
Chris@16 795 #endif
Chris@16 796
Chris@16 797