Skip to content

Commit

Permalink
fix: parsing of yaml forematter
Browse files Browse the repository at this point in the history
  • Loading branch information
tychoish committed Jul 7, 2013
1 parent 431fa0e commit 6c42d3d
Show file tree
Hide file tree
Showing 17 changed files with 36 additions and 69 deletions.
2 changes: 1 addition & 1 deletion docs/content/doc/configuration.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/contributing.md
Original file line number Diff line number Diff line change
@@ -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`)
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/contributors.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Contributors"
Pubdate: "2013-07-01"
...
---

Hugo was built with love and golang by:

Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/example.md
Original file line number Diff line number Diff line change
@@ -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:

Expand Down
4 changes: 2 additions & 2 deletions docs/content/doc/front-matter.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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

Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/installing.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Installing Hugo"
Pubdate: "2013-07-01"
...
---

Hugo is written in GoLang with support for Windows, Linux, FreeBSD and OSX.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/license.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "License"
Pubdate: "2013-07-01"
...
---

Hugo is released under the Simple Public License.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/organization.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Release Notes"
Pubdate: "2013-07-01"
...
---

* **0.7.0** July 4, 2013
* Hugo now includes a simple server
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/roadmap.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Roadmap"
Pubdate: "2013-07-01"
...
---

In no particular order, here is what I'm working on:

Expand Down
14 changes: 14 additions & 0 deletions docs/content/doc/rst.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
Markup: 'rst'
...


==============
This is a Test
==============


Really
------

text *here* and **HERE**.
2 changes: 1 addition & 1 deletion docs/content/doc/shortcodes.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/source-directory.md
Original file line number Diff line number Diff line change
@@ -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.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/templates.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/usage.md
Original file line number Diff line number Diff line change
@@ -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.

Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/variables.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
59 changes: 6 additions & 53 deletions hugolib/page.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,18 +154,17 @@ func (page *Page) parseYamlMetaData(data []byte) ([]string, error) {
// must be on their own lines (for now)
var found = 0
for i, line := range lines {
line = strings.TrimSpace(line)

if line == "---" {
if strings.HasPrefix(line, "---") {
found += 1
}

if line == "..." {
if strings.HasPrefix(line, "---") {
found -= 1
}

if found == 0 {
datum = lines[0 : i+1]
datum = lines[0: i+1]
lines = lines[i+1:]
break
}
Expand All @@ -189,13 +188,11 @@ func (p *Page) Permalink() template.HTML {
}

func (page *Page) handleYamlMetaData(datum []byte) error {
var f interface{}
if err := goyaml.Unmarshal(datum, &f); err != nil {
return fmt.Errorf("Invalide YAML in $v \nError parsing page meta data: %s", page.FileName, err)
m := map[string]interface{}{}
if err := goyaml.Unmarshal(datum, &m); err != nil {
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 {
switch strings.ToLower(k) {
case "title":
Expand Down Expand Up @@ -261,47 +258,6 @@ func (page *Page) GetParam(key string) interface{} {
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) {
fmt.Println(page.FileName + " : " + message)
}
Expand All @@ -311,9 +267,6 @@ func (page *Page) parseFileHeading(data []byte) ([]string, error) {
if len(data) == 0 {
page.Err("Empty File, skipping")
} else {
if data[0] == '-' {
return page.parseFileMetaData(data)
}
return page.parseYamlMetaData(data)
}
return nil, nil
Expand Down

0 comments on commit 6c42d3d

Please sign in to comment.