23 auto pred=[](
char c){
return std::isspace(c); };
25 std::string_view::const_iterator left =
26 std::find_if_not(s.begin(), s.end(), pred);
30 std::size_t i = std::distance(s.begin(), left);
32 std::string_view::const_reverse_iterator right =
33 std::find_if_not(s.rbegin(), s.rend(), pred);
34 std::size_t j = std::distance(right, s.rend()) - 1;
37 return std::string{s.substr(i, (j - i + 1))};
43 std::vector<std::string> &result,
58 std::size_t n = s.length();
59 INVARIANT(n > 0,
"Empty string case should already be handled");
61 std::size_t start = 0;
72 std::string new_s = std::string{s.substr(start, i - start)};
77 if(!remove_empty || !new_s.empty())
78 result.push_back(std::move(new_s));
86 std::string new_s = std::string{s.substr(start, n - start)};
91 if(!remove_empty || !new_s.empty())
92 result.push_back(std::move(new_s));
94 if(!remove_empty && result.empty())
196 std::string::const_iterator left,
197 std::string::const_iterator right,
198 const std::size_t left_margin,
199 const std::size_t width)
203 const std::size_t column_width = width - left_margin;
204 const std::string margin(left_margin,
' ');
206 auto distance = std::distance(left, right);
211 if(
static_cast<std::size_t
>(distance) <= column_width)
213 result.append(margin);
214 result.append(left, right);
219 auto it_line_begin = left;
224 auto it = it_line_begin + column_width;
226 auto rit_r = std::reverse_iterator<decltype(it)>(it) - 1;
227 auto rit_l = rit_r + column_width;
229 auto rit_space = std::find(rit_r, rit_l,
' ');
231 if(rit_space != rit_l)
233 auto it_space = rit_space.base() - 1;
236 result.append(margin);
237 result.append(it_line_begin, it_space);
240 it_line_begin = it_space + 1;
246 result.append(left, right);
250 }
while(
static_cast<std::size_t
>(std::distance(it_line_begin, right)) >
253 result.append(margin);
254 result.append(it_line_begin, right);
std::string wrap_line(const std::string &line, const std::size_t left_margin, const std::size_t width)
Wrap line at spaces to not extend past the right margin, and include given padding with spaces to the...