diff --git a/kanjidic2.go b/kanjidic2.go index 63204fe..38ded58 100644 --- a/kanjidic2.go +++ b/kanjidic2.go @@ -70,10 +70,13 @@ type Kanji struct { Nanori []string `xml:"nanori"` } -func ParseKanjiDic2(filename string) (kanjiList []Kanji, err error) { +type Kanjidic2Parser map[string]Kanji + +func ParseKanjiDic2(filename string) (Kanjidic2Parser, error) { + k := Kanjidic2Parser{} xmlFile, err := os.Open(filename) if err != nil { - return nil, err + return k, err } defer xmlFile.Close() decoder := xml.NewDecoder(xmlFile) @@ -87,9 +90,9 @@ func ParseKanjiDic2(filename string) (kanjiList []Kanji, err error) { if startElement.Name.Local == "character" { var kanji Kanji decoder.DecodeElement(&kanji, &startElement) - kanjiList = append(kanjiList, kanji) + k[kanji.Literal] = kanji } } } - return + return k, nil } diff --git a/kanjidic2_test.go b/kanjidic2_test.go index eee37b4..6ea07fa 100644 --- a/kanjidic2_test.go +++ b/kanjidic2_test.go @@ -1,11 +1,9 @@ package kanjidic2 -import ( - "testing" -) +import "testing" var numKanji = 13108 -var kanjiList []Kanji +var kanjidic2Parser Kanjidic2Parser func TestParser(t *testing.T) { got, err := ParseKanjiDic2("kanjidic2.xml") @@ -16,14 +14,14 @@ func TestParser(t *testing.T) { t.Fatalf("ParseKanjiDic2 length incorrect: got %d, want %d", got, numKanji) } // set kanjiList for later tests - kanjiList = got + kanjidic2Parser = got } var strokeCountTests = []struct { Literal string Count int }{ - {"ー", 1}, + {"一", 1}, {"二", 2}, {"三", 3}, {"中", 4}, @@ -33,13 +31,9 @@ var strokeCountTests = []struct { } func TestStrokeCount(t *testing.T) { - for _, k := range kanjiList { - for _, tt := range strokeCountTests { - if k.Literal == tt.Literal { - if got := k.StrokeCount; got != tt.Count { - t.Errorf("TestStrokeCount (%s): got %d, want %d", tt.Literal, got, tt.Count) - } - } + for _, tt := range strokeCountTests { + if got := kanjidic2Parser[tt.Literal].StrokeCount; got != tt.Count { + t.Errorf("TestStrokeCount (%s): got %d, want %d", tt.Literal, got, tt.Count) } } }