func.go
1package document
2
3func Filter(d DocumentContent, f func(Node) bool) []Node {
4 return filter(d.Main, f)
5}
6
7func filter(nodes []Node, f func(Node) bool) []Node {
8 out := make([]Node, 0)
9 for _, node := range nodes {
10 if f(node) {
11 out = append(out, node)
12 }
13 if node.Children != nil {
14 out = append(out, filter(node.Children, f)...)
15 }
16 }
17 return out
18}
19
20func FlatMap[T any](d DocumentContent, f func(Node) T) []T {
21 return flatMap(d.Main, f)
22}
23
24func flatMap[T any](nodes []Node, f func(Node) T) []T {
25 out := make([]T, 0)
26 for _, node := range nodes {
27 out = append(out, f(node))
28 if node.Children != nil {
29 out = append(out, flatMap(node.Children, f)...)
30 }
31 }
32 return out
33}