This fixes 3 bugs:
1/ only spaces are considered as part of the prefix
2/ leading tabs are removed unconditionally
3/ off-by-one error in the removal
The new intended behavior is:
1/ find the prefix (sequence of spaces and tabs) before the first
line; remove this prefix from the line
2/ on the next lines, check whether they start with the same prefix,
and if they do, strip this prefix
(cherry picked from commit
48f099d93ab179eef76594ced6b735aa912c03f6)
break;
if (firstline) {
- size_t i = tmpstr.find_first_not_of(char_type(' '));
+ size_t i = tmpstr.find_first_not_of(from_ascii(" \t"));
if (i != string::npos)
prefix = tmpstr.substr(0, i);
firstline = false;
// further lines in long strings may have the same
// whitespace prefix as the first line. Remove it.
- if (prefix.length() && prefixIs(tmpstr, prefix))
- tmpstr.erase(0, prefix.length() - 1);
+ if (!prefix.empty() && prefixIs(tmpstr, prefix))
+ tmpstr.erase(0, prefix.length());
- str += ltrim(tmpstr, "\t") + '\n';
+ str += tmpstr + '\n';
}
if (!pimpl_->is)