internal KanjiEntry(KanjiCharacter ch) { Literal = ch.Literal; StrokeCount = ch.Misc.StrokeCount[0]; FrequencyRating = ch.Misc.FrequencyRating != 0 ? ch.Misc.FrequencyRating : 100000; }
internal KanjiEntry(KanjiCharacter ch) { Literal = ch.Literal; CodePoint = Convert.ToInt32(ch.CodePoints.CodePoints.First(c => c.Type == "ucs").Value, 16); StrokeCount = ch.Misc.StrokeCount[0]; FrequencyRating = ch.Misc.FrequencyRating != 0 ? ch.Misc.FrequencyRating : 100000; KunReadings = GetReadings(ch, "ja_kun"); OnReadings = GetReadings(ch, "ja_on"); Meanings = GetMeanings(ch, "en"); NanoriReadings = GetNanori(ch); List <string> GetNanori(KanjiCharacter c) { return((c.ReadingsAndMeanings?.Nanori ?? Enumerable.Empty <KanjiNanori>()) .Select(n => n.Value) .ToList()); } List <string> GetMeanings(KanjiCharacter c, string lang) { return(c.ReadingsAndMeanings?.Groups .FirstOrNone() .FlatMap(x => (x.Meanings?.Where(m => (m.Language ?? "en") == lang)).SomeNotNull()) .ValueOr(Enumerable.Empty <KanjiMeaning>()) .Select(reading => reading.Value) .ToList()); } List <string> GetReadings(KanjiCharacter c, string type) { return(c.ReadingsAndMeanings?.Groups .FirstOrNone() .FlatMap(x => (x.Readings?.Where(r => r.ReadingType == type)).SomeNotNull()) .ValueOr(Enumerable.Empty <KanjiReading>()) .Select(reading => reading.Value) .ToList()); } }