Coverage Report

Created: 2026-02-26 07:48

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
408
{
19
408
    new (&data) Data{std::move(args)...};
20
408
}
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar, QChar const&, bool const&>(KSyntaxHighlighting::HighlightingContextData::Rule::DetectChar&, QChar const&, bool const&)
Line
Count
Source
18
64
{
19
64
    new (&data) Data{std::move(args)...};
20
64
}
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
48
{
19
48
    new (&data) Data{std::move(args)...};
20
48
}
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules, QString, bool const&>(KSyntaxHighlighting::HighlightingContextData::Rule::IncludeRules&, QString&&, bool const&)
Line
Count
Source
18
44
{
19
44
    new (&data) Data{std::move(args)...};
20
44
}
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars, QChar, QChar>(KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&, QChar&&, QChar&&)
Line
Count
Source
18
56
{
19
56
    new (&data) Data{std::move(args)...};
20
56
}
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
96
{
19
96
    new (&data) Data{std::move(args)...};
20
96
}
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
16
{
19
16
    new (&data) Data{std::move(args)...};
20
16
}
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
36
{
19
36
    new (&data) Data{std::move(args)...};
20
36
}
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
12
{
19
12
    new (&data) Data{std::move(args)...};
20
12
}
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
12
{
19
12
    new (&data) Data{std::move(args)...};
20
12
}
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::Float, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters>(KSyntaxHighlighting::HighlightingContextData::Rule::Float&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&)
Line
Count
Source
18
8
{
19
8
    new (&data) Data{std::move(args)...};
20
8
}
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
8
{
19
8
    new (&data) Data{std::move(args)...};
20
8
}
highlightingdata.cpp:void initRuleData<KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters>(KSyntaxHighlighting::HighlightingContextData::Rule::HlCOct&, KSyntaxHighlighting::HighlightingContextData::Rule::WordDelimiters&&)
Line
Count
Source
18
8
{
19
8
    new (&data) Data{std::move(args)...};
20
8
}
21
22
static Qt::CaseSensitivity attrToCaseSensitivity(QStringView str)
23
156
{
24
156
    return Xml::attrToBool(str) ? Qt::CaseInsensitive : Qt::CaseSensitive;
25
156
}
26
27
static HighlightingContextData::Rule::WordDelimiters loadAdditionalWordDelimiters(QXmlStreamReader &reader)
28
168
{
29
168
    return HighlightingContextData::Rule::WordDelimiters{
30
168
        reader.attributes().value(QLatin1String("additionalDeliminator")).toString(),
31
168
        reader.attributes().value(QLatin1String("weakDeliminator")).toString(),
32
168
    };
33
168
}
34
35
static bool checkIsNotEmpty(QStringView str, const char *attrName, const QString &defName, QXmlStreamReader &reader)
36
308
{
37
308
    if (!str.isEmpty()) {
38
308
        return true;
39
308
    }
40
41
308
    qCWarning(Log) << defName << "at line" << reader.lineNumber() << ": " << attrName << "attribute is empty";
42
0
    return false;
43
308
}
44
45
static bool checkIsChar(QStringView str, const char *attrName, const QString &defName, QXmlStreamReader &reader)
46
64
{
47
64
    if (str.size() == 1) {
48
64
        return true;
49
64
    }
50
51
64
    qCWarning(Log) << defName << "at line" << reader.lineNumber() << ": " << attrName << "attribute must contain exactly 1 character";
52
0
    return false;
53
64
}
54
55
static bool loadRule(const QString &defName, HighlightingContextData::Rule &rule, QXmlStreamReader &reader)
56
436
{
57
436
    using Rule = HighlightingContextData::Rule;
58
59
436
    QStringView name = reader.name();
60
436
    const auto attrs = reader.attributes();
61
436
    bool isIncludeRules = false;
62
63
436
    if (name == QLatin1String("DetectChar")) {
64
64
        const auto s = attrs.value(QLatin1String("char"));
65
64
        if (!checkIsChar(s, "char", defName, reader)) {
66
0
            return false;
67
0
        }
68
64
        const QChar c = s.at(0);
69
64
        const bool dynamic = Xml::attrToBool(attrs.value(QLatin1String("dynamic")));
70
71
64
        initRuleData(rule.data.detectChar, c, dynamic);
72
64
        rule.type = Rule::Type::DetectChar;
73
372
    } else if (name == QLatin1String("RegExpr")) {
74
48
        const auto pattern = attrs.value(QLatin1String("String"));
75
48
        if (!checkIsNotEmpty(pattern, "String", defName, reader)) {
76
0
            return false;
77
0
        }
78
79
48
        const auto isCaseInsensitive = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive")));
80
48
        const auto isMinimal = Xml::attrToBool(attrs.value(QLatin1String("minimal")));
81
48
        const auto dynamic = Xml::attrToBool(attrs.value(QLatin1String("dynamic")));
82
83
48
        initRuleData(rule.data.regExpr, pattern.toString(), isCaseInsensitive, isMinimal, dynamic);
84
48
        rule.type = Rule::Type::RegExpr;
85
324
    } else if (name == QLatin1String("IncludeRules")) {
86
44
        const auto context = attrs.value(QLatin1String("context"));
87
44
        if (!checkIsNotEmpty(context, "context", defName, reader)) {
88
0
            return false;
89
0
        }
90
44
        const bool includeAttribute = Xml::attrToBool(attrs.value(QLatin1String("includeAttrib")));
91
92
44
        initRuleData(rule.data.includeRules, context.toString(), includeAttribute);
93
44
        rule.type = Rule::Type::IncludeRules;
94
44
        isIncludeRules = true;
95
280
    } 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
280
    } else if (name == QLatin1String("keyword")) {
108
96
        const auto s = attrs.value(QLatin1String("String"));
109
96
        if (!checkIsNotEmpty(s, "String", defName, reader)) {
110
0
            return false;
111
0
        }
112
96
        Qt::CaseSensitivity caseSensitivityOverride = Qt::CaseInsensitive;
113
96
        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
96
        if (attrs.hasAttribute(QLatin1String("insensitive"))) {
120
0
            hasCaseSensitivityOverride = true;
121
0
            caseSensitivityOverride = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive")));
122
0
        }
123
124
96
        initRuleData(rule.data.keyword, s.toString(), loadAdditionalWordDelimiters(reader), caseSensitivityOverride, hasCaseSensitivityOverride);
125
96
        rule.type = Rule::Type::Keyword;
126
184
    } else if (name == QLatin1String("DetectSpaces")) {
127
28
        rule.type = Rule::Type::DetectSpaces;
128
156
    } else if (name == QLatin1String("StringDetect")) {
129
72
        const auto string = attrs.value(QLatin1String("String"));
130
72
        if (!checkIsNotEmpty(string, "String", defName, reader)) {
131
0
            return false;
132
0
        }
133
72
        const auto caseSensitivity = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive")));
134
72
        const auto dynamic = Xml::attrToBool(attrs.value(QLatin1String("dynamic")));
135
72
        const bool isSensitive = (caseSensitivity == Qt::CaseSensitive);
136
137
        // String can be replaced with DetectChar or AnyChar
138
72
        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
72
        else if (isSensitive && !dynamic && string.size() == 2) {
150
56
            initRuleData(rule.data.detect2Chars, string.at(0), string.at(1));
151
56
            rule.type = Rule::Type::Detect2Chars;
152
56
        } else {
153
16
            initRuleData(rule.data.stringDetect, string.toString(), caseSensitivity, dynamic);
154
16
            rule.type = Rule::Type::StringDetect;
155
16
        }
156
84
    } else if (name == QLatin1String("WordDetect")) {
157
36
        const auto word = attrs.value(QLatin1String("String"));
158
36
        if (!checkIsNotEmpty(word, "String", defName, reader)) {
159
0
            return false;
160
0
        }
161
36
        const auto caseSensitivity = attrToCaseSensitivity(attrs.value(QLatin1String("insensitive")));
162
163
36
        initRuleData(rule.data.wordDetect, word.toString(), loadAdditionalWordDelimiters(reader), caseSensitivity);
164
36
        rule.type = Rule::Type::WordDetect;
165
48
    } else if (name == QLatin1String("AnyChar")) {
166
12
        const auto chars = attrs.value(QLatin1String("String"));
167
12
        if (!checkIsNotEmpty(chars, "String", defName, reader)) {
168
0
            return false;
169
0
        }
170
171
        // AnyChar can be replaced with DetectChar
172
12
        if (chars.size() == 1) {
173
0
            initRuleData(rule.data.detectChar, chars.at(0), false);
174
0
            rule.type = Rule::Type::DetectChar;
175
12
        } else {
176
12
            initRuleData(rule.data.anyChar, chars.toString());
177
12
            rule.type = Rule::Type::AnyChar;
178
12
        }
179
36
    } else if (name == QLatin1String("DetectIdentifier")) {
180
0
        rule.type = Rule::Type::DetectIdentifier;
181
36
    } 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
36
    } else if (name == QLatin1String("Int")) {
188
12
        initRuleData(rule.data.detectInt, loadAdditionalWordDelimiters(reader));
189
12
        rule.type = Rule::Type::Int;
190
24
    } else if (name == QLatin1String("Float")) {
191
8
        initRuleData(rule.data.detectFloat, loadAdditionalWordDelimiters(reader));
192
8
        rule.type = Rule::Type::Float;
193
16
    } else if (name == QLatin1String("HlCStringChar")) {
194
0
        rule.type = Rule::Type::HlCStringChar;
195
16
    } 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
16
    } else if (name == QLatin1String("HlCHex")) {
208
8
        initRuleData(rule.data.hlCHex, loadAdditionalWordDelimiters(reader));
209
8
        rule.type = Rule::Type::HlCHex;
210
8
    } else if (name == QLatin1String("HlCChar")) {
211
0
        rule.type = Rule::Type::HlCChar;
212
8
    } else if (name == QLatin1String("HlCOct")) {
213
8
        initRuleData(rule.data.hlCOct, loadAdditionalWordDelimiters(reader));
214
8
        rule.type = Rule::Type::HlCOct;
215
8
    } else {
216
0
        qCWarning(Log) << "Unknown rule type:" << name;
217
0
        return false;
218
0
    }
219
220
436
    if (!isIncludeRules) {
221
392
        rule.common.contextName = attrs.value(QLatin1String("context")).toString();
222
392
        rule.common.beginRegionName = attrs.value(QLatin1String("beginRegion")).toString();
223
392
        rule.common.endRegionName = attrs.value(QLatin1String("endRegion")).toString();
224
392
        rule.common.firstNonSpace = Xml::attrToBool(attrs.value(QLatin1String("firstNonSpace")));
225
392
        rule.common.lookAhead = Xml::attrToBool(attrs.value(QLatin1String("lookAhead")));
226
        // attribute is only used when lookAhead is false
227
392
        if (!rule.common.lookAhead) {
228
392
            rule.common.attributeName = attrs.value(QLatin1String("attribute")).toString();
229
392
        }
230
392
        bool colOk = false;
231
392
        rule.common.column = attrs.value(QLatin1String("column")).toInt(&colOk);
232
392
        if (!colOk) {
233
392
            rule.common.column = -1;
234
392
        }
235
392
    }
236
237
436
    return true;
238
436
}
239
240
template<class Data1, class Data2, class Visitor>
241
static void dataRuleVisit(HighlightingContextData::Rule::Type type, Data1 &&data1, Data2 &&data2, Visitor &&visitor)
242
692
{
243
692
    using Rule = HighlightingContextData::Rule;
244
692
    using Type = Rule::Type;
245
692
    switch (type) {
246
20
    case Type::AnyChar:
247
20
        visitor(data1.anyChar, data2.anyChar);
248
20
        break;
249
136
    case Type::DetectChar:
250
136
        visitor(data1.detectChar, data2.detectChar);
251
136
        break;
252
96
    case Type::Detect2Chars:
253
96
        visitor(data1.detect2Chars, data2.detect2Chars);
254
96
        break;
255
16
    case Type::HlCOct:
256
16
        visitor(data1.hlCOct, data2.hlCOct);
257
16
        break;
258
44
    case Type::IncludeRules:
259
44
        visitor(data1.includeRules, data2.includeRules);
260
44
        break;
261
20
    case Type::Int:
262
20
        visitor(data1.detectInt, data2.detectInt);
263
20
        break;
264
152
    case Type::Keyword:
265
152
        visitor(data1.keyword, data2.keyword);
266
152
        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
72
    case Type::RegExpr:
274
72
        visitor(data1.regExpr, data2.regExpr);
275
72
        break;
276
16
    case Type::StringDetect:
277
16
        visitor(data1.stringDetect, data2.stringDetect);
278
16
        break;
279
60
    case Type::WordDetect:
280
60
        visitor(data1.wordDetect, data2.wordDetect);
281
60
        break;
282
16
    case Type::Float:
283
16
        visitor(data1.detectFloat, data2.detectFloat);
284
16
        break;
285
16
    case Type::HlCHex:
286
16
        visitor(data1.hlCHex, data2.hlCHex);
287
16
        break;
288
289
0
    case Type::HlCStringChar:
290
0
    case Type::DetectIdentifier:
291
28
    case Type::DetectSpaces:
292
28
    case Type::HlCChar:
293
28
    case Type::Unknown:;
294
692
    }
295
692
}
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
128
{
243
128
    using Rule = HighlightingContextData::Rule;
244
128
    using Type = Rule::Type;
245
128
    switch (type) {
246
4
    case Type::AnyChar:
247
4
        visitor(data1.anyChar, data2.anyChar);
248
4
        break;
249
36
    case Type::DetectChar:
250
36
        visitor(data1.detectChar, data2.detectChar);
251
36
        break;
252
20
    case Type::Detect2Chars:
253
20
        visitor(data1.detect2Chars, data2.detect2Chars);
254
20
        break;
255
4
    case Type::HlCOct:
256
4
        visitor(data1.hlCOct, data2.hlCOct);
257
4
        break;
258
0
    case Type::IncludeRules:
259
0
        visitor(data1.includeRules, data2.includeRules);
260
0
        break;
261
4
    case Type::Int:
262
4
        visitor(data1.detectInt, data2.detectInt);
263
4
        break;
264
28
    case Type::Keyword:
265
28
        visitor(data1.keyword, data2.keyword);
266
28
        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
12
    case Type::RegExpr:
274
12
        visitor(data1.regExpr, data2.regExpr);
275
12
        break;
276
0
    case Type::StringDetect:
277
0
        visitor(data1.stringDetect, data2.stringDetect);
278
0
        break;
279
12
    case Type::WordDetect:
280
12
        visitor(data1.wordDetect, data2.wordDetect);
281
12
        break;
282
4
    case Type::Float:
283
4
        visitor(data1.detectFloat, data2.detectFloat);
284
4
        break;
285
4
    case Type::HlCHex:
286
4
        visitor(data1.hlCHex, data2.hlCHex);
287
4
        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
128
    }
295
128
}
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
564
{
243
564
    using Rule = HighlightingContextData::Rule;
244
564
    using Type = Rule::Type;
245
564
    switch (type) {
246
16
    case Type::AnyChar:
247
16
        visitor(data1.anyChar, data2.anyChar);
248
16
        break;
249
100
    case Type::DetectChar:
250
100
        visitor(data1.detectChar, data2.detectChar);
251
100
        break;
252
76
    case Type::Detect2Chars:
253
76
        visitor(data1.detect2Chars, data2.detect2Chars);
254
76
        break;
255
12
    case Type::HlCOct:
256
12
        visitor(data1.hlCOct, data2.hlCOct);
257
12
        break;
258
44
    case Type::IncludeRules:
259
44
        visitor(data1.includeRules, data2.includeRules);
260
44
        break;
261
16
    case Type::Int:
262
16
        visitor(data1.detectInt, data2.detectInt);
263
16
        break;
264
124
    case Type::Keyword:
265
124
        visitor(data1.keyword, data2.keyword);
266
124
        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
60
    case Type::RegExpr:
274
60
        visitor(data1.regExpr, data2.regExpr);
275
60
        break;
276
16
    case Type::StringDetect:
277
16
        visitor(data1.stringDetect, data2.stringDetect);
278
16
        break;
279
48
    case Type::WordDetect:
280
48
        visitor(data1.wordDetect, data2.wordDetect);
281
48
        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
28
    case Type::DetectSpaces:
292
28
    case Type::HlCChar:
293
28
    case Type::Unknown:;
294
564
    }
295
564
}
296
297
436
HighlightingContextData::Rule::Rule() noexcept = default;
298
299
HighlightingContextData::Rule::Rule(Rule &&other) noexcept
300
128
    : common(std::move(other.common))
