summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md6
-rw-r--r--main.go26
-rw-r--r--main_test.go11
3 files changed, 38 insertions, 5 deletions
diff --git a/README.md b/README.md
index a9c6a41d..4bf8254d 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@ Gomplate is an alternative that will let you process templates which also includ
- [Usage](#usage)
- [Commandline Arguments](#commandline-arguments)
- [`--datasource`/`-d`](#-datasource-d)
+ - [Overriding the template delimiters](#overriding-the-template-delimiters)
- [Syntax](#syntax)
- [About `.Env`](#about-env)
- [Built-in functions](#built-in-functions)
@@ -191,6 +192,11 @@ A few different forms are valid:
- `mydata.json`
- This form infers the name from the file name (without extension). Only valid for files in the current directory.
+#### Overriding the template delimiters
+
+Sometimes it's necessary to override the default template delimiters (`{{`/`}}`).
+Use `--left-delim`/`--right-delim` or set `$GOMPLATE_LEFT_DELIM`/`$GOMPLATE_RIGHT_DELIM`.
+
## Syntax
### About `.Env`
diff --git a/main.go b/main.go
index e1b8c472..c2511422 100644
--- a/main.go
+++ b/main.go
@@ -20,7 +20,9 @@ func (g *Gomplate) createTemplate() *template.Template {
// Gomplate -
type Gomplate struct {
- funcMap template.FuncMap
+ funcMap template.FuncMap
+ leftDelim string
+ rightDelim string
}
// RunTemplate -
@@ -30,7 +32,7 @@ func (g *Gomplate) RunTemplate(in io.Reader, out io.Writer) {
if err != nil {
log.Fatalf("Read failed!\n%v\n", err)
}
- tmpl, err := g.createTemplate().Parse(string(text))
+ tmpl, err := g.createTemplate().Delims(g.leftDelim, g.rightDelim).Parse(string(text))
if err != nil {
log.Fatalf("Line %q: %v\n", string(text), err)
}
@@ -41,12 +43,14 @@ func (g *Gomplate) RunTemplate(in io.Reader, out io.Writer) {
}
// NewGomplate -
-func NewGomplate(data *Data) *Gomplate {
+func NewGomplate(data *Data, leftDelim, rightDelim string) *Gomplate {
env := &Env{}
typeconv := &TypeConv{}
ec2meta := aws.NewEc2Meta()
ec2info := aws.NewEc2Info()
return &Gomplate{
+ leftDelim: leftDelim,
+ rightDelim: rightDelim,
funcMap: template.FuncMap{
"getenv": env.Getenv,
"bool": typeconv.Bool,
@@ -81,8 +85,10 @@ func NewGomplate(data *Data) *Gomplate {
func runTemplate(c *cli.Context) error {
defer runCleanupHooks()
data := NewData(c.StringSlice("datasource"))
+ lDelim := c.String("left-delim")
+ rDelim := c.String("right-delim")
- g := NewGomplate(data)
+ g := NewGomplate(data, lDelim, rDelim)
g.RunTemplate(os.Stdin, os.Stdout)
return nil
}
@@ -99,6 +105,18 @@ func main() {
Name: "datasource, d",
Usage: "Data source in alias=URL form. Specify multiple times to add multiple sources.",
},
+ cli.StringFlag{
+ Name: "left-delim",
+ Usage: "Override the default left-delimiter `{{`",
+ Value: "{{",
+ EnvVar: "GOMPLATE_LEFT_DELIM",
+ },
+ cli.StringFlag{
+ Name: "right-delim",
+ Usage: "Override the default right-delimiter `}}`",
+ Value: "}}",
+ EnvVar: "GOMPLATE_RIGHT_DELIM",
+ },
}
err := app.Run(os.Args)
diff --git a/main_test.go b/main_test.go
index 773f34c6..5c2c925c 100644
--- a/main_test.go
+++ b/main_test.go
@@ -50,7 +50,7 @@ func TestBoolTemplates(t *testing.T) {
func TestEc2MetaTemplates(t *testing.T) {
createGomplate := func(status int, body string) (*Gomplate, *httptest.Server) {
server, ec2meta := aws.MockServer(status, body)
- return &Gomplate{template.FuncMap{"ec2meta": ec2meta.Meta}}, server
+ return &Gomplate{funcMap: template.FuncMap{"ec2meta": ec2meta.Meta}}, server
}
g, s := createGomplate(404, "")
@@ -142,3 +142,12 @@ func TestHasTemplate(t *testing.T) {
{{- end }}`
assert.Equal(t, "bar", testTemplate(g, tmpl))
}
+
+func TestCustomDelim(t *testing.T) {
+ g := &Gomplate{
+ leftDelim: "[",
+ rightDelim: "]",
+ funcMap: template.FuncMap{},
+ }
+ assert.Equal(t, "hi", testTemplate(g, `[print "hi"]`))
+}