From 58608d8db5d551283b23e48a2d661a3ec6829aa2 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 23 Nov 2025 11:09:21 +0800 Subject: [PATCH] :art: Improve HTML svg clipping https://github.com/siyuan-note/siyuan/issues/16413 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/import.go | 84 ++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 32 deletions(-) diff --git a/kernel/model/import.go b/kernel/model/import.go index 8563f05d2..99d5b8724 100644 --- a/kernel/model/import.go +++ b/kernel/model/import.go @@ -78,48 +78,42 @@ func HTML2Tree(htmlStr string, luteEngine *lute.Lute) (tree *parse.Tree, withMat return ast.WalkContinue } - if ast.NodeHTMLBlock == n.Type { - if bytes.HasPrefix(n.Tokens, []byte("
")) && bytes.Contains(n.Tokens, []byte("data:image/svg+xml;base64")) {
- matches := regexp.MustCompile(`(?sU)]*>(.*)
`).FindSubmatch(n.Tokens)
- if len(matches) >= 2 {
- n.Tokens = matches[1]
- }
- subTree := parse.Inline("", n.Tokens, luteEngine.ParseOptions)
- if nil != subTree && nil != subTree.Root && nil != subTree.Root.FirstChild {
- n.Type = ast.NodeParagraph
- var children []*ast.Node
- for c := subTree.Root.FirstChild.FirstChild; nil != c; c = c.Next {
- children = append(children, c)
+ switch n.Type {
+ case ast.NodeHTMLBlock:
+ if bytes.HasPrefix(n.Tokens, []byte("")) {
+ if bytes.Contains(n.Tokens, []byte("data:image/svg+xml;base64")) {
+ matches := regexp.MustCompile(`(?sU)]*>(.*)
`).FindSubmatch(n.Tokens)
+ if len(matches) >= 2 {
+ n.Tokens = matches[1]
}
- for _, c := range children {
- n.AppendChild(c)
+ subTree := parse.Inline("", n.Tokens, luteEngine.ParseOptions)
+ if nil != subTree && nil != subTree.Root && nil != subTree.Root.FirstChild {
+ n.Type = ast.NodeParagraph
+ var children []*ast.Node
+ for c := subTree.Root.FirstChild.FirstChild; nil != c; c = c.Next {
+ children = append(children, c)
+ }
+ for _, c := range children {
+ n.AppendChild(c)
+ }
}
+ } else if bytes.Contains(n.Tokens, []byte("