Browse Source

优化Markdown导入

Minho 7 years ago
parent
commit
74df816f38
1 changed files with 31 additions and 0 deletions
  1. 31 0
      models/BookModel.go

+ 31 - 0
models/BookModel.go

@@ -438,6 +438,7 @@ func (book *Book)ImportBook(zipPath string) error {
 				if err != nil {
 					return err
 				}
+				//处理图片
 				doc.Markdown = re.ReplaceAllStringFunc(string(markdown), func(image string) string {
 
 					images := re.FindAllSubmatch([]byte(image), -1);
@@ -487,6 +488,36 @@ func (book *Book)ImportBook(zipPath string) error {
 					imageUrl = strings.Replace(strings.TrimSuffix(image, originalImageUrl+")")+imageUrl+")", "\\", "/", -1)
 					return imageUrl
 				})
+
+				linkRegexp := regexp.MustCompile(`\[(.*?)\]\((.*?)\)`)
+
+				doc.Markdown = linkRegexp.ReplaceAllStringFunc(doc.Markdown, func(link string) string {
+					links := linkRegexp.FindAllStringSubmatch(link,-1)
+					originalLink := links[0][2];
+
+					linkPath,err := filepath.Abs(filepath.Join(filepath.Dir(path),originalLink))
+					if err == nil {
+						//如果本地存在该链接
+						if filetil.FileExists(linkPath) {
+							ext := filepath.Ext(linkPath)
+							//如果链接是Markdown文件,则生成文档标识,否则,将目标文件复制到项目目录
+							if strings.EqualFold(ext ,".md") || strings.EqualFold(ext , ".markdown" ) {
+								docIdentify := strings.Replace(strings.TrimPrefix(linkPath, tempPath+"/"), "/", "-", -1)
+
+								if ok, err := regexp.MatchString(`[a-z]+[a-zA-Z0-9_.\-]*$`, docIdentify); !ok || err != nil {
+									docIdentify = "import-" + docIdentify
+								}
+								link = strings.TrimSuffix(link,originalLink + ")") + conf.URLFor("DocumentController.Read",":key",book.Identify,":id",docIdentify) + ")"
+							}else{
+								//filetil.CopyFile(linkPath,)
+							}
+						}
+					}
+
+					return link
+				})
+
+
 				doc.Content = string(blackfriday.Run([]byte(doc.Markdown)))
 				doc.Release = doc.Content
 				doc.Version = time.Now().Unix()