diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-10-22 00:20:09 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-10-22 13:54:03 +0100 |
| commit | b2e90fe21eb2bffd65d66fb40c02195cabbb3fa3 (patch) | |
| tree | 843ddd3c82fdf4e6830efc3ae7d32139b7313a84 /src/highlighter_group.hh | |
| parent | fc4142178f2619a9ba0cac62ce1081590a56ed79 (diff) | |
Refactor highlighters, use an interface with virtual methods
Diffstat (limited to 'src/highlighter_group.hh')
| -rw-r--r-- | src/highlighter_group.hh | 52 |
1 files changed, 10 insertions, 42 deletions
diff --git a/src/highlighter_group.hh b/src/highlighter_group.hh index 94dbad12..7ba5c481 100644 --- a/src/highlighter_group.hh +++ b/src/highlighter_group.hh @@ -9,59 +9,27 @@ namespace Kakoune { -struct group_not_found : public runtime_error +struct child_not_found : public runtime_error { using runtime_error::runtime_error; }; -class HighlighterGroup +class HighlighterGroup : public Highlighter { public: - void operator()(const Context& context, - HighlightFlags flags, - DisplayBuffer& display_buffer) const; + void highlight(const Context& context, HighlightFlags flags, DisplayBuffer& display_buffer) override; - void append(HighlighterAndId&& hl); - void remove(StringView id); + bool has_children() const { return true; } + void add_child(HighlighterAndId&& hl) override; + void remove_child(StringView id) override; - HighlighterGroup& get_group(StringView path); - HighlighterFunc get_highlighter(StringView path) const; + Highlighter& get_child(StringView path) override; - Completions complete_id(StringView path, ByteCount cursor_pos) const; - Completions complete_group_id(StringView path, ByteCount cursor_pos) const; + Completions complete_child(StringView path, ByteCount cursor_pos, bool group) const override; private: - id_map<HighlighterFunc> m_highlighters; -}; - -class HierachicalHighlighter -{ -public: - using GroupMap = id_map<HighlighterGroup>; - using Callback = std::function<void (GroupMap& groups, - const Context& context, - HighlightFlags flags, - DisplayBuffer& display_buffer)>; - - HierachicalHighlighter(Callback callback, GroupMap groups) - : m_callback(std::move(callback)), m_groups(std::move(groups)) {} - - void operator()(const Context& context, - HighlightFlags flags, - DisplayBuffer& display_buffer) - { - m_callback(m_groups, context, flags, display_buffer); - } - - HighlighterGroup& get_group(StringView path); - HighlighterFunc get_highlighter(StringView path) const; - - Completions complete_id(StringView path, ByteCount cursor_pos) const; - Completions complete_group_id(StringView path, ByteCount cursor_pos) const; - -protected: - Callback m_callback; - GroupMap m_groups; + using HighlighterMap = id_map<std::unique_ptr<Highlighter>>; + HighlighterMap m_highlighters; }; struct DefinedHighlighters : public HighlighterGroup, |
