public override Element BuildElement(Element element) { if (!(element is BlockContainer)) { return(element); } var newSubs = Nil.L <Element>(); foreach (Element el in element.Subs) { if (el is Paragraph p && p.Subs.Any(_ => _ is LineBreak)) { var lineSubs = Nil.L <Element>(); p.Subs.GroupAdjacent(_ => _ is LineBreak).Where(_ => !_.Key).ForEach(_ => { lineSubs.Add(new Paragraph { Subs = _.ToList() }); }); if (lineSubs.Any()) { p.MoveAttributesTo(lineSubs.First()); } newSubs = newSubs.Concat(lineSubs).ToList(); }
public override Element BuildElement(Element element) { if (element is BlockContainer && element.Subs.Any(_ => _ is Listing l && l.Kind.IsOneOf(ListingKind.Items, ListingKind.CheckItems))) { var newSubs = Nil.L <Element>(); element.Subs.ForEach(_ => { if (_ is Listing list && list.Kind.IsOneOf(ListingKind.Items, ListingKind.CheckItems)) { list.Subs.ForEach(item => { newSubs.Add(new Item(item, list.Kind)); }); }
public override Element BuildElement(Element element) { { // Headings can't contain other headings & list item headings don't become items. if (element is Heading || element is ListItem) { return(element); } } Item? item = null; Heading?lastHeading = null; var subs = element switch { Item i => i.Content, _ => element.Subs }; var newSubs = Nil.L <Element>(); if (element is Item ii) { newSubs.Add(ii.Title); } subs.ForEach(el => { var newItem = el is Heading h && h.Level <= (lastHeading?.Level ?? 7); if (item == null) { if (newItem) { item = Item.FromTitleElement(el); } else { newSubs.Add(el); } } else { if (newItem) { newSubs.Add(item); item = Item.FromTitleElement(el); } else { item.Subs.Add(el); } } if (newItem) { lastHeading = el as Heading; } }); if (item != null) { newSubs.Add(item); } element.Subs = newSubs; return(element); } }