nori/decode.go

49 lines
976 B
Go

package nori
import (
"bytes"
"fmt"
"io"
"os"
"github.com/spf13/afero"
"github.com/suapapa/go_hangul/encoding/cp949"
)
func New() *Nori {
return &Nori{}
}
func FromFile(fp string) (*Nori, error) {
file, err := os.Open(fp)
if err != nil {
return nil, err
}
defer file.Close()
fs := afero.NewMemMapFs()
f, _ := fs.OpenFile("_", os.O_TRUNC|os.O_CREATE, 0o740)
io.Copy(f, file)
f.Seek(0, io.SeekStart)
return Decode(f)
}
func Decode(r io.ReadSeeker) (*Nori, error) {
nori := New()
err := nori.Decode(r)
return nori, err
}
func GetAnimationNames(n *Nori) (map[string]int, error) {
names := make(map[string]int, n.AnimationCount)
for i := range n.Animations {
anim := n.Animations[i]
title, codepageError := cp949.From(anim.Title[:])
if codepageError != nil {
return nil, fmt.Errorf("couldn't convert title of animation %d", i)
}
cleanTitle := string(bytes.SplitN(title[:], []byte{0}, 2)[0])
names[cleanTitle] = i
}
return names, nil
}