예제 #1
0
        public WordVM(WordInfo wordInfo, IKanjiProperties lang, IKanaProperties kanaProperties, IRelated related)
        {
            var s = wordInfo.RawWord;

            StringForm = s;
            codePoints.AddRange(s.AsCodePoints().Select(rawCp =>
            {
                var cp = CodePoint.FromInt(rawCp);
                var vm = new CodePointVM(
                    cp,
                    related.FindRelated(cp).SelectMany(g => g),
                    cp is Kanji k
                        ? lang.LookupRadicalsByKanji(k).ValueOr(Enumerable.Empty <CodePoint>())
                        : Enumerable.Empty <CodePoint>(),
                    cp is Kana kana ? kanaProperties.LookupRomaji(kana.ToString()) : null);
                return(vm);
            }));
            WordInfo = wordInfo;
        }
        public Task <Option <RichFormatting> > Answer(Request request, CancellationToken token)
        {
            var ch   = request.Character;
            var cp   = CodePoint.FromString(ch);
            var rich = new RichFormatting();
            var p    = new TextParagraph();

            var radicals = cp is Kanji k
                ? kanji.LookupRadicalsByKanji(k).ValueOr(Enumerable.Empty <CodePoint>())
                : Enumerable.Empty <CodePoint>();

            var romaji = cp is Kana kana?this.kana.LookupRomaji(kana.ToString()) : null;

            var text = cp.ToDescriptionString() + "\n" +
                       (romaji != null ? romaji + "\n" : "") +
                       string.Join(" ; ", radicals);

            p.Content.Add(new Text(text));
            rich.Paragraphs.Add(p);
            return(Task.FromResult(Option.Some(rich)));
        }