KSyntaxHighlighting

highlightingdata_p.hpp
1 /*
2  SPDX-FileCopyrightText: 2021 Jonathan Poelen <[email protected]>
3 
4  SPDX-License-Identifier: MIT
5 */
6 
7 #ifndef KSYNTAXHIGHLIGHTING_HIGHLIGHTING_DATA_P_H
8 #define KSYNTAXHIGHLIGHTING_HIGHLIGHTING_DATA_P_H
9 
10 #include <QString>
11 #include <QStringList>
12 
13 #include <vector>
14 
15 QT_BEGIN_NAMESPACE
16 class QXmlStreamReader;
17 QT_END_NAMESPACE
18 
19 namespace KSyntaxHighlighting
20 {
21 /**
22  * Represents the raw xml data of a context and its rules.
23  * After resolving contexts, members of this class are no longer
24  * use and the instance can be freed to recover used memory.
25  */
27 {
28 public:
29  void load(const QString &defName, QXmlStreamReader &reader);
30 
31  struct ContextSwitch {
32  ContextSwitch() = default;
33  ContextSwitch(QStringView str);
34 
35  QStringView contextName() const;
36  QStringView defName() const;
37 
38  bool isStay() const;
39 
40  int popCount() const
41  {
42  return m_popCount;
43  }
44 
45  private:
46  int m_popCount = 0;
47  int m_defNameIndex = -1;
48  QString m_contextAndDefName;
49  };
50 
51  struct Rule {
52  enum class Type : quint8 {
53  Unknown,
54  AnyChar,
55  Detect2Chars,
56  DetectChar,
57  HlCOct,
58  IncludeRules,
59  Int,
60  Keyword,
61  LineContinue,
62  RangeDetect,
63  RegExpr,
64  StringDetect,
65  WordDetect,
66  Float,
67  HlCStringChar,
68  DetectIdentifier,
69  DetectSpaces,
70  HlCChar,
71  HlCHex,
72  };
73 
74  struct AnyChar {
75  QString chars;
76  };
77 
78  struct Detect2Chars {
79  QChar char1;
80  QChar char2;
81  };
82 
83  struct DetectChar {
84  QChar char1;
85  bool dynamic;
86  };
87 
88  struct WordDelimiters {
89  QString additionalDeliminator;
90  QString weakDeliminator;
91  };
92 
93  struct Float {
94  WordDelimiters wordDelimiters;
95  };
96 
97  struct HlCHex {
98  WordDelimiters wordDelimiters;
99  };
100 
101  struct HlCOct {
102  WordDelimiters wordDelimiters;
103  };
104 
105  struct IncludeRules {
106  QString contextName;
107  bool includeAttribute;
108  };
109 
110  struct Int {
111  WordDelimiters wordDelimiters;
112  };
113 
114  struct Keyword {
115  QString name;
116  WordDelimiters wordDelimiters;
117  Qt::CaseSensitivity caseSensitivityOverride;
118  bool hasCaseSensitivityOverride;
119  };
120 
121  struct LineContinue {
122  QChar char1;
123  };
124 
125  struct RangeDetect {
126  QChar begin;
127  QChar end;
128  };
129 
130  struct RegExpr {
131  QString pattern;
132  Qt::CaseSensitivity caseSensitivity;
133  bool isMinimal;
134  bool dynamic;
135  };
136 
137  struct StringDetect {
138  QString string;
139  Qt::CaseSensitivity caseSensitivity;
140  bool dynamic;
141  };
142 
143  struct WordDetect {
144  QString word;
145  WordDelimiters wordDelimiters;
146  Qt::CaseSensitivity caseSensitivity;
147  };
148 
149  union Data {
150  AnyChar anyChar;
151  Detect2Chars detect2Chars;
152  DetectChar detectChar;
153  HlCOct hlCOct;
154  IncludeRules includeRules;
155  Int detectInt;
156  Keyword keyword;
157  LineContinue lineContinue;
158  RangeDetect rangeDetect;
159  RegExpr regExpr;
160  StringDetect stringDetect;
161  WordDetect wordDetect;
162  Float detectFloat;
163  HlCHex hlCHex;
164 
165  Data() noexcept
166  {
167  }
168 
169  ~Data()
170  {
171  }
172  };
173 
174  struct Common {
175  QString contextName;
176  QString attributeName;
177  QString beginRegionName;
178  QString endRegionName;
179  int column = -1;
180  bool firstNonSpace = false;
181  bool lookAhead = false;
182  };
183 
184  Type type = Type::Unknown;
185  Common common;
186  Data data;
187 
188  Rule() noexcept;
189  Rule(Rule &&other) noexcept;
190  Rule(const Rule &other);
191  ~Rule();
192 
193  // since nothing is deleted in the rules vector, these functions do not need to be implemented
194  Rule &operator=(Rule &&other) = delete;
195  Rule &operator=(const Rule &other) = delete;
196  };
197 
198  QString name;
199 
200  /**
201  * attribute name, to lookup our format
202  */
204 
205  QString lineEndContext;
206  QString lineEmptyContext;
207  QString fallthroughContext;
208 
209  std::vector<Rule> rules;
210 
211  bool noIndentationBasedFolding = false;
212 };
213 }
214 
215 #endif
CaseSensitivity
Represents the raw xml data of a context and its rules.
QString attribute
attribute name, to lookup our format
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Dec 6 2023 04:01:51 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.