This file is indexed.

/usr/lib/python2.7/dist-packages/svgwrite/data/tiny12.py is in python-svgwrite 1.1.8-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
#!/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: MIT License

from svgwrite.data.types import SVGAttribute, SVGMultiAttribute
from svgwrite.data.types import SVGElement
from svgwrite.data.typechecker import Tiny12TypeChecker as TypeChecker

empty_list = []

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

attribute_names = ['slope', 'keySplines', 'rx', 'accumulate', 'bandwidth',
                   'attributeType', 'unicode', 'nav-right', 'arabic-form',
                   'y2', 'horiz-origin-x', 'underline-position', 'zoomAndPan',
                   'cap-height', 'defaultAction', 'to', 'syncBehavior',
                   'alphabetic', 'g2', 'g1', 'panose-1', 'strikethrough-thickness',
                   'attributeName', 'bbox', 'nav-up-left', 'nav-left',
                   'restart', 'target', 'xlink:actuate', 'rotate', 'resource',
                   'd', 'syncToleranceDefault', 'initialVisibility',
                   'transformBehavior', 'nav-up-right', 'keyTimes',
                   'x', 'requiredFormats', 'nav-next', 'glyph-name',
                   'xml:lang', 'mathematical', 'observer', 'repeatDur',
                   'hanging', 'y1', 'xml:base', 'ascent', 'event',
                   'strikethrough-position', 'overlay', 'rev', 'ry',
                   'overline-thickness', 'content', 'version', 'rel',
                   'focusable', 'requiredFonts', 'nav-down-right', 'xml:id',
                   'offset', 'additive', 'underline-thickness', 'font-family',
                   'by', 'mediaTime', 'timelineBegin', 'about', 'horiz-adv-x',
                   'widths', 'k', 'requiredFeatures', 'preserveAspectRatio',
                   'contentScriptType', 'origin', 'xml:space', 'xlink:href',
                   'height', 'baseProfile', 'cy', 'cx', 'path', 'xlink:role',
                   'from', 'u1', 'transform', 'units-per-em', 'u2', 'width',
                   'handler', 'font-variant', 'x-height', 'dur', 'xlink:arcrole',
                   'type', 'focusHighlight', 'mediaCharacterEncoding',
                   'xlink:title', 'editable', 'stemv', 'systemLanguage',
                   'x2', 'x1', 'ideographic', 'xlink:show', 'overline-position',
                   'syncTolerance', 'gradientUnits', 'r', 'values', 'typeof',
                   'mediaContentEncodings', 'property', 'requiredExtensions',
                   'repeatCount', 'ev:event', 'nav-down', 'mediaSize', 'pathLength',
                   'syncMaster', 'font-style', 'fill', 'end', 'descent',
                   'calcMode', 'min', 'stemh', 'id', 'unicode-range',
                   'nav-up', 'font-stretch', 'role', 'font-weight', 'begin',
                   'xlink:type', 'syncBehaviorDefault', 'max', 'snapshotTime',
                   'playbackOrder', 'keyPoints', 'nav-prev', 'propagate',
                   'phase', 'externalResourcesRequired', 'nav-down-left',
                   'class', 'lang', 'datatype', 'viewBox', 'points',
                   'accent-height', 'y']
property_names = ['stroke-linejoin', 'font-size', 'text-rendering', 'color-rendering',
                  'fill-opacity', 'color', 'shape-rendering', 'solid-color', 'stroke',
                  'stroke-linecap', 'vector-effect', 'stroke-width', 'font-style',
                  'fill', 'solid-opacity', 'fill-rule', 'viewport-fill-opacity',
                  'display-align', 'buffered-rendering', 'stroke-miterlimit',
                  'font-variant', 'stop-opacity', 'font-weight', 'opacity', 'direction',
                  'audio-level', 'visibility', 'unicode-bidi', 'line-increment',
                  'image-rendering', 'font-family', 'viewport-fill', 'text-align',
                  'stroke-opacity', 'stroke-dashoffset', 'text-anchor', 'stop-color',
                  'pointer-events', 'stroke-dasharray', 'display']
