Skip to content

Commit

Permalink
Fixes #456
Browse files Browse the repository at this point in the history
  • Loading branch information
yuin committed Jun 23, 2024
1 parent a590622 commit 25bdeb0
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 18 deletions.
7 changes: 7 additions & 0 deletions _test/extra.txt
Original file line number Diff line number Diff line change
Expand Up @@ -780,3 +780,10 @@ text](logo.png)
<p><img src="logo.png" alt="alt
text" /></p>
//= = = = = = = = = = = = = = = = = = = = = = = =//

62: Image alt with an escaped character
//- - - - - - - - -//
![\`alt](https://example.com/img.png)
//- - - - - - - - -//
<p><img src="https://example.com/img.png" alt="`alt" /></p>
//= = = = = = = = = = = = = = = = = = = = = = = =//
36 changes: 18 additions & 18 deletions renderer/html/html.go
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@ func (r *Renderer) renderImage(w util.BufWriter, source []byte, node ast.Node, e
_, _ = w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
}
_, _ = w.WriteString(`" alt="`)
_, _ = w.Write(nodeToHTMLText(n, source))
r.renderAttribute(w, source, n)
_ = w.WriteByte('"')
if n.Title != nil {
_, _ = w.WriteString(` title="`)
Expand Down Expand Up @@ -770,6 +770,23 @@ func (r *Renderer) renderString(w util.BufWriter, source []byte, node ast.Node,
return ast.WalkContinue, nil
}

func (r *Renderer) renderAttribute(w util.BufWriter, source []byte, n ast.Node) {
for c := n.FirstChild(); c != nil; c = c.NextSibling() {
if s, ok := c.(*ast.String); ok {
_, _ = r.renderString(w, source, s, true)
} else if t, ok := c.(*ast.String); ok {
_, _ = r.renderText(w, source, t, true)
} else if !c.HasChildren() {
r.Writer.Write(w, c.Text(source))
if t, ok := c.(*ast.Text); ok && t.SoftLineBreak() {
w.WriteByte('\n')

Check failure on line 782 in renderer/html/html.go

View workflow job for this annotation

GitHub Actions / test (1.21.x, ubuntu-latest)

Error return value of `w.WriteByte` is not checked (errcheck)

Check failure on line 782 in renderer/html/html.go

View workflow job for this annotation

GitHub Actions / test (1.22.x, ubuntu-latest)

Error return value of `w.WriteByte` is not checked (errcheck)

Check failure on line 782 in renderer/html/html.go

View workflow job for this annotation

GitHub Actions / test (1.21.x, ubuntu-latest)

Error return value of `w.WriteByte` is not checked (errcheck)

Check failure on line 782 in renderer/html/html.go

View workflow job for this annotation

GitHub Actions / test (1.22.x, ubuntu-latest)

Error return value of `w.WriteByte` is not checked (errcheck)
}
} else {
r.renderAttribute(w, source, c)
}
}
}

var dataPrefix = []byte("data-")

// RenderAttributes renders given node's attributes.
Expand Down Expand Up @@ -1007,20 +1024,3 @@ func IsDangerousURL(url []byte) bool {
return hasPrefix(url, bJs) || hasPrefix(url, bVb) ||
hasPrefix(url, bFile) || hasPrefix(url, bData)
}

func nodeToHTMLText(n ast.Node, source []byte) []byte {
var buf bytes.Buffer
for c := n.FirstChild(); c != nil; c = c.NextSibling() {
if s, ok := c.(*ast.String); ok && s.IsCode() {
buf.Write(s.Text(source))
} else if !c.HasChildren() {
buf.Write(util.EscapeHTML(c.Text(source)))
if t, ok := c.(*ast.Text); ok && t.SoftLineBreak() {
buf.WriteByte('\n')
}
} else {
buf.Write(nodeToHTMLText(c, source))
}
}
return buf.Bytes()
}

0 comments on commit 25bdeb0

Please sign in to comment.