From 35d230b565fcd4fd63f742b356312dbc72cb6e24 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sat, 5 Nov 2016 23:24:57 -0700 Subject: [PATCH] Combined dictionary export --- common.go | 89 ++++++++++++++++++++++++++++++----------------------- edict.go | 1 + enamdict.go | 1 + kanjidic.go | 1 + 4 files changed, 54 insertions(+), 38 deletions(-) diff --git a/common.go b/common.go index 2b3094d..038b8af 100644 --- a/common.go +++ b/common.go @@ -111,7 +111,7 @@ func (kanji dbKanjiList) crush() [][]string { return results } -func writeDb(outputDir, title string, records [][]string, entities map[string]string, pretty bool) error { +func writeDb(outputDir, title string, termRecords [][]string, kanjiRecords [][]string, entities map[string]string, pretty bool) error { const DB_VERSION = 1 const BANK_STRIDE = 50000 @@ -123,27 +123,63 @@ func writeDb(outputDir, title string, records [][]string, entities map[string]st return json.Marshal(obj) } - var db struct { - Title string `json:"title"` - Version int `json:"version"` - Banks int `json:"banks"` - Entities map[string]string `json:"entities"` - } + writeDbRecords := func(prefix string, records [][]string) (int, error) { + recordCount := len(records) + bankCount := 0 - recordCount := len(records) + for i := 0; i < recordCount; i += BANK_STRIDE { + indexSrc := i + indexDst := i + BANK_STRIDE + if indexDst > recordCount { + indexDst = recordCount + } - db.Title = title - db.Version = 0 - db.Entities = entities - db.Banks = recordCount / BANK_STRIDE - if recordCount%BANK_STRIDE > 0 { - db.Banks += 1 + bytes, err := marshalJson(records[indexSrc:indexDst], pretty) + if err != nil { + return 0, err + } + + fp, err := os.Create(path.Join(outputDir, fmt.Sprintf("%s_bank_%d.json", prefix, i/BANK_STRIDE+1))) + if err != nil { + return 0, err + } + defer fp.Close() + + if _, err = fp.Write(bytes); err != nil { + return 0, err + } + + bankCount += 1 + } + + return bankCount, nil } if err := os.MkdirAll(outputDir, 0755); err != nil { return err } + var err error + var db struct { + Title string `json:"title"` + Version int `json:"version"` + Entities map[string]string `json:"entities"` + TermBanks int `json:"termBanks"` + KanjiBanks int `json:"kanjiBanks"` + } + + db.Title = title + db.Version = DB_VERSION + db.Entities = entities + + if db.TermBanks, err = writeDbRecords("term", termRecords); err != nil { + return err + } + + if db.KanjiBanks, err = writeDbRecords("kanji", kanjiRecords); err != nil { + return err + } + bytes, err := marshalJson(db, pretty) if err != nil { return err @@ -155,33 +191,10 @@ func writeDb(outputDir, title string, records [][]string, entities map[string]st } defer fp.Close() - if _, err = fp.Write(bytes); err != nil { + if _, err := fp.Write(bytes); err != nil { return err } - for i := 0; i < recordCount; i += BANK_STRIDE { - indexSrc := i - indexDst := i + BANK_STRIDE - if indexDst > recordCount { - indexDst = recordCount - } - - bytes, err := marshalJson(records[indexSrc:indexDst], pretty) - if err != nil { - return err - } - - fp, err := os.Create(path.Join(outputDir, fmt.Sprintf("bank_%d.json", i/BANK_STRIDE+1))) - if err != nil { - return err - } - defer fp.Close() - - if _, err = fp.Write(bytes); err != nil { - return err - } - } - return nil } diff --git a/edict.go b/edict.go index 6d8e7c9..864ea30 100644 --- a/edict.go +++ b/edict.go @@ -108,6 +108,7 @@ func exportJmdictDb(outputDir, title string, reader io.Reader, flags int) error outputDir, title, terms.crush(), + nil, entities, flags&flagPretty == flagPretty, ) diff --git a/enamdict.go b/enamdict.go index 9cadcc3..4162dbe 100644 --- a/enamdict.go +++ b/enamdict.go @@ -92,6 +92,7 @@ func exportJmnedictDb(outputDir, title string, reader io.Reader, flags int) erro outputDir, title, terms.crush(), + nil, entities, flags&flagPretty == flagPretty, ) diff --git a/kanjidic.go b/kanjidic.go index 359bc17..a39ce04 100644 --- a/kanjidic.go +++ b/kanjidic.go @@ -94,6 +94,7 @@ func exportKanjidicDb(outputDir, title string, reader io.Reader, flags int) erro return writeDb( outputDir, title, + nil, kanji.crush(), nil, flags&flagPretty == flagPretty,