shithub: hugo

Download patch

ref: 2fb9af59c14b1732ba1a2f21794e2cf8dfca0604
parent: 00e36a4164d730bd1dff1d0efd04283992bfe671
author: Vas Sudanagunta <[email protected]>
date: Fri May 4 16:17:16 EDT 2018

Improve markup determination logic

Sets Page.markup earlier (as early as possible, when the page is
loaded). Sets it once and only once, removing many redundant calls
to determineMarkupType().

This kills a sleeping bug that was avoided by the parts of the
code depending on this value making those redundant calls.

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -728,8 +728,7 @@
 // rendering engines.
 func (p *Page) replaceDivider(content []byte) []byte {
 	summaryDivider := helpers.SummaryDivider
-	// TODO(bep) handle better.
-	if p.Ext() == "org" || p.Markup == "org" {
+	if p.Markup == "org" {
 		summaryDivider = []byte("# more")
 	}
 
@@ -863,7 +862,7 @@
 
 func (p *Page) renderContent(content []byte) []byte {
 	return p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
-		Content: content, RenderTOC: true, PageFmt: p.determineMarkupType(),
+		Content: content, RenderTOC: true, PageFmt: p.Markup,
 		Cfg:        p.Language(),
 		DocumentID: p.UniqueID(), DocumentName: p.Path(),
 		Config: p.getRenderingConfig()})
@@ -1486,6 +1485,13 @@
 		}
 	}
 
+	// 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())
+	}
+
 	if draft != nil && published != nil {
 		p.Draft = *draft
 		p.s.Log.ERROR.Printf("page %s has both draft and published settings in its frontmatter. Using draft.", p.File.Path())
@@ -1723,17 +1729,6 @@
 func (p *Page) shouldRenderTo(f output.Format) bool {
 	_, found := p.outputFormats.GetByName(f.Name)
 	return found
-}
-
-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 p.Markup
 }
 
 func (p *Page) parse(reader io.Reader) error {
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -314,7 +314,8 @@
 
 		if sc.doMarkup {
 			newInner := p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
-				Content: []byte(inner), PageFmt: p.determineMarkupType(),
+				Content:      []byte(inner),
+				PageFmt:      p.Markup,
 				Cfg:          p.Language(),
 				DocumentID:   p.UniqueID(),
 				DocumentName: p.Path(),
@@ -333,7 +334,7 @@
 			//     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.determineMarkupType() {
+			switch p.Markup {
 			case "unknown", "markdown":
 				if match, _ := regexp.MatchString(innerNewlineRegexp, inner); !match {
 					cleaner, err := regexp.Compile(innerCleanupRegexp)