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 }