bbcode - bbcodehtml/url.go
1 package bbcodehtml
2
3 import (
4 "fmt"
5 nurl "net/url"
6
7 "vimagination.zapto.org/bbcode"
8 )
9
10 const (
11 urlTag = "url"
12 urlOpen = "<a href=%q>"
13 )
14
15 var urlClose = []byte("</a>")
16
17 type url struct{}
18
19 func (url) Name() string {
20 return "url"
21 }
22
23 func (url) Handle(p *bbcode.Processor, attr string) {
24 if attr != "" {
25 u, err := nurl.Parse(attr)
26 if err == nil {
27 fmt.Fprintf(p, urlOpen, u)
28 p.Process(urlTag)
29 p.Write(urlClose)
30 } else {
31 p.Process(urlTag)
32 }
33 } else {
34 attr = p.GetContents(urlTag)
35 u, err := nurl.Parse(attr)
36 if err == nil {
37 fmt.Fprintf(p, urlOpen, u)
38 p.Print(attr)
39 p.Write(urlClose)
40 } else {
41 p.Print(attr)
42 }
43 }
44 }
45