diff --git a/docs/content/doc/configuration.md b/docs/content/doc/configuration.md index eea530f02..09cfb48f3 100644 --- a/docs/content/doc/configuration.md +++ b/docs/content/doc/configuration.md @@ -7,13 +7,15 @@ The directory structure and templates provide the majority of the 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/" - } diff --git a/docs/content/doc/example.md b/docs/content/doc/example.md index 75f35f2bf..03595ad10 100644 --- a/docs/content/doc/example.md +++ b/docs/content/doc/example.md @@ -7,16 +7,16 @@ Somethings are better shown than explained. The following is a very basic exampl **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 diff --git a/docs/content/doc/front-matter.md b/docs/content/doc/front-matter.md index 3f0083713..af930b25f 100644 --- a/docs/content/doc/front-matter.md +++ b/docs/content/doc/front-matter.md @@ -5,18 +5,21 @@ Pubdate: "2013-07-01" 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 @@ any variable they want to. These will be placed into the `.Params` variable avai **Draft** If true the content will not be rendered unless `hugo` is called with -d
**Type** The type of the content (will be derived from the directory automatically if unset).
+**Markup** (Experimental) Specify "rst" for reStructuredText (requires + `rst2html`,) or "md" (default) for the Markdown.
**Slug** The token to appear in the tail of the url.
*or*
**Url** The full path to the content from the web root.
diff --git a/hugolib/page.go b/hugolib/page.go index 46c566412..61b3cf0d3 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -21,6 +21,7 @@ import ( "html/template" "io/ioutil" "os" + "os/exec" "path/filepath" "sort" "strings" @@ -40,6 +41,7 @@ type Page struct { contentType string Draft bool Tmpl *template.Template + Markup string PageMeta File Position @@ -80,6 +82,7 @@ func initializePage(filename string) (page Page) { 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 @@ func (page *Page) handleYamlMetaData(datum []byte) error { 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 @@ func (page *Page) buildPageFromFile() error { return err } - page.convertMarkdown(content) + switch page.Markup { + case "md": + page.convertMarkdown(content) + case "rst": + page.convertRestructuredText(content) + } return nil } @@ -379,3 +389,20 @@ func (page *Page) convertMarkdown(lines []string) { 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)) +} diff --git a/main.go b/main.go index 1de48f766..3f4b6f968 100644 --- 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"