Elaztek Developer Hub
Blamite Game Engine - Keystone  00402.09.29.23.0627.blamite
A library that enables the use of Qt in Blamite's editing tools.
qsourcehighliter.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019-2020 Waqar Ahmed -- <[email protected]>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in all
12  * copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20  * SOFTWARE.
21  *
22  */
23 
24 #ifndef QSOURCEHIGHLITER_H
25 #define QSOURCEHIGHLITER_H
26 
27 #include <QSyntaxHighlighter>
28 
29 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
30 #include <QStringView>
31 #endif
32 
33 namespace QSourceHighlite {
34 
35 class QSourceHighliter : public QSyntaxHighlighter
36 {
37 public:
38  enum Themes {
39  Monokai = 1
40  };
41 
42  explicit QSourceHighliter(QTextDocument *doc);
43  QSourceHighliter(QTextDocument *doc, Themes theme);
44 
45  //languages
46 
56  enum Language {
57  //languages
58  CodeCpp = 200,
60  CodeJs = 202,
62  CodeC = 204,
63  CodeCComment = 205,
64  CodeBash = 206,
65  CodePHP = 208,
67  CodeQML = 210,
69  CodePython = 212,
70  CodeRust = 214,
72  CodeJava = 216,
74  CodeCSharp = 218,
76  CodeGo = 220,
78  CodeV = 222,
79  CodeVComment = 223,
80  CodeSQL = 224,
81  CodeJSON = 226,
82  CodeXML = 228,
83  CodeCSS = 230,
87  CodeYAML = 234,
88  CodeINI = 236,
89  CodeVex = 238,
91  CodeCMake = 240,
92  CodeMake = 242,
93  CodeAsm = 244,
94  CodeLua = 246,
96  };
97  Q_ENUM(Language)
98 
99  enum Token {
108  };
109  Q_ENUM(Token)
110 
111  void setCurrentLanguage(Language language);
112  Q_REQUIRED_RESULT Language currentLanguage();
113  void setTheme(Themes theme);
114 
115 protected:
116  void highlightBlock(const QString &text) override;
117 
118 private:
119  void highlightSyntax(const QString &text);
120  Q_REQUIRED_RESULT int highlightNumericLiterals(const QString &text, int i);
121  Q_REQUIRED_RESULT int highlightStringLiterals(const QChar strType, const QString &text, int i);
122 
128  Q_REQUIRED_RESULT static constexpr inline bool isOctal(const char c) {
129  return (c >= '0' && c <= '7');
130  }
131 
137  Q_REQUIRED_RESULT static constexpr inline bool isHex(const char c) {
138  return (
139  (c >= '0' && c <= '9') ||
140  (c >= 'a' && c <= 'f') ||
141  (c >= 'A' && c <= 'F')
142  );
143  }
144 
145  void cssHighlighter(const QString &text);
146  void ymlHighlighter(const QString &text);
147  void xmlHighlighter(const QString &text);
148  void makeHighlighter(const QString &text);
149  void highlightInlineAsmLabels(const QString& text);
150  void asmHighlighter(const QString& text);
151  void initFormats();
152 
153 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
154  static inline QStringView strMidRef(const QString& str, qsizetype position, qsizetype n = -1)
155  {
156  return QStringView(str).mid(position, n);
157  }
158 #else
159  static inline QStringRef strMidRef(const QString& str, int position, int n = -1)
160  {
161  return str.midRef(position, n);
162  }
163 #endif
164 
165  QHash<Token, QTextCharFormat> _formats;
166  Language _language;
167 };
168 }
169 #endif // QSOURCEHIGHLITER_H
QSourceHighlite::QSourceHighliter::CodeBuiltIn
@ CodeBuiltIn
Definition: qsourcehighliter.h:107
QSourceHighlite::loadShellData
void loadShellData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:631
QSourceHighlite::QSourceHighliter::CodeYAML
@ CodeYAML
Definition: qsourcehighliter.h:87
QSourceHighlite::QSourceHighliter::CodeVex
@ CodeVex
Definition: qsourcehighliter.h:89
QSourceHighlite::loadVEXData
void loadVEXData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:3521
QSourceHighlite::QSourceHighliter::CodeComment
@ CodeComment
Definition: qsourcehighliter.h:103
QSourceHighlite::loadCSharpData
void loadCSharpData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:1638
QSourceHighlite::QSourceHighliter::CodeTypeScript
@ CodeTypeScript
Definition: qsourcehighliter.h:85
QSourceHighlite::QSourceHighliter::CodeCpp
@ CodeCpp
Definition: qsourcehighliter.h:58
QSourceHighlite::QSourceHighliter::CodeKeyWord
@ CodeKeyWord
Definition: qsourcehighliter.h:101
QSourceHighlite::QSourceHighliter::CodeQMLComment
@ CodeQMLComment
Definition: qsourcehighliter.h:68
QSourceHighlite::loadGoData
void loadGoData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:1744
QSourceHighlite::QSourceHighliter::CodeV
@ CodeV
Definition: qsourcehighliter.h:78
QSourceHighlite::loadPythonData
void loadPythonData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:1221
QSourceHighlite::loadVData
void loadVData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:1826
QSourceHighlite::QSourceHighliter::CodeAsm
@ CodeAsm
Definition: qsourcehighliter.h:93
QSourceHighlite::QSourceHighliterTheme::theme
QHash< QSourceHighliter::Token, QTextCharFormat > theme(QSourceHighliter::Themes)
Definition: qsourcehighliterthemes.cpp:63
QSourceHighlite::QSourceHighliter::CodeJs
@ CodeJs
Definition: qsourcehighliter.h:60
QSourceHighlite::QSourceHighliter::CodeOther
@ CodeOther
Definition: qsourcehighliter.h:105
QSourceHighlite::loadCSSData
void loadCSSData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:2594
QSourceHighlite::QSourceHighliter::CodeC
@ CodeC
Definition: qsourcehighliter.h:62
QSourceHighlite::loadJSONData
void loadJSONData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:2239
QSourceHighlite::QSourceHighliter::CodeRustComment
@ CodeRustComment
Definition: qsourcehighliter.h:71
QSourceHighlite::QSourceHighliter::Monokai
@ Monokai
Definition: qsourcehighliter.h:39
QSourceHighlite::loadTypescriptData
void loadTypescriptData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:2744
languagedata.h
QSourceHighlite::QSourceHighliter
Definition: qsourcehighliter.h:35
QSourceHighlite::QSourceHighliter::CodePHPComment
@ CodePHPComment
Definition: qsourcehighliter.h:66
QSourceHighlite::loadJSData
void loadJSData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:784
QSourceHighlite::loadYAMLData
void loadYAMLData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:2781
QSourceHighlite::QSourceHighliter::CodeCComment
@ CodeCComment
Definition: qsourcehighliter.h:63
qsourcehighliterthemes.h
QSourceHighlite::QSourceHighliter::CodePython
@ CodePython
Definition: qsourcehighliter.h:69
QSourceHighlite::QSourceHighliter::CodeNumLiteral
@ CodeNumLiteral
Definition: qsourcehighliter.h:106
QSourceHighlite::loadPHPData
void loadPHPData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:917
QSourceHighlite::QSourceHighliter::CodeCSSComment
@ CodeCSSComment
Definition: qsourcehighliter.h:84
QSourceHighlite::QSourceHighliter::CodePHP
@ CodePHP
Definition: qsourcehighliter.h:65
QSourceHighlite
Definition: languagedata.cpp:55
QSourceHighlite::QSourceHighliter::CodeCSharpComment
@ CodeCSharpComment
Definition: qsourcehighliter.h:75
QSourceHighlite::loadCMakeData
void loadCMakeData(QMultiHash< char, QLatin1String > &types, QMultiHash< char, QLatin1String > &keywords, QMultiHash< char, QLatin1String > &builtin, QMultiHash< char, QLatin1String > &literals, QMultiHash< char, QLatin1String > &other)
Definition: languagedata.cpp:4136
QSourceHighlite::QSourceHighliter::CodeXML
@ CodeXML
Definition: qsourcehighliter.h:82
QSourceHighlite::QSourceHighliter::CodeQML
@ CodeQML
Definition: qsourcehighliter.h:67
QSourceHighlite::LanguageData
QMultiHash< char, QLatin1String > LanguageData
Definition: languagedata.h:34
QSourceHighlite::QSourceHighliter::CodeCMake
@ CodeCMake
Definition: qsourcehighliter.h:91
QSourceHighlite::QSourceHighliter::CodeLua
@ CodeLua
Definition: qsourcehighliter.h:94
QSourceHighlite::loadSQLData
void loadSQLData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:2195
QSourceHighlite::QSourceHighliter::highlightBlock
void highlightBlock(const QString &text) override
Definition: qsourcehighliter.cpp:101
QSourceHighlite::QSourceHighliter::CodeVComment
@ CodeVComment
Definition: qsourcehighliter.h:79
QSourceHighlite::loadQMLData
void loadQMLData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:1060
QSourceHighlite::QSourceHighliter::CodeRust
@ CodeRust
Definition: qsourcehighliter.h:70
QSourceHighlite::QSourceHighliter::CodeGo
@ CodeGo
Definition: qsourcehighliter.h:76
QSourceHighlite::QSourceHighliter::CodeString
@ CodeString
Definition: qsourcehighliter.h:102
QSourceHighlite::QSourceHighliter::CodeTypeScriptComment
@ CodeTypeScriptComment
Definition: qsourcehighliter.h:86
QSourceHighlite::QSourceHighliter::CodeMake
@ CodeMake
Definition: qsourcehighliter.h:92
QSourceHighlite::QSourceHighliter::setTheme
void setTheme(Themes theme)
Definition: qsourcehighliter.cpp:95
QSourceHighlite::QSourceHighliter::Language
Language
When adding a language make sure that its value is a multiple of 2 This is because we use the next nu...
Definition: qsourcehighliter.h:56
QSourceHighlite::loadJavaData
void loadJavaData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:1484
QSourceHighlite::QSourceHighliter::CodeCSS
@ CodeCSS
Definition: qsourcehighliter.h:83
QSourceHighlite::QSourceHighliter::QSourceHighliter
QSourceHighliter(QTextDocument *doc)
Definition: qsourcehighliter.cpp:34
QSourceHighlite::QSourceHighliter::CodeINI
@ CodeINI
Definition: qsourcehighliter.h:88
QSourceHighlite::loadLuaData
void loadLuaData(LanguageData &typess, LanguageData &keywordss, LanguageData &builtins, LanguageData &literalss, LanguageData &others)
Definition: languagedata.cpp:147
QSourceHighlite::QSourceHighliter::CodeJava
@ CodeJava
Definition: qsourcehighliter.h:72
QSourceHighlite::QSourceHighliter::CodeJSON
@ CodeJSON
Definition: qsourcehighliter.h:81
qsourcehighliter.h
BlamEditorInstanceFieldType::Comment
@ Comment
QSourceHighlite::QSourceHighliter::currentLanguage
Q_REQUIRED_RESULT Language currentLanguage()
Definition: qsourcehighliter.cpp:91
QSourceHighlite::QSourceHighliter::CodeCSharp
@ CodeCSharp
Definition: qsourcehighliter.h:74
QSourceHighlite::QSourceHighliter::setCurrentLanguage
void setCurrentLanguage(Language language)
Definition: qsourcehighliter.cpp:86
Q
#define Q(s)
QSourceHighlite::loadRustData
void loadRustData(LanguageData &types, LanguageData &keywords, LanguageData &builtin, LanguageData &literals, LanguageData &other)
Definition: languagedata.cpp:1375
QMultiHash
Definition: languagedata.h:28
QSourceHighlite::QSourceHighliter::CodeJavaComment
@ CodeJavaComment
Definition: qsourcehighliter.h:73
QSourceHighlite::QSourceHighliter::CodeJsComment
@ CodeJsComment
Definition: qsourcehighliter.h:61
QSourceHighlite::QSourceHighliter::Themes
Themes
Definition: qsourcehighliter.h:38
QSourceHighlite::QSourceHighliter::Token
Token
Definition: qsourcehighliter.h:99
QSourceHighlite::QSourceHighliter::CodeGoComment
@ CodeGoComment
Definition: qsourcehighliter.h:77
QSourceHighlite::loadMakeData
void loadMakeData(QMultiHash< char, QLatin1String > &types, QMultiHash< char, QLatin1String > &keywords, QMultiHash< char, QLatin1String > &builtin, QMultiHash< char, QLatin1String > &literals, QMultiHash< char, QLatin1String > &other)
Definition: languagedata.cpp:4230
QSourceHighlite::QSourceHighliter::CodeLuaComment
@ CodeLuaComment
Definition: qsourcehighliter.h:95
QSourceHighlite::QSourceHighliter::CodeBash
@ CodeBash
Definition: qsourcehighliter.h:64
QSourceHighlite::QSourceHighliter::CodeType
@ CodeType
Definition: qsourcehighliter.h:104
QSourceHighlite::loadCppData
void loadCppData(LanguageData &typess, LanguageData &keywordss, LanguageData &builtins, LanguageData &literalss, LanguageData &others)
Definition: languagedata.cpp:437
QSourceHighlite::QSourceHighliter::CodeSQL
@ CodeSQL
Definition: qsourcehighliter.h:80
QSourceHighlite::QSourceHighliter::CodeBlock
@ CodeBlock
Definition: qsourcehighliter.h:100
QSourceHighlite::QSourceHighliter::CodeCppComment
@ CodeCppComment
Definition: qsourcehighliter.h:59
QSourceHighlite::loadAsmData
void loadAsmData(QMultiHash< char, QLatin1String > &types, QMultiHash< char, QLatin1String > &keywords, QMultiHash< char, QLatin1String > &builtin, QMultiHash< char, QLatin1String > &literals, QMultiHash< char, QLatin1String > &other)
Definition: languagedata.cpp:4243
QSourceHighlite::QSourceHighliter::CodeVexComment
@ CodeVexComment
Definition: qsourcehighliter.h:90