/Src/Dependencies/Boost/boost/spirit/home/support/char_encoding/unicode.hpp

http://hadesmem.googlecode.com/ · C++ Header · 339 lines · 266 code · 40 blank · 33 comment · 4 complexity · 9645262f6d41a2cf39eed82bab846c07 MD5 · raw file

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