59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
func ParseTemplates(tmpl *template.Template, path string) (map[string]*template.Template, error) {
|
|
tmplMap := map[string]*template.Template{}
|
|
|
|
err := parseTemplates(tmpl, tmplMap, path, path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return tmplMap, nil
|
|
}
|
|
|
|
func parseTemplates(tmpl *template.Template, tmplMap map[string]*template.Template, path string, trimPrefix string) error {
|
|
var err error
|
|
|
|
dirEntries, err := os.ReadDir(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, dirEntry := range dirEntries {
|
|
entryPath := filepath.Join(path, dirEntry.Name())
|
|
if dirEntry.IsDir() {
|
|
err = parseTemplates(tmpl, tmplMap, entryPath, trimPrefix)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
continue
|
|
}
|
|
|
|
data, err := ReadFileString(entryPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
tmplName := filepath.Clean(strings.TrimPrefix(entryPath, trimPrefix))
|
|
if tmplName[0] == '/' {
|
|
tmplName = tmplName[1:]
|
|
}
|
|
|
|
tmpl, err = tmpl.New(tmplName).Parse(string(data))
|
|
if err != nil {
|
|
return ErrInvalidTemplateSyntax.Wrap(err, tmplName)
|
|
}
|
|
|
|
tmplMap[tmplName] = tmpl
|
|
}
|
|
|
|
return nil
|
|
}
|