You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							2558 lines
						
					
					
						
							57 KiB
						
					
					
				
			
		
		
	
	
							2558 lines
						
					
					
						
							57 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
// http://www.w3.org/TR/SVG11/intro.html#Definitions | 
						|
exports.elemsGroups = { | 
						|
    animation: ['animate', 'animateColor', 'animateMotion', 'animateTransform', 'set'], | 
						|
    descriptive: ['desc', 'metadata', 'title'], | 
						|
    shape: ['circle', 'ellipse', 'line', 'path', 'polygon', 'polyline', 'rect'], | 
						|
    structural: ['defs', 'g', 'svg', 'symbol', 'use'], | 
						|
    paintServer: ['solidColor', 'linearGradient', 'radialGradient', 'meshGradient', 'pattern', 'hatch'], | 
						|
    nonRendering: ['linearGradient', 'radialGradient', 'pattern', 'clipPath', 'mask', 'marker', 'symbol', 'filter', 'solidColor'], | 
						|
    container: ['a', 'defs', 'g', 'marker', 'mask', 'missing-glyph', 'pattern', 'svg', 'switch', 'symbol', 'foreignObject'], | 
						|
    textContent: ['altGlyph', 'altGlyphDef', 'altGlyphItem', 'glyph', 'glyphRef', 'textPath', 'text', 'tref', 'tspan'], | 
						|
    textContentChild: ['altGlyph', 'textPath', 'tref', 'tspan'], | 
						|
    lightSource: ['feDiffuseLighting', 'feSpecularLighting', 'feDistantLight', 'fePointLight', 'feSpotLight'], | 
						|
    filterPrimitive: ['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feImage', 'feMerge', 'feMorphology', 'feOffset', 'feSpecularLighting', 'feTile', 'feTurbulence'] | 
						|
}; | 
						|
 | 
						|
exports.pathElems = ['path', 'glyph', 'missing-glyph']; | 
						|
 | 
						|
// http://www.w3.org/TR/SVG11/intro.html#Definitions | 
						|
exports.attrsGroups = { | 
						|
    animationAddition: ['additive', 'accumulate'], | 
						|
    animationAttributeTarget: ['attributeType', 'attributeName'], | 
						|
    animationEvent: ['onbegin', 'onend', 'onrepeat', 'onload'], | 
						|
    animationTiming: ['begin', 'dur', 'end', 'min', 'max', 'restart', 'repeatCount', 'repeatDur', 'fill'], | 
						|
    animationValue: ['calcMode', 'values', 'keyTimes', 'keySplines', 'from', 'to', 'by'], | 
						|
    conditionalProcessing: ['requiredFeatures', 'requiredExtensions', 'systemLanguage'], | 
						|
    core: ['id', 'tabindex', 'xml:base', 'xml:lang', 'xml:space'], | 
						|
    graphicalEvent: ['onfocusin', 'onfocusout', 'onactivate', 'onclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout', 'onload'], | 
						|
    presentation: [ | 
						|
        'alignment-baseline', | 
						|
        'baseline-shift', | 
						|
        'clip', | 
						|
        'clip-path', | 
						|
        'clip-rule', | 
						|
        'color', | 
						|
        'color-interpolation', | 
						|
        'color-interpolation-filters', | 
						|
        'color-profile', | 
						|
        'color-rendering', | 
						|
        'cursor', | 
						|
        'direction', | 
						|
        'display', | 
						|
        'dominant-baseline', | 
						|
        'enable-background', | 
						|
        'fill', | 
						|
        'fill-opacity', | 
						|
        'fill-rule', | 
						|
        'filter', | 
						|
        'flood-color', | 
						|
        'flood-opacity', | 
						|
        'font-family', | 
						|
        'font-size', | 
						|
        'font-size-adjust', | 
						|
        'font-stretch', | 
						|
        'font-style', | 
						|
        'font-variant', | 
						|
        'font-weight', | 
						|
        'glyph-orientation-horizontal', | 
						|
        'glyph-orientation-vertical', | 
						|
        'image-rendering', | 
						|
        'letter-spacing', | 
						|
        'lighting-color', | 
						|
        'marker-end', | 
						|
        'marker-mid', | 
						|
        'marker-start', | 
						|
        'mask', | 
						|
        'opacity', | 
						|
        'overflow', | 
						|
        'paint-order', | 
						|
        'pointer-events', | 
						|
        'shape-rendering', | 
						|
        'stop-color', | 
						|
        'stop-opacity', | 
						|
        'stroke', | 
						|
        'stroke-dasharray', | 
						|
        'stroke-dashoffset', | 
						|
        'stroke-linecap', | 
						|
        'stroke-linejoin', | 
						|
        'stroke-miterlimit', | 
						|
        'stroke-opacity', | 
						|
        'stroke-width', | 
						|
        'text-anchor', | 
						|
        'text-decoration', | 
						|
        'text-overflow', | 
						|
        'text-rendering', | 
						|
        'transform', | 
						|
        'unicode-bidi', | 
						|
        'vector-effect', | 
						|
        'visibility', | 
						|
        'word-spacing', | 
						|
        'writing-mode' | 
						|
    ], | 
						|
    xlink: ['xlink:href', 'xlink:show', 'xlink:actuate', 'xlink:type', 'xlink:role', 'xlink:arcrole', 'xlink:title'], | 
						|
    documentEvent: ['onunload', 'onabort', 'onerror', 'onresize', 'onscroll', 'onzoom'], | 
						|
    filterPrimitive: ['x', 'y', 'width', 'height', 'result'], | 
						|
    transferFunction: ['type', 'tableValues', 'slope', 'intercept', 'amplitude', 'exponent', 'offset'] | 
						|
}; | 
						|
 | 
						|
