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

This commit is contained in:
tycho garen 2013-07-06 22:31:43 -04:00
parent a7f5f97bc2
commit 431fa0e2d7
5 changed files with 64 additions and 30 deletions

View file

@ -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/"
}

View file

@ -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

View file

@ -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<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>

View file

@ -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))
}

View file

@ -14,10 +14,10 @@
package main
import (
"./hugolib"
"flag"
"fmt"
"github.com/howeyc/fsnotify"
"./hugolib"
"net/http"
"os"
"path/filepath"