diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-06-23 10:29:59 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-06-23 10:59:06 +0300 |
commit | 2e4ccd3d34dedc136dd4d0976705c690c63ffd73 (patch) | |
tree | 3609452da0aa0e63edbe32238af19a92a86113c3 /create/content_template_handler.go | |
parent | fd924d1802cb9c20c2617b1c72dac6bc36560d61 (diff) |
create: Preserve shortcodes in archetype templates
Fixes #3623
Diffstat (limited to 'create/content_template_handler.go')
-rw-r--r-- | create/content_template_handler.go | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/create/content_template_handler.go b/create/content_template_handler.go index fbe062cba..0be495d15 100644 --- a/create/content_template_handler.go +++ b/create/content_template_handler.go @@ -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. |