| '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', |
| ]; |