Пример #1
0
 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;
     }));
Пример #2
0
        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);
            });