exports.attrsGroupsDefaults = { | 
						|
    core: {'xml:space': 'preserve'}, | 
						|
    filterPrimitive: {x: '0', y: '0', width: '100%', height: '100%'}, | 
						|
    presentation: { | 
						|
        clip: 'auto', | 
						|
        'clip-path': 'none', | 
						|
        'clip-rule': 'nonzero', | 
						|
        mask: 'none', | 
						|
        opacity: '1', | 
						|
        'stop-color': '#000', | 
						|
        'stop-opacity': '1', | 
						|
        'fill-opacity': '1', | 
						|
        'fill-rule': 'nonzero', | 
						|
        fill: '#000', | 
						|
        stroke: 'none', | 
						|
        'stroke-width': '1', | 
						|
        'stroke-linecap': 'butt', | 
						|
        'stroke-linejoin': 'miter', | 
						|
        'stroke-miterlimit': '4', | 
						|
        'stroke-dasharray': 'none', | 
						|
        'stroke-dashoffset': '0', | 
						|
        'stroke-opacity': '1', | 
						|
        'paint-order': 'normal', | 
						|
        'vector-effect': 'none', | 
						|
        display: 'inline', | 
						|
        visibility: 'visible', | 
						|
        'marker-start': 'none', | 
						|
        'marker-mid': 'none', | 
						|
        'marker-end': 'none', | 
						|
        'color-interpolation': 'sRGB', | 
						|
        'color-interpolation-filters': 'linearRGB', | 
						|
        'color-rendering': 'auto', | 
						|
        'shape-rendering': 'auto', | 
						|
        'text-rendering': 'auto', | 
						|
        'image-rendering': 'auto', | 
						|
        'font-style': 'normal', | 
						|
        'font-variant': 'normal', | 
						|
        'font-weight': 'normal', | 
						|
        'font-stretch': 'normal', | 
						|
        'font-size': 'medium', | 
						|
        'font-size-adjust': 'none', | 
						|
        kerning: 'auto', | 
						|
        'letter-spacing': 'normal', | 
						|
        'word-spacing': 'normal', | 
						|
        'text-decoration': 'none', | 
						|
        'text-anchor': 'start', | 
						|
        'text-overflow': 'clip', | 
						|
        'writing-mode': 'lr-tb', | 
						|
        'glyph-orientation-vertical': 'auto', | 
						|
        'glyph-orientation-horizontal': '0deg', | 
						|
        direction: 'ltr', | 
						|
        'unicode-bidi': 'normal', | 
						|
        'dominant-baseline': 'auto', | 
						|
        'alignment-baseline': 'baseline', | 
						|
        'baseline-shift': 'baseline' | 
						|
    }, | 
						|
    transferFunction: {slope: '1', intercept: '0', amplitude: '1', exponent: '1', offset: '0'} | 
						|
}; | 
						|
 | 
						|
// http://www.w3.org/TR/SVG11/eltindex.html | 
						|
exports.elems = { | 
						|
    a: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'target' | 
						|
        ], | 
						|
        defaults: { | 
						|
            target: '_self' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    altGlyph: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'x', | 
						|
            'y', | 
						|
            'dx', | 
						|
            'dy', | 
						|
            'glyphRef', | 
						|
            'format', | 
						|
            'rotate' | 
						|
        ] | 
						|
    }, | 
						|
    altGlyphDef: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        content: [ | 
						|
            'glyphRef' | 
						|
        ] | 
						|
    }, | 
						|
    altGlyphItem: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        content: [ | 
						|
            'glyphRef', | 
						|
            'altGlyphItem' | 
						|
        ] | 
						|
    }, | 
						|
    animate: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'animationAddition', | 
						|
            'animationAttributeTarget', | 
						|
            'animationEvent', | 
						|
            'animationTiming', | 
						|
            'animationValue', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    animateColor: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'animationEvent', | 
						|
            'xlink', | 
						|
            'animationAttributeTarget', | 
						|
            'animationTiming', | 
						|
            'animationValue', | 
						|
            'animationAddition', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    animateMotion: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'animationEvent', | 
						|
            'xlink', | 
						|
            'animationTiming', | 
						|
            'animationValue', | 
						|
            'animationAddition' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired', | 
						|
            'path', | 
						|
            'keyPoints', | 
						|
            'rotate', | 
						|
            'origin' | 
						|
        ], | 
						|
        defaults: { | 
						|
            'rotate': '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'mpath' | 
						|
        ] | 
						|
    }, | 
						|
    animateTransform: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'animationEvent', | 
						|
            'xlink', | 
						|
            'animationAttributeTarget', | 
						|
            'animationTiming', | 
						|
            'animationValue', | 
						|
            'animationAddition' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired', | 
						|
            'type' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    circle: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'cx', | 
						|
            'cy', | 
						|
            'r' | 
						|
        ], | 
						|
        defaults: { | 
						|
            cx: '0', | 
						|
            cy: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    clipPath: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'clipPathUnits' | 
						|
        ], | 
						|
        defaults: { | 
						|
            clipPathUnits: 'userSpaceOnUse' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape' | 
						|
        ], | 
						|
        content: [ | 
						|
            'text', | 
						|
            'use' | 
						|
        ] | 
						|
    }, | 
						|
    'color-profile': { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'local', | 
						|
            'name', | 
						|
            'rendering-intent' | 
						|
        ], | 
						|
        defaults: { | 
						|
            name: 'sRGB', | 
						|
            'rendering-intent': 'auto' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    cursor: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'conditionalProcessing', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired', | 
						|
            'x', | 
						|
            'y' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    defs: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    desc: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style' | 
						|
        ] | 
						|
    }, | 
						|
    ellipse: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'cx', | 
						|
            'cy', | 
						|
            'rx', | 
						|
            'ry' | 
						|
        ], | 
						|
        defaults: { | 
						|
            cx: '0', | 
						|
            cy: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    feBlend: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            // TODO: in - 'If no value is provided and this is the first filter primitive, | 
						|
            // then this filter primitive will use SourceGraphic as its input' | 
						|
            'in', | 
						|
            'in2', | 
						|
            'mode' | 
						|
        ], | 
						|
        defaults: { | 
						|
            mode: 'normal' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feColorMatrix: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'type', | 
						|
            'values' | 
						|
        ], | 
						|
        defaults: { | 
						|
            type: 'matrix' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feComponentTransfer: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in' | 
						|
        ], | 
						|
        content: [ | 
						|
            'feFuncA', | 
						|
            'feFuncB', | 
						|
            'feFuncG', | 
						|
            'feFuncR' | 
						|
        ] | 
						|
    }, | 
						|
    feComposite: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'in2', | 
						|
            'operator', | 
						|
            'k1', | 
						|
            'k2', | 
						|
            'k3', | 
						|
            'k4' | 
						|
        ], | 
						|
        defaults: { | 
						|
            operator: 'over', | 
						|
            k1: '0', | 
						|
            k2: '0', | 
						|
            k3: '0', | 
						|
            k4: '0' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feConvolveMatrix: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'order', | 
						|
            'kernelMatrix', | 
						|
            // TODO: divisor - 'The default value is the sum of all values in kernelMatrix, | 
						|
            // with the exception that if the sum is zero, then the divisor is set to 1' | 
						|
            'divisor', | 
						|
            'bias', | 
						|
            // TODO: targetX - 'By default, the convolution matrix is centered in X over each | 
						|
            // pixel of the input image (i.e., targetX = floor ( orderX / 2 ))' | 
						|
            'targetX', | 
						|
            'targetY', | 
						|
            'edgeMode', | 
						|
            // TODO: kernelUnitLength - 'The first number is the <dx> value. The second number | 
						|
            // is the <dy> value. If the <dy> value is not specified, it defaults to the same value as <dx>' | 
						|
            'kernelUnitLength', | 
						|
            'preserveAlpha' | 
						|
        ], | 
						|
        defaults: { | 
						|
            order: '3', | 
						|
            bias: '0', | 
						|
            edgeMode: 'duplicate', | 
						|
            preserveAlpha: 'false' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feDiffuseLighting: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'surfaceScale', | 
						|
            'diffuseConstant', | 
						|
            'kernelUnitLength' | 
						|
        ], | 
						|
        defaults: { | 
						|
            surfaceScale: '1', | 
						|
            diffuseConstant: '1' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            // TODO: 'exactly one light source element, in any order' | 
						|
            'feDistantLight', | 
						|
            'fePointLight', | 
						|
            'feSpotLight' | 
						|
        ] | 
						|
    }, | 
						|
    feDisplacementMap: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'in2', | 
						|
            'scale', | 
						|
            'xChannelSelector', | 
						|
            'yChannelSelector' | 
						|
        ], | 
						|
        defaults: { | 
						|
            scale: '0', | 
						|
            xChannelSelector: 'A', | 
						|
            yChannelSelector: 'A' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feDistantLight: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'azimuth', | 
						|
            'elevation' | 
						|
        ], | 
						|
        defaults: { | 
						|
            azimuth: '0', | 
						|
            elevation: '0' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feFlood: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'animateColor', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feFuncA: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'transferFunction' | 
						|
        ], | 
						|
        content: [ | 
						|
            'set', | 
						|
            'animate' | 
						|
        ] | 
						|
    }, | 
						|
    feFuncB: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'transferFunction' | 
						|
        ], | 
						|
        content: [ | 
						|
            'set', | 
						|
            'animate' | 
						|
        ] | 
						|
    }, | 
						|
    feFuncG: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'transferFunction' | 
						|
        ], | 
						|
        content: [ | 
						|
            'set', | 
						|
            'animate' | 
						|
        ] | 
						|
    }, | 
						|
    feFuncR: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'transferFunction' | 
						|
        ], | 
						|
        content: [ | 
						|
            'set', | 
						|
            'animate' | 
						|
        ] | 
						|
    }, | 
						|
    feGaussianBlur: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'stdDeviation' | 
						|
        ], | 
						|
        defaults: { | 
						|
            stdDeviation: '0' | 
						|
        }, | 
						|
        content: [ | 
						|
            'set', | 
						|
            'animate' | 
						|
        ] | 
						|
    }, | 
						|
    feImage: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'preserveAspectRatio', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        defaults: { | 
						|
            preserveAspectRatio: 'xMidYMid meet' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'animateTransform', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feMerge: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style' | 
						|
        ], | 
						|
        content: [ | 
						|
            'feMergeNode' | 
						|
        ] | 
						|
    }, | 
						|
    feMergeNode: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'in' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feMorphology: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'operator', | 
						|
            'radius' | 
						|
        ], | 
						|
        defaults: { | 
						|
            operator: 'erode', | 
						|
            radius: '0' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feOffset: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'dx', | 
						|
            'dy' | 
						|
        ], | 
						|
        defaults: { | 
						|
            dx: '0', | 
						|
            dy: '0' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    fePointLight: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'x', | 
						|
            'y', | 
						|
            'z' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0', | 
						|
            z: '0' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feSpecularLighting: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in', | 
						|
            'surfaceScale', | 
						|
            'specularConstant', | 
						|
            'specularExponent', | 
						|
            'kernelUnitLength' | 
						|
        ], | 
						|
        defaults: { | 
						|
            surfaceScale: '1', | 
						|
            specularConstant: '1', | 
						|
            specularExponent: '1' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive', | 
						|
            // TODO: exactly one 'light source element' | 
						|
            'lightSource' | 
						|
        ] | 
						|
    }, | 
						|
    feSpotLight: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'x', | 
						|
            'y', | 
						|
            'z', | 
						|
            'pointsAtX', | 
						|
            'pointsAtY', | 
						|
            'pointsAtZ', | 
						|
            'specularExponent', | 
						|
            'limitingConeAngle' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0', | 
						|
            z: '0', | 
						|
            pointsAtX: '0', | 
						|
            pointsAtY: '0', | 
						|
            pointsAtZ: '0', | 
						|
            specularExponent: '1' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feTile: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'in' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    feTurbulence: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'baseFrequency', | 
						|
            'numOctaves', | 
						|
            'seed', | 
						|
            'stitchTiles', | 
						|
            'type' | 
						|
        ], | 
						|
        defaults: { | 
						|
            baseFrequency: '0', | 
						|
            numOctaves: '1', | 
						|
            seed: '0', | 
						|
            stitchTiles: 'noStitch', | 
						|
            type: 'turbulence' | 
						|
        }, | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    filter: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height', | 
						|
            'filterRes', | 
						|
            'filterUnits', | 
						|
            'primitiveUnits', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        defaults: { | 
						|
            primitiveUnits: 'userSpaceOnUse', | 
						|
            x: '-10%', | 
						|
            y: '-10%', | 
						|
            width: '120%', | 
						|
            height: '120%' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive', | 
						|
            'filterPrimitive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    font: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'horiz-origin-x', | 
						|
            'horiz-origin-y', | 
						|
            'horiz-adv-x', | 
						|
            'vert-origin-x', | 
						|
            'vert-origin-y', | 
						|
            'vert-adv-y' | 
						|
        ], | 
						|
        defaults: { | 
						|
            'horiz-origin-x': '0', | 
						|
            'horiz-origin-y': '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'font-face', | 
						|
            'glyph', | 
						|
            'hkern', | 
						|
            'missing-glyph', | 
						|
            'vkern' | 
						|
        ] | 
						|
    }, | 
						|
    'font-face': { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'font-family', | 
						|
            'font-style', | 
						|
            'font-variant', | 
						|
            'font-weight', | 
						|
            'font-stretch', | 
						|
            'font-size', | 
						|
            'unicode-range', | 
						|
            'units-per-em', | 
						|
            'panose-1', | 
						|
            'stemv', | 
						|
            'stemh', | 
						|
            'slope', | 
						|
            'cap-height', | 
						|
            'x-height', | 
						|
            'accent-height', | 
						|
            'ascent', | 
						|
            'descent', | 
						|
            'widths', | 
						|
            'bbox', | 
						|
            'ideographic', | 
						|
            'alphabetic', | 
						|
            'mathematical', | 
						|
            'hanging', | 
						|
            'v-ideographic', | 
						|
            'v-alphabetic', | 
						|
            'v-mathematical', | 
						|
            'v-hanging', | 
						|
            'underline-position', | 
						|
            'underline-thickness', | 
						|
            'strikethrough-position', | 
						|
            'strikethrough-thickness', | 
						|
            'overline-position', | 
						|
            'overline-thickness' | 
						|
        ], | 
						|
        defaults: { | 
						|
            'font-style': 'all', | 
						|
            'font-variant': 'normal', | 
						|
            'font-weight': 'all', | 
						|
            'font-stretch': 'normal', | 
						|
            'unicode-range': 'U+0-10FFFF', | 
						|
            'units-per-em': '1000', | 
						|
            'panose-1': '0 0 0 0 0 0 0 0 0 0', | 
						|
            'slope': '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            // TODO: "at most one 'font-face-src' element" | 
						|
            'font-face-src' | 
						|
        ] | 
						|
    }, | 
						|
    // TODO: empty content | 
						|
    'font-face-format': { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'string' | 
						|
        ] | 
						|
    }, | 
						|
    'font-face-name': { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'name' | 
						|
        ] | 
						|
    }, | 
						|
    'font-face-src': { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        content: [ | 
						|
            'font-face-name', | 
						|
            'font-face-uri' | 
						|
        ] | 
						|
    }, | 
						|
    'font-face-uri': { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        content: [ | 
						|
            'font-face-format' | 
						|
        ] | 
						|
    }, | 
						|
    foreignObject: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'conditionalProcessing', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: 0, | 
						|
            y: 0 | 
						|
        } | 
						|
    }, | 
						|
    g: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    glyph: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'd', | 
						|
            'horiz-adv-x', | 
						|
            'vert-origin-x', | 
						|
            'vert-origin-y', | 
						|
            'vert-adv-y', | 
						|
            'unicode', | 
						|
            'glyph-name', | 
						|
            'orientation', | 
						|
            'arabic-form', | 
						|
            'lang' | 
						|
        ], | 
						|
        defaults: { | 
						|
            'arabic-form': 'initial' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ], | 
						|
    }, | 
						|
    glyphRef: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'd', | 
						|
            'horiz-adv-x', | 
						|
            'vert-origin-x', | 
						|
            'vert-origin-y', | 
						|
            'vert-adv-y' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    hatch: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'x', | 
						|
            'y', | 
						|
            'pitch', | 
						|
            'rotate', | 
						|
            'hatchUnits', | 
						|
            'hatchContentUnits', | 
						|
            'transform' | 
						|
        ], | 
						|
        defaults: { | 
						|
            hatchUnits: 'objectBoundingBox', | 
						|
            hatchContentUnits: 'userSpaceOnUse', | 
						|
            x: '0', | 
						|
            y: '0', | 
						|
            pitch: '0', | 
						|
            rotate: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'hatchPath' | 
						|
        ] | 
						|
    }, | 
						|
    hatchPath: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'd', | 
						|
            'offset' | 
						|
        ], | 
						|
        defaults: { | 
						|
            offset: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    hkern: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'u1', | 
						|
            'g1', | 
						|
            'u2', | 
						|
            'g2', | 
						|
            'k' | 
						|
        ] | 
						|
    }, | 
						|
    image: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'conditionalProcessing', | 
						|
            'graphicalEvent', | 
						|
            'xlink', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'preserveAspectRatio', | 
						|
            'transform', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0', | 
						|
            preserveAspectRatio: 'xMidYMid meet' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    line: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'x1', | 
						|
            'y1', | 
						|
            'x2', | 
						|
            'y2' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x1: '0', | 
						|
            y1: '0', | 
						|
            x2: '0', | 
						|
            y2: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    linearGradient: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'x1', | 
						|
            'y1', | 
						|
            'x2', | 
						|
            'y2', | 
						|
            'gradientUnits', | 
						|
            'gradientTransform', | 
						|
            'spreadMethod', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x1: '0', | 
						|
            y1: '0', | 
						|
            x2: '100%', | 
						|
            y2: '0', | 
						|
            spreadMethod: 'pad' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'animateTransform', | 
						|
            'set', | 
						|
            'stop' | 
						|
        ] | 
						|
    }, | 
						|
    marker: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'viewBox', | 
						|
            'preserveAspectRatio', | 
						|
            'refX', | 
						|
            'refY', | 
						|
            'markerUnits', | 
						|
            'markerWidth', | 
						|
            'markerHeight', | 
						|
            'orient' | 
						|
        ], | 
						|
        defaults: { | 
						|
            markerUnits: 'strokeWidth', | 
						|
            refX: '0', | 
						|
            refY: '0', | 
						|
            markerWidth: '3', | 
						|
            markerHeight: '3' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    mask: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height', | 
						|
            'maskUnits', | 
						|
            'maskContentUnits' | 
						|
        ], | 
						|
        defaults: { | 
						|
            maskUnits: 'objectBoundingBox', | 
						|
            maskContentUnits: 'userSpaceOnUse', | 
						|
            x: '-10%', | 
						|
            y: '-10%', | 
						|
            width: '120%', | 
						|
            height: '120%' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    metadata: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ] | 
						|
    }, | 
						|
    'missing-glyph': { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'd', | 
						|
            'horiz-adv-x', | 
						|
            'vert-origin-x', | 
						|
            'vert-origin-y', | 
						|
            'vert-adv-y' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    mpath: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    path: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'd', | 
						|
            'pathLength' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    pattern: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'viewBox', | 
						|
            'preserveAspectRatio', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height', | 
						|
            'patternUnits', | 
						|
            'patternContentUnits', | 
						|
            'patternTransform', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        defaults: { | 
						|
            patternUnits: 'objectBoundingBox', | 
						|
            patternContentUnits: 'userSpaceOnUse', | 
						|
            x: '0', | 
						|
            y: '0', | 
						|
            width: '0', | 
						|
            height: '0', | 
						|
            preserveAspectRatio: 'xMidYMid meet' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'paintServer', | 
						|
            'shape', | 
						|
            'structural' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    polygon: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'points' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    polyline: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'points' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    radialGradient: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'cx', | 
						|
            'cy', | 
						|
            'r', | 
						|
            'fx', | 
						|
            'fy', | 
						|
            'fr', | 
						|
            'gradientUnits', | 
						|
            'gradientTransform', | 
						|
            'spreadMethod', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        defaults: { | 
						|
            gradientUnits: 'objectBoundingBox', | 
						|
            cx: '50%', | 
						|
            cy: '50%', | 
						|
            r: '50%' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'animateTransform', | 
						|
            'set', | 
						|
            'stop' | 
						|
        ] | 
						|
    }, | 
						|
    meshGradient: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'x', | 
						|
            'y', | 
						|
            'gradientUnits', | 
						|
            'transform' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive', | 
						|
            'paintServer', | 
						|
            'animation', | 
						|
        ], | 
						|
        content: [ | 
						|
            'meshRow' | 
						|
        ] | 
						|
    }, | 
						|
    meshRow: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'meshPatch' | 
						|
        ] | 
						|
    }, | 
						|
    meshPatch: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'stop' | 
						|
        ] | 
						|
    }, | 
						|
    rect: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height', | 
						|
            'rx', | 
						|
            'ry' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    script: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired', | 
						|
            'type', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ] | 
						|
    }, | 
						|
    set: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'animation', | 
						|
            'xlink', | 
						|
            'animationAttributeTarget', | 
						|
            'animationTiming', | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired', | 
						|
            'to' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    solidColor: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'paintServer' | 
						|
        ] | 
						|
    }, | 
						|
    stop: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'offset', | 
						|
            'path' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'animateColor', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    style: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'type', | 
						|
            'media', | 
						|
            'title' | 
						|
        ], | 
						|
        defaults: { | 
						|
            type: 'text/css' | 
						|
        } | 
						|
    }, | 
						|
    svg: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'documentEvent', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height', | 
						|
            'viewBox', | 
						|
            'preserveAspectRatio', | 
						|
            'zoomAndPan', | 
						|
            'version', | 
						|
            'baseProfile', | 
						|
            'contentScriptType', | 
						|
            'contentStyleType' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0', | 
						|
            width: '100%', | 
						|
            height: '100%', | 
						|
            preserveAspectRatio: 'xMidYMid meet', | 
						|
            zoomAndPan: 'magnify', | 
						|
            version: '1.1', | 
						|
            baseProfile: 'none', | 
						|
            contentScriptType: 'application/ecmascript', | 
						|
            contentStyleType: 'text/css' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    switch: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'foreignObject', | 
						|
            'g', | 
						|
            'image', | 
						|
            'svg', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'use' | 
						|
        ] | 
						|
    }, | 
						|
    symbol: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'preserveAspectRatio', | 
						|
            'viewBox', | 
						|
            'refX', | 
						|
            'refY' | 
						|
        ], | 
						|
        defaults: { | 
						|
            refX: 0, | 
						|
            refY: 0 | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'shape', | 
						|
            'structural', | 
						|
            'paintServer' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyphDef', | 
						|
            'clipPath', | 
						|
            'color-profile', | 
						|
            'cursor', | 
						|
            'filter', | 
						|
            'font', | 
						|
            'font-face', | 
						|
            'foreignObject', | 
						|
            'image', | 
						|
            'marker', | 
						|
            'mask', | 
						|
            'pattern', | 
						|
            'script', | 
						|
            'style', | 
						|
            'switch', | 
						|
            'text', | 
						|
            'view' | 
						|
        ] | 
						|
    }, | 
						|
    text: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'lengthAdjust', | 
						|
            'x', | 
						|
            'y', | 
						|
            'dx', | 
						|
            'dy', | 
						|
            'rotate', | 
						|
            'textLength' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0', | 
						|
            lengthAdjust: 'spacing' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive', | 
						|
            'textContentChild' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a' | 
						|
        ] | 
						|
    }, | 
						|
    textPath: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'href', | 
						|
            'xlink:href', | 
						|
            'startOffset', | 
						|
            'method', | 
						|
            'spacing', | 
						|
            'd' | 
						|
        ], | 
						|
        defaults: { | 
						|
            startOffset: '0', | 
						|
            method: 'align', | 
						|
            spacing: 'exact' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyph', | 
						|
            'animate', | 
						|
            'animateColor', | 
						|
            'set', | 
						|
            'tref', | 
						|
            'tspan' | 
						|
        ] | 
						|
    }, | 
						|
    title: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style' | 
						|
        ] | 
						|
    }, | 
						|
    tref: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'animate', | 
						|
            'animateColor', | 
						|
            'set' | 
						|
        ] | 
						|
    }, | 
						|
    tspan: { | 
						|
        attrsGroups: [ | 
						|
            'conditionalProcessing', | 
						|
            'core', | 
						|
            'graphicalEvent', | 
						|
            'presentation' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'x', | 
						|
            'y', | 
						|
            'dx', | 
						|
            'dy', | 
						|
            'rotate', | 
						|
            'textLength', | 
						|
            'lengthAdjust' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ], | 
						|
        content: [ | 
						|
            'a', | 
						|
            'altGlyph', | 
						|
            'animate', | 
						|
            'animateColor', | 
						|
            'set', | 
						|
            'tref', | 
						|
            'tspan' | 
						|
        ] | 
						|
    }, | 
						|
    use: { | 
						|
        attrsGroups: [ | 
						|
            'core', | 
						|
            'conditionalProcessing', | 
						|
            'graphicalEvent', | 
						|
            'presentation', | 
						|
            'xlink' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'class', | 
						|
            'style', | 
						|
            'externalResourcesRequired', | 
						|
            'transform', | 
						|
            'x', | 
						|
            'y', | 
						|
            'width', | 
						|
            'height', | 
						|
            'href', | 
						|
            'xlink:href' | 
						|
        ], | 
						|
        defaults: { | 
						|
            x: '0', | 
						|
            y: '0' | 
						|
        }, | 
						|
        contentGroups: [ | 
						|
            'animation', | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    view: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'externalResourcesRequired', | 
						|
            'viewBox', | 
						|
            'preserveAspectRatio', | 
						|
            'zoomAndPan', | 
						|
            'viewTarget' | 
						|
        ], | 
						|
        contentGroups: [ | 
						|
            'descriptive' | 
						|
        ] | 
						|
    }, | 
						|
    vkern: { | 
						|
        attrsGroups: [ | 
						|
            'core' | 
						|
        ], | 
						|
        attrs: [ | 
						|
            'u1', | 
						|
            'g1', | 
						|
            'u2', | 
						|
            'g2', | 
						|
            'k' | 
						|
        ] | 
						|
    } | 
						|
}; | 
						|
 | 
						|
// http://wiki.inkscape.org/wiki/index.php/Inkscape-specific_XML_attributes | 
						|
exports.editorNamespaces = [ | 
						|
    'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd', | 
						|
    'http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd', | 
						|
    'http://www.inkscape.org/namespaces/inkscape', | 
						|
    'http://www.bohemiancoding.com/sketch/ns', | 
						|
    'http://ns.adobe.com/AdobeIllustrator/10.0/', | 
						|
    'http://ns.adobe.com/Graphs/1.0/', | 
						|
    'http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/', | 
						|
    'http://ns.adobe.com/Variables/1.0/', | 
						|
    'http://ns.adobe.com/SaveForWeb/1.0/', | 
						|
    'http://ns.adobe.com/Extensibility/1.0/', | 
						|
    'http://ns.adobe.com/Flows/1.0/', | 
						|
    'http://ns.adobe.com/ImageReplacement/1.0/', | 
						|
    'http://ns.adobe.com/GenericCustomNamespace/1.0/', | 
						|
    'http://ns.adobe.com/XPath/1.0/', | 
						|
    'http://schemas.microsoft.com/visio/2003/SVGExtensions/', | 
						|
    'http://taptrix.com/vectorillustrator/svg_extensions', | 
						|
    'http://www.figma.com/figma/ns', | 
						|
    'http://purl.org/dc/elements/1.1/', | 
						|
    'http://creativecommons.org/ns#', | 
						|
    'http://www.w3.org/1999/02/22-rdf-syntax-ns#', | 
						|
    'http://www.serif.com/', | 
						|
    'http://www.vector.evaxdesign.sk' | 
						|
]; | 
						|
 | 
						|
// http://www.w3.org/TR/SVG11/linking.html#processingIRI | 
						|
exports.referencesProps = [ | 
						|
    'clip-path', | 
						|
    'color-profile', | 
						|
    'fill', | 
						|
    'filter', | 
						|
    'marker-start', | 
						|
    'marker-mid', | 
						|
    'marker-end', | 
						|
    'mask', | 
						|
    'stroke', | 
						|
    'style' | 
						|
]; | 
						|
 | 
						|
// http://www.w3.org/TR/SVG11/propidx.html | 
						|
exports.inheritableAttrs = [ | 
						|
    'clip-rule', | 
						|
    'color', | 
						|
    'color-interpolation', | 
						|
    'color-interpolation-filters', | 
						|
    'color-profile', | 
						|
    'color-rendering', | 
						|
    'cursor', | 
						|
    'direction', | 
						|
    'dominant-baseline', | 
						|
    'fill', | 
						|
    'fill-opacity', | 
						|
    'fill-rule', | 
						|
    'font', | 
						|
    'font-family', | 
						|
    'font-size', | 
						|
    'font-size-adjust', | 
						|
    'font-stretch', | 
						|
    'font-style', | 
						|
    'font-variant', | 
						|
    'font-weight', | 
						|
    'glyph-orientation-horizontal', | 
						|
    'glyph-orientation-vertical', | 
						|
    'image-rendering', | 
						|
    'letter-spacing', | 
						|
    'marker', | 
						|
    'marker-end', | 
						|
    'marker-mid', | 
						|
    'marker-start', | 
						|
    'paint-order', | 
						|
    'pointer-events', | 
						|
    'shape-rendering', | 
						|
    'stroke', | 
						|
    'stroke-dasharray', | 
						|
    'stroke-dashoffset', | 
						|
    'stroke-linecap', | 
						|
    'stroke-linejoin', | 
						|
    'stroke-miterlimit', | 
						|
    'stroke-opacity', | 
						|
    'stroke-width', | 
						|
    'text-anchor', | 
						|
    'text-rendering', | 
						|
    'transform', | 
						|
    'visibility', | 
						|
    'word-spacing', | 
						|
    'writing-mode' | 
						|
]; | 
						|
 | 
						|
