return ast.WalkContinue, nil
}
- text := strings.TrimSpace(ctx.PopRenderedString())
+ text := ctx.PopRenderedString()
ordinal := ctx.GetAndIncrementOrdinal(ast.KindBlockquote)
// tag if the first line of the blockquote content does not have a
// closing p tag. At some point we might want to move this to the
// parser.
- before, after, found := strings.Cut(text, "\n")
+ before, after, found := strings.Cut(strings.TrimSpace(text), "\n")
if found {
if strings.HasSuffix(before, "</p>") {
text = after
var blockQuoteAlertRe = regexp.MustCompile(`^<p>\[!([a-zA-Z]+)\](-|\+)?[^\S\r\n]?([^\n]*)\n?`)
func resolveBlockQuoteAlert(s string) blockQuoteAlert {
- m := blockQuoteAlertRe.FindStringSubmatch(s)
+ m := blockQuoteAlertRe.FindStringSubmatch(strings.TrimSpace(s))
if len(m) == 4 {
title := strings.TrimSpace(m[3])
title = strings.TrimSuffix(title, "</p>")
import (
"path/filepath"
+ "strings"
"testing"
"github.com/gohugoio/hugo/hugolib"
"Blockquote Alert: |<p>This is a note with some whitespace after the alert type.</p>|alert|",
"Blockquote Alert: |<p>This is a tip.</p>",
"Blockquote Alert: |<p>This is a caution with some whitespace before the alert type.</p>|alert|",
- "Blockquote: |<p>A regular blockquote.</p>|regular|",
+ "Blockquote: |<p>A regular blockquote.</p>\n|regular|",
"Blockquote Alert Attributes: |<p>This is a tip with attributes.</p>|map[class:foo bar id:baz]|",
filepath.FromSlash("/content/p1.md:19:3"),
"Blockquote Alert Page: |<p>This is a tip with attributes.</p>|p1|p1|",
"AlertType: fourteen|AlertTitle: title|Text: <p><img src=\"a.jpg\" alt=\"alt\"></p>|",
"AlertType: fifteen|AlertTitle: <em>title</em>|Text: |",
"AlertType: sixteen|AlertTitle: <em>title</em>|Text: <p>line one</p>|",
- "AlertType: |AlertTitle: |Text: <p>seventeen</p>|",
+ "AlertType: |AlertTitle: |Text: <p>seventeen</p>\n|",
)
}
+
+// Issue14046
+func TestBlockquoteDefaultOutput(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- hugo.toml --
+disableKinds = ['home','rss','section','sitemap','taxonomy','term']
+-- content/p1.md --
+---
+title: p1
+---
+> foo
+-- layouts/page.html --
+|{{ .Content }}|
+-- xxx --
+<blockquote>
+{{ .Text }}
+</blockquote>
+`
+
+ want := "|<blockquote>\n<p>foo</p>\n</blockquote>\n|"
+
+ b := hugolib.Test(t, files)
+ b.AssertFileContent("public/p1/index.html", want) // fail
+
+ files = strings.ReplaceAll(files, "xxx", "layouts/_markup/render-blockquote.html")
+
+ b = hugolib.Test(t, files)
+ b.AssertFileContent("public/p1/index.html", want)
+}