@@ -5,9 +5,6 @@ package markdown
5
5
6
6
import (
7
7
"fmt"
8
- "regexp"
9
- "strings"
10
- "sync"
11
8
12
9
"code.gitea.io/gitea/modules/container"
13
10
"code.gitea.io/gitea/modules/markup"
@@ -51,7 +48,7 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
51
48
52
49
tocList := make ([]Header , 0 , 20 )
53
50
if rc .yamlNode != nil {
54
- metaNode := rc .toMetaNode ()
51
+ metaNode := rc .toMetaNode (g )
55
52
if metaNode != nil {
56
53
node .InsertBefore (node , firstChild , metaNode )
57
54
}
@@ -111,11 +108,6 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
111
108
}
112
109
}
113
110
114
- // it is copied from old code, which is quite doubtful whether it is correct
115
- var reValidIconName = sync .OnceValue (func () * regexp.Regexp {
116
- return regexp .MustCompile (`^[-\w]+$` ) // old: regexp.MustCompile("^[a-z ]+$")
117
- })
118
-
119
111
// NewHTMLRenderer creates a HTMLRenderer to render in the gitea form.
120
112
func NewHTMLRenderer (renderInternal * internal.RenderInternal , opts ... html.Option ) renderer.NodeRenderer {
121
113
r := & HTMLRenderer {
@@ -140,11 +132,11 @@ func (r *HTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
140
132
reg .Register (ast .KindDocument , r .renderDocument )
141
133
reg .Register (KindDetails , r .renderDetails )
142
134
reg .Register (KindSummary , r .renderSummary )
143
- reg .Register (KindIcon , r .renderIcon )
144
135
reg .Register (ast .KindCodeSpan , r .renderCodeSpan )
145
136
reg .Register (KindAttention , r .renderAttention )
146
137
reg .Register (KindTaskCheckBoxListItem , r .renderTaskCheckBoxListItem )
147
138
reg .Register (east .KindTaskCheckBox , r .renderTaskCheckBox )
139
+ reg .Register (KindRawHTML , r .renderRawHTML )
148
140
}
149
141
150
142
func (r * HTMLRenderer ) renderDocument (w util.BufWriter , source []byte , node ast.Node , entering bool ) (ast.WalkStatus , error ) {
@@ -206,30 +198,14 @@ func (r *HTMLRenderer) renderSummary(w util.BufWriter, source []byte, node ast.N
206
198
return ast .WalkContinue , nil
207
199
}
208
200
209
- func (r * HTMLRenderer ) renderIcon (w util.BufWriter , source []byte , node ast.Node , entering bool ) (ast.WalkStatus , error ) {
201
+ func (r * HTMLRenderer ) renderRawHTML (w util.BufWriter , source []byte , node ast.Node , entering bool ) (ast.WalkStatus , error ) {
210
202
if ! entering {
211
203
return ast .WalkContinue , nil
212
204
}
213
-
214
- n := node .(* Icon )
215
-
216
- name := strings .TrimSpace (strings .ToLower (string (n .Name )))
217
-
218
- if len (name ) == 0 {
219
- // skip this
220
- return ast .WalkContinue , nil
221
- }
222
-
223
- if ! reValidIconName ().MatchString (name ) {
224
- // skip this
225
- return ast .WalkContinue , nil
226
- }
227
-
228
- // FIXME: the "icon xxx" is from Fomantic UI, it's really questionable whether it still works correctly
229
- err := r .renderInternal .FormatWithSafeAttrs (w , `<i class="icon %s"></i>` , name )
205
+ n := node .(* RawHTML )
206
+ _ , err := w .WriteString (string (r .renderInternal .ProtectSafeAttrs (n .rawHTML )))
230
207
if err != nil {
231
208
return ast .WalkStop , err
232
209
}
233
-
234
210
return ast .WalkContinue , nil
235
211
}
0 commit comments