Save auto-detected markup type in Page.Markup
authorypnos <github@lanrules.de>
Sun, 20 Mar 2016 20:40:03 +0000 (21:40 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 8 Apr 2016 22:48:53 +0000 (00:48 +0200)
If Page.Markup was not set by the user, it will now be set after
guessing from the file extension. This means, Page.Markup will be set in
any case. It can be used by a theme to differentiate between markup
types.

Fixes #1950

hugolib/page.go
hugolib/shortcode.go

index 2342e368fc517cf5035dcdaafb3c8d33b665366d..cff84737b7ec5f5c61680dd7076472ce2c8ca941 100644 (file)
@@ -264,7 +264,7 @@ func (p *Page) renderBytes(content []byte) []byte {
                }
        }
        return helpers.RenderBytes(
-               &helpers.RenderingContext{Content: content, PageFmt: p.guessMarkupType(),
+               &helpers.RenderingContext{Content: content, PageFmt: p.determineMarkupType(),
                        DocumentID: p.UniqueID(), Config: p.getRenderingConfig(), LinkResolver: fn, FileResolver: fileFn})
 }
 
@@ -279,7 +279,7 @@ func (p *Page) renderContent(content []byte) []byte {
                        return p.Node.Site.SourceRelativeLinkFile(ref, p)
                }
        }
-       return helpers.RenderBytesWithTOC(&helpers.RenderingContext{Content: content, PageFmt: p.guessMarkupType(),
+       return helpers.RenderBytesWithTOC(&helpers.RenderingContext{Content: content, PageFmt: p.determineMarkupType(),
                DocumentID: p.UniqueID(), Config: p.getRenderingConfig(), LinkResolver: fn, FileResolver: fileFn})
 }
 
@@ -801,16 +801,15 @@ func (p *Page) Render(layout ...string) template.HTML {
        return tpl.ExecuteTemplateToHTML(p, l...)
 }
 
-func (p *Page) guessMarkupType() string {
-       // First try the explicitly set markup from the frontmatter
-       if p.Markup != "" {
-               format := helpers.GuessType(p.Markup)
-               if format != "unknown" {
-                       return format
-               }
+func (p *Page) determineMarkupType() string {
+       // Try markup explicitly set in the frontmatter
+       p.Markup = helpers.GuessType(p.Markup)
+       if p.Markup == "unknown" {
+               // Fall back to file extension (might also return "unknown")
+               p.Markup = helpers.GuessType(p.Source.Ext())
        }
 
-       return helpers.GuessType(p.Source.Ext())
+       return p.Markup
 }
 
 func (p *Page) parse(reader io.Reader) error {
index 782f0e21a7b5f7fef63f19b27eb476ff2ea03356..36d2058f1dbf9d0a27738b072c4608414b845f6a 100644 (file)
@@ -234,7 +234,7 @@ func renderShortcode(sc shortcode, parent *ShortcodeWithPage, p *Page, t tpl.Tem
 
                if sc.doMarkup {
                        newInner := helpers.RenderBytes(&helpers.RenderingContext{
-                               Content: []byte(inner), PageFmt: p.guessMarkupType(),
+                               Content: []byte(inner), PageFmt: p.determineMarkupType(),
                                DocumentID: p.UniqueID(), Config: p.getRenderingConfig()})
 
                        // If the type is “unknown” or “markdown”, we assume the markdown
@@ -250,7 +250,7 @@ func renderShortcode(sc shortcode, parent *ShortcodeWithPage, p *Page, t tpl.Tem
                        //     substitutions in <div>HUGOSHORTCODE-1</div> which prevents the
                        //     generation, but means that you can’t use shortcodes inside of
                        //     markdown structures itself (e.g., `[foo]({{% ref foo.md %}})`).
-                       switch p.guessMarkupType() {
+                       switch p.determineMarkupType() {
                        case "unknown", "markdown":
                                if match, _ := regexp.MatchString(innerNewlineRegexp, inner); !match {
                                        cleaner, err := regexp.Compile(innerCleanupRegexp)