package main
import (
"html/template"
"log"
"os"
"path"
"strings"
)
func main() {
always := []string{}
if err := recursePwd(func(p string) error {
switch path.Ext(p) {
case ".ctmpl":
if path.Base(p)[0] == '_' {
always = append(always, p)
}
}
return nil
}); err != nil {
panic(err)
}
t := func(p ...string) *template.Template {
p = append(always, p...)
oneT, err := template.ParseFiles(p...)
if err != nil {
panic(err)
}
return oneT
}
data := map[string]interface{}{
"Title": "my title here",
"ID": "my-id-here",
"PID": "my-pid-here",
"PTitle": "my parent title here",
}
if err := recursePwd(func(p string) error {
switch path.Ext(p) {
case ".ctmpl":
target := path.Join(path.Dir(p), "."+path.Base(p)+".html")
f, err := os.Create(path.Join(path.Dir(p), "."+path.Base(p)+".html"))
if err != nil {
return err
}
defer f.Close()
templateToExecute := strings.TrimSuffix(path.Base(p), path.Ext(p))
defer log.Printf("rendering %s (...%s) as %s", templateToExecute, path.Join(path.Base(path.Dir(p)), path.Base(p)), target)
return t(p).Lookup(templateToExecute).Execute(f, data)
}
return nil
}); err != nil {
panic(err)
}
}
func recursePwd(foo func(string) error) error {
wd, err := os.Getwd()
if err != nil {
return err
}
return recurseD(wd, foo)
}
func recurseD(d string, foo func(string) error) error {
entries, err := os.ReadDir(d)
if err != nil {
return err
}
for _, entry := range entries {
if entry.IsDir() {
if err := recurseD(path.Join(d, entry.Name()), foo); err != nil {
return err
}
} else if strings.HasPrefix(entry.Name(), ".") {
} else if err := foo(path.Join(d, entry.Name())); err != nil {
return err
}
}
return nil
}