Manfred Moitzi avatar Manfred Moitzi committed 825b161

reorganized data modules

Comments (0)

Files changed (10)

 
     .. automethod:: svgwrite.base.BaseElement.__init__([attribs=None, **extra])
 
-
     **Attributes**
 
     .. attribute:: BaseElement.attribs
 
     **Methods**
 
-
     .. automethod:: svgwrite.base.BaseElement.add(element)
 
     .. automethod:: svgwrite.base.BaseElement.tostring()
     def __init__(self, attribs=None, **extra):
         """
         :param dict attribs: a dictinary of SVG attributes
-        :param keyword-args extra: extra SVG attributes, argument='value'
+        :param dict extra: extra SVG attributes, argument='value'
 
-        SVG attribute names will be checked, if :data:`~svgwrite.parameter.debug_mode` is `True`.
+        SVG attribute names will be checked, if :attr:`self.debug` is `True`.
         """
         def update(attribs, extra):
             for key, value in extra.iteritems():
         self._parameter = parameter
 
     def nextid(self, value=None):
-        n = AutoID()
-        return n.nextid(value)
+        return AutoID.nextid(value)
 
     def __getitem__(self, key):
         """ Get SVG attribute by `key`.
 
     def value_to_string(self, value):
         """
-        Converts *value* into a <string> includes some value checks depending
-        on debug-state and SVG-profile.
+        Converts *value* into a <string> includes a value check, depending
+        on :attr:`self.debug` and :attr:`self.profile`.
 
         """
         if isinstance(value, (int, float)):
             if isinstance(value, float) and self.profile == 'tiny':
                 value = round(value, 4)
         return unicode(value)
-

svgwrite/data/full11.py

+#!/usr/bin/env python
+#coding:utf-8
+# Author:  mozman --<mozman@gmx.at>
+# Purpose: full11 data
+# Created: 15.10.2010
+# Copyright (C) 2010, Manfred Moitzi
+# License: GPLv3
+
+from types import SVGAttribute, SVGMultiAttribute
+from types import SVGElement
+from typechecker import Full11TypeChecker as TypeChecker
+
+empty_list = []
+
+attributes = {
+'accent-height': SVGAttribute('accent-height', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'accumulate': SVGAttribute('accumulate', anim=False,
+    types=empty_list,
+    const=frozenset([u'none', u'sum'])),
+'additive': SVGAttribute('additive', anim=False,
+    types=empty_list,
+    const=frozenset([u'sum', u'replace'])),
+'alignment-baseline': SVGAttribute('alignment-baseline', anim=True,
+    types=empty_list,
+    const=frozenset([u'mathematical', u'before-edge', u'central', u'baseline',
+                     u'auto', u'hanging', u'ideographic', u'inherit', u'middle',
+                     u'alphabetic', u'text-before-edge', u'text-after-edge',
+                     u'after-edge'])),
+'alphabetic': SVGAttribute('alphabetic', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'amplitude': SVGAttribute('amplitude', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'arabic-form': SVGAttribute('arabic-form', anim=False,
+    types=empty_list,
+    const=frozenset([u'terminal', u'initial', u'isolated', u'medial'])),
+'ascent': SVGAttribute('ascent', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'attributeName': SVGAttribute('attributeName', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'attributeType': SVGAttribute('attributeType', anim=False,
+    types=empty_list,
+    const=frozenset([u'XML', u'auto', u'CSS'])),
+'azimuth': SVGAttribute('azimuth', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'baseFrequency': SVGAttribute('baseFrequency', anim=True,
+    types=frozenset([u'number-optional-number']),
+    const=empty_list),
+'baseline-shift': SVGAttribute('baseline-shift', anim=True,
+    types=frozenset([u'percentage', u'length']),
+    const=frozenset([u'super', u'baseline', u'inherit', u'sub'])),
+'baseProfile': SVGAttribute('baseProfile', anim=False,
+    types=empty_list,
+    const=frozenset([u'full', u'tiny', u'basic', u'none'])),
+'bbox': SVGAttribute('bbox', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'begin': SVGAttribute('begin', anim=True,
+    types=frozenset([u'list-of-string']),
+    const=empty_list),
+'bias': SVGAttribute('bias', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'by': SVGAttribute('by', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'calcMode': SVGAttribute('calcMode', anim=False,
+    types=empty_list,
+    const=frozenset([u'discrete', u'linear', u'paced', u'spline'])),
+'cap-height': SVGAttribute('cap-height', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'class': SVGAttribute('class', anim=True,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'clip': SVGAttribute('clip', anim=True,
+    types=frozenset([u'shape']),
+    const=frozenset([u'auto', u'inherit'])),
+'clip-path': SVGAttribute('clip-path', anim=True,
+    types=frozenset([u'IRI']),
+    const=frozenset([u'none', u'inherit'])),
+'clip-rule': SVGAttribute('clip-rule', anim=True,
+    types=empty_list,
+    const=frozenset([u'nonzero', u'evenodd', u'inherit'])),
+'clipPathUnits': SVGAttribute('clipPathUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'color': SVGAttribute('color', anim=True,
+    types=frozenset([u'color']),
+    const=frozenset([u'inherit'])),
+'color-interpolation': SVGAttribute('color-interpolation', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'sRGB', u'inherit', u'linearRGB'])),
+'color-interpolation-filters': SVGAttribute('color-interpolation-filters', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'sRGB', u'inherit', u'linearRGB'])),
+'color-profile': SVGAttribute('color-profile', anim=True,
+    types=frozenset([u'FuncIRI', u'name']),
+    const=frozenset([u'auto', u'sRGB', u'inherit'])),
+'color-rendering': SVGAttribute('color-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeQuality', u'optimizeSpeed', u'inherit'])),
+'contentScriptType': SVGAttribute('contentScriptType', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'contentStyleType': SVGAttribute('contentStyleType', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'cursor': SVGAttribute('cursor', anim=True,
+    types=frozenset([u'list-of-FuncIRI']),
+    const=frozenset([u'sw-resize', u'n-resize', u'help', u'text', u'move', u'auto',
+                     u'w-resize', u'pointer', u'wait', u's-resize', u'e-resize',
+                     u'default', u'inherit', u'nw-resize', u'ne-resize',
+                     u'crosshair', u'se-resize'])),
+'cx': SVGAttribute('cx', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'cy': SVGAttribute('cy', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'d': SVGMultiAttribute({
+    '* path': SVGAttribute( # '*' means default attribute
+        'd', anim=True,
+        types=frozenset([u'path-data']),
+        const=empty_list
+        ),
+    'glyph missing-glyph': SVGAttribute(
+        'd', anim=False,
+        types=frozenset([u'path-data']),
+        const=empty_list
+        ),
+    }),
+'descent': SVGAttribute('descent', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'diffuseConstant': SVGAttribute('diffuseConstant', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'direction': SVGAttribute('direction', anim=False,
+    types=empty_list,
+    const=frozenset([u'ltr', u'inherit', u'rtl'])),
+'display': SVGAttribute('display', anim=True,
+    types=empty_list,
+    const=frozenset([u'inline-table', u'table-header-group', u'table-footer-group',
+                     u'none', u'table-row', u'table-caption', u'table-column',
+                     u'marker', u'table', u'compact', u'table-row-group', u'run-in',
+                     u'inherit', u'list-item', u'table-cell', u'inline',
+                     u'block', u'table-column-group'])),
+'divisor': SVGAttribute('divisor', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'dominant-baseline': SVGAttribute('dominant-baseline', anim=True,
+    types=empty_list,
+    const=frozenset([u'mathematical', u'use-script', u'ideographic', u'central',
+                     u'reset-size', u'auto', u'hanging', u'inherit', u'middle',
+                     u'alphabetic', u'text-before-edge', u'text-after-edge',
+                     u'no-change'])),
+'dur': SVGAttribute('dur', anim=True,
+    types=frozenset([u'time']),
+    const=frozenset([u'media', u'indefinite'])),
+'dx': SVGMultiAttribute({
+    '* altGlyph text tref tspan': SVGAttribute(
+        'dx', anim=True,
+        types=frozenset([u'list-of-length']),
+        const=empty_list),
+    'feOffset': SVGAttribute(
+        'dx', anim=True,
+        types=frozenset([u'number']),
+        const=empty_list),
+    'glyphRef': SVGAttribute(
+        'dx', anim=False,
+        types=frozenset([u'number']),
+        const=empty_list),
+    }),
+'dy': SVGMultiAttribute({
+    '* altGlyph text tref tspan': SVGAttribute(
+        'dy', anim=True,
+        types=frozenset([u'list-of-length']),
+        const=empty_list),
+    'feOffset': SVGAttribute(
+        'dy', anim=True,
+        types=frozenset([u'number']),
+        const=empty_list),
+    'glyphRef': SVGAttribute(
+        'dy', anim=False,
+        types=frozenset([u'number']),
+        const=empty_list),
+    }),
+'edgeMode': SVGAttribute('edgeMode', anim=True,
+    types=empty_list,
+    const=frozenset([u'wrap', u'duplicate', u'none'])),
+'elevation': SVGAttribute('elevation', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'enable-background': SVGAttribute('enable-background', anim=True,
+    types=frozenset([u'string']),
+    const=frozenset([u'accummulate', u'new', u'inherit'])),
+'end': SVGAttribute('end', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'exponent': SVGAttribute('exponent', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'externalResourcesRequired': SVGAttribute('externalResourcesRequired', anim=True,
+    types=empty_list,
+    const=frozenset([u'true', u'false'])),
+'fill': SVGAttribute('fill', anim=True,
+    types=frozenset([u'paint']),
+    const=empty_list),
+'fill-opacity': SVGAttribute('fill-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'fill-rule': SVGAttribute('fill-rule', anim=True,
+    types=empty_list,
+    const=frozenset([u'nonzero', u'evenodd', u'inherit'])),
+'filter': SVGAttribute('filter', anim=True,
+    types=frozenset([u'FuncIRI']),
+    const=frozenset([u'none', u'inherit'])),
+'filterRes': SVGAttribute('filterRes', anim=True,
+    types=frozenset([u'number-optional-number']),
+    const=empty_list),
+'filterUnits': SVGAttribute('filterUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'flood-color': SVGAttribute('flood-color', anim=True,
+    types=frozenset([u'color', u'icccolor']),
+    const=frozenset([u'currentColor', u'inherit'])),
+'flood-opacity': SVGAttribute('flood-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'font': SVGAttribute('font', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'font-family': SVGAttribute('font-family', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'font-size': SVGAttribute('font-size', anim=False,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit'])),
+'font-size-adjust': SVGAttribute('font-size-adjust', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'none', u'inherit'])),
+'font-stretch': SVGAttribute('font-stretch', anim=False,
+    types=empty_list,
+    const=frozenset([u'condensed', u'normal', u'ultra-condensed', u'expanded',
+                     u'narrower', u'inherit', u'semi-condensed', u'extra-condensed',
+                     u'ultra-expanded', u'wider', u'semi-expanded', u'extra-expanded'])),
+'font-style': SVGAttribute('font-style', anim=False,
+    types=empty_list,
+    const=frozenset([u'oblique', u'inherit', u'italic', u'normal'])),
+'font-variant': SVGAttribute('font-variant', anim=False,
+    types=empty_list,
+    const=frozenset([u'small-caps', u'inherit', u'normal'])),
+'font-weight': SVGAttribute('font-weight', anim=False,
+    types=empty_list,
+    const=frozenset([u'200', u'900', u'bold', u'bolder', u'normal', u'300', u'700',
+                     u'inherit', u'lighter', u'400', u'100', u'800', u'500', u'600'])),
+'format': SVGAttribute('format', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'from': SVGAttribute('from', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'fx': SVGAttribute('fx', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'fy': SVGAttribute('fy', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'g1': SVGAttribute('g1', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'g2': SVGAttribute('g2', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'glyph-name': SVGAttribute('glyph-name', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'glyph-orientation-horizontal': SVGAttribute('glyph-orientation-horizontal', anim=True,
+    types=frozenset([u'angle']),
+    const=frozenset([u'inherit'])),
+'glyph-orientation-vertical': SVGAttribute('glyph-orientation-vertical', anim=True,
+    types=frozenset([u'angle']),
+    const=frozenset([u'auto', u'inherit'])),
+'glyphRef': SVGAttribute('glyphRef', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'gradientTransform': SVGAttribute('gradientTransform', anim=True,
+    types=frozenset([u'transform-list']),
+    const=empty_list),
+'gradientUnits': SVGAttribute('gradientUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'hanging': SVGAttribute('hanging', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'height': SVGAttribute('height', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'horiz-adv-x': SVGAttribute('horiz-adv-x', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'horiz-origin-x': SVGAttribute('horiz-origin-x', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'horiz-origin-y': SVGAttribute('horiz-origin-y', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'id': SVGAttribute('id', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'ideographic': SVGAttribute('ideographic', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'image-rendering': SVGAttribute('image-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeQuality', u'optimizeSpeed', u'inherit'])),
+'in': SVGAttribute('in', anim=True,
+    types=frozenset([u'name']),
+    const=frozenset([u'SourceAlpha', u'SourceGraphic', u'BackgroundAlpha',
+                     u'BackgroundImage', u'StrokePaint', u'FillPaint'])),
+'in2': SVGAttribute('in2', anim=True,
+    types=frozenset([u'name']),
+    const=frozenset([u'SourceAlpha', u'SourceGraphic', u'BackgroundAlpha',
+                     u'BackgroundImage', u'StrokePaint', u'FillPaint'])),
+'intercept': SVGAttribute('intercept', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'k': SVGAttribute('k', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'k1': SVGAttribute('k1', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'k2': SVGAttribute('k2', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'k3': SVGAttribute('k3', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'k4': SVGAttribute('k4', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'kernelMatrix': SVGAttribute('kernelMatrix', anim=True,
+    types=frozenset([u'list-of-number']),
+    const=empty_list),
+'kernelUnitLength': SVGAttribute('kernelUnitLength', anim=True,
+    types=frozenset([u'number-optional-number']),
+    const=empty_list),
+'kerning': SVGAttribute('kerning', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'auto', u'inherit'])),
+'keyPoints': SVGAttribute('keyPoints', anim=False,
+    types=frozenset([u'semicolon-list']),
+    const=empty_list),
+'keySplines': SVGAttribute('keySplines', anim=False,
+    types=frozenset([u'semicolon-list']),
+    const=empty_list),
+'keyTimes': SVGAttribute('keyTimes', anim=False,
+    types=frozenset([u'semicolon-list']),
+    const=empty_list),
+'lang': SVGAttribute('lang', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'lengthAdjust': SVGAttribute('lengthAdjust', anim=True,
+    types=empty_list,
+    const=frozenset([u'spacingAndGlyphs', u'spacing'])),
+'letter-spacing': SVGAttribute('letter-spacing', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit', u'normal'])),
+'lighting-color': SVGAttribute('lighting-color', anim=True,
+    types=frozenset([u'color', u'icccolor']),
+    const=frozenset([u'currentColor', u'inherit'])),
+'limitingConeAngle': SVGAttribute('limitingConeAngle', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'local': SVGAttribute('local', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'marker': SVGAttribute('marker', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'marker-end': SVGAttribute('marker-end', anim=True,
+    types=frozenset([u'IRI']),
+    const=frozenset([u'none', u'inherit'])),
+'marker-mid': SVGAttribute('marker-mid', anim=True,
+    types=frozenset([u'IRI']),
+    const=frozenset([u'none', u'inherit'])),
+'marker-start': SVGAttribute('marker-start', anim=True,
+    types=frozenset([u'IRI']),
+    const=frozenset([u'none', u'inherit'])),
+'markerHeight': SVGAttribute('markerHeight', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'markerUnits': SVGAttribute('markerUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'strokeWidth'])),
+'markerWidth': SVGAttribute('markerWidth', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'mask': SVGAttribute('mask', anim=True,
+    types=frozenset([u'FuncIRI']),
+    const=frozenset([u'none', u'inherit'])),
+'maskContentUnits': SVGAttribute('maskContentUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'maskUnits': SVGAttribute('maskUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'mathematical': SVGAttribute('mathematical', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'max': SVGAttribute('max', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'media'])),
+'media': SVGAttribute('media', anim=False,
+    types=empty_list,
+    const=frozenset(['all', 'aureal', 'braille', 'embossed', 'handheld', 'print',
+                     'projection', 'screen', 'tty', 'tv'])),
+'method': SVGAttribute('method', anim=True,
+    types=empty_list,
+    const=frozenset([u'stretch', u'align'])),
+'min': SVGAttribute('min', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'media'])),
+'mode': SVGAttribute('mode', anim=True,
+    types=empty_list,
+    const=frozenset([u'multiply', u'screen', u'darken', u'lighten', u'normal'])),
+'name': SVGMultiAttribute({
+    '* font-face-name': SVGAttribute(
+        'name', anim=False,
+        types=frozenset([u'anything']),
+        const=empty_list),
+    'color-profile': SVGAttribute(
+        'name', anim=False,
+        types=frozenset([u'name']),
+        const=empty_list),
+    }),
+'numOctaves': SVGAttribute('numOctaves', anim=True,
+    types=frozenset([u'integer']),
+    const=empty_list),
+'offset': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'offset', anim=True,
+        types=frozenset([u'number']),
+        const=empty_list),
+    'stop': SVGAttribute(
+        'offset', anim=True,
+        types=frozenset([u'number', u'percentage']),
+        const=empty_list),
+    }),
+'onabort': SVGAttribute('onabort', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onactivate': SVGAttribute('onactivate', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onbegin': SVGAttribute('onbegin', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onclick': SVGAttribute('onclick', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onend': SVGAttribute('onend', anim=True,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onerror': SVGAttribute('onerror', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onfocusin': SVGAttribute('onfocusin', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onfocusout': SVGAttribute('onfocusout', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onload': SVGAttribute('onload', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onmousedown': SVGAttribute('onmousedown', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onmousemove': SVGAttribute('onmousemove', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onmouseout': SVGAttribute('onmouseout', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onmouseover': SVGAttribute('onmouseover', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onmouseup': SVGAttribute('onmouseup', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onrepeat': SVGAttribute('onrepeat', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onresize': SVGAttribute('onresize', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onscroll': SVGAttribute('onscroll', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onunload': SVGAttribute('onunload', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'onzoom': SVGAttribute('onzoom', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'opacity': SVGAttribute('opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'operator': SVGMultiAttribute({
+    '* feComposite': SVGAttribute(
+        'operator', anim=True,
+        types=empty_list,
+        const=frozenset([u'xor', u'in', u'over', u'atop', u'arithmetic', u'out'])),
+    'feMorphology': SVGAttribute(
+        'operator', anim=True,
+        types=empty_list,
+        const=frozenset([u'erode', u'dilate'])),
+    }),
+'order': SVGAttribute('order', anim=True,
+    types=frozenset([u'number-optional-number']),
+    const=empty_list),
+'orient': SVGAttribute('orient', anim=True,
+    types=frozenset([u'angle']),
+    const=frozenset([u'auto'])),
+'orientation': SVGAttribute('orientation', anim=False,
+    types=empty_list,
+    const=frozenset([u'h', u'v'])),
+'origin': SVGAttribute('origin', anim=False,
+    types=empty_list,
+    const=frozenset([u'default'])),
+'overflow': SVGAttribute('overflow', anim=True,
+    types=empty_list,
+    const=frozenset([u'visible', u'hidden', u'scroll', u'inherit', u'auto'])),
+'overline-position': SVGAttribute('overline-position', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'overline-thickness': SVGAttribute('overline-thickness', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'panose-1': SVGAttribute('panose-1', anim=False,
+    types=frozenset([u'list-of-integer']),
+    const=empty_list),
+'path': SVGAttribute('path', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'pathLength': SVGAttribute('pathLength', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'patternContentUnits': SVGAttribute('patternContentUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'patternTransform': SVGAttribute('patternTransform', anim=True,
+    types=frozenset([u'transform-list']),
+    const=empty_list),
+'patternUnits': SVGAttribute('patternUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'pointer-events': SVGAttribute('pointer-events', anim=True,
+    types=empty_list,
+    const=frozenset([u'all', u'visibleStroke', u'painted', u'none', u'visibleFill',
+                     u'visible', u'stroke', u'inherit', u'visiblePainted', u'fill'])),
+'points': SVGAttribute('points', anim=True,
+    types=frozenset([u'list-of-number']),
+    const=empty_list),
+'pointsAtX': SVGAttribute('pointsAtX', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'pointsAtY': SVGAttribute('pointsAtY', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'pointsAtZ': SVGAttribute('pointsAtZ', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'preserveAlpha': SVGAttribute('preserveAlpha', anim=True,
+    types=empty_list,
+    const=frozenset([u'true', u'false'])),
+'preserveAspectRatio': SVGAttribute('preserveAspectRatio', anim=True,
+    types=frozenset(u'string'),
+    const=empty_list),
+'primitiveUnits': SVGAttribute('primitiveUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'r': SVGAttribute('r', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'radius': SVGAttribute('radius', anim=True,
+    types=frozenset([u'number-optional-number']),
+    const=empty_list),
+'refX': SVGAttribute('refX', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'refY': SVGAttribute('refY', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'rendering-intent': SVGAttribute('rendering-intent', anim=False,
+    types=empty_list,
+    const=frozenset([u'auto', u'saturation', u'perceptual', u'relative-colorimetric',
+                     u'absolute-colorimetric'])),
+'repeatCount': SVGAttribute('repeatCount', anim=False,
+    types=frozenset([u'number']),
+    const=frozenset([u'indefinite'])),
+'repeatDur': SVGAttribute('repeatDur', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'indefinite'])),
+'requiredExtensions': SVGAttribute('requiredExtensions', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'requiredFeatures': SVGAttribute('requiredFeatures', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'restart': SVGAttribute('restart', anim=False,
+    types=empty_list,
+    const=frozenset([u'always', u'never', u'whenNotActive'])),
+'result': SVGAttribute('result', anim=True,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'rotate': SVGMultiAttribute({
+    '* altGlyph text tref tspan': SVGAttribute(
+        'rotate', anim=True,
+        types=frozenset([u'list-of-number']),
+        const=empty_list),
+    'animateMotion': SVGAttribute(
+        'rotate', anim=False,
+        types=frozenset([u'number']),
+        const=frozenset([u'auto', u'auto-reverse'])),
+    }),
+'rx': SVGAttribute('rx', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'ry': SVGAttribute('ry', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'scale': SVGAttribute('scale', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'seed': SVGAttribute('seed', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'shape-rendering': SVGAttribute('shape-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeSpeed', u'inherit', u'geometricPrecision',
+                     u'crispEdges'])),
+'slope': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'slope', anim=True,
+        types=frozenset([u'number']),
+        const=empty_list),
+    'font-face': SVGAttribute(
+        'slope', anim=False,
+        types=frozenset([u'number']),
+        const=empty_list),
+    }),
+'spacing': SVGAttribute('spacing', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'exact'])),
+'specularConstant': SVGAttribute('specularConstant', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'specularExponent': SVGAttribute('specularExponent', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'spreadMethod': SVGAttribute('spreadMethod', anim=True,
+    types=empty_list,
+    const=frozenset([u'reflect', u'repeat', u'pad'])),
+'startOffset': SVGAttribute('startOffset', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'stdDeviation': SVGAttribute('stdDeviation', anim=True,
+    types=frozenset([u'number-optional-number']),
+    const=empty_list),
+'stemh': SVGAttribute('stemh', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'stemv': SVGAttribute('stemv', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'stitchTiles': SVGAttribute('stitchTiles', anim=True,
+    types=empty_list,
+    const=frozenset([u'noStitch', u'stitch'])),
+'stop-color': SVGAttribute('stop-color', anim=True,
+    types=frozenset([u'color', u'icccolor']),
+    const=frozenset([u'currentColor', u'inherit'])),
+'stop-opacity': SVGAttribute('stop-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'strikethrough-position': SVGAttribute('strikethrough-position', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'strikethrough-thickness': SVGAttribute('strikethrough-thickness', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'string': SVGAttribute('string', anim=False,
+    types=frozenset(u'anything'),
+    const=empty_list),
+'stroke': SVGAttribute('stroke', anim=True,
+    types=frozenset([u'paint']),
+    const=empty_list),
+'stroke-dasharray': SVGAttribute('stroke-dasharray', anim=True,
+    types=frozenset([u'list-of-length']),
+    const=frozenset([u'none', u'inherit'])),
+'stroke-dashoffset': SVGAttribute('stroke-dashoffset', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit'])),
+'stroke-linecap': SVGAttribute('stroke-linecap', anim=True,
+    types=empty_list,
+    const=frozenset([u'square', u'round', u'inherit', u'butt'])),
+'stroke-linejoin': SVGAttribute('stroke-linejoin', anim=True,
+    types=empty_list,
+    const=frozenset([u'bevel', u'miter', u'round', u'inherit'])),
+'stroke-miterlimit': SVGAttribute('stroke-miterlimit', anim=True,
+    types=frozenset([u'miterlimit']),
+    const=frozenset([u'inherit'])),
+'stroke-opacity': SVGAttribute('stroke-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'stroke-width': SVGAttribute('stroke-width', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit'])),
+'style': SVGAttribute('style', anim=False,
+    types=frozenset(u'anything'),
+    const=empty_list),
+'surfaceScale': SVGAttribute('surfaceScale', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'systemLanguage': SVGAttribute('systemLanguage', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'tableValues': SVGAttribute('tableValues', anim=True,
+    types=frozenset([u'list-of-number']),
+    const=empty_list),
+'target': SVGAttribute('target', anim=True,
+    types=frozenset([u'XML-Name']),
+    const=frozenset([u'_replace', u'_self', u'_parent', u'_top', u'_blank'])),
+'targetX': SVGAttribute('targetX', anim=True,
+    types=frozenset([u'integer']),
+    const=empty_list),
+'targetY': SVGAttribute('targetY', anim=True,
+    types=frozenset([u'integer']),
+    const=empty_list),
+'text-anchor': SVGAttribute('text-anchor', anim=True,
+    types=empty_list,
+    const=frozenset([u'start', u'end', u'inherit', u'middle'])),
+'text-decoration': SVGAttribute('text-decoration', anim=True,
+    types=empty_list,
+    const=frozenset([u'', u'overline', u'none', u'underline', u'line-through',
+                     u'inherit', u'blink'])),
+'text-rendering': SVGAttribute('text-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeSpeed', u'optimizeLegibility',
+                     u'geometricPrecision', u'inherit'])),
+'textLength': SVGAttribute('textLength', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'title': SVGAttribute('title', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'to': SVGAttribute('to', anim=False,
+    types=frozenset([u'time']),
+    const=empty_list),
+'transform': SVGAttribute('transform', anim=True,
+    types=frozenset([u'transform-list']),
+    const=empty_list),
+'type': SVGMultiAttribute({
+    '* feColorMatrix': SVGAttribute(
+        'type', anim=True,
+        types=empty_list,
+        const=frozenset([u'matrix', u'saturate', u'hueRotate', u'luminanceToAlpha'])),
+    'feTurbolence': SVGAttribute(
+        'type', anim=True,
+        types=empty_list,
+        const=frozenset([u'fractalNoise', 'turbulence'])),
+    'feFuncR feFuncG feFuncB feFuncA': SVGAttribute(
+        'type', anim=True,
+        types=empty_list,
+        const=frozenset([u'identity', 'table', 'discrete', 'linear', 'gamma'])),
+    'script style': SVGAttribute(
+        'type', anim=False,
+        types=frozenset([u'content-type']),
+        const=empty_list),
+    }),
+'u1': SVGAttribute('u1', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'u2': SVGAttribute('u2', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'underline-position': SVGAttribute('underline-position', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'underline-thickness': SVGAttribute('underline-thickness', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'unicode': SVGAttribute('unicode', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'unicode-bidi': SVGAttribute('unicode-bidi', anim=False,
+    types=empty_list,
+    const=frozenset([u'embed', u'inherit', u'bidi-override', u'normal'])),
+'unicode-range': SVGAttribute('unicode-range', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'units-per-em': SVGAttribute('units-per-em', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'v-alphabetic': SVGAttribute('v-alphabetic', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'v-hanging': SVGAttribute('v-hanging', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'v-ideographic': SVGAttribute('v-ideographic', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'v-mathematical': SVGAttribute('v-mathematical', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'values': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'values', anim=False,
+        types=frozenset([u'semicolon-list']),
+        const=empty_list),
+    'feColorMatrix': SVGAttribute(
+        'values', anim=True,
+        types=frozenset([u'list-of-number']),
+        const=empty_list),
+    }),
+'version': SVGAttribute('version', anim=False,
+    types=empty_list,
+    const=frozenset([u'1.1', u'1.2'])),
+'vert-adv-y': SVGAttribute('vert-adv-y', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'vert-origin-x': SVGAttribute('vert-origin-x', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'vert-origin-y': SVGAttribute('vert-origin-y', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'viewBox': SVGAttribute('viewBox', anim=True,
+    types=frozenset([u'four-numbers']),
+    const=empty_list),
+'viewTarget': SVGAttribute('viewTarget', anim=False,
+    types=frozenset([u'list-of-XML-Name']),
+    const=empty_list),
+'visibility': SVGAttribute('visibility', anim=True,
+    types=empty_list,
+    const=frozenset([u'visible', u'hidden', u'collapse', u'inherit'])),
+'width': SVGAttribute('width', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'widths': SVGAttribute('widths', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'word-spacing': SVGAttribute('word-spacing', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit', u'normal'])),
+'writing-mode': SVGAttribute('writing-mode', anim=False,
+    types=empty_list,
+    const=frozenset([u'rl-tb', u'lr', u'rl', u'tb-rl', u'lr-tb', u'inherit', u'tb'])),
+'x': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'x', anim=True,
+        types=frozenset([u'coordinate']),
+        const=empty_list),
+    'altGlyph text tref tspan': SVGAttribute(
+        'x', anim=True,
+        types=frozenset([u'list-of-coordinate']),
+        const=empty_list),
+    'fePointLight feSpotLight glyphRef': SVGAttribute(
+        'x', anim=True,
+        types=frozenset([u'number']),
+        const=empty_list),
+    }),
+'x-height': SVGAttribute('x-height', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'x1': SVGAttribute('x1', anim=True,
+    types=frozenset([u'list-of-coordinate']),
+    const=empty_list),
+'x2': SVGAttribute('x2', anim=True,
+    types=frozenset([u'list-of-coordinate']),
+    const=empty_list),
+'xChannelSelector': SVGAttribute('xChannelSelector', anim=True,
+    types=empty_list,
+    const=frozenset([u'A', u'B', u'R', u'G'])),
+'xlink:actuate': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'xlink:actuate', anim=False,
+        types=empty_list,
+        const=frozenset([u'onLoad'])),
+    'a': SVGAttribute(
+        'xlink:actuate', anim=False,
+        types=empty_list,
+        const=frozenset([u'onRequest'])),
+    }),
+'xlink:arcrole': SVGAttribute('xlink:arcrole', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xlink:href': SVGAttribute('xlink:href', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xlink:role': SVGAttribute('xlink:role', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xlink:show': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'xlink:show', anim=False,
+        types=empty_list,
+        const=frozenset([u'other', u'new', u'replace', u'none', u'embed'])),
+    'a': SVGAttribute(
+        'xlink:show', anim=False,
+        types=empty_list,
+        const=frozenset([u'new', u'replace'])),
+    }),
+'xlink:title': SVGAttribute('xlink:title', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'xlink:type': SVGAttribute('xlink:type', anim=False,
+    types=empty_list,
+    const=frozenset([u'simple'])),
+'xmlns': SVGAttribute('xmlns', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xmlns:xlink': SVGAttribute('xmlns:xlink', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xmlns:ev': SVGAttribute('xmlns:ev', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xml:base': SVGAttribute('xml:base', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xml:lang': SVGAttribute('xml:lang', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'xml:space': SVGAttribute('xml:space', anim=False,
+    types=empty_list,
+    const=frozenset([u'default', u'preserve'])),
+'y': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'y', anim=True,
+        types=frozenset([u'coordinate']),
+        const=empty_list),
+    'altGlyph text tref tspan': SVGAttribute(
+        'y', anim=True,
+        types=frozenset([u'list-of-coordinate']),
+        const=empty_list),
+    'fePointLight feSpotLight glyphRef': SVGAttribute(
+        'y', anim=True,
+        types=frozenset([u'number']),
+        const=empty_list),
+    }),
+'y1': SVGAttribute('y1', anim=True,
+    types=frozenset([u'list-of-coordinate']),
+    const=empty_list),
+'y2': SVGAttribute('y2', anim=True,
+    types=frozenset([u'list-of-coordinate']),
+    const=empty_list),
+'yChannelSelector': SVGAttribute('yChannelSelector', anim=True,
+    types=empty_list,
+    const=frozenset([u'A', u'B', u'R', u'G'])),
+'z': SVGAttribute('z', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'zoomAndPan': SVGAttribute('zoomAndPan', anim=False,
+    types=empty_list,
+    const=frozenset([u'disable', u'magnify'])),
+}
+
+presentation_attributes = frozenset([ "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", "kerning", "letter-spacing", "lighting-color",
+    "marker-end", "marker-mid", "marker-start", "mask", "opacity",
+    "overflow", "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-rendering", "unicode-bidi", "visibility", "word-spacing",
+    "writing-mode"])
+
+elements = {
+    'a': SVGElement('a',
+    attributes=frozenset(['xlink:title', 'xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'xlink:href', 'systemLanguage', 'onmouseover', 'xlink:type', 'externalResourcesRequired', 'id', 'xlink:actuate', 'onload', 'style', 'xlink:show', 'target', 'onactivate', 'nmousedown', 'transform', 'class', 'xlink:role', 'requiredFeatures', 'xml:lang', 'onmousemove', 'xmlns:xlink', 'onclick', 'xlink:arcrole', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'altGlyph': SVGElement('altGlyph',
+    attributes=frozenset(['requiredExtensions', 'onfocusout', 'xml:space', 'xlink:href', 'id', 'onload', 'style', 'nmousedown', 'onmousemove', 'onclick', 'xlink:arcrole', 'onfocusin', 'xml:base', 'onmouseup', 'onmouseout', 'format', 'xlink:title', 'systemLanguage', 'onmouseover', 'dx', 'dy', 'xlink:type', 'externalResourcesRequired', 'class', 'xlink:actuate', 'xlink:show', 'onactivate', 'glyphRef', 'xlink:role', 'requiredFeatures', 'xml:lang', 'y', 'x', 'rotate']),
+    properties=presentation_attributes,
+    children=empty_list),
+
+    'altGlyphDef': SVGElement('altGlyphDef',
+    attributes=frozenset(['xml:space', 'xml:lang', 'xml:base', 'id']),
+    properties=empty_list,
+    children=frozenset(['*'])),
+
+    'altGlyphItem': SVGElement('altGlyphItem',
+    attributes=frozenset(['xml:space', 'xml:lang', 'xml:base', 'id']),
+    properties=empty_list,
+    children=frozenset(['*'])),
+
+    'animate': SVGElement('animate',
+    attributes=frozenset(['requiredExtensions', 'from', 'repeatCount', 'xml:space', 'xlink:href', 'xlink:type', 'attributeType', 'repeatDur', 'id', 'fill', 'onload', 'additive', 'calcMode', 'min', 'keySplines', 'to', 'dur', 'xlink:arcrole', 'onend', 'begin', 'xml:base', 'max', 'xlink:title', 'attributeName', 'onbegin', 'systemLanguage', 'accumulate', 'end', 'externalResourcesRequired', 'by', 'restart', 'xlink:actuate', 'xlink:show', 'xlink:role', 'requiredFeatures', 'xml:lang', 'values', 'keyTimes', 'onrepeat']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'animateColor': SVGElement('animateColor',
+    attributes=frozenset(['requiredExtensions', 'from', 'repeatCount', 'xml:space', 'xlink:href', 'xlink:type', 'attributeType', 'repeatDur', 'id', 'fill', 'onload', 'additive', 'calcMode', 'min', 'keySplines', 'to', 'dur', 'xlink:arcrole', 'onend', 'begin', 'xml:base', 'max', 'xlink:title', 'attributeName', 'onbegin', 'systemLanguage', 'accumulate', 'end', 'externalResourcesRequired', 'by', 'restart', 'xlink:actuate', 'xlink:show', 'xlink:role', 'requiredFeatures', 'xml:lang', 'values', 'keyTimes', 'onrepeat']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'animateMotion': SVGElement('animateMotion',
+    attributes=frozenset(['origin', 'requiredExtensions', 'from', 'repeatCount', 'xml:space', 'xlink:href', 'xlink:type', 'repeatDur', 'id', 'fill', 'onload', 'additive', 'calcMode', 'min', 'keySplines', 'to', 'dur', 'xlink:arcrole', 'onend', 'begin', 'xlink:title', 'xml:base', 'max', 'end', 'keyPoints', 'onbegin', 'systemLanguage', 'accumulate', 'path', 'externalResourcesRequired', 'by', 'restart', 'xlink:actuate', 'xlink:show', 'xlink:role', 'requiredFeatures', 'xml:lang', 'values', 'keyTimes', 'onrepeat', 'rotate']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'mpath', 'title'])),
+
+    'animateTransform': SVGElement('animateTransform',
+    attributes=frozenset(['requiredExtensions', 'from', 'repeatCount', 'xml:space', 'xlink:href', 'xlink:type', 'attributeType', 'repeatDur', 'id', 'fill', 'onload', 'additive', 'calcMode', 'min', 'keySplines', 'to', 'dur', 'xlink:arcrole', 'type', 'onend', 'begin', 'xml:base', 'max', 'xlink:title', 'attributeName', 'onbegin', 'systemLanguage', 'accumulate', 'end', 'externalResourcesRequired', 'by', 'restart', 'xlink:actuate', 'xlink:show', 'xlink:role', 'requiredFeatures', 'xml:lang', 'values', 'keyTimes', 'onrepeat']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'circle': SVGElement('circle',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'cy', 'cx', 'onmouseover', 'externalResourcesRequired', 'id', 'onload', 'style', 'onactivate', 'nmousedown', 'transform', 'class', 'requiredFeatures', 'r', 'onmousemove', 'onclick', 'xml:lang', 'onfocusin', 'systemLanguage']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'metadata', 'desc'])),
+
+    'clipPath': SVGElement('clipPath',
+    attributes=frozenset(['clipPathUnits', 'style', 'xml:base', 'requiredExtensions', 'xml:space', 'transform', 'id', 'requiredFeatures', 'xml:lang', 'externalResourcesRequired', 'class', 'systemLanguage']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'animate', 'text', 'use', 'animateColor', 'polyline', 'path', 'line', 'ellipse', 'rect', 'desc', 'animateMotion', 'polygon', 'title', 'animateTransform', 'circle', 'metadata'])),
+
+    'color-profile': SVGElement('color-profile',
+    attributes=frozenset(['xlink:actuate', 'xlink:show', 'xml:base', 'name', 'rendering-intent', 'xml:space', 'xlink:href', 'xlink:role', 'xml:lang', 'xlink:type', 'xlink:title', 'xlink:arcrole', 'local', 'id']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'cursor': SVGElement('cursor',
+    attributes=frozenset(['xlink:title', 'xml:base', 'requiredExtensions', 'xml:space', 'xlink:href', 'systemLanguage', 'xlink:type', 'externalResourcesRequired', 'id', 'xlink:actuate', 'xlink:show', 'xlink:role', 'requiredFeatures', 'xml:lang', 'y', 'x', 'xlink:arcrole']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'defs': SVGElement('defs',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'class', 'onload', 'style', 'onactivate', 'nmousedown', 'transform', 'id', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'desc': SVGElement('desc',
+    attributes=frozenset(['style', 'xml:lang', 'xml:base', 'xml:space', 'class', 'id']),
+    properties=empty_list,
+    children=frozenset(['*'])),
+
+    'ellipse': SVGElement('ellipse',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'ry', 'cy', 'cx', 'onmouseover', 'externalResourcesRequired', 'id', 'onload', 'style', 'onactivate', 'nmousedown', 'rx', 'transform', 'class', 'requiredFeatures', 'systemLanguage', 'onmousemove', 'onclick', 'xml:lang', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'desc', 'metadata'])),
+
+    'feBlend': SVGElement('feBlend',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'in2', 'height', 'width', 'xml:lang', 'id', 'result', 'in', 'y', 'x', 'class', 'mode']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feColorMatrix': SVGElement('feColorMatrix',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'id', 'height', 'width', 'xml:lang', 'values', 'result', 'in', 'y', 'x', 'type', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feComponentTransfer': SVGElement('feComponentTransfer',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'height', 'width', 'xml:lang', 'id', 'result', 'in', 'y', 'x', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['feFuncA', 'feFuncR', 'feFuncB', 'feFuncG'])),
+
+    'feComposite': SVGElement('feComposite',
+    attributes=frozenset(['xml:base', 'xml:space', 'in2', 'height', 'result', 'in', 'operator', 'class', 'style', 'width', 'id', 'k3', 'k2', 'k1', 'xml:lang', 'k4', 'y', 'x']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feConvolveMatrix': SVGElement('feConvolveMatrix',
+    attributes=frozenset(['xml:base', 'xml:space', 'kernelUnitLength', 'edgeMode', 'height', 'bias', 'result', 'in', 'preserveAlpha', 'id', 'style', 'divisor', 'kernelMatrix', 'width', 'xml:lang', 'targetX', 'targetY', 'y', 'x', 'class2', 'order']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feDiffuseLighting': SVGElement('feDiffuseLighting',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'diffuseConstant', 'height', 'kernelUnitLength', 'width', 'xml:lang', 'id', 'result', 'in', 'y', 'x', 'class', 'surfaceScale']),
+    properties=presentation_attributes,
+    children=frozenset(['fePointLight', 'feSpotLight', 'title', 'metadata', 'feDistantLight', 'desc'])),
+
+    'feDisplacementMap': SVGElement('feDisplacementMap',
+    attributes=frozenset(['xml:base', 'xml:space', 'yChannelSelector', 'in2', 'height', 'result', 'in', 'class', 'style', 'scale', 'id', 'width', 'xml:lang', 'xChannelSelector', 'y', 'x']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feDistantLight': SVGElement('feDistantLight',
+    attributes=frozenset(['xml:lang', 'elevation', 'azimuth', 'xml:base', 'xml:space', 'id']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feFlood': SVGElement('feFlood',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'height', 'width', 'xml:lang', 'id', 'result', 'y', 'x', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set', 'animateColor'])),
+
+    'feFuncA': SVGElement('feFuncA',
+    attributes=frozenset(['slope', 'xml:base', 'tableValues', 'xml:space', 'xml:lang', 'intercept', 'amplitude', 'offset', 'type', 'id', 'exponent']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feFuncB': SVGElement('feFuncB',
+    attributes=frozenset(['slope', 'xml:base', 'tableValues', 'xml:space', 'xml:lang', 'intercept', 'amplitude', 'offset', 'type', 'id', 'exponent']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feFuncG': SVGElement('feFuncG',
+    attributes=frozenset(['slope', 'xml:base', 'tableValues', 'xml:space', 'xml:lang', 'intercept', 'amplitude', 'offset', 'type', 'id', 'exponent']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feFuncR': SVGElement('feFuncR',
+    attributes=frozenset(['slope', 'xml:base', 'tableValues', 'xml:space', 'xml:lang', 'intercept', 'amplitude', 'offset', 'type', 'id', 'exponent']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feGaussianBlur': SVGElement('feGaussianBlur',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'height', 'width', 'xml:lang', 'id', 'result', 'in', 'y', 'x', 'stdDeviation', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feImage': SVGElement('feImage',
+    attributes=frozenset(['xlink:title', 'xml:base', 'xml:space', 'xlink:href', 'height', 'result', 'xlink:type', 'externalResourcesRequired', 'preserveAsectRatio', 'class', 'xlink:actuate', 'style', 'xlink:show', 'id', 'xlink:role', 'width', 'xml:lang', 'y', 'x', 'xlink:arcrole']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set', 'animateColor'])),
+
+    'feMerge': SVGElement('feMerge',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'height', 'width', 'xml:lang', 'id', 'result', 'y', 'x', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feMergeNode': SVGElement('feMergeNode',
+    attributes=frozenset(['xml:space', 'xml:lang', 'xml:base', 'id', 'in']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feMorphology': SVGElement('feMorphology',
+    attributes=frozenset(['style', 'xml:base', 'y', 'xml:space', 'id', 'height', 'width', 'xml:lang', 'radius', 'result', 'in', 'operator', 'x', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feOffset': SVGElement('feOffset',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'in', 'height', 'width', 'xml:lang', 'id', 'result', 'dx', 'dy', 'y', 'x', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'fePointLight': SVGElement('fePointLight',
+    attributes=frozenset(['xml:lang', 'xml:base', 'y', 'x', 'xml:space', 'z', 'id']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feSpecularLighting': SVGElement('feSpecularLighting',
+    attributes=frozenset(['specularConstant', 'xml:base', 'xml:space', 'kernelUnitLength', 'height', 'result', 'in', 'class', 'style', 'id', 'width', 'xml:lang', 'specularExponent', 'y', 'x', 'surfaceScale']),
+    properties=presentation_attributes,
+    children=frozenset(['fePointLight', 'feSpotLight', 'title', 'metadata', 'feDistantLight', 'desc'])),
+
+    'feSpotLight': SVGElement('feSpotLight',
+    attributes=frozenset(['pointsAtX', 'xml:base', 'xml:space', 'limitingConeAngle', 'xml:lang', 'specularExponent', 'pointsAtZ', 'y', 'x', 'pointsAtY', 'z', 'id']),
+    properties=empty_list,
+    children=frozenset(['animate', 'set'])),
+
+    'feTile': SVGElement('feTile',
+    attributes=frozenset(['style', 'xml:base', 'xml:space', 'height', 'width', 'xml:lang', 'id', 'result', 'in', 'y', 'x', 'class']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set'])),
+
+    'feTurbulence': SVGElement('feTurbulence',
+    attributes=frozenset(['xml:base', 'baseFrequency', 'xml:space', 'stitchTiles', 'height', 'width', 'xml:lang', 'id', 'result', 'x', 'y', 'numOctaves', 'type', 'seed']),
+    properties=presentation_attributes,
+    children=empty_list),
+
+    'filter': SVGElement('filter',
+    attributes=frozenset(['xlink:title', 'xml:base', 'xml:space', 'xlink:href', 'height', 'xlink:type', 'externalResourcesRequired', 'class', 'xlink:actuate', 'style', 'xlink:show', 'filterRes', 'primitiveUnits', 'id', 'xlink:role', 'width', 'xml:lang', 'y', 'x', 'xlink:arcrole', 'filterUnits']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'title', 'height', 'width', 'result', 'y', 'x', 'animate', 'metadata', 'desc'])),
+
+    'font': SVGElement('font',
+    attributes=frozenset(['xml:base', 'xml:space', 'R', 'id', 'a', 'c', 'e', 'd', 'g', 'i', 'h', '-', 'l', 'o', 'n', 'q', 's', 'r', 'u', 't', 'v', 'y', 'x', 'z', 'xml:lang']),
+    properties=presentation_attributes,
+    children=frozenset(['title', 'metadata', 'missing-glyph', 'font-face', 'vkern', 'hkern', 'glyph', 'desc'])),
+
+    'font-face': SVGElement('font-face',
+    attributes=frozenset(['mathematical', 'slope', 'font-size', 'xml:space', 'v-hanging', 'hanging', 'overline-thickness', 'ascent', 'id', 'strikethrough-position', 'underline-position', 'descent', 'cap-height', 'units-per-em', 'font-style', 'unicode-range', 'font-stretch', 'font-variant', 'x-height', 'font-weight', 'xml:base', 'panose-1', 'strikethrough-thickness', 'stemh', 'v-alphabetic', 'stemv', 'bbox', 'underline-thickness', 'font-family', 'v-mathematical', 'v-ideographic', 'ideographic', 'overline-position', 'widths', 'xml:lang', 'accent-height', 'alphabetic']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'font-face-src', 'title'])),
+
+    'font-face-format': SVGElement('font-face-format',
+    attributes=frozenset(['xml:space', 'xml:lang', 'xml:base', 'id']),
+    properties=empty_list,
+    children=empty_list),
+
+    'font-face-name': SVGElement('font-face-name',
+    attributes=frozenset(['xml:space', 'xml:lang', 'xml:base', 'id', 'name']),
+    properties=empty_list,
+    children=empty_list),
+
+    'font-face-uri': SVGElement('font-face-uri',
+    attributes=frozenset(['xlink:actuate', 'xlink:show', 'xml:base', 'xml:space', 'xlink:href', 'xlink:role', 'xml:lang', 'xlink:type', 'xlink:title', 'xlink:arcrole', 'id']),
+    properties=empty_list,
+    children=frozenset(['font-face-format'])),
+
+    'foreignObject': SVGElement('foreignObject',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'height', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'id', 'onload', 'style', 'onactivate', 'nmousedown', 'transform', 'class', 'width', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'y', 'x', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['*'])),
+
+    'g': SVGElement('g',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'class', 'onload', 'style', 'onactivate', 'nmousedown', 'transform', 'id', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'glyph': SVGElement('glyph',
+    attributes=frozenset(['xml:base', 'm', 'xml:space', 'id', 'a', 'c', 'b', 'e', 'd', 'g', 'f', 'i', 'h', '-', 'l', 'o', 'n', 'p', 's', 'r', 'u', 't', 'v', 'y', 'x', 'z', 'xml:lang']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'glyphRef': SVGElement('glyphRef',
+    attributes=frozenset(['xlink:title', 'xml:base', 'format', 'xml:space', 'xlink:href', 'dx', 'dy', 'xlink:type', 'class', 'xlink:actuate', 'style', 'xlink:show', 'id', 'xlink:role', 'xml:lang', 'y', 'x', 'xlink:arcrole', 'glyphRef']),
+    properties=presentation_attributes,
+    children=empty_list),
+
+    'hkern': SVGElement('hkern',
+    attributes=frozenset(['xml:base', 'g2', 'g1', 'xml:space', 'u1', 'u2', 'xml:lang', 'id', 'k']),
+    properties=empty_list,
+    children=empty_list),
+
+    'image': SVGElement('image',
+    attributes=frozenset(['requiredExtensions', 'onfocusout', 'xml:space', 'xlink:href', 'height', 'id', 'onload', 'style', 'nmousedown', 'transform', 'width', 'onmousemove', 'onclick', 'xlink:arcrole', 'onfocusin', 'xml:base', 'onmouseup', 'onmouseout', 'xlink:title', 'systemLanguage', 'onmouseover', 'xlink:type', 'externalResourcesRequired', 'class', 'xlink:actuate', 'xlink:show', 'onactivate', 'xlink:role', 'requiredFeatures', 'xml:lang', 'y', 'x', 'preserveAspectRatio']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'desc', 'metadata'])),
+
+    'line': SVGElement('line',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'x2', 'systemLanguage', 'onmouseover', 'y1', 'externalResourcesRequired', 'y2', 'id', 'onload', 'style', 'x1', 'onactivate', 'nmousedown', 'transform', 'class', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'desc', 'metadata'])),
+
+    'linearGradient': SVGElement('linearGradient',
+    attributes=frozenset(['xlink:title', 'xml:base', 'xml:space', 'xlink:href', 'x2', 'y1', 'externalResourcesRequired', 'y2', 'class', 'xlink:actuate', 'xlink:role', 'style', 'xlink:show', 'spreadMethod', 'id', 'gradientUnits', 'xml:lang', 'gradientTransform', 'xlink:type', 'xlink:arcrole', 'x1']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'title', 'animate', 'animateTransform', 'stop', 'metadata', 'desc'])),
+
+    'marker': SVGElement('marker',
+    attributes=frozenset(['xml:space', 'id', 'xml:lang', 'A', 'B', 'xml:base', 'H', 'R', 'U', 'W', 'Y', 'X', 'a', 'c', 'e', 'd', 'g', 'f', 'i', 'h', 'k', 'm', 'l', 'o', 'n', 'q', 'p', 's', 'r', 'u', 't', 'w', 'v', 'y', 'x']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'mask': SVGElement('mask',
+    attributes=frozenset(['xml:base', 'requiredExtensions', 'xml:space', 'height', 'systemLanguage', 'externalResourcesRequired', 'maskContentUnits', 'class', 'style', 'id', 'width', 'requiredFeatures', 'xml:lang', 'y', 'x', 'maskUnits']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'metadata': SVGElement('metadata',
+    attributes=frozenset(['xml:space', 'xml:lang', 'xml:base', 'id']),
+    properties=empty_list,
+    children=frozenset(['*'])),
+
+    'missing-glyph': SVGElement('missing-glyph',
+    attributes=frozenset(['xml:base', 'xml:space', 'id', 'a', 'c', 'e', 'd', 'g', 'i', 'h', '-', 'l', 'o', 'n', 's', 'r', 't', 'v', 'y', 'x', 'z', 'xml:lang']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'mpath': SVGElement('mpath',
+    attributes=frozenset(['xlink:actuate', 'xlink:show', 'xml:base', 'xml:space', 'xlink:href', 'id', 'xlink:role', 'xml:lang', 'xlink:type', 'xlink:title', 'xlink:arcrole', 'externalResourcesRequired']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'path': SVGElement('path',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'systemLanguage', 'onmouseover', 'pathLength', 'externalResourcesRequired', 'id', 'onload', 'style', 'd', 'onactivate', 'nmousedown', 'transform', 'class', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'desc', 'metadata'])),
+
+    'pattern': SVGElement('pattern',
+    attributes=frozenset(['xlink:title', 'xml:base', 'requiredExtensions', 'xml:space', 'xlink:href', 'height', 'class', 'systemLanguage', 'patternContentUnits', 'xlink:type', 'externalResourcesRequired', 'id', 'xlink:actuate', 'style', 'xlink:show', 'viewBox', 'xlink:role', 'width', 'requiredFeatures', 'patternUnits', 'patternTransform', 'y', 'x', 'preserveAspectRatio', 'xlink:arcrole', 'xml:lang']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'polygon': SVGElement('polygon',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'id', 'onload', 'style', 'onactivate', 'nmousedown', 'transform', 'class', 'requiredFeatures', 'points', 'onmousemove', 'onclick', 'xml:lang', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'desc', 'metadata'])),
+
+    'polyline': SVGElement('polyline',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'id', 'onload', 'style', 'onactivate', 'nmousedown', 'transform', 'class', 'requiredFeatures', 'points', 'onmousemove', 'onclick', 'xml:lang', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'desc', 'metadata'])),
+
+    'radialGradient': SVGElement('radialGradient',
+    attributes=frozenset(['xlink:title', 'xml:base', 'fx', 'fy', 'xml:space', 'xlink:href', 'cy', 'cx', 'xlink:type', 'externalResourcesRequired', 'r', 'id', 'xlink:actuate', 'gradientUnits', 'style', 'xlink:show', 'spreadMethod', 'class', 'xlink:role', 'xml:lang', 'gradientTransform', 'xlink:arcrole']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'title', 'animate', 'animateTransform', 'stop', 'metadata', 'desc'])),
+
+    'rect': SVGElement('rect',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'height', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'id', 'onload', 'style', 'ry', 'onactivate', 'nmousedown', 'rx', 'transform', 'class', 'width', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'y', 'x', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'metadata', 'desc'])),
+
+    'script': SVGElement('script',
+    attributes=frozenset(['xlink:actuate', 'xlink:show', 'xml:base', 'xml:space', 'xlink:href', 'id', 'xlink:role', 'xml:lang', 'xlink:type', 'xlink:title', 'xlink:arcrole', 'type', 'externalResourcesRequired']),
+    properties=empty_list,
+    children=empty_list),
+
+    'set': SVGElement('set',
+    attributes=frozenset(['begin', 'xlink:title', 'xml:base', 'requiredExtensions', 'repeatCount', 'xml:space', 'xlink:href', 'attributeName', 'onbegin', 'systemLanguage', 'attributeType', 'xlink:type', 'externalResourcesRequired', 'id', 'restart', 'fill', 'xlink:actuate', 'onload', 'xlink:show', 'end', 'min', 'repeatDur', 'xlink:role', 'to', 'requiredFeatures', 'xml:lang', 'max', 'dur', 'xlink:arcrole', 'onrepeat', 'onend']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'stop': SVGElement('stop',
+    attributes=frozenset(['a', 'c', 'xml:base', 'f', 'xml:space', 'l', 'o', 's', 'xml:lang', 't', 'y', 'e', 'id']),
+    properties=presentation_attributes,
+    children=frozenset(['animate', 'set', 'animateColor'])),
+
+    'style': SVGElement('style',
+    attributes=frozenset(['xml:lang', 'xml:base', 'title', 'media', 'xml:space', 'type', 'id']),
+    properties=empty_list,
+    children=frozenset(['*'])),
+
+    'svg': SVGElement('svg',
+    attributes=frozenset(['requiredExtensions', 'onerror', 'onfocusout', 'xml:space', 'height', 'onscroll', 'baseProfile', 'contentStyleType', 'id', 'onabort', 'onload', 'style', 'nmousedown', 'onzoom', 'onresize', 'width', 'version', 'onmousemove', 'onmouseup', 'xmlns:xlink', 'xmlns:ev', 'onfocusin', 'xml:base', 'onclick', 'onmouseout', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'zoomAndPan', 'class', 'onunload', 'xmlns', 'onactivate', 'viewBox', 'requiredFeatures', 'xml:lang', 'y', 'x', 'preserveAspectRatio', 'contentScriptType']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'switch': SVGElement('switch',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'systemLanguage', 'onmouseover', 'externalResourcesRequired', 'class', 'onload', 'style', 'onactivate', 'nmousedown', 'transform', 'id', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'line', 'use', 'animateColor', 'polyline', 'path', 'animate', 'ellipse', 'rect', 'desc', 'a', 'animateMotion', 'polygon', 'g', 'title', 'svg', 'switch', 'animateTransform', 'foreignObject', 'circle', 'metadata'])),
+
+    'symbol': SVGElement('symbol',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'onfocusout', 'xml:space', 'onmouseover', 'id', 'externalResourcesRequired', 'viewBox', 'onload', 'style', 'onactivate', 'nmousedown', 'class', 'xml:lang', 'onmousemove', 'onclick', 'preserveAspectRatio', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'text', 'image', 'font-face', 'polyline', 'marker', 'animate', 'font', 'color-profile', 'ellipse', 'cursor', 'style', 'polygon', 'title', 'pattern', 'circle', 'radialGradient', 'metadata', 'defs', 'symbol', 'use', 'animateMotion', 'animateColor', 'path', 'line', 'rect', 'desc', 'a', 'g', 'svg', 'script', 'mask', 'altGlyphDef', 'filter', 'switch', 'animateTransform', 'linearGradient', 'clipPath', 'foreignObject', 'view'])),
+
+    'text': SVGElement('text',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'class', 'systemLanguage', 'onmouseover', 'dx', 'dy', 'externalResourcesRequired', 'lengthAdjust', 'onload', 'style', 'rotate', 'onactivate', 'nmousedown', 'textLength', 'transform', 'id', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'y', 'x', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['a', 'animateMotion', 'set', 'title', 'textPath', 'tspan', 'animateColor', 'tref', 'animateTransform', 'altGlyph', 'animate', 'desc', 'metadata'])),
+
+    'textPath': SVGElement('textPath',
+    attributes=frozenset(['requiredExtensions', 'onfocusout', 'xml:space', 'xlink:href', 'startOffset', 'id', 'onload', 'style', 'nmousedown', 'lengthAdjust', 'onmousemove', 'onclick', 'xlink:arcrole', 'onfocusin', 'xml:base', 'onmouseup', 'onmouseout', 'xlink:title', 'spacing', 'systemLanguage', 'onmouseover', 'xlink:type', 'externalResourcesRequired', 'class', 'xlink:actuate', 'xlink:show', 'onactivate', 'textLength', 'method', 'xlink:role', 'requiredFeatures', 'xml:lang']),
+    properties=presentation_attributes,
+    children=frozenset(['a', 'set', 'title', 'tspan', 'animateColor', 'tref', 'altGlyph', 'animate', 'metadata', 'desc'])),
+
+    'title': SVGElement('title',
+    attributes=frozenset(['style', 'xml:lang', 'xml:base', 'xml:space', 'class', 'id']),
+    properties=empty_list,
+    children=frozenset(['*'])),
+
+    'tref': SVGElement('tref',
+    attributes=frozenset(['requiredExtensions', 'onfocusout', 'xml:space', 'xlink:href', 'id', 'onload', 'style', 'nmousedown', 'lengthAdjust', 'onmousemove', 'onclick', 'xlink:arcrole', 'onfocusin', 'xml:base', 'onmouseup', 'onmouseout', 'xlink:title', 'systemLanguage', 'onmouseover', 'dx', 'dy', 'xlink:type', 'externalResourcesRequired', 'class', 'xlink:actuate', 'xlink:show', 'onactivate', 'textLength', 'xlink:role', 'requiredFeatures', 'xml:lang', 'y', 'x', 'rotate']),
+    properties=presentation_attributes,
+    children=frozenset(['set', 'title', 'animate', 'metadata', 'animateColor', 'desc'])),
+
+    'tspan': SVGElement('tspan',
+    attributes=frozenset(['xml:base', 'onmouseup', 'onmouseout', 'requiredExtensions', 'onfocusout', 'xml:space', 'class', 'systemLanguage', 'onmouseover', 'dx', 'dy', 'externalResourcesRequired', 'lengthAdjust', 'onload', 'style', 'rotate', 'onactivate', 'nmousedown', 'textLength', 'id', 'requiredFeatures', 'xml:lang', 'onmousemove', 'onclick', 'y', 'x', 'onfocusin']),
+    properties=presentation_attributes,
+    children=frozenset(['a', 'set', 'title', 'tspan', 'animateColor', 'tref', 'altGlyph', 'animate', 'metadata', 'desc'])),
+
+    'use': SVGElement('use',
+    attributes=frozenset(['requiredExtensions', 'onfocusout', 'xml:space', 'xlink:href', 'height', 'id', 'onload', 'style', 'nmousedown', 'transform', 'width', 'onmousemove', 'onclick', 'xlink:arcrole', 'onfocusin', 'xml:base', 'onmouseup', 'onmouseout', 'xlink:title', 'systemLanguage', 'onmouseover', 'xlink:type', 'externalResourcesRequired', 'class', 'xlink:actuate', 'xlink:show', 'onactivate', 'xlink:role', 'requiredFeatures', 'xml:lang', 'y', 'x']),
+    properties=presentation_attributes,
+    children=frozenset(['animateMotion', 'set', 'title', 'animateColor', 'animateTransform', 'animate', 'desc', 'metadata'])),
+
+    'view': SVGElement('view',
+    attributes=frozenset(['xml:base', 'viewTarget', 'xml:space', 'viewBox', 'xml:lang', 'preserveAspectRatio', 'externalResourcesRequired', 'zoomAndPan', 'id']),
+    properties=empty_list,
+    children=frozenset(['desc', 'metadata', 'title'])),
+
+    'vkern': SVGElement('vkern',
+    attributes=frozenset(['xml:base', 'g2', 'g1', 'xml:space', 'u1', 'u2', 'xml:lang', 'id', 'k']),
+    properties=empty_list,
+    children=empty_list),
+
+}

svgwrite/data/tiny12.py

+#!/usr/bin/env python
+#coding:utf-8
+# Author:  mozman --<mozman@gmx.at>
+# Purpose: tiny12 data
+# Created: 15.10.2010
+# Copyright (C) 2010, Manfred Moitzi
+# License: GPLv3
+
+from types import SVGAttribute, SVGMultiAttribute
+from types import SVGElement
+from typechecker import Tiny12TypeChecker as TypeChecker
+
+empty_list = []
+
+attributes = {
+'about': SVGAttribute('about', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'accent-height': SVGAttribute('accent-height', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'accumulate': SVGAttribute('accumulate', anim=False,
+    types=empty_list,
+    const=frozenset([u'none', u'sum'])),
+'additive': SVGAttribute('additive', anim=False,
+    types=empty_list,
+    const=frozenset([u'replace', u'sum'])),
+'alphabetic': SVGAttribute('alphabetic', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'arabic-form': SVGAttribute('arabic-form', anim=False,
+    types=empty_list,
+    const=frozenset([u'terminal', u'initial', u'isolated', u'medial'])),
+'ascent': SVGAttribute('ascent', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'attributeName': SVGAttribute('attributeName', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'attributeType': SVGAttribute('attributeType', anim=False,
+    types=empty_list,
+    const=frozenset([u'XML', u'CSS', u'auto'])),
+'audio-level': SVGAttribute('audio-level', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'bandwidth': SVGAttribute('bandwidth', anim=False,
+    types=frozenset([u'number']),
+    const=frozenset([u'auto'])),
+'baseProfile': SVGAttribute('baseProfile', anim=False,
+    types=empty_list,
+    const=frozenset([u'none', u'tiny', u'basic', u'full'])),
+'bbox': SVGAttribute('bbox', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'begin': SVGAttribute('begin', anim=False,
+    types=frozenset([u'list-of-string']),
+    const=empty_list),
+'buffered-rendering': SVGAttribute('buffered-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'dynamic', u'static', u'inherit'])),
+'by': SVGAttribute('by', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'calcMode': SVGAttribute('calcMode', anim=False,
+    types=empty_list,
+    const=frozenset([u'discrete', u'linear', u'paced', u'spline'])),
+'cap-height': SVGAttribute('cap-height', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'class': SVGAttribute('class', anim=True,
+    types=frozenset([u'XML-Name']),
+    const=empty_list),
+'color': SVGAttribute('color', anim=True,
+    types=frozenset([u'color']),
+    const=frozenset([u'inherit'])),
+'color-rendering': SVGAttribute('color-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeSpeed', u'optimizeQuality', u'inherit'])),
+'content': SVGAttribute('content', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'contentScriptType': SVGAttribute('contentScriptType', anim=False,
+    types=frozenset([u'content-type']),
+    const=empty_list),
+'cx': SVGAttribute('cx', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'cy': SVGAttribute('cy', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'d': SVGAttribute('d', anim=True,
+    types=frozenset([u'path-data']),
+    const=empty_list),
+'datatype': SVGAttribute('datatype', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'defaultAction': SVGAttribute('defaultAction', anim=False,
+    types=empty_list,
+    const=frozenset([u'perform', u'cancel'])),
+'descent': SVGAttribute('descent', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'direction': SVGAttribute('direction', anim=False,
+    types=empty_list,
+    const=frozenset([u'ltr', u'rtl', u'inherit'])),
+'display': SVGAttribute('display', anim=True,
+    types=empty_list,
+    const=frozenset([u'inline', u'block', u'list-item', u'run-in', u'compact',
+                     u'marker', u'table', u'inline-table', u'table-row-group',
+                     u'table-header-group', u'table-footer-group', u'table-row',
+                     u'table-column-group', u'table-column', u'table-cell',
+                     u'table-caption', u'none', u'inherit'])),
+'display-align': SVGAttribute('display-align', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'before', u'center', u'after', u'inherit'])),
+'dur': SVGAttribute('dur', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'media', u'indefinite'])),
+'editable': SVGAttribute('editable', anim=True,
+    types=empty_list,
+    const=frozenset([u'none', u'simple'])),
+'end': SVGAttribute('end', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'ev:event': SVGAttribute('ev:event', anim=False,
+    types=frozenset([u'XML-Name']),
+    const=empty_list),
+'event': SVGAttribute('event', anim=False,
+    types=frozenset([u'XML-Name']),
+    const=empty_list),
+'externalResourcesRequired': SVGAttribute('externalResourcesRequired', anim=False,
+    types=frozenset([u'boolean']),
+    const=empty_list),
+'fill': SVGAttribute('fill', anim=True,
+    types=frozenset([u'paint']),
+    const=frozenset([u'inherit'])),
+'fill-opacity': SVGAttribute('fill-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'fill-rule': SVGAttribute('fill-rule', anim=True,
+    types=empty_list,
+    const=frozenset([u'nonzero', u'evenodd', u'inherit'])),
+'focusHighlight': SVGAttribute('focusHighlight', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'none'])),
+'focusable': SVGAttribute('focusable', anim=True,
+    types=frozenset([u'boolean']),
+    const=frozenset([u'auto'])),
+'font-family': SVGAttribute('font-family', anim=True,
+    types=frozenset([u'string']),
+    const=frozenset([u'inherit'])),
+'font-size': SVGAttribute('font-size', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit'])),
+'font-stretch': SVGAttribute('font-stretch', anim=False,
+    types=empty_list,
+    const=frozenset([u'condensed', u'normal', u'ultra-condensed', u'expanded',
+                     u'narrower', u'inherit', u'semi-condensed', u'extra-condensed',
+                     u'ultra-expanded', u'wider', u'semi-expanded', u'extra-expanded'])),
+'font-style': SVGAttribute('font-style', anim=True,
+    types=empty_list,
+    const=frozenset([u'normal', u'italic', u'oblique', u'inherit'])),
+'font-variant': SVGAttribute('font-variant', anim=True,
+    types=empty_list,
+    const=frozenset([u'normal', u'small-caps', u'inherit'])),
+'font-weight': SVGAttribute('font-weight', anim=True,
+    types=empty_list,
+    const=frozenset([u'normal', u'bold', u'bolder', u'lighter', u'100', u'200',
+                     u'300', u'400', u'500', u'600', u'700', u'800', u'900',
+                     u'inherit'])),
+'from': SVGAttribute('from', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'g1': SVGAttribute('g1', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'g2': SVGAttribute('g2', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'glyph-name': SVGAttribute('glyph-name', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'gradientUnits': SVGAttribute('gradientUnits', anim=True,
+    types=empty_list,
+    const=frozenset([u'userSpaceOnUse', u'objectBoundingBox'])),
+'handler': SVGAttribute('handler', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'hanging': SVGAttribute('hanging', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'height': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'height', anim=True,
+        types=frozenset([u'length']),
+        const=empty_list),
+    'textArea': SVGAttribute(
+        'height', anim=True,
+        types=frozenset([u'length']),
+        const=frozenset([u'auto'])),
+    }),
+'horiz-adv-x': SVGAttribute('horiz-adv-x', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'horiz-origin-x': SVGAttribute('horiz-origin-x', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'id': SVGAttribute('id', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'ideographic': SVGAttribute('ideographic', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'image-rendering': SVGAttribute('image-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeSpeed', u'optimizeQuality', u'inherit'])),
+'initialVisibility': SVGAttribute('initialVisibility', anim=False,
+    types=empty_list,
+    const=frozenset([u'whenStarted', u'always'])),
+'k': SVGAttribute('k', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'keyPoints': SVGAttribute('keyPoints', anim=False,
+    types=frozenset([u'semicolon-list']),
+    const=empty_list),
+'keySplines': SVGAttribute('keySplines', anim=False,
+    types=frozenset([u'semicolon-list']),
+    const=empty_list),
+'keyTimes': SVGAttribute('keyTimes', anim=False,
+    types=frozenset([u'semicolon-list']),
+    const=empty_list),
+'lang': SVGAttribute('lang', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'line-increment': SVGAttribute('line-increment', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'auto', u'inherit'])),
+'mathematical': SVGAttribute('mathematical', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'max': SVGAttribute('max', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'media'])),
+'mediaCharacterEncoding': SVGAttribute('mediaCharacterEncoding', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'mediaContentEncodings': SVGAttribute('mediaContentEncodings', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'mediaSize': SVGAttribute('mediaSize', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'mediaTime': SVGAttribute('mediaTime', anim=False,
+    types=frozenset([u'time']),
+    const=empty_list),
+'min': SVGAttribute('min', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'media'])),
+'nav-down': SVGAttribute('nav-down', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-down-left': SVGAttribute('nav-down-left', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-down-right': SVGAttribute('nav-down-right', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-left': SVGAttribute('nav-left', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-next': SVGAttribute('nav-next', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-prev': SVGAttribute('nav-prev', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-right': SVGAttribute('nav-right', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-up': SVGAttribute('nav-up', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-up-left': SVGAttribute('nav-up-left', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'nav-up-right': SVGAttribute('nav-up-right', anim=True,
+    types=frozenset([u'focus']),
+    const=empty_list),
+'observer': SVGAttribute('observer', anim=False,
+    types=frozenset([u'IDREF']),
+    const=empty_list),
+'offset': SVGAttribute('offset', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'opacity': SVGAttribute('opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'origin': SVGAttribute('origin', anim=False,
+    types=empty_list,
+    const=frozenset([u'default'])),
+'overlay': SVGAttribute('overlay', anim=False,
+    types=empty_list,
+    const=frozenset([u'none', u'top'])),
+'overline-position': SVGAttribute('overline-position', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'overline-thickness': SVGAttribute('overline-thickness', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'panose-1': SVGAttribute('panose-1', anim=False,
+    types=frozenset([u'list-of-integer']),
+    const=empty_list),
+'path': SVGAttribute('path', anim=False,
+    types=frozenset([u'list-of-name']),
+    const=empty_list),
+'pathLength': SVGAttribute('pathLength', anim=True,
+    types=frozenset([u'number']),
+    const=empty_list),
+'phase': SVGAttribute('phase', anim=False,
+    types=empty_list,
+    const=frozenset([u'default', u'capture'])),
+'playbackOrder': SVGAttribute('playbackOrder', anim=False,
+    types=empty_list,
+    const=frozenset([u'all', u'forwardOnly'])),
+'pointer-events': SVGAttribute('pointer-events', anim=True,
+    types=empty_list,
+    const=frozenset([u'visiblePainted', u'visibleFill', u'visibleStroke', u'visible',
+                     u'painted', u'fill', u'stroke', u'all', u'none', u'inherit'])),
+'points': SVGAttribute('points', anim=True,
+    types=frozenset([u'list-of-number']),
+    const=empty_list),
+'preserveAspectRatio': SVGAttribute('preserveAspectRatio', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'propagate': SVGAttribute('propagate', anim=False,
+    types=empty_list,
+    const=frozenset([u'continue', u'stop'])),
+'property': SVGAttribute('property', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'r': SVGAttribute('r', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'rel': SVGAttribute('rel', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'repeatCount': SVGAttribute('repeatCount', anim=False,
+    types=frozenset([u'number']),
+    const=frozenset([u'indefinite'])),
+'repeatDur': SVGAttribute('repeatDur', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'indefinite'])),
+'requiredExtensions': SVGAttribute('requiredExtensions', anim=False,
+    types=frozenset([u'list-of-IRI']),
+    const=empty_list),
+'requiredFeatures': SVGAttribute('requiredFeatures', anim=False,
+    types=frozenset([u'list-of-IRI']),
+    const=empty_list),
+'requiredFonts': SVGAttribute('requiredFonts', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'requiredFormats': SVGAttribute('requiredFormats', anim=False,
+    types=frozenset([u'anything']),
+    const=empty_list),
+'resource': SVGAttribute('resource', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'restart': SVGAttribute('restart', anim=False,
+    types=empty_list,
+    const=frozenset([u'always', u'never', u'whenNotActive'])),
+'rev': SVGAttribute('rev', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'role': SVGAttribute('role', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'rotate': SVGAttribute('rotate', anim=True,
+    types=frozenset([u'list-of-number']),
+    const=empty_list),
+'rx': SVGAttribute('rx', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'ry': SVGAttribute('ry', anim=True,
+    types=frozenset([u'length']),
+    const=empty_list),
+'shape-rendering': SVGAttribute('shape-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeSpeed', u'crispEdges', u'geometricPrecision', u'inherit'])),
+'slope': SVGAttribute('slope', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'snapshotTime': SVGAttribute('snapshotTime', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'none'])),
+'solid-color': SVGAttribute('solid-color', anim=True,
+    types=frozenset([u'color']),
+    const=frozenset([u'inherit'])),
+'solid-opacity': SVGAttribute('solid-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'stemh': SVGAttribute('stemh', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'stemv': SVGAttribute('stemv', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'stop-color': SVGAttribute('stop-color', anim=True,
+    types=frozenset([u'color']),
+    const=frozenset([u'inherit'])),
+'stop-opacity': SVGAttribute('stop-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'strikethrough-position': SVGAttribute('strikethrough-position', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'strikethrough-thickness': SVGAttribute('strikethrough-thickness', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'stroke': SVGAttribute('stroke', anim=True,
+    types=frozenset([u'paint']),
+    const=frozenset([u'inherit'])),
+'stroke-dasharray': SVGAttribute('stroke-dasharray', anim=True,
+    types=frozenset([u'list-of-length']),
+    const=frozenset([u'none', u'inherit'])),
+'stroke-dashoffset': SVGAttribute('stroke-dashoffset', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit'])),
+'stroke-linecap': SVGAttribute('stroke-linecap', anim=True,
+    types=empty_list,
+    const=frozenset([u'butt', u'round', u'square', u'inherit'])),
+'stroke-linejoin': SVGAttribute('stroke-linejoin', anim=True,
+    types=empty_list,
+    const=frozenset([u'miter', u'round', u'bevel', u'inherit'])),
+'stroke-miterlimit': SVGAttribute('stroke-miterlimit', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'stroke-opacity': SVGAttribute('stroke-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'stroke-width': SVGAttribute('stroke-width', anim=True,
+    types=frozenset([u'length']),
+    const=frozenset([u'inherit'])),
+'syncBehavior': SVGAttribute('syncBehavior', anim=False,
+    types=empty_list,
+    const=frozenset([u'canSlip', u'locked', u'independent', u'default'])),
+'syncBehaviorDefault': SVGAttribute('syncBehaviorDefault', anim=False,
+    types=empty_list,
+    const=frozenset([u'canSlip', u'locked', u'independent', u'inherit'])),
+'syncMaster': SVGAttribute('syncMaster', anim=False,
+    types=frozenset([u'boolean']),
+    const=empty_list),
+'syncTolerance': SVGAttribute('syncTolerance', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'default'])),
+'syncToleranceDefault': SVGAttribute('syncToleranceDefault', anim=False,
+    types=frozenset([u'time']),
+    const=frozenset([u'inherit'])),
+'systemLanguage': SVGAttribute('systemLanguage', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'target': SVGMultiAttribute({
+    '* a': SVGAttribute(
+        'target', anim=True,
+        types=frozenset([u'XML-Name']),
+        const=frozenset([u'_replace', u'_self', u'_parent', u'_top', u'_blank'])),
+    'listener': SVGAttribute(
+        'target', anim=False,
+        types=frozenset([u'XML-Name']),
+        const=empty_list),
+    }),
+'text-align': SVGAttribute('text-align', anim=True,
+    types=empty_list,
+    const=frozenset([u'start', u'center', u'end', u'inherit'])),
+'text-anchor': SVGAttribute('text-anchor', anim=True,
+    types=empty_list,
+    const=frozenset([u'start', u'middle', u'end', u'inherit'])),
+'text-rendering': SVGAttribute('text-rendering', anim=True,
+    types=empty_list,
+    const=frozenset([u'auto', u'optimizeSpeed', u'optimizeLegibility', u'geometricPrecision', u'inherit'])),
+'timelineBegin': SVGAttribute('timelineBegin', anim=False,
+    types=empty_list,
+    const=frozenset([u'onLoad', u'onStart'])),
+'to': SVGAttribute('to', anim=False,
+    types=frozenset([u'time']),
+    const=empty_list),
+'transform': SVGAttribute('transform', anim=True,
+    types=frozenset([u'transform-list']),
+    const=frozenset([u'none'])),
+'transformBehavior': SVGAttribute('transformBehavior', anim=False,
+    types=empty_list,
+    const=frozenset([u'geometric', u'pinned', u'pinned90', u'pinned180', u'pinned270'])),
+'type': SVGMultiAttribute({
+    '* audio image video': SVGAttribute(
+        'type', anim=True,
+        types=frozenset([u'content-type']),
+        const=empty_list),
+    'handler script': SVGAttribute(
+        'type', anim=False,
+        types=frozenset([u'content-type']),
+        const=empty_list),
+    'animateTransform': SVGAttribute(
+        'type', anim=False,
+        types=empty_list,
+        const=frozenset([u'translate', u'scale', u'rotate', u'skewX', u'skewY'])),
+    }),
+'typeof': SVGAttribute('typeof', anim=True,
+    types=frozenset([u'string']),
+    const=empty_list),
+'u1': SVGAttribute('u1', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'u2': SVGAttribute('u2', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'underline-position': SVGAttribute('underline-position', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'underline-thickness': SVGAttribute('underline-thickness', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'unicode': SVGAttribute('unicode', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'unicode-bidi': SVGAttribute('unicode-bidi', anim=False,
+    types=empty_list,
+    const=frozenset([u'normal', u'embed', u'bidi-override', u'inherit'])),
+'unicode-range': SVGAttribute('unicode-range', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'units-per-em': SVGAttribute('units-per-em', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'values': SVGAttribute('values', anim=False,
+    types=frozenset([u'list-of-number']),
+    const=empty_list),
+'vector-effect': SVGAttribute('vector-effect', anim=True,
+    types=empty_list,
+    const=frozenset([u'none', u'non-scaling-stroke', u'inherit'])),
+'version': SVGAttribute('version', anim=False,
+    types=empty_list,
+    const=frozenset([u'1.1', u'1.2'])),
+'viewBox': SVGAttribute('viewBox', anim=True,
+    types=frozenset([u'four-numbers']),
+    const=empty_list),
+'viewport-fill': SVGAttribute('viewport-fill', anim=True,
+    types=frozenset([u'color']),
+    const=frozenset([u'none', u'inherit'])),
+'viewport-fill-opacity': SVGAttribute('viewport-fill-opacity', anim=True,
+    types=frozenset([u'number']),
+    const=frozenset([u'inherit'])),
+'visibility': SVGAttribute('visibility', anim=True,
+    types=empty_list,
+    const=frozenset([u'visible', u'hidden', u'inherit'])),
+'width': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'width', anim=True,
+        types=frozenset([u'length']),
+        const=empty_list),
+    'textArea': SVGAttribute(
+        'width', anim=True,
+        types=frozenset([u'length']),
+        const=frozenset([u'auto'])),
+    }),
+'widths': SVGAttribute('widths', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'x': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'x', anim=True,
+        types=frozenset([u'coordinate']),
+        const=empty_list),
+    'text': SVGAttribute(
+        'x', anim=True,
+        types=frozenset([u'list-of-coordinate']),
+        const=empty_list),
+    }),
+'x-height': SVGAttribute('x-height', anim=False,
+    types=frozenset([u'number']),
+    const=empty_list),
+'x1': SVGAttribute('x1', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'x2': SVGAttribute('x2', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'xlink:actuate': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'xlink:actuate', anim=False,
+        types=empty_list,
+        const=frozenset([u'onLoad'])),
+    'a': SVGAttribute(
+        'xlink:actuate', anim=False,
+        types=empty_list,
+        const=frozenset([u'onRequest'])),
+    }),
+'xlink:arcrole': SVGAttribute('xlink:arcrole', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xlink:href': SVGAttribute('xlink:href', anim=True,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xlink:role': SVGAttribute('xlink:role', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xlink:show': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'xlink:show', anim=False,
+        types=empty_list,
+        const=frozenset([u'other'])),
+    'animation audio foreignObject image use video': SVGAttribute(
+        'xlink:show', anim=False,
+        types=empty_list,
+        const=frozenset([u'embed'])),
+    'a': SVGAttribute(
+        'xlink:show', anim=False,
+        types=empty_list,
+        const=frozenset([u'new', u'replace'])),
+    }),
+'xlink:title': SVGAttribute('xlink:title', anim=False,
+    types=frozenset([u'string']),
+    const=empty_list),
+'xlink:type': SVGAttribute('xlink:type', anim=True,
+    types=empty_list,
+    const=frozenset([u'simple'])),
+'xmlns': SVGAttribute('xmlns', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xmlns:xlink': SVGAttribute('xmlns:xlink', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xmlns:ev': SVGAttribute('xmlns:ev', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xml:base': SVGAttribute('xml:base', anim=False,
+    types=frozenset([u'IRI']),
+    const=empty_list),
+'xml:id': SVGAttribute('xml:id', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'xml:lang': SVGAttribute('xml:lang', anim=False,
+    types=frozenset([u'name']),
+    const=empty_list),
+'xml:space': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'xml:space', anim=False,
+        types=empty_list,
+        const=frozenset([u'preserve', u'default'])),
+    'handler script': SVGAttribute(
+        'xml:space', anim=False,
+        types=empty_list,
+        const=frozenset([u'preserve'])),
+    }),
+'y': SVGMultiAttribute({
+    '*': SVGAttribute(
+        'y', anim=True,
+        types=frozenset([u'coordinate']),
+        const=empty_list),
+    'text': SVGAttribute(
+        'y', anim=True,
+        types=frozenset([u'list-of-coordinate']),
+        const=empty_list),
+    }),
+'y1': SVGAttribute('y1', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'y2': SVGAttribute('y2', anim=True,
+    types=frozenset([u'coordinate']),
+    const=empty_list),
+'zoomAndPan': SVGAttribute('zoomAndPan', anim=False,
+    types=empty_list,
+    const=frozenset([u'disable', u'magnify'])),
+}