diff --git a/markup/goldmark/convert.go b/markup/goldmark/convert.go index 639fddaceaf..dcaf8d3e179 100644 --- a/markup/goldmark/convert.go +++ b/markup/goldmark/convert.go @@ -310,49 +310,52 @@ func newHighlighting(cfg highlight.Config) goldmark.Extender { ), hl.WithWrapperRenderer(func(w util.BufWriter, ctx hl.CodeBlockContext, entering bool) { - l, hasLang := ctx.Language() var language string - if hasLang { + if l, hasLang := ctx.Language(); hasLang { language = string(l) } - if entering { - if !ctx.Highlighted() { - w.WriteString(`
`) - highlight.WriteCodeTag(w, language) - return + if ctx.Highlighted() { + if entering { + writeDivStart(w, ctx) + } else { + writeDivEnd(w) } - - w.WriteString(`") - return - } + if attributes != nil { + class, found := ctx.Attributes().GetString("class") + if found { + w.WriteString(" ") + w.Write(util.EscapeHTML(class.([]byte))) - if !ctx.Highlighted() { - w.WriteString(``) - return - } + } + _, _ = w.WriteString("\"") + renderAttributes(w, true, attributes...) + } else { + _, _ = w.WriteString("\"") + } - w.WriteString("") - }), - ) + w.WriteString(">") +} + +func writeDivEnd(w util.BufWriter) { + w.WriteString("") } diff --git a/markup/goldmark/convert_test.go b/markup/goldmark/convert_test.go index f2c6efedd13..5fe6997e88e 100644 --- a/markup/goldmark/convert_test.go +++ b/markup/goldmark/convert_test.go @@ -155,7 +155,7 @@ description // Code fences c.Assert(got, qt.Contains, "") - c.Assert(got, qt.Contains, "Code Fences No Lexer\nLINE1\n
") + c.Assert(got, qt.Contains, "Code Fences No Lexer\nLINE1\n
") // Extensions c.Assert(got, qt.Contains, `Autolink: https://gohugo.io/`) @@ -392,7 +392,7 @@ LINE5 c.Assert(result, qt.Equals, `LINE1\n
`) result = convertForConfig(c, cfg, `echo "Hugo Rocks!"`, "unknown") - c.Assert(result, qt.Equals, "echo "Hugo Rocks!"
") + c.Assert(result, qt.Equals, "echo "Hugo Rocks!"\n
") }) c.Run("Highlight lines, default config", func(c *qt.C) { @@ -443,7 +443,7 @@ LINE5 cfg.LineNumbersInTable = false result := convertForConfig(c, cfg, lines, "") - c.Assert(result, qt.Contains, "echo "Hugo Rocks!"\n
LINE1\n") + c.Assert(result, qt.Contains, "
" + return preEnd +} + +func WritePreEnd(w io.Writer) { + fmt.Fprint(w, preEnd) }LINE1\n") }) c.Run("No language, guess syntax", func(c *qt.C) { diff --git a/markup/highlight/highlight.go b/markup/highlight/highlight.go index 772244a916f..319426241d5 100644 --- a/markup/highlight/highlight.go +++ b/markup/highlight/highlight.go @@ -122,17 +122,17 @@ type preWrapper struct { } func (p preWrapper) Start(code bool, styleAttr string) string { - w := &strings.Builder{} - fmt.Fprintf(w, `
`, styleAttr) var language string if code { language = p.language } - WriteCodeTag(w, language) + w := &strings.Builder{} + WritePreStart(w, language, styleAttr) return w.String() } -func WriteCodeTag(w io.Writer, language string) { +func WritePreStart(w io.Writer, language, styleAttr string) { + fmt.Fprintf(w, ``, styleAttr) fmt.Fprint(w, "" + func (p preWrapper) End(code bool) string { - return "") } +const preEnd = "