aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/syntax-highlighting/src/lib/definition_p.h
blob: ec00b318970d48da3eaf6b38ea4c7bf1281a710d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
    SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org>
    SPDX-FileCopyrightText: 2020 Jonathan Poelen <jonathan.poelen@gmail.com>

    SPDX-License-Identifier: MIT
*/

#ifndef KSYNTAXHIGHLIGHTING_DEFINITION_P_H
#define KSYNTAXHIGHLIGHTING_DEFINITION_P_H

#include "definitionref_p.h"
#include "highlightingdata_p.hpp"
#include "state.h"
#include "worddelimiters_p.h"

#include <QHash>
#include <QList>
#include <QSet>
#include <QString>

#include <vector>

QT_BEGIN_NAMESPACE
class QCborMap;
class QXmlStreamReader;
QT_END_NAMESPACE

namespace KSyntaxHighlighting
{
class Repository;

class DefinitionData
{
public:
    DefinitionData();
    ~DefinitionData();

    DefinitionData(const DefinitionData &) = delete;
    DefinitionData &operator=(const DefinitionData &) = delete;

    static DefinitionData *get(const Definition &def)
    {
        return def.d.get();
    }

    bool isLoaded() const;
    bool loadMetaData(const QString &definitionFileName);
    bool loadMetaData(const QString &fileName, const QCborMap &obj);

    void clear();

    enum class OnlyKeywords : bool;

    bool load(OnlyKeywords onlyKeywords = OnlyKeywords(false));
    bool loadLanguage(QXmlStreamReader &reader);
    void loadHighlighting(QXmlStreamReader &reader, OnlyKeywords onlyKeywords);
    void loadContexts(QXmlStreamReader &reader);
    void loadItemData(QXmlStreamReader &reader);
    void loadGeneral(QXmlStreamReader &reader);
    void loadComments(QXmlStreamReader &reader);
    void loadFoldingIgnoreList(QXmlStreamReader &reader);
    void loadSpellchecking(QXmlStreamReader &reader);
    bool checkKateVersion(QStringView verStr);

    void resolveContexts();

    void resolveIncludeKeywords();

    KeywordList *keywordList(const QString &name);

    Context *initialContext();
    Context *contextByName(QStringView name);

    Format formatByName(const QString &name) const;

    quint16 foldingRegionId(const QString &foldName);

    void addImmediateIncludedDefinition(const Definition &def);

    DefinitionRef q;
    uint64_t id = 0;

    Repository *repo = nullptr;
    QHash<QString, KeywordList> keywordLists;
    std::vector<Context> contexts;
    QHash<QString, Format> formats;
    // data loaded from xml file and emptied after loading contexts
    QList<HighlightingContextData> contextDatas;
    // Definition referenced by IncludeRules and ContextSwitch
    QList<DefinitionRef> immediateIncludedDefinitions;
    WordDelimiters wordDelimiters;
    WordDelimiters wordWrapDelimiters;
    bool keywordIsLoaded = false;
    bool hasFoldingRegions = false;
    bool indentationBasedFolding = false;
    QStringList foldingIgnoreList;
    QString singleLineCommentMarker;
    CommentPosition singleLineCommentPosition = CommentPosition::StartOfLine;
    QString multiLineCommentStartMarker;
    QString multiLineCommentEndMarker;
    QList<QPair<QChar, QString>> characterEncodings;

    QString fileName;
    QString name = QStringLiteral(QT_TRANSLATE_NOOP("Language", "None"));
    QByteArray nameUtf8;
    mutable QString translatedName;
    QString section;
    QByteArray sectionUtf8;
    mutable QString translatedSection;
    QString style;
    QString indenter;
    QString author;
    QString license;
    QList<QString> mimetypes;
    QList<QString> extensions;
    Qt::CaseSensitivity caseSensitive = Qt::CaseSensitive;
    int version = 0;
    int priority = 0;
    bool hidden = false;

    // cache that is used to unify states in AbstractHighlighter::highlightLine
    mutable QSet<State> unify;
};
}

#endif