Serenity Operating System
1#pragma once
2
3#include <AK/Noncopyable.h>
4#include <AK/WeakPtr.h>
5#include <LibGUI/TextDocument.h>
6
7namespace GUI {
8
9class SyntaxHighlighter {
10 AK_MAKE_NONCOPYABLE(SyntaxHighlighter);
11 AK_MAKE_NONMOVABLE(SyntaxHighlighter);
12
13public:
14 virtual ~SyntaxHighlighter();
15
16 virtual void rehighlight() = 0;
17 virtual void highlight_matching_token_pair() = 0;
18
19 void attach(TextEditor& editor);
20 void detach();
21 void cursor_did_change();
22
23protected:
24 SyntaxHighlighter() {}
25
26 WeakPtr<TextEditor> m_editor;
27
28 struct BuddySpan {
29 int index { -1 };
30 GUI::TextDocumentSpan span_backup;
31 };
32
33 bool m_has_brace_buddies { false };
34 BuddySpan m_brace_buddies[2];
35};
36
37}