32 lines
665 B
Go
32 lines
665 B
Go
package decoders
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"git.max-richter.dev/max/marka/parser/matcher"
|
|
"git.max-richter.dev/max/marka/template"
|
|
)
|
|
|
|
func List(input string, block template.Block) (value any, error error) {
|
|
blocks, err := template.CompileTemplate(block.ListTemplate)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot extract blocks: %w", err)
|
|
}
|
|
|
|
var out []any
|
|
|
|
for line := range strings.SplitSeq(strings.TrimSuffix(input, "\n"), "\n") {
|
|
matches := matcher.MatchBlocksFuzzy(line, blocks, 0.3)
|
|
|
|
res, err := Parse(matches)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not match blocks: %w", err)
|
|
}
|
|
|
|
out = append(out, res)
|
|
}
|
|
|
|
return out, nil
|
|
}
|