text: 'use strict';
  
  // http://www.w3.org/TR/SVG/intro.html#Definitions
  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', 'feFlood', 'feGaussianBlur', 'feImage', 'feMerge', 'feMorphology', 'feOffset', 'feSpecularLighting', 'feTile', 'feTurbulence']
  };
  
  exports.pathElems = ['path', 'glyph', 'missing-glyph'];
  
  // http://www.w3.org/TR/SVG/intro.html#Definitions
  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',
          'buffered-rendering',
          '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',
          'kerning',
          'letter-spacing',
          'lighting-color',
          'marker-end',
          'marker-mid',
          'marker-start',
          'mask',
          'opacity',
          'overflow',
          'pointer-events',
          'shape-rendering',
          'solid-color',
          'solid-opacity',
          'stop-color',
          'stop-opacity',
          'stroke',
          'stroke-dasharray',
          'stroke-dashoffset',
          'stroke-linecap',
          'stroke-linejoin',
          'stroke-miterlimit',
          'stroke-opacity',
          'stroke-width',
          'paint-order',
          'text-anchor',
          'text-decoration',
          'text-overflow',
          'white-space',
          'text-rendering',
          'unicode-bidi',
          'vector-effect',
          'viewport-fill',
          'viewport-fill-opacity',
          'visibility',
          'white-space',
          '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']
  };
  
  exports.attrsGroupsDefaults = {
      core: {'xml:space': 'preserve'},
      filterPrimitive: {x: '0', y: '0', width: '100%', height: '100%'},
      presentation: {
          clip: 'auto',
          'clip-path': 'none',
          'clip-rule': 'nonzero',
          mask: 'none',
          opacity: '1',
          'solid-color': '#000',
          'solid-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',
          'viewport-fill': 'none',
          'viewport-fill-opacity': '1',
          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',
          'buffered-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'}
  };
  
  // http://www.w3.org/TR/SVG/eltindex.html
  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'
          ]
      },
      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',
              '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',
              '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: [
              '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',
              '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',
              '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',
              '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',
              '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',
              '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',
              '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',
              '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'
          ],
          contentGroups: [
              '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',
              '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',
              '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',
              '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'
          ]
      }
  };
  
  // http://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://www.w3.org/TR/SVG/linking.html#processingIRI
  exports.referencesProps = [
      'clip-path',
      'color-profile',
      'fill',
      'filter',
      'marker-start',
      'marker-mid',
      'marker-end',
      'mask',
      'stroke',
      'style'
  ];
  
  // http://www.w3.org/TR/SVG/propidx.html
  exports.inheritableAttrs = [
      'clip-rule',
      'color',
      'color-interpolation',
      'color-interpolation-filters',
      'color-profile',
      'color-rendering',
      'cursor',
      'direction',
      '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',
      'kerning',
      'letter-spacing',
      'marker',
      'marker-end',
      'marker-mid',
      'marker-start',
      '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',
      'white-space',
      'word-spacing',
      'writing-mode'
  ];
  
  // http://www.w3.org/TR/SVG/single-page.html#types-ColorKeywords
  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',
      'darkkhaki': '#bdb76b',
      'darkmagenta': '#8b008b',
      'darkolivegreen': '#556b2f',
      'darkorange': '#ff8c00',
      'darkorchid': '#9932cc',
      'darkred': '#8b0000',
      'darksalmon': '#e9967a',
      'darkseagreen': '#8fbc8f',
      'darkslateblue': '#483d8b',
      'darkslategray': '#2f4f4f',
      'darkturquoise': '#00ced1',
      'darkviolet': '#9400d3',
      'deeppink': '#ff1493',
      'deepskyblue': '#00bfff',
      'dimgray': '#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',
      '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',
      'lightgreen': '#90ee90',
      'lightgrey': '#d3d3d3',
      'lightpink': '#ffb6c1',
      'lightsalmon': '#ffa07a',
      'lightseagreen': '#20b2aa',
      'lightskyblue': '#87cefa',
      'lightslategray': '#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',
      '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',
      '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'
  };
  
  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',
    '#fa8072': 'salmon',
    '#a0522d': 'sienna',
    '#c0c0c0': 'silver',
    '#fffafa': 'snow',
    '#d2b48c': 'tan',
    '#008080': 'teal',
    '#ff6347': 'tomato',
    '#ee82ee': 'violet',
    '#f5deb3': 'wheat'
  };
  
  // http://www.w3.org/TR/SVG/single-page.html#types-DataTypeColor
  exports.colorsProps = [
      'color', 'fill', 'stroke', 'stop-color', 'flood-color', 'lighting-color'
  ];
  