瀏覽代碼

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

Vanessa 7 月之前
父節點
當前提交
1f0db03f4a
共有 3 個文件被更改,包括 40 次插入22 次删除
  1. 15 7
      kernel/api/extension.go
  2. 6 1
      kernel/api/lute.go
  3. 19 14
      kernel/model/import.go

+ 15 - 7
kernel/api/extension.go

@@ -123,7 +123,12 @@ func extensionCopy(c *gin.Context) {
 	}
 
 	luteEngine := util.NewLute()
-	luteEngine.SetHTMLTag2TextMark(true)
+	luteEngine.SetSup(true)
+	luteEngine.SetSub(true)
+	luteEngine.SetMark(true)
+	luteEngine.SetGFMStrikethrough(true)
+	luteEngine.SetInlineAsterisk(true)
+	luteEngine.SetInlineUnderscore(true)
 	var md string
 	var withMath bool
 	if nil != form.Value["href"] {
@@ -175,16 +180,19 @@ func extensionCopy(c *gin.Context) {
 		}
 	}
 
+	var tree *parse.Tree
 	if "" == md {
-		md, withMath, _ = model.HTML2Markdown(dom, luteEngine)
+		tree, withMath = model.HTML2Tree(dom, luteEngine)
+		if nil == tree {
+			md, withMath, _ = model.HTML2Markdown(dom, luteEngine)
+			if withMath {
+				luteEngine.SetInlineMath(true)
+			}
+			tree = parse.Parse("", []byte(md), luteEngine.ParseOptions)
+		}
 	}
 
-	md = strings.TrimSpace(md)
-	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 {
 		if !entering {
 			return ast.WalkContinue

+ 6 - 1
kernel/api/lute.go

@@ -58,7 +58,12 @@ func html2BlockDOM(c *gin.Context) {
 
 	dom := arg["dom"].(string)
 	luteEngine := util.NewLute()
-	luteEngine.SetHTMLTag2TextMark(true)
+	luteEngine.SetSup(true)
+	luteEngine.SetSub(true)
+	luteEngine.SetMark(true)
+	luteEngine.SetGFMStrikethrough(true)
+	luteEngine.SetInlineAsterisk(true)
+	luteEngine.SetInlineUnderscore(true)
 	markdown, withMath, err := model.HTML2Markdown(dom, luteEngine)
 	if err != nil {
 		ret.Data = "Failed to convert"

+ 19 - 14
kernel/model/import.go

@@ -54,8 +54,21 @@ import (
 )
 
 func HTML2Markdown(htmlStr string, luteEngine *lute.Lute) (markdown string, withMath bool, err error) {
+	tree, withMath := HTML2Tree(htmlStr, luteEngine)
+
+	var formatted []byte
+	renderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
+	for nodeType, rendererFunc := range luteEngine.HTML2MdRendererFuncs {
+		renderer.ExtRendererFuncs[nodeType] = rendererFunc
+	}
+	formatted = renderer.Render()
+	markdown = gulu.Str.FromBytes(formatted)
+	return
+}
+
+func HTML2Tree(htmlStr string, luteEngine *lute.Lute) (tree *parse.Tree, withMath bool) {
 	assetDirPath := filepath.Join(util.DataDir, "assets")
-	tree := luteEngine.HTML2Tree(htmlStr)
+	tree = luteEngine.HTML2Tree(htmlStr)
 	ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
 		if !entering {
 			return ast.WalkContinue
@@ -79,19 +92,11 @@ func HTML2Markdown(htmlStr string, luteEngine *lute.Lute) (markdown string, with
 
 		dest := n.TokensStr()
 		if strings.HasPrefix(dest, "data:image") && strings.Contains(dest, ";base64,") {
-			processBase64Img(n, dest, assetDirPath, err)
+			processBase64Img(n, dest, assetDirPath)
 			return ast.WalkContinue
 		}
 		return ast.WalkContinue
 	})
-
-	var formatted []byte
-	renderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
-	for nodeType, rendererFunc := range luteEngine.HTML2MdRendererFuncs {
-		renderer.ExtRendererFuncs[nodeType] = rendererFunc
-	}
-	formatted = renderer.Render()
-	markdown = gulu.Str.FromBytes(formatted)
 	return
 }
 
@@ -836,7 +841,7 @@ func ImportFromLocalPath(boxID, localPath string, toPath string) (err error) {
 				}
 
 				if strings.HasPrefix(dest, "data:image") && strings.Contains(dest, ";base64,") {
-					processBase64Img(n, dest, assetDirPath, err)
+					processBase64Img(n, dest, assetDirPath)
 					return ast.WalkContinue
 				}
 
@@ -953,7 +958,7 @@ func ImportFromLocalPath(boxID, localPath string, toPath string) (err error) {
 			}
 
 			if strings.HasPrefix(dest, "data:image") && strings.Contains(dest, ";base64,") {
-				processBase64Img(n, dest, assetDirPath, err)
+				processBase64Img(n, dest, assetDirPath)
 				return ast.WalkContinue
 			}
 
@@ -1046,7 +1051,7 @@ func parseStdMd(markdown []byte) (ret *parse.Tree, yfmRootID, yfmTitle, yfmUpdat
 	return
 }
 
-func processBase64Img(n *ast.Node, dest string, assetDirPath string, err error) {
+func processBase64Img(n *ast.Node, dest string, assetDirPath string) {
 	base64TmpDir := filepath.Join(util.TempDir, "base64")
 	os.MkdirAll(base64TmpDir, 0755)
 
@@ -1110,7 +1115,7 @@ func processBase64Img(n *ast.Node, dest string, assetDirPath string, err error)
 	tmpFile.Close()
 
 	assetTargetPath := filepath.Join(assetDirPath, name)
-	if err = filelock.Copy(tmp, assetTargetPath); err != nil {
+	if err := filelock.Copy(tmp, assetTargetPath); err != nil {
 		logging.LogErrorf("copy asset from [%s] to [%s] failed: %s", tmp, assetTargetPath, err)
 		return
 	}