diff --git a/src/plugins/glsleditor/glslhighlighter.cpp b/src/plugins/glsleditor/glslhighlighter.cpp index 3c6028e0dc3..7c25b0abbf3 100644 --- a/src/plugins/glsleditor/glslhighlighter.cpp +++ b/src/plugins/glsleditor/glslhighlighter.cpp @@ -47,10 +47,7 @@ void GlslHighlighter::highlightBlock(const QString &text) lex.setState(state); lex.setScanKeywords(false); lex.setScanComments(true); - const int variant = languageVariant(parent() - ? static_cast(parent())->mimeType() - : QString()); - lex.setVariant(variant); + lex.setVariant(languageVariant(mimeType())); int initialState = state; diff --git a/src/plugins/texteditor/syntaxhighlighter.cpp b/src/plugins/texteditor/syntaxhighlighter.cpp index 5542f4d755e..8c9cc194371 100644 --- a/src/plugins/texteditor/syntaxhighlighter.cpp +++ b/src/plugins/texteditor/syntaxhighlighter.cpp @@ -61,6 +61,7 @@ public: QList> formatCategories; QTextCharFormat whitespaceFormat; bool noAutomaticHighlighting = false; + QString mimeType; }; static bool adjustRange(QTextLayout::FormatRange &range, int from, int charsDelta) @@ -364,6 +365,18 @@ QTextDocument *SyntaxHighlighter::document() const return d->doc; } +void SyntaxHighlighter::setMimeType(const QString &mimeType) +{ + Q_D(SyntaxHighlighter); + d->mimeType = mimeType; +} + +QString SyntaxHighlighter::mimeType() const +{ + Q_D(const SyntaxHighlighter); + return d->mimeType; +} + /*! \since 4.2 diff --git a/src/plugins/texteditor/syntaxhighlighter.h b/src/plugins/texteditor/syntaxhighlighter.h index bbbade3da24..dbd57a45884 100644 --- a/src/plugins/texteditor/syntaxhighlighter.h +++ b/src/plugins/texteditor/syntaxhighlighter.h @@ -44,6 +44,9 @@ public: void setDocument(QTextDocument *doc); QTextDocument *document() const; + void setMimeType(const QString &mimeType); + QString mimeType() const; + static QList generateColors(int n, const QColor &background); // Don't call in constructors of derived classes diff --git a/src/plugins/texteditor/syntaxhighlighterrunner.cpp b/src/plugins/texteditor/syntaxhighlighterrunner.cpp index a10f20c5275..0d5e32893ee 100644 --- a/src/plugins/texteditor/syntaxhighlighterrunner.cpp +++ b/src/plugins/texteditor/syntaxhighlighterrunner.cpp @@ -30,6 +30,7 @@ public: SyntaxHighlighterRunnerPrivate(SyntaxHighlighterRunner::SyntaxHighlighterCreator creator, QTextDocument *document, bool async, + const QString &mimeType, FontSettings fontSettings) { if (async) { @@ -42,6 +43,7 @@ public: m_highlighter.reset(creator()); m_highlighter->setFontSettings(fontSettings); m_highlighter->setDocument(m_document); + m_highlighter->setMimeType(mimeType); m_highlighter->setParent(m_document); connect(m_highlighter.get(), @@ -111,8 +113,9 @@ signals: SyntaxHighlighterRunner::SyntaxHighlighterRunner(SyntaxHighlighterCreator creator, QTextDocument *document, bool async, + const QString &mimeType, const TextEditor::FontSettings &fontSettings) - : d(new SyntaxHighlighterRunnerPrivate(creator, document, async, fontSettings)) + : d(new SyntaxHighlighterRunnerPrivate(creator, document, async, mimeType, fontSettings)) , m_document(document) { m_useGenericHighlighter = qobject_cast(d->m_highlighter.get()); diff --git a/src/plugins/texteditor/syntaxhighlighterrunner.h b/src/plugins/texteditor/syntaxhighlighterrunner.h index e7c8001af2f..7202ebf401d 100644 --- a/src/plugins/texteditor/syntaxhighlighterrunner.h +++ b/src/plugins/texteditor/syntaxhighlighterrunner.h @@ -24,11 +24,12 @@ class TEXTEDITOR_EXPORT SyntaxHighlighterRunner : public QObject public: using SyntaxHighlighterCreator = std::function; - SyntaxHighlighterRunner(SyntaxHighlighterCreator creator, - QTextDocument *document, - bool async, - const TextEditor::FontSettings &fontSettings - = TextEditorSettings::fontSettings()); + SyntaxHighlighterRunner( + SyntaxHighlighterCreator creator, + QTextDocument *document, + bool async, + const QString &mimeType, + const TextEditor::FontSettings &fontSettings = TextEditorSettings::fontSettings()); virtual ~SyntaxHighlighterRunner(); void setExtraFormats(const QMap> &formats); diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 225221c4780..a60c729ed4a 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -921,7 +921,10 @@ void TextDocument::resetSyntaxHighlighter(const std::functionm_highlighterRunner = new SyntaxHighlighterRunner(creator, document(), threaded && envValue); + d->m_highlighterRunner = new SyntaxHighlighterRunner(creator, + document(), + threaded && envValue, + mimeType()); } void TextDocument::cleanWhitespace(const QTextCursor &cursor) diff --git a/tests/auto/texteditor/highlighter/tst_highlighter.cpp b/tests/auto/texteditor/highlighter/tst_highlighter.cpp index df9af0c40c3..aaba61161bc 100644 --- a/tests/auto/texteditor/highlighter/tst_highlighter.cpp +++ b/tests/auto/texteditor/highlighter/tst_highlighter.cpp @@ -60,7 +60,7 @@ Last)"; doc->setPlainText(text); highlighterRunner = new SyntaxHighlighterRunner( - [this] { return new SyntaxHighlighter(doc, fontsettings); }, doc, false, fontsettings); + [this] { return new SyntaxHighlighter(doc, fontsettings); }, doc, false, {}, fontsettings); } static const HighlightingResults &highlightingResults()