1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "stylescicpp.h"
6#include "textedittabwidget/style/stylejsonfile.h"
7#include "textedittabwidget/textedit.h"
8#include "textedittabwidget/style/stylecolor.h"
9
10#include "SciLexer.h"
11
12
13StyleSciCpp::StyleSciCpp(TextEdit *parent)
14 : StyleSci(parent)
15{
16
17}
18
19QMap<int, QString> StyleSciCpp::keyWords() const
20{
21 return {
22 { 1, "and and_eq asm auto bitand bitor bool break case "
23 "catch char class compl const const_cast continue "
24 "default delete do double dynamic_cast else enum "
25 "explicit export extern false float for friend goto if "
26 "inline int long mutable namespace new not not_eq "
27 "operator or or_eq private protected public register "
28 "reinterpret_cast return short signed sizeof static "
29 "static_cast struct switch template this throw true "
30 "try typedef typeid typename union unsigned using "
31 "virtual void volatile wchar_t while xor xor_eq"
32 }
33 };
34}
35
36void StyleSciCpp::setStyle()
37{
38 StyleSci::setStyle();
39 auto jsonFile = edit()->getStyleFile();
40 if (jsonFile->setTheme(StyleJsonFile::Theme::get()->Dark)) {
41 QJsonObject tempObj;
42 int tempFore;
43 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->Comment).toObject();
44 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
45 edit()->styleSetFore(SCE_C_COMMENT, tempFore); // #整行
46 edit()->styleSetFore(SCE_C_COMMENTLINE, tempFore); // //注释
47 edit()->styleSetFore(SCE_C_COMMENTDOC, tempFore);
48 edit()->styleSetFore(SCE_C_COMMENTLINEDOC, tempFore); // ///注释
49 edit()->styleSetFore(SCE_C_COMMENTDOCKEYWORD, tempFore - 0x3333);
50 edit()->styleSetFore(SCE_C_COMMENTDOCKEYWORDERROR, tempFore - 0x3333); // /// @
51 edit()->styleSetFore(SCE_C_PREPROCESSORCOMMENT, tempFore);
52 edit()->styleSetFore(SCE_C_PREPROCESSORCOMMENTDOC, tempFore);
53
54 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->Number).toObject();
55 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
56 edit()->styleSetFore(SCE_C_NUMBER, tempFore);
57
58 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->Keyword).toObject();
59 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
60 edit()->styleSetFore(SCE_C_WORD, tempFore);
61 edit()->styleSetFore(SCE_C_WORD2, tempFore);
62
63 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->String).toObject();
64 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
65 edit()->styleSetFore(SCE_C_STRING, tempFore); // 字符串
66 edit()->styleSetFore(SCE_C_CHARACTER, tempFore); // 字符串
67 edit()->styleSetFore(SCE_C_UUID, tempFore);
68 edit()->styleSetFore(SCE_C_STRINGEOL, tempFore);
69 edit()->styleSetFore(SCE_C_REGEX, tempFore);
70 edit()->styleSetFore(SCE_C_STRINGRAW, tempFore);
71 edit()->styleSetFore(SCE_C_VERBATIM, tempFore);
72 edit()->styleSetFore(SCE_C_HASHQUOTEDSTRING, tempFore);
73
74 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->Preprocessor).toObject();
75 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
76 edit()->styleSetFore(SCE_C_PREPROCESSOR, tempFore); // #
77
78 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->Operators).toObject();
79 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
80 edit()->styleSetFore(SCE_C_OPERATOR, tempFore); // 符号
81
82 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->Text).toObject();
83 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
84 edit()->styleSetFore(SCE_C_IDENTIFIER, tempFore);
85 edit()->styleSetFore(SCE_C_USERLITERAL, tempFore);
86 edit()->styleSetFore(SCE_C_TASKMARKER, tempFore);
87 edit()->styleSetFore(SCE_C_ESCAPESEQUENCE, tempFore);
88
89 tempObj = jsonFile->value(StyleJsonFile::Key_1::get()->Global).toObject();
90 tempFore = StyleColor::color(tempObj.value(StyleJsonFile::Key_2::get()->Foreground).toString().toInt(nullptr, 16));
91 edit()->styleSetFore(SCE_C_GLOBALCLASS, tempFore);
92 } else {
93 edit()->styleSetFore(SCE_C_COMMENT, StyleColor::color(StyleColor::Table::get()->DeepSkyBlue)); // #整行
94 edit()->styleSetFore(SCE_C_COMMENTLINE, StyleColor::color(StyleColor::Table::get()->DarkTurquoise)); // //注释
95 edit()->styleSetFore(SCE_C_COMMENTDOC, StyleColor::color(StyleColor::Table::get()->DarkTurquoise));
96 edit()->styleSetFore(SCE_C_NUMBER, StyleColor::color(StyleColor::Table::get()->Magenta));
97 edit()->styleSetFore(SCE_C_WORD, StyleColor::color(StyleColor::Table::get()->Gold));
98 edit()->styleSetFore(SCE_C_STRING, StyleColor::color(StyleColor::Table::get()->Magenta)); // 字符串
99 edit()->styleSetFore(SCE_C_CHARACTER, StyleColor::color(StyleColor::Table::get()->Magenta));
100 edit()->styleSetFore(SCE_C_UUID, StyleColor::color(StyleColor::Table::get()->Magenta));
101 edit()->styleSetFore(SCE_C_PREPROCESSOR, StyleColor::color(StyleColor::Table::get()->MediumBlue)); // #
102 edit()->styleSetFore(SCE_C_OPERATOR, edit()->styleFore(SCE_C_DEFAULT)); // 符号
103 edit()->styleSetFore(SCE_C_IDENTIFIER, edit()->styleFore(SCE_C_DEFAULT));
104 edit()->styleSetFore(SCE_C_STRINGEOL, StyleColor::color(StyleColor::Table::get()->Magenta));
105 edit()->styleSetFore(SCE_C_VERBATIM, StyleColor::color(StyleColor::Table::get()->Magenta));
106 edit()->styleSetFore(SCE_C_REGEX, StyleColor::color(StyleColor::Table::get()->Magenta));
107 edit()->styleSetFore(SCE_C_COMMENTLINEDOC, StyleColor::color(StyleColor::Table::get()->DarkTurquoise)); // ///注释
108 edit()->styleSetFore(SCE_C_WORD2, StyleColor::color(StyleColor::Table::get()->Gold)); // 1 一般关键字
109 edit()->styleSetFore(SCE_C_COMMENTDOCKEYWORD, StyleColor::color(StyleColor::Table::get()->DeepSkyBlue));
110 edit()->styleSetFore(SCE_C_COMMENTDOCKEYWORDERROR, StyleColor::color(StyleColor::Table::get()->DeepSkyBlue)); // /// @
111 edit()->styleSetFore(SCE_C_GLOBALCLASS, StyleColor::color(StyleColor::Table::get()->Gold));
112 edit()->styleSetFore(SCE_C_STRINGRAW, StyleColor::color(StyleColor::Table::get()->Gainsboro));
113 edit()->styleSetFore(SCE_C_HASHQUOTEDSTRING, StyleColor::color(StyleColor::Table::get()->Gainsboro));
114 edit()->styleSetFore(SCE_C_PREPROCESSORCOMMENT, StyleColor::color(StyleColor::Table::get()->Gainsboro));
115 edit()->styleSetFore(SCE_C_PREPROCESSORCOMMENTDOC, StyleColor::color(StyleColor::Table::get()->Gainsboro));
116 edit()->styleSetFore(SCE_C_USERLITERAL, StyleColor::color(StyleColor::Table::get()->Gainsboro));
117 edit()->styleSetFore(SCE_C_TASKMARKER, StyleColor::color(StyleColor::Table::get()->Gainsboro));
118 edit()->styleSetFore(SCE_C_ESCAPESEQUENCE, StyleColor::color(StyleColor::Table::get()->Gainsboro));
119 }
120 return;
121}
122
123int StyleSciCpp::sectionEnd() const
124{
125 return SCE_C_ESCAPESEQUENCE; //default style key end;
126}
127