-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
98 lines (89 loc) · 2.1 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main
import (
"bytes"
"fmt"
"github.com/gookit/goutil/arrutil"
"github.com/gookit/goutil/fsutil"
markdown2 "github.com/shurcooL/markdownfmt/markdown"
"gopkg.in/yaml.v3"
"os"
"path/filepath"
"strings"
)
var confs *Conf
var outFolderName string
var oriFolderName string
var err error
func main() {
confs, err = readConf()
if err != nil {
return
}
exists := fsutil.IsDir(confs.FileDir)
if !exists {
panic("the dir is not exist in conf, please check it")
}
fsutil.QuietRemove(filepath.Dir(confs.FileDir))
oriFolderName = filepath.Base(confs.FileDir)
outFolderName = oriFolderName + "_processed"
//fsutil.Mkdir(filepath.Dir(confs.FileDir)+outFolderName, 0755)
err := filepath.WalkDir(confs.FileDir, visit)
if err != nil {
return
}
return
}
func visit(path string, d os.DirEntry, err error) error {
if d.IsDir() && arrutil.Contains(confs.Excludes, filepath.Base(path)) {
return filepath.SkipDir
} else if filepath.Ext(path) == ".md" {
handleContent(path)
}
return err
}
func handleContent(path string) {
file, err := os.ReadFile(path)
if err != nil {
fmt.Println("read file fail", err)
return
}
process, err := markdown2.Process(path, file, nil)
if err != nil {
fmt.Println("markdown format fail", err)
return
}
filename := strings.Replace(path, oriFolderName, outFolderName, 1)
err = os.MkdirAll(filepath.Dir(filename), 0755)
if err != nil {
fmt.Println("create new Dir fail", err)
return
}
var buf = bytes.Buffer{}
buf.Write([]byte("#" + strings.ReplaceAll(filepath.Base(filepath.Dir(path)), " ", "") + "\n"))
buf.Write(process)
err = os.WriteFile(filename, buf.Bytes(), 0755)
if err != nil {
fmt.Println("write file fail", err)
recover()
return
}
}
func readConf() (*Conf, error) {
var conf = Conf{}
executable, err := os.Executable()
if err != nil {
return nil, err
}
dir := filepath.Dir(executable)
file, err := os.ReadFile(dir + "./conf.yml")
if err != nil {
fmt.Println("read conf file fail", err)
return nil, err
}
err = yaml.Unmarshal(file, &conf)
if err != nil {
fmt.Println("parse conf fail", err)
return nil, err
}
return &conf, nil
}