internal virtual bool Read(XmlReader reader, SvgConverter conv) { var transformString = reader.GetAttribute("transform"); if (!transformString.IsNullOrEmpty()) { Transforms.AddRange(SvgTransform.Create(transformString, conv)); } conv.PushTransform(Transforms); var depth = reader.Depth; reader.Read(); while (!reader.EOF && reader.Depth > depth) { if (reader.NodeType != XmlNodeType.Element) { reader.Read(); continue; } SvgElement newElement = null; switch (reader.LocalName.ToLower()) { case "g": newElement = new SvgGroupElement(); break; case "circle": newElement = new SvgCircleElement(); break; case "ellipse": newElement = new SvgEllipseElement(); break; case "path": newElement = new SvgPathElement(); break; case "line": newElement = new SvgLineElement(); break; case "rect": newElement = new SvgRectElement(); break; } if (newElement != null) { if (newElement.Read(reader, conv)) { Children.Add(newElement); } } else { reader.Skip(); } } return(true); }