diff --git a/.gitignore b/.gitignore index 9b63f2c..2de44bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ *.json *.txt *.xml -kanji-merge* +rtk-merge* diff --git a/go.mod b/go.mod index 5b8104e..7b76224 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module git.foosoft.net/alex/rtk-merge go 1.21.8 + +require github.com/themoeway/jmdict-go v0.0.0-20230321060422-fa8f5d54f364 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..267eb0b --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/themoeway/jmdict-go v0.0.0-20230321060422-fa8f5d54f364 h1:JSSM5osTN5FCoj7uErWoMVY+IbDh+OG0aRJnKsxgngc= +github.com/themoeway/jmdict-go v0.0.0-20230321060422-fa8f5d54f364/go.mod h1:M9O+lJXOwrOqpN4VUv8Qkn1gsZ/SZaSAiF7nj0m1NZk= diff --git a/main.go b/main.go index d746616..30086b5 100644 --- a/main.go +++ b/main.go @@ -2,11 +2,15 @@ package main import ( "encoding/csv" + "errors" "flag" "fmt" "log" "os" "path/filepath" + "strings" + + "github.com/themoeway/jmdict-go" ) type ( @@ -36,6 +40,59 @@ func injectStories(table Table, path string) error { } func injectKanjidic(table Table, path string) error { + fp, err := os.Open(path) + if err != nil { + return err + } + defer fp.Close() + + kd, err := jmdict.LoadKanjidic(fp) + if err != nil { + return err + } + + for i, row := range table { + var found bool + for _, character := range kd.Characters { + if character.Literal != row[0] { + continue + } + + var ( + meanings []string + kunyomi []string + onyomi []string + ) + + for _, reading := range character.ReadingMeaning.Readings { + switch reading.Type { + case "ja_on": + onyomi = append(onyomi, reading.Value) + case "ja_kun": + kunyomi = append(kunyomi, reading.Value) + } + } + + for _, meaning := range character.ReadingMeaning.Meanings { + if meaning.Language == nil { + meanings = append(meanings, meaning.Meaning) + } + } + + const seperator = " " + row = append(row, strings.Join(meanings, seperator)) + row = append(row, strings.Join(kunyomi, seperator)) + row = append(row, strings.Join(onyomi, seperator)) + + table[i] = row + found = true + } + + if !found { + return errors.New("character not found") + } + } + return nil } @@ -57,6 +114,9 @@ func loadTable(path string) (Table, error) { for i := range table { table[i] = table[i][:3] + if len(table[i]) != 3 { + return nil, errors.New("unexpected column count") + } } return table, nil @@ -97,7 +157,7 @@ func main() { os.Exit(2) } - table, err := loadTable(os.Args[1]) + table, err := loadTable(args[0]) if err != nil { log.Fatal(err) } @@ -114,7 +174,7 @@ func main() { } } - if err := saveTable(os.Args[2], table); err != nil { + if err := saveTable(args[1], table); err != nil { log.Fatal(err) } }