init.go (3563B)
1 // Copyright 2017 The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package transform 15 16 import ( 17 "github.com/gohugoio/hugo/deps" 18 "github.com/gohugoio/hugo/tpl/internal" 19 ) 20 21 const name = "transform" 22 23 func init() { 24 f := func(d *deps.Deps) *internal.TemplateFuncsNamespace { 25 ctx := New(d) 26 27 ns := &internal.TemplateFuncsNamespace{ 28 Name: name, 29 Context: func(args ...any) (any, error) { return ctx, nil }, 30 } 31 32 ns.AddMethodMapping(ctx.Emojify, 33 []string{"emojify"}, 34 [][2]string{ 35 {`{{ "I :heart: Hugo" | emojify }}`, `I ❤️ Hugo`}, 36 }, 37 ) 38 39 ns.AddMethodMapping(ctx.Highlight, 40 []string{"highlight"}, 41 [][2]string{}, 42 ) 43 44 ns.AddMethodMapping(ctx.HTMLEscape, 45 []string{"htmlEscape"}, 46 [][2]string{ 47 { 48 `{{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | safeHTML}}`, 49 `Cathal Garvey & The Sunshine Band <cathal@foo.bar>`, 50 }, 51 { 52 `{{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>"}}`, 53 `Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;`, 54 }, 55 { 56 `{{ htmlEscape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | htmlUnescape | safeHTML }}`, 57 `Cathal Garvey & The Sunshine Band <cathal@foo.bar>`, 58 }, 59 }, 60 ) 61 62 ns.AddMethodMapping(ctx.HTMLUnescape, 63 []string{"htmlUnescape"}, 64 [][2]string{ 65 { 66 `{{ htmlUnescape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | safeHTML}}`, 67 `Cathal Garvey & The Sunshine Band <cathal@foo.bar>`, 68 }, 69 { 70 `{{"Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;" | htmlUnescape | htmlUnescape | safeHTML}}`, 71 `Cathal Garvey & The Sunshine Band <cathal@foo.bar>`, 72 }, 73 { 74 `{{"Cathal Garvey &amp; The Sunshine Band &lt;cathal@foo.bar&gt;" | htmlUnescape | htmlUnescape }}`, 75 `Cathal Garvey & The Sunshine Band <cathal@foo.bar>`, 76 }, 77 { 78 `{{ htmlUnescape "Cathal Garvey & The Sunshine Band <cathal@foo.bar>" | htmlEscape | safeHTML }}`, 79 `Cathal Garvey & The Sunshine Band <cathal@foo.bar>`, 80 }, 81 }, 82 ) 83 84 ns.AddMethodMapping(ctx.Markdownify, 85 []string{"markdownify"}, 86 [][2]string{ 87 {`{{ .Title | markdownify}}`, `<strong>BatMan</strong>`}, 88 }, 89 ) 90 91 ns.AddMethodMapping(ctx.Plainify, 92 []string{"plainify"}, 93 [][2]string{ 94 {`{{ plainify "Hello <strong>world</strong>, gophers!" }}`, `Hello world, gophers!`}, 95 }, 96 ) 97 98 ns.AddMethodMapping(ctx.Remarshal, 99 nil, 100 [][2]string{ 101 {`{{ "title = \"Hello World\"" | transform.Remarshal "json" | safeHTML }}`, "{\n \"title\": \"Hello World\"\n}\n"}, 102 }, 103 ) 104 105 ns.AddMethodMapping(ctx.Unmarshal, 106 []string{"unmarshal"}, 107 [][2]string{ 108 {`{{ "hello = \"Hello World\"" | transform.Unmarshal }}`, "map[hello:Hello World]"}, 109 {`{{ "hello = \"Hello World\"" | resources.FromString "data/greetings.toml" | transform.Unmarshal }}`, "map[hello:Hello World]"}, 110 }, 111 ) 112 113 return ns 114 } 115 116 internal.AddTemplateFuncsNamespace(f) 117 }