summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/highlighters.cc29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/highlighters.cc b/src/highlighters.cc
index 5c0f5806..48ff01f9 100644
--- a/src/highlighters.cc
+++ b/src/highlighters.cc
@@ -1288,10 +1288,33 @@ HighlighterAndId create_ranges_highlighter(HighlighterParameters params)
HighlighterAndId create_highlighter_group(HighlighterParameters params)
{
- if (params.size() != 1)
- throw runtime_error("wrong parameter count");
+ static const ParameterDesc param_desc{
+ { { "passes", { true, "" } } },
+ ParameterDesc::Flags::SwitchesOnlyAtStart, 1, 1
+ };
+ ParametersParser parser{params, param_desc};
+
+ auto parse_passes = [](StringView str) {
+ HighlightPass passes{};
+ for (auto pass : str | split<StringView>('|'))
+ {
+ if (pass == "colorize")
+ passes |= HighlightPass::Colorize;
+ else if (pass == "move")
+ passes |= HighlightPass::Move;
+ else if (pass == "wrap")
+ passes |= HighlightPass::Wrap;
+ else
+ throw runtime_error{format("invalid highlight pass: {}", pass)};
+ }
+ if (passes == HighlightPass{})
+ throw runtime_error{"no passes specified"};
+
+ return passes;
+ };
+ HighlightPass passes = parse_passes(parser.get_switch("passes").value_or("colorize"));
- return HighlighterAndId(params[0], make_unique<HighlighterGroup>(HighlightPass::Colorize));
+ return HighlighterAndId(parser[0], make_unique<HighlighterGroup>(passes));
}
HighlighterAndId create_reference_highlighter(HighlighterParameters params)