aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/yuin/goldmark/renderer/html/html.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/yuin/goldmark/renderer/html/html.go')
-rw-r--r--vendor/github.com/yuin/goldmark/renderer/html/html.go34
1 files changed, 21 insertions, 13 deletions
diff --git a/vendor/github.com/yuin/goldmark/renderer/html/html.go b/vendor/github.com/yuin/goldmark/renderer/html/html.go
index 903dc68..c0b72ce 100644
--- a/vendor/github.com/yuin/goldmark/renderer/html/html.go
+++ b/vendor/github.com/yuin/goldmark/renderer/html/html.go
@@ -34,7 +34,7 @@ func NewConfig() Config {
}
// SetOption implements renderer.NodeRenderer.SetOption.
-func (c *Config) SetOption(name renderer.OptionName, value interface{}) {
+func (c *Config) SetOption(name renderer.OptionName, value any) {
switch name {
case optHardWraps:
c.HardWraps = value.(bool)
@@ -273,6 +273,10 @@ func (r *Renderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
reg.Register(ast.KindParagraph, r.renderParagraph)
reg.Register(ast.KindTextBlock, r.renderTextBlock)
reg.Register(ast.KindThematicBreak, r.renderThematicBreak)
+ reg.Register(ast.KindLinkReferenceDefinition, func(
+ _ util.BufWriter, _ []byte, _ ast.Node, _ bool) (ast.WalkStatus, error) {
+ return ast.WalkSkipChildren, nil
+ })
// inlines
@@ -288,7 +292,7 @@ func (r *Renderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
func (r *Renderer) writeLines(w util.BufWriter, source []byte, n ast.Node) {
l := n.Lines().Len()
- for i := 0; i < l; i++ {
+ for i := range l {
line := n.Lines().At(i)
r.Writer.RawWrite(w, line.Value(source))
}
@@ -378,7 +382,7 @@ func (r *Renderer) renderHTMLBlock(
if entering {
if r.Unsafe {
l := n.Lines().Len()
- for i := 0; i < l; i++ {
+ for i := range l {
line := n.Lines().At(i)
r.Writer.SecureWrite(w, line.Value(source))
}
@@ -497,7 +501,7 @@ func (r *Renderer) renderThematicBreak(
}
// LinkAttributeFilter defines attribute names which link elements can have.
-var LinkAttributeFilter = GlobalAttributeFilter.ExtendString(`download,hreflang,media,ping,referrerpolicy,rel,shape,target`) // nolint:lll
+var LinkAttributeFilter = GlobalAttributeFilter.ExtendString(`download,href,lang,media,ping,referrerpolicy,rel,shape,target`) // nolint:lll
func (r *Renderer) renderAutoLink(
w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
@@ -506,12 +510,14 @@ func (r *Renderer) renderAutoLink(
return ast.WalkContinue, nil
}
_, _ = w.WriteString(`<a href="`)
- url := n.URL(source)
+ url := util.URLEscape(n.URL(source), false)
label := n.Label(source)
if n.AutoLinkType == ast.AutoLinkEmail && !bytes.HasPrefix(bytes.ToLower(url), []byte("mailto:")) {
_, _ = w.WriteString("mailto:")
}
- _, _ = w.Write(util.EscapeHTML(util.URLEscape(url, false)))
+ if r.Unsafe || !IsDangerousURL(url) {
+ _, _ = w.Write(util.EscapeHTML(url))
+ }
if n.Attributes() != nil {
_ = w.WriteByte('"')
RenderAttributes(w, n, LinkAttributeFilter)
@@ -581,8 +587,9 @@ func (r *Renderer) renderLink(w util.BufWriter, source []byte, node ast.Node, en
n := node.(*ast.Link)
if entering {
_, _ = w.WriteString("<a href=\"")
- if r.Unsafe || !IsDangerousURL(n.Destination) {
- _, _ = w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
+ dest := util.URLEscape(n.Destination, true)
+ if r.Unsafe || !IsDangerousURL(dest) {
+ _, _ = w.Write(util.EscapeHTML(dest))
}
_ = w.WriteByte('"')
if n.Title != nil {
@@ -609,8 +616,9 @@ func (r *Renderer) renderImage(w util.BufWriter, source []byte, node ast.Node, e
}
n := node.(*ast.Image)
_, _ = w.WriteString("<img src=\"")
- if r.Unsafe || !IsDangerousURL(n.Destination) {
- _, _ = w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
+ dest := util.URLEscape(n.Destination, true)
+ if r.Unsafe || !IsDangerousURL(dest) {
+ _, _ = w.Write(util.EscapeHTML(dest))
}
_, _ = w.WriteString(`" alt="`)
r.renderTexts(w, source, n)
@@ -639,7 +647,7 @@ func (r *Renderer) renderRawHTML(
if r.Unsafe {
n := node.(*ast.RawHTML)
l := n.Segments.Len()
- for i := 0; i < l; i++ {
+ for i := range l {
segment := n.Segments.At(i)
_, _ = w.Write(segment.Value(source))
}
@@ -802,7 +810,7 @@ func escapeRune(writer util.BufWriter, r rune) {
func (d *defaultWriter) SecureWrite(writer util.BufWriter, source []byte) {
n := 0
l := len(source)
- for i := 0; i < l; i++ {
+ for i := range l {
if source[i] == '\u0000' {
_, _ = writer.Write(source[i-n : i])
n = 0
@@ -819,7 +827,7 @@ func (d *defaultWriter) SecureWrite(writer util.BufWriter, source []byte) {
func (d *defaultWriter) RawWrite(writer util.BufWriter, source []byte) {
n := 0
l := len(source)
- for i := 0; i < l; i++ {
+ for i := range l {
v := util.EscapeHTMLByte(source[i])
if v != nil {
_, _ = writer.Write(source[i-n : i])