private IEnumerable <PartsSelectionTreeElement> CreatePartsSelectionTreeElements(OpenXmlElement element, int id, Predicate <OpenXmlElement> supportedType, int indent) { List <PartsSelectionTreeElement> result = new List <PartsSelectionTreeElement>(); if (supportedType(element)) { PartsSelectionTreeElement elementToAdd; if (element is Paragraph) { Paragraph paragraph = element as Paragraph; NumberingProperties numberingProperties = null; if (paragraph.ParagraphProperties != null) { numberingProperties = paragraph.ParagraphProperties.NumberingProperties; } string elementId = paragraph.ParagraphId ?? WordDocumentPartAttributes.GetParagraphNoIdFormatter(_paragraphCounter); if (numberingProperties != null) { indent += numberingProperties.NumberingLevelReference.Val.Value; if (WordDocumentPartAttributes.BulletListIds.Any(b => b == numberingProperties.NumberingId.Val.Value)) { elementToAdd = new PartsSelectionTreeElement(id.ToString(), elementId, WordTools.GetElementName(element, WordDocumentPartAttributes.MaxNameLength), indent, Helpers.ElementType.BulletList); } else if (WordDocumentPartAttributes.NumberedListIds.Any(b => b == numberingProperties.NumberingId.Val.Value)) { elementToAdd = new PartsSelectionTreeElement(id.ToString(), elementId, WordTools.GetElementName(element, WordDocumentPartAttributes.MaxNameLength), indent, Helpers.ElementType.NumberedList); } else { elementToAdd = new PartsSelectionTreeElement(id.ToString(), elementId, WordTools.GetElementName(element, WordDocumentPartAttributes.MaxNameLength), indent, Helpers.ElementType.BulletList); } } else { elementToAdd = new PartsSelectionTreeElement(id.ToString(), elementId, WordTools.GetElementName(element, WordDocumentPartAttributes.MaxNameLength), indent, Helpers.ElementType.Paragraph); } _paragraphCounter++; } else if (element is Picture || element is Drawing) { elementToAdd = new PartsSelectionTreeElement(id.ToString(), element.LocalName, indent, Helpers.ElementType.Picture); } else if (element is Table) { elementToAdd = new PartsSelectionTreeElement(id.ToString(), (element as Table).LocalName, indent, Helpers.ElementType.Table); } else { elementToAdd = new PartsSelectionTreeElement(id.ToString(), WordTools.GetElementName(element, WordDocumentPartAttributes.MaxNameLength), indent); } result.Add(elementToAdd); if (element.HasChildren) { foreach (var elmentChild in element.ChildElements) { _index++; CreatePartsSelectionTreeElements(elmentChild, _index, supportedType, ++indent); } } } return(result); }
public List <PartsSelectionTreeElement> Get(Stream file) { return(Get(file, el => WordDocumentPartAttributes.IsSupportedType(el))); }