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))); }