Generic highlighter is now part of the text editor plugin.

This commit is contained in:
Leandro Melo
2010-05-20 13:56:11 +02:00
parent 9b6c86bdc1
commit 55b26868e6
47 changed files with 232 additions and 671 deletions

View File

@@ -31,9 +31,20 @@
#include "tabsettings.h"
#include "texteditorconstants.h"
#include "texteditorplugin.h"
#include "texteditorsettings.h"
#include "basetextdocument.h"
#include "highlightdefinition.h"
#include "highlighter.h"
#include "highlighterexception.h"
#include "manager.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/uniqueidmanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/mimedatabase.h>
#include <QtCore/QSharedPointer>
#include <QtCore/QFileInfo>
using namespace TextEditor;
using namespace TextEditor::Internal;
@@ -54,8 +65,11 @@ PlainTextEditor::PlainTextEditor(QWidget *parent)
setRequestMarkEnabled(false);
setLineSeparatorsAllowed(true);
setMimeType(QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT));
setDisplayName(tr(Core::Constants::K_DEFAULT_TEXT_EDITOR_DISPLAY_NAME));
m_commentDefinition.clearCommentStyles();
connect(file(), SIGNAL(changed()), this, SLOT(configure()));
}
QList<int> PlainTextEditorEditable::context() const
@@ -76,7 +90,56 @@ QString PlainTextEditorEditable::id() const
return QLatin1String(Core::Constants::K_DEFAULT_TEXT_EDITOR_ID);
}
void PlainTextEditor::unCommentSelection()
{
Utils::unCommentSelection(this, m_commentDefinition);
}
void PlainTextEditor::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 PlainTextEditor::configure()
{
const QString &mimeType = Core::ICore::instance()->mimeDatabase()->findByFile(
QFileInfo(file()->fileName())).type();
baseTextDocument()->setMimeType(mimeType);
const QString &definitionId = Manager::instance()->definitionIdByMimeType(mimeType);
if (!definitionId.isEmpty()) {
try {
const QSharedPointer<HighlightDefinition> &definition =
Manager::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());
} catch (const HighlighterException &) {
}
}
// @todo: Indentation specification through the definition files is not really being
// used because Kate recommends to configure indentation through another feature.
// Maybe we should provide something similar in Creator? For now, only normal
// indentation is supported.
m_indenter.reset(new TextEditor::NormalIndenter);
}
void PlainTextEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar)
{
m_indenter.indentBlock(doc, block, typedChar, tabSettings());
m_indenter->indentBlock(doc, block, typedChar, tabSettings());
}