Esempio n. 1
0
 public Node(SVGNodeName name, AttributeList attributes, int depth)
 {
     this.parent = null;
     this.children = new List<Node>();
     this.name = name;
     this.attributes = attributes;
     this.depth = depth;
 }
Esempio n. 2
0
        protected void GetNodesInternal(Node node, List<Node> nodes)
        {
            if (node == null)
                return;
            
            nodes.Add(node);
            int nodeChildrenCount = node.children.Count;
            for (int i = 0; i < nodeChildrenCount; i++)
            {
                GetNodesInternal(node.children [i], nodes);
            }

            if (node is BlockOpenNode)
            {
                //Lookup(name), )
                Node endNode = new BlockCloseNode(node.name, new AttributeList(), node.depth);
                nodes.Add(endNode);
            }
        }
Esempio n. 3
0
        private static void MergeNodeAttributes(Node source, Node target)
        {
            Dictionary<string, string> sourceAttributes = source.attributes.Get;
            Dictionary<string, string> targetAttributes = target.attributes.Get;

            foreach(KeyValuePair<string, string> item in sourceAttributes)
            {
                if(item.Key == "id" || item.Key == "xlink") continue;
                if(targetAttributes.ContainsKey(item.Key))
                {
                    targetAttributes[item.Key] = item.Value;
                } else {
                    targetAttributes.Add(item.Key, item.Value);
                }
            }
        }
Esempio n. 4
0
 public bool IsInlineElement(Node node)
 {
     switch (node.name)
     {
         case SVGNodeName.Circle:
         case SVGNodeName.Ellipse:
         case SVGNodeName.Line:
         case SVGNodeName.Path:
         case SVGNodeName.Polygon:
         case SVGNodeName.PolyLine:
         case SVGNodeName.Rect:
         case SVGNodeName.Stop:
             return true;
     }
     
     return false;
 }
Esempio n. 5
0
        public void OnStartElement(string name, AttributeList attrs)
        {
            Node node = new BlockOpenNode(Lookup(name), new AttributeList(attrs), _currentDepth++);
//            Debug.Log("OnStartElement: "+name);

            node.parent = _lastParent;
            if (_lastParent != null)
            {
                _lastParent.children.Add(node);
            }

            _lastParent = node;

            OnNode(node);
            //Debug.Log("OnStartElement: "+node.name+", depth: "+node.depth);
        }
Esempio n. 6
0
        public void OnEndElement(string name)
        {
            Node node = new BlockCloseNode(Lookup(name), new AttributeList(), --_currentDepth);
//            Debug.Log("OnEndElement: "+name);

            if (_lastParent != null)
            {
                _lastParent = _lastParent.parent;
            } else
            {
                _lastParent = null;
            }

            node.parent = _lastParent;

            //Debug.Log("OnEndElement: "+node.name+", depth: "+node.depth);

            switch (node.name)
            {
                case SVGNodeName.LinearGradient:
                case SVGNodeName.RadialGradient:
                case SVGNodeName.ConicalGradient:
                    AddNode(node);
                    return;                
                case SVGNodeName.Defs:
                    DontPutInNodesRemove(node);
                    break;
                case SVGNodeName.Symbol:
                    DontPutInNodesRemove(node);
                    break;
                case SVGNodeName.Image:
                    DontPutInNodesRemove(node);
                    break;
                case SVGNodeName.ClipPath:
                    DontPutInNodesRemove(node);
                    break;
                case SVGNodeName.Mask:
                    DontPutInNodesRemove(node);
                    break;
                default:
                    if (dontPutInNodes.Count == 0)
                    {
                        AddNode(node);
                    }
                    break;
            }

        }
Esempio n. 7
0
        public void OnNode(Node node)
        {
            string definitionID = node.attributes.GetValue("id");
            if (!string.IsNullOrEmpty(definitionID))
            {
                if (_defs.ContainsKey(definitionID))
                {
                    _defs [definitionID] = node;
                    Debug.LogWarning("Element: " + node.name + ", ID: " + definitionID + " already exists! Overwriting with new element!");
                } else
                {
                    _defs.Add(definitionID, node);
                }
            }
            
            switch (node.name)
            {
                case SVGNodeName.LinearGradient:
                case SVGNodeName.RadialGradient:
                case SVGNodeName.ConicalGradient:
                case SVGNodeName.Stop:
                    AddNode(node);
                    return;                
                case SVGNodeName.Defs:
                    DontPutInNodesAdd(node);
                    break;
                case SVGNodeName.Symbol:
                    DontPutInNodesAdd(node);
                    //                              Debug.LogError ("Unsupported Element type Symbol");
                    /*
                    #if UNITY_EDITOR
                    if(!SVGAssetImport.errors.Contains(SVGError.Symbol))
                        SVGAssetImport.errors.Add(SVGError.Symbol);
                    #endif
                    */
                    break;
                case SVGNodeName.Image:
                    DontPutInNodesAdd(node);
                    //                              Debug.LogError ("Unsupported Element type Image");
                    #if UNITY_EDITOR
                    if(!SVGAssetImport.errors.Contains(SVGError.Image))
                        SVGAssetImport.errors.Add(SVGError.Image);
                    #endif
                    break;                
                case SVGNodeName.ClipPath:
                    DontPutInNodesAdd(node);
                    //                              Debug.LogError ("Unsupported Element type Clip Path");
                    #if UNITY_EDITOR
                    if(!SVGAssetImport.errors.Contains(SVGError.ClipPath))
                        SVGAssetImport.errors.Add(SVGError.ClipPath);
                    #endif
                    break;
                case SVGNodeName.Mask:
                    DontPutInNodesAdd(node);
                    //                              Debug.LogError ("Unsupported Element type Mask");
                    #if UNITY_EDITOR
                    if(!SVGAssetImport.errors.Contains(SVGError.Mask))
                        SVGAssetImport.errors.Add(SVGError.Mask);
                    #endif
                    break;
                default:
                    if (dontPutInNodes.Count == 0)
                    {
                        AddNode(node);
                    }
                    break;
            }

        }
Esempio n. 8
0
 void DontPutInNodesRemove(Node node)
 {
     if(node is InlineNode) return;
     dontPutInNodes.RemoveAt(dontPutInNodes.Count - 1);
 }
Esempio n. 9
0
 void DontPutInNodesAdd(Node node)
 {
     if(node is InlineNode) return;
     dontPutInNodes.Add(node.name);
 }
Esempio n. 10
0
        public void OnStartParsing(SmallXmlParser parser)
        {
            idx = 0;
            _currentDepth = 0;
            _lastParent = null;

            if (dontPutInNodes == null)
            {
                dontPutInNodes = new List<SVGNodeName>();
            } else
            {
                dontPutInNodes.Clear();
            }
        }
Esempio n. 11
0
        public void AddNode(Node node)
        {
//            Debug.Log("Add Node: "+node.name+", "+node);
            nodes.Add(node);
        }