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

Diff for: lua/render-markdown/core/context.lua

+2-3
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

Diff for: lua/render-markdown/health.lua

+1-1
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')

Diff for: lua/render-markdown/lib/marks.lua

+10-4
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

Diff for: lua/render-markdown/render/base.lua

+3-3
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

Diff for: lua/render-markdown/render/code.lua

+1-1
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
})

Diff for: lua/render-markdown/render/code_inline.lua

+1-1
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

Diff for: lua/render-markdown/render/heading.lua

+8-9
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

Diff for: lua/render-markdown/render/html_comment.lua

+2-2
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
})

Diff for: lua/render-markdown/render/html_tag.lua

+2-2
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

Diff for: lua/render-markdown/render/inline_highlight.lua

-1
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
})

Diff for: lua/render-markdown/render/link.lua

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ function Render:setup()
3939
end
4040

4141
function Render:render()
42-
self.marks:add_over('link', self.node, {
42+
self.marks:start('link', self.node, {
4343
virt_text = { { self.data.icon, self.data.highlight } },
4444
virt_text_pos = 'inline',
4545
})
4646
if self.data.autolink then
4747
self:hide_bracket(self.node.start_col)
48-
self.marks:add_over('link', self.node, { hl_group = self.data.highlight })
48+
self.marks:over('link', self.node, { hl_group = self.data.highlight })
4949
self:hide_bracket(self.node.end_col - 1)
5050
end
5151
end

Diff for: lua/render-markdown/render/list_item.lua

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ end
8686

8787
---@private
8888
function Render:hide_marker()
89-
self.marks:add_over('check_icon', self.data.marker, { conceal = '' }, { 0, self.data.spaces, 0, 0 })
89+
self.marks:over('check_icon', self.data.marker, { conceal = '' }, { 0, self.data.spaces, 0, 0 })
9090
end
9191

9292
---@private
@@ -136,7 +136,7 @@ function Render:add_icon(icon, highlight)
136136
end
137137
local text = Str.pad(self.data.spaces) .. icon
138138
local overflow = Str.width(text) > Str.width(self.data.marker.text)
139-
self.marks:add_over('bullet', self.data.marker, {
139+
self.marks:over('bullet', self.data.marker, {
140140
virt_text = { { text, highlight } },
141141
virt_text_pos = overflow and 'inline' or 'overlay',
142142
conceal = overflow and '' or nil,

Diff for: lua/render-markdown/render/quote.lua

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ end
4949
---@private
5050
---@param node render.md.Node
5151
function Render:quote_marker(node)
52-
self.marks:add_over('quote', node, {
52+
self.marks:over('quote', node, {
5353
virt_text = { { node.text:gsub('>', self.data.icon), self.data.highlight } },
5454
virt_text_pos = 'overlay',
5555
virt_text_repeat_linebreak = self.data.repeat_linebreak,

Diff for: lua/render-markdown/render/shortcut.lua

+4-4
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ function Render:callout(callout)
4747
end
4848

4949
local text, conceal = self:callout_title(callout)
50-
self.marks:add_over('callout', self.node, {
50+
self.marks:over('callout', self.node, {
5151
virt_text = { { text, callout.highlight } },
5252
virt_text_pos = 'overlay',
5353
conceal = conceal and '' or nil,
@@ -111,7 +111,7 @@ function Render:wiki_link()
111111
local body = wiki.body(ctx)
112112
if body == nil then
113113
-- Add icon
114-
self.marks:add_over('link', self.node, {
114+
self.marks:start('link', self.node, {
115115
virt_text = { { icon, highlight } },
116116
virt_text_pos = 'inline',
117117
})
@@ -127,7 +127,7 @@ function Render:wiki_link()
127127
table.insert(line, { icon .. body[1], body[2] })
128128
end
129129
-- Inline icon & body, hide original text
130-
self.marks:add_over('link', self.node, {
130+
self.marks:over('link', self.node, {
131131
virt_text = line,
132132
virt_text_pos = 'inline',
133133
conceal = '',
@@ -160,7 +160,7 @@ function Render:footnote(text)
160160
if value == nil then
161161
return
162162
end
163-
self.marks:add_over('link', self.node, {
163+
self.marks:over('link', self.node, {
164164
virt_text = { { value, self.link.highlight } },
165165
virt_text_pos = 'inline',
166166
conceal = '',

Diff for: lua/render-markdown/render/table.lua

+4-4
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ function Render:delimiter()
251251
self:append(line, border[4] .. table.concat(sections, border[5]) .. border[6], self.table.head)
252252
self:append(line, Str.width(delim.node.text) - Str.line_width(line))
253253

254-
self.marks:add_over('table_border', delim.node, {
254+
self.marks:over('table_border', delim.node, {
255255
virt_text = line,
256256
virt_text_pos = 'overlay',
257257
})
@@ -265,7 +265,7 @@ function Render:row(row)
265265

266266
if vim.tbl_contains({ 'trimmed', 'padded', 'raw' }, self.table.cell) then
267267
for _, pipe in ipairs(row.pipes) do
268-
self.marks:add_over('table_border', pipe, {
268+
self.marks:over('table_border', pipe, {
269269
virt_text = { { border[10], highlight } },
270270
virt_text_pos = 'overlay',
271271
})
@@ -294,7 +294,7 @@ function Render:row(row)
294294
end
295295
end
296296
elseif self.table.cell == 'overlay' then
297-
self.marks:add_over('table_border', row.node, {
297+
self.marks:over('table_border', row.node, {
298298
virt_text = { { row.node.text:gsub('|', border[10]), highlight } },
299299
virt_text_pos = 'overlay',
300300
})
@@ -380,7 +380,7 @@ function Render:full()
380380

381381
local line = self:append({}, spaces)
382382
self:append(line, text, highlight)
383-
self.marks:add(false, node.start_row, node.start_col, {
383+
self.marks:start(false, node, {
384384
virt_lines = { vim.list_extend(self:indent_line(true), line) },
385385
virt_lines_above = above,
386386
})

Diff for: tests/ad_hoc_spec.lua

+8-8
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ describe('ad hoc', function()
1111
})
1212
local marks = util.marks()
1313
:add(0, nil, 0, nil, util.heading.sign(2))
14-
:add(0, 0, 0, 0, {
14+
:add(0, nil, 0, nil, {
1515
virt_text = { { '󰲣 ', 'RmH2:RmH2Bg' } },
1616
virt_text_pos = 'inline',
1717
})
1818
:add(0, 1, 0, 0, util.heading.bg(2))
19-
:add(1, 1, 0, 0, {
19+
:add(1, nil, 0, nil, {
2020
virt_text = { { ' ', 'RmH2:RmH2Bg' } },
2121
virt_text_pos = 'inline',
2222
})
2323
:add(1, 2, 0, 0, util.heading.bg(2))
24-
:add(2, 2, 0, 0, {
24+
:add(2, nil, 0, nil, {
2525
virt_text = { { ' ', 'RmH2:RmH2Bg' } },
2626
virt_text_pos = 'inline',
2727
})
@@ -46,7 +46,7 @@ describe('ad hoc', function()
4646
local marks = util.marks()
4747
:add(0, 0, 0, 2, util.bullet(1))
4848
:add(0, 0, 2, 3, util.conceal())
49-
:add(0, 0, 3, 14, util.link('wiki'))
49+
:add(0, nil, 3, nil, util.link('wiki'))
5050
:add(0, 0, 14, 15, util.conceal())
5151
util.assert_view(marks, { '● 󱗖 Basic One Then normal text' })
5252
end)
@@ -56,7 +56,7 @@ describe('ad hoc', function()
5656
local marks = util.marks()
5757
:add(0, 0, 0, 2, util.bullet(1))
5858
:add(0, 0, 2, 3, util.conceal())
59-
:add(0, 0, 3, 24, util.link('wiki'))
59+
:add(0, nil, 3, nil, util.link('wiki'))
6060
:add(0, 0, 4, 13, util.conceal())
6161
:add(0, 0, 24, 25, util.conceal())
6262
util.assert_view(marks, { '● 󱗖 With Alias Something important' })
@@ -66,8 +66,8 @@ describe('ad hoc', function()
6666
util.setup.text({ '- <[email protected]> Email' })
6767
local marks = util.marks()
6868
:add(0, 0, 0, 2, util.bullet(1))
69+
:add(0, nil, 2, nil, util.link('email'))
6970
:add(0, 0, 2, 3, util.conceal())
70-
:add(0, 0, 2, 20, util.link('email'))
7171
:add(0, 0, 2, 20, util.highlight('link'))
7272
:add(0, 0, 19, 20, util.conceal())
7373
util.assert_view(marks, { '● 󰀓 [email protected] Email' })
@@ -77,8 +77,8 @@ describe('ad hoc', function()
7777
util.setup.text({ '- <http://www.github.com/> Bare URL' })
7878
local marks = util.marks()
7979
:add(0, 0, 0, 2, util.bullet(1))
80+
:add(0, nil, 2, nil, util.link('git'))
8081
:add(0, 0, 2, 3, util.conceal())
81-
:add(0, 0, 2, 26, util.link('git'))
8282
:add(0, 0, 2, 26, util.highlight('link'))
8383
:add(0, 0, 25, 26, util.conceal())
8484
util.assert_view(marks, { '● 󰊤 http://www.github.com/ Bare URL' })
@@ -88,7 +88,7 @@ describe('ad hoc', function()
8888
util.setup.text({ '- [Youtube Link](https://www.youtube.com/watch?v=dQw4w9WgXcQ)' })
8989
local marks = util.marks()
9090
marks:add(0, 0, 0, 2, util.bullet(1))
91-
marks:add(0, 0, 2, 61, util.link('youtube'))
91+
marks:add(0, nil, 2, nil, util.link('youtube'))
9292
util.assert_view(marks, { '● 󰗃 Youtube Link' })
9393
end)
9494

Diff for: tests/heading_code_spec.lua

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe('heading_code.md', function()
3333
:add(row:get(), row:get(), 0, 6, util.heading.icon(6))
3434
:add(row:get(), row:inc(), 0, 0, util.heading.bg(6))
3535

36-
marks:add(row:inc(), row:get(), 0, 21, util.link('image'))
36+
marks:add(row:inc(), nil, 0, nil, util.link('image'))
3737

3838
marks:add(row:inc(2), nil, 0, nil, util.code.sign('python'))
3939
marks:add(row:get(), nil, 3, nil, util.code.icon('python'))

0 commit comments

Comments
 (0)