File indexing completed on 2024-07-14 15:12:20

0001 /*
0002    SPDX-FileCopyrightText: 2018-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "syntaxhighlightingmanager.h"
0008 #include "ruqola_debug.h"
0009 
0010 namespace
0011 {
0012 bool sortCaseInsensitively(const QString &lhs, const QString &rhs)
0013 {
0014     return lhs.compare(rhs, Qt::CaseInsensitive) < 0;
0015 }
0016 }
0017 
0018 SyntaxHighlightingManager::SyntaxHighlightingManager(QObject *parent)
0019     : QObject(parent)
0020 {
0021     initialize();
0022 }
0023 
0024 void SyntaxHighlightingManager::initialize()
0025 {
0026     mDefaultDef = mRepo.definitionForName(QStringLiteral("C++"));
0027     if (mDefaultDef.isValid()) {
0028         mSyntaxHighlightingInitialized = true;
0029         const auto definitions = mRepo.definitions();
0030         mDefinitions.reserve(definitions.size());
0031         for (const auto &definition : definitions) {
0032             mDefinitions.append(definition.name());
0033         }
0034         std::sort(mDefinitions.begin(), mDefinitions.end(), sortCaseInsensitively);
0035     } else {
0036         qCWarning(RUQOLA_LOG) << "Unable to find definition";
0037     }
0038 }
0039 
0040 KSyntaxHighlighting::Repository &SyntaxHighlightingManager::repo() const
0041 {
0042     return mRepo;
0043 }
0044 
0045 KSyntaxHighlighting::Definition SyntaxHighlightingManager::def(const QString &name) const
0046 {
0047     auto it = std::lower_bound(mDefinitions.begin(), mDefinitions.end(), name, sortCaseInsensitively);
0048     if (it != mDefinitions.end() && name.compare(*it, Qt::CaseInsensitive) == 0) {
0049         return mRepo.definitionForName(*it);
0050     }
0051     return {};
0052 }
0053 
0054 KSyntaxHighlighting::Definition SyntaxHighlightingManager::defaultDef() const
0055 {
0056     return mDefaultDef;
0057 }
0058 
0059 bool SyntaxHighlightingManager::syntaxHighlightingInitialized() const
0060 {
0061     return mSyntaxHighlightingInitialized;
0062 }
0063 
0064 SyntaxHighlightingManager *SyntaxHighlightingManager::self()
0065 {
0066     static SyntaxHighlightingManager s_self;
0067     return &s_self;
0068 }
0069 
0070 #include "moc_syntaxhighlightingmanager.cpp"