Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
Daniel 2025-12-20 11:44:24 +08:00
parent 6f2ace0c28
commit c07efea8de
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
18 changed files with 33 additions and 33 deletions

File diff suppressed because one or more lines are too long

View file

@ -703,7 +703,7 @@ func updateBlock(c *gin.Context) {
}
tree.Root.FirstChild.SetIALAttr("id", id)
data = luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions)
data = luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
transactions = []*model.Transaction{
{
DoOperations: []*model.Operation{
@ -888,7 +888,7 @@ func batchUpdateBlock(c *gin.Context) {
}
tree.Root.FirstChild.SetIALAttr("id", id)
data = luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions)
data = luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
ops = append(ops, &model.Operation{
Action: "update",
ID: id,

View file

@ -189,7 +189,7 @@ func html2BlockDOM(c *gin.Context) {
parse.TextMarks2Inlines(tree) // 先将 TextMark 转换为 Inlines https://github.com/siyuan-note/siyuan/issues/13056
parse.NestedInlines2FlattedSpansHybrid(tree, false)
renderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
output := renderer.Render()
ret.Data = gulu.Str.FromBytes(output)
}

View file

@ -207,7 +207,7 @@ func DocIAL(absPath string) (ret map[string]string) {
func TreeSize(tree *parse.Tree) (size uint64) {
luteEngine := util.NewLute() // 不关注用户的自定义解析渲染选项
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
return uint64(len(renderer.Render()))
}
@ -248,7 +248,7 @@ func prepareWriteTree(tree *parse.Tree) (data []byte, filePath string, err error
filePath = filepath.Join(util.DataDir, tree.Box, tree.Path)
tree.Root.SetIALAttr("type", "doc")
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
data = renderer.Render()
data = bytes.ReplaceAll(data, []byte("\u0000"), []byte(""))
@ -301,7 +301,7 @@ func parseJSON2Tree(boxID, p string, jsonData []byte, luteEngine *lute.Lute) (re
}
if needFix {
renderer := render.NewJSONRenderer(ret, luteEngine.RenderOptions)
renderer := render.NewJSONRenderer(ret, luteEngine.RenderOptions, luteEngine.ParseOptions)
data := renderer.Render()
if !util.UseSingleLineSave {

View file

@ -8,7 +8,7 @@ require (
github.com/88250/epub v0.0.0-20230830085737-c19055cd1f48
github.com/88250/go-humanize v0.0.0-20240424102817-4f78fac47ea7
github.com/88250/gulu v1.2.3-0.20251208021445-f93f2666eaac
github.com/88250/lute v1.7.7-0.20251219034325-ad8fd6d52d5d
github.com/88250/lute v1.7.7-0.20251220034050-68d6a9cbb663
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1
github.com/ClarkThan/ahocorasick v0.0.0-20231011042242-30d1ef1347f4
github.com/ConradIrwin/font v0.2.1

View file

@ -14,8 +14,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.20251208021445-f93f2666eaac h1:EC80pY8zyR0gbL8ZLIBB4IPG/ia3ZHScrR/xt8zU8qU=
github.com/88250/gulu v1.2.3-0.20251208021445-f93f2666eaac/go.mod h1:IQ5dXW9CjVmx6B7OfK1Y4ZBKTPMe9q1AkVoLGGzRbS8=
github.com/88250/lute v1.7.7-0.20251219034325-ad8fd6d52d5d h1:UWocFwIjw+FUvSozydxsOu09CtetIS2tF7fU8trmsuE=
github.com/88250/lute v1.7.7-0.20251219034325-ad8fd6d52d5d/go.mod h1:WYyUw//5yVw9BJnoVjx7rI/3szsISxNZCYGOqTIrV0o=
github.com/88250/lute v1.7.7-0.20251220034050-68d6a9cbb663 h1:8P4LlD5TvvfbI2PJKiDSO0M6m48NXmyo1hmiVjkhdcs=
github.com/88250/lute v1.7.7-0.20251220034050-68d6a9cbb663/go.mod h1:WYyUw//5yVw9BJnoVjx7rI/3szsISxNZCYGOqTIrV0o=
github.com/88250/pdfcpu v0.3.14-0.20250424122812-f10e8d9d8d46 h1:Bq1JsDfVbHKUxNL/B2JXd8cC/1h6aFjrlXpGycnh0Hk=
github.com/88250/pdfcpu v0.3.14-0.20250424122812-f10e8d9d8d46/go.mod h1:fVfOloBzs2+W2VJCCbq60XIxc3yJHAZ0Gahv1oO0gyI=
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1 h1:48T899JQDwyyRu9yXHePYlPdHtpJfrJEUGBMH3SMBWY=

View file

@ -1028,7 +1028,7 @@ func GetBlockKramdown(id, mode string) (ret string) {
ret = treenode.ExportNodeStdMd(root, luteEngine)
} else {
tree.Root = root
formatRenderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
formatRenderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
ret = string(formatRenderer.Render())
}
return

View file

@ -468,7 +468,7 @@ func GetCloudShorthand(id string) (ret map[string]interface{}, err error) {
luteEngine.SetFootnotes(true)
tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
luteEngine.RenderOptions.ProtyleMarkNetImg = false
content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
ret["shorthandContent"] = content
return
}
@ -522,7 +522,7 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
shorthand["shorthandMd"] = md
tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
luteEngine.RenderOptions.ProtyleMarkNetImg = false
content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
shorthand["shorthandContent"] = content
}
return

View file

@ -640,7 +640,7 @@ func ExportPreview(id string, fillCSSVar bool) (retStdHTML string) {
fillThemeStyleVar(tree)
}
luteEngine.RenderOptions.ProtyleMarkNetImg = false
retStdHTML = luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
retStdHTML = luteEngine.ProtylePreview(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
if footnotesDefBlock := tree.Root.ChildByType(ast.NodeFootnotesDefBlock); nil != footnotesDefBlock {
footnotesDefBlock.Unlink()
@ -872,11 +872,11 @@ func ExportMarkdownHTML(id, savePath string, docx, merge bool) (name, dom string
})
if docx {
renderer := render.NewProtyleExportDocxRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewProtyleExportDocxRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
output := renderer.Render()
dom = gulu.Str.FromBytes(output)
} else {
dom = luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
dom = luteEngine.ProtylePreview(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
}
return
}
@ -1048,7 +1048,7 @@ func ExportHTML(id, savePath string, pdf, image, keepFold, merge bool) (name, do
// 使用属性 `data-export-html` 导出时 `<style></style>` 标签丢失 https://github.com/siyuan-note/siyuan/issues/6228
luteEngine.SetSanitize(false)
renderer := render.NewProtyleExportRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewProtyleExportRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
dom = gulu.Str.FromBytes(renderer.Render())
return
}
@ -2268,7 +2268,7 @@ func exportMarkdownContent0(id string, tree *parse.Tree, cloudAssetsBase string,
luteEngine.SetUnorderedListMarker("-")
luteEngine.SetImgTag(imgTag)
renderer := render.NewProtyleExportMdRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewProtyleExportMdRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
ret = gulu.Str.FromBytes(renderer.Render())
return
}

View file

@ -737,7 +737,7 @@ func GetDoc(startID, endID, id string, index int, query string, queryTypes map[s
}
luteEngine.RenderOptions.NodeIndexStart = index
dom = luteEngine.Tree2BlockDOM(subTree, luteEngine.RenderOptions)
dom = luteEngine.Tree2BlockDOM(subTree, luteEngine.RenderOptions, luteEngine.ParseOptions)
if 1 > len(keywords) {
keywords = []string{}

View file

@ -61,13 +61,13 @@ func AutoSpace(rootID string) (err error) {
addBlockIALNodes(tree, false)
// 第一次格式化为了合并相邻的文本节点
formatRenderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
formatRenderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
md := formatRenderer.Render()
newTree := parseKTree(md)
newTree.Root.Spec = treenode.CurrentSpec
// 第二次格式化启用自动空格
luteEngine.SetAutoSpace(true)
formatRenderer = render.NewFormatRenderer(newTree, luteEngine.RenderOptions)
formatRenderer = render.NewFormatRenderer(newTree, luteEngine.RenderOptions, luteEngine.ParseOptions)
md = formatRenderer.Render()
newTree = parseKTree(md)
newTree.Root.Spec = treenode.CurrentSpec

View file

@ -219,10 +219,10 @@ func GetDocHistoryContent(historyPath, keyword string, highlight bool) (id, root
luteEngine.RenderOptions.ProtyleContenteditable = false
if isLargeDoc {
util.PushMsg(Conf.Language(36), 5000)
formatRenderer := render.NewFormatRenderer(historyTree, luteEngine.RenderOptions)
formatRenderer := render.NewFormatRenderer(historyTree, luteEngine.RenderOptions, luteEngine.ParseOptions)
content = gulu.Str.FromBytes(formatRenderer.Render())
} else {
content = luteEngine.Tree2BlockDOM(historyTree, luteEngine.RenderOptions)
content = luteEngine.Tree2BlockDOM(historyTree, luteEngine.RenderOptions, luteEngine.ParseOptions)
}
return
}

View file

@ -60,7 +60,7 @@ func HTML2Markdown(htmlStr string, luteEngine *lute.Lute) (markdown string, with
tree, withMath := HTML2Tree(htmlStr, luteEngine)
var formatted []byte
renderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
for nodeType, rendererFunc := range luteEngine.HTML2MdRendererFuncs {
renderer.ExtRendererFuncs[nodeType] = rendererFunc
}
@ -419,7 +419,7 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
util.PushEndlessProgress(Conf.language(73) + " " + fmt.Sprintf(Conf.language(70), tree.Root.IALAttr("title")))
syPath := filepath.Join(unzipRootPath, tree.Path)
treenode.UpgradeSpec(tree)
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions)
renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
data := renderer.Render()
if !util.UseSingleLineSave {

View file

@ -143,7 +143,7 @@ func refreshParentDocInfo(tree *parse.Tree) {
}
luteEngine := lute.New()
renderer := render.NewJSONRenderer(parentTree, luteEngine.RenderOptions)
renderer := render.NewJSONRenderer(parentTree, luteEngine.RenderOptions, luteEngine.ParseOptions)
data := renderer.Render()
refreshDocInfo0(parentTree, uint64(len(data)))
}

View file

@ -177,7 +177,7 @@ func fillBlockRefCount(nodes []*ast.Node) {
func renderBlockDOMByNodes(nodes []*ast.Node, luteEngine *lute.Lute) string {
tree := &parse.Tree{Root: &ast.Node{Type: ast.NodeDocument}, Context: &parse.Context{ParseOption: luteEngine.ParseOptions}}
blockRenderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions)
blockRenderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
for _, node := range nodes {
ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus {
if entering {

View file

@ -250,10 +250,10 @@ func OpenRepoSnapshotDoc(fileID string) (title, content string, displayInText bo
luteEngine.RenderOptions.ProtyleContenteditable = false
if displayInText {
util.PushMsg(Conf.Language(36), 5000)
formatRenderer := render.NewFormatRenderer(snapshotTree, luteEngine.RenderOptions)
formatRenderer := render.NewFormatRenderer(snapshotTree, luteEngine.RenderOptions, luteEngine.ParseOptions)
content = gulu.Str.FromBytes(formatRenderer.Render())
} else {
content = luteEngine.Tree2BlockDOM(snapshotTree, luteEngine.RenderOptions)
content = luteEngine.Tree2BlockDOM(snapshotTree, luteEngine.RenderOptions, luteEngine.ParseOptions)
}
} else {
displayInText = true

View file

@ -229,7 +229,7 @@ func DocSaveAsTemplate(id, name string, overwrite bool) (code int, err error) {
}
luteEngine := NewLute()
formatRenderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
formatRenderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
md := formatRenderer.Render()
// 单独渲染根节点的 IAL
@ -488,7 +488,7 @@ func RenderTemplate(p, id string, preview bool) (tree *parse.Tree, dom string, e
}
luteEngine := NewLute()
dom = luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions)
dom = luteEngine.Tree2BlockDOM(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
return
}

View file

@ -256,7 +256,7 @@ func renderCoverContentBlock(node *ast.Node, luteEngine *lute.Lute) string {
func renderBlockDOMByNode(node *ast.Node, luteEngine *lute.Lute) string {
tree := &parse.Tree{Root: &ast.Node{Type: ast.NodeDocument}, Context: &parse.Context{ParseOption: luteEngine.ParseOptions}}
blockRenderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions)
blockRenderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions, luteEngine.ParseOptions)
blockRenderer.Options.ProtyleContenteditable = false
resetIDs := map[string]string{}
ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus {