Skip to content

Commit 9a09b1f

Browse files
committed
refactor(table): extract table line builders
1 parent f7a8472 commit 9a09b1f

1 file changed

Lines changed: 38 additions & 9 deletions

File tree

lua/render-markdown/render/markdown/table.lua

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,17 @@ end
480480
---@private
481481
function Render:delimiter()
482482
local delim = self.data.delim
483+
local line = self:delimiter_line(self:delimiter_text())
484+
line:pad(str.width(delim.text) - line:width())
485+
self.marks:over(self.config, 'table_border', delim, {
486+
virt_text = line:get(),
487+
virt_text_pos = 'overlay',
488+
})
489+
end
490+
491+
---@private
492+
---@return string
493+
function Render:delimiter_text()
483494
local border = self.config.border
484495
local indicator = self.config.alignment_indicator
485496

@@ -502,16 +513,34 @@ function Render:delimiter()
502513
return indicator .. icon:rep(col.width - 2) .. indicator
503514
end
504515
end)
505-
local delimiter = border[4] .. table.concat(parts, border[5]) .. border[6]
516+
return border[4] .. table.concat(parts, border[5]) .. border[6]
517+
end
506518

507-
local line = self:line()
508-
line:pad(str.spaces('start', delim.text))
509-
line:text(delimiter, self.config.head)
510-
line:pad(str.width(delim.text) - line:width())
511-
self.marks:over(self.config, 'table_border', delim, {
512-
virt_text = line:get(),
513-
virt_text_pos = 'overlay',
514-
})
519+
---@private
520+
---@param delimiter string
521+
---@return render.md.Line
522+
function Render:delimiter_line(delimiter)
523+
return self:line()
524+
:pad(str.spaces('start', self.data.delim.text))
525+
:text(delimiter, self.config.head)
526+
end
527+
528+
---@private
529+
---@param above boolean
530+
---@return render.md.Line
531+
function Render:border_line(above)
532+
local border = self.config.border
533+
local chars = above and { border[1], border[2], border[3] }
534+
or { border[7], border[8], border[9] }
535+
local icon = border[11]
536+
local parts = iter.list.map(self.data.cols, function(col)
537+
return icon:rep(col.width)
538+
end)
539+
local text = chars[1] .. table.concat(parts, chars[2]) .. chars[3]
540+
local highlight = above and self.config.head or self.config.row
541+
local first = self.data.rows[1].node
542+
local spaces = math.max(str.spaces('start', first.text), first.start_col)
543+
return self:line():pad(spaces):text(text, highlight)
515544
end
516545

517546
---@private

0 commit comments

Comments
 (0)