package table import ( "html" "strings" ) const ( // DefaultHTMLCSSClass stores the css-class to use when none-provided via // SetHTMLCSSClass(cssClass string). DefaultHTMLCSSClass = "go-pretty-table" ) // RenderHTML renders the Table in HTML format. Example: // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
#First NameLast NameSalary 
1AryaStark3000 
20JonSnow2000You know nothing, Jon Snow!
300TyrionLannister5000 
  Total10000 
func (t *Table) RenderHTML() string { t.initForRender() var out strings.Builder if t.numColumns > 0 { out.WriteString("\n") t.htmlRenderRows(&out, t.rowsHeader, renderHint{isHeaderRow: true}) t.htmlRenderRows(&out, t.rows, renderHint{}) t.htmlRenderRows(&out, t.rowsFooter, renderHint{isFooterRow: true}) out.WriteString("
") } return t.render(&out) } func (t *Table) htmlRenderRow(out *strings.Builder, row rowStr, hint renderHint) { out.WriteString(" \n") for colIdx := 0; colIdx < t.numColumns; colIdx++ { var colStr string if colIdx < len(row) { colStr = row[colIdx] } // header uses "th" instead of "td" colTagName := "td" if hint.isHeaderRow { colTagName = "th" } // determine the HTML "align"/"valign" property values align := t.getAlign(colIdx, hint).HTMLProperty() vAlign := t.getVAlign(colIdx, hint).HTMLProperty() // determine the HTML "class" property values for the colors class := t.getColumnColors(colIdx, hint).HTMLProperty() // write the row out.WriteString(" <") out.WriteString(colTagName) if align != "" { out.WriteRune(' ') out.WriteString(align) } if class != "" { out.WriteRune(' ') out.WriteString(class) } if vAlign != "" { out.WriteRune(' ') out.WriteString(vAlign) } out.WriteString(">") if len(colStr) > 0 { out.WriteString(strings.Replace(html.EscapeString(colStr), "\n", "
", -1)) } else { out.WriteString(" ") } out.WriteString("\n") } out.WriteString(" \n") } func (t *Table) htmlRenderRows(out *strings.Builder, rows []rowStr, hint renderHint) { if len(rows) > 0 { // determine that tag to use based on the type of the row rowsTag := "tbody" if hint.isHeaderRow { rowsTag = "thead" } else if hint.isFooterRow { rowsTag = "tfoot" } var renderedTagOpen, shouldRenderTagClose bool for idx, row := range rows { hint.rowNumber = idx + 1 if len(row) > 0 { if !renderedTagOpen { out.WriteString(" <") out.WriteString(rowsTag) out.WriteString(">\n") renderedTagOpen = true } t.htmlRenderRow(out, row, hint) shouldRenderTagClose = true } } if shouldRenderTagClose { out.WriteString(" \n") } } }