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