44package markdown
55
66import (
7- "fmt"
8- "regexp"
9- "strings"
10- "sync"
11-
127 "code.gitea.io/gitea/modules/container"
138 "code.gitea.io/gitea/modules/markup"
149 "code.gitea.io/gitea/modules/markup/internal"
1510 "code.gitea.io/gitea/modules/setting"
16-
11+ "fmt"
1712 "github.com/yuin/goldmark/ast"
1813 east "github.com/yuin/goldmark/extension/ast"
1914 "github.com/yuin/goldmark/parser"
@@ -51,7 +46,7 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
5146
5247 tocList := make ([]Header , 0 , 20 )
5348 if rc .yamlNode != nil {
54- metaNode := rc .toMetaNode ()
49+ metaNode := rc .toMetaNode (g )
5550 if metaNode != nil {
5651 node .InsertBefore (node , firstChild , metaNode )
5752 }
@@ -112,11 +107,6 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
112107 }
113108}
114109
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-
120110// NewHTMLRenderer creates a HTMLRenderer to render in the gitea form.
121111func NewHTMLRenderer (renderInternal * internal.RenderInternal , opts ... html.Option ) renderer.NodeRenderer {
122112 r := & HTMLRenderer {
@@ -141,11 +131,11 @@ func (r *HTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
141131 reg .Register (ast .KindDocument , r .renderDocument )
142132 reg .Register (KindDetails , r .renderDetails )
143133 reg .Register (KindSummary , r .renderSummary )
144- reg .Register (KindIcon , r .renderIcon )
145134 reg .Register (ast .KindCodeSpan , r .renderCodeSpan )
146135 reg .Register (KindAttention , r .renderAttention )
147136 reg .Register (KindTaskCheckBoxListItem , r .renderTaskCheckBoxListItem )
148137 reg .Register (east .KindTaskCheckBox , r .renderTaskCheckBox )
138+ reg .Register (KindRawHTML , r .renderRawHTML )
149139}
150140
151141func (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
207197 return ast .WalkContinue , nil
208198}
209199
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 ) {
211201 if ! entering {
212202 return ast .WalkContinue , nil
213203 }
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 )))
231206 if err != nil {
232207 return ast .WalkStop , err
233208 }
234-
235209 return ast .WalkContinue , nil
236210}
0 commit comments