/src/syntax-highlighting/src/lib/highlightingdata.cpp
Line | Count | Source |
1 | | /* |
2 | | SPDX-FileCopyrightText: 2021 Jonathan Poelen <jonathan.poelen@gmail.com> |
3 | | |
4 | | SPDX-License-Identifier: MIT |
5 | | */ |
6 | | |
7 | | #include "highlightingdata_p.hpp" |
8 | | #include "ksyntaxhighlighting_logging.h" |
9 | | #include "xml_p.h" |
10 | | |
11 | | #include <QXmlStreamReader> |
12 | | #include <QStringView> |
13 | | |
14 | | using namespace KSyntaxHighlighting; |
15 | | |
16 | | template<class Data, class... Args> |
17 | | static void initRuleData(Data &data, Args &&...args) |
18 | 1.22k | { |
19 | 1.22k | new (&data) Data{std::move(args)...}; |
20 | 1.22k | } highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar, QChar const&, bool const&>(KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&, QChar const&, bool const&) Line | Count | Source | 18 | 192 | { | 19 | 192 | new (&data) Data{std::move(args)...}; | 20 | 192 | } |
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr, QString, Qt::CaseSensitivity const&, bool const&, bool const&>(KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr&, QString&&, Qt::CaseSensitivity const&, bool const&, bool const&) Line | Count | Source | 18 | 144 | { | 19 | 144 | new (&data) Data{std::move(args)...}; | 20 | 144 | } |
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules, QString, bool const&>(KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules&, QString&&, bool const&) Line | Count | Source | 18 | 132 | { | 19 | 132 | new (&data) Data{std::move(args)...}; | 20 | 132 | } |
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars, QChar, QChar>(KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&, QChar&&, QChar&&) Line | Count | Source | 18 | 168 | { | 19 | 168 | new (&data) Data{std::move(args)...}; | 20 | 168 | } |
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::Keyword, QString, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters, Qt::CaseSensitivity&, bool&>(KSyntaxHighlighting::HighlightingContextData::Rule::Keyword&, QString&&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&, Qt::CaseSensitivity&, bool&) Line | Count | Source | 18 | 288 | { | 19 | 288 | new (&data) Data{std::move(args)...}; | 20 | 288 | } |
Unexecuted instantiation: highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar, QChar&, bool const&>(KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&, QChar&, bool const&) Unexecuted instantiation: highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar, QStringBuilder<QChar, QChar> >(KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar&, QStringBuilder<QChar, QChar>&&) highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect, QString, Qt::CaseSensitivity const&, bool const&>(KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect&, QString&&, Qt::CaseSensitivity const&, bool const&) Line | Count | Source | 18 | 48 | { | 19 | 48 | new (&data) Data{std::move(args)...}; | 20 | 48 | } |
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect, QString, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters, Qt::CaseSensitivity const&>(KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect&, QString&&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&, Qt::CaseSensitivity const&) Line | Count | Source | 18 | 108 | { | 19 | 108 | new (&data) Data{std::move(args)...}; | 20 | 108 | } |
Unexecuted instantiation: highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar, QChar, bool>(KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&, QChar&&, bool&&) highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar, QString>(KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar&, QString&&) Line | Count | Source | 18 | 36 | { | 19 | 36 | new (&data) Data{std::move(args)...}; | 20 | 36 | } |
Unexecuted instantiation: highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue, QChar const&>(KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue&, QChar const&) highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::Int, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters>(KSyntaxHighlighting::HighlightingContextData::Rule::Int&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&) Line | Count | Source | 18 | 36 | { | 19 | 36 | new (&data) Data{std::move(args)...}; | 20 | 36 | } |
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::Float, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters>(KSyntaxHighlighting::HighlightingContextData::Rule::Float&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&) Line | Count | Source | 18 | 24 | { | 19 | 24 | new (&data) Data{std::move(args)...}; | 20 | 24 | } |
Unexecuted instantiation: highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect, QChar, QChar>(KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect&, QChar&&, QChar&&) highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&) Line | Count | Source | 18 | 24 | { | 19 | 24 | new (&data) Data{std::move(args)...}; | 20 | 24 | } |
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&) Line | Count | Source | 18 | 24 | { | 19 | 24 | new (&data) Data{std::move(args)...}; | 20 | 24 | } |
|
21 | | |
22 | | static Qt::CaseSensitivity attrToCaseSensitivity(QStringView str) |
23 | 468 | { |
24 | 468 | return Xml::attrToBool(str) ? Qt::CaseInsensitive : Qt::CaseSensitive; |
25 | 468 | } |
26 | | |
27 | | static HighlightingContextData::Rule::WordDelimiters loadAdditionalWordDelimiters(QXmlStreamReader &reader) |
28 | 504 | { |
29 | 504 | return HighlightingContextData::Rule::WordDelimiters{ |
30 | 504 | reader.attributes().value(QLatin1String("additionalDeliminator")).toString(), |
31 | 504 | reader.attributes().value(QLatin1String("weakDeliminator")).toString(), |
32 | 504 | }; |
33 | 504 | } |
34 | | |
35 | | static bool checkIsNotEmpty(QStringView str, const char *attrName, const QString &defName, QXmlStreamReader &reader) |
36 | 924 | { |
37 | 924 | if (!str.isEmpty()) { |
38 | 924 | return true; |
39 | 924 | } |
40 | | |
41 | 924 | qCWarning(Log) << defName << "at line" << reader.lineNumber() << ": " << attrName << "attribute is empty"; |
42 | 0 | return false; |
43 | 924 | } |
44 | | |
45 | | static bool checkIsChar(QStringView str, const char *attrName, const QString &defName, QXmlStreamReader &reader) |
46 | 192 | { |
47 | 192 | if (str.size() == 1) { |
48 | 192 | return true; |
49 | 192 | } |
50 | | |
51 | 192 | qCWarning(Log) << defName << "at line" << reader.lineNumber() << ": " << attrName << "attribute must contain exactly 1 character"; |
52 | 0 | return false; |
53 | 192 | } |
54 | | |
55 | | static bool loadRule(const QString &defName, HighlightingContextData::Rule &rule, QXmlStreamReader &reader) |
56 | 1.30k | { |
57 | 1.30k | using Rule = HighlightingContextData::Rule; |
58 | | |
59 | 1.30k | QStringView name = reader.name(); |
60 | 1.30k | const auto attrs = reader.attributes(); |
61 | 1.30k | bool isIncludeRules = false; |
62 | | |
63 | 1.30k | if (name == QLatin1String("DetectChar")) { |
64 | 192 | const auto s = attrs.value(QLatin1String("char")); |
65 | 192 | if (!checkIsChar(s, "char", defName, reader)) { |
66 | 0 | return false; |
67 | 0 | } |
68 | 192 | const QChar c = s.at(0); |
69 | 192 | const bool dynamic = Xml::attrToBool(attrs.value(QLatin1String("dynamic"))); |
70 | | |
71 | 192 | initRuleData(rule.data.detectChar, c, dynamic); |
72 | 192 | rule.type = Rule::Type::DetectChar; |
73 | 1.11k | } else if (name == QLatin1String("RegExpr")) { |
74 | 144 | const auto pattern = attrs.value(QLatin1String("String")); |
75 | 144 | if (!checkIsNotEmpty(pattern, "String", defName, reader)) { |
76 | 0 | return false; |
77 | 0 | } |
78 | | |
79 | 144 | const auto isCaseInsensitive = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive"))); |
80 | 144 | const auto isMinimal = Xml::attrToBool(attrs.value(QLatin1String("minimal"))); |
81 | 144 | const auto dynamic = Xml::attrToBool(attrs.value(QLatin1String("dynamic"))); |
82 | | |
83 | 144 | initRuleData(rule.data.regExpr, pattern.toString(), isCaseInsensitive, isMinimal, dynamic); |
84 | 144 | rule.type = Rule::Type::RegExpr; |
85 | 972 | } else if (name == QLatin1String("IncludeRules")) { |
86 | 132 | const auto context = attrs.value(QLatin1String("context")); |
87 | 132 | if (!checkIsNotEmpty(context, "context", defName, reader)) { |
88 | 0 | return false; |
89 | 0 | } |
90 | 132 | const bool includeAttribute = Xml::attrToBool(attrs.value(QLatin1String("includeAttrib"))); |
91 | | |
92 | 132 | initRuleData(rule.data.includeRules, context.toString(), includeAttribute); |
93 | 132 | rule.type = Rule::Type::IncludeRules; |
94 | 132 | isIncludeRules = true; |
95 | 840 | } else if (name == QLatin1String("Detect2Chars")) { |
96 | 0 | const auto s1 = attrs.value(QLatin1String("char")); |
97 | 0 | const auto s2 = attrs.value(QLatin1String("char1")); |
98 | 0 | if (!checkIsChar(s1, "char", defName, reader)) { |
99 | 0 | return false; |
100 | 0 | } |
101 | 0 | if (!checkIsChar(s2, "char1", defName, reader)) { |
102 | 0 | return false; |
103 | 0 | } |
104 | | |
105 | 0 | initRuleData(rule.data.detect2Chars, s1.at(0), s2.at(0)); |
106 | 0 | rule.type = Rule::Type::Detect2Chars; |
107 | 840 | } else if (name == QLatin1String("keyword")) { |
108 | 288 | const auto s = attrs.value(QLatin1String("String")); |
109 | 288 | if (!checkIsNotEmpty(s, "String", defName, reader)) { |
110 | 0 | return false; |
111 | 0 | } |
112 | 288 | Qt::CaseSensitivity caseSensitivityOverride = Qt::CaseInsensitive; |
113 | 288 | bool hasCaseSensitivityOverride = false; |
114 | | |
115 | | /** |
116 | | * we might overwrite the case sensitivity |
117 | | * then we need to init the list for lookup of that sensitivity setting |
118 | | */ |
119 | 288 | if (attrs.hasAttribute(QLatin1String("insensitive"))) { |
120 | 0 | hasCaseSensitivityOverride = true; |
121 | 0 | caseSensitivityOverride = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive"))); |
122 | 0 | } |
123 | | |
124 | 288 | initRuleData(rule.data.keyword, s.toString(), loadAdditionalWordDelimiters(reader), caseSensitivityOverride, hasCaseSensitivityOverride); |
125 | 288 | rule.type = Rule::Type::Keyword; |
126 | 552 | } else if (name == QLatin1String("DetectSpaces")) { |
127 | 84 | rule.type = Rule::Type::DetectSpaces; |
128 | 468 | } else if (name == QLatin1String("StringDetect")) { |
129 | 216 | const auto string = attrs.value(QLatin1String("String")); |
130 | 216 | if (!checkIsNotEmpty(string, "String", defName, reader)) { |
131 | 0 | return false; |
132 | 0 | } |
133 | 216 | const auto caseSensitivity = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive"))); |
134 | 216 | const auto dynamic = Xml::attrToBool(attrs.value(QLatin1String("dynamic"))); |
135 | 216 | const bool isSensitive = (caseSensitivity == Qt::CaseSensitive); |
136 | | |
137 | | // String can be replaced with DetectChar or AnyChar |
138 | 216 | if (!dynamic && string.size() == 1) { |
139 | 0 | QChar c = string.at(0); |
140 | 0 | if (isSensitive || c.toLower() == c.toUpper()) { |
141 | 0 | initRuleData(rule.data.detectChar, c, dynamic); |
142 | 0 | rule.type = Rule::Type::DetectChar; |
143 | 0 | } else { |
144 | 0 | initRuleData(rule.data.anyChar, c.toLower() + c.toUpper()); |
145 | 0 | rule.type = Rule::Type::AnyChar; |
146 | 0 | } |
147 | 0 | } |
148 | | // String can be replaced with Detect2Chars |
149 | 216 | else if (isSensitive && !dynamic && string.size() == 2) { |
150 | 168 | initRuleData(rule.data.detect2Chars, string.at(0), string.at(1)); |
151 | 168 | rule.type = Rule::Type::Detect2Chars; |
152 | 168 | } else { |
153 | 48 | initRuleData(rule.data.stringDetect, string.toString(), caseSensitivity, dynamic); |
154 | 48 | rule.type = Rule::Type::StringDetect; |
155 | 48 | } |
156 | 252 | } else if (name == QLatin1String("WordDetect")) { |
157 | 108 | const auto word = attrs.value(QLatin1String("String")); |
158 | 108 | if (!checkIsNotEmpty(word, "String", defName, reader)) { |
159 | 0 | return false; |
160 | 0 | } |
161 | 108 | const auto caseSensitivity = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive"))); |
162 | | |
163 | 108 | initRuleData(rule.data.wordDetect, word.toString(), loadAdditionalWordDelimiters(reader), caseSensitivity); |
164 | 108 | rule.type = Rule::Type::WordDetect; |
165 | 144 | } else if (name == QLatin1String("AnyChar")) { |
166 | 36 | const auto chars = attrs.value(QLatin1String("String")); |
167 | 36 | if (!checkIsNotEmpty(chars, "String", defName, reader)) { |
168 | 0 | return false; |
169 | 0 | } |
170 | | |
171 | | // AnyChar can be replaced with DetectChar |
172 | 36 | if (chars.size() == 1) { |
173 | 0 | initRuleData(rule.data.detectChar, chars.at(0), false); |
174 | 0 | rule.type = Rule::Type::DetectChar; |
175 | 36 | } else { |
176 | 36 | initRuleData(rule.data.anyChar, chars.toString()); |
177 | 36 | rule.type = Rule::Type::AnyChar; |
178 | 36 | } |
179 | 108 | } else if (name == QLatin1String("DetectIdentifier")) { |
180 | 0 | rule.type = Rule::Type::DetectIdentifier; |
181 | 108 | } else if (name == QLatin1String("LineContinue")) { |
182 | 0 | const auto s = attrs.value(QLatin1String("char")); |
183 | 0 | const QChar c = s.isEmpty() ? QLatin1Char('\\') : s.at(0); |
184 | |
|
185 | 0 | initRuleData(rule.data.lineContinue, c); |
186 | 0 | rule.type = Rule::Type::LineContinue; |
187 | 108 | } else if (name == QLatin1String("Int")) { |
188 | 36 | initRuleData(rule.data.detectInt, loadAdditionalWordDelimiters(reader)); |
189 | 36 | rule.type = Rule::Type::Int; |
190 | 72 | } else if (name == QLatin1String("Float")) { |
191 | 24 | initRuleData(rule.data.detectFloat, loadAdditionalWordDelimiters(reader)); |
192 | 24 | rule.type = Rule::Type::Float; |
193 | 48 | } else if (name == QLatin1String("HlCStringChar")) { |
194 | 0 | rule.type = Rule::Type::HlCStringChar; |
195 | 48 | } else if (name == QLatin1String("RangeDetect")) { |
196 | 0 | const auto s1 = attrs.value(QLatin1String("char")); |
197 | 0 | const auto s2 = attrs.value(QLatin1String("char1")); |
198 | 0 | if (!checkIsChar(s1, "char", defName, reader)) { |
199 | 0 | return false; |
200 | 0 | } |
201 | 0 | if (!checkIsChar(s2, "char1", defName, reader)) { |
202 | 0 | return false; |
203 | 0 | } |
204 | | |
205 | 0 | initRuleData(rule.data.rangeDetect, s1.at(0), s2.at(0)); |
206 | 0 | rule.type = Rule::Type::RangeDetect; |
207 | 48 | } else if (name == QLatin1String("HlCHex")) { |
208 | 24 | initRuleData(rule.data.hlCHex, loadAdditionalWordDelimiters(reader)); |
209 | 24 | rule.type = Rule::Type::HlCHex; |
210 | 24 | } else if (name == QLatin1String("HlCChar")) { |
211 | 0 | rule.type = Rule::Type::HlCChar; |
212 | 24 | } else if (name == QLatin1String("HlCOct")) { |
213 | 24 | initRuleData(rule.data.hlCOct, loadAdditionalWordDelimiters(reader)); |
214 | 24 | rule.type = Rule::Type::HlCOct; |
215 | 24 | } else { |
216 | 0 | qCWarning(Log) << "Unknown rule type:" << name; |
217 | 0 | return false; |
218 | 0 | } |
219 | | |
220 | 1.30k | if (!isIncludeRules) { |
221 | 1.17k | rule.common.contextName = attrs.value(QLatin1String("context")).toString(); |
222 | 1.17k | rule.common.beginRegionName = attrs.value(QLatin1String("beginRegion")).toString(); |
223 | 1.17k | rule.common.endRegionName = attrs.value(QLatin1String("endRegion")).toString(); |
224 | 1.17k | rule.common.firstNonSpace = Xml::attrToBool(attrs.value(QLatin1String("firstNonSpace"))); |
225 | 1.17k | rule.common.lookAhead = Xml::attrToBool(attrs.value(QLatin1String("lookAhead"))); |
226 | | // attribute is only used when lookAhead is false |
227 | 1.17k | if (!rule.common.lookAhead) { |
228 | 1.17k | rule.common.attributeName = attrs.value(QLatin1String("attribute")).toString(); |
229 | 1.17k | } |
230 | 1.17k | bool colOk = false; |
231 | 1.17k | rule.common.column = attrs.value(QLatin1String("column")).toInt(&colOk); |
232 | 1.17k | if (!colOk) { |
233 | 1.17k | rule.common.column = -1; |
234 | 1.17k | } |
235 | 1.17k | } |
236 | | |
237 | 1.30k | return true; |
238 | 1.30k | } |
239 | | |
240 | | template<class Data1, class Data2, class Visitor> |
241 | | static void dataRuleVisit(HighlightingContextData::Rule::Type type, Data1 &&data1, Data2 &&data2, Visitor &&visitor) |
242 | 2.07k | { |
243 | 2.07k | using Rule = HighlightingContextData::Rule; |
244 | 2.07k | using Type = Rule::Type; |
245 | 2.07k | switch (type) { |
246 | 60 | case Type::AnyChar: |
247 | 60 | visitor(data1.anyChar, data2.anyChar); |
248 | 60 | break; |
249 | 408 | case Type::DetectChar: |
250 | 408 | visitor(data1.detectChar, data2.detectChar); |
251 | 408 | break; |
252 | 288 | case Type::Detect2Chars: |
253 | 288 | visitor(data1.detect2Chars, data2.detect2Chars); |
254 | 288 | break; |
255 | 48 | case Type::HlCOct: |
256 | 48 | visitor(data1.hlCOct, data2.hlCOct); |
257 | 48 | break; |
258 | 132 | case Type::IncludeRules: |
259 | 132 | visitor(data1.includeRules, data2.includeRules); |
260 | 132 | break; |
261 | 60 | case Type::Int: |
262 | 60 | visitor(data1.detectInt, data2.detectInt); |
263 | 60 | break; |
264 | 456 | case Type::Keyword: |
265 | 456 | visitor(data1.keyword, data2.keyword); |
266 | 456 | break; |
267 | 0 | case Type::LineContinue: |
268 | 0 | visitor(data1.lineContinue, data2.lineContinue); |
269 | 0 | break; |
270 | 0 | case Type::RangeDetect: |
271 | 0 | visitor(data1.rangeDetect, data2.rangeDetect); |
272 | 0 | break; |
273 | 216 | case Type::RegExpr: |
274 | 216 | visitor(data1.regExpr, data2.regExpr); |
275 | 216 | break; |
276 | 48 | case Type::StringDetect: |
277 | 48 | visitor(data1.stringDetect, data2.stringDetect); |
278 | 48 | break; |
279 | 180 | case Type::WordDetect: |
280 | 180 | visitor(data1.wordDetect, data2.wordDetect); |
281 | 180 | break; |
282 | 48 | case Type::Float: |
283 | 48 | visitor(data1.detectFloat, data2.detectFloat); |
284 | 48 | break; |
285 | 48 | case Type::HlCHex: |
286 | 48 | visitor(data1.hlCHex, data2.hlCHex); |
287 | 48 | break; |
288 | | |
289 | 0 | case Type::HlCStringChar: |
290 | 0 | case Type::DetectIdentifier: |
291 | 84 | case Type::DetectSpaces: |
292 | 84 | case Type::HlCChar: |
293 | 84 | case Type::Unknown:; |
294 | 2.07k | } |
295 | 2.07k | } highlightingdata.cpp:void dataRuleVisit<KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0>(KSyntaxHighlighting::HighlightingContextData::Rule::Type, KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0&&) Line | Count | Source | 242 | 384 | { | 243 | 384 | using Rule = HighlightingContextData::Rule; | 244 | 384 | using Type = Rule::Type; | 245 | 384 | switch (type) { | 246 | 12 | case Type::AnyChar: | 247 | 12 | visitor(data1.anyChar, data2.anyChar); | 248 | 12 | break; | 249 | 108 | case Type::DetectChar: | 250 | 108 | visitor(data1.detectChar, data2.detectChar); | 251 | 108 | break; | 252 | 60 | case Type::Detect2Chars: | 253 | 60 | visitor(data1.detect2Chars, data2.detect2Chars); | 254 | 60 | break; | 255 | 12 | case Type::HlCOct: | 256 | 12 | visitor(data1.hlCOct, data2.hlCOct); | 257 | 12 | break; | 258 | 0 | case Type::IncludeRules: | 259 | 0 | visitor(data1.includeRules, data2.includeRules); | 260 | 0 | break; | 261 | 12 | case Type::Int: | 262 | 12 | visitor(data1.detectInt, data2.detectInt); | 263 | 12 | break; | 264 | 84 | case Type::Keyword: | 265 | 84 | visitor(data1.keyword, data2.keyword); | 266 | 84 | break; | 267 | 0 | case Type::LineContinue: | 268 | 0 | visitor(data1.lineContinue, data2.lineContinue); | 269 | 0 | break; | 270 | 0 | case Type::RangeDetect: | 271 | 0 | visitor(data1.rangeDetect, data2.rangeDetect); | 272 | 0 | break; | 273 | 36 | case Type::RegExpr: | 274 | 36 | visitor(data1.regExpr, data2.regExpr); | 275 | 36 | break; | 276 | 0 | case Type::StringDetect: | 277 | 0 | visitor(data1.stringDetect, data2.stringDetect); | 278 | 0 | break; | 279 | 36 | case Type::WordDetect: | 280 | 36 | visitor(data1.wordDetect, data2.wordDetect); | 281 | 36 | break; | 282 | 12 | case Type::Float: | 283 | 12 | visitor(data1.detectFloat, data2.detectFloat); | 284 | 12 | break; | 285 | 12 | case Type::HlCHex: | 286 | 12 | visitor(data1.hlCHex, data2.hlCHex); | 287 | 12 | break; | 288 | | | 289 | 0 | case Type::HlCStringChar: | 290 | 0 | case Type::DetectIdentifier: | 291 | 0 | case Type::DetectSpaces: | 292 | 0 | case Type::HlCChar: | 293 | 0 | case Type::Unknown:; | 294 | 384 | } | 295 | 384 | } |
Unexecuted instantiation: highlightingdata.cpp:void dataRuleVisit<KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data const&, KSyntaxHighlighting::HighlightingContextData::Rule::Data(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0>(KSyntaxHighlighting::HighlightingContextData::Rule::Type, KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data const&, KSyntaxHighlighting::HighlightingContextData::Rule::Data(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0&&) highlightingdata.cpp:void dataRuleVisit<KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::~Data()::$_0>(KSyntaxHighlighting::HighlightingContextData::Rule::Type, KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::Data&, KSyntaxHighlighting::HighlightingContextData::Rule::~Data()::$_0&&) Line | Count | Source | 242 | 1.69k | { | 243 | 1.69k | using Rule = HighlightingContextData::Rule; | 244 | 1.69k | using Type = Rule::Type; | 245 | 1.69k | switch (type) { | 246 | 48 | case Type::AnyChar: | 247 | 48 | visitor(data1.anyChar, data2.anyChar); | 248 | 48 | break; | 249 | 300 | case Type::DetectChar: | 250 | 300 | visitor(data1.detectChar, data2.detectChar); | 251 | 300 | break; | 252 | 228 | case Type::Detect2Chars: | 253 | 228 | visitor(data1.detect2Chars, data2.detect2Chars); | 254 | 228 | break; | 255 | 36 | case Type::HlCOct: | 256 | 36 | visitor(data1.hlCOct, data2.hlCOct); | 257 | 36 | break; | 258 | 132 | case Type::IncludeRules: | 259 | 132 | visitor(data1.includeRules, data2.includeRules); | 260 | 132 | break; | 261 | 48 | case Type::Int: | 262 | 48 | visitor(data1.detectInt, data2.detectInt); | 263 | 48 | break; | 264 | 372 | case Type::Keyword: | 265 | 372 | visitor(data1.keyword, data2.keyword); | 266 | 372 | break; | 267 | 0 | case Type::LineContinue: | 268 | 0 | visitor(data1.lineContinue, data2.lineContinue); | 269 | 0 | break; | 270 | 0 | case Type::RangeDetect: | 271 | 0 | visitor(data1.rangeDetect, data2.rangeDetect); | 272 | 0 | break; | 273 | 180 | case Type::RegExpr: | 274 | 180 | visitor(data1.regExpr, data2.regExpr); | 275 | 180 | break; | 276 | 48 | case Type::StringDetect: | 277 | 48 | visitor(data1.stringDetect, data2.stringDetect); | 278 | 48 | break; | 279 | 144 | case Type::WordDetect: | 280 | 144 | visitor(data1.wordDetect, data2.wordDetect); | 281 | 144 | break; | 282 | 36 | case Type::Float: | 283 | 36 | visitor(data1.detectFloat, data2.detectFloat); | 284 | 36 | break; | 285 | 36 | case Type::HlCHex: | 286 | 36 | visitor(data1.hlCHex, data2.hlCHex); | 287 | 36 | break; | 288 | | | 289 | 0 | case Type::HlCStringChar: | 290 | 0 | case Type::DetectIdentifier: | 291 | 84 | case Type::DetectSpaces: | 292 | 84 | case Type::HlCChar: | 293 | 84 | case Type::Unknown:; | 294 | 1.69k | } | 295 | 1.69k | } |
|
296 | | |
297 | 1.30k | HighlightingContextData::Rule::Rule() noexcept = default; |
298 | | |
299 | | HighlightingContextData::Rule::Rule(Rule &&other) noexcept |
300 | 384 | : common(std::move(other.common)) |
301 | 384 | { |
302 | 384 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { |
303 | 384 | using Data = std::remove_reference_t<decltype(data1)>; |
304 | 384 | new (&data1) Data(std::move(data2)); |
305 | 384 | }); highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar, KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar>(KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar&, KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar&) const Line | Count | Source | 302 | 12 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 12 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 12 | new (&data1) Data(std::move(data2)); | 305 | 12 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar, KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar>(KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&, KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&) const Line | Count | Source | 302 | 108 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 108 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 108 | new (&data1) Data(std::move(data2)); | 305 | 108 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars>(KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&) const Line | Count | Source | 302 | 60 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 60 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 60 | new (&data1) Data(std::move(data2)); | 305 | 60 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct, KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct&, KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct&) const Line | Count | Source | 302 | 12 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 12 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 12 | new (&data1) Data(std::move(data2)); | 305 | 12 | }); |
Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules, KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules>(KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules&, KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules&) const highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Int, KSyntaxHighlighting::HighlightingContextData::Rule::Int>(KSyntaxHighlighting::HighlightingContextData::Rule::Int&, KSyntaxHighlighting::HighlightingContextData::Rule::Int&) const Line | Count | Source | 302 | 12 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 12 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 12 | new (&data1) Data(std::move(data2)); | 305 | 12 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Keyword, KSyntaxHighlighting::HighlightingContextData::Rule::Keyword>(KSyntaxHighlighting::HighlightingContextData::Rule::Keyword&, KSyntaxHighlighting::HighlightingContextData::Rule::Keyword&) const Line | Count | Source | 302 | 84 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 84 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 84 | new (&data1) Data(std::move(data2)); | 305 | 84 | }); |
Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue, KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue>(KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue&, KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect, KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect>(KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect&) const highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr, KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr>(KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr&, KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr&) const Line | Count | Source | 302 | 36 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 36 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 36 | new (&data1) Data(std::move(data2)); | 305 | 36 | }); |
Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect, KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect>(KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect&) const highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect, KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect>(KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect&) const Line | Count | Source | 302 | 36 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 36 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 36 | new (&data1) Data(std::move(data2)); | 305 | 36 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Float, KSyntaxHighlighting::HighlightingContextData::Rule::Float>(KSyntaxHighlighting::HighlightingContextData::Rule::Float&, KSyntaxHighlighting::HighlightingContextData::Rule::Float&) const Line | Count | Source | 302 | 12 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 12 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 12 | new (&data1) Data(std::move(data2)); | 305 | 12 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule&&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex, KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex&, KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex&) const Line | Count | Source | 302 | 12 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { | 303 | 12 | using Data = std::remove_reference_t<decltype(data1)>; | 304 | 12 | new (&data1) Data(std::move(data2)); | 305 | 12 | }); |
|
306 | 384 | type = other.type; |
307 | 384 | } |
308 | | |
309 | | HighlightingContextData::Rule::Rule(const Rule &other) |
310 | 0 | : common(other.common) |
311 | 0 | { |
312 | 0 | dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) { |
313 | 0 | using Data = std::remove_reference_t<decltype(data1)>; |
314 | 0 | new (&data1) Data(data2); |
315 | 0 | }); Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar, KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar const>(KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar&, KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar, KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar const>(KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&, KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars const>(KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct, KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct const>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct&, KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules, KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules const>(KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules&, KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Int, KSyntaxHighlighting::HighlightingContextData::Rule::Int const>(KSyntaxHighlighting::HighlightingContextData::Rule::Int&, KSyntaxHighlighting::HighlightingContextData::Rule::Int const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Keyword, KSyntaxHighlighting::HighlightingContextData::Rule::Keyword const>(KSyntaxHighlighting::HighlightingContextData::Rule::Keyword&, KSyntaxHighlighting::HighlightingContextData::Rule::Keyword const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue, KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue const>(KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue&, KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect, KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect const>(KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr, KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr const>(KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr&, KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect, KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect const>(KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect, KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect const>(KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Float, KSyntaxHighlighting::HighlightingContextData::Rule::Float const>(KSyntaxHighlighting::HighlightingContextData::Rule::Float&, KSyntaxHighlighting::HighlightingContextData::Rule::Float const&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::Rule(KSyntaxHighlighting::HighlightingContextData::Rule const&)::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex, KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex const>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex&, KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex const&) const |
316 | 0 | type = other.type; |
317 | 0 | } |
318 | | |
319 | | HighlightingContextData::Rule::~Rule() |
320 | 1.69k | { |
321 | 1.69k | dataRuleVisit(type, data, data, [](auto &data, auto &) { |
322 | 1.60k | using Data = std::remove_reference_t<decltype(data)>; |
323 | 1.60k | data.~Data(); |
324 | 1.60k | }); highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar, KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar>(KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar&, KSyntaxHighlighting::HighlightingContextData::Rule::AnyChar&) const Line | Count | Source | 321 | 48 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 48 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 48 | data.~Data(); | 324 | 48 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar, KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar>(KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&, KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&) const Line | Count | Source | 321 | 300 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 300 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 300 | data.~Data(); | 324 | 300 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars>(KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&) const Line | Count | Source | 321 | 228 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 228 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 228 | data.~Data(); | 324 | 228 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct, KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct&, KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct&) const Line | Count | Source | 321 | 36 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 36 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 36 | data.~Data(); | 324 | 36 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules, KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules>(KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules&, KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules&) const Line | Count | Source | 321 | 132 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 132 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 132 | data.~Data(); | 324 | 132 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Int, KSyntaxHighlighting::HighlightingContextData::Rule::Int>(KSyntaxHighlighting::HighlightingContextData::Rule::Int&, KSyntaxHighlighting::HighlightingContextData::Rule::Int&) const Line | Count | Source | 321 | 48 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 48 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 48 | data.~Data(); | 324 | 48 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Keyword, KSyntaxHighlighting::HighlightingContextData::Rule::Keyword>(KSyntaxHighlighting::HighlightingContextData::Rule::Keyword&, KSyntaxHighlighting::HighlightingContextData::Rule::Keyword&) const Line | Count | Source | 321 | 372 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 372 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 372 | data.~Data(); | 324 | 372 | }); |
Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue, KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue>(KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue&, KSyntaxHighlighting::HighlightingContextData::Rule::LineContinue&) const Unexecuted instantiation: highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect, KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect>(KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::RangeDetect&) const highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr, KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr>(KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr&, KSyntaxHighlighting::HighlightingContextData::Rule::RegExpr&) const Line | Count | Source | 321 | 180 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 180 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 180 | data.~Data(); | 324 | 180 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect, KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect>(KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::StringDetect&) const Line | Count | Source | 321 | 48 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 48 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 48 | data.~Data(); | 324 | 48 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect, KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect>(KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDetect&) const Line | Count | Source | 321 | 144 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 144 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 144 | data.~Data(); | 324 | 144 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::Float, KSyntaxHighlighting::HighlightingContextData::Rule::Float>(KSyntaxHighlighting::HighlightingContextData::Rule::Float&, KSyntaxHighlighting::HighlightingContextData::Rule::Float&) const Line | Count | Source | 321 | 36 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 36 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 36 | data.~Data(); | 324 | 36 | }); |
highlightingdata.cpp:auto KSyntaxHighlighting::HighlightingContextData::Rule::~Rule()::$_0::operator()<KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex, KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex&, KSyntaxHighlighting::HighlightingContextData::Rule::HlCHex&) const Line | Count | Source | 321 | 36 | dataRuleVisit(type, data, data, [](auto &data, auto &) { | 322 | 36 | using Data = std::remove_reference_t<decltype(data)>; | 323 | 36 | data.~Data(); | 324 | 36 | }); |
|
325 | 1.69k | } |
326 | | |
327 | | void HighlightingContextData::load(const QString &defName, QXmlStreamReader &reader) |
328 | 288 | { |
329 | 288 | Q_ASSERT(reader.name() == QLatin1String("context")); |
330 | 288 | Q_ASSERT(reader.tokenType() == QXmlStreamReader::StartElement); |
331 | | |
332 | 288 | name = reader.attributes().value(QLatin1String("name")).toString(); |
333 | 288 | attribute = reader.attributes().value(QLatin1String("attribute")).toString(); |
334 | 288 | lineEndContext = reader.attributes().value(QLatin1String("lineEndContext")).toString(); |
335 | 288 | lineEmptyContext = reader.attributes().value(QLatin1String("lineEmptyContext")).toString(); |
336 | 288 | fallthroughContext = reader.attributes().value(QLatin1String("fallthroughContext")).toString(); |
337 | 288 | noIndentationBasedFolding = Xml::attrToBool(reader.attributes().value(QLatin1String("noIndentationBasedFolding"))); |
338 | 288 | stopEmptyLineContextSwitchLoop = Xml::attrToBool(reader.attributes().value(QLatin1String("stopEmptyLineContextSwitchLoop"))); |
339 | | |
340 | 288 | rules.reserve(8); |
341 | | |
342 | 288 | reader.readNext(); |
343 | 1.59k | while (!reader.atEnd()) { |
344 | 1.59k | switch (reader.tokenType()) { |
345 | 1.30k | case QXmlStreamReader::StartElement: { |
346 | 1.30k | auto &rule = rules.emplace_back(); |
347 | 1.30k | if (!loadRule(defName, rule, reader)) { |
348 | 0 | rules.pop_back(); |
349 | 0 | } |
350 | | // be done with this rule, skip all subelements, e.g. no longer supported sub-rules |
351 | 1.30k | reader.skipCurrentElement(); |
352 | 1.30k | reader.readNext(); |
353 | 1.30k | break; |
354 | 0 | } |
355 | 288 | case QXmlStreamReader::EndElement: |
356 | 288 | return; |
357 | 0 | default: |
358 | 0 | reader.readNext(); |
359 | 0 | break; |
360 | 1.59k | } |
361 | 1.59k | } |
362 | 288 | } |