mirror of
https://github.com/lancatlin/mdsh.git
synced 2026-11-05 19:30:12 +08:00
chore: make frontmatter optional
This commit is contained in:
1 parent
f976860f33
commit
88d6d98282
2 files changed
+12
-27
No files matched your search
@@ -6,28 +6,11 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
var TMPL_EXAMPLE = `
|
|
||||||
---
|
|
||||||
output: "reports/${from}.md"
|
|
||||||
params:
|
|
||||||
from:
|
|
||||||
required: true
|
|
||||||
file:
|
|
||||||
default: "ledger.j"
|
|
||||||
---
|
|
||||||
Hello this is the text:
|
|
||||||
Start from {{ .from }}
|
|
||||||
{{ sh "hledger bal assets -b $from" }}
|
|
||||||
`
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
tmpl, err := loadTemplate()
|
doc, err := loadTemplate()
|
||||||
handleError(err)
|
handleError(err)
|
||||||
|
|
||||||
frontmatter, body, err := parseDocument(tmpl)
|
templateMeta, body, err := parseDocument(doc)
|
||||||
handleError(err)
|
|
||||||
|
|
||||||
templateMeta, err := parseFrontmatter(frontmatter)
|
|
||||||
handleError(err)
|
handleError(err)
|
||||||
|
|
||||||
ctx, err := parseParams(templateMeta)
|
ctx, err := parseParams(templateMeta)
|
||||||
|
|||||||
@@ -7,26 +7,28 @@ import (
|
|||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func parseFrontmatter(input string) (meta TemplateMeta, err error) {
|
func parseDocument(doc string) (meta TemplateMeta, body string, err error) {
|
||||||
err = yaml.Unmarshal([]byte(input), &meta)
|
frontmatter, body := separateDocument(doc)
|
||||||
|
if frontmatter == "" {
|
||||||
|
return TemplateMeta{}, body, nil
|
||||||
|
}
|
||||||
|
err = yaml.Unmarshal([]byte(frontmatter), &meta)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Failed to parse frontmatter: %w", err)
|
err = fmt.Errorf("Failed to parse frontmatter: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return meta, body, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseDocument(doc string) (frontmatter string, body string, err error) {
|
func separateDocument(doc string) (frontmatter string, body string) {
|
||||||
doc = strings.TrimLeft(doc, " \n")
|
doc = strings.TrimLeft(doc, " \n")
|
||||||
sep := "---\n"
|
sep := "---\n"
|
||||||
if !strings.HasPrefix(doc, sep) {
|
if !strings.HasPrefix(doc, sep) {
|
||||||
err = fmt.Errorf("Invalid document: frontmatter required.\n%s", doc)
|
return "", doc
|
||||||
return
|
|
||||||
}
|
}
|
||||||
parts := strings.SplitN(doc, sep, 3)
|
parts := strings.SplitN(doc, sep, 3)
|
||||||
if len(parts) < 3 {
|
if len(parts) < 3 {
|
||||||
err = fmt.Errorf("Invalid document: frontmatter required.\n%s", doc)
|
return "", doc
|
||||||
return
|
|
||||||
}
|
}
|
||||||
frontmatter = parts[1]
|
frontmatter = parts[1]
|
||||||
body = strings.TrimLeft(parts[2], "\n ")
|
body = strings.TrimLeft(parts[2], "\n ")
|
||||||
|
|||||||
Reference in new issue
Block a user