package html import ( "fmt" "html/template" ) type Options struct { LeftDelim string RightDelim string Extension string BaseDir string FuncMap template.FuncMap } func DefaultOptions() *Options { return &Options{ LeftDelim: "{{", RightDelim: "}}", Extension: ".html", BaseDir: "/", FuncMap: template.FuncMap{ "yield": func() error { return fmt.Errorf("yield called outside of a layout") }, }, } } func (o *Options) WithDelimiters(left, right string) *Options { o.LeftDelim = left o.RightDelim = right return o } func (o *Options) WithExtension(ext string) *Options { o.Extension = ext return o } func (o *Options) WithBaseDir(dir string) *Options { o.BaseDir = dir return o } func (o *Options) WithFunction(name string, fn interface{}) *Options { o.FuncMap[name] = fn return o } func (o *Options) WithFunctions(funcs template.FuncMap) *Options { for k, v := range funcs { o.FuncMap[k] = v } return o }