Skip to content

Commit 5dcadc7

Browse files
chore: remove end_row & end_col for inline or eol virtual text
## Details When adding `inline` or `eol` extmarks the end information is not necessary for rendering. This simplifies offset calculation when accounting for the `inline` text this plugin is adding. Still needs to be include for some `inline` marks, like when we conceal as part of the same mark definition.
1 parent 4964586 commit 5dcadc7

19 files changed

+62
-59
lines changed

lua/render-markdown/core/context.lua

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ local log = require('render-markdown.core.log')
1212
---@field top_level_mode boolean
1313

1414
---@class render.md.context.Offset
15-
---@field start_col integer
16-
---@field end_col integer
15+
---@field col integer
1716
---@field width integer
1817

1918
---@class render.md.Context
@@ -156,7 +155,7 @@ function Context:get_offset(node)
156155
local result = 0
157156
local offsets = self.offsets[node.start_row] or {}
158157
for _, offset in ipairs(offsets) do
159-
if node.start_col <= offset.end_col and node.end_col > offset.start_col then
158+
if node.start_col <= offset.col and node.end_col > offset.col then
160159
result = result + offset.width
161160
end
162161
end

lua/render-markdown/health.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ local state = require('render-markdown.state')
55
local M = {}
66

77
---@private
8-
M.version = '8.1.19'
8+
M.version = '8.1.20'
99

1010
function M.check()
1111
M.start('version')

lua/render-markdown/lib/marks.lua

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,20 @@ function Marks:get()
2929
return self.marks
3030
end
3131

32+
---@param element render.md.mark.Element
33+
---@param node render.md.Node
34+
---@param opts render.md.MarkOpts
35+
---@return boolean
36+
function Marks:start(element, node, opts)
37+
return self:add(element, node.start_row, node.start_col, opts)
38+
end
39+
3240
---@param element render.md.mark.Element
3341
---@param node render.md.Node
3442
---@param opts render.md.MarkOpts
3543
---@param offset? Range4
3644
---@return boolean
37-
function Marks:add_over(element, node, opts, offset)
45+
function Marks:over(element, node, opts, offset)
3846
offset = offset or { 0, 0, 0, 0 }
3947
opts.end_row = node.end_row + offset[3]
4048
opts.end_col = node.end_col + offset[4]
@@ -112,10 +120,8 @@ function Marks:update_context(mark)
112120
})
113121
end
114122
if mark.opts.virt_text_pos == 'inline' then
115-
local end_col = mark.opts.end_col or start_col
116123
self.context:add_offset(row, {
117-
start_col = start_col,
118-
end_col = end_col,
124+
col = start_col,
119125
width = Str.line_width(mark.opts.virt_text),
120126
})
121127
end

