shithub: hugo

Download patch

ref: 431fa0e2d75ca8ddd145bd5db20e50a160772577
parent: a7f5f97bc2c8941cbe9ade740e3c0e54202d8613
author: tycho garen <[email protected]>
date: Sat Jul 6 18:31:43 EDT 2013

changing to suport yaml rather than json and adding optional restructuredtext support

--- a/docs/content/doc/configuration.md
+++ b/docs/content/doc/configuration.md
@@ -7,13 +7,15 @@
 configuration for a site. In fact a config file isn't even needed for many websites
 since the defaults used follow commonly used patterns.
 
-The following is an example of a config file with the default values
+The following is an example of a config file with the default values: 
 
-    {
-        "SourceDir" : "content",
-        "LayoutDir" : "layouts",
-        "PublishDir" : "public",
-        "BuildDrafts" : false,
-        "Tags" : { "category" : "categories", "tag" : "tags" },
-        "BaseUrl"    : "http://yourSite.com/"
-    }
+    SourceDir: "content"
+    LayoutDir: "layouts"
+    PublishDir: "public"
+    BuildDrafts: false
+    Tags:
+       category: "categories"
+       tag: "tags"
+    BaseUrl: "http://yourSite.com/"
+    ...
+
--- a/docs/content/doc/example.md
+++ b/docs/content/doc/example.md
@@ -7,16 +7,16 @@
 
 **mysite/project/nitro.md  <- http://mysite.com/project/nitro.html**
 
-    {
-        "Title": "Nitro : A quick and simple profiler for golang",
-        "Description": "",
-        "Keywords": [ "Development", "golang", "profiling" ],
-        "Tags": [ "Development", "golang", "profiling" ],
-        "Pubdate": "2013-06-19",
-        "Topics": [ "Development", "GoLang" ],
-        "Slug": "nitro",
-        "project_url": "http://github.com/spf13/nitro"
-    }
+    ---
+    Title: "Nitro : A quick and simple profiler for golang"
+    Description": ""
+    Keywords": [ "Development", "golang", "profiling" ]
+    Tags": [ "Development", "golang", "profiling" ]
+    Pubdate": "2013-06-19"
+    Topics": [ "Development", "GoLang" ]
+    Slug": "nitro"
+    project_url": "http://github.com/spf13/nitro"
+    ...
 
     # Nitro
 
--- a/docs/content/doc/front-matter.md
+++ b/docs/content/doc/front-matter.md
@@ -5,18 +5,21 @@
 
 The front matter is one of the features that gives Hugo it's strength. It enables
 you to include the meta data of the content right with it. Hugo supports a few 
-different formats. The main format supported is JSON. Here is an example:
+different formats. The main format supported is YAML. Here is an example:
 
-    {
-        "Title": "spf13-vim 3.0 release and new website",
-        "Description": "spf13-vim is a cross platform distribution of vim plugins and resources for Vim.",
-        "Tags": [ ".vimrc", "plugins", "spf13-vim", "vim" ],
-        "Pubdate": "2012-04-06",
-        "Categories": [ "Development", "VIM" ],
-        "Slug": "spf13-vim-3-0-release-and-new-website"
-    }
+    ---
+    Title: "spf13-vim 3.0 release and new website"
+    Description: "spf13-vim is a cross platform distribution of vim plugins and resources for Vim."
+    Tags: [ ".vimrc", "plugins", "spf13-vim", "vim" ]
+    Pubdate: "2012-04-06"
+    Categories:
+      - "Development"
+      - "VIM"
+    Slug: "spf13-vim-3-0-release-and-new-website"
+    ...
 
 ### Variables
+
 There are a few predefined variables that Hugo is aware of and utilizes. The user can also create
 any variable they want to. These will be placed into the `.Params` variable available to the templates.
 
@@ -31,6 +34,8 @@
 
 **Draft** If true the content will not be rendered unless `hugo` is called with -d<br>
 **Type** The type of the content (will be derived from the directory automatically if unset).<br>
+**Markup** (Experimental) Specify "rst" for reStructuredText (requires
+           `rst2html`,) or "md" (default) for the Markdown.<br>
 **Slug** The token to appear in the tail of the url.<br>
   *or*<br>
 **Url** The full path to the content from the web root.<br>
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -21,6 +21,7 @@
 	"html/template"
 	"io/ioutil"
 	"os"
+	"os/exec"
 	"path/filepath"
 	"sort"
 	"strings"
@@ -40,6 +41,7 @@
 	contentType     string
 	Draft           bool
 	Tmpl            *template.Template
+	Markup          string
 	PageMeta
 	File
 	Position
@@ -80,6 +82,7 @@
 	page.Extension = "html"
 	page.Params = make(map[string]interface{})
 	page.Keywords = make([]string, 10, 30)
+	page.Markup = "md"
 	page.setSection()
 
 	return page
@@ -216,6 +219,8 @@
 			page.Draft = interfaceToBool(v)
 		case "layout":
 			page.layout = interfaceToString(v)
+		case "markup":
+			page.Markup = interfaceToString(v)
 		case "status":
 			page.Status = interfaceToString(v)
 		default:
@@ -352,7 +357,12 @@
 		return err
 	}
 
-	page.convertMarkdown(content)
+	switch page.Markup {
+	case "md":
+		page.convertMarkdown(content)
+	case "rst":
+		page.convertRestructuredText(content)
+	}
 	return nil
 }
 
@@ -376,6 +386,23 @@
 
 	page.RawMarkdown = strings.Join(lines, "\n")
 	content := string(blackfriday.MarkdownCommon([]byte(page.RawMarkdown)))
+	page.Content = template.HTML(content)
+	page.Summary = template.HTML(TruncateWordsToWholeSentence(StripHTML(StripShortcodes(content)), summaryLength))
+}
+
+func (page *Page) convertRestructuredText(lines []string) {
+
+	page.RawMarkdown = strings.Join(lines, " ")
+
+	cmd := exec.Command("rst2html.py", "--template=/tmp/template.txt")
+	cmd.Stdin = strings.NewReader(page.RawMarkdown)
+	var out bytes.Buffer
+	cmd.Stdout = &out
+	if err := cmd.Run(); err != nil {
+		print(err)
+	}
+
+	content := out.String()
 	page.Content = template.HTML(content)
 	page.Summary = template.HTML(TruncateWordsToWholeSentence(StripHTML(StripShortcodes(content)), summaryLength))
 }
--- a/main.go
+++ b/main.go
@@ -14,10 +14,10 @@
 package main
 
 import (
+	"./hugolib"
 	"flag"
 	"fmt"
 	"github.com/howeyc/fsnotify"
-	"./hugolib"
 	"net/http"
 	"os"
 	"path/filepath"