Commit 55b26868 authored by Leandro Melo's avatar Leandro Melo
Browse files

Generic highlighter is now part of the text editor plugin.

parent 9b6c86bd
......@@ -85,6 +85,13 @@ bool CommentDefinition::hasSingleLineStyle() const
bool CommentDefinition::hasMultiLineStyle() const
{ return !m_multiLineStart.isEmpty() && !m_multiLineEnd.isEmpty(); }
void CommentDefinition::clearCommentStyles()
{
m_singleLine.clear();
m_multiLineStart.clear();
m_multiLineEnd.clear();
}
namespace {
bool isComment(const QString &text,
......
......@@ -58,6 +58,8 @@ public:
bool hasSingleLineStyle() const;
bool hasMultiLineStyle() const;
void clearCommentStyles();
private:
bool m_afterWhiteSpaces;
QString m_singleLine;
......
<plugin name="GenericEditor" version="2.0.80" compatVersion="2.0.80">
<vendor>Nokia Corporation</vendor>
<copyright>(C) 2010 Nokia Corporation</copyright>
<license>
Commercial Usage
Licensees holding valid Qt Commercial licenses may use this plugin 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 plugin may be used under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation. 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.
</license>
<category>Qt Creator</category>
<description>Generic editor with highlighting for a variety of languages.</description>
<url>http://qt.nokia.com</url>
<dependencyList>
<dependency name="Core" version="2.0.80"/>
<dependency name="TextEditor" version="2.0.80"/>
</dependencyList>
</plugin>
/**************************************************************************
**
** 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 "editor.h"
#include "genericeditorconstants.h"
#include "genericeditorplugin.h"
#include "highlightdefinition.h"
#include "highlighter.h"
#include "highlighterexception.h"
#include <coreplugin/uniqueidmanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/mimedatabase.h>
#include <texteditor/texteditorconstants.h>
#include <texteditor/basetextdocument.h>
#include <texteditor/texteditorsettings.h>
#include <texteditor/fontsettings.h>
#include <texteditor/tabsettings.h>
#include <texteditor/normalindenter.h>
#include <QtCore/QSharedPointer>
#include <QtCore/QFileInfo>
using namespace GenericEditor;
using namespace Internal;
Editor::Editor(QWidget *parent) : TextEditor::BaseTextEditor(parent)
{
connect(file(), SIGNAL(changed()), this, SLOT(configure()));
}
Editor::~Editor()
{}
void Editor::unCommentSelection()
{
Utils::unCommentSelection(this, m_commentDefinition);
}
TextEditor::BaseTextEditorEditable *Editor::createEditableInterface()
{
EditorEditable *editable = new EditorEditable(this);
return editable;
}
void Editor::setFontSettings(const TextEditor::FontSettings & fs)
{
TextEditor::BaseTextEditor::setFontSettings(fs);
Highlighter *highlighter = static_cast<Highlighter *>(baseTextDocument()->syntaxHighlighter());
if (!highlighter)
return;
highlighter->configureFormats(fs);
highlighter->rehighlight();
}
void Editor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar)
{
m_indenter->indentBlock(doc, block, typedChar, tabSettings());
}
void Editor::configure()
{
const QString &mimeType = Core::ICore::instance()->mimeDatabase()->findByFile(
QFileInfo(file()->fileName())).type();
baseTextDocument()->setMimeType(mimeType);
try {
const QString &definitionId =
GenericEditorPlugin::instance()->definitionIdByMimeType(mimeType);
const QSharedPointer<HighlightDefinition> &definition =
GenericEditorPlugin::instance()->definition(definitionId);
Highlighter *highlighter = new Highlighter(definition->initialContext());
highlighter->configureFormats(TextEditor::TextEditorSettings::instance()->fontSettings());
baseTextDocument()->setSyntaxHighlighter(highlighter);
m_commentDefinition.setAfterWhiteSpaces(definition->isCommentAfterWhiteSpaces());
m_commentDefinition.setSingleLine(definition->singleLineComment());
m_commentDefinition.setMultiLineStart(definition->multiLineCommentStart());
m_commentDefinition.setMultiLineEnd(definition->multiLineCommentEnd());
// @todo: It's possible to specify an indenter style in the definition file. However, this
// is not really being used because Kate recommends to configure indentation through
// another feature. Maybe we should provide something similar in Creator? For now the
// normal indenter is used.
m_indenter.reset(new TextEditor::NormalIndenter);
} catch (const HighlighterException &) {
// No highlighter will be set.
}
}
EditorEditable::EditorEditable(Editor *editor) :
TextEditor::BaseTextEditorEditable(editor)
{
Core::UniqueIDManager *uidm = Core::UniqueIDManager::instance();
m_context << uidm->uniqueIdentifier(GenericEditor::Constants::GENERIC_EDITOR);
m_context << uidm->uniqueIdentifier(TextEditor::Constants::C_TEXTEDITOR);
}
QString EditorEditable::id() const
{ return QLatin1String(GenericEditor::Constants::GENERIC_EDITOR); }
QList<int> EditorEditable::context() const
{ return m_context; }
bool EditorEditable::isTemporary() const
{ return false; }
bool EditorEditable::duplicateSupported() const
{ return true; }
Core::IEditor *EditorEditable::duplicate(QWidget *parent)
{
Editor *newEditor = new Editor(parent);
newEditor->duplicateFrom(editor());
GenericEditorPlugin::instance()->initializeEditor(newEditor);
return newEditor->editableInterface();
}
/**************************************************************************
**
** 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 GENERICEDITOR_H
#define GENERICEDITOR_H
#include <texteditor/basetexteditor.h>
#include <utils/uncommentselection.h>
#include <QtCore/QList>
#include <QtCore/QScopedPointer>
#include <QtGui/QTextBlock>
QT_BEGIN_NAMESPACE
class QString;
class QTextDocument;
QT_END_NAMESPACE
namespace TextEditor {
class Indenter;
}
namespace GenericEditor {
namespace Internal {
class Editor : public TextEditor::BaseTextEditor
{
Q_OBJECT
public:
Editor(QWidget *parent = 0);
virtual ~Editor();
virtual void unCommentSelection();
protected:
virtual TextEditor::BaseTextEditorEditable *createEditableInterface();
public slots:
virtual void setFontSettings(const TextEditor::FontSettings &);
private slots:
void configure();
private:
Q_DISABLE_COPY(Editor)
virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar);
Utils::CommentDefinition m_commentDefinition;
QScopedPointer<TextEditor::Indenter> m_indenter;
};
class EditorEditable : public TextEditor::BaseTextEditorEditable
{
Q_OBJECT
public:
EditorEditable(Editor *editor);
protected:
virtual QString id() const;
virtual QList<int> context() const;
virtual bool isTemporary() const;
virtual bool duplicateSupported() const;
virtual Core::IEditor *duplicate(QWidget *parent);
private:
QList<int> m_context;
};
} // namespace Internal
} // namespace GenericEditor
#endif // GENERICEDITOR_H
/**************************************************************************
**
** 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 "editorfactory.h"
#include "genericeditorconstants.h"
#include "editor.h"
#include "genericeditorplugin.h"
#include <coreplugin/editormanager/editormanager.h>
using namespace GenericEditor;
using namespace Internal;
EditorFactory::EditorFactory(QObject *parent) : Core::IEditorFactory(parent)
{}
EditorFactory::~EditorFactory()
{}
Core::IEditor *EditorFactory::createEditor(QWidget *parent)
{
Editor *genericEditor = new Editor(parent);
GenericEditorPlugin::instance()->initializeEditor(genericEditor);
return genericEditor->editableInterface();
}
QStringList EditorFactory::mimeTypes() const
{ return m_mimeTypes; }
QString EditorFactory::id() const
{
return QLatin1String(GenericEditor::Constants::GENERIC_EDITOR);
}
QString EditorFactory::displayName() const
{
return tr(GenericEditor::Constants::GENERIC_EDITOR_DISPLAY_NAME);
}
Core::IFile *EditorFactory::open(const QString &fileName)
{
Core::IEditor *iface = Core::EditorManager::instance()->openEditor(fileName, id());
return iface ? iface->file() : 0;
}
/**************************************************************************
**
** 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 GENERICEDITORFACTORY_H
#define GENERICEDITORFACTORY_H
#include <coreplugin/editormanager/ieditorfactory.h>
#include <QtCore/QStringList>
namespace GenericEditor {
namespace Internal {
class Editor;
class EditorFactory : public Core::IEditorFactory
{
Q_OBJECT
friend class GenericEditorPlugin;
public:
EditorFactory(QObject *parent = 0);
virtual ~EditorFactory();
virtual Core::IEditor *createEditor(QWidget *parent);
virtual QStringList mimeTypes() const;
virtual QString id() const;
virtual QString displayName() const;
virtual Core::IFile *open(const QString &fileName);
private:
QStringList m_mimeTypes;
};
} // namespace Internal
} // namespace GenericEditor
#endif // GENERICEDITORFACTORY_H
include(genericeditor_dependencies.pri)
LIBS *= -l$$qtLibraryTarget(GenericEditor)
TEMPLATE = lib
TARGET = GenericEditor
include(../../qtcreatorplugin.pri)
include(genericeditor_dependencies.pri)
CONFIG += help
HEADERS += \
genericeditorplugin.h \
progressdata.h \
specificrules.h \
rule.h \
reuse.h \
keywordlist.h \
itemdata.h \
includerulesinstruction.h \
highlighterexception.h \
highlighter.h \
highlightdefinitionhandler.h \
highlightdefinition.h \
dynamicrule.h \
context.h \
genericeditorconstants.h \
editor.h \
editorfactory.h
SOURCES += \
genericeditorplugin.cpp \
progressdata.cpp \
specificrules.cpp \
rule.cpp \
keywordlist.cpp \
itemdata.cpp \
includerulesinstruction.cpp \
highlighter.cpp \
highlightdefinitionhandler.cpp \
highlightdefinition.cpp \
dynamicrule.cpp \
context.cpp \
editor.cpp \
editorfactory.cpp
OTHER_FILES += GenericEditor.pluginspec
include(../../plugins/coreplugin/coreplugin.pri)
include(../../plugins/texteditor/texteditor.pri)
include(../../libs/utils/utils.pri)
/**************************************************************************
**
** 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 GENERICEDITORCONSTANTS_H
#define GENERICEDITORCONSTANTS_H
#include <QtCore/QtGlobal>
namespace GenericEditor {
namespace Constants {
const char * const GENERIC_EDITOR = "GenericEditorPlugin.GenericEditor";
const char * const GENERIC_EDITOR_DISPLAY_NAME =
QT_TRANSLATE_NOOP("OpenWith::Editors", "Generic Editor");
} // namespace Constants
} // namespace GenericEditor
#endif // GENERICEDITORCONSTANTS_H
......@@ -33,7 +33,6 @@ SUBDIRS = plugin_coreplugin \
plugin_genericprojectmanager \
plugin_qmljseditor \
plugin_mercurial \
plugin_genericeditor \
debugger/dumper.pro
contains(QT_CONFIG, declarative) {
......@@ -209,7 +208,3 @@ plugin_mercurial.subdir = mercurial
plugin_mercurial.depends = plugin_vcsbase
plugin_mercurial.depends += plugin_projectexplorer
plugin_mercurial.depends += plugin_coreplugin
plugin_genericeditor.subdir = genericeditor
plugin_genericeditor.depends = plugin_coreplugin
plugin_genericeditor.depends += plugin_texteditor
......@@ -33,7 +33,7 @@
#include "dynamicrule.h"
#include "highlightdefinition.h"
using namespace GenericEditor;
using namespace TextEditor;
using namespace Internal;
Context::Context() : m_fallthrough(false), m_dynamic(false)
......@@ -128,7 +128,7 @@ bool Context::isDynamic() const
void Context::updateDynamicRules(const QStringList &captures) const
{
GenericEditor::Internal::updateDynamicRules(m_rules, captures);
TextEditor::Internal::updateDynamicRules(m_rules, captures);
}
void Context::addRule(const QSharedPointer<Rule> &rule)
......
......@@ -36,7 +36,7 @@
#include <QtCore/QList>
#include <QtCore/QSharedPointer>
namespace GenericEditor {
namespace TextEditor {
namespace Internal {
class Rule;
......@@ -105,6 +105,6 @@ private:
};
} // namespace Internal
} // namespace GenericEditor
} // namespace TextEditor
#endif // CONTEXT_H
......@@ -30,7 +30,7 @@
#include "dynamicrule.h"
#include "reuse.h"
using namespace GenericEditor;
using namespace TextEditor;
using namespace Internal;
DynamicRule::DynamicRule() : m_active(false)
......@@ -51,7 +51,7 @@ void DynamicRule::replaceExpressions(const QStringList &captures)
updateDynamicRules(childs(), captures);
}
namespace GenericEditor {