summaryrefslogtreecommitdiff
path: root/src/highlighter_group.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-10-22 00:20:09 +0100
committerMaxime Coste <frrrwww@gmail.com>2014-10-22 13:54:03 +0100
commitb2e90fe21eb2bffd65d66fb40c02195cabbb3fa3 (patch)
tree843ddd3c82fdf4e6830efc3ae7d32139b7313a84 /src/highlighter_group.hh
parentfc4142178f2619a9ba0cac62ce1081590a56ed79 (diff)
Refactor highlighters, use an interface with virtual methods
Diffstat (limited to 'src/highlighter_group.hh')
-rw-r--r--src/highlighter_group.hh52
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,