SyntaxHighlighter.h 810 B

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