22package markdown
33
44import (
5+ "errors"
56 "fmt"
67 "io"
78 "strings"
89
910 "github.com/nao1215/markdown/internal"
1011 "github.com/olekukonko/tablewriter"
12+ "github.com/olekukonko/tablewriter/renderer"
13+ "github.com/olekukonko/tablewriter/tw"
1114)
1215
1316// SyntaxHighlight is syntax highlight language.
@@ -345,15 +348,42 @@ func (m *Markdown) Table(t TableSet) *Markdown {
345348 }
346349
347350 buf := & strings.Builder {}
348- table := tablewriter .NewWriter (buf )
349- table .SetNewLine (internal .LineFeed ())
350- table .SetBorders (tablewriter.Border {Left : true , Top : false , Right : true , Bottom : false })
351- table .SetCenterSeparator ("|" )
352- table .SetHeader (t .Header )
353- for _ , v := range t .Rows {
354- table .Append (v )
351+ table := tablewriter .NewTable (
352+ buf ,
353+ tablewriter .WithRenderer (
354+ renderer .NewBlueprint (
355+ tw.Rendition {
356+ Symbols : tw .NewSymbolCustom ("Markdown" ).
357+ WithHeaderLeft ("|" ).
358+ WithHeaderRight ("|" ).
359+ WithColumn ("|" ).
360+ WithMidLeft ("|" ).
361+ WithMidRight ("|" ).
362+ WithCenter ("|" ),
363+ Borders : tw.Border {
364+ Left : tw .On ,
365+ Top : tw .Off ,
366+ Right : tw .On ,
367+ Bottom : tw .Off ,
368+ },
369+ },
370+ ),
371+ ),
372+ tablewriter .WithConfig (tablewriter.Config {
373+ Row : tw.CellConfig {
374+ Alignment : tw.CellAlignment {Global : tw .AlignNone },
375+ },
376+ }),
377+ )
378+ table .Header (t .Header )
379+ if err := table .Bulk (t .Rows ); err != nil {
380+ m .err = errors .Join (m .err , fmt .Errorf ("failed to add rows to table: %w" , err ))
381+ return m
382+ }
383+ if err := table .Render (); err != nil {
384+ m .err = errors .Join (m .err , fmt .Errorf ("failed to render table: %w" , err ))
385+ return m
355386 }
356- table .Render ()
357387
358388 m .body = append (m .body , buf .String ())
359389 return m
@@ -379,19 +409,69 @@ func (m *Markdown) CustomTable(t TableSet, options TableOptions) *Markdown {
379409 }
380410
381411 buf := & strings.Builder {}
382- table := tablewriter .NewWriter (buf )
383- table .SetNewLine (internal .LineFeed ())
384- table .SetBorders (tablewriter.Border {Left : true , Top : false , Right : true , Bottom : false })
385- table .SetCenterSeparator ("|" )
386- table .SetAutoWrapText (options .AutoWrapText )
387- table .SetAutoFormatHeaders (options .AutoFormatHeaders )
388-
389- table .SetHeader (t .Header )
390- for _ , v := range t .Rows {
391- table .Append (v )
412+ table := tablewriter .NewTable (
413+ buf ,
414+ tablewriter .WithRenderer (
415+ renderer .NewBlueprint (
416+ tw.Rendition {
417+ Symbols : tw .NewSymbolCustom ("Markdown" ).
418+ WithHeaderLeft ("|" ).
419+ WithHeaderRight ("|" ).
420+ WithColumn ("|" ).
421+ WithMidLeft ("|" ).
422+ WithMidRight ("|" ).
423+ WithCenter ("|" ),
424+ Borders : tw.Border {
425+ Left : tw .On ,
426+ Top : tw .Off ,
427+ Right : tw .On ,
428+ Bottom : tw .Off ,
429+ },
430+ },
431+ ),
432+ ),
433+ tablewriter .WithConfig (tablewriter.Config {
434+ Header : tw.CellConfig {
435+ Formatting : tw.CellFormatting {
436+ AutoFormat : func () tw.State {
437+ if options .AutoFormatHeaders {
438+ return tw .Success
439+ }
440+ return tw .Fail
441+ }(),
442+ },
443+ },
444+ Row : tw.CellConfig {
445+ Formatting : tw.CellFormatting {
446+ AutoWrap : func () int {
447+ if options .AutoWrapText {
448+ return tw .WrapNormal
449+ }
450+ return tw .WrapNone
451+ }(),
452+ AutoFormat : func () tw.State {
453+ if options .AutoFormatHeaders {
454+ return tw .Success
455+ }
456+ return tw .Fail
457+ }(),
458+ },
459+
460+ Alignment : tw.CellAlignment {Global : tw .AlignNone },
461+ },
462+ }),
463+ )
464+
465+ table .Header (t .Header )
466+ if err := table .Bulk (t .Rows ); err != nil {
467+ m .err = errors .Join (m .err , fmt .Errorf ("failed to add rows to table: %w" , err ))
468+ return m
392469 }
393470 // This is so if the user wants to change the table settings they can
394- table .Render ()
471+ if err := table .Render (); err != nil {
472+ m .err = errors .Join (m .err , fmt .Errorf ("failed to render table: %w" , err ))
473+ return m
474+ }
395475
396476 m .body = append (m .body , buf .String ())
397477 return m
0 commit comments