Add docstrings to highlighters, displayed by addhl help
This commit is contained in:
parent
5cefaa1819
commit
6c65c5e080
|
@ -505,7 +505,17 @@ const CommandDesc add_highlighter_cmd = {
|
||||||
SwitchMap{ { "group", { true, "specify the group in which to put the highlighter" } } },
|
SwitchMap{ { "group", { true, "specify the group in which to put the highlighter" } } },
|
||||||
ParameterDesc::Flags::SwitchesOnlyAtStart, 1 },
|
ParameterDesc::Flags::SwitchesOnlyAtStart, 1 },
|
||||||
CommandFlags::None,
|
CommandFlags::None,
|
||||||
CommandHelper{},
|
[](const Context& context, CommandParameters params) -> String
|
||||||
|
{
|
||||||
|
if (params.size() > 0)
|
||||||
|
{
|
||||||
|
HighlighterRegistry& registry = HighlighterRegistry::instance();
|
||||||
|
auto it = registry.find(params[0]);
|
||||||
|
if (it != registry.end())
|
||||||
|
return params[0] + ":\n" + indent(it->second.docstring);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
},
|
||||||
add_highlighter_completer,
|
add_highlighter_completer,
|
||||||
[](const ParametersParser& parser, Context& context)
|
[](const ParametersParser& parser, Context& context)
|
||||||
{
|
{
|
||||||
|
@ -523,7 +533,7 @@ const CommandDesc add_highlighter_cmd = {
|
||||||
auto it = registry.find(name);
|
auto it = registry.find(name);
|
||||||
if (it == registry.end())
|
if (it == registry.end())
|
||||||
throw runtime_error("No such highlighter factory '" + name + "'");
|
throw runtime_error("No such highlighter factory '" + name + "'");
|
||||||
group.add_child(it->second(highlighter_params));
|
group.add_child(it->second.factory(highlighter_params));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,13 @@ std::unique_ptr<SimpleHighlighter<T>> make_simple_highlighter(T func)
|
||||||
using HighlighterParameters = ArrayView<String>;
|
using HighlighterParameters = ArrayView<String>;
|
||||||
using HighlighterFactory = std::function<HighlighterAndId (HighlighterParameters params)>;
|
using HighlighterFactory = std::function<HighlighterAndId (HighlighterParameters params)>;
|
||||||
|
|
||||||
struct HighlighterRegistry : IdMap<HighlighterFactory>,
|
struct HighlighterFactoryAndDocstring
|
||||||
|
{
|
||||||
|
HighlighterFactory factory;
|
||||||
|
String docstring;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HighlighterRegistry : IdMap<HighlighterFactoryAndDocstring>,
|
||||||
Singleton<HighlighterRegistry>
|
Singleton<HighlighterRegistry>
|
||||||
{};
|
{};
|
||||||
|
|
||||||
|
|
|
@ -1205,18 +1205,65 @@ void register_highlighters()
|
||||||
{
|
{
|
||||||
HighlighterRegistry& registry = HighlighterRegistry::instance();
|
HighlighterRegistry& registry = HighlighterRegistry::instance();
|
||||||
|
|
||||||
registry.append({ "number_lines", simple_factory("number_lines", show_line_numbers) });
|
registry.append({
|
||||||
registry.append({ "show_matching", simple_factory("show_matching", show_matching_char) });
|
"number_lines",
|
||||||
registry.append({ "show_whitespaces", simple_factory("show_whitespaces", show_whitespaces) });
|
{ simple_factory("number_lines", show_line_numbers),
|
||||||
registry.append({ "fill", create_fill_highlighter });
|
"Display line numbers" } });
|
||||||
registry.append({ "regex", RegexHighlighter::create });
|
registry.append({
|
||||||
registry.append({ "regex_option", create_regex_option_highlighter });
|
"show_matching",
|
||||||
registry.append({ "search", create_search_highlighter });
|
{ simple_factory("show_matching", show_matching_char),
|
||||||
registry.append({ "group", create_highlighter_group });
|
"Apply the MatchingChar face to the char matching the one under the cursor" } });
|
||||||
registry.append({ "flag_lines", create_flag_lines_highlighter });
|
registry.append({
|
||||||
registry.append({ "line_option", create_line_option_highlighter });
|
"show_whitespaces",
|
||||||
registry.append({ "ref", create_reference_highlighter });
|
{ simple_factory("show_whitespaces", show_whitespaces),
|
||||||
registry.append({ "regions", RegionsHighlighter::create });
|
"Display whitespaces using symbols" } });
|
||||||
|
registry.append({
|
||||||
|
"fill",
|
||||||
|
{ create_fill_highlighter,
|
||||||
|
"Fill the whole highlighted range with the given face" } });
|
||||||
|
registry.append({
|
||||||
|
"regex",
|
||||||
|
{ RegexHighlighter::create,
|
||||||
|
"Parameters: <regex> <capture num>:<face> <capture num>:<face>...\n"
|
||||||
|
"Highlights the matches for captures from the regex with the given faces" } });
|
||||||
|
registry.append({
|
||||||
|
"regex_option",
|
||||||
|
{ create_regex_option_highlighter,
|
||||||
|
"Parameters: <option name> <face>\n"
|
||||||
|
"Highlight matches for the regex stored in <option name> with <face>" } });
|
||||||
|
registry.append({
|
||||||
|
"search",
|
||||||
|
{ create_search_highlighter,
|
||||||
|
"Highlight the current search pattern with the Search face" } });
|
||||||
|
registry.append({
|
||||||
|
"group",
|
||||||
|
{ create_highlighter_group,
|
||||||
|
"Parameters: <group name>\n"
|
||||||
|
"Creates a named group that can contain other highlighters" } });
|
||||||
|
registry.append({
|
||||||
|
"flag_lines",
|
||||||
|
{ create_flag_lines_highlighter,
|
||||||
|
"Parameters: <option name> <bg color>\n"
|
||||||
|
"Display flags specified in the line-flag-list option <option name>\n"
|
||||||
|
"A line-flag is written: <line>|<fg color>|<text>, the list is : separated" } });
|
||||||
|
registry.append({
|
||||||
|
"line_option",
|
||||||
|
{ create_line_option_highlighter,
|
||||||
|
"Parameters: <option name> <face>\n"
|
||||||
|
"Highlight the line stored in <option name> with <face>" } });
|
||||||
|
registry.append({
|
||||||
|
"ref",
|
||||||
|
{ create_reference_highlighter,
|
||||||
|
"Parameters: <path>\n"
|
||||||
|
"Reference the highlighter at <path> in shared highglighters" } });
|
||||||
|
registry.append({
|
||||||
|
"regions",
|
||||||
|
{ RegionsHighlighter::create,
|
||||||
|
"Parameters: [-default <default group>] {<name> <begin> <end> <recurse>}..."
|
||||||
|
"Split the highlighting into regions defined by the <begin>, <end> and <recurse> regex\n"
|
||||||
|
"The region <name> starts at <begin> match, end at <end> match that does not\n"
|
||||||
|
"close a <recurse> match. In between region is the <default group>.\n"
|
||||||
|
"Highlighting a region is done by adding highlighters into the different <name> subgroups." } });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,20 @@ String unescape(StringView str, StringView characters, char escape)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String indent(StringView str, StringView indent)
|
||||||
|
{
|
||||||
|
String res;
|
||||||
|
bool was_eol = true;
|
||||||
|
for (ByteCount i = 0; i < str.length(); ++i)
|
||||||
|
{
|
||||||
|
if (was_eol)
|
||||||
|
res += indent;
|
||||||
|
res += str[i];
|
||||||
|
was_eol = is_eol(str[i]);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
int str_to_int(StringView str)
|
int str_to_int(StringView str)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
|
@ -246,6 +246,8 @@ Vector<StringView> split(StringView str, char separator);
|
||||||
String escape(StringView str, StringView characters, char escape);
|
String escape(StringView str, StringView characters, char escape);
|
||||||
String unescape(StringView str, StringView characters, char escape);
|
String unescape(StringView str, StringView characters, char escape);
|
||||||
|
|
||||||
|
String indent(StringView str, StringView indent = " ");
|
||||||
|
|
||||||
template<typename Container>
|
template<typename Container>
|
||||||
String join(const Container& container, char joiner, bool esc_joiner = true)
|
String join(const Container& container, char joiner, bool esc_joiner = true)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user