Skip to content

Commit

Permalink
Closes #41
Browse files Browse the repository at this point in the history
  • Loading branch information
yuin committed Nov 29, 2019
1 parent 8549b83 commit 9f9f8f0
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 4 deletions.
48 changes: 45 additions & 3 deletions extension/linkify.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,53 @@ func (s *linkifyParser) CloseBlock(parent ast.Node, pc parser.Context) {
type linkify struct {
}

type linkifyASTTransformer struct {
}

var defaultLinkifyASTTransformer = &linkifyASTTransformer{}

// NewLinkifyASTTransformer returns a new parser.ASTTransformer that
// is related to AutoLink.
func NewLinkifyASTTransformer() parser.ASTTransformer {
return defaultLinkifyASTTransformer
}

func (a *linkifyASTTransformer) Transform(node *ast.Document, reader text.Reader, pc parser.Context) {
var autoLinks []*ast.AutoLink
_ = ast.Walk(node, func(n ast.Node, entering bool) (ast.WalkStatus, error) {
if entering {
if autoLink, ok := n.(*ast.AutoLink); ok {
autoLinks = append(autoLinks, autoLink)
}
}
return ast.WalkContinue, nil

})
for _, autoLink := range autoLinks {
nested := false
for p := autoLink.Parent(); p != nil; p = p.Parent() {
if _, ok := p.(*ast.Link); ok {
nested = true
break
}
}
if nested {
parent := autoLink.Parent()
parent.ReplaceChild(parent, autoLink, ast.NewString(autoLink.Label(reader.Source())))
}
}
}

// Linkify is an extension that allow you to parse text that seems like a URL.
var Linkify = &linkify{}

func (e *linkify) Extend(m goldmark.Markdown) {
m.Parser().AddOptions(parser.WithInlineParsers(
util.Prioritized(NewLinkifyParser(), 999),
))
m.Parser().AddOptions(
parser.WithInlineParsers(
util.Prioritized(NewLinkifyParser(), 999),
),
parser.WithASTTransformers(
util.Prioritized(NewLinkifyASTTransformer(), 999),
),
)
}
2 changes: 1 addition & 1 deletion extension/linkify_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"testing"

"github.com/yuin/goldmark"
"github.com/yuin/goldmark/testutil"
"github.com/yuin/goldmark/renderer/html"
"github.com/yuin/goldmark/testutil"
)

func TestLinkify(t *testing.T) {
Expand Down

0 comments on commit 9f9f8f0

Please sign in to comment.