2021-07-17 06:26:40 +03:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
md "github.com/nikitavoloboev/markdown-parser"
|
|
|
|
"io/fs"
|
|
|
|
"io/ioutil"
|
|
|
|
"path/filepath"
|
2021-07-17 06:32:47 +03:00
|
|
|
"strings"
|
2021-07-17 06:26:40 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
type Link struct {
|
|
|
|
Source string
|
|
|
|
Target string
|
|
|
|
Text string
|
|
|
|
}
|
|
|
|
|
2021-07-17 06:32:47 +03:00
|
|
|
func trim(source, prefix, suffix string) string {
|
|
|
|
return strings.TrimPrefix(strings.TrimSuffix(source, suffix), prefix)
|
|
|
|
}
|
|
|
|
|
|
|
|
// parse single file for links
|
|
|
|
func parse(dir, pathPrefix string) []Link {
|
2021-07-17 06:26:40 +03:00
|
|
|
// read file
|
|
|
|
bytes, err := ioutil.ReadFile(dir)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// parse md
|
|
|
|
var links []Link
|
2021-07-17 06:32:47 +03:00
|
|
|
fmt.Printf("%s \n", trim(dir, pathPrefix, ".md"))
|
2021-07-17 06:26:40 +03:00
|
|
|
for text, target := range md.GetAllLinks(string(bytes)) {
|
2021-07-17 06:32:47 +03:00
|
|
|
fmt.Printf(" %s -> %s \n", text, target)
|
2021-07-17 06:26:40 +03:00
|
|
|
links = append(links, Link{
|
2021-07-17 06:32:47 +03:00
|
|
|
Source: trim(dir, pathPrefix, ".md"),
|
2021-07-17 06:26:40 +03:00
|
|
|
Target: target,
|
|
|
|
Text: text,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return links
|
|
|
|
}
|
|
|
|
|
2021-07-17 06:32:47 +03:00
|
|
|
// recursively walk directory and return all files with given extension
|
2021-07-17 06:26:40 +03:00
|
|
|
func find(root, ext string) {
|
|
|
|
filepath.WalkDir(root, func(s string, d fs.DirEntry, e error) error {
|
|
|
|
if e != nil {
|
|
|
|
return e
|
|
|
|
}
|
|
|
|
if filepath.Ext(d.Name()) == ext {
|
2021-07-17 06:32:47 +03:00
|
|
|
parse(s, root)
|
2021-07-17 06:26:40 +03:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
find("../www/content", ".md")
|
|
|
|
}
|