diff options
Diffstat (limited to 'src/plugins/texteditor/generichighlighter/manager.cpp')
-rw-r--r-- | src/plugins/texteditor/generichighlighter/manager.cpp | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/src/plugins/texteditor/generichighlighter/manager.cpp b/src/plugins/texteditor/generichighlighter/manager.cpp index 16388f629a..ca68aaf5a4 100644 --- a/src/plugins/texteditor/generichighlighter/manager.cpp +++ b/src/plugins/texteditor/generichighlighter/manager.cpp @@ -184,6 +184,11 @@ void Manager::gatherDefinitionsMimeTypes(QFutureInterface<Core::MimeType> &futur Core::MimeDatabase *mimeDatabase = Core::ICore::instance()->mimeDatabase(); QSet<QString> knownSuffixes = QSet<QString>::fromList(mimeDatabase->suffixes()); + QHash<QString, Core::MimeType> userModified; + const QList<Core::MimeType> &userMimeTypes = mimeDatabase->readUserModifiedMimeTypes(); + foreach (const Core::MimeType &userMimeType, userMimeTypes) + userModified.insert(userMimeType.type(), userMimeType); + foreach (const QString &path, definitionsPaths) { if (path.isEmpty()) continue; @@ -227,25 +232,35 @@ void Manager::gatherDefinitionsMimeTypes(QFutureInterface<Core::MimeType> &futur m_idByMimeType.insert(type, id); Core::MimeType mimeType = mimeDatabase->findByType(type); if (mimeType.isNull()) { - if (globPatterns.isEmpty()) { - foreach (const QString &pattern, metaData->patterns()) { - static const QLatin1String mark("*."); - if (pattern.startsWith(mark)) { - const QString &suffix = pattern.right(pattern.length() - 2); - if (!knownSuffixes.contains(suffix)) - knownSuffixes.insert(suffix); - else - continue; - } - QRegExp regExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard); - globPatterns.append(Core::MimeGlobPattern(regExp, 50)); - } - } - mimeType.setType(type); mimeType.setSubClassesOf(textPlain); mimeType.setComment(metaData->name()); - mimeType.setGlobPatterns(globPatterns); + + // If there's a user modification for this mime type, we want to use the + // modified patterns and rule-based matchers. If not, just consider what + // is specified in the definition file. + QHash<QString, Core::MimeType>::const_iterator it = + userModified.find(mimeType.type()); + if (it == userModified.end()) { + if (globPatterns.isEmpty()) { + foreach (const QString &pattern, metaData->patterns()) { + static const QLatin1String mark("*."); + if (pattern.startsWith(mark)) { + const QString &suffix = pattern.right(pattern.length() - 2); + if (!knownSuffixes.contains(suffix)) + knownSuffixes.insert(suffix); + else + continue; + } + QRegExp regExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard); + globPatterns.append(Core::MimeGlobPattern(regExp, 50)); + } + } + mimeType.setGlobPatterns(globPatterns); + } else { + mimeType.setGlobPatterns(it.value().globPatterns()); + mimeType.setMagicRuleMatchers(it.value().magicRuleMatchers()); + } mimeDatabase->addMimeType(mimeType); future.reportResult(mimeType); @@ -275,6 +290,8 @@ void Manager::registerMimeTypesFinished() QSharedPointer<HighlightDefinitionMetaData> Manager::parseMetadata(const QFileInfo &fileInfo) { static const QLatin1Char kSemiColon(';'); + static const QLatin1Char kSpace(' '); + static const QLatin1Char kDash('-'); static const QLatin1String kLanguage("language"); static const QLatin1String kArtificial("text/x-artificial-"); @@ -304,7 +321,7 @@ QSharedPointer<HighlightDefinitionMetaData> Manager::parseMetadata(const QFileIn // There are definitions which do not specify a MIME type, but specify file // patterns. Creating an artificial MIME type is a workaround. QString artificialType(kArtificial); - artificialType.append(metaData->name()); + artificialType.append(metaData->name().trimmed().replace(kSpace, kDash)); mimeTypes.append(artificialType); } metaData->setMimeTypes(mimeTypes); |