Преглед изворни кода

Merge remote-tracking branch 'origin/dev' into dev

Vanessa пре 1 година
родитељ
комит
1e665b8c46
5 измењених фајлова са 57 додато и 11 уклоњено
  1. 0 0
      app/stage/protyle/js/lute/lute.min.js
  2. 52 6
      kernel/api/block_op.go
  3. 1 1
      kernel/go.mod
  4. 2 2
      kernel/go.sum
  5. 2 2
      kernel/model/file.go

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
app/stage/protyle/js/lute/lute.min.js


+ 52 - 6
kernel/api/block_op.go

@@ -17,6 +17,7 @@
 package api
 
 import (
+	"errors"
 	"net/http"
 
 	"github.com/88250/gulu"
@@ -221,7 +222,13 @@ func appendBlock(c *gin.Context) {
 	}
 	if "markdown" == dataType {
 		luteEngine := util.NewLute()
-		data = dataBlockDOM(data, luteEngine)
+		var err error
+		data, err = dataBlockDOM(data, luteEngine)
+		if nil != err {
+			ret.Code = -1
+			ret.Msg = "data block DOM failed: " + err.Error()
+			return
+		}
 	}
 
 	transactions := []*model.Transaction{
@@ -260,7 +267,13 @@ func prependBlock(c *gin.Context) {
 	}
 	if "markdown" == dataType {
 		luteEngine := util.NewLute()
-		data = dataBlockDOM(data, luteEngine)
+		var err error
+		data, err = dataBlockDOM(data, luteEngine)
+		if nil != err {
+			ret.Code = -1
+			ret.Msg = "data block DOM failed: " + err.Error()
+			return
+		}
 	}
 
 	transactions := []*model.Transaction{
@@ -315,7 +328,13 @@ func insertBlock(c *gin.Context) {
 
 	if "markdown" == dataType {
 		luteEngine := util.NewLute()
-		data = dataBlockDOM(data, luteEngine)
+		var err error
+		data, err = dataBlockDOM(data, luteEngine)
+		if nil != err {
+			ret.Code = -1
+			ret.Msg = "data block DOM failed: " + err.Error()
+			return
+		}
 	}
 
 	transactions := []*model.Transaction{
@@ -357,7 +376,13 @@ func updateBlock(c *gin.Context) {
 
 	luteEngine := util.NewLute()
 	if "markdown" == dataType {
-		data = dataBlockDOM(data, luteEngine)
+		var err error
+		data, err = dataBlockDOM(data, luteEngine)
+		if nil != err {
+			ret.Code = -1
+			ret.Msg = "data block DOM failed: " + err.Error()
+			return
+		}
 	}
 	tree := luteEngine.BlockDOM2Tree(data)
 	if nil == tree || nil == tree.Root || nil == tree.Root.FirstChild {
@@ -461,14 +486,35 @@ func broadcastTransactions(transactions []*model.Transaction) {
 	util.PushEvent(evt)
 }
 
-func dataBlockDOM(data string, luteEngine *lute.Lute) (ret string) {
+func dataBlockDOM(data string, luteEngine *lute.Lute) (ret string, err error) {
 	luteEngine.SetHTMLTag2TextMark(true) // API `/api/block/**` 无法使用 `<u>foo</u>` 与 `<kbd>bar</kbd>` 插入/更新行内元素 https://github.com/siyuan-note/siyuan/issues/6039
 
-	ret = luteEngine.Md2BlockDOM(data, true)
+	ret, tree := luteEngine.Md2BlockDOM(data, true)
 	if "" == ret {
 		// 使用 API 插入空字符串出现错误 https://github.com/siyuan-note/siyuan/issues/3931
 		blankParagraph := treenode.NewParagraph()
 		ret = luteEngine.RenderNodeBlockDOM(blankParagraph)
 	}
+
+	invalidID := ""
+	ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
+		if !entering {
+			return ast.WalkContinue
+		}
+
+		if "" != n.ID {
+			if !ast.IsNodeIDPattern(n.ID) {
+				invalidID = n.ID
+				return ast.WalkStop
+			}
+		}
+		return ast.WalkContinue
+	})
+
+	if "" != invalidID {
+		err = errors.New("found invalid ID [" + invalidID + "]")
+		ret = ""
+		return
+	}
 	return
 }

+ 1 - 1
kernel/go.mod

@@ -9,7 +9,7 @@ require (
 	github.com/88250/clipboard v0.1.5
 	github.com/88250/epub v0.0.0-20230830085737-c19055cd1f48
 	github.com/88250/gulu v1.2.3-0.20231209020950-b7b6994e395c
-	github.com/88250/lute v1.7.6-0.20240107075811-86795b72deef
+	github.com/88250/lute v1.7.6-0.20240111024801-7e083278df4e
 	github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c
 	github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1
 	github.com/ClarkThan/ahocorasick v0.0.0-20231011042242-30d1ef1347f4

+ 2 - 2
kernel/go.sum

@@ -10,8 +10,8 @@ github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950 h1:Pa5hMiBceT
 github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 github.com/88250/gulu v1.2.3-0.20231209020950-b7b6994e395c h1:Fas3hxqP33xA9KKDV50jUmppiiOukk5bdV00Hk5VSSk=
 github.com/88250/gulu v1.2.3-0.20231209020950-b7b6994e395c/go.mod h1:pTWnjt+6qUqNnP9xltswsJxgCBVu3C7eW09u48LWX0k=
-github.com/88250/lute v1.7.6-0.20240107075811-86795b72deef h1:gNcdJGPRlenISFYkJ3H1aE5X/GAad6cZIolLETR27+I=
-github.com/88250/lute v1.7.6-0.20240107075811-86795b72deef/go.mod h1:+wUqx/1kdFDbWtxn9LYJlaCOAeol2pjSO6w+WJTVQsg=
+github.com/88250/lute v1.7.6-0.20240111024801-7e083278df4e h1:fN0BYXgu8iqPO705kesomO3E/5cENwVLerwbYmMnTps=
+github.com/88250/lute v1.7.6-0.20240111024801-7e083278df4e/go.mod h1:+wUqx/1kdFDbWtxn9LYJlaCOAeol2pjSO6w+WJTVQsg=
 github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c h1:Dl/8S9iLyPMTElnWIBxmjaLiWrkI5P4a21ivwAn5pU0=
 github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c/go.mod h1:S5YT38L/GCjVjmB4PB84PymA1qfopjEhfhTNQilLpv4=
 github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1 h1:48T899JQDwyyRu9yXHePYlPdHtpJfrJEUGBMH3SMBWY=

+ 2 - 2
kernel/model/file.go

@@ -1009,7 +1009,7 @@ func CreateDocByMd(boxID, p, title, md string, sorts []string) (tree *parse.Tree
 	}
 
 	luteEngine := util.NewLute()
-	dom := luteEngine.Md2BlockDOM(md, false)
+	dom, _ := luteEngine.Md2BlockDOM(md, false)
 	tree, err = createDoc(box.ID, p, title, dom)
 	if nil != err {
 		return
@@ -1032,7 +1032,7 @@ func CreateWithMarkdown(boxID, hPath, md, parentID, id string) (retID string, er
 
 	WaitForWritingFiles()
 	luteEngine := util.NewLute()
-	dom := luteEngine.Md2BlockDOM(md, false)
+	dom, _ := luteEngine.Md2BlockDOM(md, false)
 	retID, err = createDocsByHPath(box.ID, hPath, dom, parentID, id)
 	WaitForWritingFiles()
 	return

Неке датотеке нису приказане због велике количине промена