GoBlog/hugo.go

72 lines
1.8 KiB
Go
Raw Normal View History

package main
import (
2020-10-06 17:07:48 +00:00
"strconv"
"strings"
"github.com/jeremywohl/flatten"
2020-09-19 11:07:58 +00:00
"github.com/spf13/cast"
"gopkg.in/yaml.v3"
)
2020-10-15 15:32:46 +00:00
func parseHugoFile(fileContent string) (p *post, aliases []string, e error) {
frontmatterSep := "---\n"
frontmatter := ""
if split := strings.Split(fileContent, frontmatterSep); len(split) > 2 {
frontmatter = split[1]
}
2020-10-15 15:32:46 +00:00
p = &post{
Content: strings.TrimPrefix(fileContent, frontmatterSep+frontmatter+frontmatterSep),
Parameters: map[string][]string{},
}
// Parse frontmatter
meta := map[string]interface{}{}
err := yaml.Unmarshal([]byte(frontmatter), &meta)
if err != nil {
2020-10-06 18:04:07 +00:00
return nil, nil, err
}
flat, err := flatten.Flatten(meta, "", flatten.DotStyle)
if err != nil {
2020-10-06 18:04:07 +00:00
return nil, nil, err
}
// Read dates
2020-10-15 15:32:46 +00:00
p.Published = cast.ToString(flat["date"])
p.Updated = cast.ToString(flat["lastmod"])
// Read parameters
for _, fm := range appConfig.Hugo.Frontmatter {
var values []string
for fk, value := range flat {
if strings.HasPrefix(fk, fm.Meta) {
trimmed := strings.TrimPrefix(fk, fm.Meta)
if len(trimmed) == 0 {
2020-09-19 11:07:58 +00:00
values = append(values, cast.ToString(value))
} else {
trimmed = strings.TrimPrefix(trimmed, ".")
if _, e := strconv.Atoi(trimmed); e == nil {
2020-09-19 11:07:58 +00:00
values = append(values, cast.ToString(value))
}
}
}
}
if len(values) > 0 {
2020-10-15 15:32:46 +00:00
p.Parameters[fm.Parameter] = values
}
}
2020-10-06 18:04:07 +00:00
// Parse redirects
for fk, value := range flat {
if strings.HasPrefix(fk, "aliases") {
trimmed := strings.TrimPrefix(fk, "aliases")
if len(trimmed) == 0 {
2020-09-19 11:07:58 +00:00
aliases = append(aliases, cast.ToString(value))
} else {
trimmed = strings.TrimPrefix(trimmed, ".")
if _, e := strconv.Atoi(trimmed); e == nil {
2020-09-19 11:07:58 +00:00
aliases = append(aliases, cast.ToString(value))
}
}
}
}
// Return post
2020-10-15 15:32:46 +00:00
return p, aliases, nil
}