diff options
Diffstat (limited to 'src/plugins/texteditor/highlighter.cpp')
-rw-r--r-- | src/plugins/texteditor/highlighter.cpp | 63 |
1 files changed, 16 insertions, 47 deletions
diff --git a/src/plugins/texteditor/highlighter.cpp b/src/plugins/texteditor/highlighter.cpp index 29b5a8eab5..a81d66a3af 100644 --- a/src/plugins/texteditor/highlighter.cpp +++ b/src/plugins/texteditor/highlighter.cpp @@ -110,35 +110,6 @@ Highlighter::Highlighter() &categoryForTextStyle); } -Highlighter::Definition Highlighter::definitionForDocument(const TextDocument *document) -{ - const Utils::MimeType mimeType = Utils::mimeTypeForName(document->mimeType()); - Definition definition; - if (mimeType.isValid()) - definition = Highlighter::definitionForMimeType(mimeType.name()); - if (!definition.isValid()) - definition = Highlighter::definitionForFilePath(document->filePath()); - return definition; -} - -Highlighter::Definition Highlighter::definitionForMimeType(const QString &mimeType) -{ - if (mimeType.isEmpty()) - return {}; - const Definitions definitions = definitionsForMimeType(mimeType); - if (definitions.size() == 1) - return definitions.first(); - return highlightRepository()->definitionForMimeType(mimeType); -} - -Highlighter::Definition Highlighter::definitionForFilePath(const Utils::FilePath &fileName) -{ - const Definitions definitions = definitionsForFileName(fileName); - if (definitions.size() == 1) - return definitions.first(); - return highlightRepository()->definitionForFileName(fileName.fileName()); -} - Highlighter::Definition Highlighter::definitionForName(const QString &name) { return highlightRepository()->definitionForName(name); @@ -147,22 +118,20 @@ Highlighter::Definition Highlighter::definitionForName(const QString &name) Highlighter::Definitions Highlighter::definitionsForDocument(const TextDocument *document) { QTC_ASSERT(document, return {}); + // First try to find definitions for the file path, only afterwards try the MIME type. + // An example where that is important is if there was a definition for "*.rb.xml", which + // cannot be referred to with a MIME type (since there is none), but there is the definition + // for XML files, which specifies a MIME type in addition to a glob pattern. + // If we check the MIME type first and then skip the pattern, the definition for "*.rb.xml" is + // never considered. + // The KSyntaxHighlighting CLI also completely ignores MIME types. + const Definitions &fileNameDefinitions = definitionsForFileName(document->filePath()); + if (!fileNameDefinitions.isEmpty()) + return fileNameDefinitions; const Utils::MimeType &mimeType = Utils::mimeTypeForName(document->mimeType()); - if (mimeType.isValid()) { - if (mimeType.name() == "text/plain") { - // text/plain is the base mime type for all text types so ignore it and try matching the - // file name against the pattern and only if no definition can be found for the - // file name try matching the mime type - const Definitions &fileNameDefinitions = definitionsForFileName(document->filePath()); - if (!fileNameDefinitions.isEmpty()) - return fileNameDefinitions; - return definitionsForMimeType(mimeType.name()); - } - const Definitions &mimeTypeDefinitions = definitionsForMimeType(mimeType.name()); - if (!mimeTypeDefinitions.isEmpty()) - return mimeTypeDefinitions; - } - return definitionsForFileName(document->filePath()); + if (!mimeType.isValid()) + return fileNameDefinitions; + return definitionsForMimeType(mimeType.name()); } static Highlighter::Definition definitionForSetting(const QString &settingsKey, @@ -206,8 +175,8 @@ Highlighter::Definitions Highlighter::definitionsForFileName(const Utils::FilePa return definitions; } -void Highlighter::rememberDefintionForDocument(const Highlighter::Definition &definition, - const TextDocument *document) +void Highlighter::rememberDefinitionForDocument(const Highlighter::Definition &definition, + const TextDocument *document) { QTC_ASSERT(document, return ); if (!definition.isValid()) @@ -236,7 +205,7 @@ void Highlighter::rememberDefintionForDocument(const Highlighter::Definition &de settings->endGroup(); } -void Highlighter::clearDefintionForDocumentCache() +void Highlighter::clearDefinitionForDocumentCache() { QSettings *settings = Core::ICore::settings(); settings->beginGroup(Constants::HIGHLIGHTER_SETTINGS_CATEGORY); |