Ticket #1541: svg.py

File svg.py, 18.8 KB (added by crumble, 22 months ago)
Line 
1from nagare.namespaces.xml import XmlRenderer, TagProp
2
3ANIMATION_EVENT_ATTRIBUTES = ('onbegin', 'onend', 'onload', 'onrepeat')
4ANIMATION_ATTRIBUTE_TARGET_ATTRIBUTES = ('attributeType', 'attributeName')
5ANIMATION_TIMING_ATTRIBUTES = ('begin', 'dur', 'end', 'min', 'max', 'restart', 'repeatCount', 'repeatDur', 'fill')
6ANIMATION_VALUE_ATTRIBUTES = ('calcMode', 'values', 'keyTimes', 'keySplines', 'from', 'to', 'by', 'autoReverse', 'accelerate', 'decelerate')
7ANIMATION_ADDITION_ATTRIBUTES = ('additive', 'accumulate')
8CONDITIONAL_PROCESSING_ATTRIBUTES = ('requiredExtensions', 'requiredFeatures', 'systemLanguage')
9CORE_ATTRIBUTES = ('id', 'xml:base', 'xml:lang', 'xml:space')
10DOCUMENT_EVENT_ATTRIBUTES = ('onabort', 'onerror', 'onresize', 'onscroll', 'onunload', 'onzoom')
11FILTER_PRIMITIVE_ATTRIBUTES = ('height', 'result', 'width', 'x', 'y')
12GRAPHICAL_EVENT_ATTRIBUTES = (
13    'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup')
14PRESENTATION_ATTRIBUTES = (
15    'alignment-baseline', 'baseline-shift', 'clip', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters',
16    'color-profile', 'color-rendering', 'cursor', 'direction', 'display', 'dominant-baseline', 'enable-background', 'fill', 'fill-opacity',
17    'fill-rule', 'filter', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style',
18    'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning',
19    'letter-spacing',
20    'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'mask', 'opacity', 'overflow', 'pointer-events', 'shape-rendering',
21    'stop-color', 'stop-opacity', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin',
22    'stroke-miterlimit',
23    'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'unicode-bidi', 'visibility', 'word-spacing',
24    'writing-mode')
25TRANSFER_FUNCTION_ATTRIBUTES = ('type', 'tableValues', 'slope', 'intercept', 'amplitude', 'exponent', 'offset')
26XLINK_ATTRIBUTES = ('xlink:href', 'xlink:type', 'xlink:role', 'xlink:arcrole', 'xlink:title', 'xlink:show', 'xlink:actuate')
27
28
29class SVGRenderer(XmlRenderer):
30    a = TagProp('a', set(
31        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
32        ('class', 'style', 'externalResourcesRequired', 'transform')))
33    altGlyph = TagProp('altGlyph', set(
34        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
35        ('class', 'style', 'externalResourcesRequired')))
36    altGlyphDef = TagProp('altGlyphDef', set(CORE_ATTRIBUTES))
37    altGlyphItem = TagProp('altGlyphItem', set(CORE_ATTRIBUTES))
38    animate = TagProp('animate', set(
39        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + ANIMATION_EVENT_ATTRIBUTES + XLINK_ATTRIBUTES +
40        ANIMATION_ATTRIBUTE_TARGET_ATTRIBUTES + ANIMATION_TIMING_ATTRIBUTES + ANIMATION_VALUE_ATTRIBUTES + ANIMATION_ADDITION_ATTRIBUTES +
41        ('externalResourcesRequired', 'attributeName', 'attributeType', 'from', 'to', 'dur', 'repeatCount')))
42    animateColor = TagProp('animateColor', set(
43        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + ANIMATION_EVENT_ATTRIBUTES + XLINK_ATTRIBUTES +
44        ANIMATION_ATTRIBUTE_TARGET_ATTRIBUTES + ANIMATION_TIMING_ATTRIBUTES + ANIMATION_VALUE_ATTRIBUTES + ANIMATION_ADDITION_ATTRIBUTES +
45        ('externalResourcesRequired',) + ('by', 'from', 'to')))
46    animateMotion = TagProp('animateMotion', set(
47        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + ANIMATION_EVENT_ATTRIBUTES + XLINK_ATTRIBUTES +
48        ANIMATION_ATTRIBUTE_TARGET_ATTRIBUTES + ANIMATION_TIMING_ATTRIBUTES + ANIMATION_VALUE_ATTRIBUTES + ANIMATION_ADDITION_ATTRIBUTES +
49        ('externalResourcesRequired',) + ('calcMode', 'path', 'keyPoints', 'rotate', 'origin')))
50    animateTransform = TagProp('animateTransform', set(
51        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + ANIMATION_EVENT_ATTRIBUTES + XLINK_ATTRIBUTES +
52        ANIMATION_ATTRIBUTE_TARGET_ATTRIBUTES + ANIMATION_TIMING_ATTRIBUTES + ANIMATION_VALUE_ATTRIBUTES + ANIMATION_ADDITION_ATTRIBUTES +
53        ('externalResourcesRequired',) + ('by', 'from', 'to', 'type')))
54    circle = TagProp('circle', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES +
55                                   ('class', 'style', 'externalResourcesRequired', 'transform', 'cx', 'cy', 'r')))
56    clipPath = TagProp('clipPath', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
57                                       ('class', 'style', 'externalResourcesRequired', 'transform', 'clipPathUnits')))
58    color_profile = TagProp('color-profile', set(CORE_ATTRIBUTES + XLINK_ATTRIBUTES + ('local', 'name', 'rendering-intent', 'xlink:href')))
59    cursor = TagProp('cursor', set(
60        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + XLINK_ATTRIBUTES + ('externalResourcesRequired', 'x', 'y', 'xlink:href')))
61    defs = TagProp('defs', set(
62        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
63        ('class', 'style', 'externalResourcesRequired', 'transform')))
64    desc = TagProp('desc', set(CORE_ATTRIBUTES + ('class', 'style')))
65    ellipse = TagProp('ellipse', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES +
66                                     ('class', 'style', 'externalResourcesRequired', 'transform', 'cx', 'cy', 'rx', 'ry')))
67    feBlend = TagProp('feBlend', set(
68        CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'in', 'in2', 'mode')))
69    feColorMatrix = TagProp('feColorMatrix', set(
70        CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'in', 'type', 'values')))
71    feComponentTransfer = TagProp('feComponentTransfer',
72                                  set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'in')))
73    feComposite = TagProp('feComposite', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES +
74                                             ('class', 'style', 'in', 'in2', 'operator', 'k1', 'k2', 'k3', 'k4')))
75    feConvolveMatrix = TagProp('feConvolveMatrix', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES +
76                                                       ('class', 'style', 'in', 'order', 'kernelMatrix', 'divisor', 'bias', 'targetX',
77                                                        'targetY', 'edgeMode', 'kernelUnitLength', 'preserveAlpha')))
78    feDiffuseLighting = TagProp('feDiffuseLighting', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES +
79                                                         ('class', 'style', 'in', 'surfaceScale', 'diffuseConstant', 'kernelUnitLength')))
80    feDisplacementMap = TagProp('feDisplacementMap', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES +
81                                                         ('class', 'style', 'in', 'in2', 'scale', 'xChannelSelector', 'yChannelSelector')))
82    feDistantLight = TagProp('feDistantLight', set(CORE_ATTRIBUTES + ('azimuth', 'elevation')))
83    feFlood = TagProp('feFlood', set(
84        CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'flood-color', 'flood-opacity')))
85    feFuncA = TagProp('feFuncA', set(CORE_ATTRIBUTES + TRANSFER_FUNCTION_ATTRIBUTES))
86    feFuncB = TagProp('feFuncB', set(CORE_ATTRIBUTES + TRANSFER_FUNCTION_ATTRIBUTES))
87    feFuncG = TagProp('feFuncG', set(CORE_ATTRIBUTES + TRANSFER_FUNCTION_ATTRIBUTES))
88    feFuncR = TagProp('feFuncR', set(CORE_ATTRIBUTES + TRANSFER_FUNCTION_ATTRIBUTES))
89    feGaussianBlur = TagProp('feGaussianBlur', set(
90        CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'in', 'stdDevation')))
91    feImage = TagProp('feImage', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + XLINK_ATTRIBUTES +
92                                     ('class', 'style', 'externalResourcesRequired', 'preserveAspectRatio', 'xlink:href')))
93    feMerge = TagProp('feMerge', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style')))
94    feMergeNode = TagProp('feMergeNode', set(CORE_ATTRIBUTES + ('in',)))
95    feMorphology = TagProp('feMorphology', set(
96        CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'in', 'operator', 'radius')))
97    feOffset = TagProp('feOffset',
98                       set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'in', 'dx', 'dy')))
99    fePointLight = TagProp('fePointLight', set(CORE_ATTRIBUTES + ('x', 'y', 'z')))
100    feSpecularLighting = TagProp('feSpecularLighting', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES +
101                                                           ('class', 'style', 'in', 'surfaceScale', 'specularConstant', 'specularExponent',
102                                                            'kernelUnitLength')))
103    feSpotLight = TagProp('feSpotLight', set(
104        CORE_ATTRIBUTES + ('x', 'y', 'z', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'specularExponent', 'limitingConeAngle')))
105    feTile = TagProp('feTile', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + ('class', 'style', 'in')))
106    feTurbulence = TagProp('feTurbulence', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + FILTER_PRIMITIVE_ATTRIBUTES + (
107        'class', 'style', 'baseFrequency', 'numOctaves', 'seed', 'stitchTiles', 'type')))
108    filter = TagProp('filter', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES + (
109        'class', 'style', 'externalResourcesRequired', 'x', 'y', 'width', 'height', 'filterRes', 'filterUnits', 'primitiveUnits',
110        'xlink:href')))
111    font = TagProp('font', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + (
112        'class', 'style', 'externalResourcesRequired', 'horiz-origin-x', 'horiz-origin-y', 'horiz-adv-z', 'vert-origin-x', 'vert-origin-y',
113        'vert-adv-z')))
114    font_face = TagProp('font-face', set(CORE_ATTRIBUTES + (
115        'font-family', 'font-style', 'font-variant', 'font-weight', 'font-stretch', 'font-size', 'unicode-range', 'units-per-em',
116        'panose-1',
117        'stemv', 'stemh', 'slope', 'cap-height', 'x-height', 'accent-height', 'ascent', 'descent', 'widths', 'bbox', 'ideographic',
118        'alphabetic', 'mathematical', 'hanging', 'v-ideographic', 'v-alphabetic', 'v-mathematical', 'v-hanging', 'underline-position',
119        'underline-thickness', 'strikethrough-position', 'strikethrough-thickness', 'overline-position', 'overline-thickness')))
120    font_face_format = TagProp('font-face-format', set(CORE_ATTRIBUTES + ('string',)))
121    font_face_name = TagProp('font-face-name', set(CORE_ATTRIBUTES + ('name',)))
122    font_face_src = TagProp('font-face-src', set(CORE_ATTRIBUTES))
123    font_face_uri = TagProp('font-face-uri', set(CORE_ATTRIBUTES + XLINK_ATTRIBUTES + ('xlink:href',)))
124    foreignObject = TagProp('foreignObject', set(
125        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
126        ('class' + 'style', 'externalResourcesRequired', 'transform', 'x', 'y', 'width', 'height')))
127    g = TagProp('g', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
128                         ('class', 'style', 'externalResourcesRequired', 'transform')))
129    glyph = TagProp('glyph', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + (
130        'class', 'style', 'd', 'horiz-adv-x', 'vert-origin-x', 'vert-origin-y', 'vert-adv-y', 'unicode', 'glyph-name', 'orientation',
131        'arabic-form', 'lang')))
132    glyphRef = TagProp('glyphRef', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
133                                       ('class', 'style', 'x', 'y', 'dx', 'dy', 'glyphRef', 'format', 'xlink:href')))
134    hkern = TagProp('hkern', set(CORE_ATTRIBUTES + ('u1', 'g1', 'u2', 'g2', 'k')))
135    image = TagProp('image', set(
136        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + XLINK_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
137        ('class', 'style', 'externalResourcesRequired', 'transform', 'x', 'y', 'width', 'height', 'xlink:href', 'preserveAspectRatio')))
138    line = TagProp('line', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES +
139                               ('class', 'style', 'externalResourcesRequired', 'transform', 'x1', 'x2', 'y1', 'y2')))
140    linearGradient = TagProp('linearGradient', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
141                                                   ('class', 'style', 'externalResourcesRequired', 'gradientUnits', 'gradientTransform',
142                                                    'x1', 'y1', 'x2', 'y2', 'spreadMethod', 'xlink:href')))
143    marker = TagProp('marker', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
144                                   ('class', 'style', 'externalResourcesRequired', 'viewBox', 'preserveAspectRatio', 'transform',
145                                    'markerUnits', 'refX', 'refY', 'markerWidth', 'markerHeight', 'orient')))
146    mask = TagProp('mask', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
147                               ('class', 'style', 'externalResourcesRequired', 'maskUnits', 'maskContentUnits', 'x', 'y', 'width',
148                                'height')))
149    metadata = TagProp('metadata', set(CORE_ATTRIBUTES))
150    missing_glyph = TagProp('missing-glyph', set(
151        CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + ('class', 'style', 'd', 'horiz-adv-x', 'vert-origin-x', 'vert-origin-y', 'vert-adv-y')))
152    mpath = TagProp('mpath', set(CORE_ATTRIBUTES + XLINK_ATTRIBUTES + ('externalResourcesRequired',) + ('xlink:href',)))
153    path = TagProp('path', set(
154        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
155        ('class', 'style', 'externalResourcesRequired', 'transform', 'd', 'pathLength')))
156    pattern = TagProp('pattern', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
157                                     ('class', 'style', 'externalResourcesRequired', 'viewBox', 'patternUnits', 'patterContentUnits',
158                                      'patternTransform', 'x', 'y', 'width', 'height', 'xlink:href', 'preserveAspectRatio')))
159    polygon = TagProp('polygon', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES +
160                                     ('class', 'style', 'externalResourcesRequired', 'transform', 'points')))
161    polyline = TagProp('polyline', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES +
162                                       ('class', 'style', 'externalResourcesRequired', 'transform', 'points')))
163    radialGradient = TagProp('radialGradient', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
164                                                   ('class', 'style', 'externalResourcesRequired', 'gradientUnits', 'gradientTransform',
165                                                    'cx', 'cy', 'r', 'fx', 'fy', 'spreadMethod', 'xlink:href')))
166    rect = TagProp('rect', set(CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES +
167                               ('class', 'style', 'externalResourcesRequired', 'transform', 'x', 'y', 'width', 'height', 'rx', 'ry')))
168    script = TagProp('script', set(CORE_ATTRIBUTES + XLINK_ATTRIBUTES + ('externalResourcesRequired', 'type', 'xlink:href')))
169
170    stop = TagProp('stop', set(CORE_ATTRIBUTES + PRESENTATION_ATTRIBUTES + ('class', 'style', 'offset', 'stop-color', 'stop-opacity')))
171    style = TagProp('style', set(CORE_ATTRIBUTES + ('type', 'media', 'title')))
172    svg = TagProp('svg', set(
173        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + DOCUMENT_EVENT_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES +
174        PRESENTATION_ATTRIBUTES + ('class', 'style', 'externalResourcesRequired', 'version', 'baseProfile', 'x', 'y', 'width', 'height',
175                                   'preserveAspectRatio', 'contentScriptType', 'contentStyleType', 'viewBox')))
176    switch = TagProp('switch', set(
177        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
178        ('class', 'style', 'externalResourcesRequired', 'transform', 'allowReorder')))
179    symbol = TagProp('symbol', set(CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
180                                   ('class', 'style', 'externalResourcesRequired', 'preserveAspectRatio', 'viewBox')))
181    text = TagProp('text', set(
182        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
183        ('class', 'style', 'externalResourcesRequired', 'transform', 'x', 'y', 'dx', 'dy', 'text-anchor', 'rotate', 'textLength',
184         'lengthAdjust')))
185    textPath = TagProp('textPath', set(
186        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
187        ('class', 'style', 'externalResourcesRequired', 'startOffset', 'method', 'spacing', 'xlink:href')))
188    title = TagProp('title', set(CORE_ATTRIBUTES + ('class', 'style')))
189    tref = TagProp('tref', set(
190        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
191        ('class', 'style', 'externalResourcesRequired', 'xlink:href')))
192    tspan = TagProp('tspan', set(
193        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES +
194        ('class', 'style', 'externalResourcesRequired', 'x', 'y', 'dx', 'dy', 'rotate', 'textLength', 'lengthAdjust')))
195    use = TagProp('use', set(
196        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + GRAPHICAL_EVENT_ATTRIBUTES + PRESENTATION_ATTRIBUTES + XLINK_ATTRIBUTES +
197        ('class', 'style', 'externalResourcesRequired', 'transform', 'x', 'y', 'width', 'height', 'xlink:href')))
198    view = TagProp('view',
199                   set(CORE_ATTRIBUTES + ('externalResourcesRequired', 'viewBox', 'preserveAspectRatio', 'zoomAndPan', 'viewTarget')))
200    vkern = TagProp('vkern', set(CORE_ATTRIBUTES + ('u1', 'g1', 'u2', 'g2', 'k')))
201
202    set = TagProp('set', set(
203        CONDITIONAL_PROCESSING_ATTRIBUTES + CORE_ATTRIBUTES + ANIMATION_EVENT_ATTRIBUTES + XLINK_ATTRIBUTES +
204        ANIMATION_ATTRIBUTE_TARGET_ATTRIBUTES + ANIMATION_TIMING_ATTRIBUTES + ('externalResourcesRequired', 'to')))