diff --git a/src/highlighter.hh b/src/highlighter.hh index 40d19abc..cbfeac73 100644 --- a/src/highlighter.hh +++ b/src/highlighter.hh @@ -81,26 +81,6 @@ private: const HighlightPass m_passes; }; -template -struct SimpleHighlighter : public Highlighter -{ - SimpleHighlighter(Func func, HighlightPass pass) - : Highlighter{pass}, m_func{std::move(func)} {} - -private: - void do_highlight(const Context& context, HighlightPass pass, DisplayBuffer& display_buffer, BufferRange range) override - { - m_func(context, pass, display_buffer, range); - } - Func m_func; -}; - -template -std::unique_ptr> make_simple_highlighter(T func, HighlightPass pass = HighlightPass::Colorize) -{ - return make_unique>(std::move(func), pass); -} - using HighlighterParameters = ConstArrayView; using HighlighterFactory = std::function; diff --git a/src/highlighters.cc b/src/highlighters.cc index e46131f2..dae842c6 100644 --- a/src/highlighters.cc +++ b/src/highlighters.cc @@ -25,6 +25,24 @@ namespace Kakoune { +template +std::unique_ptr make_highlighter(Func func, HighlightPass pass = HighlightPass::Colorize) +{ + struct SimpleHighlighter : public Highlighter + { + SimpleHighlighter(Func func, HighlightPass pass) + : Highlighter{pass}, m_func{std::move(func)} {} + + private: + void do_highlight(const Context& context, HighlightPass pass, DisplayBuffer& display_buffer, BufferRange range) override + { + m_func(context, pass, display_buffer, range); + } + Func m_func; + }; + return make_unique(std::move(func), pass); +} + template void highlight_range(DisplayBuffer& display_buffer, BufferCoord begin, BufferCoord end, @@ -177,7 +195,7 @@ static HighlighterAndId create_fill_highlighter(HighlighterParameters params) highlight_range(display_buffer, range.begin, range.end, true, apply_face(get_face(facespec))); }; - return {"fill_" + facespec, make_simple_highlighter(std::move(func))}; + return {"fill_" + facespec, make_highlighter(std::move(func))}; } template @@ -529,7 +547,7 @@ HighlighterAndId create_line_highlighter(HighlighterParameters params) it->push_back({ String{' ', remaining}, face }); }; - return {"hlline_" + params[0], make_simple_highlighter(std::move(func))}; + return {"hlline_" + params[0], make_highlighter(std::move(func))}; } HighlighterAndId create_column_highlighter(HighlighterParameters params) @@ -642,7 +660,7 @@ HighlighterAndId create_column_highlighter(HighlighterParameters params) } }; - return {"hlcol_" + params[0], make_simple_highlighter(std::move(func))}; + return {"hlcol_" + params[0], make_highlighter(std::move(func))}; } struct WrapHighlighter : Highlighter @@ -923,7 +941,7 @@ HighlighterAndId show_whitespaces_factory(HighlighterParameters params) get_param("lf", "¬"), get_param("nbsp", "⍽")); - return {"show_whitespaces", make_simple_highlighter(std::move(func))}; + return {"show_whitespaces", make_highlighter(std::move(func))}; } struct LineNumbersHighlighter : Highlighter @@ -1056,7 +1074,7 @@ void show_matching_char(const Context& context, HighlightPass, DisplayBuffer& di HighlighterAndId create_matching_char_highlighter(HighlighterParameters params) { - return {"show_matching", make_simple_highlighter(show_matching_char)}; + return {"show_matching", make_highlighter(show_matching_char)}; } void highlight_selections(const Context& context, HighlightPass, DisplayBuffer& display_buffer, BufferRange) @@ -1315,7 +1333,7 @@ HighlighterAndId create_ranges_highlighter(HighlighterParameters params) } }; - return {"hlranges_" + params[0], make_simple_highlighter(func) }; + return {"hlranges_" + params[0], make_highlighter(func) }; } HighlighterAndId create_highlighter_group(HighlighterParameters params) @@ -1369,7 +1387,7 @@ HighlighterAndId create_reference_highlighter(HighlighterParameters params) {} }; - return {name, make_simple_highlighter(func)}; + return {name, make_highlighter(func)}; } struct RegexMatch @@ -1772,6 +1790,13 @@ private: } }; +void setup_builtin_highlighters(HighlighterGroup& group) +{ + group.add_child({"tabulations"_str, make_highlighter(expand_tabulations)}); + group.add_child({"unprintable"_str, make_highlighter(expand_unprintable)}); + group.add_child({"selections"_str, make_highlighter(highlight_selections)}); +} + void register_highlighters() { HighlighterRegistry& registry = HighlighterRegistry::instance(); diff --git a/src/window.cc b/src/window.cc index 234c3e96..262c6979 100644 --- a/src/window.cc +++ b/src/window.cc @@ -17,9 +17,7 @@ namespace Kakoune { // Implementation in highlighters.cc -void highlight_selections(const Context& context, HighlightPass pass, DisplayBuffer& display_buffer, BufferRange range); -void expand_tabulations(const Context& context, HighlightPass pass, DisplayBuffer& display_buffer, BufferRange range); -void expand_unprintable(const Context& context, HighlightPass pass, DisplayBuffer& display_buffer, BufferRange range); +void setup_builtin_highlighters(HighlighterGroup& group); Window::Window(Buffer& buffer) : Scope(buffer), @@ -31,9 +29,7 @@ Window::Window(Buffer& buffer) options().register_watcher(*this); - m_builtin_highlighters.add_child({"tabulations"_str, make_simple_highlighter(expand_tabulations)}); - m_builtin_highlighters.add_child({"unprintable"_str, make_simple_highlighter(expand_unprintable)}); - m_builtin_highlighters.add_child({"selections"_str, make_simple_highlighter(highlight_selections)}); + setup_builtin_highlighters(m_builtin_highlighters); for (auto& option : options().flatten_options()) on_option_changed(*option);