OSDN Git Service

fakevim: start working on some syntax highlighting infrastructure
authorhjk <qtc-committer@nokia.com>
Tue, 27 Apr 2010 16:02:19 +0000 (18:02 +0200)
committerhjk <qtc-committer@nokia.com>
Wed, 28 Apr 2010 09:19:15 +0000 (11:19 +0200)
src/plugins/fakevim/fakevim.pro
src/plugins/fakevim/fakevimhandler.cpp
src/plugins/fakevim/fakevimhandler.h
src/plugins/fakevim/fakevimsyntax.cpp [new file with mode: 0644]
src/plugins/fakevim/fakevimsyntax.h [new file with mode: 0644]

index 68d53d8..5a4df06 100644 (file)
@@ -15,9 +15,11 @@ include(../../shared/indenter/indenter.pri)
 QT += gui
 SOURCES += fakevimactions.cpp \
     fakevimhandler.cpp \
+    fakevimsyntax.cpp \
     fakevimplugin.cpp
 HEADERS += fakevimactions.h \
     fakevimhandler.h \
+    fakevimsyntax.h \
     fakevimplugin.h
 FORMS += fakevimoptions.ui
 OTHER_FILES += FakeVim.pluginspec
index 72c579c..8c79744 100644 (file)
@@ -27,8 +27,6 @@
 **
 **************************************************************************/
 
-#include "fakevimhandler.h"
-
 //
 // ATTENTION:
 //
@@ -59,6 +57,9 @@
 //   if the last movement command was exclusive (MoveExclusive).
 //   The value of m_tc.anchor() is not used.
 
+#include "fakevimhandler.h"
+#include "fakevimsyntax.h"
+
 #include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
@@ -686,9 +687,11 @@ FakeVimHandler::Private::Mappings FakeVimHandler::Private::m_mappings;
 
 FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget)
 {
+    //static PythonHighlighterRules pythonRules;
     q = parent;
     m_textedit = qobject_cast<QTextEdit *>(widget);
     m_plaintextedit = qobject_cast<QPlainTextEdit *>(widget);
+    //new Highlighter(EDITOR(document()), &pythonRules);
     init();
 }
 
index e2aa81d..7543d8c 100644 (file)
@@ -101,4 +101,4 @@ private:
 } // namespace Internal
 } // namespace FakeVim
 
-#endif // FAKEVIM_H
+#endif // FAKEVIM_HANDLER_H
diff --git a/src/plugins/fakevim/fakevimsyntax.cpp b/src/plugins/fakevim/fakevimsyntax.cpp
new file mode 100644 (file)
index 0000000..b8d104a
--- /dev/null
@@ -0,0 +1,116 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "fakevimsyntax.h"
+
+#include <utils/qtcassert.h>
+
+typedef QLatin1String _;
+
+namespace FakeVim {
+namespace Internal {
+
+///////////////////////////////////////////////////////////////////////
+//
+// HighlighterRules
+//
+///////////////////////////////////////////////////////////////////////
+
+HighlighterRules::HighlighterRules()
+{}
+
+void HighlighterRules::addKeyWord(const QString &keyword, const QByteArray &group)
+{
+    m_keywordGroups.insert(keyword, group);
+}
+
+///////////////////////////////////////////////////////////////////////
+//
+// PythonHighlighter
+//
+///////////////////////////////////////////////////////////////////////
+
+PythonHighlighterRules::PythonHighlighterRules()
+{
+    const QByteArray stmt = "statement";
+    addKeyWord(_("assert"), stmt);
+    addKeyWord(_("break"), stmt);
+    addKeyWord(_("continue"), stmt);
+    addKeyWord(_("del"), stmt);
+    addKeyWord(_("except"), stmt);
+    addKeyWord(_("exec"), stmt);
+    addKeyWord(_("finally"), stmt);
+    addKeyWord(_("global"), stmt);
+    addKeyWord(_("lambda"), stmt);
+    addKeyWord(_("pass"), stmt);
+    addKeyWord(_("print"), stmt);
+    addKeyWord(_("raise"), stmt);
+    addKeyWord(_("return"), stmt);
+    addKeyWord(_("try"), stmt);
+    addKeyWord(_("with"), stmt);
+    addKeyWord(_("yield"), stmt);
+
+    const QByteArray func = "function";
+    const QByteArray options = "nextgroup=pythonFunction skipwhite";
+    addKeyWord(_("def"), stmt);
+    addKeyWord(_("class"), stmt);
+}
+
+
+///////////////////////////////////////////////////////////////////////
+//
+// Highlighter
+//
+///////////////////////////////////////////////////////////////////////
+
+Highlighter::Highlighter(QTextDocument *doc, HighlighterRules *rules)
+  : QSyntaxHighlighter(doc), m_rules(rules)
+{}
+
+void Highlighter::highlightBlock(const QString &text)
+{
+    QTextCharFormat myClassFormat;
+    myClassFormat.setFontWeight(QFont::Bold);
+    myClassFormat.setForeground(Qt::darkMagenta);
+    
+    KeywordGroupMap::ConstIterator it, et = m_rules->m_keywordGroups.end();
+    for (it = m_rules->m_keywordGroups.begin(); it != et; ++it) {
+        const QString &keyword = it.key();
+        //qDebug() << "EXAMINING " << keyword;
+        int index = text.indexOf(keyword);
+        while (index >= 0) {
+            setFormat(index, keyword.size(), myClassFormat);
+            index = text.indexOf(keyword, index + keyword.size());
+         }
+    }
+}
+
+} // namespace Internal
+} // namespace FakeVim
+
diff --git a/src/plugins/fakevim/fakevimsyntax.h b/src/plugins/fakevim/fakevimsyntax.h
new file mode 100644 (file)
index 0000000..513b8e3
--- /dev/null
@@ -0,0 +1,76 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef FAKEVIM_SYNTAX_H
+#define FAKEVIM_SYNTAX_H
+
+#include "fakevimactions.h"
+
+#include <QtCore/QHash>
+#include <QtGui/QSyntaxHighlighter>
+
+namespace FakeVim {
+namespace Internal {
+
+class HighlighterRules
+{
+public:
+    HighlighterRules();
+    virtual ~HighlighterRules() {}
+    void addKeyWord(const QString &keyword, const QByteArray &group);
+    friend class Highlighter;
+
+private:
+    // Maps keyword -> groupname
+    typedef QHash<QString, QByteArray> KeywordGroupMap;
+    KeywordGroupMap m_keywordGroups;
+};
+
+class PythonHighlighterRules : public HighlighterRules
+{
+public:
+    PythonHighlighterRules();
+};
+
+class Highlighter : public QSyntaxHighlighter
+{
+public:
+    Highlighter(QTextDocument *doc, HighlighterRules *rules);
+
+private:
+    void highlightBlock(const QString &text);
+    typedef HighlighterRules::KeywordGroupMap KeywordGroupMap;
+
+    HighlighterRules *m_rules;
+};
+
+} // namespace Internal
+} // namespace FakeVim
+
+#endif // FAKEVIM_SYNTAX_H