mirror of
https://github.com/russross/blackfriday.git
synced 2024-03-22 13:40:34 +08:00
Merge pull request #43 from microcosm-cc/master
Cells in THEAD > TR are now TH.
This commit is contained in:
commit
0c38d23ca2
19
block.go
19
block.go
|
@ -654,7 +654,7 @@ func (p *parser) table(out *bytes.Buffer, data []byte) int {
|
||||||
|
|
||||||
// include the newline in data sent to tableRow
|
// include the newline in data sent to tableRow
|
||||||
i++
|
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)
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
p.tableRow(out, header, columns)
|
p.tableRow(out, header, columns, true)
|
||||||
size = i + 1
|
size = i + 1
|
||||||
return
|
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
|
i, col := 0, 0
|
||||||
var rowWork bytes.Buffer
|
var rowWork bytes.Buffer
|
||||||
|
|
||||||
|
@ -806,12 +806,21 @@ func (p *parser) tableRow(out *bytes.Buffer, data []byte, columns []int) {
|
||||||
|
|
||||||
var cellWork bytes.Buffer
|
var cellWork bytes.Buffer
|
||||||
p.inline(&cellWork, data[cellStart:cellEnd])
|
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
|
// pad it out with empty columns to get the right number
|
||||||
for ; col < len(columns); col++ {
|
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
|
// silently ignore rows with too many cells
|
||||||
|
|
|
@ -649,46 +649,46 @@ func TestFencedCodeBlock(t *testing.T) {
|
||||||
func TestTable(t *testing.T) {
|
func TestTable(t *testing.T) {
|
||||||
var tests = []string{
|
var tests = []string{
|
||||||
"a | b\n---|---\nc | d\n",
|
"a | b\n---|---\nc | d\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td>a</td>\n<td>b</td>\n</tr>\n</thead>\n\n" +
|
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n</tr>\n</thead>\n\n" +
|
||||||
"<tbody>\n<tr>\n<td>c</td>\n<td>d</td>\n</tr>\n</tbody>\n</table>\n",
|
"<tbody>\n<tr>\n<td>c</td>\n<td>d</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"a | b\n---|--\nc | d\n",
|
"a | b\n---|--\nc | d\n",
|
||||||
"<p>a | b\n---|--\nc | d</p>\n",
|
"<p>a | b\n---|--\nc | d</p>\n",
|
||||||
|
|
||||||
"|a|b|c|d|\n|----|----|----|---|\n|e|f|g|h|\n",
|
"|a|b|c|d|\n|----|----|----|---|\n|e|f|g|h|\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td>a</td>\n<td>b</td>\n<td>c</td>\n<td>d</td>\n</tr>\n</thead>\n\n" +
|
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n<th>c</th>\n<th>d</th>\n</tr>\n</thead>\n\n" +
|
||||||
"<tbody>\n<tr>\n<td>e</td>\n<td>f</td>\n<td>g</td>\n<td>h</td>\n</tr>\n</tbody>\n</table>\n",
|
"<tbody>\n<tr>\n<td>e</td>\n<td>f</td>\n<td>g</td>\n<td>h</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"*a*|__b__|[c](C)|d\n---|---|---|---\ne|f|g|h\n",
|
"*a*|__b__|[c](C)|d\n---|---|---|---\ne|f|g|h\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td><em>a</em></td>\n<td><strong>b</strong></td>\n<td><a href=\"C\">c</a></td>\n<td>d</td>\n</tr>\n</thead>\n\n" +
|
"<table>\n<thead>\n<tr>\n<th><em>a</em></th>\n<th><strong>b</strong></th>\n<th><a href=\"C\">c</a></th>\n<th>d</th>\n</tr>\n</thead>\n\n" +
|
||||||
"<tbody>\n<tr>\n<td>e</td>\n<td>f</td>\n<td>g</td>\n<td>h</td>\n</tr>\n</tbody>\n</table>\n",
|
"<tbody>\n<tr>\n<td>e</td>\n<td>f</td>\n<td>g</td>\n<td>h</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"a|b|c\n---|---|---\nd|e|f\ng|h\ni|j|k|l|m\nn|o|p\n",
|
"a|b|c\n---|---|---\nd|e|f\ng|h\ni|j|k|l|m\nn|o|p\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td>a</td>\n<td>b</td>\n<td>c</td>\n</tr>\n</thead>\n\n" +
|
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n<th>c</th>\n</tr>\n</thead>\n\n" +
|
||||||
"<tbody>\n<tr>\n<td>d</td>\n<td>e</td>\n<td>f</td>\n</tr>\n\n" +
|
"<tbody>\n<tr>\n<td>d</td>\n<td>e</td>\n<td>f</td>\n</tr>\n\n" +
|
||||||
"<tr>\n<td>g</td>\n<td>h</td>\n<td></td>\n</tr>\n\n" +
|
"<tr>\n<td>g</td>\n<td>h</td>\n<td></td>\n</tr>\n\n" +
|
||||||
"<tr>\n<td>i</td>\n<td>j</td>\n<td>k</td>\n</tr>\n\n" +
|
"<tr>\n<td>i</td>\n<td>j</td>\n<td>k</td>\n</tr>\n\n" +
|
||||||
"<tr>\n<td>n</td>\n<td>o</td>\n<td>p</td>\n</tr>\n</tbody>\n</table>\n",
|
"<tr>\n<td>n</td>\n<td>o</td>\n<td>p</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"a|b|c\n---|---|---\n*d*|__e__|f\n",
|
"a|b|c\n---|---|---\n*d*|__e__|f\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td>a</td>\n<td>b</td>\n<td>c</td>\n</tr>\n</thead>\n\n" +
|
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n<th>c</th>\n</tr>\n</thead>\n\n" +
|
||||||
"<tbody>\n<tr>\n<td><em>d</em></td>\n<td><strong>e</strong></td>\n<td>f</td>\n</tr>\n</tbody>\n</table>\n",
|
"<tbody>\n<tr>\n<td><em>d</em></td>\n<td><strong>e</strong></td>\n<td>f</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"a|b|c|d\n:--|--:|:-:|---\ne|f|g|h\n",
|
"a|b|c|d\n:--|--:|:-:|---\ne|f|g|h\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td align=\"left\">a</td>\n<td align=\"right\">b</td>\n" +
|
"<table>\n<thead>\n<tr>\n<th align=\"left\">a</th>\n<th align=\"right\">b</th>\n" +
|
||||||
"<td align=\"center\">c</td>\n<td>d</td>\n</tr>\n</thead>\n\n" +
|
"<th align=\"center\">c</th>\n<th>d</th>\n</tr>\n</thead>\n\n" +
|
||||||
"<tbody>\n<tr>\n<td align=\"left\">e</td>\n<td align=\"right\">f</td>\n" +
|
"<tbody>\n<tr>\n<td align=\"left\">e</td>\n<td align=\"right\">f</td>\n" +
|
||||||
"<td align=\"center\">g</td>\n<td>h</td>\n</tr>\n</tbody>\n</table>\n",
|
"<td align=\"center\">g</td>\n<td>h</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"a|b|c\n---|---|---\n",
|
"a|b|c\n---|---|---\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td>a</td>\n<td>b</td>\n<td>c</td>\n</tr>\n</thead>\n\n<tbody>\n</tbody>\n</table>\n",
|
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n<th>c</th>\n</tr>\n</thead>\n\n<tbody>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"a| b|c | d | e\n---|---|---|---|---\nf| g|h | i |j\n",
|
"a| b|c | d | e\n---|---|---|---|---\nf| g|h | i |j\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td>a</td>\n<td>b</td>\n<td>c</td>\n<td>d</td>\n<td>e</td>\n</tr>\n</thead>\n\n" +
|
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b</th>\n<th>c</th>\n<th>d</th>\n<th>e</th>\n</tr>\n</thead>\n\n" +
|
||||||
"<tbody>\n<tr>\n<td>f</td>\n<td>g</td>\n<td>h</td>\n<td>i</td>\n<td>j</td>\n</tr>\n</tbody>\n</table>\n",
|
"<tbody>\n<tr>\n<td>f</td>\n<td>g</td>\n<td>h</td>\n<td>i</td>\n<td>j</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
|
|
||||||
"a|b\\|c|d\n---|---|---\nf|g\\|h|i\n",
|
"a|b\\|c|d\n---|---|---\nf|g\\|h|i\n",
|
||||||
"<table>\n<thead>\n<tr>\n<td>a</td>\n<td>b|c</td>\n<td>d</td>\n</tr>\n</thead>\n\n<tbody>\n<tr>\n<td>f</td>\n<td>g|h</td>\n<td>i</td>\n</tr>\n</tbody>\n</table>\n",
|
"<table>\n<thead>\n<tr>\n<th>a</th>\n<th>b|c</th>\n<th>d</th>\n</tr>\n</thead>\n\n<tbody>\n<tr>\n<td>f</td>\n<td>g|h</td>\n<td>i</td>\n</tr>\n</tbody>\n</table>\n",
|
||||||
}
|
}
|
||||||
doTestsBlock(t, tests, EXTENSION_TABLES)
|
doTestsBlock(t, tests, EXTENSION_TABLES)
|
||||||
}
|
}
|
||||||
|
|
17
html.go
17
html.go
|
@ -305,6 +305,23 @@ func (options *Html) TableRow(out *bytes.Buffer, text []byte) {
|
||||||
out.WriteString("\n</tr>\n")
|
out.WriteString("\n</tr>\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (options *Html) TableHeaderCell(out *bytes.Buffer, text []byte, align int) {
|
||||||
|
doubleSpace(out)
|
||||||
|
switch align {
|
||||||
|
case TABLE_ALIGNMENT_LEFT:
|
||||||
|
out.WriteString("<th align=\"left\">")
|
||||||
|
case TABLE_ALIGNMENT_RIGHT:
|
||||||
|
out.WriteString("<th align=\"right\">")
|
||||||
|
case TABLE_ALIGNMENT_CENTER:
|
||||||
|
out.WriteString("<th align=\"center\">")
|
||||||
|
default:
|
||||||
|
out.WriteString("<th>")
|
||||||
|
}
|
||||||
|
|
||||||
|
out.Write(text)
|
||||||
|
out.WriteString("</th>")
|
||||||
|
}
|
||||||
|
|
||||||
func (options *Html) TableCell(out *bytes.Buffer, text []byte, align int) {
|
func (options *Html) TableCell(out *bytes.Buffer, text []byte, align int) {
|
||||||
doubleSpace(out)
|
doubleSpace(out)
|
||||||
switch align {
|
switch align {
|
||||||
|
|
7
latex.go
7
latex.go
|
@ -151,6 +151,13 @@ func (options *Latex) TableRow(out *bytes.Buffer, text []byte) {
|
||||||
out.Write(text)
|
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) {
|
func (options *Latex) TableCell(out *bytes.Buffer, text []byte, align int) {
|
||||||
if out.Len() > 0 {
|
if out.Len() > 0 {
|
||||||
out.WriteString(" & ")
|
out.WriteString(" & ")
|
||||||
|
|
|
@ -140,6 +140,7 @@ type Renderer interface {
|
||||||
Paragraph(out *bytes.Buffer, text func() bool)
|
Paragraph(out *bytes.Buffer, text func() bool)
|
||||||
Table(out *bytes.Buffer, header []byte, body []byte, columnData []int)
|
Table(out *bytes.Buffer, header []byte, body []byte, columnData []int)
|
||||||
TableRow(out *bytes.Buffer, text []byte)
|
TableRow(out *bytes.Buffer, text []byte)
|
||||||
|
TableHeaderCell(out *bytes.Buffer, text []byte, flags int)
|
||||||
TableCell(out *bytes.Buffer, text []byte, flags int)
|
TableCell(out *bytes.Buffer, text []byte, flags int)
|
||||||
Footnotes(out *bytes.Buffer, text func() bool)
|
Footnotes(out *bytes.Buffer, text func() bool)
|
||||||
FootnoteItem(out *bytes.Buffer, name, text []byte, flags int)
|
FootnoteItem(out *bytes.Buffer, name, text []byte, flags int)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user