Start making jmdict library, write Go loader

main
Elnu 10 months ago
parent 22bbc83d83
commit ace46c56f4

4
Cargo.lock generated

@ -5,3 +5,7 @@ version = 3
[[package]]
name = "jichanorg-dict"
version = "0.1.0"
[[package]]
name = "jichanorg-jmdict"
version = "0.1.0"

@ -1,2 +1,2 @@
[workspace]
members = ["dict"]
members = ["dict", "jmdict"]

@ -0,0 +1,8 @@
[package]
name = "jichanorg-jmdict"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

@ -0,0 +1,2 @@
JMdict*.xml
JMdict*.json

@ -0,0 +1,15 @@
#!/usr/bin/env bash
# https://www.edrdg.org/wiki/index.php/JMdict-EDICT_Dictionary_Project#CURRENT_VERSION_&_DOWNLOAD
wget http://ftp.edrdg.org/pub/Nihongo/JMdict.gz
# Extract and delete archive
gzip -d JMdict.gz
# Get date
date=`grep -m 1 -oE '<!-- JMdict created: [0-9]{4}-[0-9]{2}-[0-9]{2} -->' JMdict | sed -E 's/<!-- JMdict created: (.+) -->/\1/'`
rm -f JMdict*.xml
# Add XML extension
mv JMdict JMdict-${date}.xml

@ -0,0 +1,5 @@
module git.elnu.com/ElnuDev/jichanorg-rs/jmdict/loader
go 1.20
require foosoft.net/projects/jmdict v0.0.0-20220714211640-cc9bc30b68a3

@ -0,0 +1,2 @@
foosoft.net/projects/jmdict v0.0.0-20220714211640-cc9bc30b68a3 h1:zjHGpgUR2WP3pf6NVZM38OKYNse0GjovCW2v23V72PQ=
foosoft.net/projects/jmdict v0.0.0-20220714211640-cc9bc30b68a3/go.mod h1:ZrjLCcE7ZrND28ZOSGYMd78tL+Dffiv2g+NjOMKgnew=

@ -0,0 +1,71 @@
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)
}
}

@ -0,0 +1,11 @@
{ pkgs ? import <nixpkgs> {}}:
pkgs.mkShell {
buildInputs = with pkgs; [
go
gopls
];
shellHook = ''
export PATH="$HOME/go/bin:$PATH"
'';
}
Loading…
Cancel
Save