media_group_names = ['audio-level', 'buffered-rendering', 'display', 'image-rendering',
                     'pointer-events', 'shape-rendering', 'text-rendering',
                     'viewport-fill', 'viewport-fill-opacity', 'visibility']

elements = {
    'a': SVGElement('a',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'target', 'transform', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['likeparent', 'defs', 'text', 'g', 'textArea', 'svg']),

    'animate': SVGElement('animate',
    attributes=['about', 'accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'class', 'content', 'datatype', 'dur', 'end', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'systemLanguage', 'to', 'typeof', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'handler', 'metadata', 'switch', 'title']),

    'animateColor': SVGElement('animateColor',
    attributes=['about', 'accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'class', 'content', 'datatype', 'dur', 'end', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'systemLanguage', 'to', 'typeof', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'handler', 'metadata', 'switch', 'title']),

    'animateMotion': SVGElement('animateMotion',
    attributes=['about', 'accumulate', 'additive', 'begin', 'by', 'calcMode', 'class', 'content', 'datatype', 'dur', 'end', 'fill', 'from', 'id', 'keyPoints', 'keySplines', 'keyTimes', 'max', 'min', 'origin', 'path', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'rotate', 'systemLanguage', 'to', 'typeof', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'handler', 'metadata', 'mpath', 'switch', 'title']),

    'animateTransform': SVGElement('animateTransform',
    attributes=['about', 'accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'class', 'content', 'datatype', 'dur', 'end', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'systemLanguage', 'to', 'type', 'typeof', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'handler', 'metadata', 'switch', 'title']),

    'animation': SVGElement('animation',
    attributes=['about', 'begin', 'class', 'content', 'datatype', 'dur', 'end', 'externalResourcesRequired', 'fill', 'focusHighlight', 'focusable', 'height', 'id', 'initialVisibility', 'max', 'min', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'preserveAspectRatio', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'syncBehavior', 'syncMaster', 'syncTolerance', 'systemLanguage', 'transform', 'typeof', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=media_group_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'audio': SVGElement('audio',
    attributes=['about', 'begin', 'class', 'content', 'datatype', 'dur', 'end', 'externalResourcesRequired', 'fill', 'id', 'max', 'min', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'syncBehavior', 'syncMaster', 'syncTolerance', 'systemLanguage', 'type', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=media_group_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'circle': SVGElement('circle',
    attributes=['about', 'class', 'content', 'cx', 'cy', 'datatype', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'r', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'defs': SVGElement('defs',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['a', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'animation', 'audio', 'circle', 'defs', 'desc', 'discard', 'ellipse', 'font', 'font-face', 'foreignObject', 'g', 'handler', 'image', 'line', 'linearGradient', 'listener', 'metadata', 'path', 'polygon', 'polyline', 'prefetch', 'radialGradient', 'rect', 'script', 'set', 'solidColor', 'switch', 'text', 'textArea', 'title', 'use', 'video']),

    'desc': SVGElement('desc',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=media_group_names,
    children=empty_list),

    'discard': SVGElement('discard',
    attributes=['about', 'begin', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'handler', 'metadata', 'switch', 'title']),

    'ellipse': SVGElement('ellipse',
    attributes=['about', 'class', 'content', 'cx', 'cy', 'datatype', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'rx', 'ry', 'systemLanguage', 'transform', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'font': SVGElement('font',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'horiz-adv-x', 'horiz-origin-x', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'font-face', 'glyph', 'hkern', 'metadata', 'missing-glyph', 'switch', 'title']),

    'font-face': SVGElement('font-face',
    attributes=['about', 'accent-height', 'alphabetic', 'ascent', 'bbox', 'cap-height', 'class', 'content', 'datatype', 'descent', 'externalResourcesRequired', 'font-family', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'hanging', 'id', 'ideographic', 'mathematical', 'overline-position', 'overline-thickness', 'panose-1', 'property', 'rel', 'resource', 'rev', 'role', 'slope', 'stemh', 'stemv', 'strikethrough-position', 'strikethrough-thickness', 'typeof', 'underline-position', 'underline-thickness', 'unicode-range', 'units-per-em', 'widths', 'x-height', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'font-face-src', 'metadata', 'switch', 'title']),

    'font-face-src': SVGElement('font-face-src',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'font-face-uri', 'metadata', 'switch', 'title']),

    'font-face-uri': SVGElement('font-face-uri',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'foreignObject': SVGElement('foreignObject',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'focusHighlight', 'focusable', 'height', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=property_names,
    children=['desc', 'metadata', 'svg', 'switch', 'title']),

    'g': SVGElement('g',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['a', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'animation', 'audio', 'circle', 'defs', 'desc', 'discard', 'ellipse', 'font', 'font-face', 'foreignObject', 'g', 'handler', 'image', 'line', 'linearGradient', 'listener', 'metadata', 'path', 'polygon', 'polyline', 'prefetch', 'radialGradient', 'rect', 'script', 'set', 'solidColor', 'switch', 'text', 'textArea', 'title', 'use', 'video']),

    'glyph': SVGElement('glyph',
    attributes=['about', 'arabic-form', 'class', 'content', 'd', 'datatype', 'glyph-name', 'horiz-adv-x', 'id', 'lang', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'unicode', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'handler': SVGElement('handler',
    attributes=['about', 'class', 'content', 'datatype', 'ev:event', 'externalResourcesRequired', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'type', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'hkern': SVGElement('hkern',
    attributes=['about', 'class', 'content', 'datatype', 'g1', 'g2', 'id', 'k', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'u1', 'u2', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'image': SVGElement('image',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'focusHighlight', 'focusable', 'height', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'opacity', 'preserveAspectRatio', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'type', 'typeof', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=media_group_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'line': SVGElement('line',
    attributes=['about', 'class', 'content', 'datatype', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'x1', 'x2', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y1', 'y2'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'linearGradient': SVGElement('linearGradient',
    attributes=['about', 'class', 'content', 'datatype', 'gradientUnits', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'x1', 'x2', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y1', 'y2'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'metadata', 'set', 'stop', 'switch', 'title']),

    'listener': SVGElement('listener',
    attributes=['about', 'class', 'content', 'datatype', 'defaultAction', 'event', 'handler', 'id', 'observer', 'phase', 'propagate', 'property', 'rel', 'resource', 'rev', 'role', 'target', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=empty_list),

    'metadata': SVGElement('metadata',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=media_group_names,
    children=empty_list),

    'missing-glyph': SVGElement('missing-glyph',
    attributes=['about', 'class', 'content', 'd', 'datatype', 'horiz-adv-x', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'mpath': SVGElement('mpath',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'path': SVGElement('path',
    attributes=['about', 'class', 'content', 'd', 'datatype', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'pathLength', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'polygon': SVGElement('polygon',
    attributes=['about', 'class', 'content', 'datatype', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'points', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'polyline': SVGElement('polyline',
    attributes=['about', 'class', 'content', 'datatype', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'points', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'prefetch': SVGElement('prefetch',
    attributes=['about', 'bandwidth', 'class', 'content', 'datatype', 'id', 'mediaCharacterEncoding', 'mediaContentEncodings', 'mediaSize', 'mediaTime', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'radialGradient': SVGElement('radialGradient',
    attributes=['about', 'class', 'content', 'cx', 'cy', 'datatype', 'gradientUnits', 'id', 'property', 'r', 'rel', 'resource', 'rev', 'role', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'metadata', 'set', 'stop', 'switch', 'title']),

    'rect': SVGElement('rect',
    attributes=['about', 'class', 'content', 'datatype', 'focusHighlight', 'focusable', 'height', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'rx', 'ry', 'systemLanguage', 'transform', 'typeof', 'width', 'x', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'script': SVGElement('script',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'type', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'metadata', 'switch', 'title']),

    'set': SVGElement('set',
    attributes=['about', 'attributeName', 'attributeType', 'begin', 'class', 'content', 'datatype', 'dur', 'end', 'fill', 'id', 'max', 'min', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'systemLanguage', 'to', 'typeof', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=['desc', 'handler', 'metadata', 'switch', 'title']),

    'solidColor': SVGElement('solidColor',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'stop': SVGElement('stop',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'offset', 'property', 'rel', 'resource', 'rev', 'role', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'metadata', 'set', 'switch', 'title']),

    'svg': SVGElement('svg',
    attributes=['about', 'baseProfile', 'class', 'content', 'contentScriptType', 'datatype', 'externalResourcesRequired', 'focusHighlight', 'focusable', 'height', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'playbackOrder', 'preserveAspectRatio', 'property', 'rel', 'resource', 'rev', 'role', 'snapshotTime', 'syncBehaviorDefault', 'syncToleranceDefault', 'timelineBegin', 'typeof', 'version', 'viewBox', 'width', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'xmlns:ev', 'zoomAndPan'],
    properties=property_names,
    children=['a', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'animation', 'audio', 'circle', 'defs', 'desc', 'discard', 'ellipse', 'font', 'font-face', 'foreignObject', 'g', 'handler', 'image', 'line', 'linearGradient', 'listener', 'metadata', 'path', 'polygon', 'polyline', 'prefetch', 'radialGradient', 'rect', 'script', 'set', 'solidColor', 'switch', 'text', 'textArea', 'title', 'use', 'video']),

    'switch': SVGElement('switch',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['likeparent', 'set', 'textArea', 'text', 'image', 'missing-glyph', 'font-face', 'video', 'path', 'animate', 'font', 'ellipse', 'glyph', 'use', 'font-face-src', 'polygon', 'script', 'handler', 'circle', 'radialGradient', 'prefetch', 'defs', 'mpath', 'stop', 'animateMotion', 'animateColor', 'discard', 'solidColor', 'hkern', 'line', 'animation', 'rect', 'g', 'svg', 'animateTransform', 'linearGradient', 'font-face-uri', 'foreignObject', 'polyline', 'audio']),

    'tbreak': SVGElement('tbreak',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=empty_list,
    children=empty_list),

    'text': SVGElement('text',
    attributes=['about', 'class', 'content', 'datatype', 'editable', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'rotate', 'systemLanguage', 'transform', 'typeof', 'x', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=property_names,
    children=['a', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title', 'tspan']),

    'textArea': SVGElement('textArea',
    attributes=['about', 'class', 'content', 'datatype', 'editable', 'focusHighlight', 'focusable', 'height', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'width', 'x', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=property_names,
    children=['a', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'tbreak', 'title', 'tspan']),

    'title': SVGElement('title',
    attributes=['about', 'class', 'content', 'datatype', 'id', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=media_group_names,
    children=empty_list),

    'tspan': SVGElement('tspan',
    attributes=['about', 'class', 'content', 'datatype', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'typeof', 'xml:base', 'xml:id', 'xml:lang', 'xml:space'],
    properties=property_names,
    children=['likeparent', 'text', 'textArea']),

    'use': SVGElement('use',
    attributes=['about', 'class', 'content', 'datatype', 'externalResourcesRequired', 'focusHighlight', 'focusable', 'id', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'property', 'rel', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'rev', 'role', 'systemLanguage', 'transform', 'typeof', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=property_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),

    'video': SVGElement('video',
    attributes=['about', 'begin', 'class', 'content', 'datatype', 'dur', 'end', 'externalResourcesRequired', 'fill', 'focusHighlight', 'focusable', 'height', 'id', 'initialVisibility', 'max', 'min', 'nav-down', 'nav-down-left', 'nav-down-right', 'nav-left', 'nav-next', 'nav-prev', 'nav-right', 'nav-up', 'nav-up-left', 'nav-up-right', 'overlay', 'preserveAspectRatio', 'property', 'rel', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'requiredFonts', 'requiredFormats', 'resource', 'restart', 'rev', 'role', 'syncBehavior', 'syncMaster', 'syncTolerance', 'systemLanguage', 'transform', 'transformBehavior', 'type', 'typeof', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:id', 'xml:lang', 'xml:space', 'y'],
    properties=media_group_names,
    children=['animate', 'animateColor', 'animateMotion', 'animateTransform', 'desc', 'discard', 'handler', 'metadata', 'set', 'switch', 'title']),
}