exports.presentationNonInheritableGroupAttrs = [ | 
						|
    'display', | 
						|
    'clip-path', | 
						|
    'filter', | 
						|
    'mask', | 
						|
    'opacity', | 
						|
    'text-decoration', | 
						|
    'transform', | 
						|
    'unicode-bidi', | 
						|
    'visibility' | 
						|
]; | 
						|
 | 
						|
// http://www.w3.org/TR/SVG11/single-page.html#types-ColorKeywords | 
						|
exports.colorsNames = { | 
						|
    'aliceblue': '#f0f8ff', | 
						|
    'antiquewhite': '#faebd7', | 
						|
    'aqua': '#0ff', | 
						|
    'aquamarine': '#7fffd4', | 
						|
    'azure': '#f0ffff', | 
						|
    'beige': '#f5f5dc', | 
						|
    'bisque': '#ffe4c4', | 
						|
    'black': '#000', | 
						|
    'blanchedalmond': '#ffebcd', | 
						|
    'blue': '#00f', | 
						|
    'blueviolet': '#8a2be2', | 
						|
    'brown': '#a52a2a', | 
						|
    'burlywood': '#deb887', | 
						|
    'cadetblue': '#5f9ea0', | 
						|
    'chartreuse': '#7fff00', | 
						|
    'chocolate': '#d2691e', | 
						|
    'coral': '#ff7f50', | 
						|
    'cornflowerblue': '#6495ed', | 
						|
    'cornsilk': '#fff8dc', | 
						|
    'crimson': '#dc143c', | 
						|
    'cyan': '#0ff', | 
						|
    'darkblue': '#00008b', | 
						|
    'darkcyan': '#008b8b', | 
						|
    'darkgoldenrod': '#b8860b', | 
						|
    'darkgray': '#a9a9a9', | 
						|
    'darkgreen': '#006400', | 
						|
    'darkgrey': '#a9a9a9', | 
						|
    'darkkhaki': '#bdb76b', | 
						|
    'darkmagenta': '#8b008b', | 
						|
    'darkolivegreen': '#556b2f', | 
						|
    'darkorange': '#ff8c00', | 
						|
    'darkorchid': '#9932cc', | 
						|
    'darkred': '#8b0000', | 
						|
    'darksalmon': '#e9967a', | 
						|
    'darkseagreen': '#8fbc8f', | 
						|
    'darkslateblue': '#483d8b', | 
						|
    'darkslategray': '#2f4f4f', | 
						|
    'darkslategrey': '#2f4f4f', | 
						|
    'darkturquoise': '#00ced1', | 
						|
    'darkviolet': '#9400d3', | 
						|
    'deeppink': '#ff1493', | 
						|
    'deepskyblue': '#00bfff', | 
						|
    'dimgray': '#696969', | 
						|
    'dimgrey': '#696969', | 
						|
    'dodgerblue': '#1e90ff', | 
						|
    'firebrick': '#b22222', | 
						|
    'floralwhite': '#fffaf0', | 
						|
    'forestgreen': '#228b22', | 
						|
    'fuchsia': '#f0f', | 
						|
    'gainsboro': '#dcdcdc', | 
						|
    'ghostwhite': '#f8f8ff', | 
						|
    'gold': '#ffd700', | 
						|
    'goldenrod': '#daa520', | 
						|
    'gray': '#808080', | 
						|
    'green': '#008000', | 
						|
    'greenyellow': '#adff2f', | 
						|
    'grey': '#808080', | 
						|
    'honeydew': '#f0fff0', | 
						|
    'hotpink': '#ff69b4', | 
						|
    'indianred': '#cd5c5c', | 
						|
    'indigo': '#4b0082', | 
						|
    'ivory': '#fffff0', | 
						|
    'khaki': '#f0e68c', | 
						|
    'lavender': '#e6e6fa', | 
						|
    'lavenderblush': '#fff0f5', | 
						|
    'lawngreen': '#7cfc00', | 
						|
    'lemonchiffon': '#fffacd', | 
						|
    'lightblue': '#add8e6', | 
						|
    'lightcoral': '#f08080', | 
						|
    'lightcyan': '#e0ffff', | 
						|
    'lightgoldenrodyellow': '#fafad2', | 
						|
    'lightgray': '#d3d3d3', | 
						|
    'lightgreen': '#90ee90', | 
						|
    'lightgrey': '#d3d3d3', | 
						|
    'lightpink': '#ffb6c1', | 
						|
    'lightsalmon': '#ffa07a', | 
						|
    'lightseagreen': '#20b2aa', | 
						|
    'lightskyblue': '#87cefa', | 
						|
    'lightslategray': '#789', | 
						|
    'lightslategrey': '#789', | 
						|
    'lightsteelblue': '#b0c4de', | 
						|
    'lightyellow': '#ffffe0', | 
						|
    'lime': '#0f0', | 
						|
    'limegreen': '#32cd32', | 
						|
    'linen': '#faf0e6', | 
						|
    'magenta': '#f0f', | 
						|
    'maroon': '#800000', | 
						|
    'mediumaquamarine': '#66cdaa', | 
						|
    'mediumblue': '#0000cd', | 
						|
    'mediumorchid': '#ba55d3', | 
						|
    'mediumpurple': '#9370db', | 
						|
    'mediumseagreen': '#3cb371', | 
						|
    'mediumslateblue': '#7b68ee', | 
						|
    'mediumspringgreen': '#00fa9a', | 
						|
    'mediumturquoise': '#48d1cc', | 
						|
    'mediumvioletred': '#c71585', | 
						|
    'midnightblue': '#191970', | 
						|
    'mintcream': '#f5fffa', | 
						|
    'mistyrose': '#ffe4e1', | 
						|
    'moccasin': '#ffe4b5', | 
						|
    'navajowhite': '#ffdead', | 
						|
    'navy': '#000080', | 
						|
    'oldlace': '#fdf5e6', | 
						|
    'olive': '#808000', | 
						|
    'olivedrab': '#6b8e23', | 
						|
    'orange': '#ffa500', | 
						|
    'orangered': '#ff4500', | 
						|
    'orchid': '#da70d6', | 
						|
    'palegoldenrod': '#eee8aa', | 
						|
    'palegreen': '#98fb98', | 
						|
    'paleturquoise': '#afeeee', | 
						|
    'palevioletred': '#db7093', | 
						|
    'papayawhip': '#ffefd5', | 
						|
    'peachpuff': '#ffdab9', | 
						|
    'peru': '#cd853f', | 
						|
    'pink': '#ffc0cb', | 
						|
    'plum': '#dda0dd', | 
						|
    'powderblue': '#b0e0e6', | 
						|
    'purple': '#800080', | 
						|
    'rebeccapurple': '#639', | 
						|
    'red': '#f00', | 
						|
    'rosybrown': '#bc8f8f', | 
						|
    'royalblue': '#4169e1', | 
						|
    'saddlebrown': '#8b4513', | 
						|
    'salmon': '#fa8072', | 
						|
    'sandybrown': '#f4a460', | 
						|
    'seagreen': '#2e8b57', | 
						|
    'seashell': '#fff5ee', | 
						|
    'sienna': '#a0522d', | 
						|
    'silver': '#c0c0c0', | 
						|
    'skyblue': '#87ceeb', | 
						|
    'slateblue': '#6a5acd', | 
						|
    'slategray': '#708090', | 
						|
    'slategrey': '#708090', | 
						|
    'snow': '#fffafa', | 
						|
    'springgreen': '#00ff7f', | 
						|
    'steelblue': '#4682b4', | 
						|
    'tan': '#d2b48c', | 
						|
    'teal': '#008080', | 
						|
    'thistle': '#d8bfd8', | 
						|
    'tomato': '#ff6347', | 
						|
    'turquoise': '#40e0d0', | 
						|
    'violet': '#ee82ee', | 
						|
    'wheat': '#f5deb3', | 
						|
    'white': '#fff', | 
						|
    'whitesmoke': '#f5f5f5', | 
						|
    'yellow': '#ff0', | 
						|
    'yellowgreen': '#9acd32' | 
						|
}; | 
						|
 | 
						|
