From: Roberto Castagnola Date: Wed, 26 Jul 2023 12:49:05 +0000 (+0200) Subject: Markdown parser: fix SplitLine with multibyte characters X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=5b79b20c0e55e4d886b8431ef42e795c56fa689b;p=vim-lsp.git Markdown parser: fix SplitLine with multibyte characters --- diff --git a/autoload/lsp/markdown.vim b/autoload/lsp/markdown.vim index af470a5..c7b11d6 100644 --- a/autoload/lsp/markdown.vim +++ b/autoload/lsp/markdown.vim @@ -414,40 +414,41 @@ enddef def SplitLine(line: dict, indent: number = 0): list> var lines: list> = [] - var pos = line.text->match('\n') - if pos < 0 + var tokens: list = line.text->split("\n", true) + if tokens->len() == 1 lines->add(line) return lines endif - var cur_line: dict = { - text: line.text[: pos - 1], - props: [] - } - var next_line: dict = { - text: (' '->repeat(indent) .. line.text[pos + 1 :]), - props: [] - } - for prop in line.props - if prop.col + prop.length - 1 < pos + 1 - cur_line.props->add(prop) - elseif prop.col > pos + 1 - prop.col -= pos - indent + 1 - next_line.props->add(prop) - else - cur_line.props->add({ - type: prop.type, - col: prop.col, - length: pos - prop.col + 1 - }) - next_line.props->add({ - type: prop.type, - col: indent + 1, - length: prop.col + prop.length - pos - 2 - }) - endif + var props: list> = line.props + for cur_text in tokens + var cur_props: list> = [] + var next_props: list> = [] + var length: number = cur_text->len() + for prop in props + if prop.col + prop.length - 1 <= length + cur_props->add(prop) + elseif prop.col > length + prop.col -= length + 1 + next_props->add(prop) + else + var cur_length: number = length - prop.col + 1 + cur_props->add({ + type: prop.type, + col: prop.col, + length: cur_length + }) + prop.col = 1 + prop.length -= cur_length + 1 + next_props->add(prop) + endif + endfor + lines->add({ + text: cur_text, + props: cur_props + }) + props = next_props endfor - lines->add(cur_line) - return lines + SplitLine(next_line, indent) + return lines enddef var last_block: string = '' @@ -599,7 +600,7 @@ def ExpandTabs(line: string): string var begin: string = "" for char in block_marker[0] if char == ' ' - begin ..= ' '->repeat(4 - (begin->strlen() % 4)) + begin ..= ' '->repeat(4 - (begin->len() % 4)) else begin ..= char endif