Imported Upstream version 1.72.0
[platform/upstream/boost.git] / boost / spirit / home / support / char_encoding / unicode.hpp
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         typedef ::boost::uint32_t classify_type;
27
28     ///////////////////////////////////////////////////////////////////////////
29     //  Posix stuff
30     ///////////////////////////////////////////////////////////////////////////
31         static bool
32         isascii_(char_type ch)
33         {
34             return 0 == (ch & ~0x7f);
35         }
36
37         static bool
38         ischar(char_type ch)
39         {
40             // unicode code points in the range 0x00 to 0x10FFFF
41             return ch <= 0x10FFFF;
42         }
43
44         static bool
45         isalnum(char_type ch)
46         {
47             return ucd::is_alphanumeric(ch);
48         }
49
50         static bool
51         isalpha(char_type ch)
52         {
53             return ucd::is_alphabetic(ch);
54         }
55
56         static bool
57         isdigit(char_type ch)
58         {
59             return ucd::is_decimal_number(ch);
60         }
61
62         static bool
63         isxdigit(char_type ch)
64         {
65             return ucd::is_hex_digit(ch);
66         }
67
68         static bool
69         iscntrl(char_type ch)
70         {
71             return ucd::is_control(ch);
72         }
73
74         static bool
75         isgraph(char_type ch)
76         {
77             return ucd::is_graph(ch);
78         }
79
80         static bool
81         islower(char_type ch)
82         {
83             return ucd::is_lowercase(ch);
84         }
85
86         static bool
87         isprint(char_type ch)
88         {
89             return ucd::is_print(ch);
90         }
91
92         static bool
93         ispunct(char_type ch)
94         {
95             return ucd::is_punctuation(ch);
96         }
97
98         static bool
99         isspace(char_type ch)
100         {
101             return ucd::is_white_space(ch);
102         }
103
104         static bool
105         isblank BOOST_PREVENT_MACRO_SUBSTITUTION (char_type ch)
106         {
107             return ucd::is_blank(ch);
108         }
109
110         static bool
111         isupper(char_type ch)
112         {
113             return ucd::is_uppercase(ch);
114         }
115
116     ///////////////////////////////////////////////////////////////////////////
117     //  Simple character conversions
118     ///////////////////////////////////////////////////////////////////////////
119
120         static char_type
121         tolower(char_type ch)
122         {
123             return ucd::to_lowercase(ch);
124         }
125
126         static char_type
127         toupper(char_type ch)
128         {
129             return ucd::to_uppercase(ch);
130         }
131
132         static ::boost::uint32_t
133         toucs4(char_type ch)
134         {
135             return ch;
136         }
137
138     ///////////////////////////////////////////////////////////////////////////
139     //  Major Categories
140     ///////////////////////////////////////////////////////////////////////////
141 #define BOOST_SPIRIT_MAJOR_CATEGORY(name)                                       \
142         static bool                                                             \
143         is_##name(char_type ch)                                                 \
144         {                                                                       \
145             return ucd::get_major_category(ch) == ucd::properties::name;        \
146         }                                                                       \
147         /***/
148
149         BOOST_SPIRIT_MAJOR_CATEGORY(letter)
150         BOOST_SPIRIT_MAJOR_CATEGORY(mark)
151         BOOST_SPIRIT_MAJOR_CATEGORY(number)
152         BOOST_SPIRIT_MAJOR_CATEGORY(separator)
153         BOOST_SPIRIT_MAJOR_CATEGORY(other)
154         BOOST_SPIRIT_MAJOR_CATEGORY(punctuation)
155         BOOST_SPIRIT_MAJOR_CATEGORY(symbol)
156
157     ///////////////////////////////////////////////////////////////////////////
158     //  General Categories
159     ///////////////////////////////////////////////////////////////////////////
160 #define BOOST_SPIRIT_CATEGORY(name)                                             \
161         static bool                                                             \
162         is_##name(char_type ch)                                                 \
163         {                                                                       \
164             return ucd::get_category(ch) == ucd::properties::name;              \
165         }                                                                       \
166         /***/
167
168         BOOST_SPIRIT_CATEGORY(uppercase_letter)
169         BOOST_SPIRIT_CATEGORY(lowercase_letter)
170         BOOST_SPIRIT_CATEGORY(titlecase_letter)
171         BOOST_SPIRIT_CATEGORY(modifier_letter)
172         BOOST_SPIRIT_CATEGORY(other_letter)
173
174         BOOST_SPIRIT_CATEGORY(nonspacing_mark)
175         BOOST_SPIRIT_CATEGORY(enclosing_mark)
176         BOOST_SPIRIT_CATEGORY(spacing_mark)
177
178         BOOST_SPIRIT_CATEGORY(decimal_number)
179         BOOST_SPIRIT_CATEGORY(letter_number)
180         BOOST_SPIRIT_CATEGORY(other_number)
181
182         BOOST_SPIRIT_CATEGORY(space_separator)
183         BOOST_SPIRIT_CATEGORY(line_separator)
184         BOOST_SPIRIT_CATEGORY(paragraph_separator)
185
186         BOOST_SPIRIT_CATEGORY(control)
187         BOOST_SPIRIT_CATEGORY(format)
188         BOOST_SPIRIT_CATEGORY(private_use)
189         BOOST_SPIRIT_CATEGORY(surrogate)
190         BOOST_SPIRIT_CATEGORY(unassigned)
191
192         BOOST_SPIRIT_CATEGORY(dash_punctuation)
193         BOOST_SPIRIT_CATEGORY(open_punctuation)
194         BOOST_SPIRIT_CATEGORY(close_punctuation)
195         BOOST_SPIRIT_CATEGORY(connector_punctuation)
196         BOOST_SPIRIT_CATEGORY(other_punctuation)
197         BOOST_SPIRIT_CATEGORY(initial_punctuation)
198         BOOST_SPIRIT_CATEGORY(final_punctuation)
199
200         BOOST_SPIRIT_CATEGORY(math_symbol)
201         BOOST_SPIRIT_CATEGORY(currency_symbol)
202         BOOST_SPIRIT_CATEGORY(modifier_symbol)
203         BOOST_SPIRIT_CATEGORY(other_symbol)
204
205     ///////////////////////////////////////////////////////////////////////////
206     //  Derived Categories
207     ///////////////////////////////////////////////////////////////////////////
208 #define BOOST_SPIRIT_DERIVED_CATEGORY(name)                                     \
209         static bool                                                             \
210         is_##name(char_type ch)                                                 \
211         {                                                                       \
212             return ucd::is_##name(ch);                                          \
213         }                                                                       \
214         /***/
215
216         BOOST_SPIRIT_DERIVED_CATEGORY(alphabetic)
217         BOOST_SPIRIT_DERIVED_CATEGORY(uppercase)
218         BOOST_SPIRIT_DERIVED_CATEGORY(lowercase)
219         BOOST_SPIRIT_DERIVED_CATEGORY(white_space)
220         BOOST_SPIRIT_DERIVED_CATEGORY(hex_digit)
221         BOOST_SPIRIT_DERIVED_CATEGORY(noncharacter_code_point)
222         BOOST_SPIRIT_DERIVED_CATEGORY(default_ignorable_code_point)
223
224     ///////////////////////////////////////////////////////////////////////////
225     //  Scripts
226     ///////////////////////////////////////////////////////////////////////////
227 #define BOOST_SPIRIT_SCRIPT(name)                                               \
228         static bool                                                             \
229         is_##name(char_type ch)                                                 \
230         {                                                                       \
231             return ucd::get_script(ch) == ucd::properties::name;                \
232         }                                                                       \
233         /***/
234
235         BOOST_SPIRIT_SCRIPT(arabic)
236         BOOST_SPIRIT_SCRIPT(imperial_aramaic)
237         BOOST_SPIRIT_SCRIPT(armenian)
238         BOOST_SPIRIT_SCRIPT(avestan)
239         BOOST_SPIRIT_SCRIPT(balinese)
240         BOOST_SPIRIT_SCRIPT(bamum)
241         BOOST_SPIRIT_SCRIPT(bengali)
242         BOOST_SPIRIT_SCRIPT(bopomofo)
243         BOOST_SPIRIT_SCRIPT(braille)
244         BOOST_SPIRIT_SCRIPT(buginese)
245         BOOST_SPIRIT_SCRIPT(buhid)
246         BOOST_SPIRIT_SCRIPT(canadian_aboriginal)
247         BOOST_SPIRIT_SCRIPT(carian)
248         BOOST_SPIRIT_SCRIPT(cham)
249         BOOST_SPIRIT_SCRIPT(cherokee)
250         BOOST_SPIRIT_SCRIPT(coptic)
251         BOOST_SPIRIT_SCRIPT(cypriot)
252         BOOST_SPIRIT_SCRIPT(cyrillic)
253         BOOST_SPIRIT_SCRIPT(devanagari)
254         BOOST_SPIRIT_SCRIPT(deseret)
255         BOOST_SPIRIT_SCRIPT(egyptian_hieroglyphs)
256         BOOST_SPIRIT_SCRIPT(ethiopic)
257         BOOST_SPIRIT_SCRIPT(georgian)
258         BOOST_SPIRIT_SCRIPT(glagolitic)
259         BOOST_SPIRIT_SCRIPT(gothic)
260         BOOST_SPIRIT_SCRIPT(greek)
261         BOOST_SPIRIT_SCRIPT(gujarati)
262         BOOST_SPIRIT_SCRIPT(gurmukhi)
263         BOOST_SPIRIT_SCRIPT(hangul)
264         BOOST_SPIRIT_SCRIPT(han)
265         BOOST_SPIRIT_SCRIPT(hanunoo)
266         BOOST_SPIRIT_SCRIPT(hebrew)
267         BOOST_SPIRIT_SCRIPT(hiragana)
268         BOOST_SPIRIT_SCRIPT(katakana_or_hiragana)
269         BOOST_SPIRIT_SCRIPT(old_italic)
270         BOOST_SPIRIT_SCRIPT(javanese)
271         BOOST_SPIRIT_SCRIPT(kayah_li)
272         BOOST_SPIRIT_SCRIPT(katakana)
273         BOOST_SPIRIT_SCRIPT(kharoshthi)
274         BOOST_SPIRIT_SCRIPT(khmer)
275         BOOST_SPIRIT_SCRIPT(kannada)
276         BOOST_SPIRIT_SCRIPT(kaithi)
277         BOOST_SPIRIT_SCRIPT(tai_tham)
278         BOOST_SPIRIT_SCRIPT(lao)
279         BOOST_SPIRIT_SCRIPT(latin)
280         BOOST_SPIRIT_SCRIPT(lepcha)
281         BOOST_SPIRIT_SCRIPT(limbu)
282         BOOST_SPIRIT_SCRIPT(linear_b)
283         BOOST_SPIRIT_SCRIPT(lisu)
284         BOOST_SPIRIT_SCRIPT(lycian)
285         BOOST_SPIRIT_SCRIPT(lydian)
286         BOOST_SPIRIT_SCRIPT(malayalam)
287         BOOST_SPIRIT_SCRIPT(mongolian)
288         BOOST_SPIRIT_SCRIPT(meetei_mayek)
289         BOOST_SPIRIT_SCRIPT(myanmar)
290         BOOST_SPIRIT_SCRIPT(nko)
291         BOOST_SPIRIT_SCRIPT(ogham)
292         BOOST_SPIRIT_SCRIPT(ol_chiki)
293         BOOST_SPIRIT_SCRIPT(old_turkic)
294         BOOST_SPIRIT_SCRIPT(oriya)
295         BOOST_SPIRIT_SCRIPT(osmanya)
296         BOOST_SPIRIT_SCRIPT(phags_pa)
297         BOOST_SPIRIT_SCRIPT(inscriptional_pahlavi)
298         BOOST_SPIRIT_SCRIPT(phoenician)
299         BOOST_SPIRIT_SCRIPT(inscriptional_parthian)
300         BOOST_SPIRIT_SCRIPT(rejang)
301         BOOST_SPIRIT_SCRIPT(runic)
302         BOOST_SPIRIT_SCRIPT(samaritan)
303         BOOST_SPIRIT_SCRIPT(old_south_arabian)
304         BOOST_SPIRIT_SCRIPT(saurashtra)
305         BOOST_SPIRIT_SCRIPT(shavian)
306         BOOST_SPIRIT_SCRIPT(sinhala)
307         BOOST_SPIRIT_SCRIPT(sundanese)
308         BOOST_SPIRIT_SCRIPT(syloti_nagri)
309         BOOST_SPIRIT_SCRIPT(syriac)
310         BOOST_SPIRIT_SCRIPT(tagbanwa)
311         BOOST_SPIRIT_SCRIPT(tai_le)
312         BOOST_SPIRIT_SCRIPT(new_tai_lue)
313         BOOST_SPIRIT_SCRIPT(tamil)
314         BOOST_SPIRIT_SCRIPT(tai_viet)
315         BOOST_SPIRIT_SCRIPT(telugu)
316         BOOST_SPIRIT_SCRIPT(tifinagh)
317         BOOST_SPIRIT_SCRIPT(tagalog)
318         BOOST_SPIRIT_SCRIPT(thaana)
319         BOOST_SPIRIT_SCRIPT(thai)
320         BOOST_SPIRIT_SCRIPT(tibetan)
321         BOOST_SPIRIT_SCRIPT(ugaritic)
322         BOOST_SPIRIT_SCRIPT(vai)
323         BOOST_SPIRIT_SCRIPT(old_persian)
324         BOOST_SPIRIT_SCRIPT(cuneiform)
325         BOOST_SPIRIT_SCRIPT(yi)
326         BOOST_SPIRIT_SCRIPT(inherited)
327         BOOST_SPIRIT_SCRIPT(common)
328         BOOST_SPIRIT_SCRIPT(unknown)
329
330 #undef BOOST_SPIRIT_MAJOR_CATEGORY
331 #undef BOOST_SPIRIT_CATEGORY
332 #undef BOOST_SPIRIT_DERIVED_CATEGORY
333 #undef BOOST_SPIRIT_SCRIPT
334
335     };
336
337 }}}
338
339 #endif
340