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(); }
}
}