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