docs: function mxSvgCanvas2D(root, styleEnabled)
  {
  	mxAbstractCanvas2D.call(this);
  
  	/**
  	 * Variable: root
  	 * 
  	 * Reference to the container for the SVG content.
  	 */
  	this.root = root;
  
  	/**
  	 * Variable: gradients
  	 * 
  	 * Local cache of gradients for quick lookups.
  	 */
  	this.gradients = [];
  
  	/**
  	 * Variable: defs
  	 * 
  	 * Reference to the defs section of the SVG document. Only for export.
  	 */
  	this.defs = null;
  	
  	/**
  	 * Variable: styleEnabled
  	 * 
  	 * Stores the value of styleEnabled passed to the constructor.
  	 */
  	this.styleEnabled = (styleEnabled != null) ? styleEnabled : false;
  	
  	var svg = null;
  	
  	// Adds optional defs section for export
  	if (root.ownerDocument != document)
  	{
  		var node = root;
  
  		// Finds owner SVG element in XML DOM
  		while (node != null && node.nodeName != 'svg')
  		{
  			node = node.parentNode;
  		}
  		
  		svg = node;
  	}
  
  	if (svg != null)
  	{
  		// Tries to get existing defs section
  		var tmp = svg.getElementsByTagName('defs');
  		
  		if (tmp.length > 0)
  		{
  			this.defs = svg.getElementsByTagName('defs')[0];
  		}
  		
  		// Adds defs section if none exists
  		if (this.defs == null)
  		{
  			this.defs = this.createElement('defs');
  			
  			if (svg.firstChild != null)
  			{
  				svg.insertBefore(this.defs, svg.firstChild);
  			}
  			else
  			{
  				svg.appendChild(this.defs);
  			}
  		}
  
  		// Adds stylesheet
  		if (this.styleEnabled)
  		{
  			this.defs.appendChild(this.createStyle());
  		}
  	}
  }