UNPKG

58.4 kBJavaScriptView Raw
1'use strict';
2
3// http://www.w3.org/TR/SVG11/intro.html#Definitions
4exports.elemsGroups = {
5 animation: ['animate', 'animateColor', 'animateMotion', 'animateTransform', 'set'],
6 descriptive: ['desc', 'metadata', 'title'],
7 shape: ['circle', 'ellipse', 'line', 'path', 'polygon', 'polyline', 'rect'],
8 structural: ['defs', 'g', 'svg', 'symbol', 'use'],
9 paintServer: ['solidColor', 'linearGradient', 'radialGradient', 'meshGradient', 'pattern', 'hatch'],
10 nonRendering: ['linearGradient', 'radialGradient', 'pattern', 'clipPath', 'mask', 'marker', 'symbol', 'filter', 'solidColor'],
11 container: ['a', 'defs', 'g', 'marker', 'mask', 'missing-glyph', 'pattern', 'svg', 'switch', 'symbol', 'foreignObject'],
12 textContent: ['altGlyph', 'altGlyphDef', 'altGlyphItem', 'glyph', 'glyphRef', 'textPath', 'text', 'tref', 'tspan'],
13 textContentChild: ['altGlyph', 'textPath', 'tref', 'tspan'],
14 lightSource: ['feDiffuseLighting', 'feSpecularLighting', 'feDistantLight', 'fePointLight', 'feSpotLight'],
15 filterPrimitive: ['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feImage', 'feMerge', 'feMorphology', 'feOffset', 'feSpecularLighting', 'feTile', 'feTurbulence']
16};
17
18exports.pathElems = ['path', 'glyph', 'missing-glyph'];
19
20// http://www.w3.org/TR/SVG11/intro.html#Definitions
21exports.attrsGroups = {
22 animationAddition: ['additive', 'accumulate'],
23 animationAttributeTarget: ['attributeType', 'attributeName'],
24 animationEvent: ['onbegin', 'onend', 'onrepeat', 'onload'],
25 animationTiming: ['begin', 'dur', 'end', 'min', 'max', 'restart', 'repeatCount', 'repeatDur', 'fill'],
26 animationValue: ['calcMode', 'values', 'keyTimes', 'keySplines', 'from', 'to', 'by'],
27 conditionalProcessing: ['requiredFeatures', 'requiredExtensions', 'systemLanguage'],
28 core: ['id', 'tabindex', 'xml:base', 'xml:lang', 'xml:space'],
29 graphicalEvent: ['onfocusin', 'onfocusout', 'onactivate', 'onclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout', 'onload'],
30 presentation: [
31 'alignment-baseline',
32 'baseline-shift',
33 'clip',
34 'clip-path',
35 'clip-rule',
36 'color',
37 'color-interpolation',
38 'color-interpolation-filters',
39 'color-profile',
40 'color-rendering',
41 'cursor',
42 'direction',
43 'display',
44 'dominant-baseline',
45 'enable-background',
46 'fill',
47 'fill-opacity',
48 'fill-rule',
49 'filter',
50 'flood-color',
51 'flood-opacity',
52 'font-family',
53 'font-size',
54 'font-size-adjust',
55 'font-stretch',
56 'font-style',
57 'font-variant',
58 'font-weight',
59 'glyph-orientation-horizontal',
60 'glyph-orientation-vertical',
61 'image-rendering',
62 'letter-spacing',
63 'lighting-color',
64 'marker-end',
65 'marker-mid',
66 'marker-start',
67 'mask',
68 'opacity',
69 'overflow',
70 'paint-order',
71 'pointer-events',
72 'shape-rendering',
73 'stop-color',
74 'stop-opacity',
75 'stroke',
76 'stroke-dasharray',
77 'stroke-dashoffset',
78 'stroke-linecap',
79 'stroke-linejoin',
80 'stroke-miterlimit',
81 'stroke-opacity',
82 'stroke-width',
83 'text-anchor',
84 'text-decoration',
85 'text-overflow',
86 'text-rendering',
87 'transform',
88 'unicode-bidi',
89 'vector-effect',
90 'visibility',
91 'word-spacing',
92 'writing-mode'
93 ],
94 xlink: ['xlink:href', 'xlink:show', 'xlink:actuate', 'xlink:type', 'xlink:role', 'xlink:arcrole', 'xlink:title'],
95 documentEvent: ['onunload', 'onabort', 'onerror', 'onresize', 'onscroll', 'onzoom'],
96 filterPrimitive: ['x', 'y', 'width', 'height', 'result'],
97 transferFunction: ['type', 'tableValues', 'slope', 'intercept', 'amplitude', 'exponent', 'offset']
98};
99
100exports.attrsGroupsDefaults = {
101 core: {'xml:space': 'preserve'},
102 filterPrimitive: {x: '0', y: '0', width: '100%', height: '100%'},
103 presentation: {
104 clip: 'auto',
105 'clip-path': 'none',
106 'clip-rule': 'nonzero',
107 mask: 'none',
108 opacity: '1',
109 'stop-color': '#000',
110 'stop-opacity': '1',
111 'fill-opacity': '1',
112 'fill-rule': 'nonzero',
113 fill: '#000',
114 stroke: 'none',
115 'stroke-width': '1',
116 'stroke-linecap': 'butt',
117 'stroke-linejoin': 'miter',
118 'stroke-miterlimit': '4',
119 'stroke-dasharray': 'none',
120 'stroke-dashoffset': '0',
121 'stroke-opacity': '1',
122 'paint-order': 'normal',
123 'vector-effect': 'none',
124 display: 'inline',
125 visibility: 'visible',
126 'marker-start': 'none',
127 'marker-mid': 'none',
128 'marker-end': 'none',
129 'color-interpolation': 'sRGB',
130 'color-interpolation-filters': 'linearRGB',
131 'color-rendering': 'auto',
132 'shape-rendering': 'auto',
133 'text-rendering': 'auto',
134 'image-rendering': 'auto',
135 'font-style': 'normal',
136 'font-variant': 'normal',
137 'font-weight': 'normal',
138 'font-stretch': 'normal',
139 'font-size': 'medium',
140 'font-size-adjust': 'none',
141 kerning: 'auto',
142 'letter-spacing': 'normal',
143 'word-spacing': 'normal',
144 'text-decoration': 'none',
145 'text-anchor': 'start',
146 'text-overflow': 'clip',
147 'writing-mode': 'lr-tb',
148 'glyph-orientation-vertical': 'auto',
149 'glyph-orientation-horizontal': '0deg',
150 direction: 'ltr',
151 'unicode-bidi': 'normal',
152 'dominant-baseline': 'auto',
153 'alignment-baseline': 'baseline',
154 'baseline-shift': 'baseline'
155 },
156 transferFunction: {slope: '1', intercept: '0', amplitude: '1', exponent: '1', offset: '0'}
157};
158
159// http://www.w3.org/TR/SVG11/eltindex.html
160exports.elems = {
161 a: {
162 attrsGroups: [
163 'conditionalProcessing',
164 'core',
165 'graphicalEvent',
166 'presentation',
167 'xlink'
168 ],
169 attrs: [
170 'class',
171 'style',
172 'externalResourcesRequired',
173 'transform',
174 'target'
175 ],
176 defaults: {
177 target: '_self'
178 },
179 contentGroups: [
180 'animation',
181 'descriptive',
182 'shape',
183 'structural',
184 'paintServer'
185 ],
186 content: [
187 'a',
188 'altGlyphDef',
189 'clipPath',
190 'color-profile',
191 'cursor',
192 'filter',
193 'font',
194 'font-face',
195 'foreignObject',
196 'image',
197 'marker',
198 'mask',
199 'pattern',
200 'script',
201 'style',
202 'switch',
203 'text',
204 'view'
205 ]
206 },
207 altGlyph: {
208 attrsGroups: [
209 'conditionalProcessing',
210 'core',
211 'graphicalEvent',
212 'presentation',
213 'xlink'
214 ],
215 attrs: [
216 'class',
217 'style',
218 'externalResourcesRequired',
219 'x',
220 'y',
221 'dx',
222 'dy',
223 'glyphRef',
224 'format',
225 'rotate'
226 ]
227 },
228 altGlyphDef: {
229 attrsGroups: [
230 'core'
231 ],
232 content: [
233 'glyphRef'
234 ]
235 },
236 altGlyphItem: {
237 attrsGroups: [
238 'core'
239 ],
240 content: [
241 'glyphRef',
242 'altGlyphItem'
243 ]
244 },
245 animate: {
246 attrsGroups: [
247 'conditionalProcessing',
248 'core',
249 'animationAddition',
250 'animationAttributeTarget',
251 'animationEvent',
252 'animationTiming',
253 'animationValue',
254 'presentation',
255 'xlink'
256 ],
257 attrs: [
258 'externalResourcesRequired'
259 ],
260 contentGroups: [
261 'descriptive'
262 ]
263 },
264 animateColor: {
265 attrsGroups: [
266 'conditionalProcessing',
267 'core',
268 'animationEvent',
269 'xlink',
270 'animationAttributeTarget',
271 'animationTiming',
272 'animationValue',
273 'animationAddition',
274 'presentation'
275 ],
276 attrs: [
277 'externalResourcesRequired'
278 ],
279 contentGroups: [
280 'descriptive'
281 ]
282 },
283 animateMotion: {
284 attrsGroups: [
285 'conditionalProcessing',
286 'core',
287 'animationEvent',
288 'xlink',
289 'animationTiming',
290 'animationValue',
291 'animationAddition'
292 ],
293 attrs: [
294 'externalResourcesRequired',
295 'path',
296 'keyPoints',
297 'rotate',
298 'origin'
299 ],
300 defaults: {
301 'rotate': '0'
302 },
303 contentGroups: [
304 'descriptive'
305 ],
306 content: [
307 'mpath'
308 ]
309 },
310 animateTransform: {
311 attrsGroups: [
312 'conditionalProcessing',
313 'core',
314 'animationEvent',
315 'xlink',
316 'animationAttributeTarget',
317 'animationTiming',
318 'animationValue',
319 'animationAddition'
320 ],
321 attrs: [
322 'externalResourcesRequired',
323 'type'
324 ],
325 contentGroups: [
326 'descriptive'
327 ]
328 },
329 circle: {
330 attrsGroups: [
331 'conditionalProcessing',
332 'core',
333 'graphicalEvent',
334 'presentation'
335 ],
336 attrs: [
337 'class',
338 'style',
339 'externalResourcesRequired',
340 'transform',
341 'cx',
342 'cy',
343 'r'
344 ],
345 defaults: {
346 cx: '0',
347 cy: '0'
348 },
349 contentGroups: [
350 'animation',
351 'descriptive'
352 ]
353 },
354 clipPath: {
355 attrsGroups: [
356 'conditionalProcessing',
357 'core',
358 'presentation'
359 ],
360 attrs: [
361 'class',
362 'style',
363 'externalResourcesRequired',
364 'transform',
365 'clipPathUnits'
366 ],
367 defaults: {
368 clipPathUnits: 'userSpaceOnUse'
369 },
370 contentGroups: [
371 'animation',
372 'descriptive',
373 'shape'
374 ],
375 content: [
376 'text',
377 'use'
378 ]
379 },
380 'color-profile': {
381 attrsGroups: [
382 'core',
383 'xlink'
384 ],
385 attrs: [
386 'local',
387 'name',
388 'rendering-intent'
389 ],
390 defaults: {
391 name: 'sRGB',
392 'rendering-intent': 'auto'
393 },
394 contentGroups: [
395 'descriptive'
396 ]
397 },
398 cursor: {
399 attrsGroups: [
400 'core',
401 'conditionalProcessing',
402 'xlink'
403 ],
404 attrs: [
405 'externalResourcesRequired',
406 'x',
407 'y'
408 ],
409 defaults: {
410 x: '0',
411 y: '0'
412 },
413 contentGroups: [
414 'descriptive'
415 ]
416 },
417 defs: {
418 attrsGroups: [
419 'conditionalProcessing',
420 'core',
421 'graphicalEvent',
422 'presentation'
423 ],
424 attrs: [
425 'class',
426 'style',
427 'externalResourcesRequired',
428 'transform'
429 ],
430 contentGroups: [
431 'animation',
432 'descriptive',
433 'shape',
434 'structural',
435 'paintServer'
436 ],
437 content: [
438 'a',
439 'altGlyphDef',
440 'clipPath',
441 'color-profile',
442 'cursor',
443 'filter',
444 'font',
445 'font-face',
446 'foreignObject',
447 'image',
448 'marker',
449 'mask',
450 'pattern',
451 'script',
452 'style',
453 'switch',
454 'text',
455 'view'
456 ]
457 },
458 desc: {
459 attrsGroups: [
460 'core'
461 ],
462 attrs: [
463 'class',
464 'style'
465 ]
466 },
467 ellipse: {
468 attrsGroups: [
469 'conditionalProcessing',
470 'core',
471 'graphicalEvent',
472 'presentation'
473 ],
474 attrs: [
475 'class',
476 'style',
477 'externalResourcesRequired',
478 'transform',
479 'cx',
480 'cy',
481 'rx',
482 'ry'
483 ],
484 defaults: {
485 cx: '0',
486 cy: '0'
487 },
488 contentGroups: [
489 'animation',
490 'descriptive'
491 ]
492 },
493 feBlend: {
494 attrsGroups: [
495 'core',
496 'presentation',
497 'filterPrimitive'
498 ],
499 attrs: [
500 'class',
501 'style',
502 // TODO: in - 'If no value is provided and this is the first filter primitive,
503 // then this filter primitive will use SourceGraphic as its input'
504 'in',
505 'in2',
506 'mode'
507 ],
508 defaults: {
509 mode: 'normal'
510 },
511 content: [
512 'animate',
513 'set'
514 ]
515 },
516 feColorMatrix: {
517 attrsGroups: [
518 'core',
519 'presentation',
520 'filterPrimitive'
521 ],
522 attrs: [
523 'class',
524 'style',
525 'in',
526 'type',
527 'values'
528 ],
529 defaults: {
530 type: 'matrix'
531 },
532 content: [
533 'animate',
534 'set'
535 ]
536 },
537 feComponentTransfer: {
538 attrsGroups: [
539 'core',
540 'presentation',
541 'filterPrimitive'
542 ],
543 attrs: [
544 'class',
545 'style',
546 'in'
547 ],
548 content: [
549 'feFuncA',
550 'feFuncB',
551 'feFuncG',
552 'feFuncR'
553 ]
554 },
555 feComposite: {
556 attrsGroups: [
557 'core',
558 'presentation',
559 'filterPrimitive'
560 ],
561 attrs: [
562 'class',
563 'style',
564 'in',
565 'in2',
566 'operator',
567 'k1',
568 'k2',
569 'k3',
570 'k4'
571 ],
572 defaults: {
573 operator: 'over',
574 k1: '0',
575 k2: '0',
576 k3: '0',
577 k4: '0'
578 },
579 content: [
580 'animate',
581 'set'
582 ]
583 },
584 feConvolveMatrix: {
585 attrsGroups: [
586 'core',
587 'presentation',
588 'filterPrimitive'
589 ],
590 attrs: [
591 'class',
592 'style',
593 'in',
594 'order',
595 'kernelMatrix',
596 // TODO: divisor - 'The default value is the sum of all values in kernelMatrix,
597 // with the exception that if the sum is zero, then the divisor is set to 1'
598 'divisor',
599 'bias',
600 // TODO: targetX - 'By default, the convolution matrix is centered in X over each
601 // pixel of the input image (i.e., targetX = floor ( orderX / 2 ))'
602 'targetX',
603 'targetY',
604 'edgeMode',
605 // TODO: kernelUnitLength - 'The first number is the <dx> value. The second number
606 // is the <dy> value. If the <dy> value is not specified, it defaults to the same value as <dx>'
607 'kernelUnitLength',
608 'preserveAlpha'
609 ],
610 defaults: {
611 order: '3',
612 bias: '0',
613 edgeMode: 'duplicate',
614 preserveAlpha: 'false'
615 },
616 content: [
617 'animate',
618 'set'
619 ]
620 },
621 feDiffuseLighting: {
622 attrsGroups: [
623 'core',
624 'presentation',
625 'filterPrimitive'
626 ],
627 attrs: [
628 'class',
629 'style',
630 'in',
631 'surfaceScale',
632 'diffuseConstant',
633 'kernelUnitLength'
634 ],
635 defaults: {
636 surfaceScale: '1',
637 diffuseConstant: '1'
638 },
639 contentGroups: [
640 'descriptive'
641 ],
642 content: [
643 // TODO: 'exactly one light source element, in any order'
644 'feDistantLight',
645 'fePointLight',
646 'feSpotLight'
647 ]
648 },
649 feDisplacementMap: {
650 attrsGroups: [
651 'core',
652 'presentation',
653 'filterPrimitive'
654 ],
655 attrs: [
656 'class',
657 'style',
658 'in',
659 'in2',
660 'scale',
661 'xChannelSelector',
662 'yChannelSelector'
663 ],
664 defaults: {
665 scale: '0',
666 xChannelSelector: 'A',
667 yChannelSelector: 'A'
668 },
669 content: [
670 'animate',
671 'set'
672 ]
673 },
674 feDistantLight: {
675 attrsGroups: [
676 'core'
677 ],
678 attrs: [
679 'azimuth',
680 'elevation'
681 ],
682 defaults: {
683 azimuth: '0',
684 elevation: '0'
685 },
686 content: [
687 'animate',
688 'set'
689 ]
690 },
691 feFlood: {
692 attrsGroups: [
693 'core',
694 'presentation',
695 'filterPrimitive'
696 ],
697 attrs: [
698 'class',
699 'style'
700 ],
701 content: [
702 'animate',
703 'animateColor',
704 'set'
705 ]
706 },
707 feFuncA: {
708 attrsGroups: [
709 'core',
710 'transferFunction'
711 ],
712 content: [
713 'set',
714 'animate'
715 ]
716 },
717 feFuncB: {
718 attrsGroups: [
719 'core',
720 'transferFunction'
721 ],
722 content: [
723 'set',
724 'animate'
725 ]
726 },
727 feFuncG: {
728 attrsGroups: [
729 'core',
730 'transferFunction'
731 ],
732 content: [
733 'set',
734 'animate'
735 ]
736 },
737 feFuncR: {
738 attrsGroups: [
739 'core',
740 'transferFunction'
741 ],
742 content: [
743 'set',
744 'animate'
745 ]
746 },
747 feGaussianBlur: {
748 attrsGroups: [
749 'core',
750 'presentation',
751 'filterPrimitive'
752 ],
753 attrs: [
754 'class',
755 'style',
756 'in',
757 'stdDeviation'
758 ],
759 defaults: {
760 stdDeviation: '0'
761 },
762 content: [
763 'set',
764 'animate'
765 ]
766 },
767 feImage: {
768 attrsGroups: [
769 'core',
770 'presentation',
771 'filterPrimitive',
772 'xlink'
773 ],
774 attrs: [
775 'class',
776 'style',
777 'externalResourcesRequired',
778 'preserveAspectRatio',
779 'href',
780 'xlink:href'
781 ],
782 defaults: {
783 preserveAspectRatio: 'xMidYMid meet'
784 },
785 content: [
786 'animate',
787 'animateTransform',
788 'set'
789 ]
790 },
791 feMerge: {
792 attrsGroups: [
793 'core',
794 'presentation',
795 'filterPrimitive'
796 ],
797 attrs: [
798 'class',
799 'style'
800 ],
801 content: [
802 'feMergeNode'
803 ]
804 },
805 feMergeNode: {
806 attrsGroups: [
807 'core'
808 ],
809 attrs: [
810 'in'
811 ],
812 content: [
813 'animate',
814 'set'
815 ]
816 },
817 feMorphology: {
818 attrsGroups: [
819 'core',
820 'presentation',
821 'filterPrimitive'
822 ],
823 attrs: [
824 'class',
825 'style',
826 'in',
827 'operator',
828 'radius'
829 ],
830 defaults: {
831 operator: 'erode',
832 radius: '0'
833 },
834 content: [
835 'animate',
836 'set'
837 ]
838 },
839 feOffset: {
840 attrsGroups: [
841 'core',
842 'presentation',
843 'filterPrimitive'
844 ],
845 attrs: [
846 'class',
847 'style',
848 'in',
849 'dx',
850 'dy'
851 ],
852 defaults: {
853 dx: '0',
854 dy: '0'
855 },
856 content: [
857 'animate',
858 'set'
859 ]
860 },
861 fePointLight: {
862 attrsGroups: [
863 'core'
864 ],
865 attrs: [
866 'x',
867 'y',
868 'z'
869 ],
870 defaults: {
871 x: '0',
872 y: '0',
873 z: '0'
874 },
875 content: [
876 'animate',
877 'set'
878 ]
879 },
880 feSpecularLighting: {
881 attrsGroups: [
882 'core',
883 'presentation',
884 'filterPrimitive'
885 ],
886 attrs: [
887 'class',
888 'style',
889 'in',
890 'surfaceScale',
891 'specularConstant',
892 'specularExponent',
893 'kernelUnitLength'
894 ],
895 defaults: {
896 surfaceScale: '1',
897 specularConstant: '1',
898 specularExponent: '1'
899 },
900 contentGroups: [
901 'descriptive',
902 // TODO: exactly one 'light source element'
903 'lightSource'
904 ]
905 },
906 feSpotLight: {
907 attrsGroups: [
908 'core'
909 ],
910 attrs: [
911 'x',
912 'y',
913 'z',
914 'pointsAtX',
915 'pointsAtY',
916 'pointsAtZ',
917 'specularExponent',
918 'limitingConeAngle'
919 ],
920 defaults: {
921 x: '0',
922 y: '0',
923 z: '0',
924 pointsAtX: '0',
925 pointsAtY: '0',
926 pointsAtZ: '0',
927 specularExponent: '1'
928 },
929 content: [
930 'animate',
931 'set'
932 ]
933 },
934 feTile: {
935 attrsGroups: [
936 'core',
937 'presentation',
938 'filterPrimitive'
939 ],
940 attrs: [
941 'class',
942 'style',
943 'in'
944 ],
945 content: [
946 'animate',
947 'set'
948 ]
949 },
950 feTurbulence: {
951 attrsGroups: [
952 'core',
953 'presentation',
954 'filterPrimitive'
955 ],
956 attrs: [
957 'class',
958 'style',
959 'baseFrequency',
960 'numOctaves',
961 'seed',
962 'stitchTiles',
963 'type'
964 ],
965 defaults: {
966 baseFrequency: '0',
967 numOctaves: '1',
968 seed: '0',
969 stitchTiles: 'noStitch',
970 type: 'turbulence'
971 },
972 content: [
973 'animate',
974 'set'
975 ]
976 },
977 filter: {
978 attrsGroups: [
979 'core',
980 'presentation',
981 'xlink'
982 ],
983 attrs: [
984 'class',
985 'style',
986 'externalResourcesRequired',
987 'x',
988 'y',
989 'width',
990 'height',
991 'filterRes',
992 'filterUnits',
993 'primitiveUnits',
994 'href',
995 'xlink:href'
996 ],
997 defaults: {
998 primitiveUnits: 'userSpaceOnUse',
999 x: '-10%',
1000 y: '-10%',
1001 width: '120%',
1002 height: '120%'
1003 },
1004 contentGroups: [
1005 'descriptive',
1006 'filterPrimitive'
1007 ],
1008 content: [
1009 'animate',
1010 'set'
1011 ]
1012 },
1013 font: {
1014 attrsGroups: [
1015 'core',
1016 'presentation'
1017 ],
1018 attrs: [
1019 'class',
1020 'style',
1021 'externalResourcesRequired',
1022 'horiz-origin-x',
1023 'horiz-origin-y',
1024 'horiz-adv-x',
1025 'vert-origin-x',
1026 'vert-origin-y',
1027 'vert-adv-y'
1028 ],
1029 defaults: {
1030 'horiz-origin-x': '0',
1031 'horiz-origin-y': '0'
1032 },
1033 contentGroups: [
1034 'descriptive'
1035 ],
1036 content: [
1037 'font-face',
1038 'glyph',
1039 'hkern',
1040 'missing-glyph',
1041 'vkern'
1042 ]
1043 },
1044 'font-face': {
1045 attrsGroups: [
1046 'core'
1047 ],
1048 attrs: [
1049 'font-family',
1050 'font-style',
1051 'font-variant',
1052 'font-weight',
1053 'font-stretch',
1054 'font-size',
1055 'unicode-range',
1056 'units-per-em',
1057 'panose-1',
1058 'stemv',
1059 'stemh',
1060 'slope',
1061 'cap-height',
1062 'x-height',
1063 'accent-height',
1064 'ascent',
1065 'descent',
1066 'widths',
1067 'bbox',
1068 'ideographic',
1069 'alphabetic',
1070 'mathematical',
1071 'hanging',
1072 'v-ideographic',
1073 'v-alphabetic',
1074 'v-mathematical',
1075 'v-hanging',
1076 'underline-position',
1077 'underline-thickness',
1078 'strikethrough-position',
1079 'strikethrough-thickness',
1080 'overline-position',
1081 'overline-thickness'
1082 ],
1083 defaults: {
1084 'font-style': 'all',
1085 'font-variant': 'normal',
1086 'font-weight': 'all',
1087 'font-stretch': 'normal',
1088 'unicode-range': 'U+0-10FFFF',
1089 'units-per-em': '1000',
1090 'panose-1': '0 0 0 0 0 0 0 0 0 0',
1091 'slope': '0'
1092 },
1093 contentGroups: [
1094 'descriptive'
1095 ],
1096 content: [
1097 // TODO: "at most one 'font-face-src' element"
1098 'font-face-src'
1099 ]
1100 },
1101 // TODO: empty content
1102 'font-face-format': {
1103 attrsGroups: [
1104 'core'
1105 ],
1106 attrs: [
1107 'string'
1108 ]
1109 },
1110 'font-face-name': {
1111 attrsGroups: [
1112 'core'
1113 ],
1114 attrs: [
1115 'name'
1116 ]
1117 },
1118 'font-face-src': {
1119 attrsGroups: [
1120 'core'
1121 ],
1122 content: [
1123 'font-face-name',
1124 'font-face-uri'
1125 ]
1126 },
1127 'font-face-uri': {
1128 attrsGroups: [
1129 'core',
1130 'xlink'
1131 ],
1132 attrs: [
1133 'href',
1134 'xlink:href'
1135 ],
1136 content: [
1137 'font-face-format'
1138 ]
1139 },
1140 foreignObject: {
1141 attrsGroups: [
1142 'core',
1143 'conditionalProcessing',
1144 'graphicalEvent',
1145 'presentation'
1146 ],
1147 attrs: [
1148 'class',
1149 'style',
1150 'externalResourcesRequired',
1151 'transform',
1152 'x',
1153 'y',
1154 'width',
1155 'height'
1156 ],
1157 defaults: {
1158 x: 0,
1159 y: 0
1160 }
1161 },
1162 g: {
1163 attrsGroups: [
1164 'conditionalProcessing',
1165 'core',
1166 'graphicalEvent',
1167 'presentation'
1168 ],
1169 attrs: [
1170 'class',
1171 'style',
1172 'externalResourcesRequired',
1173 'transform'
1174 ],
1175 contentGroups: [
1176 'animation',
1177 'descriptive',
1178 'shape',
1179 'structural',
1180 'paintServer'
1181 ],
1182 content: [
1183 'a',
1184 'altGlyphDef',
1185 'clipPath',
1186 'color-profile',
1187 'cursor',
1188 'filter',
1189 'font',
1190 'font-face',
1191 'foreignObject',
1192 'image',
1193 'marker',
1194 'mask',
1195 'pattern',
1196 'script',
1197 'style',
1198 'switch',
1199 'text',
1200 'view'
1201 ]
1202 },
1203 glyph: {
1204 attrsGroups: [
1205 'core',
1206 'presentation'
1207 ],
1208 attrs: [
1209 'class',
1210 'style',
1211 'd',
1212 'horiz-adv-x',
1213 'vert-origin-x',
1214 'vert-origin-y',
1215 'vert-adv-y',
1216 'unicode',
1217 'glyph-name',
1218 'orientation',
1219 'arabic-form',
1220 'lang'
1221 ],
1222 defaults: {
1223 'arabic-form': 'initial'
1224 },
1225 contentGroups: [
1226 'animation',
1227 'descriptive',
1228 'shape',
1229 'structural',
1230 'paintServer'
1231 ],
1232 content: [
1233 'a',
1234 'altGlyphDef',
1235 'clipPath',
1236 'color-profile',
1237 'cursor',
1238 'filter',
1239 'font',
1240 'font-face',
1241 'foreignObject',
1242 'image',
1243 'marker',
1244 'mask',
1245 'pattern',
1246 'script',
1247 'style',
1248 'switch',
1249 'text',
1250 'view'
1251 ],
1252 },
1253 glyphRef: {
1254 attrsGroups: [
1255 'core',
1256 'presentation'
1257 ],
1258 attrs: [
1259 'class',
1260 'style',
1261 'd',
1262 'horiz-adv-x',
1263 'vert-origin-x',
1264 'vert-origin-y',
1265 'vert-adv-y'
1266 ],
1267 contentGroups: [
1268 'animation',
1269 'descriptive',
1270 'shape',
1271 'structural',
1272 'paintServer'
1273 ],
1274 content: [
1275 'a',
1276 'altGlyphDef',
1277 'clipPath',
1278 'color-profile',
1279 'cursor',
1280 'filter',
1281 'font',
1282 'font-face',
1283 'foreignObject',
1284 'image',
1285 'marker',
1286 'mask',
1287 'pattern',
1288 'script',
1289 'style',
1290 'switch',
1291 'text',
1292 'view'
1293 ]
1294 },
1295 hatch: {
1296 attrsGroups: [
1297 'core',
1298 'presentation',
1299 'xlink'
1300 ],
1301 attrs: [
1302 'class',
1303 'style',
1304 'x',
1305 'y',
1306 'pitch',
1307 'rotate',
1308 'hatchUnits',
1309 'hatchContentUnits',
1310 'transform'
1311 ],
1312 defaults: {
1313 hatchUnits: 'objectBoundingBox',
1314 hatchContentUnits: 'userSpaceOnUse',
1315 x: '0',
1316 y: '0',
1317 pitch: '0',
1318 rotate: '0'
1319 },
1320 contentGroups: [
1321 'animation',
1322 'descriptive'
1323 ],
1324 content: [
1325 'hatchPath'
1326 ]
1327 },
1328 hatchPath: {
1329 attrsGroups: [
1330 'core',
1331 'presentation',
1332 'xlink'
1333 ],
1334 attrs: [
1335 'class',
1336 'style',
1337 'd',
1338 'offset'
1339 ],
1340 defaults: {
1341 offset: '0'
1342 },
1343 contentGroups: [
1344 'animation',
1345 'descriptive'
1346 ]
1347 },
1348 hkern: {
1349 attrsGroups: [
1350 'core'
1351 ],
1352 attrs: [
1353 'u1',
1354 'g1',
1355 'u2',
1356 'g2',
1357 'k'
1358 ]
1359 },
1360 image: {
1361 attrsGroups: [
1362 'core',
1363 'conditionalProcessing',
1364 'graphicalEvent',
1365 'xlink',
1366 'presentation'
1367 ],
1368 attrs: [
1369 'class',
1370 'style',
1371 'externalResourcesRequired',
1372 'preserveAspectRatio',
1373 'transform',
1374 'x',
1375 'y',
1376 'width',
1377 'height',
1378 'href',
1379 'xlink:href'
1380 ],
1381 defaults: {
1382 x: '0',
1383 y: '0',
1384 preserveAspectRatio: 'xMidYMid meet'
1385 },
1386 contentGroups: [
1387 'animation',
1388 'descriptive'
1389 ]
1390 },
1391 line: {
1392 attrsGroups: [
1393 'conditionalProcessing',
1394 'core',
1395 'graphicalEvent',
1396 'presentation'
1397 ],
1398 attrs: [
1399 'class',
1400 'style',
1401 'externalResourcesRequired',
1402 'transform',
1403 'x1',
1404 'y1',
1405 'x2',
1406 'y2'
1407 ],
1408 defaults: {
1409 x1: '0',
1410 y1: '0',
1411 x2: '0',
1412 y2: '0'
1413 },
1414 contentGroups: [
1415 'animation',
1416 'descriptive'
1417 ]
1418 },
1419 linearGradient: {
1420 attrsGroups: [
1421 'core',
1422 'presentation',
1423 'xlink'
1424 ],
1425 attrs: [
1426 'class',
1427 'style',
1428 'externalResourcesRequired',
1429 'x1',
1430 'y1',
1431 'x2',
1432 'y2',
1433 'gradientUnits',
1434 'gradientTransform',
1435 'spreadMethod',
1436 'href',
1437 'xlink:href'
1438 ],
1439 defaults: {
1440 x1: '0',
1441 y1: '0',
1442 x2: '100%',
1443 y2: '0',
1444 spreadMethod: 'pad'
1445 },
1446 contentGroups: [
1447 'descriptive'
1448 ],
1449 content: [
1450 'animate',
1451 'animateTransform',
1452 'set',
1453 'stop'
1454 ]
1455 },
1456 marker: {
1457 attrsGroups: [
1458 'core',
1459 'presentation'
1460 ],
1461 attrs: [
1462 'class',
1463 'style',
1464 'externalResourcesRequired',
1465 'viewBox',
1466 'preserveAspectRatio',
1467 'refX',
1468 'refY',
1469 'markerUnits',
1470 'markerWidth',
1471 'markerHeight',
1472 'orient'
1473 ],
1474 defaults: {
1475 markerUnits: 'strokeWidth',
1476 refX: '0',
1477 refY: '0',
1478 markerWidth: '3',
1479 markerHeight: '3'
1480 },
1481 contentGroups: [
1482 'animation',
1483 'descriptive',
1484 'shape',
1485 'structural',
1486 'paintServer'
1487 ],
1488 content: [
1489 'a',
1490 'altGlyphDef',
1491 'clipPath',
1492 'color-profile',
1493 'cursor',
1494 'filter',
1495 'font',
1496 'font-face',
1497 'foreignObject',
1498 'image',
1499 'marker',
1500 'mask',
1501 'pattern',
1502 'script',
1503 'style',
1504 'switch',
1505 'text',
1506 'view'
1507 ]
1508 },
1509 mask: {
1510 attrsGroups: [
1511 'conditionalProcessing',
1512 'core',
1513 'presentation'
1514 ],
1515 attrs: [
1516 'class',
1517 'style',
1518 'externalResourcesRequired',
1519 'x',
1520 'y',
1521 'width',
1522 'height',
1523 'maskUnits',
1524 'maskContentUnits'
1525 ],
1526 defaults: {
1527 maskUnits: 'objectBoundingBox',
1528 maskContentUnits: 'userSpaceOnUse',
1529 x: '-10%',
1530 y: '-10%',
1531 width: '120%',
1532 height: '120%'
1533 },
1534 contentGroups: [
1535 'animation',
1536 'descriptive',
1537 'shape',
1538 'structural',
1539 'paintServer'
1540 ],
1541 content: [
1542 'a',
1543 'altGlyphDef',
1544 'clipPath',
1545 'color-profile',
1546 'cursor',
1547 'filter',
1548 'font',
1549 'font-face',
1550 'foreignObject',
1551 'image',
1552 'marker',
1553 'mask',
1554 'pattern',
1555 'script',
1556 'style',
1557 'switch',
1558 'text',
1559 'view'
1560 ]
1561 },
1562 metadata: {
1563 attrsGroups: [
1564 'core'
1565 ]
1566 },
1567 'missing-glyph': {
1568 attrsGroups: [
1569 'core',
1570 'presentation'
1571 ],
1572 attrs: [
1573 'class',
1574 'style',
1575 'd',
1576 'horiz-adv-x',
1577 'vert-origin-x',
1578 'vert-origin-y',
1579 'vert-adv-y'
1580 ],
1581 contentGroups: [
1582 'animation',
1583 'descriptive',
1584 'shape',
1585 'structural',
1586 'paintServer'
1587 ],
1588 content: [
1589 'a',
1590 'altGlyphDef',
1591 'clipPath',
1592 'color-profile',
1593 'cursor',
1594 'filter',
1595 'font',
1596 'font-face',
1597 'foreignObject',
1598 'image',
1599 'marker',
1600 'mask',
1601 'pattern',
1602 'script',
1603 'style',
1604 'switch',
1605 'text',
1606 'view'
1607 ]
1608 },
1609 mpath: {
1610 attrsGroups: [
1611 'core',
1612 'xlink'
1613 ],
1614 attrs: [
1615 'externalResourcesRequired',
1616 'href',
1617 'xlink:href'
1618 ],
1619 contentGroups: [
1620 'descriptive'
1621 ]
1622 },
1623 path: {
1624 attrsGroups: [
1625 'conditionalProcessing',
1626 'core',
1627 'graphicalEvent',
1628 'presentation'
1629 ],
1630 attrs: [
1631 'class',
1632 'style',
1633 'externalResourcesRequired',
1634 'transform',
1635 'd',
1636 'pathLength'
1637 ],
1638 contentGroups: [
1639 'animation',
1640 'descriptive'
1641 ]
1642 },
1643 pattern: {
1644 attrsGroups: [
1645 'conditionalProcessing',
1646 'core',
1647 'presentation',
1648 'xlink'
1649 ],
1650 attrs: [
1651 'class',
1652 'style',
1653 'externalResourcesRequired',
1654 'viewBox',
1655 'preserveAspectRatio',
1656 'x',
1657 'y',
1658 'width',
1659 'height',
1660 'patternUnits',
1661 'patternContentUnits',
1662 'patternTransform',
1663 'href',
1664 'xlink:href'
1665 ],
1666 defaults: {
1667 patternUnits: 'objectBoundingBox',
1668 patternContentUnits: 'userSpaceOnUse',
1669 x: '0',
1670 y: '0',
1671 width: '0',
1672 height: '0',
1673 preserveAspectRatio: 'xMidYMid meet'
1674 },
1675 contentGroups: [
1676 'animation',
1677 'descriptive',
1678 'paintServer',
1679 'shape',
1680 'structural'
1681 ],
1682 content: [
1683 'a',
1684 'altGlyphDef',
1685 'clipPath',
1686 'color-profile',
1687 'cursor',
1688 'filter',
1689 'font',
1690 'font-face',
1691 'foreignObject',
1692 'image',
1693 'marker',
1694 'mask',
1695 'pattern',
1696 'script',
1697 'style',
1698 'switch',
1699 'text',
1700 'view'
1701 ]
1702 },
1703 polygon: {
1704 attrsGroups: [
1705 'conditionalProcessing',
1706 'core',
1707 'graphicalEvent',
1708 'presentation'
1709 ],
1710 attrs: [
1711 'class',
1712 'style',
1713 'externalResourcesRequired',
1714 'transform',
1715 'points'
1716 ],
1717 contentGroups: [
1718 'animation',
1719 'descriptive'
1720 ]
1721 },
1722 polyline: {
1723 attrsGroups: [
1724 'conditionalProcessing',
1725 'core',
1726 'graphicalEvent',
1727 'presentation'
1728 ],
1729 attrs: [
1730 'class',
1731 'style',
1732 'externalResourcesRequired',
1733 'transform',
1734 'points'
1735 ],
1736 contentGroups: [
1737 'animation',
1738 'descriptive'
1739 ]
1740 },
1741 radialGradient: {
1742 attrsGroups: [
1743 'core',
1744 'presentation',
1745 'xlink'
1746 ],
1747 attrs: [
1748 'class',
1749 'style',
1750 'externalResourcesRequired',
1751 'cx',
1752 'cy',
1753 'r',
1754 'fx',
1755 'fy',
1756 'fr',
1757 'gradientUnits',
1758 'gradientTransform',
1759 'spreadMethod',
1760 'href',
1761 'xlink:href'
1762 ],
1763 defaults: {
1764 gradientUnits: 'objectBoundingBox',
1765 cx: '50%',
1766 cy: '50%',
1767 r: '50%'
1768 },
1769 contentGroups: [
1770 'descriptive'
1771 ],
1772 content: [
1773 'animate',
1774 'animateTransform',
1775 'set',
1776 'stop'
1777 ]
1778 },
1779 meshGradient: {
1780 attrsGroups: [
1781 'core',
1782 'presentation',
1783 'xlink'
1784 ],
1785 attrs: [
1786 'class',
1787 'style',
1788 'x',
1789 'y',
1790 'gradientUnits',
1791 'transform'
1792 ],
1793 contentGroups: [
1794 'descriptive',
1795 'paintServer',
1796 'animation',
1797 ],
1798 content: [
1799 'meshRow'
1800 ]
1801 },
1802 meshRow: {
1803 attrsGroups: [
1804 'core',
1805 'presentation'
1806 ],
1807 attrs: [
1808 'class',
1809 'style'
1810 ],
1811 contentGroups: [
1812 'descriptive'
1813 ],
1814 content: [
1815 'meshPatch'
1816 ]
1817 },
1818 meshPatch: {
1819 attrsGroups: [
1820 'core',
1821 'presentation'
1822 ],
1823 attrs: [
1824 'class',
1825 'style'
1826 ],
1827 contentGroups: [
1828 'descriptive'
1829 ],
1830 content: [
1831 'stop'
1832 ]
1833 },
1834 rect: {
1835 attrsGroups: [
1836 'conditionalProcessing',
1837 'core',
1838 'graphicalEvent',
1839 'presentation'
1840 ],
1841 attrs: [
1842 'class',
1843 'style',
1844 'externalResourcesRequired',
1845 'transform',
1846 'x',
1847 'y',
1848 'width',
1849 'height',
1850 'rx',
1851 'ry'
1852 ],
1853 defaults: {
1854 x: '0',
1855 y: '0'
1856 },
1857 contentGroups: [
1858 'animation',
1859 'descriptive'
1860 ]
1861 },
1862 script: {
1863 attrsGroups: [
1864 'core',
1865 'xlink'
1866 ],
1867 attrs: [
1868 'externalResourcesRequired',
1869 'type',
1870 'href',
1871 'xlink:href'
1872 ]
1873 },
1874 set: {
1875 attrsGroups: [
1876 'conditionalProcessing',
1877 'core',
1878 'animation',
1879 'xlink',
1880 'animationAttributeTarget',
1881 'animationTiming',
1882 ],
1883 attrs: [
1884 'externalResourcesRequired',
1885 'to'
1886 ],
1887 contentGroups: [
1888 'descriptive'
1889 ]
1890 },
1891 solidColor: {
1892 attrsGroups: [
1893 'core',
1894 'presentation'
1895 ],
1896 attrs: [
1897 'class',
1898 'style'
1899 ],
1900 contentGroups: [
1901 'paintServer'
1902 ]
1903 },
1904 stop: {
1905 attrsGroups: [
1906 'core',
1907 'presentation'
1908 ],
1909 attrs: [
1910 'class',
1911 'style',
1912 'offset',
1913 'path'
1914 ],
1915 content: [
1916 'animate',
1917 'animateColor',
1918 'set'
1919 ]
1920 },
1921 style: {
1922 attrsGroups: [
1923 'core'
1924 ],
1925 attrs: [
1926 'type',
1927 'media',
1928 'title'
1929 ],
1930 defaults: {
1931 type: 'text/css'
1932 }
1933 },
1934 svg: {
1935 attrsGroups: [
1936 'conditionalProcessing',
1937 'core',
1938 'documentEvent',
1939 'graphicalEvent',
1940 'presentation'
1941 ],
1942 attrs: [
1943 'class',
1944 'style',
1945 'x',
1946 'y',
1947 'width',
1948 'height',
1949 'viewBox',
1950 'preserveAspectRatio',
1951 'zoomAndPan',
1952 'version',
1953 'baseProfile',
1954 'contentScriptType',
1955 'contentStyleType'
1956 ],
1957 defaults: {
1958 x: '0',
1959 y: '0',
1960 width: '100%',
1961 height: '100%',
1962 preserveAspectRatio: 'xMidYMid meet',
1963 zoomAndPan: 'magnify',
1964 version: '1.1',
1965 baseProfile: 'none',
1966 contentScriptType: 'application/ecmascript',
1967 contentStyleType: 'text/css'
1968 },
1969 contentGroups: [
1970 'animation',
1971 'descriptive',
1972 'shape',
1973 'structural',
1974 'paintServer'
1975 ],
1976 content: [
1977 'a',
1978 'altGlyphDef',
1979 'clipPath',
1980 'color-profile',
1981 'cursor',
1982 'filter',
1983 'font',
1984 'font-face',
1985 'foreignObject',
1986 'image',
1987 'marker',
1988 'mask',
1989 'pattern',
1990 'script',
1991 'style',
1992 'switch',
1993 'text',
1994 'view'
1995 ]
1996 },
1997 switch: {
1998 attrsGroups: [
1999 'conditionalProcessing',
2000 'core',
2001 'graphicalEvent',
2002 'presentation'
2003 ],
2004 attrs: [
2005 'class',
2006 'style',
2007 'externalResourcesRequired',
2008 'transform'
2009 ],
2010 contentGroups: [
2011 'animation',
2012 'descriptive',
2013 'shape'
2014 ],
2015 content: [
2016 'a',
2017 'foreignObject',
2018 'g',
2019 'image',
2020 'svg',
2021 'switch',
2022 'text',
2023 'use'
2024 ]
2025 },
2026 symbol: {
2027 attrsGroups: [
2028 'core',
2029 'graphicalEvent',
2030 'presentation'
2031 ],
2032 attrs: [
2033 'class',
2034 'style',
2035 'externalResourcesRequired',
2036 'preserveAspectRatio',
2037 'viewBox',
2038 'refX',
2039 'refY'
2040 ],
2041 defaults: {
2042 refX: 0,
2043 refY: 0
2044 },
2045 contentGroups: [
2046 'animation',
2047 'descriptive',
2048 'shape',
2049 'structural',
2050 'paintServer'
2051 ],
2052 content: [
2053 'a',
2054 'altGlyphDef',
2055 'clipPath',
2056 'color-profile',
2057 'cursor',
2058 'filter',
2059 'font',
2060 'font-face',
2061 'foreignObject',
2062 'image',
2063 'marker',
2064 'mask',
2065 'pattern',
2066 'script',
2067 'style',
2068 'switch',
2069 'text',
2070 'view'
2071 ]
2072 },
2073 text: {
2074 attrsGroups: [
2075 'conditionalProcessing',
2076 'core',
2077 'graphicalEvent',
2078 'presentation'
2079 ],
2080 attrs: [
2081 'class',
2082 'style',
2083 'externalResourcesRequired',
2084 'transform',
2085 'lengthAdjust',
2086 'x',
2087 'y',
2088 'dx',
2089 'dy',
2090 'rotate',
2091 'textLength'
2092 ],
2093 defaults: {
2094 x: '0',
2095 y: '0',
2096 lengthAdjust: 'spacing'
2097 },
2098 contentGroups: [
2099 'animation',
2100 'descriptive',
2101 'textContentChild'
2102 ],
2103 content: [
2104 'a'
2105 ]
2106 },
2107 textPath: {
2108 attrsGroups: [
2109 'conditionalProcessing',
2110 'core',
2111 'graphicalEvent',
2112 'presentation',
2113 'xlink'
2114 ],
2115 attrs: [
2116 'class',
2117 'style',
2118 'externalResourcesRequired',
2119 'href',
2120 'xlink:href',
2121 'startOffset',
2122 'method',
2123 'spacing',
2124 'd'
2125 ],
2126 defaults: {
2127 startOffset: '0',
2128 method: 'align',
2129 spacing: 'exact'
2130 },
2131 contentGroups: [
2132 'descriptive'
2133 ],
2134 content: [
2135 'a',
2136 'altGlyph',
2137 'animate',
2138 'animateColor',
2139 'set',
2140 'tref',
2141 'tspan'
2142 ]
2143 },
2144 title: {
2145 attrsGroups: [
2146 'core'
2147 ],
2148 attrs: [
2149 'class',
2150 'style'
2151 ]
2152 },
2153 tref: {
2154 attrsGroups: [
2155 'conditionalProcessing',
2156 'core',
2157 'graphicalEvent',
2158 'presentation',
2159 'xlink'
2160 ],
2161 attrs: [
2162 'class',
2163 'style',
2164 'externalResourcesRequired',
2165 'href',
2166 'xlink:href'
2167 ],
2168 contentGroups: [
2169 'descriptive'
2170 ],
2171 content: [
2172 'animate',
2173 'animateColor',
2174 'set'
2175 ]
2176 },
2177 tspan: {
2178 attrsGroups: [
2179 'conditionalProcessing',
2180 'core',
2181 'graphicalEvent',
2182 'presentation'
2183 ],
2184 attrs: [
2185 'class',
2186 'style',
2187 'externalResourcesRequired',
2188 'x',
2189 'y',
2190 'dx',
2191 'dy',
2192 'rotate',
2193 'textLength',
2194 'lengthAdjust'
2195 ],
2196 contentGroups: [
2197 'descriptive'
2198 ],
2199 content: [
2200 'a',
2201 'altGlyph',
2202 'animate',
2203 'animateColor',
2204 'set',
2205 'tref',
2206 'tspan'
2207 ]
2208 },
2209 use: {
2210 attrsGroups: [
2211 'core',
2212 'conditionalProcessing',
2213 'graphicalEvent',
2214 'presentation',
2215 'xlink'
2216 ],
2217 attrs: [
2218 'class',
2219 'style',
2220 'externalResourcesRequired',
2221 'transform',
2222 'x',
2223 'y',
2224 'width',
2225 'height',
2226 'href',
2227 'xlink:href'
2228 ],
2229 defaults: {
2230 x: '0',
2231 y: '0'
2232 },
2233 contentGroups: [
2234 'animation',
2235 'descriptive'
2236 ]
2237 },
2238 view: {
2239 attrsGroups: [
2240 'core'
2241 ],
2242 attrs: [
2243 'externalResourcesRequired',
2244 'viewBox',
2245 'preserveAspectRatio',
2246 'zoomAndPan',
2247 'viewTarget'
2248 ],
2249 contentGroups: [
2250 'descriptive'
2251 ]
2252 },
2253 vkern: {
2254 attrsGroups: [
2255 'core'
2256 ],
2257 attrs: [
2258 'u1',
2259 'g1',
2260 'u2',
2261 'g2',
2262 'k'
2263 ]
2264 }
2265};
2266
2267// http://wiki.inkscape.org/wiki/index.php/Inkscape-specific_XML_attributes
2268exports.editorNamespaces = [
2269 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd',
2270 'http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd',
2271 'http://www.inkscape.org/namespaces/inkscape',
2272 'http://www.bohemiancoding.com/sketch/ns',
2273 'http://ns.adobe.com/AdobeIllustrator/10.0/',
2274 'http://ns.adobe.com/Graphs/1.0/',
2275 'http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/',
2276 'http://ns.adobe.com/Variables/1.0/',
2277 'http://ns.adobe.com/SaveForWeb/1.0/',
2278 'http://ns.adobe.com/Extensibility/1.0/',
2279 'http://ns.adobe.com/Flows/1.0/',
2280 'http://ns.adobe.com/ImageReplacement/1.0/',
2281 'http://ns.adobe.com/GenericCustomNamespace/1.0/',
2282 'http://ns.adobe.com/XPath/1.0/',
2283 'http://schemas.microsoft.com/visio/2003/SVGExtensions/',
2284 'http://taptrix.com/vectorillustrator/svg_extensions',
2285 'http://www.figma.com/figma/ns',
2286 'http://purl.org/dc/elements/1.1/',
2287 'http://creativecommons.org/ns#',
2288 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
2289 'http://www.serif.com/',
2290 'http://www.vector.evaxdesign.sk'
2291];
2292
2293// http://www.w3.org/TR/SVG11/linking.html#processingIRI
2294exports.referencesProps = [
2295 'clip-path',
2296 'color-profile',
2297 'fill',
2298 'filter',
2299 'marker-start',
2300 'marker-mid',
2301 'marker-end',
2302 'mask',
2303 'stroke',
2304 'style'
2305];
2306
2307// http://www.w3.org/TR/SVG11/propidx.html
2308exports.inheritableAttrs = [
2309 'clip-rule',
2310 'color',
2311 'color-interpolation',
2312 'color-interpolation-filters',
2313 'color-profile',
2314 'color-rendering',
2315 'cursor',
2316 'direction',
2317 'dominant-baseline',
2318 'fill',
2319 'fill-opacity',
2320 'fill-rule',
2321 'font',
2322 'font-family',
2323 'font-size',
2324 'font-size-adjust',
2325 'font-stretch',
2326 'font-style',
2327 'font-variant',
2328 'font-weight',
2329 'glyph-orientation-horizontal',
2330 'glyph-orientation-vertical',
2331 'image-rendering',
2332 'letter-spacing',
2333 'marker',
2334 'marker-end',
2335 'marker-mid',
2336 'marker-start',
2337 'paint-order',
2338 'pointer-events',
2339 'shape-rendering',
2340 'stroke',
2341 'stroke-dasharray',
2342 'stroke-dashoffset',
2343 'stroke-linecap',
2344 'stroke-linejoin',
2345 'stroke-miterlimit',
2346 'stroke-opacity',
2347 'stroke-width',
2348 'text-anchor',
2349 'text-rendering',
2350 'transform',
2351 'visibility',
2352 'word-spacing',
2353 'writing-mode'
2354];
2355
2356exports.presentationNonInheritableGroupAttrs = [
2357 'display',
2358 'clip-path',
2359 'filter',
2360 'mask',
2361 'opacity',
2362 'text-decoration',
2363 'transform',
2364 'unicode-bidi',
2365 'visibility'
2366];
2367
2368// http://www.w3.org/TR/SVG11/single-page.html#types-ColorKeywords
2369exports.colorsNames = {
2370 'aliceblue': '#f0f8ff',
2371 'antiquewhite': '#faebd7',
2372 'aqua': '#0ff',
2373 'aquamarine': '#7fffd4',
2374 'azure': '#f0ffff',
2375 'beige': '#f5f5dc',
2376 'bisque': '#ffe4c4',
2377 'black': '#000',
2378 'blanchedalmond': '#ffebcd',
2379 'blue': '#00f',
2380 'blueviolet': '#8a2be2',
2381 'brown': '#a52a2a',
2382 'burlywood': '#deb887',
2383 'cadetblue': '#5f9ea0',
2384 'chartreuse': '#7fff00',
2385 'chocolate': '#d2691e',
2386 'coral': '#ff7f50',
2387 'cornflowerblue': '#6495ed',
2388 'cornsilk': '#fff8dc',
2389 'crimson': '#dc143c',
2390 'cyan': '#0ff',
2391 'darkblue': '#00008b',
2392 'darkcyan': '#008b8b',
2393 'darkgoldenrod': '#b8860b',
2394 'darkgray': '#a9a9a9',
2395 'darkgreen': '#006400',
2396 'darkgrey': '#a9a9a9',
2397 'darkkhaki': '#bdb76b',
2398 'darkmagenta': '#8b008b',
2399 'darkolivegreen': '#556b2f',
2400 'darkorange': '#ff8c00',
2401 'darkorchid': '#9932cc',
2402 'darkred': '#8b0000',
2403 'darksalmon': '#e9967a',
2404 'darkseagreen': '#8fbc8f',
2405 'darkslateblue': '#483d8b',
2406 'darkslategray': '#2f4f4f',
2407 'darkslategrey': '#2f4f4f',
2408 'darkturquoise': '#00ced1',
2409 'darkviolet': '#9400d3',
2410 'deeppink': '#ff1493',
2411 'deepskyblue': '#00bfff',
2412 'dimgray': '#696969',
2413 'dimgrey': '#696969',
2414 'dodgerblue': '#1e90ff',
2415 'firebrick': '#b22222',
2416 'floralwhite': '#fffaf0',
2417 'forestgreen': '#228b22',
2418 'fuchsia': '#f0f',
2419 'gainsboro': '#dcdcdc',
2420 'ghostwhite': '#f8f8ff',
2421 'gold': '#ffd700',
2422 'goldenrod': '#daa520',
2423 'gray': '#808080',
2424 'green': '#008000',
2425 'greenyellow': '#adff2f',
2426 'grey': '#808080',
2427 'honeydew': '#f0fff0',
2428 'hotpink': '#ff69b4',
2429 'indianred': '#cd5c5c',
2430 'indigo': '#4b0082',
2431 'ivory': '#fffff0',
2432 'khaki': '#f0e68c',
2433 'lavender': '#e6e6fa',
2434 'lavenderblush': '#fff0f5',
2435 'lawngreen': '#7cfc00',
2436 'lemonchiffon': '#fffacd',
2437 'lightblue': '#add8e6',
2438 'lightcoral': '#f08080',
2439 'lightcyan': '#e0ffff',
2440 'lightgoldenrodyellow': '#fafad2',
2441 'lightgray': '#d3d3d3',
2442 'lightgreen': '#90ee90',
2443 'lightgrey': '#d3d3d3',
2444 'lightpink': '#ffb6c1',
2445 'lightsalmon': '#ffa07a',
2446 'lightseagreen': '#20b2aa',
2447 'lightskyblue': '#87cefa',
2448 'lightslategray': '#789',
2449 'lightslategrey': '#789',
2450 'lightsteelblue': '#b0c4de',
2451 'lightyellow': '#ffffe0',
2452 'lime': '#0f0',
2453 'limegreen': '#32cd32',
2454 'linen': '#faf0e6',
2455 'magenta': '#f0f',
2456 'maroon': '#800000',
2457 'mediumaquamarine': '#66cdaa',
2458 'mediumblue': '#0000cd',
2459 'mediumorchid': '#ba55d3',
2460 'mediumpurple': '#9370db',
2461 'mediumseagreen': '#3cb371',
2462 'mediumslateblue': '#7b68ee',
2463 'mediumspringgreen': '#00fa9a',
2464 'mediumturquoise': '#48d1cc',
2465 'mediumvioletred': '#c71585',
2466 'midnightblue': '#191970',
2467 'mintcream': '#f5fffa',
2468 'mistyrose': '#ffe4e1',
2469 'moccasin': '#ffe4b5',
2470 'navajowhite': '#ffdead',
2471 'navy': '#000080',
2472 'oldlace': '#fdf5e6',
2473 'olive': '#808000',
2474 'olivedrab': '#6b8e23',
2475 'orange': '#ffa500',
2476 'orangered': '#ff4500',
2477 'orchid': '#da70d6',
2478 'palegoldenrod': '#eee8aa',
2479 'palegreen': '#98fb98',
2480 'paleturquoise': '#afeeee',
2481 'palevioletred': '#db7093',
2482 'papayawhip': '#ffefd5',
2483 'peachpuff': '#ffdab9',
2484 'peru': '#cd853f',
2485 'pink': '#ffc0cb',
2486 'plum': '#dda0dd',
2487 'powderblue': '#b0e0e6',
2488 'purple': '#800080',
2489 'rebeccapurple': '#639',
2490 'red': '#f00',
2491 'rosybrown': '#bc8f8f',
2492 'royalblue': '#4169e1',
2493 'saddlebrown': '#8b4513',
2494 'salmon': '#fa8072',
2495 'sandybrown': '#f4a460',
2496 'seagreen': '#2e8b57',
2497 'seashell': '#fff5ee',
2498 'sienna': '#a0522d',
2499 'silver': '#c0c0c0',
2500 'skyblue': '#87ceeb',
2501 'slateblue': '#6a5acd',
2502 'slategray': '#708090',
2503 'slategrey': '#708090',
2504 'snow': '#fffafa',
2505 'springgreen': '#00ff7f',
2506 'steelblue': '#4682b4',
2507 'tan': '#d2b48c',
2508 'teal': '#008080',
2509 'thistle': '#d8bfd8',
2510 'tomato': '#ff6347',
2511 'turquoise': '#40e0d0',
2512 'violet': '#ee82ee',
2513 'wheat': '#f5deb3',
2514 'white': '#fff',
2515 'whitesmoke': '#f5f5f5',
2516 'yellow': '#ff0',
2517 'yellowgreen': '#9acd32'
2518};
2519
2520exports.colorsShortNames = {
2521 '#f0ffff': 'azure',
2522 '#f5f5dc': 'beige',
2523 '#ffe4c4': 'bisque',
2524 '#a52a2a': 'brown',
2525 '#ff7f50': 'coral',
2526 '#ffd700': 'gold',
2527 '#808080': 'gray',
2528 '#008000': 'green',
2529 '#4b0082': 'indigo',
2530 '#fffff0': 'ivory',
2531 '#f0e68c': 'khaki',
2532 '#faf0e6': 'linen',
2533 '#800000': 'maroon',
2534 '#000080': 'navy',
2535 '#808000': 'olive',
2536 '#ffa500': 'orange',
2537 '#da70d6': 'orchid',
2538 '#cd853f': 'peru',
2539 '#ffc0cb': 'pink',
2540 '#dda0dd': 'plum',
2541 '#800080': 'purple',
2542 '#f00': 'red',
2543 '#ff0000': 'red',
2544 '#fa8072': 'salmon',
2545 '#a0522d': 'sienna',
2546 '#c0c0c0': 'silver',
2547 '#fffafa': 'snow',
2548 '#d2b48c': 'tan',
2549 '#008080': 'teal',
2550 '#ff6347': 'tomato',
2551 '#ee82ee': 'violet',
2552 '#f5deb3': 'wheat'
2553};
2554
2555// http://www.w3.org/TR/SVG11/single-page.html#types-DataTypeColor
2556exports.colorsProps = [
2557 'color', 'fill', 'stroke', 'stop-color', 'flood-color', 'lighting-color'
2558];