@@ -5,9 +5,6 @@ package markdown
55
66import (
77 "fmt"
8- "regexp"
9- "strings"
10- "sync"
118
129 "code.gitea.io/gitea/modules/container"
1310 "code.gitea.io/gitea/modules/markup"
@@ -51,7 +48,7 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
5148
5249 tocList := make ([]Header , 0 , 20 )
5350 if rc .yamlNode != nil {
54- metaNode := rc .toMetaNode ()
51+ metaNode := rc .toMetaNode (g )
5552 if metaNode != nil {
5653 node .InsertBefore (node , firstChild , metaNode )
5754 }
@@ -112,11 +109,6 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
112109 }
113110}
114111
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-
120112// NewHTMLRenderer creates a HTMLRenderer to render in the gitea form.
121113func NewHTMLRenderer (renderInternal * internal.RenderInternal , opts ... html.Option ) renderer.NodeRenderer {
122114 r := & HTMLRenderer {
@@ -141,11 +133,11 @@ func (r *HTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
141133 reg .Register (ast .KindDocument , r .renderDocument )
142134 reg .Register (KindDetails , r .renderDetails )
143135 reg .Register (KindSummary , r .renderSummary )
144- reg .Register (KindIcon , r .renderIcon )
145136 reg .Register (ast .KindCodeSpan , r .renderCodeSpan )
146137 reg .Register (KindAttention , r .renderAttention )
147138 reg .Register (KindTaskCheckBoxListItem , r .renderTaskCheckBoxListItem )
148139 reg .Register (east .KindTaskCheckBox , r .renderTaskCheckBox )
140+ reg .Register (KindRawHTML , r .renderRawHTML )
149141}
150142
151143func (r * HTMLRenderer ) renderDocument (w util.BufWriter , source []byte , node ast.Node , entering bool ) (ast.WalkStatus , error ) {
@@ -207,30 +199,14 @@ func (r *HTMLRenderer) renderSummary(w util.BufWriter, source []byte, node ast.N
207199 return ast .WalkContinue , nil
208200}
209201
210- func (r * HTMLRenderer ) renderIcon (w util.BufWriter , source []byte , node ast.Node , entering bool ) (ast.WalkStatus , error ) {
202+ func (r * HTMLRenderer ) renderRawHTML (w util.BufWriter , source []byte , node ast.Node , entering bool ) (ast.WalkStatus , error ) {
211203 if ! entering {
212204 return ast .WalkContinue , nil
213205 }
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 )
206+ n := node .(* RawHTML )
207+ _ , err := w .WriteString (string (r .renderInternal .ProtectSafeAttrs (n .rawHTML )))
231208 if err != nil {
232209 return ast .WalkStop , err
233210 }
234-
235211 return ast .WalkContinue , nil
236212}
0 commit comments