Documentation
¶
Index ¶
- Variables
- type FileSystemLoader
- type LoaderList
- type Template
- type TemplateGroup
- func (t *TemplateGroup) AddFuncs(funcs map[string]any) *TemplateGroup
- func (t *TemplateGroup) MustLoad(pattern string, cwd string) []*Template
- func (t *TemplateGroup) NewHtmlTemplate(name string, funcs map[string]any) (out *htmpl.Template)
- func (t *TemplateGroup) NewTextTemplate(name string, funcs map[string]any) (out *ttmpl.Template)
- func (t *TemplateGroup) PreProcessHtmlTemplate(root *Template, funcs htmpl.FuncMap) (out *htmpl.Template, err error)
- func (t *TemplateGroup) PreProcessTextTemplate(root *Template, funcs ttmpl.FuncMap) (out *ttmpl.Template, err error)
- func (t *TemplateGroup) RenderHtmlTemplate(w io.Writer, root *Template, entry string, data any, funcs map[string]any) (err error)
- func (t *TemplateGroup) RenderTextTemplate(w io.Writer, root *Template, entry string, data any, funcs map[string]any) (err error)
- type TemplateLoader
- type Walker
Constants ¶
This section is empty.
Variables ¶
var TemplateNotFound = errors.New("template not found")
TemplateNotFound is returned when a template could not be found by a loader.
Functions ¶
This section is empty.
Types ¶
type FileSystemLoader ¶
type FileSystemLoader struct {
// Folders is a list of directories to search for templates.
Folders []string
// Extensions is a list of file extensions to consider as templates.
Extensions []string
}
FileSystemLoader loads templates from the file system based on a set of directories and file extensions.
func NewFileSystemLoader ¶
func NewFileSystemLoader(folders ...string) *FileSystemLoader
NewFileSystemLoader creates a new file system loader that will search in the provided folders for template files. By default, it recognizes files with .tmpl, .tmplus, and .html extensions.
func (*FileSystemLoader) Load ¶
func (g *FileSystemLoader) Load(name string, cwd string) (template []*Template, err error)
Load attempts to find and load a template with the given name. If the name includes an extension, only files with that extension are considered. Otherwise, files with any of the loader's recognized extensions are searched. If cwd is provided, it's used for resolving relative paths. Returns the loaded templates or TemplateNotFound if no matching templates were found.
type LoaderList ¶
type LoaderList struct {
// DefaultLoader is used as a fallback if no other loaders succeed.
DefaultLoader TemplateLoader
// contains filtered or unexported fields
}
LoaderList is a composite loader that tries multiple loaders in sequence and returns the first successful match.
func (*LoaderList) AddLoader ¶
func (t *LoaderList) AddLoader(loader TemplateLoader) *LoaderList
AddLoader adds a new loader to the list of loaders to try. Returns the updated LoaderList for method chaining.
func (*LoaderList) Load ¶
func (t *LoaderList) Load(name string, cwd string) (matched []*Template, err error)
Load attempts to load a template with the given name by trying each loader in sequence. It returns the first successful match, or falls back to the DefaultLoader if all others fail. If cwd is provided, it's used for resolving relative paths. Returns TemplateNotFound if no loader can find the template.
type Template ¶
type Template struct {
// Name is an identifier for this template.
Name string
// RawSource contains the original, unprocessed template content.
RawSource []byte
// ParsedSource contains the template content after preprocessing.
ParsedSource string
// Path is the file path for this template if it was loaded from a file.
Path string
// Status indicates whether the template has been loaded and parsed.
Status int
// AsHtml determines whether the content should be treated as HTML (with escaping)
// or as plain text.
AsHtml bool
// Error contains any error encountered during template processing.
Error error
// Metadata stores extracted information from the template (e.g., FrontMatter).
Metadata map[string]any
// contains filtered or unexported fields
}
Template is the basic unit of rendering that manages content and dependencies.
func (*Template) AddDependency ¶
AddDependency adds another template as a dependency of this template. It returns false if the dependency would create a cycle, true otherwise.
func (*Template) CleanedSource ¶ added in v0.0.18
Returns the cleaned source of this template wihtout all the includes removed (but before they are preprocessed)
func (*Template) Dependencies ¶
Dependencies returns all templates that this template directly depends on.
func (*Template) WalkTemplate ¶
func (root *Template) WalkTemplate(loader TemplateLoader, handler func(template *Template) error) (err error)
type TemplateGroup ¶
type TemplateGroup struct {
// Funcs contains template functions available to all templates in this group.
Funcs map[string]any
// Loader is used to resolve and load template dependencies.
Loader TemplateLoader
// contains filtered or unexported fields
}
TemplateGroup manages a collection of templates and their dependencies, providing methods to process and render them.
func NewTemplateGroup ¶
func NewTemplateGroup() *TemplateGroup
NewTemplateGroup creates a new empty template group with initialized internals.
func (*TemplateGroup) AddFuncs ¶
func (t *TemplateGroup) AddFuncs(funcs map[string]any) *TemplateGroup
AddFuncs adds template functions to this group, making them available to all templates. Returns the template group for method chaining.
func (*TemplateGroup) MustLoad ¶ added in v0.0.12
func (t *TemplateGroup) MustLoad(pattern string, cwd string) []*Template
Calls the underlying Loader to load templates matching a pattern and optional using a cwd for relative paths. Panics if an error is encountered. Returns matching templates or an error if no templates were found.
func (*TemplateGroup) NewHtmlTemplate ¶
NewHtmlTemplate creates a new HTML template with the given name. The template will have access to the group's functions and any additional functions provided.
func (*TemplateGroup) NewTextTemplate ¶
NewTextTemplate creates a new TEXT template with the given name. The template will have access to the group's functions and any additional functions provided.
func (*TemplateGroup) PreProcessHtmlTemplate ¶
func (t *TemplateGroup) PreProcessHtmlTemplate(root *Template, funcs htmpl.FuncMap) (out *htmpl.Template, err error)
PreProcessHtmlTemplate processes a HTML template and its dependencies, creating an html/template that can be used for rendering. It handles template dependencies recursively. Returns the processed template and any error encountered.
func (*TemplateGroup) PreProcessTextTemplate ¶
func (t *TemplateGroup) PreProcessTextTemplate(root *Template, funcs ttmpl.FuncMap) (out *ttmpl.Template, err error)
PreProcessTextTemplate processes a template and its dependencies, creating a text/template that can be used for rendering. It handles template dependencies recursively. Returns the processed template and any error encountered.
func (*TemplateGroup) RenderHtmlTemplate ¶
func (t *TemplateGroup) RenderHtmlTemplate(w io.Writer, root *Template, entry string, data any, funcs map[string]any) (err error)
RenderHtmlTemplate renders a template as HTML to the provided writer. It processes the template with its dependencies, executes it with the given data, and applies any additional template functions provided. If entry is specified, it executes that specific template within the processed template.
func (*TemplateGroup) RenderTextTemplate ¶
func (t *TemplateGroup) RenderTextTemplate(w io.Writer, root *Template, entry string, data any, funcs map[string]any) (err error)
RenderTextTemplate renders a template as plain text to the provided writer. It processes the template with its dependencies, executes it with the given data, and applies any additional template functions provided. If entry is specified, it executes that specific template within the processed template.
type TemplateLoader ¶
type TemplateLoader interface {
// Load attempts to load templates matching the given pattern.
// If cwd is not empty, it's used as the base directory for relative paths.
// Returns matching templates or an error if no templates were found.
Load(pattern string, cwd string) (template []*Template, err error)
}
TemplateLoader defines an interface for loading template content by name or pattern.
type Walker ¶ added in v0.0.18
type Walker struct {
// Buffer stores the processed template content
Buffer *bytes.Buffer
// Loader is used to resolve and load template dependencies
Loader TemplateLoader
// FoundInclude is called when an include directive is encountered.
// If it returns true, the include is skipped and not processed.
FoundInclude func(included string) bool
// Called before a template is preprocessed. This is an opportunity
// for the handler to control entering/preprocessing etc. For example
// This could be a place for the handler to skip processing a template
EnteringTemplate func(template *Template) (skip bool, err error)
// ProcessedTemplate is called after a template and all its children
// have been processed. This allows for custom post-processing.
ProcessedTemplate func(template *Template) error
// contains filtered or unexported fields
}
Walker provides a mechanism for walking through templates and their dependencies in a customizable way, applying visitor patterns as templates are processed. Unlike the WalkTemplate method which uses post-order traversal, Walker implements in-order traversal, processing includes immediately when encountered.
func (*Walker) Walk ¶ added in v0.0.18
Walk processes a template and its dependencies using in-order traversal. This means includes are processed as soon as they are encountered in the template. After processing, the template's ParsedSource will contain the processed content. If ProcessedTemplate is defined, it will be called on each processed template.