private static IEnumerable <XNode> CreateListItems(IEnumerable <XNode> nodes, DocumentStyles listFormats) { List <XNode> result = new List <XNode>(); var node = nodes.FirstOrDefault(); while (node != null) { var nextnode = node.NextNode; if (node is XElement) { if (listFormats.IsListItem(node)) { var element = node as XElement; var pair = listFormats.GetListPair(element); //string numId = element.AttributeValue("numId"); //string ilvl = element.AttributeValue("ilvl"); var ul = listFormats.GetListElement(pair.NumId, pair.Ilvl); var li = new XElement(Namespaces.Xhtml + "li"); li.SetAttributeValue("class", element.AttributeValue("class")); li.AddCleared(node); var count = node.ElementsAfterSelf().Where(e => listFormats.IsListItem(e, pair.NumId, pair.Ilvl)).Count(); //TO:Check indent for inner items if (listFormats.IsNumerable(pair.NumId, pair.Ilvl)) { for (int i = 0; i < count; i++) { var innerItems = new XElement("InnerItems"); node = nextnode; while (node != null) { nextnode = node.NextNode; if (listFormats.IsListItem(node, pair.NumId, pair.Ilvl)) { break; } else { innerItems.Add(node); } node = nextnode; } li.AddCleared(CreateListItems(innerItems.Nodes(), listFormats)); ul.Add(li); li = new XElement(Namespaces.Xhtml + "li"); if (node is XElement) { li.SetAttributeValue("class", (node as XElement).AttributeValue("class")); } li.AddCleared(node); } } else { node = nextnode; while (node != null) { nextnode = node.NextNode; if (listFormats.IsListItem(node, pair.NumId, pair.Ilvl)) { ul.Add(li); li = new XElement(Namespaces.Xhtml + "li"); if (node is XElement) { li.SetAttributeValue("class", (node as XElement).AttributeValue("class")); } li.AddCleared(node); } else { nextnode = node; break; } node = nextnode; } } ul.AddCleared(li); result.Add(ul); } else { var element = CreateListItems((node as XElement), listFormats); result.Add(element); } } else { result.Add(node); } node = nextnode; } return(result); }