Beispiel #1
0
 private static void ParseStructuredElement(RepeaterElement repeaterElement, string startTag, string endTag)
 {
     repeaterElement.EndTag      = FindEndTag(repeaterElement.StartTag, startTag, endTag);
     repeaterElement.TagElements = TraverseUtils.SecondElementsBetween(repeaterElement.StartTag,
                                                                       repeaterElement.EndTag)
                                   .Select(MakeElementCallback);
 }
Beispiel #2
0
 private bool CheckNestedElementForContinue(ItemRepeaterElement firstItemRepeaterElement,
                                            ItemRepeaterElement currentItemRepeaterElement,
                                            XElement nestedRepeaterEndElement)
 {
     if (nestedRepeaterEndElement != null)
     {
         return
             (TraverseUtils.SecondElementsBetween(firstItemRepeaterElement.XElement, nestedRepeaterEndElement)
              .Contains(currentItemRepeaterElement.XElement));
     }
     return(false);
 }
Beispiel #3
0
        public TableTag Parse(XElement startElement, XElement endTableTag)
        {
            var itemsSource = startElement.Value;

            if (string.IsNullOrEmpty(itemsSource))
            {
                throw new Exception(string.Format(MessageStrings.TagNotFoundOrEmpty, "Items"));
            }

            var tag = new TableTag
            {
                TagTable    = startElement,
                TagEndTable = endTableTag,
                ItemsSource = itemsSource,
            };

            tag.MakeTableElementCallback = MakeTableElementCallback;
            int?dynamicRow = null;
            var rowCount   = 1;
            //var between = TraverseUtils.SecondElementsBetween(startElement, endTableTag);
            var tableElement = startElement.NextSdt(WordMl.TableName).FirstOrDefault(element => element.IsBefore(endTableTag));
            var rows         = TraverseUtils.SecondElementsBetween(startElement, endTableTag).Descendants(WordMl.TableRowName).Where(tr => tr.Parent.Equals(tableElement));

            //var tableElement = startElement.NextSdt(WordMl.TableName).FirstOrDefault(element => element.IsBefore(endTableTag));
            // TODO Extend sdt names in loop
            foreach (var tableRow in rows)
            {
                if (
                    tableRow.Descendants()
                    .Any(
                        el =>
                        el.IsTag(ItemIndexTagName) || el.IsTag(ItemTextTagName) || el.IsTag(ItemIfTagName) ||
                        el.IsTag(ItemHtmlContentTagName) || el.IsTag(ItemRepeaterTagName)))
                {
                    if (dynamicRow != null)
                    {
                        throw new Exception("Invalid template! Found several dynamic rows. (Or none dynamic rows)");
                    }
                    dynamicRow = rowCount;
                }
                rowCount++;
            }

            if (tableElement != null)
            {
                tag.Table = tableElement;
            }

            tag.DynamicRow = dynamicRow;
            return(tag);
        }
Beispiel #4
0
        public XElement Generate(ItemRepeaterTag tag, IEnumerable <DataReader> dataReaders, XElement previous = null, XElement parent = null, bool forcedElementSave = false)
        {
            var startElement         = tag.StartItemRepeater;
            var endElement           = tag.EndItemRepeater;
            var inlineWrapping       = CheckInlineWrappingMode(startElement, endElement);
            var itemRepeaterElements =
                TraverseUtils.SecondElementsBetween(startElement, endElement).Select(MakeElementCallback).ToList();
            var      flgCleanUpElements = previous == null;
            XElement current;

            if (inlineWrapping && flgCleanUpElements)
            {
                current = startElement;
            }
            else
            {
                if (previous == null)
                {
                    current = startElement.Parent.Name.Equals(WordMl.ParagraphName) ? startElement.Parent : startElement;
                }
                else
                {
                    current = previous;
                }
            }
            for (var index = 1; index <= dataReaders.Count(); index++)
            {
                XElement nestedRepeaterEndElementTmp = null;
                XElement endIfElementTmp             = null;
                current = this.ProcessElements(
                    itemRepeaterElements,
                    dataReaders.ElementAt(index - 1),
                    current,
                    (inlineWrapping && (parent != null)) ? parent : null,
                    index,
                    ref nestedRepeaterEndElementTmp,
                    ref endIfElementTmp,
                    inlineWrapping && (parent != null)
                    );
            }
            if (flgCleanUpElements && !forcedElementSave)
            {
                foreach (var itemRepeaterElement in itemRepeaterElements)
                {
                    itemRepeaterElement.XElement.Remove();
                }
                startElement.Remove();
                endElement.Remove();
            }
            return(current);
        }
        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()));
        }