diff --git a/src/plugins/qmljseditor/qmljshighlighter.cpp b/src/plugins/qmljseditor/qmljshighlighter.cpp index a4dc4f05c094ab971fb7b7d9d53033e18ca56b91..3ef4a8ace3d36e476a48c9f8a2914b19218c30d3 100644 --- a/src/plugins/qmljseditor/qmljshighlighter.cpp +++ b/src/plugins/qmljseditor/qmljshighlighter.cpp @@ -147,11 +147,26 @@ void Highlighter::highlightBlock(const QString &text) if (index + 1 < tokens.size()) { const Token &nextToken = tokens.at(index + 1); + + bool maybeBinding = (index == 0 || checkStartOfBinding(tokens.at(index - 1))); + bool maybeOnBinding = false; + if (index > 0) { + const Token &previousToken = tokens.at(index - 1); + if (text.midRef(previousToken.offset, previousToken.length) == QLatin1String("on")) { + maybeOnBinding = true; + maybeBinding = false; + } + } + if (text.at(token.offset).isUpper() && (nextToken.is(Token::LeftBrace) || text.midRef(nextToken.offset, nextToken.length) == QLatin1String("on"))) { setFormat(token.offset, token.length, m_formats[TypeFormat]); - } else if (index == 0 || checkStartOfBinding(tokens.at(index - 1))) { + } else if (maybeBinding || maybeOnBinding) { + Token::Kind expectedTerminator = Token::Colon; + if (maybeOnBinding) + expectedTerminator = Token::LeftBrace; + const int start = index; ++index; // skip the identifier. @@ -161,7 +176,7 @@ void Highlighter::highlightBlock(const QString &text) index += 2; } - if (index < tokens.size() && tokens.at(index).is(Token::Colon)) { + if (index < tokens.size() && tokens.at(index).is(expectedTerminator)) { // it's a binding. for (int i = start; i < index; ++i) { const Token &tok = tokens.at(i);