diff options
author | David Schulz <david.schulz@qt.io> | 2018-11-08 11:39:48 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-01-28 11:37:08 +0000 |
commit | 14834e6b0a4e7c1272ec3a1838b0634dd66e72ea (patch) | |
tree | 23caed8a748c0d38c59e1f92b448551122d11df2 /src/plugins/texteditor/texteditor.cpp | |
parent | 1c77d7e1a79f59485eb90c066d17ec7436f46a93 (diff) | |
download | qt-creator-14834e6b0a4e7c1272ec3a1838b0634dd66e72ea.tar.gz |
TextEditor: replace generic highlighter with ksyntaxhighlighting
Fixes: QTCREATORBUG-21029
Change-Id: I9894c4384e0e47da6bf030b7b8e07c3ad4737ff3
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/texteditor/texteditor.cpp')
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 79 |
1 files changed, 35 insertions, 44 deletions
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 96cf099c5e..aed04a3ba7 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -37,31 +37,27 @@ #include "circularclipboardassist.h" #include "codecselector.h" #include "completionsettings.h" -#include "highlighterutils.h" +#include "extraencodingsettings.h" +#include "highlighter.h" +#include "highlightersettings.h" #include "icodestylepreferences.h" #include "indenter.h" +#include "refactoroverlay.h" #include "snippets/snippet.h" +#include "storagesettings.h" #include "syntaxhighlighter.h" #include "tabsettings.h" #include "textdocument.h" #include "textdocumentlayout.h" #include "texteditorconstants.h" #include "texteditoroverlay.h" -#include "refactoroverlay.h" #include "texteditorsettings.h" #include "typingsettings.h" -#include "extraencodingsettings.h" -#include "storagesettings.h" #include <texteditor/codeassist/assistinterface.h> #include <texteditor/codeassist/codeassistant.h> #include <texteditor/codeassist/completionassistprovider.h> #include <texteditor/codeassist/documentcontentcompletion.h> -#include <texteditor/generichighlighter/context.h> -#include <texteditor/generichighlighter/highlightdefinition.h> -#include <texteditor/generichighlighter/highlighter.h> -#include <texteditor/generichighlighter/highlightersettings.h> -#include <texteditor/generichighlighter/manager.h> #include <coreplugin/icore.h> #include <aggregation/aggregate.h> @@ -94,6 +90,7 @@ #include <QClipboard> #include <QCoreApplication> #include <QDebug> +#include <QFutureWatcher> #include <QGridLayout> #include <QKeyEvent> #include <QMap> @@ -847,17 +844,21 @@ TextEditorWidgetPrivate::~TextEditorWidgetPrivate() */ static void updateEditorInfoBar(TextEditorWidget *widget) { - Id infoSyntaxDefinition(Constants::INFO_SYNTAX_DEFINITION); + Id id(Constants::INFO_SYNTAX_DEFINITION); InfoBar *infoBar = widget->textDocument()->infoBar(); if (!widget->isMissingSyntaxDefinition()) { - infoBar->removeInfo(infoSyntaxDefinition); - } else if (infoBar->canInfoBeAdded(infoSyntaxDefinition)) { - InfoBarEntry info(infoSyntaxDefinition, + infoBar->removeInfo(id); + } else if (infoBar->canInfoBeAdded(id)) { + InfoBarEntry info(id, BaseTextEditor::tr("A highlight definition was not found for this file. " - "Would you like to try to find one?"), + "Would you like to update highlight definition files?"), InfoBarEntry::GlobalSuppressionEnabled); - info.setCustomButtonInfo(BaseTextEditor::tr("Show Highlighter Options..."), [widget]() { - ICore::showOptionsDialog(Constants::TEXT_EDITOR_HIGHLIGHTER_SETTINGS, widget); + info.setCustomButtonInfo(BaseTextEditor::tr("Update Definitions"), [id, widget]() { + widget->textDocument()->infoBar()->removeInfo(id); + Highlighter::updateDefinitions([widget = QPointer<TextEditorWidget>(widget)]() { + if (widget) + widget->configureGenericHighlighter(); + }); }); infoBar->addInfo(info); @@ -8463,37 +8464,30 @@ QString TextEditorWidget::textAt(int from, int to) const void TextEditorWidget::configureGenericHighlighter() { auto highlighter = new Highlighter(); - highlighter->setTabSettings(textDocument()->tabSettings()); textDocument()->setSyntaxHighlighter(highlighter); setCodeFoldingSupported(false); const QString type = textDocument()->mimeType(); const MimeType mimeType = Utils::mimeTypeForName(type); - if (mimeType.isValid()) { - d->m_isMissingSyntaxDefinition = true; - - QString definitionId; - setMimeTypeForHighlighter(highlighter, mimeType, textDocument()->filePath().toString(), - &definitionId); - - if (!definitionId.isEmpty()) { - d->m_isMissingSyntaxDefinition = false; - const QSharedPointer<HighlightDefinition> &definition = - Manager::instance()->definition(definitionId); - if (!definition.isNull() && definition->isValid()) { - d->m_commentDefinition.isAfterWhiteSpaces = definition->isCommentAfterWhiteSpaces(); - d->m_commentDefinition.singleLine = definition->singleLineComment(); - d->m_commentDefinition.multiLineStart = definition->multiLineCommentStart(); - d->m_commentDefinition.multiLineEnd = definition->multiLineCommentEnd(); - - setCodeFoldingSupported(true); - } - } else { - const QString fileName = textDocument()->filePath().toString(); - if (TextEditorSettings::highlighterSettings().isIgnoredFilePattern(fileName)) - d->m_isMissingSyntaxDefinition = false; - } + const QString fileName = textDocument()->filePath().fileName(); + KSyntaxHighlighting::Definition definition; + if (mimeType.isValid()) + definition = Highlighter::definitionForMimeType(mimeType.name()); + if (!definition.isValid()) + definition = Highlighter::definitionForFileName(fileName); + + if (definition.isValid()) { + highlighter->setDefinition(definition); + d->m_isMissingSyntaxDefinition = false; + d->m_commentDefinition.singleLine = definition.singleLineCommentMarker(); + d->m_commentDefinition.multiLineStart = definition.multiLineCommentMarker().first; + d->m_commentDefinition.multiLineEnd = definition.multiLineCommentMarker().second; + + setCodeFoldingSupported(true); + } else { + d->m_isMissingSyntaxDefinition = + !TextEditorSettings::highlighterSettings().isIgnoredFilePattern(fileName); } textDocument()->setFontSettings(TextEditorSettings::fontSettings()); @@ -8546,9 +8540,6 @@ void TextEditorWidget::setupGenericHighlighter() connect(textDocument(), &IDocument::filePathChanged, d, &TextEditorWidgetPrivate::reconfigure); - connect(Manager::instance(), &Manager::highlightingFilesRegistered, - d, &TextEditorWidgetPrivate::reconfigure); - updateEditorInfoBar(this); } |