lua/render-markdown/render/base.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function Base:sign(enabled, text, highlight)
3939
if highlight ~= nil then
4040
sign_highlight = colors.combine(highlight, sign_highlight)
4141
end
42-
self.marks:add('sign', self.node.start_row, self.node.start_col, {
42+
self.marks:start('sign', self.node, {
4343
sign_text = text,
4444
sign_hl_group = sign_highlight,
4545
})
@@ -55,7 +55,7 @@ function Base:check_icon(icon, highlight)
5555
local right_pad = self.config.checkbox.right_pad
5656
if space < 0 then
5757
-- Not enough space to fit the icon in-place
58-
return self.marks:add_over('check_icon', self.node, {
58+
return self.marks:over('check_icon', self.node, {
5959
virt_text = self:append(line, right_pad),
6060
virt_text_pos = 'inline',
6161
conceal = '',
@@ -101,7 +101,7 @@ function Base:scope(element, node, highlight)
101101
if inline == nil then
102102
return
103103
end
104-
self.marks:add_over(element, inline, { hl_group = highlight })
104+
self.marks:over(element, inline, { hl_group = highlight })
105105
end
106106

107107
---@protected

lua/render-markdown/render/code.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ function Render:language()
162162
-- This is lumped into the delimiter node and needs to be handled.
163163
local spaces = Str.spaces('start', delim.text)
164164
text = Str.pad(spaces - self.context:width(delim)) .. text
165-
return self.marks:add('code_language', node.start_row, node.start_col, {
165+
return self.marks:start('code_language', node, {
166166
virt_text = { { text, highlight } },
167167
virt_text_pos = 'inline',
168168
})

lua/render-markdown/render/code_inline.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ end
1919

2020
function Render:render()
2121
local highlight = self.code.highlight_inline
22-
self.marks:add_over('code_background', self.node, { hl_group = highlight })
22+
self.marks:over('code_background', self.node, { hl_group = highlight })
2323
self:side_padding(highlight, self.node.start_row, self.node.start_col)
2424
self:side_padding(highlight, self.node.end_row, self.node.end_col)
2525
end

lua/render-markdown/render/heading.lua

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ function Render:icon()
128128
return width
129129
end
130130
if self.heading.position == 'right' then
131-
self.marks:add_over(true, marker, { conceal = '' }, { 0, 0, 0, 1 })
132-
self.marks:add_over('head_icon', marker, {
131+
self.marks:over(true, marker, { conceal = '' }, { 0, 0, 0, 1 })
132+
self.marks:start('head_icon', marker, {
133133
priority = 1000,
134134
virt_text = { { icon, highlight } },
135135
virt_text_pos = 'eol',
@@ -138,14 +138,14 @@ function Render:icon()
138138
else
139139
local padding = width - Str.width(icon)
140140
if self.heading.position == 'inline' or padding < 0 then
141-
local added = self.marks:add_over('head_icon', marker, {
141+
local added = self.marks:over('head_icon', marker, {
142142
virt_text = { { icon, highlight } },
143143
virt_text_pos = 'inline',
144144
conceal = '',
145145
}, { 0, 0, 0, 1 })
146146
return added and Str.width(icon) or width
147147
else
148-
self.marks:add_over('head_icon', marker, {
148+
self.marks:over('head_icon', marker, {
149149
virt_text = { { Str.pad(padding) .. icon, highlight } },
150150
virt_text_pos = 'overlay',
151151
})
@@ -158,7 +158,7 @@ function Render:icon()
158158
return 0
159159
end
160160
if self.heading.position == 'right' then
161-
self.marks:add_over('head_icon', node, {
161+
self.marks:start('head_icon', node, {
162162
priority = 1000,
163163
virt_text = { { icon, highlight } },
164164
virt_text_pos = 'eol',
@@ -167,10 +167,9 @@ function Render:icon()
167167
else
168168
local added = true
169169
for row = node.start_row, node.end_row - 1 do
170+
local text = row == node.start_row and icon or Str.pad(Str.width(icon))
170171
local added_row = self.marks:add('head_icon', row, node.start_col, {
171-
end_row = row,
172-
end_col = node.end_col,
173-
virt_text = { { row == node.start_row and icon or Str.pad(Str.width(icon)), highlight } },
172+
virt_text = { { text, highlight } },
174173
virt_text_pos = 'inline',
175174
})
176175
added = added and added_row
@@ -287,7 +286,7 @@ end
287286

288287
---@private
289288
function Render:conceal_underline()
290-
self.marks:add_over(true, self.data.marker, { conceal = '' })
289+
self.marks:over(true, self.data.marker, { conceal = '' })
291290
end
292291

293292
return Render

lua/render-markdown/render/html_comment.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ function Render:setup()
1515
end
1616

1717
function Render:render()
18-
self.marks:add_over(true, self.node, { conceal = '' })
18+
self.marks:over(true, self.node, { conceal = '' })
1919
if self.comment.text ~= nil then
20-
self.marks:add_over(true, self.node, {
20+
self.marks:start(true, self.node, {
2121
virt_text = { { self.comment.text, self.comment.highlight } },
2222
virt_text_pos = 'inline',
2323
})

lua/render-markdown/render/html_tag.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ end
2222
function Render:render()
2323
self:hide('start_tag')
2424
self:hide('end_tag')
25-
self.marks:add(false, self.node.start_row, self.node.start_col, {
25+
self.marks:start(false, self.node, {
2626
virt_text = { { self.tag.icon, self.tag.highlight } },
2727
virt_text_pos = 'inline',
2828
})
@@ -33,7 +33,7 @@ end
3333
function Render:hide(child)
3434
local node = self.node:child(child)
3535
if node ~= nil then
36-
self.marks:add_over(true, node, { conceal = '' })
36+
self.marks:over(true, node, { conceal = '' })
3737
end
3838
end
3939

lua/render-markdown/render/inline_highlight.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ end
5151
---@param col integer
5252
function Render:hide_equals(row, col)
5353
self.marks:add(true, row, col, {
54-
end_row = row,
5554
end_col = col + 2,
5655
conceal = '',
5756
})

0 commit comments

Comments
 (0)