Slight code cleanup in the DynamicRegexHighlighter
This commit is contained in:
parent
2f7568485f
commit
9faad8c023
|
@ -367,16 +367,16 @@ template<typename RegexGetter, typename FaceGetter>
|
||||||
class DynamicRegexHighlighter : public Highlighter
|
class DynamicRegexHighlighter : public Highlighter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DynamicRegexHighlighter(RegexGetter regex_getter, FaceGetter face_getter)
|
DynamicRegexHighlighter(RegexGetter get_regex, FaceGetter resolve_faces)
|
||||||
: Highlighter{HighlightPass::Colorize},
|
: Highlighter{HighlightPass::Colorize},
|
||||||
m_regex_getter(std::move(regex_getter)),
|
m_get_regex(std::move(get_regex)),
|
||||||
m_face_getter(std::move(face_getter)),
|
m_resolve_faces(std::move(resolve_faces)),
|
||||||
m_highlighter(Regex{}, FacesSpec{}) {}
|
m_highlighter(Regex{}, FacesSpec{}) {}
|
||||||
|
|
||||||
void do_highlight(HighlightContext context, DisplayBuffer& display_buffer, BufferRange range) override
|
void do_highlight(HighlightContext context, DisplayBuffer& display_buffer, BufferRange range) override
|
||||||
{
|
{
|
||||||
Regex regex = m_regex_getter(context.context);
|
Regex regex = m_get_regex(context.context);
|
||||||
FacesSpec face = regex.empty() ? FacesSpec{} : m_face_getter(context.context, regex);
|
FacesSpec face = regex.empty() ? FacesSpec{} : m_resolve_faces(regex);
|
||||||
if (regex != m_last_regex or face != m_last_face)
|
if (regex != m_last_regex or face != m_last_face)
|
||||||
{
|
{
|
||||||
m_last_regex = std::move(regex);
|
m_last_regex = std::move(regex);
|
||||||
|
@ -390,10 +390,10 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Regex m_last_regex;
|
Regex m_last_regex;
|
||||||
RegexGetter m_regex_getter;
|
RegexGetter m_get_regex;
|
||||||
|
|
||||||
FacesSpec m_last_face;
|
FacesSpec m_last_face;
|
||||||
FaceGetter m_face_getter;
|
FaceGetter m_resolve_faces;
|
||||||
|
|
||||||
RegexHighlighter m_highlighter;
|
RegexHighlighter m_highlighter;
|
||||||
};
|
};
|
||||||
|
@ -418,12 +418,12 @@ std::unique_ptr<Highlighter> create_dynamic_regex_highlighter(HighlighterParamet
|
||||||
faces.emplace_back(String{spec.begin(), colon}, parse_face({colon+1, spec.end()}));
|
faces.emplace_back(String{spec.begin(), colon}, parse_face({colon+1, spec.end()}));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto make_hl = [](auto& regex_getter, auto& face_getter) {
|
auto make_hl = [](auto& get_regex, auto& resolve_faces) {
|
||||||
return std::make_unique<DynamicRegexHighlighter<std::remove_cvref_t<decltype(regex_getter)>,
|
return std::make_unique<DynamicRegexHighlighter<std::remove_cvref_t<decltype(get_regex)>,
|
||||||
std::remove_cvref_t<decltype(face_getter)>>>(
|
std::remove_cvref_t<decltype(resolve_faces)>>>(
|
||||||
std::move(regex_getter), std::move(face_getter));
|
std::move(get_regex), std::move(resolve_faces));
|
||||||
};
|
};
|
||||||
auto get_face = [faces=std::move(faces)](const Context& context, const Regex& regex){
|
auto resolve_faces = [faces=std::move(faces)](const Regex& regex){
|
||||||
FacesSpec spec;
|
FacesSpec spec;
|
||||||
for (auto& face : faces)
|
for (auto& face : faces)
|
||||||
{
|
{
|
||||||
|
@ -450,7 +450,7 @@ std::unique_ptr<Highlighter> create_dynamic_regex_highlighter(HighlighterParamet
|
||||||
auto get_regex = [option_name = token->content](const Context& context) {
|
auto get_regex = [option_name = token->content](const Context& context) {
|
||||||
return context.options()[option_name].get<Regex>();
|
return context.options()[option_name].get<Regex>();
|
||||||
};
|
};
|
||||||
return make_hl(get_regex, get_face);
|
return make_hl(get_regex, resolve_faces);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto get_regex = [expr = params[0]](const Context& context){
|
auto get_regex = [expr = params[0]](const Context& context){
|
||||||
|
@ -465,7 +465,7 @@ std::unique_ptr<Highlighter> create_dynamic_regex_highlighter(HighlighterParamet
|
||||||
return Regex{};
|
return Regex{};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return make_hl(get_regex, get_face);
|
return make_hl(get_regex, resolve_faces);
|
||||||
}
|
}
|
||||||
|
|
||||||
const HighlighterDesc line_desc = {
|
const HighlighterDesc line_desc = {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user