1/*
2 SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org>
3
4 SPDX-License-Identifier: MIT
5*/
6
7#ifndef KSYNTAXHIGHLIGHTING_QSYNTAXHIGHLIGHTER_H
8#define KSYNTAXHIGHLIGHTING_QSYNTAXHIGHLIGHTER_H
9
10#include "ksyntaxhighlighting_export.h"
11
12#include "abstracthighlighter.h"
13
14#include <QSyntaxHighlighter>
15
16namespace KSyntaxHighlighting
17{
18class SyntaxHighlighterPrivate;
19
20/*!
21 * \class KSyntaxHighlighting::SyntaxHighlighter
22 * \inheaderfile KSyntaxHighlighting/SyntaxHighlighter
23 * \inmodule KSyntaxHighlighting
24 * \brief A QSyntaxHighlighter implementation for use with QTextDocument.
25 * This supports partial re-highlighting during editing and
26 * tracks syntax-based code folding regions.
27 *
28 * \since 5.28
29 */
30class KSYNTAXHIGHLIGHTING_EXPORT SyntaxHighlighter : public QSyntaxHighlighter, public AbstractHighlighter
31{
32 Q_OBJECT
33public:
34 /*!
35 */
36 explicit SyntaxHighlighter(QObject *parent = nullptr);
37 /*!
38 */
39 explicit SyntaxHighlighter(QTextDocument *document);
40 ~SyntaxHighlighter() override;
41
42 void setDefinition(const Definition &def) override;
43 void setTheme(const Theme &theme) override;
44
45 /*!
46 * Returns whether there is a folding region beginning at \a startBlock.
47 * This only considers syntax-based folding regions,
48 * not indention-based ones as e.g. found in Python.
49 *
50 * \sa findFoldingRegionEnd
51 */
52 bool startsFoldingRegion(const QTextBlock &startBlock) const;
53
54 /*! Finds the end of the folding region starting at \a startBlock.
55 * If multiple folding regions begin at \a startBlock, the end of
56 * the last/innermost one is returned.
57 * This returns an invalid block if no folding region end is found,
58 * which typically indicates an unterminated region and thus folding
59 * until the document end.
60 * This method performs a sequential search starting at \a startBlock
61 * for the matching folding region end, which is a potentially expensive
62 * operation.
63 *
64 * \sa startsFoldingRegion
65 */
66 QTextBlock findFoldingRegionEnd(const QTextBlock &startBlock) const;
67
68protected:
69 void highlightBlock(const QString &text) override;
70 void applyFormat(int offset, int length, const Format &format) override;
71 void applyFolding(int offset, int length, FoldingRegion region) override;
72
73private:
74 Q_DECLARE_PRIVATE_D(AbstractHighlighter::d_ptr, SyntaxHighlighter)
75};
76}
77
78#endif // KSYNTAXHIGHLIGHTING_QSYNTAXHIGHLIGHTER_H
79

source code of syntax-highlighting/src/lib/syntaxhighlighter.h