480480--- @private
481481function 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 )
515544end
516545
517546--- @private
0 commit comments