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