diff options
| author | Maxime Coste <mawww@kakoune.org> | 2021-08-28 13:53:01 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2021-08-28 13:53:23 +1000 |
| commit | 726bec4670b612a12682bb7db22862edc127220b (patch) | |
| tree | 67f60340f5f760b2d0ecdf0abedffbc946f15e45 /src | |
| parent | e454b393cfaa69d270dda842b40d9c8fc3d672e6 (diff) | |
Support info markup spanning multiple lines
Preserve the active face accross lines
Fixes #4313
Diffstat (limited to 'src')
| -rw-r--r-- | src/commands.cc | 6 | ||||
| -rw-r--r-- | src/display_buffer.cc | 18 | ||||
| -rw-r--r-- | src/display_buffer.hh | 1 |
3 files changed, 18 insertions, 7 deletions
diff --git a/src/commands.cc b/src/commands.cc index 543b14a5..61c90e31 100644 --- a/src/commands.cc +++ b/src/commands.cc @@ -2299,11 +2299,7 @@ const CommandDesc info_cmd = { auto title = parser.get_switch("title").value_or(StringView{}); if (parser.get_switch("markup")) context.client().info_show(parse_display_line(title, context.faces()), - parser[0] | split<StringView>('\n') - | transform([&](StringView s) { - return parse_display_line(s, context.faces()); - }) - | gather<DisplayLineList>(), + parse_display_line_list(parser[0], context.faces()), pos, style); else context.client().info_show(title.str(), parser[0], pos, style); diff --git a/src/display_buffer.cc b/src/display_buffer.cc index e7caed04..d98108cd 100644 --- a/src/display_buffer.cc +++ b/src/display_buffer.cc @@ -257,13 +257,12 @@ void DisplayBuffer::optimize() line.optimize(); } -DisplayLine parse_display_line(StringView line, const FaceRegistry& faces, const HashMap<String, DisplayLine>& builtins) +DisplayLine parse_display_line(StringView line, Face& face, const FaceRegistry& faces, const HashMap<String, DisplayLine>& builtins) { DisplayLine res; bool was_antislash = false; auto pos = line.begin(); String content; - Face face; for (auto it = line.begin(), end = line.end(); it != end; ++it) { const char c = *it; @@ -332,4 +331,19 @@ DisplayLine parse_display_line(StringView line, const FaceRegistry& faces, const return res; } +DisplayLine parse_display_line(StringView line, const FaceRegistry& faces, const HashMap<String, DisplayLine>& builtins) +{ + Face face{}; + return parse_display_line(line, face, faces, builtins); +} + +DisplayLineList parse_display_line_list(StringView content, const FaceRegistry& faces, const HashMap<String, DisplayLine>& builtins) +{ + return content | split<StringView>('\n') + | transform([&, face=Face{}](StringView s) mutable { + return parse_display_line(s, face, faces, builtins); + }) + | gather<DisplayLineList>(); +} + } diff --git a/src/display_buffer.hh b/src/display_buffer.hh index 855fa92d..bfa01bfb 100644 --- a/src/display_buffer.hh +++ b/src/display_buffer.hh @@ -157,6 +157,7 @@ using DisplayLineList = Vector<DisplayLine>; class FaceRegistry; DisplayLine parse_display_line(StringView line, const FaceRegistry& faces, const HashMap<String, DisplayLine>& builtins = {}); +DisplayLineList parse_display_line_list(StringView content, const FaceRegistry& faces, const HashMap<String, DisplayLine>& builtins = {}); class DisplayBuffer : public UseMemoryDomain<MemoryDomain::Display> { |
