Want to contribute? Fork me on Codeberg.org!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.3 KiB

package main
import (
"encoding/json"
"fmt"
"os"
"strings"
"foosoft.net/projects/jmdict"
)
const filetype = ".xml"
func open() (*os.File, error) {
files, err := os.ReadDir(".")
if err != nil {
return nil, err
}
for _, file := range files {
if !file.IsDir() && strings.HasSuffix(file.Name(), filetype) {
file, err := os.Open(file.Name())
if err != nil {
return nil, err
}
return file, nil
}
}
return nil, nil
}
func loadJmdict() (*jmdict.Jmdict, string, error) {
reader, err := open()
if err != nil {
return nil, "", err
} else if reader == nil {
return nil, "", nil
}
dict, _, err := jmdict.LoadJmdict(reader)
if err != nil {
return nil, "", err
}
return &dict, reader.Name(), nil
}
func dictToJson(dict *jmdict.Jmdict, pretty bool) ([]byte, error) {
if pretty {
return json.MarshalIndent(dict, " ", "\t")
} else {
return json.Marshal(dict)
}
}
func main() {
dict, filename, err := loadJmdict()
if err != nil {
fmt.Println(err)
return
} else if dict == nil {
fmt.Println("Couldn't find any XML files in directory!")
return
}
json, err := dictToJson(dict, true)
if err != nil {
fmt.Println(err)
return
}
err = os.WriteFile(filename[:len(filename)-len(filetype)]+".json", json, 0666)
if err != nil {
fmt.Println(err)
}
}