exports.colorsShortNames = { | 
						|
  '#f0ffff': 'azure', | 
						|
  '#f5f5dc': 'beige', | 
						|
  '#ffe4c4': 'bisque', | 
						|
  '#a52a2a': 'brown', | 
						|
  '#ff7f50': 'coral', | 
						|
  '#ffd700': 'gold', | 
						|
  '#808080': 'gray', | 
						|
  '#008000': 'green', | 
						|
  '#4b0082': 'indigo', | 
						|
  '#fffff0': 'ivory', | 
						|
  '#f0e68c': 'khaki', | 
						|
  '#faf0e6': 'linen', | 
						|
  '#800000': 'maroon', | 
						|
  '#000080': 'navy', | 
						|
  '#808000': 'olive', | 
						|
  '#ffa500': 'orange', | 
						|
  '#da70d6': 'orchid', | 
						|
  '#cd853f': 'peru', | 
						|
  '#ffc0cb': 'pink', | 
						|
  '#dda0dd': 'plum', | 
						|
  '#800080': 'purple', | 
						|
  '#f00': 'red', | 
						|
  '#ff0000': 'red', | 
						|
  '#fa8072': 'salmon', | 
						|
  '#a0522d': 'sienna', | 
						|
  '#c0c0c0': 'silver', | 
						|
  '#fffafa': 'snow', | 
						|
  '#d2b48c': 'tan', | 
						|
  '#008080': 'teal', | 
						|
  '#ff6347': 'tomato', | 
						|
  '#ee82ee': 'violet', | 
						|
  '#f5deb3': 'wheat' | 
						|
}; | 
						|
 | 
						|
// http://www.w3.org/TR/SVG11/single-page.html#types-DataTypeColor | 
						|
exports.colorsProps = [ | 
						|
    'color', 'fill', 'stroke', 'stop-color', 'flood-color', 'lighting-color' | 
						|
];
 | 
						|
 |