Dekko
MarkdownHighlighter.h
1 #ifndef MARKDOWNHIGHLIGHTER_H
2 #define MARKDOWNHIGHLIGHTER_H
3 
4 #include <QObject>
5 #include <QTextDocument>
6 #include <QSyntaxHighlighter>
7 #include <QScopedPointer>
8 #include <QColor>
9 #include <QTextCharFormat>
10 #include "MarkdownTokenizer.h"
11 #include "FormattingOptions.h"
12 
13 class MarkdownHighlighter : public QSyntaxHighlighter
14 {
15  Q_OBJECT
16 public:
17  MarkdownHighlighter(QTextDocument *document, FormattingOptions *options);
18 
19 signals:
20  void highlightBlockAtPosition(int position);
21 
22  // QSyntaxHighlighter interface
23 protected:
24  virtual void highlightBlock(const QString &text) override;
25 
26 private slots:
27  void onHighlightBlockAtPosition(int pos);
28 private:
29  void setupTokenColors();
30  void setupHeadingFontSize(bool useLargeHeadings);
31  bool isHeadingBlockState(MarkdownTokenizer::TokenState state) const;
32  void applyFormattingForToken(const MarkdownToken &token);
33 
34  QScopedPointer<MarkdownTokenizer> m_tokenizer;
35  bool m_inBlockquote;
36  QTextCharFormat defaultFormat;
37  bool applyStyleToMarkup[MarkdownToken::Last];
38  QColor colorForToken[MarkdownToken::Last];
39  bool emphasizeToken[MarkdownToken::Last];
40  bool strongToken[MarkdownToken::Last];
41  bool strongMarkup[MarkdownToken::Last];
42  bool strikethroughToken[MarkdownToken::Last];
43  int fontSizeIncrease[MarkdownToken::Last];
44  int defaultFontSize;
45  FormattingOptions *m_options;
46 };
47 
48 #endif // MARKDOWNHIGHLIGHTER_H
FormattingOptions
Definition: FormattingOptions.h:9
MarkdownToken
Definition: MarkdownToken.h:4
MarkdownHighlighter
Definition: MarkdownHighlighter.h:13