generated from ElnuDev/rust-project
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
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)
|
|
}
|
|
}
|