Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-06-23 10:29:59 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-06-23 10:59:06 +0300
commit2e4ccd3d34dedc136dd4d0976705c690c63ffd73 (patch)
tree3609452da0aa0e63edbe32238af19a92a86113c3 /create/content_template_handler.go
parentfd924d1802cb9c20c2617b1c72dac6bc36560d61 (diff)
create: Preserve shortcodes in archetype templates
Fixes #3623
Diffstat (limited to 'create/content_template_handler.go')
-rw-r--r--create/content_template_handler.go21
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.