Exemplo n.º 1
0
        protected virtual IEnumerable <XmlRenderGroup> ReadRenderGroup(ComponentDescription description, XElement renderElement, XmlRenderGroup parentGroup)
        {
            IConditionTreeItem conditionCollection = ConditionTree.Empty;
            var conditionsAttribute = renderElement.Attribute("conditions");

            if (conditionsAttribute != null)
            {
                if (!conditionParser.Parse(conditionsAttribute, description, logger, out conditionCollection))
                {
                    yield break;
                }
            }

            var renderGroup = new XmlRenderGroup(new ConditionTree(ConditionTree.ConditionOperator.AND, parentGroup.Conditions, conditionCollection))
            {
                AutoRotate     = parentGroup.AutoRotate,
                AutoRotateFlip = parentGroup.AutoRotateFlip,
            };

            autoRotateOptionsReader.TrySetAutoRotateOptions(renderElement, renderGroup);

            var childGroups = renderElement.Elements().SelectMany(x => ReadElement(x, description, renderGroup));

            yield return(renderGroup);

            foreach (var child in childGroups)
            {
                yield return(child);
            }
        }
Exemplo n.º 2
0
        public virtual void ReadSection(XElement element, ComponentDescription description)
        {
            var groups       = new List <XmlRenderGroup>();
            var defaultGroup = new XmlRenderGroup(ConditionTree.Empty);

            if (description.Metadata.FormatVersion >= Version1_5)
            {
                autoRotateOptionsReader.TrySetAutoRotateOptions(element, defaultGroup);
            }

            groups.Add(defaultGroup);
            foreach (var child in element.Elements())
            {
                groups.AddRange(ReadElement(child, description, defaultGroup));
            }

            var flatGroups = groups.SelectMany(x => x.FlattenRoot(logger)).ToArray();

            description.RenderDescriptions = flatGroups.GroupBy(x => ConditionsReducer.SimplifyConditions(x.Conditions)).Select(g => new RenderDescription(g.Key, g.SelectMany(x => x.Value).ToArray())).ToArray();
        }
Exemplo n.º 3
0
 public virtual IEnumerable <XmlRenderGroup> ReadElement(XElement element, ComponentDescription description, XmlRenderGroup groupContext)
 {
     if (element.Name == GroupElementName || (description.Metadata.FormatVersion >= Version1_5 && element.Name == GElementName))
     {
         return(ReadRenderGroup(description, element, groupContext));
     }
     else if (renderCommandReaders.TryGetValue($"{XmlLoader.ComponentNamespace.NamespaceName}:{element.Name.LocalName}", out var renderCommandReader))
     {
         if (renderCommandReader.ReadRenderCommand(element, description, out var command))
         {
             groupContext.Value.Add(command);
         }
         return(Enumerable.Empty <XmlRenderGroup>());
     }
     else if (element.Name == LineElementName)
     {
         if (ReadLineCommand(element, out var line))
         {
             groupContext.Value.Add(line);
         }
         return(Enumerable.Empty <XmlRenderGroup>());
     }
     else if (element.Name == RectElementName)
     {
         if (ReadRectCommand(element, out var rect))
         {
             groupContext.Value.Add(rect);
         }
         return(Enumerable.Empty <XmlRenderGroup>());
     }
     else if (element.Name == EllipseElementName)
     {
         if (ReadEllipseCommand(description.Metadata.FormatVersion, element, out var ellipse))
         {
             groupContext.Value.Add(ellipse);
         }
         return(Enumerable.Empty <XmlRenderGroup>());
     }
     else if (element.Name == PathElementName)
     {
         if (ReadPathCommand(element, out var path))
         {
             groupContext.Value.Add(path);
         }
         return(Enumerable.Empty <XmlRenderGroup>());
     }
     else if (element.HasElements)
     {
         if (element.Name.Namespace == XmlLoader.ComponentNamespace)
         {
             logger.LogWarning(element, $"Descending unknown render element '{element.Name.LocalName}'");
         }
         return(element.Elements().SelectMany(x => ReadElement(x, description, groupContext)));
     }
     else
     {
         if (element.Name.Namespace == XmlLoader.ComponentNamespace)
         {
             logger.LogWarning(element, $"Unknown render element '{element.Name.LocalName}'");
         }
         return(Enumerable.Empty <XmlRenderGroup>());
     }
 }