package impor import "strings" import "html/template" import "git.tebibyte.media/sashakoshka/step" var _ step.FuncProviderFor = new(Provider) // Provider provides import functions. type Provider struct { } // FuncMap fulfills the step.FuncProvider interface. func (this *Provider) FuncMap () template.FuncMap { return nil } // FuncMapFor fulfills the step.FuncProviderFor interface. func (this *Provider) FuncMapFor (document *step.Document) template.FuncMap { stat := &state { document: document, } return template.FuncMap { "include": stat.funcInclude, "includeHTML": stat.funcIncludeHTML, } } type state struct { document *step.Document } func (this *state) funcInclude (name string, data any) (string, error) { document, err := this.document.Environment().Parse(name) if err != nil { return "", err } builder := strings.Builder { } err = document.Execute(&builder, step.ExecutionData { Data: data }) if err != nil { return "", err } return builder.String(), nil } func (this *state) funcIncludeHTML (name string, data any) (template.HTML, error) { result, err := this.funcInclude(name, data) return template.HTML(result), err }