Highlighters does not need to inherit from HighlighterGroup
Just compose, to avoid coupling Highlighters with the Highlighter interface. And yeah, that naming is a bit confusing.
This commit is contained in:
parent
6272847ace
commit
94a0c9bb45
|
@ -653,7 +653,7 @@ Completions highlighter_cmd_completer(
|
||||||
if (scope == "shared")
|
if (scope == "shared")
|
||||||
root = &DefinedHighlighters::instance();
|
root = &DefinedHighlighters::instance();
|
||||||
else if (auto* s = get_scope_ifp(scope, context))
|
else if (auto* s = get_scope_ifp(scope, context))
|
||||||
root = &s->highlighters();
|
root = &s->highlighters().group();
|
||||||
else
|
else
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
@ -676,8 +676,8 @@ Highlighter& get_highlighter(const Context& context, StringView path)
|
||||||
|
|
||||||
auto sep_it = find(path, '/');
|
auto sep_it = find(path, '/');
|
||||||
StringView scope{path.begin(), sep_it};
|
StringView scope{path.begin(), sep_it};
|
||||||
auto* root = (scope == "shared") ? (HighlighterGroup*)&DefinedHighlighters::instance()
|
auto* root = (scope == "shared") ? static_cast<HighlighterGroup*>(&DefinedHighlighters::instance())
|
||||||
: (HighlighterGroup*)&get_scope(scope, context).highlighters();
|
: static_cast<HighlighterGroup*>(&get_scope(scope, context).highlighters().group());
|
||||||
if (sep_it != path.end())
|
if (sep_it != path.end())
|
||||||
return root->get_child(StringView{sep_it+1, path.end()});
|
return root->get_child(StringView{sep_it+1, path.end()});
|
||||||
return *root;
|
return *root;
|
||||||
|
|
|
@ -69,19 +69,19 @@ Completions HighlighterGroup::complete_child(StringView path, ByteCount cursor_p
|
||||||
return { 0, 0, std::move(candidates) };
|
return { 0, 0, std::move(candidates) };
|
||||||
}
|
}
|
||||||
|
|
||||||
void Highlighters::do_highlight(const Context& context, HighlightPass pass,
|
void Highlighters::highlight(const Context& context, HighlightPass pass,
|
||||||
DisplayBuffer& display_buffer, BufferRange range)
|
DisplayBuffer& display_buffer, BufferRange range)
|
||||||
{
|
{
|
||||||
if (m_parent)
|
if (m_parent)
|
||||||
m_parent->do_highlight(context, pass, display_buffer, range);
|
m_parent->highlight(context, pass, display_buffer, range);
|
||||||
HighlighterGroup::do_highlight(context, pass, display_buffer, range);
|
m_group.highlight(context, pass, display_buffer, range);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Highlighters::do_compute_display_setup(const Context& context, HighlightPass pass, DisplaySetup& setup)
|
void Highlighters::compute_display_setup(const Context& context, HighlightPass pass, DisplaySetup& setup)
|
||||||
{
|
{
|
||||||
if (m_parent)
|
if (m_parent)
|
||||||
m_parent->do_compute_display_setup(context, pass, setup);
|
m_parent->compute_display_setup(context, pass, setup);
|
||||||
HighlighterGroup::do_compute_display_setup(context, pass, setup);
|
m_group.compute_display_setup(context, pass, setup);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,19 +36,25 @@ protected:
|
||||||
HighlighterMap m_highlighters;
|
HighlighterMap m_highlighters;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Highlighters : public HighlighterGroup, public SafeCountable
|
struct ScopeList;
|
||||||
|
|
||||||
|
class Highlighters : public SafeCountable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Highlighters(Highlighters& parent) : HighlighterGroup{HighlightPass::All}, SafeCountable{}, m_parent(&parent) {}
|
Highlighters(Highlighters& parent) : SafeCountable{}, m_parent{&parent}, m_group{HighlightPass::All} {}
|
||||||
|
|
||||||
|
HighlighterGroup& group() { return m_group; }
|
||||||
|
const HighlighterGroup& group() const { return m_group; }
|
||||||
|
|
||||||
|
void highlight(const Context& context, HighlightPass pass, DisplayBuffer& display_buffer, BufferRange range);
|
||||||
|
void compute_display_setup(const Context& context, HighlightPass pass, DisplaySetup& setup);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void do_highlight(const Context& context, HighlightPass pass, DisplayBuffer& display_buffer, BufferRange range) override;
|
|
||||||
void do_compute_display_setup(const Context& context, HighlightPass pass, DisplaySetup& setup) override;
|
|
||||||
|
|
||||||
friend class Scope;
|
friend class Scope;
|
||||||
Highlighters() : HighlighterGroup{HighlightPass::All} {}
|
Highlighters() : m_group{HighlightPass::All} {}
|
||||||
|
|
||||||
SafePtr<Highlighters> m_parent;
|
SafePtr<Highlighters> m_parent;
|
||||||
|
HighlighterGroup m_group;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DefinedHighlighters : public HighlighterGroup,
|
struct DefinedHighlighters : public HighlighterGroup,
|
||||||
|
|
|
@ -28,7 +28,7 @@ Window::Window(Buffer& buffer)
|
||||||
|
|
||||||
options().register_watcher(*this);
|
options().register_watcher(*this);
|
||||||
|
|
||||||
setup_builtin_highlighters(m_builtin_highlighters);
|
setup_builtin_highlighters(m_builtin_highlighters.group());
|
||||||
|
|
||||||
for (auto& option : options().flatten_options())
|
for (auto& option : options().flatten_options())
|
||||||
on_option_changed(*option);
|
on_option_changed(*option);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user