public void TestNextElementWithUpTransition() { var firstParagraph = new XElement("FirstParagraph"); var fpElement1 = new XElement("FPElement1"); var fpElementStart = new XElement("FPElementStart"); var fpElement3 = new XElement("FPElement3"); firstParagraph.Add(fpElement1, fpElementStart, fpElement3); var betweenParagraph = new XElement("BetweenParagraph"); var bpElement1 = new XElement("BPElement1"); var bpElement2 = new XElement("BPElement2"); betweenParagraph.Add(bpElement1, bpElement2); var lastParagraph = new XElement("LastParagraph"); var lpElement1 = new XElement("LPElement1"); var lpElementEnd = new XElement("LPElementEnd"); var lpElement3 = new XElement("LpElementThree"); lastParagraph.Add(lpElement1, lpElementEnd, lpElement3); var expectedDoc = new XDocument(new XElement("Root")); expectedDoc.Root.Add(firstParagraph, betweenParagraph, lastParagraph); var actualBetweenElements = TraverseUtils.SecondElementsBetween(fpElementStart, lpElementEnd); var nextElement = actualBetweenElements.First().NextElementWithUpTransition(); Assert.AreSame(nextElement, betweenParagraph); }
public void TestElementsBetweenStartElementInNestedElement() { var startParagraph = new XElement("startParagraph"); var firstElement = new XElement("elementFirst"); var startElement = new XElement("elementStart"); var thirdElement = new XElement("elementThird"); var fourthElement = new XElement("elementFourth"); startParagraph.Add(firstElement, startElement, thirdElement, fourthElement); var outerFirstElement = new XElement("outerElementFirst"); var outerSecondElement = new XElement("outerElementSecond"); var outerEndElement = new XElement("outerElementEnd"); var outerFourthElement = new XElement("outerElementFourth"); var expectedDoc = new XDocument(new XElement("Root")); expectedDoc.Root.Add(startParagraph, outerFirstElement, outerSecondElement, outerEndElement, outerFourthElement); var actualBetweenElements = TraverseUtils.SecondElementsBetween(startElement, outerEndElement); foreach (var actualBetweenElement in actualBetweenElements) { Console.WriteLine(actualBetweenElement); } Assert.AreEqual(4, actualBetweenElements.Count()); }
public override void Process() { base.Process(); this.ProcessDynamicContent(); var current = RepeaterTag.StartRepeater; var dataReaders = DataReader.GetReaders(RepeaterTag.Source).ToList(); var repeaterElements = TraverseUtils.SecondElementsBetween(RepeaterTag.StartRepeater, RepeaterTag.EndRepeater) .Select(RepeaterTag.MakeElementCallback).ToList(); for (var index = 0; index < dataReaders.Count; index++) { XElement endIfElementTmp = null; XElement endRepeaterElementTmp = null; XElement endItemTableElement = null; current = this.ProcessElements(repeaterElements, dataReaders[index], current, null, index + 1, ref endIfElementTmp, ref endRepeaterElementTmp, ref endItemTableElement); } foreach (var repeaterElement in repeaterElements) { repeaterElement.XElement.Remove(); } if (this.CreateDynamicContentTags) { var innerElements = TraverseUtils.ElementsBetween(this.RepeaterTag.StartRepeater, this.RepeaterTag.EndRepeater).ToList(); innerElements.Remove(); this.RepeaterTag.StartRepeater.AddBeforeSelf( DocxHelper.CreateDynamicContentElement( innerElements, this.RepeaterTag.StartRepeater, this.DynamicContentLockingType)); this.CleanUp(this.RepeaterTag.StartRepeater, this.RepeaterTag.EndRepeater); } else { this.RepeaterTag.StartRepeater.Remove(); this.RepeaterTag.EndRepeater.Remove(); } }
public void TestElementBetweenEachInDifferentParagraphs() { var startIf = this.documentRoot.Descendants(WordMl.SdtName).Single(d => d.Descendants(WordMl.TagName).Any(t => t.Attribute(WordMl.ValAttributeName).Value == "If")); var endIf = this.documentRoot.Descendants(WordMl.SdtName).Single(d => d.Descendants(WordMl.TagName).Any(t => t.Attribute(WordMl.ValAttributeName).Value == "EndIf")); var elements = TraverseUtils.SecondElementsBetween(startIf, endIf).ToList(); Assert.AreEqual(17, elements.Count()); Assert.IsTrue(elements.Take(6).All(e => e.Name.Equals(WordMl.TextRunName))); Assert.IsTrue(elements.Skip(6).Take(1).All(e => e.Name.Equals(WordMl.ParagraphName))); Assert.IsTrue(elements.Skip(7).Take(1).All(e => e.Name.Equals(WordMl.ParagraphPropertiesName))); Assert.IsTrue(elements.Skip(8).Take(1).All(e => e.Name.Equals(WordMl.BookmarkStartName))); Assert.IsTrue(elements.Skip(9).Take(4).All(e => e.Name.Equals(WordMl.TextRunName))); Assert.IsTrue(elements.Skip(13).Take(1).All(e => e.Name.Equals(WordMl.ProofingErrorAnchorName))); Assert.IsTrue(elements.Skip(14).Take(1).All(e => e.Name.Equals(WordMl.TextRunName))); Assert.IsTrue(elements.Skip(15).Take(1).All(e => e.Name.Equals(WordMl.ProofingErrorAnchorName))); Assert.IsTrue(elements.Skip(16).Take(1).All(e => e.Name.Equals(WordMl.TextRunName))); }
public void TestElementsBetweenEndElementInNestedElement() { var startElement = new XElement("elementStart"); var secondElement = new XElement("element2"); var thirdElement = new XElement("element3"); var inclusiveElement = new XElement("elementInclusive"); var nestedElementFirst = new XElement("elementNested1"); var nestedElementSecond = new XElement("elementNested2"); var nestedElementEnd = new XElement("elementNestedEnd"); var nestedElementThird = new XElement("elementNested3"); inclusiveElement.Add(nestedElementFirst, nestedElementSecond, nestedElementEnd, nestedElementThird); var afterElementFirst = new XElement("elementAfter1"); var afterElementSecond = new XElement("elementAfter2"); var expectedDoc = new XDocument(new XElement("Root")); expectedDoc.Root.Add(startElement, secondElement, thirdElement, inclusiveElement, afterElementFirst, afterElementSecond); /*foreach (var ancestor in nestedElementFirst.Ancestors()) * { * Console.WriteLine(ancestor); * }*/ Console.WriteLine("Source document:"); Console.WriteLine(expectedDoc); Console.WriteLine("--------"); var betweenElements = TraverseUtils.SecondElementsBetween(startElement, nestedElementEnd); foreach (var betweenElement in betweenElements) { Console.WriteLine(betweenElement); } Assert.AreEqual(4, betweenElements.Count()); //------------- }
private void ProcessElements(IEnumerable <TableElement> tableElements, DataReader dataReader, int index, XElement start, bool isTopLevel) { var tableElementsList = tableElements.ToList(); XElement previous = start; XElement firstCell = null; foreach (var currentTableElement in tableElementsList) { if (currentTableElement.IsCellColor) { this.SetCellColor(currentTableElement.StartTag.Ancestors(WordMl.TableCellName).First(), dataReader.ReadText(currentTableElement.Expression)); currentTableElement.StartTag.Remove(); } else if (currentTableElement.IsItemTable) { var tableCell = currentTableElement.StartTag.Ancestors(WordMl.TableCellName).Last(); var tableElement = TraverseUtils.SecondElementsBetween(currentTableElement.StartTag, currentTableElement.EndTag) .SingleOrDefault(el => el.Name.Equals(WordMl.TableName)); var parentCellWidth = GetCellWidth(tableCell); SetTableWidth(tableElement, parentCellWidth); XElement parentElement = null; if (currentTableElement.StartTag.Parent.Name.Equals(WordMl.ParagraphName)) { parentElement = currentTableElement.StartTag.Parent; } var itemTableGenerator = new ItemTableGenerator(); itemTableGenerator.Generate(currentTableElement.StartTag, currentTableElement.EndTag, dataReader); if (parentElement != null) { parentElement.Remove(); } } else if (currentTableElement.IsItemHtmlContent) { currentTableElement.StartTag = HtmlContentProcessor.MakeHtmlContentProcessed(currentTableElement.StartTag, dataReader.ReadText( currentTableElement.Expression)); } else if (currentTableElement.IsItemIf) { previous = this.ProcessItemIfElement(currentTableElement, dataReader, index, previous); //TODO: this if need testing if (firstCell == null) { firstCell = previous; } } else if (currentTableElement.IsItemRepeater) { this.ProcessItemRepeaterElement(currentTableElement, dataReader, index, previous); } else if (currentTableElement.IsItem || currentTableElement.IsIndex) { var resultText = currentTableElement.IsIndex ? index.ToString(CultureInfo.CurrentCulture) : dataReader.ReadText(currentTableElement.Expression); previous = this.ProcessCell(currentTableElement, previous, resultText); if (firstCell == null) { firstCell = previous; } currentTableElement.StartTag.Remove(); } } if (isTopLevel && firstCell != null) { ProcessStaticCells(firstCell, previous); } }