mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-19 16:10:12 +01:00
🎨 The browser extension supports CSDN formula https://github.com/siyuan-note/siyuan/issues/5624
This commit is contained in:
parent
dfc8d39a68
commit
d3754bd630
5 changed files with 34 additions and 9 deletions
|
|
@ -121,10 +121,12 @@ func extensionCopy(c *gin.Context) {
|
||||||
uploaded[oName] = "assets/" + fName
|
uploaded[oName] = "assets/" + fName
|
||||||
}
|
}
|
||||||
|
|
||||||
luteEngine := util.NewStdLute()
|
md, withMath, _ := model.HTML2Markdown(dom)
|
||||||
md, _ := model.HTML2Markdown(dom)
|
|
||||||
md = strings.TrimSpace(md)
|
md = strings.TrimSpace(md)
|
||||||
|
luteEngine := util.NewStdLute()
|
||||||
|
if withMath {
|
||||||
|
luteEngine.SetInlineMath(true)
|
||||||
|
}
|
||||||
var unlinks []*ast.Node
|
var unlinks []*ast.Node
|
||||||
tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
|
tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
|
||||||
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||||
|
|
@ -154,6 +156,7 @@ func extensionCopy(c *gin.Context) {
|
||||||
md, _ = lute.FormatNodeSync(tree.Root, luteEngine.ParseOptions, luteEngine.RenderOptions)
|
md, _ = lute.FormatNodeSync(tree.Root, luteEngine.ParseOptions, luteEngine.RenderOptions)
|
||||||
ret.Data = map[string]interface{}{
|
ret.Data = map[string]interface{}{
|
||||||
"md": md,
|
"md": md,
|
||||||
|
"withMath": withMath,
|
||||||
}
|
}
|
||||||
ret.Msg = model.Conf.Language(72)
|
ret.Msg = model.Conf.Language(72)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -677,7 +677,13 @@ func createDocWithMd(c *gin.Context) {
|
||||||
hPath = "/" + hPath
|
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 {
|
if nil != err {
|
||||||
ret.Code = -1
|
ret.Code = -1
|
||||||
ret.Msg = err.Error()
|
ret.Msg = err.Error()
|
||||||
|
|
|
||||||
|
|
@ -57,13 +57,17 @@ func html2BlockDOM(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
dom := arg["dom"].(string)
|
dom := arg["dom"].(string)
|
||||||
markdown, err := model.HTML2Markdown(dom)
|
markdown, withMath, err := model.HTML2Markdown(dom)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
ret.Data = "Failed to convert"
|
ret.Data = "Failed to convert"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
luteEngine := util.NewLute()
|
luteEngine := util.NewLute()
|
||||||
|
if withMath {
|
||||||
|
luteEngine.SetInlineMath(true)
|
||||||
|
}
|
||||||
|
|
||||||
var unlinks []*ast.Node
|
var unlinks []*ast.Node
|
||||||
tree := parse.Parse("", []byte(markdown), luteEngine.ParseOptions)
|
tree := parse.Parse("", []byte(markdown), luteEngine.ParseOptions)
|
||||||
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||||
|
|
|
||||||
|
|
@ -1138,7 +1138,7 @@ func CreateDocByMd(boxID, p, title, md string, sorts []string) (tree *parse.Tree
|
||||||
return
|
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()
|
createDocLock.Lock()
|
||||||
defer createDocLock.Unlock()
|
defer createDocLock.Unlock()
|
||||||
|
|
||||||
|
|
@ -1150,6 +1150,9 @@ func CreateWithMarkdown(boxID, hPath, md, parentID, id string) (retID string, er
|
||||||
|
|
||||||
WaitForWritingFiles()
|
WaitForWritingFiles()
|
||||||
luteEngine := util.NewLute()
|
luteEngine := util.NewLute()
|
||||||
|
if withMath {
|
||||||
|
luteEngine.SetInlineMath(true)
|
||||||
|
}
|
||||||
dom := luteEngine.Md2BlockDOM(md, false)
|
dom := luteEngine.Md2BlockDOM(md, false)
|
||||||
retID, err = createDocsByHPath(box.ID, hPath, dom, parentID, id)
|
retID, err = createDocsByHPath(box.ID, hPath, dom, parentID, id)
|
||||||
WaitForWritingFiles()
|
WaitForWritingFiles()
|
||||||
|
|
|
||||||
|
|
@ -55,12 +55,21 @@ import (
|
||||||
"github.com/siyuan-note/siyuan/kernel/util"
|
"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")
|
assetDirPath := filepath.Join(util.DataDir, "assets")
|
||||||
luteEngine := util.NewLute()
|
luteEngine := util.NewLute()
|
||||||
tree := luteEngine.HTML2Tree(htmlStr)
|
tree := luteEngine.HTML2Tree(htmlStr)
|
||||||
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
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
|
return ast.WalkContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue