diff --git a/Cargo.lock b/Cargo.lock index 2786253..585b40b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,3 +5,7 @@ version = 3 [[package]] name = "jichanorg-dict" version = "0.1.0" + +[[package]] +name = "jichanorg-jmdict" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index c035b6d..7166974 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,2 +1,2 @@ [workspace] -members = ["dict"] +members = ["dict", "jmdict"] diff --git a/jmdict/Cargo.toml b/jmdict/Cargo.toml new file mode 100644 index 0000000..7b56a85 --- /dev/null +++ b/jmdict/Cargo.toml @@ -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] diff --git a/jmdict/loader/.envrc b/jmdict/loader/.envrc new file mode 100644 index 0000000..65326bb --- /dev/null +++ b/jmdict/loader/.envrc @@ -0,0 +1 @@ +use nix \ No newline at end of file diff --git a/jmdict/loader/.gitignore b/jmdict/loader/.gitignore new file mode 100644 index 0000000..acf1448 --- /dev/null +++ b/jmdict/loader/.gitignore @@ -0,0 +1,2 @@ +JMdict*.xml +JMdict*.json \ No newline at end of file diff --git a/jmdict/loader/fetch.sh b/jmdict/loader/fetch.sh new file mode 100644 index 0000000..f072956 --- /dev/null +++ b/jmdict/loader/fetch.sh @@ -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 | sed -E 's//\1/'` + +rm -f JMdict*.xml + +# Add XML extension +mv JMdict JMdict-${date}.xml diff --git a/jmdict/loader/go.mod b/jmdict/loader/go.mod new file mode 100644 index 0000000..6bf4666 --- /dev/null +++ b/jmdict/loader/go.mod @@ -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 diff --git a/jmdict/loader/go.sum b/jmdict/loader/go.sum new file mode 100644 index 0000000..fb4292f --- /dev/null +++ b/jmdict/loader/go.sum @@ -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= diff --git a/jmdict/loader/main.go b/jmdict/loader/main.go new file mode 100644 index 0000000..4fa15aa --- /dev/null +++ b/jmdict/loader/main.go @@ -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) + } +} diff --git a/jmdict/loader/shell.nix b/jmdict/loader/shell.nix new file mode 100644 index 0000000..6688eae --- /dev/null +++ b/jmdict/loader/shell.nix @@ -0,0 +1,11 @@ +{ pkgs ? import {}}: + +pkgs.mkShell { + buildInputs = with pkgs; [ + go + gopls + ]; + shellHook = '' + export PATH="$HOME/go/bin:$PATH" + ''; +} diff --git a/jmdict/src/lib.rs b/jmdict/src/lib.rs new file mode 100644 index 0000000..e69de29