@@ -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 }
@@ -111,11 +108,6 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
111108 }
112109}
113110
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-
119111// NewHTMLRenderer creates a HTMLRenderer to render in the gitea form.
120112func NewHTMLRenderer (renderInternal * internal.RenderInternal , opts ... html.Option ) renderer.NodeRenderer {
121113 r := & HTMLRenderer {
@@ -140,11 +132,11 @@ func (r *HTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
140132 reg .Register (ast .KindDocument , r .renderDocument )
141133 reg .Register (KindDetails , r .renderDetails )
142134 reg .Register (KindSummary , r .renderSummary )
143- reg .Register (KindIcon , r .renderIcon )
144135 reg .Register (ast .KindCodeSpan , r .renderCodeSpan )
145136 reg .Register (KindAttention , r .renderAttention )
146137 reg .Register (KindTaskCheckBoxListItem , r .renderTaskCheckBoxListItem )
147138 reg .Register (east .KindTaskCheckBox , r .renderTaskCheckBox )
139+ reg .Register (KindRawHTML , r .renderRawHTML )
148140}
149141
150142func (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
206198 return ast .WalkContinue , nil
207199}
208200
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 ) {
210202 if ! entering {
211203 return ast .WalkContinue , nil
212204 }
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 )))
230207 if err != nil {
231208 return ast .WalkStop , err
232209 }
233-
234210 return ast .WalkContinue , nil
235211}
0 commit comments