package parser import ( "github.com/yuin/goldmark/ast" "github.com/yuin/goldmark/text" "github.com/yuin/goldmark/util" ) type autoLinkParser struct { } var defaultAutoLinkParser = &autoLinkParser{} // NewAutoLinkParser returns a new InlineParser that parses autolinks // surrounded by '<' and '>' . func NewAutoLinkParser() InlineParser { return defaultAutoLinkParser } func (s *autoLinkParser) Trigger() []byte { return []byte{'<'} } func (s *autoLinkParser) Parse(parent ast.Node, block text.Reader, pc Context) ast.Node { line, segment := block.PeekLine() stop := util.FindEmailIndex(line[1:]) typ := ast.AutoLinkType(ast.AutoLinkEmail) if stop < 0 { stop = util.FindURLIndex(line[1:]) typ = ast.AutoLinkURL } if stop < 0 { return nil } stop++ if stop >= len(line) || line[stop] != '>' { return nil } value := ast.NewTextSegment(text.NewSegment(segment.Start+1, segment.Start+stop)) block.Advance(stop + 1) return ast.NewAutoLink(typ, value) }