summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2017-05-08 11:29:23 +0100
committerMaxime Coste <mawww@kakoune.org>2017-05-08 11:29:23 +0100
commitb0b40485ce794c828d376cb2081581312ddd2a67 (patch)
tree341c11d8c1ac49973699a57643d301f1d291e8b5 /src
parenta5d4dbc16e84258a16767bbf47e14e8db28f8649 (diff)
Move SimpleHighlighter as an implementation detail
Diffstat (limited to 'src')
-rw-r--r--src/highlighter.hh20
-rw-r--r--src/highlighters.cc39
-rw-r--r--src/window.cc8
3 files changed, 34 insertions, 33 deletions
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<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)>;
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<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();
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);