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