Computer Assisted Medical Intervention Tool Kit  version 5.2
Xmlhighlighter.h
Go to the documentation of this file.
1 /*
2 ** Copyright 2009-10 Martin Holmes, Meagan Timney and the
3 ** University of Victoria Humanities Computing and Media
4 ** Centre.
5 
6 ** This file is part of the projXMLEditor project which in
7 ** turn belongs to the Image Markup Tool version 2.0
8 ** project. The purpose of svgIconsTest is to provide a
9 ** platform to test and learn various features of Qt, and
10 ** to provide a semi-useful tool to aid in the rapid
11 ** creation and editing of resource files containing SVG
12 ** icons for Qt application development.
13 
14 ** GNU Lesser General Public License Usage
15 ** This file may be used under the terms of the GNU Lesser
16 ** General Public License version 2.1 as published by the Free Software
17 ** Foundation and appearing in the file LICENSE.LGPL included in the
18 ** packaging of this file. Please review the following information to
19 ** ensure the GNU Lesser General Public License version 2.1 requirements
20 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
21 
22 ** You may also use this code under the Mozilla Public Licence
23 ** version 1.1. MPL 1.1 can be found at http://www.mozilla.org/MPL/MPL-1.1.html.
24 
25 ** "svgIconsTest" is distributed in the hope that it will be useful,
26 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
27 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 ** GNU Lesser General Public License for more details.
29 */
30 
31 #ifndef XMLHIGHLIGHTER_H
32 #define XMLHIGHLIGHTER_H
33 
34 #include <QSyntaxHighlighter>
35 
36 #include <QHash>
37 #include <QTextCharFormat>
38 
39 QT_BEGIN_NAMESPACE
40 class QTextDocument;
41 QT_END_NAMESPACE
42 
43 
51 class XmlHighlighter : public QSyntaxHighlighter {
52  Q_OBJECT
53 
54 public:
55  XmlHighlighter(QTextDocument* parent = nullptr);
56 
57 protected:
58  void highlightBlock(const QString& text) override;
59  void highlightSubBlock(const QString& text, const int startIndex, const int currState);
60 
61 private:
62  struct HighlightingRule {
63  QRegExp pattern;
64  QTextCharFormat format;
65  };
66  QVector<HighlightingRule> hlRules;
67 
68  QRegExp xmlProcInstStartExpression;
69  QRegExp xmlProcInstEndExpression;
70  QRegExp xmlCommentStartExpression;
71  QRegExp xmlCommentEndExpression;
72  QRegExp xmlDoctypeStartExpression;
73  QRegExp xmlDoctypeEndExpression;
74 
75  QRegExp xmlOpenTagStartExpression;
76  QRegExp xmlOpenTagEndExpression;
77  QRegExp xmlCloseTagStartExpression;
78  QRegExp xmlCloseTagEndExpression;
79  QRegExp xmlAttributeStartExpression;
80  QRegExp xmlAttributeEndExpression;
81  QRegExp xmlAttValStartExpression;
82  QRegExp xmlAttValEndExpression;
83 
84  QRegExp xmlAttValExpression;
85 
86 
87  QTextCharFormat xmlProcInstFormat;
88  QTextCharFormat xmlDoctypeFormat;
89  QTextCharFormat xmlCommentFormat;
90  QTextCharFormat xmlTagFormat;
91  QTextCharFormat xmlEntityFormat;
92  QTextCharFormat xmlAttributeFormat;
93  QTextCharFormat xmlAttValFormat;
94 
95 //Enumeration for types of element, used for tracking what
96 //we're inside while highlighting over multiline blocks.
97  enum xmlState {
98  inNothing, //Don't know if we'll need this or not.
99  inProcInst, //starting with <? and ending with ?>
100  inDoctypeDecl, //starting with <!DOCTYPE and ending with >
101  inOpenTag, //starting with < + xmlName and ending with /?>
102  inOpenTagName, //after < and before whitespace. Implies inOpenTag.
103  inAttribute, //if inOpenTag, starting with /s*xmlName/s*=/s*" and ending with ".
104  inAttName, //after < + xmlName + whitespace, and before =". Implies inOpenTag.
105  inAttVal, //after =" and before ". May also use single quotes. Implies inOpenTag.
106  inCloseTag, //starting with </ and ending with >.
107  inCloseTagName,//after </ and before >. Implies inCloseTag.
108  inComment //starting with <!-- and ending with -->. Overrides all others.
109  };
110 };
111 
112 
113 #endif
TODO Comment class here.
Definition: Xmlhighlighter.h:51
XmlHighlighter(QTextDocument *parent=nullptr)
[0]
Definition: Xmlhighlighter.cpp:39
void highlightSubBlock(const QString &text, const int startIndex, const int currState)
Definition: Xmlhighlighter.cpp:131
void highlightBlock(const QString &text) override
Definition: Xmlhighlighter.cpp:363