52#include <libutf8/iterator.h>
62#include <snapdev/poison.h>
79 char32_t f_first = U
'\0';
80 char32_t f_last = U
'\0';
82 bool operator < (char_range_t
const & rhs)
const
84 return f_last < rhs.f_first;
89constexpr char_range_t
const g_name_start_char[] =
91 { 0x00003A, 0x00003A },
92 { 0x000041, 0x00005A },
93 { 0x00005F, 0x00005F },
94 { 0x000061, 0x00007A },
95 { 0x0000C0, 0x0000D6 },
96 { 0x0000D8, 0x0000F6 },
97 { 0x0000F8, 0x0002FF },
98 { 0x000370, 0x00037D },
99 { 0x00037F, 0x001FFF },
100 { 0x00200C, 0x00200D },
101 { 0x002070, 0x00218F },
102 { 0x002C00, 0x002FEF },
103 { 0x003001, 0x00D7FF },
104 { 0x00F900, 0x00FDCF },
105 { 0x00FDF0, 0x00FFFD },
106 { 0x010000, 0x0EFFFF },
109constexpr char_range_t
const g_name_char[] =
111 { 0x00002D, 0x00002E },
112 { 0x000030, 0x00003A },
113 { 0x000041, 0x00005A },
114 { 0x00005F, 0x00005F },
115 { 0x000061, 0x00007A },
116 { 0x0000B7, 0x0000B7 },
117 { 0x0000C0, 0x0000D6 },
118 { 0x0000D8, 0x0000F6 },
119 { 0x0000F8, 0x0002FF },
120 { 0x000300, 0x00037D },
121 { 0x00037F, 0x001FFF },
122 { 0x00200C, 0x00200D },
123 { 0x00203F, 0x002040 },
124 { 0x002070, 0x00218F },
125 { 0x002C00, 0x002FEF },
126 { 0x003001, 0x00D7FF },
127 { 0x00F900, 0x00FDCF },
128 { 0x00FDF0, 0x00FFFD },
129 { 0x010000, 0x0EFFFF },
133bool find_char(
char32_t c, char_range_t
const * b, char_range_t
const * e)
135 char_range_t r = { c, c };
136 auto range(std::lower_bound(b, e, r));
142 return range != e && c >= range->f_first && c <= range->f_last;
150bool is_name_start_char(
char32_t c)
152 return find_char(c, std::begin(g_name_start_char), std::end(g_name_start_char));
156bool is_name_char(
char32_t c)
158 return find_char(c, std::begin(g_name_char), std::end(g_name_char));
162bool is_digit(
char32_t c)
164 return (c >= U
'0' && c <= U
'9')
169bool is_space(
char32_t c)
211 libutf8::utf8_iterator it(token);
216 if(!is_name_start_char(*it))
221 for(++it; it != token.end(); ++it)
223 if(!is_name_char(*it))
bool is_token(std::string const &token)
Verify that token is a valid string.
Database file implementation.