diff --git a/main.go b/main.go index 576183a..3629943 100644 --- a/main.go +++ b/main.go @@ -6,28 +6,11 @@ import ( "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() { - tmpl, err := loadTemplate() + doc, err := loadTemplate() handleError(err) - frontmatter, body, err := parseDocument(tmpl) - handleError(err) - - templateMeta, err := parseFrontmatter(frontmatter) + templateMeta, body, err := parseDocument(doc) handleError(err) ctx, err := parseParams(templateMeta) diff --git a/parse.go b/parse.go index 95c6699..d52458b 100644 --- a/parse.go +++ b/parse.go @@ -7,26 +7,28 @@ import ( "gopkg.in/yaml.v3" ) -func parseFrontmatter(input string) (meta TemplateMeta, err error) { - err = yaml.Unmarshal([]byte(input), &meta) +func parseDocument(doc string) (meta TemplateMeta, body string, err error) { + frontmatter, body := separateDocument(doc) + if frontmatter == "" { + return TemplateMeta{}, body, nil + } + err = yaml.Unmarshal([]byte(frontmatter), &meta) if err != nil { err = fmt.Errorf("Failed to parse frontmatter: %w", err) 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") sep := "---\n" if !strings.HasPrefix(doc, sep) { - err = fmt.Errorf("Invalid document: frontmatter required.\n%s", doc) - return + return "", doc } parts := strings.SplitN(doc, sep, 3) if len(parts) < 3 { - err = fmt.Errorf("Invalid document: frontmatter required.\n%s", doc) - return + return "", doc } frontmatter = parts[1] body = strings.TrimLeft(parts[2], "\n ")