23 auto pred=[](
char c){
return std::isspace(c); };
25 std::string::const_iterator left
26 =std::find_if_not(s.begin(), s.end(), pred);
30 std::string::size_type i=std::distance(s.begin(), left);
32 std::string::const_reverse_iterator right
33 =std::find_if_not(s.rbegin(), s.rend(), pred);
34 std::string::size_type j=std::distance(right, s.rend())-1;
36 return s.substr(i, (j-i+1));
42 std::vector<std::string> &result,
57 std::string::size_type n=s.length();
58 INVARIANT(n > 0,
"Empty string case should already be handled");
60 std::string::size_type start=0;
61 std::string::size_type i;
67 std::string new_s=s.substr(start, i-start);
72 if(!remove_empty || !new_s.empty())
73 result.push_back(new_s);
79 std::string new_s=s.substr(start, n-start);
84 if(!remove_empty || !new_s.empty())
85 result.push_back(new_s);
87 if(!remove_empty && result.empty())
193 std::string::const_iterator left,
194 std::string::const_iterator right,
195 const std::size_t left_margin,
196 const std::size_t width)
200 const std::size_t column_width = width - left_margin;
201 const std::string margin(left_margin,
' ');
203 auto distance = std::distance(left, right);
208 if(
static_cast<std::size_t
>(distance) <= column_width)
210 result.append(margin);
211 result.append(left, right);
216 auto it_line_begin = left;
221 auto it = it_line_begin + column_width;
223 auto rit_r = std::reverse_iterator<decltype(it)>(it) - 1;
224 auto rit_l = rit_r + column_width;
226 auto rit_space = std::find(rit_r, rit_l,
' ');
228 if(rit_space != rit_l)
230 auto it_space = rit_space.base() - 1;
233 result.append(margin);
234 result.append(it_line_begin, it_space);
237 it_line_begin = it_space + 1;
243 result.append(left, right);
247 }
while(
static_cast<std::size_t
>(std::distance(it_line_begin, right)) >
250 result.append(margin);
251 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...