nidus-sync/html/parse.go

68 lines
1.7 KiB
Go
Raw Permalink Normal View History

package html
import (
"fmt"
"html/template"
"io/fs"
//"github.com/rs/zerolog/log"
)
func addSupportingTemplates(sourceFS fs.FS, t *template.Template) error {
err := fs.WalkDir(sourceFS, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
return nil
}
content, err := fs.ReadFile(sourceFS, path)
if err != nil {
return fmt.Errorf("error reading template %s: %w", path, err)
}
new_t := template.New(path)
addFuncMap(new_t)
_, err = new_t.Parse(string(content))
if err != nil {
return fmt.Errorf("error parsing '%s': %w", path, err)
}
_, err = t.AddParseTree(new_t.Name(), new_t.Tree)
if err != nil {
return fmt.Errorf("error adding parse tree '%s': %w", path, err)
}
//log.Debug().Str("path", path).Msg("Read template")
return nil
})
if err != nil {
return fmt.Errorf("error walking template directory: %w", err)
}
return nil
}
func parseTemplate(sourceFS fs.FS, template_name string) (*template.Template, error) {
t, err := parseTemplateFile(sourceFS, template_name)
if err != nil {
return nil, fmt.Errorf("Failed to parse template: %w", err)
}
err = addSupportingTemplates(sourceFS, t)
if err != nil {
return nil, fmt.Errorf("Failed to add supporting templates: %w", err)
}
return t, nil
}
func parseTemplateFile(sourceFS fs.FS, filename string) (*template.Template, error) {
t := template.New(filename)
//log.Debug().Str("filename", filename).Msg("parsing template")
addFuncMap(t)
content, err := fs.ReadFile(sourceFS, filename)
if err != nil {
return nil, fmt.Errorf("error reading template %s: %w", filename, err)
}
_, err = t.Parse(string(content))
if err != nil {
return nil, fmt.Errorf("error parsing '%s': %w", filename, err)
}
return t, nil
}