From b19c51d609df1dad41880888e172c0751697e5bd Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Wed, 7 Apr 2010 11:29:56 +0200
Subject: [PATCH] QmlJSEditor: Highlight b in 'A on b {' as a property.

Fixes 4f1d5ce19655450c2e7c23f5583116fa559d6724

Task-number: QTCREATORBUG-893
Reviewed-by: Erik Verbruggen
---
 src/plugins/qmljseditor/qmljshighlighter.cpp | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qmljseditor/qmljshighlighter.cpp b/src/plugins/qmljseditor/qmljshighlighter.cpp
index a4dc4f05c09..3ef4a8ace3d 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);
-- 
GitLab