Exemplo n.º 1
0
 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());
            }
        }