diff --git a/src/libs/qmljs/qmljsscanner.cpp b/src/libs/qmljs/qmljsscanner.cpp index 1a853e5f443..3b1cf7bd514 100644 --- a/src/libs/qmljs/qmljsscanner.cpp +++ b/src/libs/qmljs/qmljsscanner.cpp @@ -152,6 +152,25 @@ QList Scanner::operator()(const QString &text, int startState) if (_scanComments && start != -1) tokens.append(Token(start, index - start, Token::Comment)); + } else if (_state == MultiLineStringDQuote || _state == MultiLineStringSQuote) { + const QChar quote = (_state == MultiLineStringDQuote ? QLatin1Char('"') : QLatin1Char('\'')); + const int start = index; + while (index < text.length()) { + const QChar ch = text.at(index); + + if (ch == quote) + break; + else if (index + 1 < text.length() && ch == QLatin1Char('\\')) + index += 2; + else + ++index; + } + if (index < text.length()) { + ++index; + _state = Normal; + } + if (start < index) + tokens.append(Token(start, index - start, Token::String)); } while (index < text.length()) { @@ -212,7 +231,10 @@ QList Scanner::operator()(const QString &text, int startState) ++index; // good one } else { - // unfinished + if (quote.unicode() == '"') + _state = MultiLineStringDQuote; + else + _state = MultiLineStringSQuote; } tokens.append(Token(start, index - start, Token::String)); diff --git a/src/libs/qmljs/qmljsscanner.h b/src/libs/qmljs/qmljsscanner.h index 611024d4262..c4a151875a6 100644 --- a/src/libs/qmljs/qmljsscanner.h +++ b/src/libs/qmljs/qmljsscanner.h @@ -79,7 +79,9 @@ class QMLJS_EXPORT Scanner public: enum { Normal = 0, - MultiLineComment = 1 + MultiLineComment = 1, + MultiLineStringDQuote = 2, + MultiLineStringSQuote = 3 }; Scanner();