Support nested {Filters,Highlighter}Group

This commit is contained in:
Maxime Coste 2012-12-09 18:58:58 +01:00
parent 7d6a48f43a
commit d0c800a7d7

View File

@ -251,6 +251,17 @@ void delete_buffer(const CommandParameters& params, Context& context)
delete buffer; delete buffer;
} }
template<typename Group>
Group& get_group(Group& root, const String& group_path)
{
auto it = find(group_path, '/');
Group& group = root.get_group(String(group_path.begin(), it));
if (it != group_path.end())
return get_group(group, String(it+1, group_path.end()));
else
return group;
}
void add_highlighter(const CommandParameters& params, Context& context) void add_highlighter(const CommandParameters& params, Context& context)
{ {
ParametersParser parser(params, { { "group", true } }); ParametersParser parser(params, { { "group", true } });
@ -267,7 +278,7 @@ void add_highlighter(const CommandParameters& params, Context& context)
Window& window = context.window(); Window& window = context.window();
HighlighterGroup& group = parser.has_option("group") ? HighlighterGroup& group = parser.has_option("group") ?
window.highlighters().get_group(parser.option_value("group")) get_group(window.highlighters(), parser.option_value("group"))
: window.highlighters(); : window.highlighters();
auto& factory = registry[name]; auto& factory = registry[name];
@ -282,7 +293,7 @@ void rm_highlighter(const CommandParameters& params, Context& context)
Window& window = context.window(); Window& window = context.window();
HighlighterGroup& group = parser.has_option("group") ? HighlighterGroup& group = parser.has_option("group") ?
window.highlighters().get_group(parser.option_value("group")) get_group(window.highlighters(), parser.option_value("group"))
: window.highlighters(); : window.highlighters();
group.remove(parser[0]); group.remove(parser[0]);
@ -304,7 +315,7 @@ void add_filter(const CommandParameters& params, Context& context)
Editor& editor = context.editor(); Editor& editor = context.editor();
FilterGroup& group = parser.has_option("group") ? FilterGroup& group = parser.has_option("group") ?
editor.filters().get_group(parser.option_value("group")) get_group(editor.filters(), parser.option_value("group"))
: editor.filters(); : editor.filters();
auto& factory = registry[name]; auto& factory = registry[name];
@ -319,7 +330,7 @@ void rm_filter(const CommandParameters& params, Context& context)
Editor& editor = context.editor(); Editor& editor = context.editor();
FilterGroup& group = parser.has_option("group") ? FilterGroup& group = parser.has_option("group") ?
editor.filters().get_group(parser.option_value("group")) get_group(editor.filters(), parser.option_value("group"))
: editor.filters(); : editor.filters();
group.remove(parser[0]); group.remove(parser[0]);
@ -670,7 +681,7 @@ void register_commands()
if (token_to_complete == 1 and params[0] == "-group") if (token_to_complete == 1 and params[0] == "-group")
return w.highlighters().complete_group_id(arg, pos_in_token); return w.highlighters().complete_group_id(arg, pos_in_token);
else if (token_to_complete == 2 and params[0] == "-group") else if (token_to_complete == 2 and params[0] == "-group")
return w.highlighters().get_group(params[1]).complete_id(arg, pos_in_token); return get_group(w.highlighters(), params[1]).complete_id(arg, pos_in_token);
else else
return w.highlighters().complete_id(arg, pos_in_token); return w.highlighters().complete_id(arg, pos_in_token);
}); });
@ -698,7 +709,7 @@ void register_commands()
if (token_to_complete == 1 and params[0] == "-group") if (token_to_complete == 1 and params[0] == "-group")
return w.filters().complete_group_id(arg, pos_in_token); return w.filters().complete_group_id(arg, pos_in_token);
else if (token_to_complete == 2 and params[0] == "-group") else if (token_to_complete == 2 and params[0] == "-group")
return w.filters().get_group(params[1]).complete_id(arg, pos_in_token); return get_group(w.filters(), params[1]).complete_id(arg, pos_in_token);
else else
return w.filters().complete_id(arg, pos_in_token); return w.filters().complete_id(arg, pos_in_token);
}); });