private bool CheckAndProcessEndIfElementForContinue(ItemRepeaterElement currentItemRepeaterElement, ref XElement endIfElement) { if (currentItemRepeaterElement.IsEndItemIf && currentItemRepeaterElement.XElement.Equals(endIfElement)) { endIfElement = null; return(true); } return(false); }
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 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; } } }
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 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 CheckNestedConditionElementForContinue(ItemRepeaterElement currentItemRepeaterElement, XElement endIfElement) { return((endIfElement != null) && !currentItemRepeaterElement.XElement.Name.Equals(WordMl.ParagraphName)); }