diff --git a/tpl/tplimpl/templatedescriptor.go b/tpl/tplimpl/templatedescriptor.go index f8cf02870..f93993092 100644 --- a/tpl/tplimpl/templatedescriptor.go +++ b/tpl/tplimpl/templatedescriptor.go @@ -208,12 +208,9 @@ func (this TemplateDescriptor) doCompare(category Category, isEmbedded bool, oth w.w1 += weightVariant1 } - if other.Variant2 != "" && other.Variant2 == this.Variant2 { + if other.Variant1 != "" && other.Variant2 == this.Variant2 { w.w1 += weightVariant2 } - if other.Variant2 != "" && this.Variant2 == "" { - w.w1-- - } return w } diff --git a/tpl/tplimpl/templatestore.go b/tpl/tplimpl/templatestore.go index 6ef030531..e761e14d1 100644 --- a/tpl/tplimpl/templatestore.go +++ b/tpl/tplimpl/templatestore.go @@ -1832,7 +1832,10 @@ func (best *bestMatch) isBetter(w weight, ti *TemplInfo) bool { return false } - if best.w.w1 > 0 { + // Note that for render hook templates, we need to make + // the embedded render hook template wih if they're a better match, + // e.g. render-codeblock-goat.html. + if best.templ.category != CategoryMarkup && best.w.w1 > 0 { currentBestIsEmbedded := best.templ.subCategory == SubCategoryEmbedded if currentBestIsEmbedded { if ti.subCategory != SubCategoryEmbedded { diff --git a/tpl/tplimpl/templatestore_integration_test.go b/tpl/tplimpl/templatestore_integration_test.go index 618c173fc..db7cb5084 100644 --- a/tpl/tplimpl/templatestore_integration_test.go +++ b/tpl/tplimpl/templatestore_integration_test.go @@ -827,7 +827,46 @@ func TestPartialHTML(t *testing.T) { } // Issue #13593. -func TestNoGoat(t *testing.T) { +func TestGoatAndNoGoat(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +-- content/_index.md -- +--- +title: "Home" +--- + + +§§§ +printf "Hello, world!" +§§§ + + +§§§ goat +.---. .-. .-. .-. .---. +| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | +'---' '-' '+' '+' '---' +§§§ + + + +-- layouts/all.html -- +{{ .Content }} + +` + + b := hugolib.Test(t, files) + + // Basic code block. + b.AssertFileContent("public/index.html", "printf "Hello, world!"\n") + + // Goat code block. + b.AssertFileContent("public/index.html", "Menlo,Lucida") +} + +// Issue #13595. +func TestGoatAndNoGoatCustomTemplate(t *testing.T) { t.Parallel() files := ` @@ -841,6 +880,16 @@ title: "Home" printf "Hello, world!" §§§ +§§§ goat +.---. .-. .-. .-. .---. +| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | +'---' '-' '+' '+' '---' +§§§ + + + +-- layouts/_markup/render-codeblock.html -- +_markup/render-codeblock.html -- layouts/all.html -- {{ .Content }} @@ -848,7 +897,51 @@ printf "Hello, world!" b := hugolib.Test(t, files) - b.AssertFileContent("public/index.html", "Hello, world!") + // Basic code block. + b.AssertFileContent("public/index.html", "_markup/render-codeblock.html") + + // Goat code block. + b.AssertFileContent("public/index.html", "Menlo,Lucida") +} + +func TestGoatcustom(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +-- content/_index.md -- +--- +title: "Home" +--- + +§§§ +printf "Hello, world!" +§§§ + +§§§ goat +.---. .-. .-. .-. .---. +| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | +'---' '-' '+' '+' '---' +§§§ + + + +-- layouts/_markup/render-codeblock.html -- +_markup/render-codeblock.html +-- layouts/_markup/render-codeblock-goat.html -- +_markup/render-codeblock-goat.html +-- layouts/all.html -- +{{ .Content }} + +` + + b := hugolib.Test(t, files) + + // Basic code block. + b.AssertFileContent("public/index.html", "_markup/render-codeblock.html") + + // Custom Goat code block. + b.AssertFileContent("public/index.html", "_markup/render-codeblock.html_markup/render-codeblock-goat.html") } // Issue #13515