create: Preserve shortcodes in archetype templates - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2e4ccd3d34dedc136dd4d0976705c690c63ffd73
 (DIR) parent fd924d1802cb9c20c2617b1c72dac6bc36560d61
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Fri, 23 Jun 2017 09:29:59 +0200
       
       create: Preserve shortcodes in archetype templates
       
       Fixes #3623
       
       Diffstat:
         M create/content_template_handler.go  |      21 ++++++++++++++++++++-
         M create/content_test.go              |      23 +++++++++++++++++++++++
       
       2 files changed, 43 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git 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.
 (DIR) diff --git a/create/content_test.go b/create/content_test.go
       @@ -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 {