public static XElement ProcessItemTableElement(XElement startTableElement, XElement endTableElement, DataReader dataReader) { var tableElement = TraverseUtils.SecondElementsBetween(startTableElement, endTableElement) .SingleOrDefault(re => re.Name.Equals(WordMl.TableName)); var tableContainer = new XElement("TempContainerElement"); tableContainer.Add(startTableElement); tableContainer.Add(tableElement); tableContainer.Add(endTableElement); var itemTableGenerator = new ItemTableGenerator(); itemTableGenerator.Generate(tableContainer.Elements().First(), tableContainer.Elements().Last(), dataReader); return new XElement(tableContainer.Elements().SingleOrDefault()); }
public static XElement ProcessItemTableElement(XElement startTableElement, XElement endTableElement, DataReader dataReader) { var tableElement = TraverseUtils.SecondElementsBetween(startTableElement, endTableElement) .SingleOrDefault(re => re.Name.Equals(WordMl.TableName)); var tableContainer = new XElement("TempContainerElement"); tableContainer.Add(startTableElement); tableContainer.Add(tableElement); tableContainer.Add(endTableElement); var itemTableGenerator = new ItemTableGenerator(); itemTableGenerator.Generate(tableContainer.Elements().First(), tableContainer.Elements().Last(), dataReader); return(new XElement(tableContainer.Elements().SingleOrDefault())); }
private XElement ProcessElements(IEnumerable <ItemRepeaterElement> elements, DataReader dataReader, XElement start, XElement parent, int index, ref XElement nestedRepeaterEndElement, ref XElement endIfElement, bool nestedElement = false) { XElement result = null; XElement previous = start; foreach (var itemRepeaterElement in elements) { var flgStucturedElementProcessed = this.CheckAndProcessStartIfElementForContinue(itemRepeaterElement, dataReader, ref endIfElement) || this.CheckAndProcessEndIfElementForContinue(itemRepeaterElement, ref endIfElement) || this.CheckAndProcessEndItemRepeaterElementForContinue( itemRepeaterElement, ref nestedRepeaterEndElement) || this.CheckTableElementForContinue(itemRepeaterElement); if (!flgStucturedElementProcessed) { var flgNestedElementCheckedForContinue = this.CheckNestedConditionElementForContinue( itemRepeaterElement, endIfElement) || this.CheckNestedElementForContinue(elements.First(), itemRepeaterElement, nestedRepeaterEndElement); if (!flgNestedElementCheckedForContinue) { if (itemRepeaterElement.IsItemHtmlContent) { result = HtmlContentProcessor.MakeHtmlContentProcessed(itemRepeaterElement.XElement, dataReader.ReadText( itemRepeaterElement.Expression), true); } else if (itemRepeaterElement.IsItemRepeater) { var itemRepeaterTag = new ItemRepeaterTag() { StartItemRepeater = itemRepeaterElement.StartTag, EndItemRepeater = itemRepeaterElement.EndTag, Source = itemRepeaterElement.Expression }; var itemRepeaterGenerator = new ItemRepeaterGenerator(); previous = itemRepeaterGenerator.Generate(itemRepeaterTag, dataReader.GetReaders(itemRepeaterTag.Source), previous, parent); nestedRepeaterEndElement = itemRepeaterTag.EndItemRepeater; result = null; } else if (itemRepeaterElement.IsIndex) { result = DocxHelper.CreateTextElement(itemRepeaterElement.XElement, itemRepeaterElement.XElement.Parent, index.ToString(CultureInfo.CurrentCulture), !nestedElement); } else if (itemRepeaterElement.IsItem) { result = DocxHelper.CreateTextElement(itemRepeaterElement.XElement, itemRepeaterElement.XElement.Parent, dataReader.ReadText(itemRepeaterElement.Expression), dataReader.ReadAttribute(itemRepeaterElement.Expression, "style"), !nestedElement); } else if (itemRepeaterElement.IsItemTable) { result = ItemTableGenerator.ProcessItemTableElement(itemRepeaterElement.StartTag, itemRepeaterElement.EndTag, dataReader); if (nestedElement) { previous.AddAfterSelf(result); previous = result; result = null; } } else { var element = new XElement(itemRepeaterElement.XElement); element.RemoveNodes(); result = element; if (itemRepeaterElement.HasElements) { var parsedLastElement = this.ProcessElements(itemRepeaterElement.Elements, dataReader, previous, result, index, ref nestedRepeaterEndElement, ref endIfElement, true); if (itemRepeaterElement.Elements.Any(ire => ire.XElement.IsSdt()) && DocxHelper.IsEmptyParagraph(result)) { result = null; } if (itemRepeaterElement.Elements.Any(ire => ire.IsItemTable) || itemRepeaterElement.Elements.Any( ire => ire.IsItemRepeater && !CheckInlineWrappingMode(ire.StartTag, ire.EndTag))) { previous = parsedLastElement; } } else { element.Value = itemRepeaterElement.XElement.Value; } } if (result != null) { if (!nestedElement) { previous.AddAfterSelf(result); previous = result; } else { parent.Add(result); } } } else { result = null; } } else { result = null; } } return(result ?? previous); }