diff --git a/kernel/api/block_op.go b/kernel/api/block_op.go index 155db9006..2e8578e53 100644 --- a/kernel/api/block_op.go +++ b/kernel/api/block_op.go @@ -648,7 +648,7 @@ func dataBlockDOM(data string, luteEngine *lute.Lute) (ret string, err error) { ret, tree := luteEngine.Md2BlockDOMTree(data, true) if "" == ret { // 使用 API 插入空字符串出现错误 https://github.com/siyuan-note/siyuan/issues/3931 - blankParagraph := treenode.NewParagraph() + blankParagraph := treenode.NewParagraph("") ret = luteEngine.RenderNodeBlockDOM(blankParagraph) } diff --git a/kernel/api/lute.go b/kernel/api/lute.go index 4a8d3ebfd..dea10fc0e 100644 --- a/kernel/api/lute.go +++ b/kernel/api/lute.go @@ -77,7 +77,7 @@ func html2BlockDOM(c *gin.Context) { } if ast.NodeListItem == n.Type && nil == n.FirstChild { - newNode := treenode.NewParagraph() + newNode := treenode.NewParagraph("") n.AppendChild(newNode) n.SetIALAttr("updated", util.TimeFromID(newNode.ID)) return ast.WalkSkipChildren @@ -101,7 +101,7 @@ func html2BlockDOM(c *gin.Context) { row := head.FirstChild if nil != row.FirstChild && nil == row.FirstChild.Next { cell := row.FirstChild - p := treenode.NewParagraph() + p := treenode.NewParagraph("") var contents []*ast.Node for c := cell.FirstChild; nil != c; c = c.Next { contents = append(contents, c) diff --git a/kernel/filesys/json_parser.go b/kernel/filesys/json_parser.go index cac8a8bb4..5f9405e32 100644 --- a/kernel/filesys/json_parser.go +++ b/kernel/filesys/json_parser.go @@ -85,7 +85,7 @@ func ParseJSON(jsonData []byte, options *parse.Options) (ret *parse.Tree, needFi if nil == ret.Root.FirstChild { // 如果是空文档的话挂一个空段落上去 - newP := treenode.NewParagraph() + newP := treenode.NewParagraph("") ret.Root.AppendChild(newP) ret.Root.SetIALAttr("updated", newP.ID[:14]) } diff --git a/kernel/filesys/tree.go b/kernel/filesys/tree.go index ccc3d7371..4ace7d50f 100644 --- a/kernel/filesys/tree.go +++ b/kernel/filesys/tree.go @@ -223,7 +223,7 @@ func prepareWriteTree(tree *parse.Tree) (data []byte, filePath string, err error luteEngine := util.NewLute() // 不关注用户的自定义解析渲染选项 if nil == tree.Root.FirstChild { - newP := treenode.NewParagraph() + newP := treenode.NewParagraph("") tree.Root.AppendChild(newP) tree.Root.SetIALAttr("updated", util.TimeFromID(newP.ID)) treenode.UpsertBlockTree(tree) diff --git a/kernel/model/block.go b/kernel/model/block.go index 2b9675ac3..1a41f0b4a 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -395,7 +395,7 @@ func SwapBlockRef(refID, defID string, includeChildren bool) (err error) { refreshUpdated(defNode) refreshUpdated(refNode) - refPivot := treenode.NewParagraph() + refPivot := treenode.NewParagraph("") refNode.InsertBefore(refPivot) if ast.NodeListItem == defNode.Type { diff --git a/kernel/model/box.go b/kernel/model/box.go index 066b4a4de..390f6935f 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -496,7 +496,7 @@ func parseKTree(kramdown []byte) (ret *parse.Tree) { func normalizeTree(tree *parse.Tree) (yfmRootID, yfmTitle, yfmUpdated string) { if nil == tree.Root.FirstChild { - tree.Root.AppendChild(treenode.NewParagraph()) + tree.Root.AppendChild(treenode.NewParagraph("")) } var unlinks []*ast.Node diff --git a/kernel/model/export_merge.go b/kernel/model/export_merge.go index 1956518fb..a54d879e9 100644 --- a/kernel/model/export_merge.go +++ b/kernel/model/export_merge.go @@ -46,7 +46,7 @@ func mergeSubDocs(rootTree *parse.Tree) (ret *parse.Tree, err error) { insertPoint = rootTree.Root.FirstChild if nil == insertPoint { // 如果文档为空,则创建一个空段落作为插入点 - insertPoint = treenode.NewParagraph() + insertPoint = treenode.NewParagraph("") rootTree.Root.AppendChild(insertPoint) } } diff --git a/kernel/model/file.go b/kernel/model/file.go index b65909b71..e3b481ba6 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -1870,7 +1870,7 @@ func createDoc(boxID, p, title, dom string) (tree *parse.Tree, err error) { updated := util.TimeFromID(id) tree.Root.KramdownIAL = [][]string{{"id", id}, {"title", html.EscapeAttrVal(title)}, {"updated", updated}} if nil == tree.Root.FirstChild { - tree.Root.AppendChild(treenode.NewParagraph()) + tree.Root.AppendChild(treenode.NewParagraph("")) } // 如果段落块中仅包含一个 mp3/mp4 超链接,则将其转换为音视频块 diff --git a/kernel/model/heading.go b/kernel/model/heading.go index ca5e418ff..4f96b537f 100644 --- a/kernel/model/heading.go +++ b/kernel/model/heading.go @@ -195,7 +195,7 @@ func Doc2Heading(srcID, targetID string, after bool) (srcTreeBox, srcTreePath st if "" != tagIAL && 0 < len(tags) { // 带标签的文档块转换为标题块时将标签移动到标题块下方 https://github.com/siyuan-note/siyuan/issues/6550 - tagPara := treenode.NewParagraph() + tagPara := treenode.NewParagraph("") for i, tag := range tags { if "" == tag { continue @@ -365,7 +365,7 @@ func Heading2Doc(srcHeadingID, targetBoxID, targetPath string) (srcRootBlockID, headingNode.Unlink() srcTree.Root.SetIALAttr("updated", util.CurrentTimeSecondsStr()) if nil == srcTree.Root.FirstChild { - srcTree.Root.AppendChild(treenode.NewParagraph()) + srcTree.Root.AppendChild(treenode.NewParagraph("")) } treenode.RemoveBlockTreesByRootID(srcTree.ID) if err = indexWriteTreeUpsertQueue(srcTree); err != nil { diff --git a/kernel/model/import.go b/kernel/model/import.go index 3e5fb96c1..2c2aa9c43 100644 --- a/kernel/model/import.go +++ b/kernel/model/import.go @@ -1137,7 +1137,7 @@ func imgHtmlBlock2InlineImg(tree *parse.Tree) { alt := domAttrValue(htmlImg, "alt") title := domAttrValue(htmlImg, "title") - p := &ast.Node{Type: ast.NodeParagraph, ID: n.ID} + p := treenode.NewParagraph(n.ID) img := &ast.Node{Type: ast.NodeImage} p.AppendChild(img) img.AppendChild(&ast.Node{Type: ast.NodeBang}) diff --git a/kernel/model/listitem.go b/kernel/model/listitem.go index 69af99e83..b3d26c007 100644 --- a/kernel/model/listitem.go +++ b/kernel/model/listitem.go @@ -73,7 +73,7 @@ func ListItem2Doc(srcListItemID, targetBoxID, targetPath string) (srcRootBlockID children = append(children, c) } if 1 > len(children) { - newNode := treenode.NewParagraph() + newNode := treenode.NewParagraph("") children = append(children, newNode) } @@ -97,7 +97,7 @@ func ListItem2Doc(srcListItemID, targetBoxID, targetPath string) (srcRootBlockID } srcTree.Root.SetIALAttr("updated", util.CurrentTimeSecondsStr()) if nil == srcTree.Root.FirstChild { - srcTree.Root.AppendChild(treenode.NewParagraph()) + srcTree.Root.AppendChild(treenode.NewParagraph("")) } treenode.RemoveBlockTreesByRootID(srcTree.ID) if err = indexWriteTreeUpsertQueue(srcTree); err != nil { diff --git a/kernel/model/template.go b/kernel/model/template.go index 469508005..7d7dc5c81 100644 --- a/kernel/model/template.go +++ b/kernel/model/template.go @@ -341,9 +341,9 @@ func RenderTemplate(p, id string, preview bool) (tree *parse.Tree, dom string, e }) for _, n := range nodesNeedAppendChild { if ast.NodeBlockquote == n.Type { - n.FirstChild.InsertAfter(treenode.NewParagraph()) + n.FirstChild.InsertAfter(treenode.NewParagraph("")) } else { - n.AppendChild(treenode.NewParagraph()) + n.AppendChild(treenode.NewParagraph("")) } } for _, n := range unlinks { diff --git a/kernel/treenode/tree.go b/kernel/treenode/tree.go index 70caf1b18..bceb4399a 100644 --- a/kernel/treenode/tree.go +++ b/kernel/treenode/tree.go @@ -107,8 +107,11 @@ func RootChildIDs(rootID string) (ret []string) { return } -func NewParagraph() (ret *ast.Node) { - newID := ast.NewNodeID() +func NewParagraph(id string) (ret *ast.Node) { + newID := id + if "" == newID { + newID = ast.NewNodeID() + } ret = &ast.Node{ID: newID, Type: ast.NodeParagraph} ret.SetIALAttr("id", newID) ret.SetIALAttr("updated", newID[:14])