🎨 The browser extension supports CSDN formula https://github.com/siyuan-note/siyuan/issues/5624

This commit is contained in:
Daniel 2024-05-21 00:04:56 +08:00
parent dfc8d39a68
commit d3754bd630
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
5 changed files with 34 additions and 9 deletions

View file

@ -121,10 +121,12 @@ func extensionCopy(c *gin.Context) {
uploaded[oName] = "assets/" + fName
}
luteEngine := util.NewStdLute()
md, _ := model.HTML2Markdown(dom)
md, withMath, _ := model.HTML2Markdown(dom)
md = strings.TrimSpace(md)
luteEngine := util.NewStdLute()
if withMath {
luteEngine.SetInlineMath(true)
}
var unlinks []*ast.Node
tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
@ -153,7 +155,8 @@ func extensionCopy(c *gin.Context) {
md, _ = lute.FormatNodeSync(tree.Root, luteEngine.ParseOptions, luteEngine.RenderOptions)
ret.Data = map[string]interface{}{
"md": md,
"md": md,
"withMath": withMath,
}
ret.Msg = model.Conf.Language(72)
}

View file

@ -677,7 +677,13 @@ func createDocWithMd(c *gin.Context) {
hPath = "/" + hPath
}
id, err := model.CreateWithMarkdown(notebook, hPath, markdown, parentID, id)
withMath := false
withMathArg := arg["withMath"]
if nil != withMathArg {
withMath = withMathArg.(bool)
}
id, err := model.CreateWithMarkdown(notebook, hPath, markdown, parentID, id, withMath)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()

View file

@ -57,13 +57,17 @@ func html2BlockDOM(c *gin.Context) {
}
dom := arg["dom"].(string)
markdown, err := model.HTML2Markdown(dom)
markdown, withMath, err := model.HTML2Markdown(dom)
if nil != err {
ret.Data = "Failed to convert"
return
}
luteEngine := util.NewLute()
if withMath {
luteEngine.SetInlineMath(true)
}
var unlinks []*ast.Node
tree := parse.Parse("", []byte(markdown), luteEngine.ParseOptions)
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {

View file

@ -1138,7 +1138,7 @@ func CreateDocByMd(boxID, p, title, md string, sorts []string) (tree *parse.Tree
return
}
func CreateWithMarkdown(boxID, hPath, md, parentID, id string) (retID string, err error) {
func CreateWithMarkdown(boxID, hPath, md, parentID, id string, withMath bool) (retID string, err error) {
createDocLock.Lock()
defer createDocLock.Unlock()
@ -1150,6 +1150,9 @@ func CreateWithMarkdown(boxID, hPath, md, parentID, id string) (retID string, er
WaitForWritingFiles()
luteEngine := util.NewLute()
if withMath {
luteEngine.SetInlineMath(true)
}
dom := luteEngine.Md2BlockDOM(md, false)
retID, err = createDocsByHPath(box.ID, hPath, dom, parentID, id)
WaitForWritingFiles()

View file

@ -55,12 +55,21 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func HTML2Markdown(htmlStr string) (markdown string, err error) {
func HTML2Markdown(htmlStr string) (markdown string, withMath bool, err error) {
assetDirPath := filepath.Join(util.DataDir, "assets")
luteEngine := util.NewLute()
tree := luteEngine.HTML2Tree(htmlStr)
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
if !entering || ast.NodeLinkDest != n.Type {
if !entering {
return ast.WalkContinue
}
if ast.NodeInlineMath == n.Type {
withMath = true
return ast.WalkContinue
}
if ast.NodeLinkDest != n.Type {
return ast.WalkContinue
}