]> git.lyx.org Git - features.git/commitdiff
Fix Lexer::getLongString prefix pruning logic
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 23 Aug 2017 10:25:29 +0000 (12:25 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Tue, 29 Aug 2017 14:05:09 +0000 (16:05 +0200)
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)

src/Lexer.cpp

index becd157886cd3d1952469e741a02ff810bfc996c..098faa9737282c3fc40458ec67665b26b8b881ef 100644 (file)
@@ -738,7 +738,7 @@ docstring Lexer::getLongString(docstring const & endtoken)
                        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;
@@ -747,10 +747,10 @@ docstring Lexer::getLongString(docstring const & endtoken)
 
                // 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)