Exemple #1
0
 private bool CheckAndProcessEndIfElementForContinue(ItemRepeaterElement currentItemRepeaterElement,
                                                     ref XElement endIfElement)
 {
     if (currentItemRepeaterElement.IsEndItemIf && currentItemRepeaterElement.XElement.Equals(endIfElement))
     {
         endIfElement = null;
         return(true);
     }
     return(false);
 }
Exemple #2
0
 private bool CheckAndProcessStartIfElementForContinue(ItemRepeaterElement currentItemRepeaterElement,
                                                       DataReader dataReader,
                                                       ref XElement endIfElement)
 {
     if (currentItemRepeaterElement.IsItemIf)
     {
         this.ProcessIfElement(currentItemRepeaterElement, dataReader, ref endIfElement);
         return(true);
     }
     return(false);
 }
Exemple #3
0
 private bool CheckNestedElementForContinue(ItemRepeaterElement firstItemRepeaterElement,
                                            ItemRepeaterElement currentItemRepeaterElement,
                                            XElement nestedRepeaterEndElement)
 {
     if (nestedRepeaterEndElement != null)
     {
         return
             (TraverseUtils.SecondElementsBetween(firstItemRepeaterElement.XElement, nestedRepeaterEndElement)
              .Contains(currentItemRepeaterElement.XElement));
     }
     return(false);
 }
