diff --git a/README.md b/README.md index c5f42be..cbadd97 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ coverage: 100.0% of statements ## Benchmarks ``` -BenchmarkSmall-12 2585194 462.4 ns/op 248 B/op 5 allocs/op +BenchmarkSmall-12 2411152 489.1 ns/op 248 B/op 5 allocs/op ``` ## License diff --git a/Render.go b/Render.go index d13efe2..a9c7a49 100644 --- a/Render.go +++ b/Render.go @@ -11,10 +11,12 @@ var ( ) type renderer struct { - out strings.Builder - paragraphLevel int - quoteLevel int - listLevel int + out strings.Builder + paragraphLevel int + quoteLevel int + listLevel int + tableLevel int + tableHeaderWritten bool } // Render creates HTML from the supplied markdown text. @@ -104,6 +106,51 @@ func (r *renderer) processLine(line string) { r.writeText(line) r.out.WriteString("") return + + case '|': + r.closeParagraphs() + line = line[1:] + + if r.tableLevel == 0 { + r.out.WriteString("
") + r.writeText(content) + r.out.WriteString(" | ") + } else { + r.out.WriteString("") + r.writeText(content) + r.out.WriteString(" | ") + } + + line = line[pipe+1:] + column++ + } } if r.paragraphLevel == 0 { @@ -121,6 +168,7 @@ func (r *renderer) processLine(line string) { func (r *renderer) closeAll() { r.closeLists() r.closeParagraphs() + r.closeTables() } // closeParagraphs closes open paragraphs. @@ -141,6 +189,16 @@ func (r *renderer) closeLists() { r.listLevel = 0 } +// closeTables closes open tables. +func (r *renderer) closeTables() { + for range r.tableLevel { + r.out.WriteString("
---|
Head |
---|
Body |
1 | 2 |
---|---|
1 | 2 |
") assert.Equal(t, markdown.Render("> Line 1\n> Line 2"), "Line
")Line 1 Line 2