Files
pat/pkg/cat/cater.go
2025-05-07 14:30:59 +02:00

74 lines
1.1 KiB
Go

package cat
import (
"fmt"
"os"
"strings"
)
type Cater []entry
func Path(paths ...string) (c Cater, err error) {
c = make(Cater, 0, 10)
var p os.FileInfo
for _, path := range paths {
p, err = os.Stat(path)
if err != nil {
return
}
var e entry
if p.IsDir() {
e, err = c.dir(path)
} else {
e, err = c.file(path)
}
if err != nil {
return
}
c = append(c, e)
}
return
}
func (c Cater) Ignored(ignore ignorer) Cater {
cat := make(Cater, 0, len(c))
ok := func(e entry) bool {
return !ignore.Ignore(e.fqname)
}
for _, entry := range c {
cat = append(cat, entry.filter(ok))
}
return cat
}
func (c Cater) ToString(delemiter string) string {
var sb strings.Builder
var entries []entry
entries = c
for len(entries) > 0 {
n := make([]entry, 0, len(entries))
for _, e := range entries {
if len(e.children) > 0 {
n = append(n, e.children...)
continue
}
sb.WriteString(fmt.Sprintf(delemiter, e.fqname))
sb.WriteString(e.content)
}
entries = n
}
return sb.String()
}
type ignorer interface {
// Ignore() returns true when the given path shall be Ignored.
Ignore(path string) bool
}