Highlighters: add an HighlighterGroup class
This commit is contained in:
parent
5092456186
commit
0c1e763d66
|
@ -292,6 +292,33 @@ private:
|
||||||
const Window& m_window;
|
const Window& m_window;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void HighlighterGroup::operator()(DisplayBuffer& display_buffer)
|
||||||
|
{
|
||||||
|
for (auto& highlighter : m_highlighters)
|
||||||
|
highlighter.second(display_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HighlighterGroup::add_highlighter(HighlighterAndId&& highlighter)
|
||||||
|
{
|
||||||
|
if (m_highlighters.contains(highlighter.first))
|
||||||
|
throw runtime_error("highlighter id not found " + highlighter.first);
|
||||||
|
m_highlighters.append(std::forward<HighlighterAndId>(highlighter));
|
||||||
|
}
|
||||||
|
|
||||||
|
void HighlighterGroup::remove_highlighter(const std::string& id)
|
||||||
|
{
|
||||||
|
m_highlighters.remove(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
HighlighterAndId HighlighterGroup::create(Window& window,
|
||||||
|
const HighlighterParameters& params)
|
||||||
|
{
|
||||||
|
if (params.size() != 1)
|
||||||
|
throw runtime_error("wrong parameter count");
|
||||||
|
|
||||||
|
return HighlighterAndId(params[0], HighlighterGroup());
|
||||||
|
}
|
||||||
|
|
||||||
void register_highlighters()
|
void register_highlighters()
|
||||||
{
|
{
|
||||||
HighlighterRegistry& registry = HighlighterRegistry::instance();
|
HighlighterRegistry& registry = HighlighterRegistry::instance();
|
||||||
|
@ -301,6 +328,7 @@ void register_highlighters()
|
||||||
registry.register_factory("number_lines", SimpleHighlighterFactory<show_line_numbers>("number_lines"));
|
registry.register_factory("number_lines", SimpleHighlighterFactory<show_line_numbers>("number_lines"));
|
||||||
registry.register_factory("hlcpp", SimpleHighlighterFactory<colorize_cplusplus>("hlcpp"));
|
registry.register_factory("hlcpp", SimpleHighlighterFactory<colorize_cplusplus>("hlcpp"));
|
||||||
registry.register_factory("regex", colorize_regex_factory);
|
registry.register_factory("regex", colorize_regex_factory);
|
||||||
|
registry.register_factory("group", HighlighterGroup::create);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,31 @@
|
||||||
#ifndef highlighters_hh_INCLUDED
|
#ifndef highlighters_hh_INCLUDED
|
||||||
#define highlighters_hh_INCLUDED
|
#define highlighters_hh_INCLUDED
|
||||||
|
|
||||||
|
#include "highlighter.hh"
|
||||||
|
#include "idvaluemap.hh"
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
void register_highlighters();
|
void register_highlighters();
|
||||||
|
|
||||||
|
class DisplayBuffer;
|
||||||
|
class Window;
|
||||||
|
|
||||||
|
class HighlighterGroup
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void operator()(DisplayBuffer& display_buffer);
|
||||||
|
|
||||||
|
void add_highlighter(HighlighterAndId&& highlighter);
|
||||||
|
void remove_highlighter(const std::string& id);
|
||||||
|
|
||||||
|
static HighlighterAndId create(Window& window,
|
||||||
|
const HighlighterParameters& params);
|
||||||
|
private:
|
||||||
|
idvaluemap<std::string, HighlighterFunc> m_highlighters;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // highlighters_hh_INCLUDED
|
#endif // highlighters_hh_INCLUDED
|
||||||
|
|
Loading…
Reference in New Issue
Block a user