forked from Andersbakken/LazyTextEdit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsyntaxhighlighter.h
77 lines (71 loc) · 2.7 KB
/
syntaxhighlighter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright 2010 Anders Bakken
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SYNTAXHIGHLIGHTER_H
#define SYNTAXHIGHLIGHTER_H
#include <QObject>
#include <QString>
#include <QTextCharFormat>
#include <QColor>
#include <QFont>
#include <QList>
#include <QTextLayout>
class TextEdit;
class TextLayout;
class TextDocument;
class SyntaxHighlighter : public QObject
{
Q_OBJECT
public:
SyntaxHighlighter(QObject *parent = 0);
SyntaxHighlighter(TextEdit *parent);
~SyntaxHighlighter();
void setTextEdit(TextEdit *doc);
TextEdit *textEdit() const;
TextDocument *document() const;
virtual void highlightBlock(const QString &text) = 0;
QString currentBlock() const { return d->currentBlock; }
void setFormat(int start, int count, const QTextCharFormat &format);
void setFormat(int start, int count, const QColor &color);
inline void setColor(int start, int count, const QColor &color)
{ setFormat(start, count, color); }
inline void setBackground(int start, int count, const QBrush &brush)
{ QTextCharFormat format; format.setBackground(brush); setFormat(start, count, format); }
inline void setBackgroundColor(int start, int count, const QColor &color)
{ setBackground(start, count, color); }
void setFormat(int start, int count, const QFont &font);
inline void setFont(int start, int count, const QFont &font)
{ setFormat(start, count, font); }
QTextBlockFormat blockFormat() const;
void setBlockFormat(const QTextBlockFormat &format);
QTextCharFormat format(int pos) const;
int previousBlockState() const;
int currentBlockState() const;
void setCurrentBlockState(int s);
int currentBlockPosition() const;
public Q_SLOTS:
void rehighlight();
private:
struct Private {
Private() : textEdit(0), textLayout(0), previousBlockState(0), currentBlockState(0),
currentBlockPosition(-1) {}
TextEdit *textEdit;
TextLayout *textLayout;
int previousBlockState, currentBlockState, currentBlockPosition;
QList<QTextLayout::FormatRange> formatRanges;
QTextBlockFormat blockFormat;
QString currentBlock;
} *d;
friend class TextEdit;
friend class TextLayout;
};
#endif