diff options
Diffstat (limited to 'tpl/tplimpl/template_ast_transformers_go1_10.go')
-rw-r--r-- | tpl/tplimpl/template_ast_transformers_go1_10.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tpl/tplimpl/template_ast_transformers_go1_10.go b/tpl/tplimpl/template_ast_transformers_go1_10.go new file mode 100644 index 000000000..4e2a34c9e --- /dev/null +++ b/tpl/tplimpl/template_ast_transformers_go1_10.go @@ -0,0 +1,68 @@ +// Copyright 2016 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !go1.11 + +package tplimpl + +import ( + "text/template/parse" +) + +// paramsKeysToLower is made purposely non-generic to make it not so tempting +// to do more of these hard-to-maintain AST transformations. +func (c *templateContext) paramsKeysToLower(n parse.Node) { + switch x := n.(type) { + case *parse.ListNode: + if x != nil { + c.paramsKeysToLowerForNodes(x.Nodes...) + } + case *parse.ActionNode: + c.paramsKeysToLowerForNodes(x.Pipe) + case *parse.IfNode: + c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList) + case *parse.WithNode: + c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList) + case *parse.RangeNode: + c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList) + case *parse.TemplateNode: + subTempl := c.getIfNotVisited(x.Name) + if subTempl != nil { + c.paramsKeysToLowerForNodes(subTempl.Root) + } + case *parse.PipeNode: + for i, elem := range x.Decl { + if len(x.Cmds) > i { + // maps $site => .Site etc. + c.decl[elem.Ident[0]] = x.Cmds[i].String() + } + } + + for _, cmd := range x.Cmds { + c.paramsKeysToLower(cmd) + } + + case *parse.CommandNode: + for _, elem := range x.Args { + switch an := elem.(type) { + case *parse.FieldNode: + c.updateIdentsIfNeeded(an.Ident) + case *parse.VariableNode: + c.updateIdentsIfNeeded(an.Ident) + case *parse.PipeNode: + c.paramsKeysToLower(an) + } + + } + } +} |