Skip to content

Commit 862b7df

Browse files
refactor: use abstract class for renderer
1 parent 5ff9a59 commit 862b7df

File tree

10 files changed

+55
-38
lines changed

10 files changed

+55
-38
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
- email link icon [74502e5](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/74502e5d34efa68dde051bcc6bf28db9748922c7)
88
- deterministic custom link order [#146](https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/146)
99
[42dbd09](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/42dbd097d73d8c833f886f35ca3be2065973c628)
10+
- integrate treesitter injections: [#141](https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/141)
11+
[5ff9a59](https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/5ff9a598622422100280769147ad5feff411c6da)
1012

1113
### Bug Fixes
1214

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Plugin to improve viewing Markdown files in Neovim
3434
- Contained: runs entirely inside Neovim with no external windows
3535
- Configurable: all components, padding, icons, and colors can be modified
3636
- File type agnostic: can render `markdown` injected into any file
37+
- Injections: can directly manipulate treesitter to add logical `markdown` sections
3738
- Mode based rendering: changes between `rendered` and `raw` view based on mode
3839
- Anti-conceal: hides virtual text added by this plugin on cursor line
3940
- Window options: changes option values between `rendered` and `raw` view

doc/render-markdown.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Plugin to improve viewing Markdown files in Neovim
5555
- Contained: runs entirely inside Neovim with no external windows
5656
- Configurable: all components, padding, icons, and colors can be modified
5757
- File type agnostic: can render `markdown` injected into any file
58+
- Injections: can directly manipulate treesitter to add logical `markdown` sections
5859
- Mode based rendering: changes between `rendered` and `raw` view based on mode
5960
- Anti-conceal: hides virtual text added by this plugin on cursor line
6061
- Window options: changes option values between `rendered` and `raw` view

lua/render-markdown/handler/markdown.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function Handler:parse(root)
3535
self.context:query(root, state.markdown_query, function(capture, info)
3636
local renderer = self.renderers[capture]
3737
if renderer ~= nil then
38-
local render = renderer.new(self.marks, self.config, self.context, info)
38+
local render = renderer:new(self.marks, self.config, self.context, info)
3939
if render:setup() then
4040
render:render()
4141
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 M = {}
55

66
---@private
77
---@type string
8-
M.version = '6.2.9'
8+
M.version = '6.2.10'
99

1010
function M.check()
1111
vim.health.start('render-markdown.nvim [version]')

lua/render-markdown/render/util.lua renamed to lua/render-markdown/render/base.lua

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,57 @@ local str = require('render-markdown.core.str')
66
---@field protected config render.md.BufferConfig
77
---@field protected context render.md.Context
88
---@field protected info render.md.NodeInfo
9-
---@field new fun(marks: render.md.Marks, config: render.md.BufferConfig, context: render.md.Context, info: render.md.NodeInfo): render.md.Renderer
109
---@field setup fun(self: render.md.Renderer): boolean
1110
---@field render fun(self: render.md.Renderer)
11+
local Base = {}
12+
Base.__index = Base
1213

13-
---@class render.md.render.Util
14-
local M = {}
15-
16-
---@param config render.md.BufferConfig
1714
---@param marks render.md.Marks
15+
---@param config render.md.BufferConfig
16+
---@param context render.md.Context
17+
---@param info render.md.NodeInfo
18+
---@return render.md.Renderer
19+
function Base:new(marks, config, context, info)
20+
local instance = setmetatable({}, self)
21+
instance.marks = marks
22+
instance.config = config
23+
instance.context = context
24+
instance.info = info
25+
return instance
26+
end
27+
28+
---@protected
1829
---@param info render.md.NodeInfo
1930
---@param text? string
2031
---@param highlight string
21-
function M.sign(config, marks, info, text, highlight)
22-
if not config.sign.enabled or text == nil then
32+
function Base:sign(info, text, highlight)
33+
local sign = self.config.sign
34+
if not sign.enabled or text == nil then
2335
return
2436
end
25-
marks:add(false, info.start_row, info.start_col, {
37+
self.marks:add(false, info.start_row, info.start_col, {
2638
end_row = info.end_row,
2739
end_col = info.end_col,
2840
sign_text = text,
29-
sign_hl_group = colors.combine(highlight, config.sign.highlight),
41+
sign_hl_group = colors.combine(highlight, sign.highlight),
3042
})
3143
end
3244

33-
---@param config render.md.BufferConfig
34-
---@param info render.md.NodeInfo
45+
---@protected
3546
---@param line { [1]: string, [2]: string }[]
3647
---@return { [1]: string, [2]: string }[]
37-
function M.indent_virt_line(config, info, line)
38-
if not config.indent.enabled then
48+
function Base:indent_virt_line(line)
49+
local indent = self.config.indent
50+
if not indent.enabled then
3951
return line
4052
end
41-
local level = info:level() - 1
53+
local level = self.info:level() - 1
4254
if level <= 0 then
4355
return line
4456
end
45-
local indent_line = { str.spaces(config.indent.per_level * level), 'Normal' }
57+
local indent_line = { str.spaces(indent.per_level * level), 'Normal' }
4658
table.insert(line, 1, indent_line)
4759
return line
4860
end
4961

50-
return M
62+
return Base

lua/render-markdown/render/code.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
local Base = require('render-markdown.render.base')
12
local colors = require('render-markdown.colors')
23
local icons = require('render-markdown.core.icons')
34
local str = require('render-markdown.core.str')
4-
local util = require('render-markdown.render.util')
55

66
---@class render.md.data.Code
77
---@field col integer
@@ -16,16 +16,16 @@ local util = require('render-markdown.render.util')
1616
---@class render.md.render.Code: render.md.Renderer
1717
---@field private code render.md.Code
1818
---@field private data render.md.data.Code
19-
local Render = {}
19+
local Render = setmetatable({}, Base)
2020
Render.__index = Render
2121

2222
---@param marks render.md.Marks
2323
---@param config render.md.BufferConfig
2424
---@param context render.md.Context
2525
---@param info render.md.NodeInfo
2626
---@return render.md.Renderer
27-
function Render.new(marks, config, context, info)
28-
return setmetatable({ marks = marks, config = config, context = context, info = info }, Render)
27+
function Render:new(marks, config, context, info)
28+
return Base.new(self, marks, config, context, info)
2929
end
3030

3131
---@return boolean
@@ -97,7 +97,7 @@ function Render:language_hint(add_background)
9797
return false
9898
end
9999
if self.code.sign then
100-
util.sign(self.config, self.marks, info, icon, icon_highlight)
100+
self:sign(info, icon, icon_highlight)
101101
end
102102
local highlight = { icon_highlight }
103103
if add_background then

lua/render-markdown/render/heading.lua

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
local Base = require('render-markdown.render.base')
12
local colors = require('render-markdown.colors')
23
local list = require('render-markdown.core.list')
34
local str = require('render-markdown.core.str')
4-
local util = require('render-markdown.render.util')
55

66
---@class render.md.data.Heading
77
---@field level integer
@@ -14,16 +14,16 @@ local util = require('render-markdown.render.util')
1414
---@class render.md.render.Heading: render.md.Renderer
1515
---@field private heading render.md.Heading
1616
---@field private data render.md.data.Heading
17-
local Render = {}
17+
local Render = setmetatable({}, Base)
1818
Render.__index = Render
1919

2020
---@param marks render.md.Marks
2121
---@param config render.md.BufferConfig
2222
---@param context render.md.Context
2323
---@param info render.md.NodeInfo
2424
---@return render.md.Renderer
25-
function Render.new(marks, config, context, info)
26-
return setmetatable({ marks = marks, config = config, context = context, info = info }, Render)
25+
function Render:new(marks, config, context, info)
26+
return Base.new(self, marks, config, context, info)
2727
end
2828

2929
---@return boolean
@@ -53,7 +53,7 @@ end
5353
function Render:render()
5454
local icon_width = self:start_icon()
5555
if self.heading.sign then
56-
util.sign(self.config, self.marks, self.info, self.data.sign, self.data.foreground)
56+
self:sign(self.info, self.data.sign, self.data.foreground)
5757
end
5858

5959
self.marks:add(true, self.info.start_row, 0, {
@@ -152,7 +152,7 @@ function Render:border(width)
152152
})
153153
else
154154
self.marks:add(false, self.info.start_row, 0, {
155-
virt_lines = { util.indent_virt_line(self.config, self.info, line_above) },
155+
virt_lines = { self:indent_virt_line(line_above) },
156156
virt_lines_above = true,
157157
})
158158
end
@@ -170,7 +170,7 @@ function Render:border(width)
170170
self.context.last_heading = self.info.end_row + 1
171171
else
172172
self.marks:add(false, self.info.end_row, 0, {
173-
virt_lines = { util.indent_virt_line(self.config, self.info, line_below) },
173+
virt_lines = { self:indent_virt_line(line_below) },
174174
})
175175
end
176176
end

lua/render-markdown/render/quote.lua

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
1+
local Base = require('render-markdown.render.base')
12
local component = require('render-markdown.core.component')
23
local logger = require('render-markdown.core.logger')
34
local state = require('render-markdown.state')
45

56
---@class render.md.render.Quote: render.md.Renderer
67
---@field private quote render.md.Quote
78
---@field private highlight string
8-
local Render = {}
9+
local Render = setmetatable({}, Base)
910
Render.__index = Render
1011

1112
---@param marks render.md.Marks
1213
---@param config render.md.BufferConfig
1314
---@param context render.md.Context
1415
---@param info render.md.NodeInfo
1516
---@return render.md.Renderer
16-
function Render.new(marks, config, context, info)
17-
return setmetatable({ marks = marks, config = config, context = context, info = info }, Render)
17+
function Render:new(marks, config, context, info)
18+
return Base.new(self, marks, config, context, info)
1819
end
1920

2021
---@return boolean

lua/render-markdown/render/table.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
local Base = require('render-markdown.render.base')
12
local NodeInfo = require('render-markdown.core.node_info')
23
local logger = require('render-markdown.core.logger')
34
local str = require('render-markdown.core.str')
4-
local util = require('render-markdown.render.util')
55

66
---@class render.md.table.Column
77
---@field row integer
@@ -30,16 +30,16 @@ local util = require('render-markdown.render.util')
3030
---@class render.md.render.Table: render.md.Renderer
3131
---@field private table render.md.PipeTable
3232
---@field private data render.md.data.Table
33-
local Render = {}
33+
local Render = setmetatable({}, Base)
3434
Render.__index = Render
3535

3636
---@param marks render.md.Marks
3737
---@param config render.md.BufferConfig
3838
---@param context render.md.Context
3939
---@param info render.md.NodeInfo
4040
---@return render.md.Renderer
41-
function Render.new(marks, config, context, info)
42-
return setmetatable({ marks = marks, config = config, context = context, info = info }, Render)
41+
function Render:new(marks, config, context, info)
42+
return Base.new(self, marks, config, context, info)
4343
end
4444

4545
---@return boolean
@@ -320,7 +320,7 @@ function Render:full()
320320
table.insert(line, { chars[1] .. table.concat(sections, chars[2]) .. chars[3], highlight })
321321
self.marks:add(false, info.start_row, info.start_col, {
322322
virt_lines_above = above,
323-
virt_lines = { util.indent_virt_line(self.config, self.info, line) },
323+
virt_lines = { self:indent_virt_line(line) },
324324
})
325325
end
326326

0 commit comments

Comments
 (0)