Wrap: try to rework and simplify the algorithms further

Fixes #1731
This commit is contained in:
Maxime Coste 2017-11-28 19:04:21 +08:00
parent ae0911b533
commit 380ff553b5
5 changed files with 18 additions and 10 deletions

View File

@ -759,14 +759,13 @@ struct WrapHighlighter : Highlighter
// Disable horizontal scrolling when using a WrapHighlighter // Disable horizontal scrolling when using a WrapHighlighter
setup.window_pos.column = 0; setup.window_pos.column = 0;
setup.window_range.line = win_height; setup.window_range.line = 0;
setup.scroll_offset.column = 0; setup.scroll_offset.column = 0;
setup.full_lines = true; setup.full_lines = true;
for (auto buf_line = setup.window_pos.line, win_line = 0_line; for (auto buf_line = setup.window_pos.line, win_line = 0_line;
buf_line < setup.window_pos.line + setup.window_range.line or win_line < win_height or buf_line <= cursor.line;
buf_line <= cursor.line; ++buf_line, ++setup.window_range.line)
++buf_line)
{ {
if (buf_line >= buffer.line_count()) if (buf_line >= buffer.line_count())
break; break;
@ -775,9 +774,6 @@ struct WrapHighlighter : Highlighter
if (indent >= wrap_column) // do not preserve indent when its bigger than wrap column if (indent >= wrap_column) // do not preserve indent when its bigger than wrap column
indent = 0; indent = 0;
const auto wrap_count = line_wrap_count(buf_line, indent);
setup.window_range.line -= wrap_count;
if (buf_line == cursor.line) if (buf_line == cursor.line)
{ {
BufferCoord coord{buf_line}; BufferCoord coord{buf_line};
@ -799,18 +795,18 @@ struct WrapHighlighter : Highlighter
} }
kak_assert(setup.cursor_pos.column >= 0 and setup.cursor_pos.column < setup.window_range.column); kak_assert(setup.cursor_pos.column >= 0 and setup.cursor_pos.column < setup.window_range.column);
} }
const auto wrap_count = line_wrap_count(buf_line, indent);
win_line += wrap_count + 1; win_line += wrap_count + 1;
// scroll window to keep cursor visible, and update range as lines gets removed // scroll window to keep cursor visible, and update range as lines gets removed
while (buf_line >= cursor.line and setup.window_pos.line < cursor.line and while (buf_line >= cursor.line and setup.window_pos.line < cursor.line and
cursor.line + setup.scroll_offset.line >= setup.window_pos.line + setup.window_range.line) setup.cursor_pos.line + setup.scroll_offset.line >= win_height)
{ {
auto remove_count = std::min(win_height, 1 + line_wrap_count(setup.window_pos.line, indent)); auto remove_count = std::min(win_height, 1 + line_wrap_count(setup.window_pos.line, indent));
++setup.window_pos.line; ++setup.window_pos.line;
--setup.window_range.line;
setup.cursor_pos.line -= remove_count; setup.cursor_pos.line -= remove_count;
win_line -= remove_count; win_line -= remove_count;
// removed one line from the range, added remove_count potential ones
setup.window_range.line += remove_count - 1;
kak_assert(setup.cursor_pos.line >= 0); kak_assert(setup.cursor_pos.line >= 0);
} }
} }

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,6 @@
{ "jsonrpc": "2.0", "method": "draw", "params": [[[{ "face": { "fg": "black", "bg": "white", "attributes": [] }, "contents": "0" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "1 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "1 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 " }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "1 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 " }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "1 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 " }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "1 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 " }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "1 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 " }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " \u000a" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 0" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "2 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 " }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 0" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "2 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 " }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02" }]], { "fg": "default", "bg": "default", "attributes": [] }, { "fg": "blue", "bg": "default", "attributes": [] }] }
{ "jsonrpc": "2.0", "method": "menu_hide", "params": [] }
{ "jsonrpc": "2.0", "method": "info_hide", "params": [] }
{ "jsonrpc": "2.0", "method": "draw_status", "params": [[], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "out 1:1 " }, { "face": { "fg": "black", "bg": "yellow", "attributes": [] }, "contents": "" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " " }, { "face": { "fg": "blue", "bg": "default", "attributes": [] }, "contents": "1 sel" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " - unnamed0@[kak-tests]" }], { "fg": "cyan", "bg": "default", "attributes": [] }] }
{ "jsonrpc": "2.0", "method": "set_cursor", "params": ["buffer", { "line": 0, "column": 0 }] }
{ "jsonrpc": "2.0", "method": "refresh", "params": [true] }

View File

@ -0,0 +1,4 @@
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02

View File

@ -0,0 +1 @@
add-highlighter window wrap