shithub: hugo

Download patch

ref: 3c80cd323c89641c3f11a0126affc70f8ab6df19
parent: 94e577740dc2835d5a97b2566feb735d45fef77b
author: spf13 <[email protected]>
date: Mon Jul 8 13:57:01 EDT 2013

YAML support similar to jekyll (start and end with '---')

--- a/docs/content/doc/configuration.md
+++ b/docs/content/doc/configuration.md
@@ -1,7 +1,7 @@
 ---
 title: "Configuring Hugo"
 pubdate: "2013-07-01"
-...
+---
 
 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
--- a/docs/content/doc/contributing.md
+++ b/docs/content/doc/contributing.md
@@ -1,7 +1,7 @@
 ---
 title: "Contributing to Hugo"
 Pubdate: "2013-07-01"
-...
+---
 
 1. Fork it from https://github.com/spf13/hugo
 2. Create your feature branch (`git checkout -b my-new-feature`)
--- a/docs/content/doc/contributors.md
+++ b/docs/content/doc/contributors.md
@@ -1,7 +1,7 @@
 ---
 title: "Contributors"
 Pubdate: "2013-07-01"
-...
+---
 
 Hugo was built with love and golang by:
 
--- a/docs/content/doc/example.md
+++ b/docs/content/doc/example.md
@@ -1,7 +1,7 @@
 ---
 title: "Example Content File"
 Pubdate: "2013-07-01"
-...
+---
 
 Somethings are better shown than explained. The following is a very basic example of a content file:
 
--- a/docs/content/doc/front-matter.md
+++ b/docs/content/doc/front-matter.md
@@ -1,7 +1,7 @@
 ---
 title: "Front Matter"
 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 
@@ -16,7 +16,7 @@
       - "Development"
       - "VIM"
     Slug: "spf13-vim-3-0-release-and-new-website"
-    ...
+    ---
 
 ### Variables
 
--- a/docs/content/doc/installing.md
+++ b/docs/content/doc/installing.md
@@ -1,7 +1,7 @@
 ---
 title: "Installing Hugo"
 Pubdate: "2013-07-01"
-...
+---
 
 Hugo is written in GoLang with support for Windows, Linux, FreeBSD and OSX.
 
--- a/docs/content/doc/license.md
+++ b/docs/content/doc/license.md
@@ -1,7 +1,7 @@
 ---
 title: "License"
 Pubdate: "2013-07-01"
-...
+---
 
 Hugo is released under the Simple Public License.
 
--- a/docs/content/doc/organization.md
+++ b/docs/content/doc/organization.md
@@ -1,7 +1,7 @@
 ---
 title: "Organization"
 Pubdate: "2013-07-01"
-...
+---
 
 Hugo uses markdown files with headers commonly called the front matter. Hugo respects the organization
 that you provide for your content to minimize any extra configuration, though this can be overridden
--- a/docs/content/doc/release-notes.md
+++ b/docs/content/doc/release-notes.md
@@ -1,7 +1,7 @@
 ---
 title: "Release Notes"
 Pubdate: "2013-07-01"
-...
+---
 
 * **0.7.0** July 4, 2013
   * Hugo now includes a simple server
--- a/docs/content/doc/roadmap.md
+++ b/docs/content/doc/roadmap.md
@@ -1,7 +1,7 @@
 ---
 title: "Roadmap"
 Pubdate: "2013-07-01"
-...
+---
 
 In no particular order, here is what I'm working on:
 
--- a/docs/content/doc/shortcodes.md
+++ b/docs/content/doc/shortcodes.md
@@ -1,7 +1,7 @@
 ---
 title: "Shortcodes"
 Pubdate: "2013-07-01"
-...
+---
 
 Because Hugo uses markdown for it's content format, it was clear that there's a lot of things that 
 markdown doesn't support well. This is good, the simple nature of markdown is exactly why we chose it.
--- a/docs/content/doc/source-directory.md
+++ b/docs/content/doc/source-directory.md
@@ -1,7 +1,7 @@
 ---
 title: "Source Directory Organization"
 Pubdate: "2013-07-01"
-...
+---
 
 Hugo takes a single directory and uses it as the input for creating a complete website.
 
