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; }
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); } }
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); } } }
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; }
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); }
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; } }
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; } }
void DontPutInNodesRemove(Node node) { if(node is InlineNode) return; dontPutInNodes.RemoveAt(dontPutInNodes.Count - 1); }
void DontPutInNodesAdd(Node node) { if(node is InlineNode) return; dontPutInNodes.Add(node.name); }
public void OnStartParsing(SmallXmlParser parser) { idx = 0; _currentDepth = 0; _lastParent = null; if (dontPutInNodes == null) { dontPutInNodes = new List<SVGNodeName>(); } else { dontPutInNodes.Clear(); } }
public void AddNode(Node node) { // Debug.Log("Add Node: "+node.name+", "+node); nodes.Add(node); }