private RichTextNode ToRichTextNode(string example, string currentWord) { var segments = zc.tH(MaybeAddPeriod(example)).Split("~"); var normalTextNodes = segments.Select(s => new RichTextNode.Types.TextNode() { Text = s, }); var currentWordNode = new RichTextNode.Types.TextNode() { Text = zc.tH(currentWord), Styles = { "current-word" } }; var inlineNodes = Join(normalTextNodes, currentWordNode) .Select(t => new RichTextNode.Types.InlineNode() { Text = t }); return(new RichTextNode() { InlineContainer = new RichTextNode.Types.InlineContainerNode() { Children = { inlineNodes } }, Styles = { "example" } }); }
private static IEnumerable <RichTextNode.Types.TextNode> Join(IEnumerable <RichTextNode.Types.TextNode> list, RichTextNode.Types.TextNode separator) { return(list.Aggregate(new List <RichTextNode.Types.TextNode>(), (list, next) => { if (list.Count > 0) { list.Add(separator); } list.Add(next); return list; }, list => list.AsReadOnly())); }