pagr

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

commit e814e9482dda7d821dfd7439eebac4bc00b629a1
parent 59673035ba96eead384408d7ff1d310ede333d82
Author: gearsix <gearsix@tuta.io>
Date:   Tue,  6 Jul 2021 12:34:47 +0100

added pagr build() && verbose logging

Diffstat:
Mpagr.go | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 53 insertions(+), 6 deletions(-)

diff --git a/pagr.go b/pagr.go @@ -1,7 +1,11 @@ package main import ( + "bytes" + "os" + "strings" "flag" + "path/filepath" "log" "notabug.org/gearsix/suti" ) @@ -9,17 +13,31 @@ import ( const Name = "pagr" const Version = "0.0.0" +var verbose bool + +func vlog(fmt string, args ...interface{}) { + if verbose { + log.Printf(fmt, args...) + } +} + func check(err error) { if err != nil { - log.Fatalf("ERROR! %s\n", err) + if verbose { + log.Panic(err) + } else { + 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") + flag.BoolVar(&verbose, "v", false, "print verbose logs") flag.Parse() + vlog("verbose on") + var err error var config Config @@ -31,13 +49,42 @@ func main() { config = NewConfig() } - var _ Content - _, err = LoadContentDir(config.Contents) + var c Content + c, err = LoadContentDir(config.Contents) check(err) - var _ []suti.Template - _, err = LoadTemplateDir(config.Templates) + var t []suti.Template + t, err = LoadTemplateDir(config.Templates) check(err) + build(config, c, t) + return } + +func build(config Config, pages Content, templates []suti.Template) { + var err error + var out bytes.Buffer + + for _, pg := range pages { + out.Reset() + target := pg.GetTemplate() + for _, t := range templates { + tname := filepath.Base(t.Source) + tname = strings.TrimSuffix(tname, filepath.Ext(tname)) + if tname == target { + if out, err = t.Execute(pg); err != nil { + log.Printf("Execution error in template '%s':\n", target) + check(err) + } + outp := filepath.Join(config.Output, pg.Path, "index.html") + check(os.MkdirAll(filepath.Dir(outp), 0755)) + check(os.WriteFile(outp, out.Bytes(), 0644)) + vlog("wrote '%s' -> '%s'", pg.Path, outp) + } + } + if out.Len() == 0 { + log.Printf("failed to find template '%s' for '%s'\n", target, pg.Path) + } + } +}