shithub: hugo

Download patch

ref: d0ef3d43bd33cc1c0ea7a4aac91059f941987ad8
parent: f432b187a0ec52629ad1b9d993a5c3203e3699d5
author: spf13 <[email protected]>
date: Fri Dec 6 18:56:51 EST 2013

better handling of detecting markup format

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -490,17 +490,35 @@
 }
 
 func (page *Page) guessMarkupType() string {
+	// First try the explicitly set markup from the frontmatter
 	if page.Markup != "" {
-		return page.Markup
+		format := guessType(page.Markup)
+		if format != "unknown" {
+			return format
+		}
 	}
 
-	if strings.HasSuffix(page.FileName, ".md") {
-		return "md"
+	// Then try to guess from the extension
+	ext := strings.ToLower(path.Ext(page.FileName))
+	if strings.HasPrefix(ext, ".") {
+		return guessType(ext[1:])
 	}
 
 	return "unknown"
 }
 
+func guessType(in string) string {
+	switch in {
+	case "md", "markdown", "mdown":
+		return "markdown"
+	case "rst":
+		return "rst"
+	case "html", "htm":
+		return "html"
+	}
+	return "unknown"
+}
+
 func (page *Page) parse(reader io.Reader) error {
 	p, err := parser.ReadFrom(reader)
 	if err != nil {
@@ -530,14 +548,10 @@
 
 func (page *Page) Convert() error {
 	switch page.guessMarkupType() {
-	case "md", "markdown", "mdown":
+	case "markdown":
 		page.convertMarkdown(bytes.NewReader([]byte(page.Content)))
 	case "rst":
 		page.convertRestructuredText(bytes.NewReader([]byte(page.Content)))
-	case "html":
-		fallthrough
-	default:
-		page.Content = template.HTML(page.Content)
 	}
 	return nil
 }
--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -229,6 +229,7 @@
 		{"sect/doc5.html", []byte("<!doctype html><html>{{ template \"head\" }}<body>body5</body></html>"), "sect"},
 		{"sect/doc6.html", []byte("<!doctype html><html>{{ template \"head_abs\" }}<body>body5</body></html>"), "sect"},
 		{"doc7.html", []byte("<html><body>doc7 content</body></html>"), ""},
+		{"sect/doc8.html", []byte("---\nmarkup: md\n---\n# title\nsome *content*"), "sect"},
 	}
 
 	s := &Site{
@@ -267,6 +268,7 @@
 		{"sect/doc5.html", "<!doctype html><html><head><script src=\"script.js\"></script></head><body>body5</body></html>"},
 		{"sect/doc6.html", "<!doctype html><html><head><script src=\"http://auth/bub/script.js\"></script></head><body>body5</body></html>"},
 		{"doc7.html", "<html><body>doc7 content</body></html>"},
+		{"sect/doc8.html", "<h1>title</h1>\n\n<p>some <em>content</em></p>\n"},
 	}
 
 	for _, test := range tests {