mirror of
https://github.com/celogeek/go-comic-converter.git
synced 2025-05-25 16:22:37 +02:00
add cover file use tree and don't skip any struct for file render fix toc render
54 lines
940 B
Go
54 lines
940 B
Go
package epub
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
type Tree struct {
|
|
Nodes map[string]*Node
|
|
}
|
|
|
|
type Node struct {
|
|
Value string
|
|
Children []*Node
|
|
}
|
|
|
|
func NewTree() *Tree {
|
|
return &Tree{map[string]*Node{
|
|
".": {".", []*Node{}},
|
|
}}
|
|
}
|
|
|
|
func (n *Tree) Root() *Node {
|
|
return n.Nodes["."]
|
|
}
|
|
|
|
func (n *Tree) Add(filename string) {
|
|
cn := n.Root()
|
|
cp := ""
|
|
for _, p := range strings.Split(filepath.Clean(filename), string(filepath.Separator)) {
|
|
cp = filepath.Join(cp, p)
|
|
if _, ok := n.Nodes[cp]; !ok {
|
|
n.Nodes[cp] = &Node{Value: p, Children: []*Node{}}
|
|
cn.Children = append(cn.Children, n.Nodes[cp])
|
|
}
|
|
cn = n.Nodes[cp]
|
|
}
|
|
}
|
|
|
|
func (n *Node) toString(indent string) string {
|
|
r := strings.Builder{}
|
|
if indent != "" {
|
|
r.WriteString(indent)
|
|
r.WriteString("- ")
|
|
r.WriteString(n.Value)
|
|
r.WriteString("\n")
|
|
}
|
|
indent += " "
|
|
for _, c := range n.Children {
|
|
r.WriteString(c.toString(indent))
|
|
}
|
|
return r.String()
|
|
}
|