A Go language port of the Twig templating engine.
Twig is a powerful templating language that supports macros, vertical and horizontal reuse, and an easy-to-learn syntax that promotes separation of logic and markup. Twig is also extremely extensible, and by default will autoescape content based on content type.
Stick brings these great features to Go projects.
Stick is made up of three main parts: a lexer, a parser, and an executer. Stick's lexer and parser are nearly complete. Basic template execution is implemented as well.
See the to do list for additional information.
Stick is intended to be used as a library. The recommended way to install the library is using go get
.
go get -u github.com/tyler-sommer/stick
Execute a simple Stick template.
package main
import (
"github.com/tyler-sommer/stick"
"os"
)
func main() {
env := stick.NewEnv(nil)
env.Execute("Hello, {{ name }}!", os.Stdout, map[string]stick.Value{"name": "Tyler"})
}
- Text
- Tags
- Print statements
- Comments
- Expressions
- String interpolation
- Raw output
- Comments
- Basic tag support
- if/else if/else/endif
- extends
- block
- for loop
- include
- import
- from
- set
- filter
- embed
- use
- macro
- do
- Expressions
- Unary expressions
- Binary expressions
- Ternary "if"
- String interpolation
- Array and dot access
- Function calls
- Inline filter "expr|filter()"
- Method calls
- Basic execution
- Template loading
- Inheritance
- extends
- embed
- use
- include
- Expressions
- literals
- binary operators
- unary operators
- get attribute
- function call
- filter application
- Other basic tags
- Macros
- User defined functions
- User defined filters
- Autoescaping
- Improve error reporting
- Improve test coverage (especially error cases)
- Whitespace control
- Custom operators and tags
- Sandbox
- Generate native Go code from a given parser tree