diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..729ecff --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "debug", + "program": "${workspaceFolder}", + "args":["-i", "Test.md", "-o", "Tmp.md"] + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index b7c4da5..2a156a8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # SpaceMarkdown -在 Markdown 文件的中英文之间插入空格。 \ No newline at end of file +在 Markdown 文件的中英文之间插入空格。 diff --git a/SpaceMarkdown.go b/SpaceMarkdown.go new file mode 100644 index 0000000..fc1707d --- /dev/null +++ b/SpaceMarkdown.go @@ -0,0 +1,107 @@ +package main + +import ( + "bufio" + "flag" + "fmt" + "log" + "os" + "regexp" +) + +func fileExists(file string) bool { + _, err := os.Stat(file) + if err == nil { + return true + } + if os.IsNotExist(err) { + return false + } + return false +} + +func fileOpen(file string, canCreate bool) (*os.File, bool) { + if fileExists(file) { + f, e := os.OpenFile(file, os.O_RDWR, 0666) + if nil != e { + return nil, false + } + return f, true + } else if canCreate { + f, e := os.OpenFile(file, os.O_RDWR|os.O_CREATE, 0666) + if nil != e { + return nil, false + } + return f, true + } else { + return nil, false + } +} + +func fileWrite(file *os.File, txt []string) { + for i := 0; i < len(txt); i++ { + file.WriteString(txt[i]) + } + file.Sync() +} + +func fileClose(file *os.File) { + file.Close() +} + +func insertSpace2Line(line string) string { + reg1 := regexp.MustCompile("([A-Za-z0-9?/,*])([\u4e00-\u9fa5])") + reg2 := regexp.MustCompile("([\u4e00-\u9fa5])([A-Za-z0-9?/,*])") + line = reg2.ReplaceAllString(reg1.ReplaceAllString(line, "$1 $2"), "$1 $2") + return line +} + +func SpacePipeline(file *os.File) []string { + var txt []string + file.Seek(0, os.SEEK_SET) + reader := bufio.NewReader(file) + for { + line, e := reader.ReadString('\n') + if nil != e { + break + } + line = insertSpace2Line(line) + txt = append(txt, line) + } + return txt +} + +func usage() { + fmt.Println("SpaceMarkdown") + fmt.Println("version 0.1.0") + flag.PrintDefaults() +} + +func main() { + var ifile, ofile string + var ifd, ofd *os.File + var ret bool + + flag.StringVar(&ifile, "i", "", "Input markdown file") + flag.StringVar(&ofile, "o", "", "Output markdown file") + + flag.Usage = usage + flag.Parse() + + if "" == ifile || "" == ofile { + usage() + return + } + ifd, ret = fileOpen(ifile, false) + if !ret { + log.Println("Can not open " + ifile) + } + ofd, ret = fileOpen(ofile, true) + if !ret { + log.Println("Can not open " + ofile) + } + + fileWrite(ofd, SpacePipeline(ifd)) + fileClose(ifd) + fileClose(ofd) +} diff --git a/Test.md b/Test.md new file mode 100644 index 0000000..f195536 --- /dev/null +++ b/Test.md @@ -0,0 +1,5 @@ +# Ldconfig 命令 + +ldconfig命令的用途主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig,此执行程序存放在/sbin目录下。 + +ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。