mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-29 23:53:32 -05:00
fix: parsing of yaml forematter
This commit is contained in:
parent
431fa0e2d7
commit
6c42d3d490
17 changed files with 36 additions and 69 deletions
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Configuring Hugo"
|
title: "Configuring Hugo"
|
||||||
pubdate: "2013-07-01"
|
pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
The directory structure and templates provide the majority of the
|
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
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Contributing to Hugo"
|
title: "Contributing to Hugo"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
1. Fork it from https://github.com/spf13/hugo
|
1. Fork it from https://github.com/spf13/hugo
|
||||||
2. Create your feature branch (`git checkout -b my-new-feature`)
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Contributors"
|
title: "Contributors"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Hugo was built with love and golang by:
|
Hugo was built with love and golang by:
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Example Content File"
|
title: "Example Content File"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Somethings are better shown than explained. The following is a very basic example of a content file:
|
Somethings are better shown than explained. The following is a very basic example of a content file:
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Front Matter"
|
title: "Front Matter"
|
||||||
Pubdate: "2013-07-01"
|
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
|
||||||
|
@ -16,7 +16,7 @@ different formats. The main format supported is YAML. Here is an example:
|
||||||
- "Development"
|
- "Development"
|
||||||
- "VIM"
|
- "VIM"
|
||||||
Slug: "spf13-vim-3-0-release-and-new-website"
|
Slug: "spf13-vim-3-0-release-and-new-website"
|
||||||
...
|
---
|
||||||
|
|
||||||
### Variables
|
### Variables
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Installing Hugo"
|
title: "Installing Hugo"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Hugo is written in GoLang with support for Windows, Linux, FreeBSD and OSX.
|
Hugo is written in GoLang with support for Windows, Linux, FreeBSD and OSX.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "License"
|
title: "License"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Hugo is released under the Simple Public License.
|
Hugo is released under the Simple Public License.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Organization"
|
title: "Organization"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Hugo uses markdown files with headers commonly called the front matter. Hugo respects the organization
|
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
|
that you provide for your content to minimize any extra configuration, though this can be overridden
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Release Notes"
|
title: "Release Notes"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
* **0.7.0** July 4, 2013
|
* **0.7.0** July 4, 2013
|
||||||
* Hugo now includes a simple server
|
* Hugo now includes a simple server
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Roadmap"
|
title: "Roadmap"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
In no particular order, here is what I'm working on:
|
In no particular order, here is what I'm working on:
|
||||||
|
|
||||||
|
|
14
docs/content/doc/rst.rst
Normal file
14
docs/content/doc/rst.rst
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
Markup: 'rst'
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
==============
|
||||||
|
This is a Test
|
||||||
|
==============
|
||||||
|
|
||||||
|
|
||||||
|
Really
|
||||||
|
------
|
||||||
|
|
||||||
|
text *here* and **HERE**.
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Shortcodes"
|
title: "Shortcodes"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Because Hugo uses markdown for it's content format, it was clear that there's a lot of things that
|
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.
|
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"
|
title: "Source Directory Organization"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Hugo takes a single directory and uses it as the input for creating a complete website.
|
Hugo takes a single directory and uses it as the input for creating a complete website.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Templates"
|
title: "Templates"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Hugo uses the excellent golang html/template library for it's template engine. It is an extremely
|
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
|
lightweight engine that provides a very small amount of logic. In our
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Using Hugo"
|
title: "Using Hugo"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Make sure either hugo is in your path or provide a path to it.
|
Make sure either hugo is in your path or provide a path to it.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Variables"
|
title: "Variables"
|
||||||
Pubdate: "2013-07-01"
|
Pubdate: "2013-07-01"
|
||||||
...
|
---
|
||||||
|
|
||||||
Hugo makes a set of values available to the templates. Go templates are context based. The following
|
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.
|
are available in the context for the templates.
|
||||||
|
|
|
@ -154,18 +154,17 @@ func (page *Page) parseYamlMetaData(data []byte) ([]string, error) {
|
||||||
// must be on their own lines (for now)
|
// must be on their own lines (for now)
|
||||||
var found = 0
|
var found = 0
|
||||||
for i, line := range lines {
|
for i, line := range lines {
|
||||||
line = strings.TrimSpace(line)
|
|
||||||
|
|
||||||
if line == "---" {
|
if strings.HasPrefix(line, "---") {
|
||||||
found += 1
|
found += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if line == "..." {
|
if strings.HasPrefix(line, "---") {
|
||||||
found -= 1
|
found -= 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if found == 0 {
|
if found == 0 {
|
||||||
datum = lines[0 : i+1]
|
datum = lines[0: i+1]
|
||||||
lines = lines[i+1:]
|
lines = lines[i+1:]
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -189,13 +188,11 @@ func (p *Page) Permalink() template.HTML {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (page *Page) handleYamlMetaData(datum []byte) error {
|
func (page *Page) handleYamlMetaData(datum []byte) error {
|
||||||
var f interface{}
|
m := map[string]interface{}{}
|
||||||
if err := goyaml.Unmarshal(datum, &f); err != nil {
|
if err := goyaml.Unmarshal(datum, &m); err != nil {
|
||||||
return fmt.Errorf("Invalide YAML in $v \nError parsing page meta data: %s", page.FileName, err)
|
return fmt.Errorf("Invalid YAML in $v \nError parsing page meta data: %s", page.FileName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
m := f.(map[string]interface{})
|
|
||||||
|
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
switch strings.ToLower(k) {
|
switch strings.ToLower(k) {
|
||||||
case "title":
|
case "title":
|
||||||
|
@ -261,47 +258,6 @@ func (page *Page) GetParam(key string) interface{} {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (page *Page) parseFileMetaData(data []byte) ([]string, error) {
|
|
||||||
lines := strings.Split(string(data), "\n")
|
|
||||||
|
|
||||||
// go through content parse from --- to ---
|
|
||||||
var found = 0
|
|
||||||
for i, line := range lines {
|
|
||||||
line = strings.TrimSpace(line)
|
|
||||||
|
|
||||||
if found == 1 {
|
|
||||||
// parse line for param
|
|
||||||
colonIndex := strings.Index(line, ":")
|
|
||||||
if colonIndex > 0 {
|
|
||||||
key := strings.TrimSpace(line[:colonIndex])
|
|
||||||
value := strings.TrimSpace(line[colonIndex+1:])
|
|
||||||
value = strings.Trim(value, "\"") //remove quotes
|
|
||||||
switch key {
|
|
||||||
case "title":
|
|
||||||
page.Title = value
|
|
||||||
case "layout":
|
|
||||||
page.layout = value
|
|
||||||
case "extension":
|
|
||||||
page.Extension = "." + value
|
|
||||||
default:
|
|
||||||
page.Params[key] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if found >= 2 {
|
|
||||||
// params over
|
|
||||||
lines = lines[i:]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if line == "---" {
|
|
||||||
found += 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lines, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (page *Page) Err(message string) {
|
func (page *Page) Err(message string) {
|
||||||
fmt.Println(page.FileName + " : " + message)
|
fmt.Println(page.FileName + " : " + message)
|
||||||
}
|
}
|
||||||
|
@ -311,9 +267,6 @@ func (page *Page) parseFileHeading(data []byte) ([]string, error) {
|
||||||
if len(data) == 0 {
|
if len(data) == 0 {
|
||||||
page.Err("Empty File, skipping")
|
page.Err("Empty File, skipping")
|
||||||
} else {
|
} else {
|
||||||
if data[0] == '-' {
|
|
||||||
return page.parseFileMetaData(data)
|
|
||||||
}
|
|
||||||
return page.parseYamlMetaData(data)
|
return page.parseYamlMetaData(data)
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
|
Loading…
Reference in a new issue