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
|