1 /*============================================================================= 2 Copyright (c) 2001-2011 Hartmut Kaiser 3 Copyright (c) 2001-2011 Joel de Guzman 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 =============================================================================*/ 8 #if !defined(BOOST_SPIRIT_UNICODE_1_JANUARY_12_2010_0728PM) 9 #define BOOST_SPIRIT_UNICODE_1_JANUARY_12_2010_0728PM 10 11 #if defined(_MSC_VER) 12 #pragma once 13 #endif 14 15 #include <boost/cstdint.hpp> 16 #include <boost/spirit/home/support/char_encoding/unicode/query.hpp> 17 18 namespace boost { namespace spirit { namespace char_encoding 19 { 20 /////////////////////////////////////////////////////////////////////////// 21 // Test characters for specified conditions (using iso8859-1) 22 /////////////////////////////////////////////////////////////////////////// 23 struct unicode 24 { 25 typedef ::boost::uint32_t char_type; 26 27 /////////////////////////////////////////////////////////////////////////// 28 // Posix stuff 29 /////////////////////////////////////////////////////////////////////////// 30 static bool isascii_boost::spirit::char_encoding::unicode31 isascii_(char_type ch) 32 { 33 return 0 == (ch & ~0x7f); 34 } 35 36 static bool ischarboost::spirit::char_encoding::unicode37 ischar(char_type ch) 38 { 39 // unicode code points in the range 0x00 to 0x10FFFF 40 return ch <= 0x10FFFF; 41 } 42 43 static bool isalnumboost::spirit::char_encoding::unicode44 isalnum(char_type ch) 45 { 46 return ucd::is_alphanumeric(ch); 47 } 48 49 static bool isalphaboost::spirit::char_encoding::unicode50 isalpha(char_type ch) 51 { 52 return ucd::is_alphabetic(ch); 53 } 54 55 static bool isdigitboost::spirit::char_encoding::unicode56 isdigit(char_type ch) 57 { 58 return ucd::is_decimal_number(ch); 59 } 60 61 static bool isxdigitboost::spirit::char_encoding::unicode62 isxdigit(char_type ch) 63 { 64 return ucd::is_hex_digit(ch); 65 } 66 67 static bool iscntrlboost::spirit::char_encoding::unicode68 iscntrl(char_type ch) 69 { 70 return ucd::is_control(ch); 71 } 72 73 static bool isgraphboost::spirit::char_encoding::unicode74 isgraph(char_type ch) 75 { 76 return ucd::is_graph(ch); 77 } 78 79 static bool islowerboost::spirit::char_encoding::unicode80 islower(char_type ch) 81 { 82 return ucd::is_lowercase(ch); 83 } 84 85 static bool isprintboost::spirit::char_encoding::unicode86 isprint(char_type ch) 87 { 88 return ucd::is_print(ch); 89 } 90 91 static bool ispunctboost::spirit::char_encoding::unicode92 ispunct(char_type ch) 93 { 94 return ucd::is_punctuation(ch); 95 } 96 97 static bool isspaceboost::spirit::char_encoding::unicode98 isspace(char_type ch) 99 { 100 return ucd::is_white_space(ch); 101 } 102 103 static int BOOST_PREVENT_MACRO_SUBSTITUTIONboost::spirit::char_encoding::unicode104 isblank BOOST_PREVENT_MACRO_SUBSTITUTION (char_type ch) 105 { 106 return ucd::is_blank(ch); 107 } 108 109 static bool isupperboost::spirit::char_encoding::unicode110 isupper(char_type ch) 111 { 112 return ucd::is_uppercase(ch); 113 } 114 115 /////////////////////////////////////////////////////////////////////////// 116 // Simple character conversions 117 /////////////////////////////////////////////////////////////////////////// 118 119 static char_type tolowerboost::spirit::char_encoding::unicode120 tolower(char_type ch) 121 { 122 return ucd::to_lowercase(ch); 123 } 124 125 static char_type toupperboost::spirit::char_encoding::unicode126 toupper(char_type ch) 127 { 128 return ucd::to_uppercase(ch); 129 } 130 131 static ::boost::uint32_t toucs4boost::spirit::char_encoding::unicode132 toucs4(char_type ch) 133 { 134 return ch; 135 } 136 137 /////////////////////////////////////////////////////////////////////////// 138 // Major Categories 139 /////////////////////////////////////////////////////////////////////////// 140 #define BOOST_SPIRIT_MAJOR_CATEGORY(name) \ 141 static bool \ 142 is_##name(char_type ch) \ 143 { \ 144 return ucd::get_major_category(ch) == ucd::properties::name; \ 145 } \ 146 /***/ 147 148 BOOST_SPIRIT_MAJOR_CATEGORY(letter) 149 BOOST_SPIRIT_MAJOR_CATEGORY(mark) 150 BOOST_SPIRIT_MAJOR_CATEGORY(number) 151 BOOST_SPIRIT_MAJOR_CATEGORY(separator) 152 BOOST_SPIRIT_MAJOR_CATEGORY(other) 153 BOOST_SPIRIT_MAJOR_CATEGORY(punctuation) 154 BOOST_SPIRIT_MAJOR_CATEGORY(symbol) 155 156 /////////////////////////////////////////////////////////////////////////// 157 // General Categories 158 /////////////////////////////////////////////////////////////////////////// 159 #define BOOST_SPIRIT_CATEGORY(name) \ 160 static bool \ 161 is_##name(char_type ch) \ 162 { \ 163 return ucd::get_category(ch) == ucd::properties::name; \ 164 } \ 165 /***/ 166 167 BOOST_SPIRIT_CATEGORY(uppercase_letter) 168 BOOST_SPIRIT_CATEGORY(lowercase_letter) 169 BOOST_SPIRIT_CATEGORY(titlecase_letter) 170 BOOST_SPIRIT_CATEGORY(modifier_letter) 171 BOOST_SPIRIT_CATEGORY(other_letter) 172 173 BOOST_SPIRIT_CATEGORY(nonspacing_mark) 174 BOOST_SPIRIT_CATEGORY(enclosing_mark) 175 BOOST_SPIRIT_CATEGORY(spacing_mark) 176 177 BOOST_SPIRIT_CATEGORY(decimal_number) 178 BOOST_SPIRIT_CATEGORY(letter_number) 179 BOOST_SPIRIT_CATEGORY(other_number) 180 181 BOOST_SPIRIT_CATEGORY(space_separator) 182 BOOST_SPIRIT_CATEGORY(line_separator) 183 BOOST_SPIRIT_CATEGORY(paragraph_separator) 184 185 BOOST_SPIRIT_CATEGORY(control) 186 BOOST_SPIRIT_CATEGORY(format) 187 BOOST_SPIRIT_CATEGORY(private_use) 188 BOOST_SPIRIT_CATEGORY(surrogate) 189 BOOST_SPIRIT_CATEGORY(unassigned) 190 191 BOOST_SPIRIT_CATEGORY(dash_punctuation) 192 BOOST_SPIRIT_CATEGORY(open_punctuation) 193 BOOST_SPIRIT_CATEGORY(close_punctuation) 194 BOOST_SPIRIT_CATEGORY(connector_punctuation) 195 BOOST_SPIRIT_CATEGORY(other_punctuation) 196 BOOST_SPIRIT_CATEGORY(initial_punctuation) 197 BOOST_SPIRIT_CATEGORY(final_punctuation) 198 199 BOOST_SPIRIT_CATEGORY(math_symbol) 200 BOOST_SPIRIT_CATEGORY(currency_symbol) 201 BOOST_SPIRIT_CATEGORY(modifier_symbol) 202 BOOST_SPIRIT_CATEGORY(other_symbol) 203 204 /////////////////////////////////////////////////////////////////////////// 205 // Derived Categories 206 /////////////////////////////////////////////////////////////////////////// 207 #define BOOST_SPIRIT_DERIVED_CATEGORY(name) \ 208 static bool \ 209 is_##name(char_type ch) \ 210 { \ 211 return ucd::is_##name(ch); \ 212 } \ 213 /***/ 214 215 BOOST_SPIRIT_DERIVED_CATEGORY(alphabetic) 216 BOOST_SPIRIT_DERIVED_CATEGORY(uppercase) 217 BOOST_SPIRIT_DERIVED_CATEGORY(lowercase) 218 BOOST_SPIRIT_DERIVED_CATEGORY(white_space) 219 BOOST_SPIRIT_DERIVED_CATEGORY(hex_digit) 220 BOOST_SPIRIT_DERIVED_CATEGORY(noncharacter_code_point) 221 BOOST_SPIRIT_DERIVED_CATEGORY(default_ignorable_code_point) 222 223 /////////////////////////////////////////////////////////////////////////// 224 // Scripts 225 /////////////////////////////////////////////////////////////////////////// 226 #define BOOST_SPIRIT_SCRIPT(name) \ 227 static bool \ 228 is_##name(char_type ch) \ 229 { \ 230 return ucd::get_script(ch) == ucd::properties::name; \ 231 } \ 232 /***/ 233 234 BOOST_SPIRIT_SCRIPT(arabic) 235 BOOST_SPIRIT_SCRIPT(imperial_aramaic) 236 BOOST_SPIRIT_SCRIPT(armenian) 237 BOOST_SPIRIT_SCRIPT(avestan) 238 BOOST_SPIRIT_SCRIPT(balinese) 239 BOOST_SPIRIT_SCRIPT(bamum) 240 BOOST_SPIRIT_SCRIPT(bengali) 241 BOOST_SPIRIT_SCRIPT(bopomofo) 242 BOOST_SPIRIT_SCRIPT(braille) 243 BOOST_SPIRIT_SCRIPT(buginese) 244 BOOST_SPIRIT_SCRIPT(buhid) 245 BOOST_SPIRIT_SCRIPT(canadian_aboriginal) 246 BOOST_SPIRIT_SCRIPT(carian) 247 BOOST_SPIRIT_SCRIPT(cham) 248 BOOST_SPIRIT_SCRIPT(cherokee) 249 BOOST_SPIRIT_SCRIPT(coptic) 250 BOOST_SPIRIT_SCRIPT(cypriot) 251 BOOST_SPIRIT_SCRIPT(cyrillic) 252 BOOST_SPIRIT_SCRIPT(devanagari) 253 BOOST_SPIRIT_SCRIPT(deseret) 254 BOOST_SPIRIT_SCRIPT(egyptian_hieroglyphs) 255 BOOST_SPIRIT_SCRIPT(ethiopic) 256 BOOST_SPIRIT_SCRIPT(georgian) 257 BOOST_SPIRIT_SCRIPT(glagolitic) 258 BOOST_SPIRIT_SCRIPT(gothic) 259 BOOST_SPIRIT_SCRIPT(greek) 260 BOOST_SPIRIT_SCRIPT(gujarati) 261 BOOST_SPIRIT_SCRIPT(gurmukhi) 262 BOOST_SPIRIT_SCRIPT(hangul) 263 BOOST_SPIRIT_SCRIPT(han) 264 BOOST_SPIRIT_SCRIPT(hanunoo) 265 BOOST_SPIRIT_SCRIPT(hebrew) 266 BOOST_SPIRIT_SCRIPT(hiragana) 267 BOOST_SPIRIT_SCRIPT(katakana_or_hiragana) 268 BOOST_SPIRIT_SCRIPT(old_italic) 269 BOOST_SPIRIT_SCRIPT(javanese) 270 BOOST_SPIRIT_SCRIPT(kayah_li) 271 BOOST_SPIRIT_SCRIPT(katakana) 272 BOOST_SPIRIT_SCRIPT(kharoshthi) 273 BOOST_SPIRIT_SCRIPT(khmer) 274 BOOST_SPIRIT_SCRIPT(kannada) 275 BOOST_SPIRIT_SCRIPT(kaithi) 276 BOOST_SPIRIT_SCRIPT(tai_tham) 277 BOOST_SPIRIT_SCRIPT(lao) 278 BOOST_SPIRIT_SCRIPT(latin) 279 BOOST_SPIRIT_SCRIPT(lepcha) 280 BOOST_SPIRIT_SCRIPT(limbu) 281 BOOST_SPIRIT_SCRIPT(linear_b) 282 BOOST_SPIRIT_SCRIPT(lisu) 283 BOOST_SPIRIT_SCRIPT(lycian) 284 BOOST_SPIRIT_SCRIPT(lydian) 285 BOOST_SPIRIT_SCRIPT(malayalam) 286 BOOST_SPIRIT_SCRIPT(mongolian) 287 BOOST_SPIRIT_SCRIPT(meetei_mayek) 288 BOOST_SPIRIT_SCRIPT(myanmar) 289 BOOST_SPIRIT_SCRIPT(nko) 290 BOOST_SPIRIT_SCRIPT(ogham) 291 BOOST_SPIRIT_SCRIPT(ol_chiki) 292 BOOST_SPIRIT_SCRIPT(old_turkic) 293 BOOST_SPIRIT_SCRIPT(oriya) 294 BOOST_SPIRIT_SCRIPT(osmanya) 295 BOOST_SPIRIT_SCRIPT(phags_pa) 296 BOOST_SPIRIT_SCRIPT(inscriptional_pahlavi) 297 BOOST_SPIRIT_SCRIPT(phoenician) 298 BOOST_SPIRIT_SCRIPT(inscriptional_parthian) 299 BOOST_SPIRIT_SCRIPT(rejang) 300 BOOST_SPIRIT_SCRIPT(runic) 301 BOOST_SPIRIT_SCRIPT(samaritan) 302 BOOST_SPIRIT_SCRIPT(old_south_arabian) 303 BOOST_SPIRIT_SCRIPT(saurashtra) 304 BOOST_SPIRIT_SCRIPT(shavian) 305 BOOST_SPIRIT_SCRIPT(sinhala) 306 BOOST_SPIRIT_SCRIPT(sundanese) 307 BOOST_SPIRIT_SCRIPT(syloti_nagri) 308 BOOST_SPIRIT_SCRIPT(syriac) 309 BOOST_SPIRIT_SCRIPT(tagbanwa) 310 BOOST_SPIRIT_SCRIPT(tai_le) 311 BOOST_SPIRIT_SCRIPT(new_tai_lue) 312 BOOST_SPIRIT_SCRIPT(tamil) 313 BOOST_SPIRIT_SCRIPT(tai_viet) 314 BOOST_SPIRIT_SCRIPT(telugu) 315 BOOST_SPIRIT_SCRIPT(tifinagh) 316 BOOST_SPIRIT_SCRIPT(tagalog) 317 BOOST_SPIRIT_SCRIPT(thaana) 318 BOOST_SPIRIT_SCRIPT(thai) 319 BOOST_SPIRIT_SCRIPT(tibetan) 320 BOOST_SPIRIT_SCRIPT(ugaritic) 321 BOOST_SPIRIT_SCRIPT(vai) 322 BOOST_SPIRIT_SCRIPT(old_persian) 323 BOOST_SPIRIT_SCRIPT(cuneiform) 324 BOOST_SPIRIT_SCRIPT(yi) 325 BOOST_SPIRIT_SCRIPT(inherited) 326 BOOST_SPIRIT_SCRIPT(common) 327 BOOST_SPIRIT_SCRIPT(unknown) 328 329 #undef BOOST_SPIRIT_MAJOR_CATEGORY 330 #undef BOOST_SPIRIT_CATEGORY 331 #undef BOOST_SPIRIT_DERIVED_CATEGORY 332 #undef BOOST_SPIRIT_SCRIPT 333 334 }; 335 336 }}} 337 338 #endif 339 340