Coverage Report

Created: 2026-03-12 07:14

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}