public void GetElementList(List<ISVGDrawable> elementList, SVGPaintable paintable,
SVGGraphics render, SVGTransformList summaryTransformList)
{
bool exitFlag = false;
while(!exitFlag && Next()) {
if(Node is BlockCloseNode) {
exitFlag = true;
continue;
}
switch(Node.Name) {
case SVGNodeName.Rect: elementList.Add(new SVGRectElement(Node.Attributes, summaryTransformList, paintable, render)); break;
case SVGNodeName.Line: elementList.Add(new SVGLineElement(Node.Attributes, summaryTransformList, paintable, render)); break;
case SVGNodeName.Circle: elementList.Add(new SVGCircleElement(Node.Attributes, summaryTransformList, paintable, render)); break;
case SVGNodeName.Ellipse: elementList.Add(new SVGEllipseElement(Node.Attributes, summaryTransformList, paintable, render)); break;
case SVGNodeName.PolyLine: elementList.Add(new SVGPolylineElement(Node.Attributes, summaryTransformList, paintable, render)); break;
case SVGNodeName.Polygon: elementList.Add(new SVGPolygonElement(Node.Attributes, summaryTransformList, paintable, render)); break;
case SVGNodeName.Path: elementList.Add(new SVGPathElement(Node.Attributes, summaryTransformList, paintable, render)); break;
case SVGNodeName.SVG: elementList.Add(new SVGSVGElement(this, summaryTransformList, paintable, render)); break;
case SVGNodeName.G: elementList.Add(new SVGGElement(this, summaryTransformList, paintable, render)); break;
case SVGNodeName.LinearGradient: paintable.AppendLinearGradient(new SVGLinearGradientElement(this, Node.Attributes)); break;
case SVGNodeName.RadialGradient: paintable.AppendRadialGradient(new SVGRadialGradientElement(this, Node.Attributes)); break;
case SVGNodeName.Defs: GetElementList(elementList, paintable, render, summaryTransformList); break;
case SVGNodeName.Title: GetElementList(elementList, paintable, render, summaryTransformList); break;
case SVGNodeName.Desc: GetElementList(elementList, paintable, render, summaryTransformList); break;
}
}
}