diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-19 16:45:33 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-22 15:46:23 +0900 |
commit | 47898a833b2126a2b98ebcf3e7f4a32fe2595f76 (patch) | |
tree | d82e20ce72aa5cacc315726c7ea45c785e605b3e /strutil.cc | |
parent | e30b3bee7d149ae80a95af3ca8eb9942e295f695 (diff) | |
download | kati-47898a833b2126a2b98ebcf3e7f4a32fe2595f76.tar.gz |
[C++] Improve handling of linebreaks and backslashes
Diffstat (limited to 'strutil.cc')
-rw-r--r-- | strutil.cc | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -201,15 +201,30 @@ string NoLineBreak(const string& s) { StringPiece TrimLeftSpace(StringPiece s) { size_t i = 0; - while (i < s.size() && isspace(s[i])) - i++; + for (; i < s.size(); i++) { + if (isspace(s[i])) + continue; + char n = s.get(i+1); + if (s[i] == '\\' && (n == '\r' || n == '\n')) { + i++; + continue; + } + break; + } return s.substr(i, s.size() - i); } StringPiece TrimRightSpace(StringPiece s) { size_t i = 0; - while (i < s.size() && isspace(s[s.size() - 1 - i])) - i++; + for (; i < s.size(); i++) { + char c = s[s.size() - 1 - i]; + if (isspace(c)) { + if ((c == '\r' || c == '\n') && s.get(s.size() - 2 - i) == '\\') + i++; + continue; + } + break; + } return s.substr(0, s.size() - i); } |