コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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)));
        }
コード例 #5
0
        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());
            //-------------
        }
コード例 #6
0
        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);
            }
        }