···275275 return el;
276276 }
277277 }
278278+ case MfmFnNode { Name: "ruby" } fn:
279279+ {
280280+ var el = CreateInlineFormattingElement("ruby");
281281+282282+ if (fn.Children.FirstOrDefault() is not {} first)
283283+ return Fallback();
284284+285285+ // TODO: this wont work for bold and italic and whatnot, misskey supports those for the first part at least
286286+ if (fn.Children.Length == 1 && first is MfmTextNode firstText)
287287+ {
288288+ var parts = firstText.Text.Split(' ', count: 3);
289289+ if (parts.Length == 0) return Fallback();
290290+291291+ el.AppendChild(CreateTextNode(parts[0]));
292292+ var secondPart = parts.ElementAtOrDefault(1);
293293+ if (!string.IsNullOrWhiteSpace(secondPart))
294294+ {
295295+ var rt = CreateInlineFormattingElement("rt");
296296+ rt.AppendChild(CreateTextNode(secondPart));
297297+ el.AppendChild(rt);
298298+ }
299299+ }
300300+ else
301301+ {
302302+ Fallback();
303303+ }
304304+305305+ return el;
306306+307307+ IElement Fallback()
308308+ {
309309+ AddHtmlMarkup(el, "*");
310310+ AppendChildren(el, node, mentions, host, usedMedia);
311311+ AddHtmlMarkup(el, "*");
312312+ return el;
313313+ }
314314+ }
278315 case MfmBoldNode:
279316 {
280317 var el = CreateInlineFormattingElement("b");