package report import ( "bytes" "strings" "github.com/olekukonko/tablewriter" ) // MarkdownTable returns a text-formatted table with caption, optionally as valid Markdown, // so the output can be pasted into the docs. func MarkdownTable(rows [][]string, cols []string, opt Options) string { // Escape Markdown. if opt.Valid { for i := range rows { for j := range rows[i] { if strings.ContainsRune(rows[i][j], '|') { rows[i][j] = strings.ReplaceAll(rows[i][j], "|", "\\|") } } } } buf := &bytes.Buffer{} // Set Borders. borders := tablewriter.Border{ Left: true, Right: true, Top: !opt.Valid, Bottom: !opt.Valid, } // RenderFormat. table := tablewriter.NewWriter(buf) // Set Caption. if opt.Caption != "" { table.SetCaption(true, opt.Caption) } table.SetAutoWrapText(!opt.Valid && !opt.NoWrap) table.SetAutoFormatHeaders(false) table.SetHeader(cols) table.SetBorders(borders) table.SetCenterSeparator("|") table.AppendBulk(rows) table.Render() return buf.String() }