301
128
{
302
128
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
128
        using Data = std::remove_reference_t<decltype(data1)>;
304
128
        new (&data1) Data(std::move(data2));
305
128
    });
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
4
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
4
        using Data = std::remove_reference_t<decltype(data1)>;
304
4
        new (&data1) Data(std::move(data2));
305
4
    });
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
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::Detect2Chars, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars>(KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&, KSyntaxHighlighting::HighlightingContextData::Rule::Detect2Chars&) const
Line
Count
Source
302
20
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
20
        using Data = std::remove_reference_t<decltype(data1)>;
304
20
        new (&data1) Data(std::move(data2));
305
20
    });
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
4
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
4
        using Data = std::remove_reference_t<decltype(data1)>;
304
4
        new (&data1) Data(std::move(data2));
305
4
    });
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
4
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
4
        using Data = std::remove_reference_t<decltype(data1)>;
304
4
        new (&data1) Data(std::move(data2));
305
4
    });
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
28
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
28
        using Data = std::remove_reference_t<decltype(data1)>;
304
28
        new (&data1) Data(std::move(data2));
305
28
    });
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
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::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
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::Float, KSyntaxHighlighting::HighlightingContextData::Rule::Float>(KSyntaxHighlighting::HighlightingContextData::Rule::Float&, KSyntaxHighlighting::HighlightingContextData::Rule::Float&) const
Line
Count
Source
302
4
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
4
        using Data = std::remove_reference_t<decltype(data1)>;
