@@ -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