94 std::string
extract(
const std::string::size_type begin = 0,
95 const std::string::size_type len = 0)
const
97 std::string utf8result;
98 std::string::size_type this_len =
length();
100 assert(begin <= this_len);
101 assert(begin + len <= this_len);
104 utf8::unchecked::utf32to8
105 (
utf32chars.begin() +
static_cast<std::string::difference_type
>(begin),
106 utf32chars.begin() +
static_cast<std::string::difference_type
>(begin) +
107 static_cast<std::string::difference_type
>
108 (len ? (len > this_len ? this_len : len) : this_len),
109 std::back_inserter(utf8result));
115 std::size_t len)
const
117 std::string utf8result;
118 std::size_t this_width =
width();
119 std::string::size_type this_len =
length();
121 assert(begin <= this_width);
122 if (begin + len > this_width)
123 len = this_width - begin;
126 std::size_t begin_idx = 0, end_idx = 0;
127 std::size_t head = 0, tail = 0;
128 for (std::size_t idx = 0; idx < this_len; ++idx) {
132 if (pos + w >= begin) {
133 head = std::min(pos + w, begin + len) - begin;
136 }
else if (pos < begin + len) {
137 if (pos + w > begin + len) {
138 tail = begin + len - pos;
141 if (pos + w == begin + len) {
149 utf8result += std::string(head,
'.');
151 if (begin_idx < end_idx)
152 utf8::unchecked::utf32to8
153 (
utf32chars.begin() +
static_cast<std::string::difference_type
>(begin_idx),
154 utf32chars.begin() +
static_cast<std::string::difference_type
>(end_idx),
155 std::back_inserter(utf8result));
157 utf8result += std::string(tail,
'.');