浏览代码

:art: Improve HTML code block clipping for https://ld246.com https://github.com/siyuan-note/siyuan/issues/12678

Daniel 9 月之前
父节点
当前提交
169e6a5bd5
共有 1 个文件被更改,包括 19 次插入0 次删除
  1. 19 0
      kernel/api/extension.go

+ 19 - 0
kernel/api/extension.go

@@ -143,14 +143,33 @@ func extensionCopy(c *gin.Context) {
 				}
 
 				md = string(bodyData)
+				luteEngine.SetIndentCodeBlock(true) // 链滴支持缩进代码块,因此需要开启
 				tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
 				ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
 					if ast.NodeInlineMath == n.Type {
 						withMath = true
 						return ast.WalkStop
+					} else if ast.NodeCodeBlock == n.Type {
+						if !n.IsFencedCodeBlock {
+							// 将缩进代码块转换为围栏代码块
+							n.IsFencedCodeBlock = true
+							n.CodeBlockFenceChar = '`'
+							n.PrependChild(&ast.Node{Type: ast.NodeCodeBlockFenceInfoMarker})
+							n.PrependChild(&ast.Node{Type: ast.NodeCodeBlockFenceOpenMarker, Tokens: []byte("```"), CodeBlockFenceLen: 3})
+							n.LastChild.InsertAfter(&ast.Node{Type: ast.NodeCodeBlockFenceCloseMarker, Tokens: []byte("```"), CodeBlockFenceLen: 3})
+							code := n.ChildByType(ast.NodeCodeBlockCode)
+							if nil != code {
+								code.Tokens = bytes.TrimPrefix(code.Tokens, []byte("    "))
+								code.Tokens = bytes.ReplaceAll(code.Tokens, []byte("\n    "), []byte("\n"))
+								code.Tokens = bytes.TrimPrefix(code.Tokens, []byte("\t"))
+								code.Tokens = bytes.ReplaceAll(code.Tokens, []byte("\n\t"), []byte("\n"))
+							}
+						}
 					}
 					return ast.WalkContinue
 				})
+
+				md, _ = lute.FormatNodeSync(tree.Root, luteEngine.ParseOptions, luteEngine.RenderOptions)
 			}
 		}
 	}