mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 12:52:25 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			979 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			979 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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)
 | |
| }
 |