--- a/docs/content/doc/templates.md
+++ b/docs/content/doc/templates.md
@@ -1,7 +1,7 @@
 ---
 title: "Templates"
 Pubdate: "2013-07-01"
-...
+---
 
 Hugo uses the excellent golang html/template library for it's template engine. It is an extremely
 lightweight engine that provides a very small amount of logic. In our 
--- a/docs/content/doc/usage.md
+++ b/docs/content/doc/usage.md
@@ -1,7 +1,7 @@
 ---
 title: "Using Hugo"
 Pubdate: "2013-07-01"
-...
+---
 
 Make sure either hugo is in your path or provide a path to it.
 
--- a/docs/content/doc/variables.md
+++ b/docs/content/doc/variables.md
@@ -1,7 +1,7 @@
 ---
 title: "Variables"
 Pubdate: "2013-07-01"
-...
+---
 
 Hugo makes a set of values available to the templates. Go templates are context based. The following
 are available in the context for the templates.
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -16,11 +16,11 @@
 import (
 	"bytes"
 	"encoding/json"
-	"launchpad.net/goyaml"
 	"fmt"
 	"github.com/theplant/blackfriday"
 	"html/template"
 	"io/ioutil"
+	"launchpad.net/goyaml"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -32,17 +32,17 @@
 var _ = filepath.Base("")
 
 type Page struct {
-	Status		string
-	Images		[]string
-	Content		template.HTML
-	Summary		template.HTML
-	RawMarkdown	string // TODO should be []byte
-	Params		map[string]interface{}
+	Status          string
+	Images          []string
+	Content         template.HTML
+	Summary         template.HTML
+	RawMarkdown     string // TODO should be []byte
+	Params          map[string]interface{}
 	RenderedContent *bytes.Buffer
-	contentType	string
-	Draft		bool
-	Tmpl		*template.Template
-	Markup		string
+	contentType     string
+	Draft           bool
+	Tmpl            *template.Template
+	Markup          string
 	PageMeta
 	File
 	Position
@@ -67,12 +67,12 @@
 
 type Pages []*Page
 
-func (p Pages) Len() int	   { return len(p) }
+func (p Pages) Len() int           { return len(p) }
 func (p Pages) Less(i, j int) bool { return p[i].Date.Unix() > p[j].Date.Unix() }
-func (p Pages) Swap(i, j int)	   { p[i], p[j] = p[j], p[i] }
+func (p Pages) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
 
 // TODO eliminate unnecessary things
-func (p Pages) Sort()		  { sort.Sort(p) }
+func (p Pages) Sort()             { sort.Sort(p) }
 func (p Pages) Limit(n int) Pages { return p[0:n] }
 
 func initializePage(filename string) (page Page) {
@@ -148,13 +148,12 @@
 func (page *Page) parseYamlMetaData(data []byte) ([]string, error) {
 	var err error
 
-	datum, lines := splitPageContent(data, "---", "...")
+	datum, lines := splitPageContent(data, "---", "---")
 
 	err = page.handleMetaData(page.handleYamlMetaData([]byte(strings.Join(datum, "\n"))))
 	return lines, err
 }
 
-
 func (page *Page) parseJsonMetaData(data []byte) ([]string, error) {
 	var err error
 
@@ -169,18 +168,30 @@
 	datum := lines[0:]
 
 	var found = 0
-	for i, line := range lines {
+	if start != end {
+		for i, line := range lines {
 
-		if strings.HasPrefix(line, start) {
+			if strings.HasPrefix(line, start) {
+				found += 1
+			}
+
+			if strings.HasPrefix(line, end) {
+				found -= 1
+			}
+
+			if found == 0 {
+				datum = lines[1 : i+1]
+				lines = lines[i+1:]
+				break
+			}
+		}
+	} else {
+		if found == 0 && strings.HasPrefix(line, start) {
 			found += 1
 		}
 
-		if strings.HasPrefix(line, end) {
-			found -= 1
-		}
-
-		if found == 0 {
-			datum = lines[1: i+1]
+		if found == 0 && strings.HasPrefix(line, end) {
+			datum = lines[1 : i+1]
 			lines = lines[i+1:]
 			break
 		}
@@ -207,7 +218,6 @@
 	}
 	return m
 }
-
 
 func (page *Page) handleJsonMetaData(datum []byte) interface{} {
 	var f interface{}