mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
fd924d1802
commit
2e4ccd3d34
2 changed files with 43 additions and 1 deletions
|
@ -16,6 +16,7 @@ package create
|
|||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gohugoio/hugo/helpers"
|
||||
|
@ -57,6 +58,20 @@ draft: true
|
|||
`
|
||||
)
|
||||
|
||||
var (
|
||||
archetypeShortcodeReplacementsPre = strings.NewReplacer(
|
||||
"{{<", "{x{<",
|
||||
"{{%", "{x{%",
|
||||
">}}", ">}x}",
|
||||
"%}}", "%}x}")
|
||||
|
||||
archetypeShortcodeReplacementsPost = strings.NewReplacer(
|
||||
"{x{<", "{{<",
|
||||
"{x{%", "{{%",
|
||||
">}x}", ">}}",
|
||||
"%}x}", "%}}")
|
||||
)
|
||||
|
||||
func executeArcheTypeAsTemplate(s *hugolib.Site, kind, targetPath, archetypeFilename string) ([]byte, error) {
|
||||
|
||||
var (
|
||||
|
@ -86,6 +101,10 @@ func executeArcheTypeAsTemplate(s *hugolib.Site, kind, targetPath, archetypeFile
|
|||
|
||||
}
|
||||
|
||||
// The archetype template may contain shortcodes, and these does not play well
|
||||
// with the Go templates. Need to set some temporary delimiters.
|
||||
archetypeTemplate = []byte(archetypeShortcodeReplacementsPre.Replace(string(archetypeTemplate)))
|
||||
|
||||
// Reuse the Hugo template setup to get the template funcs properly set up.
|
||||
templateHandler := s.Deps.Tmpl.(tpl.TemplateHandler)
|
||||
templateName := "_text/" + helpers.Filename(archetypeFilename)
|
||||
|
@ -100,7 +119,7 @@ func executeArcheTypeAsTemplate(s *hugolib.Site, kind, targetPath, archetypeFile
|
|||
return nil, fmt.Errorf("Failed to process archetype file %q: %s", archetypeFilename, err)
|
||||
}
|
||||
|
||||
archetypeContent = buff.Bytes()
|
||||
archetypeContent = []byte(archetypeShortcodeReplacementsPost.Replace(buff.String()))
|
||||
|
||||
if !bytes.Contains(archetypeContent, []byte("date")) || !bytes.Contains(archetypeContent, []byte("title")) {
|
||||
// TODO(bep) remove some time in the future.
|
||||
|
|
|
@ -49,6 +49,11 @@ func TestNewContent(t *testing.T) {
|
|||
{"stump", "stump/sample-2.md", []string{`title: "Sample 2"`}}, // no archetype file
|
||||
{"", "sample-3.md", []string{`title: "Sample 3"`}}, // no archetype
|
||||
{"product", "product/sample-4.md", []string{`title = "SAMPLE-4"`}}, // empty archetype front matter
|
||||
{"shortcodes", "shortcodes/go.md", []string{
|
||||
`title = "GO"`,
|
||||
"{{< myshortcode >}}",
|
||||
"{{% myshortcode %}}",
|
||||
"{{</* comment */>}}\n{{%/* comment */%}}"}}, // shortcodes
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
|
@ -126,6 +131,24 @@ title = "{{ .BaseFileName | upper }}"
|
|||
path: filepath.Join("archetypes", "emptydate.md"),
|
||||
content: "+++\ndate =\"\"\ntitle = \"Empty Date Arch title\"\ntest = \"test1\"\n+++\n",
|
||||
},
|
||||
// #3623x
|
||||
{
|
||||
path: filepath.Join("archetypes", "shortcodes.md"),
|
||||
content: `+++
|
||||
title = "{{ .BaseFileName | upper }}"
|
||||
+++
|
||||
|
||||
{{< myshortcode >}}
|
||||
|
||||
Some text.
|
||||
|
||||
{{% myshortcode %}}
|
||||
{{</* comment */>}}
|
||||
{{%/* comment */%}}
|
||||
|
||||
|
||||
`,
|
||||
},
|
||||
} {
|
||||
f, err := fs.Source.Create(v.path)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue