8class CLASS_DECL_ACME utf8_character :
9 public inline_string < ::ansi_character, 8 >
14 mutable ::i64 m_llIndex = -1;
18 utf8_character(::i64 ch);
21 character_count get_next(
const character_range < const_char_pointer >&
range, character_count charactercount);
26 bool operator == (ansi_character ansicharacter)
const
29 if (ansicharacter < 0)
32 throw ::exception(error_bad_argument);
36 auto llIndex = index();
38 return ansicharacter == llIndex;
43 ansi_character ansi_lower()
const
46 auto llIndex = index();
51 throw ::exception(error_wrong_state,
"not an ansi character");
55 return character_tolower((ansi_character)llIndex);
60 ansi_character ansi_uppwer()
const
63 auto llIndex = index();
68 throw ::exception(error_wrong_state,
"not an ansi character");
72 return character_toupper((ansi_character)llIndex);
79 return wd32_char_isspace((wd32_character) index());
83 bool is_ansi_space()
const
86 auto llIndex = index();
95 return character_isspace((ansi_character)llIndex);
100 bool is_ansi_alpha()
const
103 auto llIndex = index();
112 return character_isalpha((ansi_character)llIndex);
117 bool is_ansi_digit()
const
120 auto llIndex = index();
129 return character_isdigit((ansi_character)llIndex);
133 bool is_ansi_alpha_or_digit()
const
136 auto llIndex = index();
145 return character_isalpha((ansi_character)llIndex)
146 || character_isdigit((ansi_character)llIndex);
152class CLASS_DECL_ACME utf8_character_range :
153 public utf8_character
158 character_range < const_char_pointer >& m_range;
160 character_count m_i32;
162 character_count m_iNext;
164 utf8_character_range(
const utf8_character_range&
range) :
165 m_range(
range.m_range),
169 this->m_begin =
range.m_begin;
170 this->m_end =
range.m_end;
171 this->m_erange =
range.m_erange;
172 this->m_llIndex = -1;
173 memory_copy(m_sz,
range.m_sz,
sizeof(m_sz));
178 utf8_character_range(character_range < const_char_pointer >&
range, character_count i = 0) :
184 this->m_llIndex = -1;
190 utf8_character_range& get()
196 m_iNext = ::utf8_character::get_next(m_range, m_i32);
207 utf8_character_range& operator++()
221 utf8_character_range operator++(::i32)
224 utf8_character_range ret = *
this;
233 utf8_character_range & operator+=(character_count count)
252 utf8_character_range& ansi_add(character_count count)
270 utf8_character_range next()
const
273 return { m_range, m_iNext };
279 using utf8_character::operator == ;