public static IList <Group> GroupConsecutiveSameStyleBlocks(IList <Group> groups, bool header = true, bool codeBlocks = true, bool blockquotes = true) { return(GroupGroup.GroupConsecutiveElementsWhile(groups, (Group g, Group gPrev) => { if (g is BlockGroup bg && gPrev is BlockGroup bgPrev) { return (codeBlocks && AreBothCodeblocks(bg, bgPrev)) || (blockquotes && AreBothBlockquotesWithSameAdi(bg, bgPrev)) || (header && AreBothSameHeadersWithSameAdi(bg, bgPrev)); } return false; }));
public static IList <Group> Nest(IList <Group> groups) { var listBlocked = ConvertListBlocksToListGroups(groups); var groupedByListGroups = GroupConsecutiveListGroups(listBlocked); // convert grouped ones into listgroup var nested = groupedByListGroups.SelectMany(g => g is GroupGroup gg ? NestListSection(gg.Groups.Cast <ListGroup>().ToList()) : Enumerable.Repeat(g, 1)).ToList(); var groupRootLists = GroupGroup.GroupConsecutiveElementsWhile(nested, (curr, prev) => { if (curr is ListGroup currLg && prev is ListGroup prevLg) { return(currLg.Items[0].Item.Op.IsSameListAs( prevLg.Items[0].Item.Op)); } return(false); });