diff --git a/html.go b/html.go index e75b1ee..4f6a4a4 100644 --- a/html.go +++ b/html.go @@ -132,85 +132,31 @@ func HtmlRenderer(flags HtmlFlags, title string, css string) Renderer { } type HtmlWriter struct { - output bytes.Buffer - captureBuff *bytes.Buffer - copyBuff *bytes.Buffer - dirty bool + output bytes.Buffer } func (w *HtmlWriter) Write(p []byte) (n int, err error) { - w.dirty = true - if w.copyBuff != nil { - w.copyBuff.Write(p) - } - if w.captureBuff != nil { - w.captureBuff.Write(p) - return - } return w.output.Write(p) } func (w *HtmlWriter) WriteString(s string) (n int, err error) { - w.dirty = true - if w.copyBuff != nil { - w.copyBuff.WriteString(s) - } - if w.captureBuff != nil { - w.captureBuff.WriteString(s) - return - } return w.output.WriteString(s) } func (w *HtmlWriter) WriteByte(b byte) error { - w.dirty = true - if w.copyBuff != nil { - w.copyBuff.WriteByte(b) - } - if w.captureBuff != nil { - return w.captureBuff.WriteByte(b) - } return w.output.WriteByte(b) } // Writes out a newline if the output is not pristine. Used at the beginning of // every rendering func func (w *HtmlWriter) Newline() { - if w.dirty { - w.WriteByte('\n') - } -} - -func (r *Html) CaptureWrites(processor func()) []byte { - var output bytes.Buffer - // preserve old captureBuff state for possible nested captures: - tmp := r.w.captureBuff - tmpd := r.w.dirty - r.w.captureBuff = &output - r.w.dirty = false - processor() - // restore: - r.w.captureBuff = tmp - r.w.dirty = tmpd - return output.Bytes() -} - -func (r *Html) CopyWrites(processor func()) []byte { - var output bytes.Buffer - r.w.copyBuff = &output - processor() - r.w.copyBuff = nil - return output.Bytes() + w.WriteByte('\n') } func (r *Html) Write(b []byte) (int, error) { return r.w.Write(b) } -func (r *Html) GetResult() []byte { - return r.w.output.Bytes() -} - func HtmlRendererWithParameters(flags HtmlFlags, title string, css string, renderParameters HtmlRendererParameters) Renderer { // configure the rendering engine @@ -780,9 +726,7 @@ func (r *Html) Smartypants(text []byte) { smrt := smartypantsData{false, false} // first do normal entity escaping - text = r.CaptureWrites(func() { - r.attrEscape(text) - }) + r.attrEscape(text) mark := 0 for i := 0; i < len(text); i++ { diff --git a/latex.go b/latex.go index abc7393..c65c7bc 100644 --- a/latex.go +++ b/latex.go @@ -38,36 +38,10 @@ func LatexRenderer(flags int) Renderer { } } -func (r *Latex) CaptureWrites(processor func()) []byte { - var output bytes.Buffer - // preserve old captureBuff state for possible nested captures: - tmp := r.w.captureBuff - tmpd := r.w.dirty - r.w.captureBuff = &output - r.w.dirty = false - processor() - // restore: - r.w.captureBuff = tmp - r.w.dirty = tmpd - return output.Bytes() -} - -func (r *Latex) CopyWrites(processor func()) []byte { - var output bytes.Buffer - r.w.copyBuff = &output - processor() - r.w.copyBuff = nil - return output.Bytes() -} - func (r *Latex) Write(b []byte) (int, error) { return r.w.Write(b) } -func (r *Latex) GetResult() []byte { - return r.w.output.Bytes() -} - func (r *Latex) GetFlags() HtmlFlags { return 0 } @@ -180,9 +154,7 @@ func (r *Latex) Table(header []byte, body []byte, columnData []int) { } func (r *Latex) TableRow(text []byte) { - if r.w.dirty { - r.w.WriteString(" \\\\\n") - } + r.w.WriteString(" \\\\\n") r.w.Write(text) } diff --git a/markdown.go b/markdown.go index 85c76bb..f964eee 100644 --- a/markdown.go +++ b/markdown.go @@ -202,10 +202,7 @@ type Renderer interface { DocumentFooter() GetFlags() HtmlFlags - CaptureWrites(processor func()) []byte - CopyWrites(processor func()) []byte Write(b []byte) (int, error) - GetResult() []byte Render(ast *Node) []byte } @@ -568,7 +565,7 @@ func firstPass(p *parser, input []byte) []byte { } // second pass: actual rendering -func secondPass(p *parser, input []byte) []byte { +func secondPass(p *parser, input []byte) { p.r.DocumentHeader() p.block(input) @@ -580,13 +577,9 @@ func secondPass(p *parser, input []byte) []byte { var buf bytes.Buffer if ref.hasBlock { flags |= ListItemContainsBlock - buf.Write(p.r.CaptureWrites(func() { - p.block(ref.title) - })) + p.block(ref.title) } else { - buf.Write(p.r.CaptureWrites(func() { - p.inline(ref.title) - })) + p.inline(ref.title) } p.r.FootnoteItem(ref.link, buf.Bytes(), flags) flags &^= ListItemBeginningOfList | ListItemContainsBlock @@ -599,8 +592,6 @@ func secondPass(p *parser, input []byte) []byte { if p.nesting != 0 { panic("Nesting level did not end at zero") } - - return p.r.GetResult() } //