Move SimpleHighlighter as an implementation detail

This commit is contained in:
Maxime Coste 2017-05-08 11:29:23 +01:00
parent a5d4dbc16e
commit b0b40485ce
3 changed files with 34 additions and 33 deletions

View File

@ -81,26 +81,6 @@ private:
const HighlightPass m_passes;
};
template<typename Func>
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<typename T>
std::unique_ptr<SimpleHighlighter<T>> make_simple_highlighter(T func, HighlightPass pass = HighlightPass::Colorize)
{
return make_unique<SimpleHighlighter<T>>(std::move(func), pass);
}
using HighlighterParameters = ConstArrayView<String>;
using HighlighterFactory = std::function<HighlighterAndId (HighlighterParameters params)>;

View File

@ -25,6 +25,24 @@
namespace Kakoune
{
template<typename Func>
std::unique_ptr<Highlighter> 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<SimpleHighlighter>(std::move(func), pass);
}
template<typename T>
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<typename T>
@ -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();

View File

@ -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);