From 6e6572e9138c3e0ed162b4a8a7382f6c367ff2bc Mon Sep 17 00:00:00 2001 From: David Kitchen Date: Wed, 16 Oct 2013 11:36:33 +0100 Subject: [PATCH] Added th to table headers so that styling with things like Twitter Bootstrap and typeset.css work as expected. Cells in headers should always be TH unless they are advisory cells within headers in which case TD is acceptable (but being Markdown a user with such needs could just enter HTML for this) --- block.go | 19 ++++++++++++++----- html.go | 17 +++++++++++++++++ latex.go | 7 +++++++ markdown.go | 1 + 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/block.go b/block.go index a4ab930..8681e63 100644 --- a/block.go +++ b/block.go @@ -654,7 +654,7 @@ func (p *parser) table(out *bytes.Buffer, data []byte) int { // include the newline in data sent to tableRow i++ - p.tableRow(&body, data[rowStart:i], columns) + p.tableRow(&body, data[rowStart:i], columns, false) } p.r.Table(out, header.Bytes(), body.Bytes(), columns) @@ -771,12 +771,12 @@ func (p *parser) tableHeader(out *bytes.Buffer, data []byte) (size int, columns return } - p.tableRow(out, header, columns) + p.tableRow(out, header, columns, true) size = i + 1 return } -func (p *parser) tableRow(out *bytes.Buffer, data []byte, columns []int) { +func (p *parser) tableRow(out *bytes.Buffer, data []byte, columns []int, header bool) { i, col := 0, 0 var rowWork bytes.Buffer @@ -806,12 +806,21 @@ func (p *parser) tableRow(out *bytes.Buffer, data []byte, columns []int) { var cellWork bytes.Buffer p.inline(&cellWork, data[cellStart:cellEnd]) - p.r.TableCell(&rowWork, cellWork.Bytes(), columns[col]) + + if header { + p.r.TableHeaderCell(&rowWork, cellWork.Bytes(), columns[col]) + } else { + p.r.TableCell(&rowWork, cellWork.Bytes(), columns[col]) + } } // pad it out with empty columns to get the right number for ; col < len(columns); col++ { - p.r.TableCell(&rowWork, nil, columns[col]) + if header { + p.r.TableHeaderCell(&rowWork, nil, columns[col]) + } else { + p.r.TableCell(&rowWork, nil, columns[col]) + } } // silently ignore rows with too many cells diff --git a/html.go b/html.go index e499cb3..9c90c76 100644 --- a/html.go +++ b/html.go @@ -305,6 +305,23 @@ func (options *Html) TableRow(out *bytes.Buffer, text []byte) { out.WriteString("\n\n") } +func (options *Html) TableHeaderCell(out *bytes.Buffer, text []byte, align int) { + doubleSpace(out) + switch align { + case TABLE_ALIGNMENT_LEFT: + out.WriteString("") + case TABLE_ALIGNMENT_RIGHT: + out.WriteString("") + case TABLE_ALIGNMENT_CENTER: + out.WriteString("") + default: + out.WriteString("") + } + + out.Write(text) + out.WriteString("") +} + func (options *Html) TableCell(out *bytes.Buffer, text []byte, align int) { doubleSpace(out) switch align { diff --git a/latex.go b/latex.go index 1a8fa0a..ee65309 100644 --- a/latex.go +++ b/latex.go @@ -151,6 +151,13 @@ func (options *Latex) TableRow(out *bytes.Buffer, text []byte) { out.Write(text) } +func (options *Latex) TableHeaderCell(out *bytes.Buffer, text []byte, align int) { + if out.Len() > 0 { + out.WriteString(" & ") + } + out.Write(text) +} + func (options *Latex) TableCell(out *bytes.Buffer, text []byte, align int) { if out.Len() > 0 { out.WriteString(" & ") diff --git a/markdown.go b/markdown.go index 322300f..c869fd2 100644 --- a/markdown.go +++ b/markdown.go @@ -140,6 +140,7 @@ type Renderer interface { Paragraph(out *bytes.Buffer, text func() bool) Table(out *bytes.Buffer, header []byte, body []byte, columnData []int) TableRow(out *bytes.Buffer, text []byte) + TableHeaderCell(out *bytes.Buffer, text []byte, flags int) TableCell(out *bytes.Buffer, text []byte, flags int) Footnotes(out *bytes.Buffer, text func() bool) FootnoteItem(out *bytes.Buffer, name, text []byte, flags int)