304
4
        new (&data1) Data(std::move(data2));
305
4
    });
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
4
    dataRuleVisit(other.type, data, other.data, [](auto &data1, auto &data2) {
303
4
        using Data = std::remove_reference_t<decltype(data1)>;
304
4
        new (&data1) Data(std::move(data2));
305
4
    });
306
128
    type = other.type;
307
128
}
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
564
{
321
564
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
536
        using Data = std::remove_reference_t<decltype(data)>;
323
536
        data.~Data();
324
536
    });
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
16
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
16
        using Data = std::remove_reference_t<decltype(data)>;
323
16
        data.~Data();
324
16
    });
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
100
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
100
        using Data = std::remove_reference_t<decltype(data)>;
323
100
        data.~Data();
324
100
    });
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
76
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
76
        using Data = std::remove_reference_t<decltype(data)>;
323
76
        data.~Data();
324
76
    });
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
12
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
12
        using Data = std::remove_reference_t<decltype(data)>;
323
12
        data.~Data();
324
12
    });
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
44
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
44
        using Data = std::remove_reference_t<decltype(data)>;
323
44
        data.~Data();
324
44
    });
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
16
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
16
        using Data = std::remove_reference_t<decltype(data)>;
323
16
        data.~Data();
324
16
    });
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
124
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
124
        using Data = std::remove_reference_t<decltype(data)>;
323
124
        data.~Data();
324
124
    });
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
60
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
60
        using Data = std::remove_reference_t<decltype(data)>;
323
60
        data.~Data();
324
60
    });
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
16
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
16
        using Data = std::remove_reference_t<decltype(data)>;
323
16
        data.~Data();
324
16
    });
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
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::Float, KSyntaxHighlighting::HighlightingContextData::Rule::Float>(KSyntaxHighlighting::HighlightingContextData::Rule::Float&, KSyntaxHighlighting::HighlightingContextData::Rule::Float&) const
Line
Count
Source
321
12
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
12
        using Data = std::remove_reference_t<decltype(data)>;
323
12
        data.~Data();
324
12
    });
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
12
    dataRuleVisit(type, data, data, [](auto &data, auto &) {
322
12
        using Data = std::remove_reference_t<decltype(data)>;
323
12
        data.~Data();
324
12
    });
325
564
}
326
327
void HighlightingContextData::load(const QString &defName, QXmlStreamReader &reader)
328
96
{
329
96
    Q_ASSERT(reader.name() == QLatin1String("context"));
330
96
    Q_ASSERT(reader.tokenType() == QXmlStreamReader::StartElement);
331
332
96
    name = reader.attributes().value(QLatin1String("name")).toString();
333
96
    attribute = reader.attributes().value(QLatin1String("attribute")).toString();
334
96
    lineEndContext = reader.attributes().value(QLatin1String("lineEndContext")).toString();
335
96
    lineEmptyContext = reader.attributes().value(QLatin1String("lineEmptyContext")).toString();
336
96
    fallthroughContext = reader.attributes().value(QLatin1String("fallthroughContext")).toString();
337
96
    noIndentationBasedFolding = Xml::attrToBool(reader.attributes().value(QLatin1String("noIndentationBasedFolding")));
338
96
    stopEmptyLineContextSwitchLoop = Xml::attrToBool(reader.attributes().value(QLatin1String("stopEmptyLineContextSwitchLoop")));
339
340
96
    rules.reserve(8);
341
342
96
    reader.readNext();
343
532
    while (!reader.atEnd()) {
344
532
        switch (reader.tokenType()) {
345
436
        case QXmlStreamReader::StartElement: {
346
436
            auto &rule = rules.emplace_back();
347
436
            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
436
            reader.skipCurrentElement();
352
436
            reader.readNext();
353
436
            break;
354
0
        }
355
96
        case QXmlStreamReader::EndElement:
356
96
            return;
357
0
        default:
358
0
            reader.readNext();
359
0
            break;
360
532
        }
361
532
    }
362
96
}