Exemple #4
0
        private void ProcessIfElement(ItemRepeaterElement ifElement, DataReader dataReader, ref XElement endIfElement)
        {
            const string IsNotLastElementCondition = "isnotlastelement";
            const string IsLastElementCondition    = "islastelement";

            var expression = ifElement.Expression;

            if (expression.Equals(IsNotLastElementCondition) || expression.Equals(IsLastElementCondition))
            {
                var cond = expression.Equals(IsNotLastElementCondition) ^ dataReader.IsLast;
                if (!cond)
                {
                    endIfElement = ifElement.EndTag;
                }
            }
            else
            {
                var condition = bool.Parse(dataReader.ReadText(expression));
                if (!condition)
                {
                    endIfElement = ifElement.EndTag;
                }
            }
        }
        private IEnumerable<ItemRepeaterElement> GetSiblingElements(
            IEnumerable<ItemRepeaterElement> itemRepeaterElements, IEnumerable<ItemRepeaterTag> nestedRepeaters)
        {
            var repeaterElements = new List<ItemRepeaterElement>();
            int i = 0;
            if (!nestedRepeaters.Any())
            {
                repeaterElements.AddRange(itemRepeaterElements);
            }
            else
            {
                foreach (var itemRepeaterElement in itemRepeaterElements)
                {
                    var flagAdd = nestedRepeaters.All(nr =>
                        {
                            var elementsBetween = TraverseUtils.ElementsBetween(nr.StartItemRepeater,
                                                                                nr.EndItemRepeater.Parent != null && (nr.EndItemRepeater.Parent.Name == WordMl.ParagraphName)
                                                                                    ? nr.EndItemRepeater.Parent : nr.EndItemRepeater);
                            return !elementsBetween.Any(element => element.Equals(itemRepeaterElement.XElement));
                        });
                    if (flagAdd)
                    {
                        if (itemRepeaterElement.HasElements
                            && (itemRepeaterElement.Elements.Any(ire => ire.IsItemRepeater) || itemRepeaterElement.Elements.Any(ire => ire.IsEndItemRepeater))
                            && itemRepeaterElement.XElement.Name.Equals(WordMl.ParagraphName))
                        {
                            var nestedElements = itemRepeaterElement.Elements.ToList();
                            var element = new XElement(itemRepeaterElement.XElement.Name);
                            var dicBisect = new Dictionary<XElement, ItemRepeaterElement>();
                            if (!nestedElements.Any(ne => ne.IsEndItemRepeater))
                            {
                                foreach (var nestedElement in nestedElements)
                                {
                                    element.Add(nestedElement.XElement);
                                    if (nestedElement.IsBeforeNestedRepeater)
                                    {
                                        dicBisect.Add(nestedElement.XElement, new ItemRepeaterElement() { XElement = nestedElement.NextNestedRepeater.XElement });
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                var end = nestedElements.First(ne => ne.IsEndItemRepeater);
                                var next = end.XElement;
                                while ((next = next.NextElement()) != null)
                                {
                                    element.Add(next);
                                }
                            }
                            var newItemRepeaterElement = MakeElementCallback(element);
                            var elements = newItemRepeaterElement.Elements.ToList();

                            foreach (var kv in dicBisect)
                            {
                                foreach (var repeaterElement in elements.Where(repeaterElement => XNode.DeepEquals(repeaterElement.XElement, kv.Key)))
                                {
                                    var val = new ItemRepeaterElement { XElement = new XElement(kv.Value.XElement) };
                                    repeaterElement.NextNestedRepeater = val;
                                }
                            }
                            newItemRepeaterElement.Elements = elements;
                            if (element.HasElements)
                            {
                                repeaterElements.Add(newItemRepeaterElement);
                            }
                        }
                        else
                        {
                            repeaterElements.Add(itemRepeaterElement);
                        }
                    }
                }
            }
            return repeaterElements;
        }
 private bool CheckTableElementForContinue(ItemRepeaterElement currentItemRepeaterElement)
 {
     return currentItemRepeaterElement.IsEndItemTable ||
            (currentItemRepeaterElement.XElement.Name.Equals(WordMl.TableName) &&
             currentItemRepeaterElement.XElement.Descendants().Any(el => el.IsSdt()));
 }
 private bool CheckAndProcessEndIfElementForContinue(ItemRepeaterElement currentItemRepeaterElement,
                                           ref XElement endIfElement)
 {
     if (currentItemRepeaterElement.IsEndItemIf && currentItemRepeaterElement.XElement.Equals(endIfElement))
     {
         endIfElement = null;
         return true;
     }
     return false;
 }
 private bool CheckNestedConditionElementForContinue(ItemRepeaterElement currentItemRepeaterElement,
                                                     XElement endIfElement)
 {
     return (endIfElement != null) && !currentItemRepeaterElement.XElement.Name.Equals(WordMl.ParagraphName);
 }
 private bool CheckAndProcessStartIfElementForContinue(ItemRepeaterElement currentItemRepeaterElement,
                                                       DataReader dataReader,
                                                       ref XElement endIfElement)
 {
     if (currentItemRepeaterElement.IsItemIf)
     {
         this.ProcessIfElement(currentItemRepeaterElement, dataReader, ref endIfElement);
         return true;
     }
     return false;
 }
 private bool CheckAndProcessEndItemRepeaterElementForContinue(ItemRepeaterElement currentItemRepeaterElement,
                                                     ref XElement nestedRepeaterEndElement)
 {
     if (currentItemRepeaterElement.IsEndItemRepeater &&
         currentItemRepeaterElement.XElement.Equals(nestedRepeaterEndElement))
     {
         nestedRepeaterEndElement = null;
         return true;                
     }
     return false;
 }
 private bool CheckNestedElementForContinue(ItemRepeaterElement firstItemRepeaterElement,
                                            ItemRepeaterElement currentItemRepeaterElement,
                                            XElement nestedRepeaterEndElement)
 {
     if (nestedRepeaterEndElement != null)
     {
         return
             TraverseUtils.SecondElementsBetween(firstItemRepeaterElement.XElement, nestedRepeaterEndElement)
                          .Contains(currentItemRepeaterElement.XElement);
     }
     return false;
 }
 private void ProcessIfElement(ItemRepeaterElement ifElement, DataReader dataReader, ref XElement endIfElement)
 {
     const string IsNotLastElementCondition = "isnotlastelement";
     const string IsLastElementCondition = "islastelement";
     
     var expression = ifElement.Expression;
     if (expression.Equals(IsNotLastElementCondition) || expression.Equals(IsLastElementCondition))
     {
         var cond = expression.Equals(IsNotLastElementCondition) ^ dataReader.IsLast;
         if (!cond)
         {
             endIfElement = ifElement.EndTag;
         }
     }
     else
     {
         var condition = bool.Parse(dataReader.ReadText(expression));
         if (!condition)
         {
             endIfElement = ifElement.EndTag;
         }                
     }                                
 }
Exemple #13
0
        private IEnumerable <ItemRepeaterElement> GetSiblingElements(
            IEnumerable <ItemRepeaterElement> itemRepeaterElements, IEnumerable <ItemRepeaterTag> nestedRepeaters)
        {
            var repeaterElements = new List <ItemRepeaterElement>();
            int i = 0;

            if (!nestedRepeaters.Any())
            {
                repeaterElements.AddRange(itemRepeaterElements);
            }
            else
            {
                foreach (var itemRepeaterElement in itemRepeaterElements)
                {
                    var flagAdd = nestedRepeaters.All(nr =>
                    {
                        var elementsBetween = TraverseUtils.ElementsBetween(nr.StartItemRepeater,
                                                                            nr.EndItemRepeater.Parent != null && (nr.EndItemRepeater.Parent.Name == WordMl.ParagraphName)
                                                                                    ? nr.EndItemRepeater.Parent : nr.EndItemRepeater);
                        return(!elementsBetween.Any(element => element.Equals(itemRepeaterElement.XElement)));
                    });
                    if (flagAdd)
                    {
                        if (itemRepeaterElement.HasElements &&
                            (itemRepeaterElement.Elements.Any(ire => ire.IsItemRepeater) || itemRepeaterElement.Elements.Any(ire => ire.IsEndItemRepeater)) &&
                            itemRepeaterElement.XElement.Name.Equals(WordMl.ParagraphName))
                        {
                            var nestedElements = itemRepeaterElement.Elements.ToList();
                            var element        = new XElement(itemRepeaterElement.XElement.Name);
                            var dicBisect      = new Dictionary <XElement, ItemRepeaterElement>();
                            if (!nestedElements.Any(ne => ne.IsEndItemRepeater))
                            {
                                foreach (var nestedElement in nestedElements)
                                {
                                    element.Add(nestedElement.XElement);
                                    if (nestedElement.IsBeforeNestedRepeater)
                                    {
                                        dicBisect.Add(nestedElement.XElement, new ItemRepeaterElement()
                                        {
                                            XElement = nestedElement.NextNestedRepeater.XElement
                                        });
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                var end  = nestedElements.First(ne => ne.IsEndItemRepeater);
                                var next = end.XElement;
                                while ((next = next.NextElement()) != null)
                                {
                                    element.Add(next);
                                }
                            }
                            var newItemRepeaterElement = MakeElementCallback(element);
                            var elements = newItemRepeaterElement.Elements.ToList();

                            foreach (var kv in dicBisect)
                            {
                                foreach (var repeaterElement in elements.Where(repeaterElement => XNode.DeepEquals(repeaterElement.XElement, kv.Key)))
                                {
                                    var val = new ItemRepeaterElement {
                                        XElement = new XElement(kv.Value.XElement)
                                    };
                                    repeaterElement.NextNestedRepeater = val;
                                }
                            }
                            newItemRepeaterElement.Elements = elements;
                            if (element.HasElements)
                            {
                                repeaterElements.Add(newItemRepeaterElement);
                            }
                        }
                        else
                        {
                            repeaterElements.Add(itemRepeaterElement);
                        }
                    }
                }
            }
            return(repeaterElements);
        }
Exemple #14
0
 private bool CheckTableElementForContinue(ItemRepeaterElement currentItemRepeaterElement)
 {
     return(currentItemRepeaterElement.IsEndItemTable ||
            (currentItemRepeaterElement.XElement.Name.Equals(WordMl.TableName) &&
             currentItemRepeaterElement.XElement.Descendants().Any(el => el.IsSdt())));
 }
Exemple #15
0
 private bool CheckNestedConditionElementForContinue(ItemRepeaterElement currentItemRepeaterElement,
                                                     XElement endIfElement)
 {
     return((endIfElement != null) && !currentItemRepeaterElement.XElement.Name.Equals(WordMl.ParagraphName));
 }