static public PageElement Merge(PageElement[] elements)
{
var target = elements.First();
Debug.Assert(target is PageElements.Notations.Ol);
foreach (var elem in elements.Skip(1))
{

   Debug.Assert(elem is PageElements.Notations.Ol);
   target.Children.AddRange(elem.Children);

}

{

   var elements_ = new List<PageElement>();
   var buf = new List<PageElement>();
   foreach (var li in target.Children.Where(e => e is PageElements.Notations.Li))
   {
       foreach (var c in li.Children)
       {
           if (c is PageElements.Notations.Ol)
           {
               buf.Add(c);
           }
           else if (buf.Count > 0)
           {
               elements_.Add(Merge(buf.ToArray()));
               buf.Clear();
           }
           else
           {
               elements_.Add(c);
           }
       }
       li.Children.Clear();
       li.Children.AddRange(elements_);
       elements_.Clear();
   }

}
}