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 configuration for a site. In fact a config file isn't even needed for many websites
since the defaults used follow commonly used patterns. 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** **mysite/project/nitro.md <- http://mysite.com/project/nitro.html**
{ ---
"Title": "Nitro : A quick and simple profiler for golang", Title: "Nitro : A quick and simple profiler for golang"
"Description": "", Description": ""
"Keywords": [ "Development", "golang", "profiling" ], Keywords": [ "Development", "golang", "profiling" ]
"Tags": [ "Development", "golang", "profiling" ], Tags": [ "Development", "golang", "profiling" ]
"Pubdate": "2013-06-19", Pubdate": "2013-06-19"
"Topics": [ "Development", "GoLang" ], Topics": [ "Development", "GoLang" ]
"Slug": "nitro", Slug": "nitro"
"project_url": "http://github.com/spf13/nitro" project_url": "http://github.com/spf13/nitro"
} ...
# 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 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 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", Title: "spf13-vim 3.0 release and new website"
"Description": "spf13-vim is a cross platform distribution of vim plugins and resources for Vim.", Description: "spf13-vim is a cross platform distribution of vim plugins and resources for Vim."
"Tags": [ ".vimrc", "plugins", "spf13-vim", "vim" ], Tags: [ ".vimrc", "plugins", "spf13-vim", "vim" ]
"Pubdate": "2012-04-06", Pubdate: "2012-04-06"
"Categories": [ "Development", "VIM" ], Categories:
"Slug": "spf13-vim-3-0-release-and-new-website" - "Development"
} - "VIM"
Slug: "spf13-vim-3-0-release-and-new-website"
...
### Variables ### Variables
There are a few predefined variables that Hugo is aware of and utilizes. The user can also create 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. 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> **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> **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> **Slug** The token to appear in the tail of the url.<br>
*or*<br> *or*<br>
**Url** The full path to the content from the web root.<br> **Url** The full path to the content from the web root.<br>

View file

@ -21,6 +21,7 @@ import (
"html/template" "html/template"
"io/ioutil" "io/ioutil"
"os" "os"
"os/exec"
"path/filepath" "path/filepath"
"sort" "sort"
"strings" "strings"
@ -40,6 +41,7 @@ type Page struct {
contentType string contentType string
Draft bool Draft bool
Tmpl *template.Template Tmpl *template.Template
Markup string
PageMeta PageMeta
File File
Position Position
@ -80,6 +82,7 @@ func initializePage(filename string) (page Page) {
page.Extension = "html" page.Extension = "html"
page.Params = make(map[string]interface{}) page.Params = make(map[string]interface{})
page.Keywords = make([]string, 10, 30) page.Keywords = make([]string, 10, 30)
page.Markup = "md"
page.setSection() page.setSection()
return page return page
@ -216,6 +219,8 @@ func (page *Page) handleYamlMetaData(datum []byte) error {
page.Draft = interfaceToBool(v) page.Draft = interfaceToBool(v)
case "layout": case "layout":
page.layout = interfaceToString(v) page.layout = interfaceToString(v)
case "markup":
page.Markup = interfaceToString(v)
case "status": case "status":
page.Status = interfaceToString(v) page.Status = interfaceToString(v)
default: default:
@ -352,7 +357,12 @@ func (page *Page) buildPageFromFile() error {
return err return err
} }
switch page.Markup {
case "md":
page.convertMarkdown(content) page.convertMarkdown(content)
case "rst":
page.convertRestructuredText(content)
}
return nil return nil
} }
@ -379,3 +389,20 @@ func (page *Page) convertMarkdown(lines []string) {
page.Content = template.HTML(content) page.Content = template.HTML(content)
page.Summary = template.HTML(TruncateWordsToWholeSentence(StripHTML(StripShortcodes(content)), summaryLength)) 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 package main
import ( import (
"./hugolib"
"flag" "flag"
"fmt" "fmt"
"github.com/howeyc/fsnotify" "github.com/howeyc/fsnotify"
"./hugolib"
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"