mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
YAML support similar to jekyll (start and end with '---')
This commit is contained in:
parent
94e577740d
commit
3c80cd323c
16 changed files with 51 additions and 41 deletions
|
@ -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
|
||||
|
|
|
@ -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`)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "Contributors"
|
||||
Pubdate: "2013-07-01"
|
||||
...
|
||||
---
|
||||
|
||||
Hugo was built with love and golang by:
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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 @@ different formats. The main format supported is YAML. Here is an example:
|
|||
- "Development"
|
||||
- "VIM"
|
||||
Slug: "spf13-vim-3-0-release-and-new-website"
|
||||
...
|
||||
---
|
||||
|
||||
### Variables
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "Installing Hugo"
|
||||
Pubdate: "2013-07-01"
|
||||
...
|
||||
---
|
||||
|
||||
Hugo is written in GoLang with support for Windows, Linux, FreeBSD and OSX.
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "License"
|
||||
Pubdate: "2013-07-01"
|
||||
...
|
||||
---
|
||||
|
||||
Hugo is released under the Simple Public License.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "Release Notes"
|
||||
Pubdate: "2013-07-01"
|
||||
...
|
||||
---
|
||||
|
||||
* **0.7.0** July 4, 2013
|
||||
* Hugo now includes a simple server
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "Roadmap"
|
||||
Pubdate: "2013-07-01"
|
||||
...
|
||||
---
|
||||
|
||||
In no particular order, here is what I'm working on:
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -16,11 +16,11 @@ package hugolib
|
|||
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 @@ import (
|
|||
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 Position struct {
|
|||
|
||||
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 (p *Page) analyzePage() {
|
|||
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 @@ func splitPageContent(data []byte, start string, end string) ([]string, []string
|
|||
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
|
||||
}
|
||||
|
@ -208,7 +219,6 @@ func (page *Page) handleYamlMetaData(datum []byte) interface{} {
|
|||
return m
|
||||
}
|
||||
|
||||
|
||||
func (page *Page) handleJsonMetaData(datum []byte) interface{} {
|
||||
var f interface{}
|
||||
if err := json.Unmarshal(datum, &f); err != nil {
|
||||
|
|
Loading…
Reference in a new issue