Make Markdown fenced code block work with more syntaxes (#37154)

This commit is contained in:
wxiaoguang
2026-04-10 07:54:39 +08:00
committed by GitHub
parent c10a5b908a
commit 45c80bfec1
3 changed files with 53 additions and 0 deletions
@@ -0,0 +1,32 @@
// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package markdown
import (
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/text"
)
func (g *ASTTransformer) transformFencedCodeblock(v *ast.FencedCodeBlock, reader text.Reader) {
// * Some engines support a meta syntax for appending the filename after the language, separated by a colon
// * https://www.glukhov.org/documentation-tools/markdown/markdown-codeblocks/
// * Some engines support additional "options" after the language, separated by a space or comma: ```rust,ignore```
// * https://docs.readme.com/rdmd/docs/code-blocks
// * https://next-book.vercel.app/reference/fencedcode
if v.Info == nil {
return
}
info := v.Info.Segment.Value(reader.Source())
newEnd := -1
for i, b := range info {
if b == ' ' || b == ',' || b == ':' {
newEnd = i
break
}
}
if newEnd != -1 {
start := v.Info.Segment.Start
v.Info = ast.NewTextSegment(text.NewSegment(start, start+newEnd))
}
}