16 const char A = 0x41, Z = 0x5A;
19 std::transform(result.begin(), result.end(), result.begin(),
21 return (c >= A && c <= Z
29 std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> conv;
30 auto ret = conv.from_bytes(in);
31 std::reverse(ret.begin(), ret.end());
32 return conv.to_bytes(ret);
38 std::string::const_iterator end) {
39 while (start != end) {
42 const char *from = &*start;
43 const char *from_end = &*end;
44 const char *from_next;
49 auto res =
char32_conv.in(st, from, from_end, from_next,
50 &new_char, &new_char + 1, to_next);
51 if (!((res == std::codecvt_utf8<char32_t>::result::partial &&
52 from_next != from_end) ||
53 (res == std::codecvt_utf8<char32_t>::result::ok &&
54 from_next == from_end))) {
57 start += (from_next - from);
70 auto amt =
char32_conv.length(st, &*start, &*end, 1);
74 std::string::iterator
utf8_iter(std::string::iterator start,
75 std::string::iterator end) {
79 std::string::const_iterator
utf8_iter(std::string::const_iterator start,
80 std::string::const_iterator end) {
85 std::string::size_type start,
86 std::string::size_type end) {
87 assert(
utf8_valid(str.begin() + start, str.begin() + end));
89 std::string::size_type clen = 0;
90 for (
auto it = str.begin() + start;
91 it != str.begin() + end;
110 const char *from = &*it;
111 const char *from_end = &*end;
112 const char *from_next;
113 auto res =
char32_conv.in(st, from, from_end, from_next,
114 &new_char, &new_char + 1, to_next);
115 assert((res == std::codecvt_utf8<char32_t>::result::partial &&
116 from_next != from_end) ||
117 (res == std::codecvt_utf8<char32_t>::result::ok &&
118 from_next == from_end));
121 return std::make_pair(new_char, it + (from_next - from));
124 std::pair<char32_t, std::string::iterator>
utf8_decode(std::string::iterator start,
125 std::string::iterator end) {
129 std::pair<char32_t, std::string::const_iterator>
utf8_decode(std::string::const_iterator start,
130 std::string::const_iterator end) {
135 std::string::size_type & idx) {
136 auto ret =
_utf8_decode(start.begin() + idx, start.end());
137 idx += ret.second - (start.begin() + idx);