diff --git a/internal/mdplain/renderer.go b/internal/mdplain/renderer.go index bd6c9e11..a1d238c0 100644 --- a/internal/mdplain/renderer.go +++ b/internal/mdplain/renderer.go @@ -56,11 +56,9 @@ func (r *TextRender) Render(w io.Writer, source []byte, n ast.Node) error { // we want to write the text of the // link before the url child := node.FirstChild() - if child != nil { - t, ok := child.(*ast.Text) - if ok { - out.Write(t.Value(source)) - } + err := r.renderText(source, out, child) + if err != nil { + return ast.WalkStop, err } if !isRelativeLink(node.Destination) { @@ -91,6 +89,32 @@ func (r *TextRender) Render(w io.Writer, source []byte, n ast.Node) error { return nil } +// renderText writes any encountered ast.Text node value to the buffer, +// ignoring all other node types. This is intended to be a rough replacement +// of the deprecated (*BaseNode).Text() method in the yuin/goldmark library. +func (r *TextRender) renderText(source []byte, out *bytes.Buffer, n ast.Node) error { + err := ast.Walk(n, func(node ast.Node, entering bool) (ast.WalkStatus, error) { + if !entering || node.Type() == ast.TypeDocument { + return ast.WalkContinue, nil + } + + switch node := node.(type) { + case *ast.Text: + out.Write(node.Value(source)) + if node.SoftLineBreak() { + doubleSpace(out) + } + return ast.WalkContinue, nil + + } + return ast.WalkContinue, nil + }) + if err != nil { + return err + } + return nil +} + func (r *TextRender) AddOptions(...renderer.Option) {} func doubleSpace(out *bytes.Buffer) { diff --git a/internal/mdplain/testdata/markdown.md b/internal/mdplain/testdata/markdown.md index 952e82ee..6913641c 100644 --- a/internal/mdplain/testdata/markdown.md +++ b/internal/mdplain/testdata/markdown.md @@ -52,6 +52,8 @@ These are the elements outlined in John Gruber’s original design document. All Plain URL: https://www.markdownguide.org +[`Code Link`](https://www.markdownguide.org) + ### Image ![alt text](https://www.markdownguide.org/assets/images/tux.png) diff --git a/internal/mdplain/testdata/mdplain.txt b/internal/mdplain/testdata/mdplain.txt index d7dcbee5..da8f4958 100644 --- a/internal/mdplain/testdata/mdplain.txt +++ b/internal/mdplain/testdata/mdplain.txt @@ -24,6 +24,7 @@ Link Markdown Guide https://www.markdownguide.org Relative Link Plain URL: https://www.markdownguide.org +Code Link https://www.markdownguide.org Image Extended Syntax