diff --git a/mast/reference.go b/mast/reference.go new file mode 100644 index 0000000..f661775 --- /dev/null +++ b/mast/reference.go @@ -0,0 +1,8 @@ +package mast + +import "github.com/gomarkdown/markdown/ast" + +// ReferenceBlock represents markdown reference node. +type ReferenceBlock struct { + ast.Leaf +} diff --git a/mparser/bibliography.go b/mparser/bibliography.go index ef3dc8a..7ab118f 100644 --- a/mparser/bibliography.go +++ b/mparser/bibliography.go @@ -124,12 +124,12 @@ func ReferenceHook(data []byte) (ast.Node, []byte, int) { return nil, nil, 0 } - node := &ast.HTMLBlock{} + node := &mast.ReferenceBlock{} node.Literal = fmtReference(ref) return node, nil, len(ref) } -// IfReference returns wether data contains a reference. +// IsReference returns wether data contains a reference. func IsReference(data []byte) ([]byte, bool) { if !bytes.HasPrefix(data, []byte("`) io.WriteString(w, IndexReturnLinkContents) return ast.GoToNext, true + case *mast.ReferenceBlock: + // ignore these for HTML output as this is XML and not used at all. + return ast.GoToNext, true } return ast.GoToNext, false } diff --git a/render/xml/renderer.go b/render/xml/renderer.go index b02a060..0c17cfc 100644 --- a/render/xml/renderer.go +++ b/render/xml/renderer.go @@ -636,6 +636,10 @@ func (r *Renderer) RenderNode(w io.Writer, node ast.Node, entering bool) ast.Wal r.bibliographyItem(w, node) case *mast.DocumentIndex, *mast.IndexLetter, *mast.IndexItem, *mast.IndexSubItem, *mast.IndexLink: // generated by xml2rfc, do nothing. + case *mast.ReferenceBlock: + r.out(w, node.Literal) + r.cr(w) + r.cr(w) case *ast.Text: r.text(w, node) case *ast.Softbreak: @@ -667,7 +671,7 @@ func (r *Renderer) RenderNode(w io.Writer, node ast.Node, entering bool) ast.Wal case *ast.HTMLSpan: r.htmlSpan(w, node) case *ast.HTMLBlock: - // discard; we use these only for . + r.out(w, node.Literal) case *ast.List: r.list(w, node, entering) case *ast.ListItem: diff --git a/render/xml2/renderer.go b/render/xml2/renderer.go index c106a83..2d38a61 100644 --- a/render/xml2/renderer.go +++ b/render/xml2/renderer.go @@ -707,6 +707,10 @@ func (r *Renderer) RenderNode(w io.Writer, node ast.Node, entering bool) ast.Wal r.bibliographyItem(w, node) case *mast.DocumentIndex, *mast.IndexLetter, *mast.IndexItem, *mast.IndexSubItem, *mast.IndexLink: // generated by xml2rfc, do nothing. + case *mast.ReferenceBlock: + r.out(w, node.Literal) + r.cr(w) + r.cr(w) case *ast.Text: r.text(w, node) case *ast.Softbreak: @@ -763,7 +767,7 @@ func (r *Renderer) RenderNode(w io.Writer, node ast.Node, entering bool) ast.Wal case *ast.HTMLSpan: r.htmlSpan(w, node) // only html comments are allowed. case *ast.HTMLBlock: - // discard; we use these only for . + r.out(w, node.Literal) case *ast.List: r.list(w, node, entering) case *ast.ListItem: