19 QTextCharFormat entityFormat;
20 entityFormat.setForeground(Qt::red);
21 setFormatFor(Entity, entityFormat);
23 QTextCharFormat tagFormat;
24 tagFormat.setForeground(Qt::darkMagenta);
25 tagFormat.setFontWeight(QFont::Bold);
26 setFormatFor(Tag, tagFormat);
28 QTextCharFormat commentFormat;
29 commentFormat.setForeground(Qt::gray);
30 commentFormat.setFontItalic(
true);
31 setFormatFor(Comment, commentFormat);
33 QTextCharFormat attributeFormat;
34 attributeFormat.setForeground(Qt::black);
35 attributeFormat.setFontWeight(QFont::Bold);
36 setFormatFor(Attribute, attributeFormat);
38 QTextCharFormat valueFormat;
39 valueFormat.setForeground(Qt::blue);
40 setFormatFor(Value, valueFormat);
52 static const QChar tab = u'\t';
53 static const QChar space = u' ';
55 int state = previousBlockState();
56 qsizetype len = text.size();
65 QChar ch = text.at(pos);
67 if (QStringView{text}.sliced(pos).startsWith(
"<!--"_L1)) {
72 while (pos < len && text.at(pos) != space
73 && text.at(pos) != u'>'
74 && text.at(pos) != tab
75 && !QStringView{text}.sliced(pos).startsWith(
"/>"_L1)) {
78 if (QStringView{text}.sliced(pos).startsWith(
"/>"_L1))
80 setFormat(start, pos - start,
88 while (pos < len && text.at(pos++) != u';')
90 setFormat(start, pos - start,
100 for ( ; pos < len; ++pos) {
101 if (QStringView{text}.sliced(pos).startsWith(
"-->"_L1)) {
107 setFormat(start, pos - start, m_formats[Comment]);
110 QChar quote = QChar::Null;
112 QChar ch = text.at(pos);
113 if (quote.isNull()) {
115 if (ch ==
'\''_L1 || ch == u'"') {
117 }
else if (ch == u'>') {
119 setFormat(start, pos - start, m_formats[Tag]);
122 }
else if (QStringView{text}.sliced(pos).startsWith(
"/>"_L1)) {
124 setFormat(start, pos - start, m_formats[Tag]);
127 }
else if (ch != space && text.at(pos) != tab) {
131 while (pos < len && text.at(pos) != space
132 && text.at(pos) != tab
133 && text.at(pos) != u'=')
135 setFormat(start, pos - start, m_formats[Attribute]);
138 }
else if (ch == quote) {
142 setFormat(start, pos - start, m_formats[Value]);
149 setCurrentBlockState(state);