96 lines
1.5 KiB
Go
96 lines
1.5 KiB
Go
package cat
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"slices"
|
|
"strings"
|
|
)
|
|
|
|
type Cater map[string]string
|
|
|
|
func Path(paths ...string) (c Cater, err error) {
|
|
c = make(Cater)
|
|
var p os.FileInfo
|
|
|
|
for _, path := range paths {
|
|
p, err = os.Stat(path)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if p.IsDir() {
|
|
err = c.dir(path)
|
|
} else {
|
|
err = c.file(path)
|
|
}
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (c Cater) Ignored(ignore ignorer) Cater {
|
|
cat := make(Cater)
|
|
|
|
for name, content := range c {
|
|
if ignore.Ignore(name) {
|
|
continue
|
|
}
|
|
cat[name] = content
|
|
}
|
|
|
|
return cat
|
|
}
|
|
|
|
func (c Cater) ToString(delemiter string) string {
|
|
var sb strings.Builder
|
|
|
|
names := make([]string, 0, len(c))
|
|
for name := range c {
|
|
names = append(names, name)
|
|
}
|
|
|
|
slices.Sort(names)
|
|
|
|
for _, name := range names {
|
|
sb.WriteString(fmt.Sprintf(delemiter, name))
|
|
sb.WriteString(c[name])
|
|
}
|
|
|
|
return sb.String()
|
|
}
|
|
|
|
func (c Cater) ToMarkdown() string {
|
|
var sb strings.Builder
|
|
|
|
names := make([]string, 0, len(c))
|
|
for name := range c {
|
|
names = append(names, name)
|
|
}
|
|
|
|
slices.Sort(names)
|
|
|
|
for _, name := range names {
|
|
// write header
|
|
for range strings.Count(name, "/") + 1 {
|
|
sb.WriteString("#")
|
|
}
|
|
sb.WriteString(fmt.Sprintf(" %s\n\n", name))
|
|
|
|
splited := strings.Split(name, ".")
|
|
|
|
// write content
|
|
sb.WriteString(fmt.Sprintf("``` %s\n%s\n```\n\n", splited[len(splited)-1], c[name]))
|
|
}
|
|
|
|
return sb.String()
|
|
}
|
|
|
|
type ignorer interface {
|
|
// Ignore() returns true when the given path shall be Ignored.
|
|
Ignore(path string) bool
|
|
}
|