File indexing completed on 2024-05-12 04:02:19
0001 /* 0002 SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org> 0003 SPDX-FileCopyrightText: 2020 Jonathan Poelen <jonathan.poelen@gmail.com> 0004 0005 SPDX-License-Identifier: MIT 0006 */ 0007 0008 #ifndef KSYNTAXHIGHLIGHTING_KEYWORDLIST_P_H 0009 #define KSYNTAXHIGHLIGHTING_KEYWORDLIST_P_H 0010 0011 #include <QString> 0012 #include <QStringList> 0013 #include <QStringView> 0014 0015 #include <vector> 0016 0017 QT_BEGIN_NAMESPACE 0018 class QXmlStreamReader; 0019 QT_END_NAMESPACE 0020 0021 namespace KSyntaxHighlighting 0022 { 0023 class Repository; 0024 class DefinitionData; 0025 0026 class KeywordList 0027 { 0028 public: 0029 KeywordList() = default; 0030 ~KeywordList() = default; 0031 0032 bool isEmpty() const 0033 { 0034 return m_keywords.isEmpty(); 0035 } 0036 0037 const QString &name() const 0038 { 0039 return m_name; 0040 } 0041 0042 const QStringList &keywords() const 0043 { 0044 return m_keywords; 0045 } 0046 0047 Qt::CaseSensitivity caseSensitivity() const 0048 { 0049 return m_caseSensitive; 0050 } 0051 0052 void setKeywordList(const QStringList &keywords) 0053 { 0054 m_keywords = keywords; 0055 m_keywordsSortedCaseSensitive.clear(); 0056 m_keywordsSortedCaseInsensitive.clear(); 0057 initLookupForCaseSensitivity(m_caseSensitive); 0058 } 0059 0060 /** Checks if @p str is a keyword in this list. */ 0061 bool contains(QStringView str) const 0062 { 0063 return contains(str, m_caseSensitive); 0064 } 0065 0066 /** Checks if @p str is a keyword in this list, overriding the global case-sensitivity setting. */ 0067 bool contains(QStringView str, Qt::CaseSensitivity caseSensitive) const; 0068 0069 void load(QXmlStreamReader &reader); 0070 void setCaseSensitivity(Qt::CaseSensitivity caseSensitive); 0071 void initLookupForCaseSensitivity(Qt::CaseSensitivity caseSensitive); 0072 void resolveIncludeKeywords(DefinitionData &def); 0073 0074 private: 0075 /** 0076 * name of keyword list as in XML 0077 */ 0078 QString m_name; 0079 0080 /** 0081 * raw list of keywords, as seen in XML (but trimmed) 0082 */ 0083 QStringList m_keywords; 0084 0085 /** 0086 * raw list of include keywords, as seen in XML (but trimmed) 0087 */ 0088 QStringList m_includes; 0089 0090 /** 0091 * default case-sensitivity setting 0092 */ 0093 Qt::CaseSensitivity m_caseSensitive = Qt::CaseSensitive; 0094 0095 /** 0096 * case-sensitive sorted string references to m_keywords for lookup 0097 */ 0098 std::vector<QStringView> m_keywordsSortedCaseSensitive; 0099 0100 /** 0101 * case-insensitive sorted string references to m_keywords for lookup 0102 */ 0103 std::vector<QStringView> m_keywordsSortedCaseInsensitive; 0104 }; 0105 } 0106 0107 #endif // KSYNTAXHIGHLIGHTING_KEYWORDLIST_P_H