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();
                }
示例#2
0
 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));
                 });
             }
示例#3
0
        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);
        }
    }