aboutsummaryrefslogtreecommitdiff
path: root/strutil.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-19 16:45:33 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-22 15:46:23 +0900
commit47898a833b2126a2b98ebcf3e7f4a32fe2595f76 (patch)
treed82e20ce72aa5cacc315726c7ea45c785e605b3e /strutil.cc
parente30b3bee7d149ae80a95af3ca8eb9942e295f695 (diff)
downloadkati-47898a833b2126a2b98ebcf3e7f4a32fe2595f76.tar.gz
[C++] Improve handling of linebreaks and backslashes
Diffstat (limited to 'strutil.cc')
-rw-r--r--strutil.cc23
1 files changed, 19 insertions, 4 deletions
diff --git a/strutil.cc b/strutil.cc
index dba86c2..6800b4a 100644
--- a/strutil.cc
+++ b/strutil.cc
@@ -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);
}