2019-11-07 10:00:24 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
2019-11-14 17:46:49 +00:00
|
|
|
"errors"
|
|
|
|
"gopkg.in/yaml.v2"
|
2019-11-07 10:00:24 +00:00
|
|
|
)
|
|
|
|
|
2019-12-22 07:26:38 +00:00
|
|
|
type HugoFrontmatter struct {
|
2020-01-12 17:17:40 +00:00
|
|
|
Title string `yaml:"title,omitempty"`
|
|
|
|
Date string `yaml:"date,omitempty"`
|
|
|
|
Lastmod string `yaml:"lastmod,omitempty"`
|
|
|
|
Tags []string `yaml:"tags,omitempty"`
|
|
|
|
ExternalURL string `yaml:"externalURL,omitempty"`
|
|
|
|
Indieweb HugoFrontmatterIndieweb `yaml:"indieweb,omitempty"`
|
|
|
|
Syndicate []string `yaml:"syndicate,omitempty"`
|
|
|
|
TranslationKey string `yaml:"translationKey,omitempty"`
|
2020-01-19 07:36:10 +00:00
|
|
|
Images []string `yaml:"images,omitempty"`
|
|
|
|
Audio string `yaml:"audio,omitempty"`
|
2019-12-05 09:35:53 +00:00
|
|
|
}
|
|
|
|
|
2019-12-22 07:26:38 +00:00
|
|
|
type HugoFrontmatterIndieweb struct {
|
|
|
|
Reply HugoFrontmatterReply `yaml:"reply,omitempty"`
|
|
|
|
Like HugoFrontmatterLike `yaml:"like,omitempty"`
|
2019-12-05 09:35:53 +00:00
|
|
|
}
|
|
|
|
|
2019-12-22 07:26:38 +00:00
|
|
|
type HugoFrontmatterReply struct {
|
2019-12-05 09:35:53 +00:00
|
|
|
Link string `yaml:"link,omitempty"`
|
|
|
|
Title string `yaml:"title,omitempty"`
|
|
|
|
}
|
|
|
|
|
2019-12-22 07:26:38 +00:00
|
|
|
type HugoFrontmatterLike struct {
|
2019-12-05 09:35:53 +00:00
|
|
|
Link string `yaml:"link,omitempty"`
|
|
|
|
Title string `yaml:"title,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func writeFrontMatter(entry *Entry) (frontmatter string, err error) {
|
2019-11-07 10:00:24 +00:00
|
|
|
var buff bytes.Buffer
|
2019-12-22 07:26:38 +00:00
|
|
|
writeFrontmatter := &HugoFrontmatter{
|
2019-12-05 09:35:53 +00:00
|
|
|
Title: entry.title,
|
2019-12-06 09:32:30 +00:00
|
|
|
Date: entry.date,
|
2019-12-05 09:35:53 +00:00
|
|
|
Lastmod: entry.lastmod,
|
|
|
|
Tags: entry.tags,
|
|
|
|
ExternalURL: entry.link,
|
2019-12-22 07:26:38 +00:00
|
|
|
Indieweb: HugoFrontmatterIndieweb{
|
|
|
|
Reply: HugoFrontmatterReply{
|
2019-12-05 09:35:53 +00:00
|
|
|
Link: entry.replyLink,
|
|
|
|
Title: entry.replyTitle,
|
|
|
|
},
|
2019-12-22 07:26:38 +00:00
|
|
|
Like: HugoFrontmatterLike{
|
2019-12-05 09:35:53 +00:00
|
|
|
Link: entry.likeLink,
|
|
|
|
Title: entry.likeTitle,
|
|
|
|
},
|
|
|
|
},
|
2020-01-12 17:17:40 +00:00
|
|
|
Syndicate: entry.syndicate,
|
|
|
|
TranslationKey: entry.translationKey,
|
2020-01-19 07:36:10 +00:00
|
|
|
Audio: entry.audio,
|
2019-12-05 09:35:53 +00:00
|
|
|
}
|
2020-03-20 17:28:57 +00:00
|
|
|
for _, image := range entry.images {
|
|
|
|
writeFrontmatter.Images = append(writeFrontmatter.Images, image.url)
|
|
|
|
}
|
2019-12-05 09:35:53 +00:00
|
|
|
yamlBytes, err := yaml.Marshal(&writeFrontmatter)
|
|
|
|
if err != nil {
|
|
|
|
err = errors.New("failed marshaling frontmatter")
|
|
|
|
return
|
2019-11-19 09:02:20 +00:00
|
|
|
}
|
2019-11-07 10:00:24 +00:00
|
|
|
buff.WriteString("---\n")
|
2019-12-05 09:35:53 +00:00
|
|
|
buff.Write(yamlBytes)
|
|
|
|
buff.WriteString("---\n")
|
|
|
|
frontmatter = buff.String()
|
|
|
|
return
|
2019-11-07 10:00:24 +00:00
|
|
|
}
|
|
|
|
|
2019-12-05 09:35:53 +00:00
|
|
|
func WriteHugoPost(entry *Entry) (string, error) {
|
2019-11-07 10:00:24 +00:00
|
|
|
var buff bytes.Buffer
|
2019-12-05 09:35:53 +00:00
|
|
|
frontmatter, err := writeFrontMatter(entry)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
buff.WriteString(frontmatter)
|
2019-11-08 18:46:07 +00:00
|
|
|
if len(entry.content) > 0 {
|
|
|
|
buff.WriteString(entry.content)
|
2019-11-07 10:00:24 +00:00
|
|
|
}
|
2019-12-05 09:35:53 +00:00
|
|
|
return buff.String(), nil
|
2019-11-07 10:00:24 +00:00
|
|
|
}
|
2019-11-14 17:46:49 +00:00
|
|
|
|