pagr

A 'static site generator', built using dati.
Log | Files | Refs | Atom

commit 9fff9062f66a2403d343f67adced6dc7a8622679
parent 11fae364cb7981ea0eb303ce5df9ab1f2f5b979f
Author: gearsix <gearsix@tuta.io>
Date:   Thu, 24 Jun 2021 18:40:39 +0100

added template loading

Diffstat:
Mcontent.go | 7++++---
Mpagr.go | 21++++++++++++---------
Atemplate.go | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 75 insertions(+), 12 deletions(-)

diff --git a/content.go b/content.go @@ -26,8 +26,9 @@ var ContentContentsExts = [5]string{ type Content []Page func LoadContentDir(dir string) (c Content, e error) { - _, err := os.Stat(dir) - check(err) + if _, e = os.Stat(dir); e != nil { + return + } pages := make(map[string]Page) defaults := make(map[string]Meta) @@ -36,7 +37,7 @@ func LoadContentDir(dir string) (c Content, e error) { } e = filepath.Walk(dir, func(fpath string, info fs.FileInfo, err error) error { if err != nil { - return nil + return err } var path string diff --git a/pagr.go b/pagr.go @@ -3,11 +3,18 @@ package main import ( "flag" "log" + "notabug.org/gearsix/suti" ) const Name = "pagr" const Version = "0.0.0" +func check(err error) { + if err != nil { + log.Fatalf("ERROR! %s\n", err) + } +} + func main() { cfg := flag.String("cfg", "", "path to pagr project configuration file") //verbose := flag.Bool("verbose", false, "print verbose logs") @@ -24,17 +31,13 @@ func main() { config = NewConfig() } - var c Content - c, err = LoadContentDir(config.Contents) + var _ Content + _, err = LoadContentDir(config.Contents) check(err) - log.Println(c) + var _ []suti.Template + _, err = LoadTemplateDir(config.Templates) + check(err) return } - -func check(err error) { - if err != nil { - log.Fatalf("ERROR! %s\n", err) - } -} diff --git a/template.go b/template.go @@ -0,0 +1,59 @@ +package main + +import ( + "path/filepath" + "io/fs" + "strings" + "os" + "notabug.org/gearsix/suti" +) + +func loadPaths(dir string) ([]string, error) { + var r []string + err := filepath.Walk(dir, + func(fpath string, info fs.FileInfo, e error) error { + if e != nil { + return e + } + if !info.IsDir() { + r = append(r, fpath) + } + return e + }) + return r, err +} + +func LoadTemplateDir(dir string) ([]suti.Template, error) { + paths := make(map[string][]string) // [template][]partials + + if tpaths, err := loadPaths(dir); err != nil && !os.IsNotExist(err) { + return nil, err + } else { + err = nil + for _, t := range tpaths { + paths[t] = make([]string, 0) + dir, file := filepath.Split(t) + ppath := filepath.Join(dir, strings.TrimSuffix(file, filepath.Ext(file))) + if _, err := os.Stat(ppath); err == nil { + var partials []string + if partials, err = loadPaths(ppath); err != nil { + return nil, err + } else { + paths[t] = partials + } + } + } + } + + var err error + var ret []suti.Template + for t, partials := range paths { + tmpl, err := suti.LoadTemplateFile(t, partials...) + if err != nil { + break + } + ret = append(ret, tmpl) + } + + return ret, err +}