mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-29 07:00:31 +03:00
parent
cd0c5d7ef3
commit
aed7df62a8
3 changed files with 78 additions and 6 deletions
|
@ -14,8 +14,11 @@
|
|||
package goldmark
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"sync"
|
||||
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/gohugoio/hugo/markup/converter/hooks"
|
||||
|
||||
"github.com/yuin/goldmark"
|
||||
|
@ -135,13 +138,41 @@ func (r *hookedRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer)
|
|||
reg.Register(ast.KindHeading, r.renderHeading)
|
||||
}
|
||||
|
||||
// https://github.com/yuin/goldmark/blob/b611cd333a492416b56aa8d94b04a67bf0096ab2/renderer/html/html.go#L404
|
||||
func (r *hookedRenderer) RenderAttributes(w util.BufWriter, node ast.Node) {
|
||||
for _, attr := range node.Attributes() {
|
||||
func (r *hookedRenderer) renderAttributesForNode(w util.BufWriter, node ast.Node) {
|
||||
renderAttributes(w, false, node.Attributes()...)
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
// Attributes with special meaning that does not make sense to render in HTML.
|
||||
attributeExcludes = map[string]bool{
|
||||
"linenos": true,
|
||||
"hl_lines": true,
|
||||
"linenostart": true,
|
||||
}
|
||||
)
|
||||
|
||||
func renderAttributes(w util.BufWriter, skipClass bool, attributes ...ast.Attribute) {
|
||||
for _, attr := range attributes {
|
||||
if skipClass && bytes.Equal(attr.Name, []byte("class")) {
|
||||
continue
|
||||
}
|
||||
|
||||
if attributeExcludes[string(attr.Name)] {
|
||||
continue
|
||||
}
|
||||
|
||||
_, _ = w.WriteString(" ")
|
||||
_, _ = w.Write(attr.Name)
|
||||
_, _ = w.WriteString(`="`)
|
||||
_, _ = w.Write(util.EscapeHTML(attr.Value.([]byte)))
|
||||
|
||||
switch v := attr.Value.(type) {
|
||||
case []byte:
|
||||
_, _ = w.Write(util.EscapeHTML(v))
|
||||
default:
|
||||
w.WriteString(cast.ToString(v))
|
||||
}
|
||||
|
||||
_ = w.WriteByte('"')
|
||||
}
|
||||
}
|
||||
|
@ -282,7 +313,7 @@ func (r *hookedRenderer) renderDefaultHeading(w util.BufWriter, source []byte, n
|
|||
_, _ = w.WriteString("<h")
|
||||
_ = w.WriteByte("0123456"[n.Level])
|
||||
if n.Attributes() != nil {
|
||||
r.RenderAttributes(w, node)
|
||||
r.renderAttributesForNode(w, node)
|
||||
}
|
||||
_ = w.WriteByte('>')
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue