186 if (str.size() <= max_width) {
191 if (str.find(
'\x1b') == std::string::npos) {
192 const int ellipsis_width = 3;
195 if (max_width <= ellipsis_width) {
196 str.assign(
"...", max_width);
202 const size_t remaining_size = max_width - ellipsis_width;
203 const size_t left_span_size = remaining_size / 2;
204 const size_t right_span_size = remaining_size - left_span_size;
207 const size_t gap_start = left_span_size;
208 const size_t gap_end = str.size() - right_span_size;
209 str.replace(gap_start, gap_end - gap_start,
"...");
214 size_t visible_width = str.size();
216 ansi.NextSequence()) {
217 visible_width -= ansi.SequenceSize();
220 if (visible_width <= max_width)
225 const size_t ellipsis_width = max_width < 3 ? max_width : 3;
226 const size_t visible_left_span_size = (max_width - ellipsis_width) / 2;
227 const size_t visible_right_span_size =
228 (max_width - ellipsis_width) - visible_left_span_size;
232 const size_t visible_gap_start = visible_left_span_size;
233 const size_t visible_gap_end = visible_width - visible_right_span_size;
236 result.reserve(str.size());
259 result.append(str.begin(), str.begin() + iter.
InputIndex());
262 result.append(
"...", ellipsis_width);
273 result.append(str.begin() + iter.
InputIndex(), str.end());
275 str = std::move(result);