Namdak Tonpa 9 лет назад
Сommit
dd62c02c94
81 измененных файлов с 6620 добавлено и 0 удалено
  1. 107 0
      include/svg.hrl
  2. 2 0
      rebar.config
  3. 128 0
      src/element_altglyph.erl
  4. 18 0
      src/element_altglyphdef.erl
  5. 18 0
      src/element_altglyphitem.erl
  6. 86 0
      src/element_animate.erl
  7. 86 0
      src/element_animatemotion.erl
  8. 88 0
      src/element_animatetransform.erl
  9. 114 0
      src/element_circle.erl
  10. 98 0
      src/element_clippath.erl
  11. 39 0
      src/element_colorprofile.erl
  12. 46 0
      src/element_cursor.erl
  13. 111 0
      src/element_defs.erl
  14. 18 0
      src/element_desc.erl
  15. 115 0
      src/element_ellipse.erl
  16. 100 0
      src/element_feblend.erl
  17. 100 0
      src/element_fecolormatrix.erl
  18. 98 0
      src/element_fecomponenttransfer.erl
  19. 104 0
      src/element_fecomposite.erl
  20. 106 0
      src/element_feconvolvematrix.erl
  21. 101 0
      src/element_fediffuselighting.erl
  22. 102 0
      src/element_fedisplacementmap.erl
  23. 27 0
      src/element_fedistantlight.erl
  24. 97 0
      src/element_feflood.erl
  25. 36 0
      src/element_fefunca.erl
  26. 36 0
      src/element_fefuncb.erl
  27. 36 0
      src/element_fefuncg.erl
  28. 36 0
      src/element_fefuncr.erl
  29. 99 0
      src/element_fegaussianblur.erl
  30. 110 0
      src/element_feimage.erl
  31. 97 0
      src/element_femerge.erl
  32. 26 0
      src/element_femergenode.erl
  33. 100 0
      src/element_femorphology.erl
  34. 100 0
      src/element_feoffset.erl
  35. 28 0
      src/element_fepointlight.erl
  36. 102 0
      src/element_fespecularlighting.erl
  37. 33 0
      src/element_fespotlight.erl
  38. 98 0
      src/element_fetile.erl
  39. 102 0
      src/element_feturbulence.erl
  40. 107 0
      src/element_filter.erl
  41. 95 0
      src/element_font.erl
  42. 58 0
      src/element_fontface.erl
  43. 26 0
      src/element_fontfaceformat.erl
  44. 26 0
      src/element_fontfacename.erl
  45. 25 0
      src/element_fontfacesrc.erl
  46. 36 0
      src/element_fontfaceuri.erl
  47. 115 0
      src/element_foreignobject.erl
  48. 111 0
      src/element_g.erl
  49. 98 0
      src/element_glyph.erl
  50. 105 0
      src/element_glyphref.erl
  51. 30 0
      src/element_hkern.erl
  52. 115 0
      src/element_line.erl
  53. 107 0
      src/element_lineargradient.erl
  54. 98 0
      src/element_marker.erl
  55. 102 0
      src/element_mask.erl
  56. 25 0
      src/element_metadata.erl
  57. 93 0
      src/element_missingglyph.erl
  58. 37 0
      src/element_mpath.erl
  59. 113 0
      src/element_path.erl
  60. 116 0
      src/element_pattern.erl
  61. 112 0
      src/element_polygon.erl
  62. 112 0
      src/element_polyline.erl
  63. 108 0
      src/element_radialgradient.erl
  64. 117 0
      src/element_rect.erl
  65. 71 0
      src/element_set.erl
  66. 89 0
      src/element_stop.erl
  67. 160 0
      src/element_svg.erl
  68. 127 0
      src/element_svgimage.erl
  69. 38 0
      src/element_svgscript.erl
  70. 39 0
      src/element_svgstyle.erl
  71. 25 0
      src/element_svgtitle.erl
  72. 112 0
      src/element_switch.erl
  73. 105 0
      src/element_symbol.erl
  74. 118 0
      src/element_text.erl
  75. 124 0
      src/element_textpath.erl
  76. 121 0
      src/element_tref.erl
  77. 117 0
      src/element_tspan.erl
  78. 126 0
      src/element_use.erl
  79. 30 0
      src/element_view.erl
  80. 30 0
      src/element_vkern.erl
  81. 153 0
      src/element_xlink.erl

+ 107 - 0
include/svg.hrl

@@ -0,0 +1,107 @@
+-ifndef(SVG_HRL).
+-define(SVG_HRL, true).
+
+-include_lib("nitro/include/nitro.hrl").
+
+% SVG attribute groups
+-define(SVG_ANIMATION_EVENT, onbegin, onend, onload_animation, onrepeat).
+-define(SVG_ANIMATION_ATTRIBUT_TARGET, attributeType, attributeName).
+-define(SVG_ANIMATION_TIMING, svgbegin, dur, svgend, min, max, restart, repeatCount, repeatDur, fill).
+-define(SVG_ANIMATION_VALUE, calcMode, values, keyTimes, keySplines, from, to, by, autoReverse, accelerate, decelerate).
+-define(SVG_ANIMATION_ADDITION, additive, accumulate).
+-define(SVG_CONDITIONAL_PROCESSING, requiredExtensions, requiredFeatures, systemLanguage).
+-define(SVG_CORE, xmlbase, xmllang, xmlspace).
+-define(SVG_DOCUMENT_EVENT, onabort, onscroll, onunload_document, onzoom).  %% onerror and onresize, duplicating HTML events, were removed.
+-define(SVG_FILTER_PRIMITIVE, height, result, width, x, y).
+-define(SVG_GRAPHICAL_EVENT, onactivate, onfocusin, onfocusout, onload_graphical, onmousedown, onmousemove, onmouseout, onmouseup). %% onclick and onmouseover, duplicating HTML events, were removed.
+-define(SVG_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, kerning, letter_spacing, lighting_color, marker_end, marker_mid,
+		marker_start, mask, opacity, overflow, 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_rendering, unicode_bidi, visibility, word_spacing, writing_mode).
+-define(SVG_TRANSFERT_FUNCTION, type, tableValues, slope, intercept, amplitude, exponent, offset).
+-define(SVG_XLINK, xlinkhref, xlinktype, xlinkrole, xlinkarcrole, xlinktitle, xlinkshow, xlinkactuate).
+
+
+% SVG
+-record(svg, {?ELEMENT_BASE(element_svg), version="1.1", baseProfile="full", xmlns="http://www.w3.org/2000/svg", xmlnsxlink="http://www.w3.org/1999/xlink", xmlnsev="http://www.w3.org/2001/xml-events", preserveAspectRatio, contentScriptType, contentStyleType, viewBox, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_DOCUMENT_EVENT, ?SVG_FILTER_PRIMITIVE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_TRANSFERT_FUNCTION, ?SVG_XLINK}).
+-record(altGlyph, {?ELEMENT_BASE(element_altglyph), x, y, dx, dy, rotate, glyphRef, format, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(altGlyphDef, {?ELEMENT_BASE(element_altglyphdef), ?SVG_CORE}).
+-record(altGlyphItem, {?ELEMENT_BASE(element_altglyphitem), ?SVG_CORE}).
+-record(animate, {?ELEMENT_BASE(element_animate), externalResourcesRequired, ?SVG_ANIMATION_EVENT, ?SVG_ANIMATION_ATTRIBUT_TARGET, ?SVG_ANIMATION_TIMING, ?SVG_ANIMATION_VALUE, ?SVG_ANIMATION_ADDITION, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_XLINK}).
+-record(animateMotion, {?ELEMENT_BASE(element_animatemotion), path, keyPoints, rotate, origin, externalResourcesRequired, ?SVG_ANIMATION_EVENT, ?SVG_ANIMATION_TIMING, ?SVG_ANIMATION_VALUE, ?SVG_ANIMATION_ADDITION,  ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_XLINK}).
+-record(animateTransform, {?ELEMENT_BASE(element_animatetransform), type, externalResourcesRequired, ?SVG_ANIMATION_EVENT, ?SVG_ANIMATION_ATTRIBUT_TARGET, ?SVG_ANIMATION_TIMING, ?SVG_ANIMATION_VALUE, ?SVG_ANIMATION_ADDITION, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_XLINK}).
+-record(circle, {?ELEMENT_BASE(element_circle), cx, cy, r, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(clipPath, {?ELEMENT_BASE(element_clippath), clipPathUnits, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_PRESENTATION}).
+-record(color_profile, {?ELEMENT_BASE(element_colorprofile), local, name, rendering_intent, ?SVG_CORE, ?SVG_XLINK}).
+-record(cursor, {?ELEMENT_BASE(element_cursor), x, y, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_XLINK}).
+-record(defs, {?ELEMENT_BASE(element_defs), transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(desc, {?ELEMENT_BASE(element_desc), ?SVG_CORE}).
+-record(ellipse, {?ELEMENT_BASE(element_ellipse), cx, cy, rx, ry, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(feBlend, {?ELEMENT_BASE(element_feblend), in, in2, mode, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feColorMatrix, {?ELEMENT_BASE(element_fecolormatrix), in, type, values, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feComponentTransfer, {?ELEMENT_BASE(element_fecomponenttransfer), in, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feComposite, {?ELEMENT_BASE(element_fecomposite), in, in2, operator, k1, k2, k3, k4, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feConvolveMatrix, {?ELEMENT_BASE(element_feconvolvematrix), in, order, kernelMatrix, divisor, bias, targetX, targetY, edgeMode, kernelUnitLength, preserveAlpha, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feDiffuseLighting, {?ELEMENT_BASE(element_fediffuselighting), in, surfaceScale, diffuseConstant, kernelUnitLength, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feDisplacementMap, {?ELEMENT_BASE(element_fedisplacementmap), in, in2, scale, xChannelSelector, yChannelSelector, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feDistantLight, {?ELEMENT_BASE(element_fedistantlight), azimuth, elevation, ?SVG_CORE}).
+-record(feFlood, {?ELEMENT_BASE(element_feflood), ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feFuncA, {?ELEMENT_BASE(element_fefunca), ?SVG_CORE, ?SVG_TRANSFERT_FUNCTION}).
+-record(feFuncB, {?ELEMENT_BASE(element_fefuncb), ?SVG_CORE, ?SVG_TRANSFERT_FUNCTION}).
+-record(feFuncG, {?ELEMENT_BASE(element_fefuncg), ?SVG_CORE, ?SVG_TRANSFERT_FUNCTION}).
+-record(feFuncR, {?ELEMENT_BASE(element_fefuncr), ?SVG_CORE, ?SVG_TRANSFERT_FUNCTION}).
+-record(feGaussianBlur, {?ELEMENT_BASE(element_fegaussianblur), in, stdDeviation, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feImage, {?ELEMENT_BASE(element_feimage), preserveAspectRatio, externalResourcesRequired, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(feMerge, {?ELEMENT_BASE(element_femerge), ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feMergeNode, {?ELEMENT_BASE(element_femergenode), in, ?SVG_CORE}).
+-record(feMorphology, {?ELEMENT_BASE(element_femorphology), in, operator, radius, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feOffset, {?ELEMENT_BASE(element_feoffset), in, dx, dy, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(fePointLight, {?ELEMENT_BASE(element_fepointlight), x, y, z, ?SVG_CORE}).
+-record(feSpecularLighting, {?ELEMENT_BASE(element_fespecularlighting), in, surfaceScale, specularConstant, specularExponent, kernelUnitLength, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feSpotLight, {?ELEMENT_BASE(element_fespotlight), x, y, z, pointsAtX, pointsAtY, pointsAtZ, specularExponent, limitingConeAngle, ?SVG_CORE}).
+-record(feTile, {?ELEMENT_BASE(element_fetile), in, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(feTurbulence, {?ELEMENT_BASE(element_feturbulence), baseFrequency, numOctaves, seed, stitchTiles, type, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_PRESENTATION}).
+-record(filter, {?ELEMENT_BASE(element_filter), x, y, width, height, filterRes, filterUnits, primitiveUnits, externalResourcesRequired, ?SVG_CORE, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(font, {?ELEMENT_BASE(element_font), horiz_origin_x, horiz_origin_y, horiz_adv_x, vert_origin_x, vert_origin_y, vert_adv_y, externalResourcesRequired, ?SVG_CORE, ?SVG_PRESENTATION}).
+-record(font_face, {?ELEMENT_BASE(element_fontface), 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, ?SVG_CORE}).
+-record(font_face_format, {?ELEMENT_BASE(element_fontfaceformat), string, ?SVG_CORE}).
+-record(font_face_name, {?ELEMENT_BASE(element_fontfacename), name, ?SVG_CORE}).
+-record(font_face_src, {?ELEMENT_BASE(element_fontfacesrc), ?SVG_CORE}).
+-record(font_face_uri, {?ELEMENT_BASE(element_fontfaceuri), ?SVG_CORE, ?SVG_XLINK}).
+-record(foreignObject, {?ELEMENT_BASE(element_foreignobject), x, y, width, height, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(g, {?ELEMENT_BASE(element_g), transform, externalResourcesRequired,  ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(glyph, {?ELEMENT_BASE(element_glyph), d, horiz_adv_x, vert_origin_x, vert_origin_y, vert_adv_y, unicode, glyph_name, orientation, arabic_form, ?SVG_CORE, ?SVG_PRESENTATION}).
+-record(glyphRef, {?ELEMENT_BASE(element_glyphref), x, y, dx, dy, glyphRef, format, ?SVG_CORE, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(hkern, {?ELEMENT_BASE(element_hkern), u1, g1, u2, g2, k, ?SVG_CORE}).
+-record(svgimage, {?ELEMENT_BASE(element_svgimage), x, y, width, height, preserveAspectRatio, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(line, {?ELEMENT_BASE(element_line), x1, y1, x2, y2, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(linearGradient, {?ELEMENT_BASE(element_lineargradient), gradientUnits, gradientTransform, x1, y1, x2, y2, spreadMethod, externalResourcesRequired, ?SVG_CORE, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(xlink, {?ELEMENT_BASE(element_xlink), target, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_FILTER_PRIMITIVE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_TRANSFERT_FUNCTION, ?SVG_XLINK}).
+-record(marker, {?ELEMENT_BASE(element_marker), markerUnits, refX, refY, markerWidth, markerHeight, orient, viewBox, preserveAspectRatio, transform, externalResourcesRequired, ?SVG_CORE, ?SVG_PRESENTATION}).
+-record(mask, {?ELEMENT_BASE(element_mask), maskUnits, maskContentUnits, x, y, width, height, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_PRESENTATION}).
+-record(metadata, {?ELEMENT_BASE(element_metadata), ?SVG_CORE}).
+-record(missing_glyph, {?ELEMENT_BASE(element_missingglyph), d, horiz_adv_x, vert_origin_x, vert_origin_y, vert_adv_y, ?SVG_CORE, ?SVG_PRESENTATION}).
+-record(mpath, {?ELEMENT_BASE(element_mpath), externalResourcesRequired, ?SVG_CORE, ?SVG_XLINK}).
+-record(path, {?ELEMENT_BASE(element_path), d, pathLength, transform, externalResourcesRequired,  ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(pattern, {?ELEMENT_BASE(element_pattern), patternUnits, patternContentUnits, patternTransform, x, y, width, height, preserveAspectRatio, viewBox, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(polygon, {?ELEMENT_BASE(element_polygon), points, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(polyline, {?ELEMENT_BASE(element_polyline), points, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(radialGradient, {?ELEMENT_BASE(element_radialgradient), gradientUnits, gradientTransform, cx, cy, r, fx, fy, spreadMethod, externalResourcesRequired, ?SVG_CORE, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(rect, {?ELEMENT_BASE(element_rect), x, y, width, height, rx, ry, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(svgscript, {?ELEMENT_BASE(element_svgscript), type, externalResourcesRequired, ?SVG_CORE, ?SVG_XLINK}).
+-record(set, {?ELEMENT_BASE(element_set), to, externalResourcesRequired, ?SVG_ANIMATION_EVENT, ?SVG_ANIMATION_ATTRIBUT_TARGET, ?SVG_ANIMATION_TIMING, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_XLINK}).
+-record(stop, {?ELEMENT_BASE(element_stop), offset, ?SVG_CORE, ?SVG_PRESENTATION}).
+-record(svgstyle, {?ELEMENT_BASE(element_svgstyle), type, media, ?SVG_CORE, ?SVG_XLINK}).
+-record(switch, {?ELEMENT_BASE(element_switch), allowReorderm, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(symbol, {?ELEMENT_BASE(element_symbol), preserveAspectRatio, viewBox, externalResourcesRequired, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(text, {?ELEMENT_BASE(element_text), x, y, dx, dy, rotate, textLength, lengthAdjust, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(textPath, {?ELEMENT_BASE(element_textpath), startOffset, method, spacing, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(svgtitle, {?ELEMENT_BASE(element_svgtitle), ?SVG_CORE}).
+-record(tref, {?ELEMENT_BASE(element_tref), externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(tspan, {?ELEMENT_BASE(element_tspan), x, y, dx, dy, rotate, textLength, lengthAdjust, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
+-record(use, {?ELEMENT_BASE(element_use), x, y, width, height, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_XLINK}).
+-record(view, {?ELEMENT_BASE(element_view), viewBox, preserveAspectRatio, zoomAndPan, viewTarget, externalResourcesRequired, ?SVG_CORE}).
+-record(vkern, {?ELEMENT_BASE(element_vkern), u1, g1, u2, g2, k, ?SVG_CORE}).
+
+-endif.

+ 2 - 0
rebar.config

@@ -0,0 +1,2 @@
+{lib_dirs,[".."]}.
+{deps, [{nitro, ".*", {git, "git://github.com/synrc/nitro.git", {tag,"master"}}}]}.

+ 128 - 0
src/element_altglyph.erl

@@ -0,0 +1,128 @@
+-module(element_altglyph).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"altGlyph">>, nitro:render(Record#altGlyph.body),
+	lists:append([
+		[
+			{<<"id">>, Record#altGlyph.id},
+			{<<"class">>, Record#altGlyph.class},
+			{<<"style">>, Record#altGlyph.style},
+			{<<"x">>, Record#altGlyph.x},
+			{<<"y">>, Record#altGlyph.y},
+			{<<"dx">>, Record#altGlyph.dx},
+			{<<"dy">>, Record#altGlyph.dy},
+			{<<"rotate">>, Record#altGlyph.rotate},
+			{<<"glyphRef">>, Record#altGlyph.glyphRef},
+			{<<"format">>, Record#altGlyph.format},
+			{<<"externalResourcesRequired">>, Record#altGlyph.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#altGlyph.data_fields,
+		Record#altGlyph.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#altGlyph.requiredExtensions},
+	{<<"requiredFeatures">>, Record#altGlyph.requiredFeatures},
+	{<<"systemLanguage">>, Record#altGlyph.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#altGlyph.xmlbase},
+	{<<"xml:lang">>, Record#altGlyph.xmllang},
+	{<<"xml:space">>, Record#altGlyph.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#altGlyph.onactivate},
+	{<<"onclick">>, Record#altGlyph.onclick},
+	{<<"onfocusin">>, Record#altGlyph.onfocusin},
+	{<<"onfocusout">>, Record#altGlyph.onfocusout},
+	{<<"onload">>, Record#altGlyph.onload_graphical},
+	{<<"onmousedown">>, Record#altGlyph.onmousedown},
+	{<<"onmousemove">>, Record#altGlyph.onmousemove},
+	{<<"onmouseout">>, Record#altGlyph.onmouseout},
+	{<<"onmouseover">>, Record#altGlyph.onmouseover},
+	{<<"onmouseup">>, Record#altGlyph.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#altGlyph.alignment_baseline},
+	{<<"baseline-shift">>, Record#altGlyph.baseline_shift},
+	{<<"clip">>, Record#altGlyph.clip},
+	{<<"clip-path">>, Record#altGlyph.clip_path},
+	{<<"clip-rule">>, Record#altGlyph.clip_rule},
+	{<<"color">>, Record#altGlyph.color},
+	{<<"color-interpolation">>, Record#altGlyph.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#altGlyph.color_interpolation_filters},
+	{<<"color-profile">>, Record#altGlyph.color_profile},
+	{<<"color-rendering">>, Record#altGlyph.color_rendering},
+	{<<"cursor">>, Record#altGlyph.cursor},
+	{<<"direction">>, Record#altGlyph.direction},
+	{<<"display">>, Record#altGlyph.display},
+	{<<"dominant-baseline">>, Record#altGlyph.dominant_baseline},
+	{<<"enable-background">>, Record#altGlyph.enable_background},
+	{<<"fill">>, Record#altGlyph.fill},
+	{<<"fill-opacity">>, Record#altGlyph.fill_opacity},
+	{<<"fill-rule">>, Record#altGlyph.fill_rule},
+	{<<"filter">>, Record#altGlyph.filter},
+	{<<"flood-color">>, Record#altGlyph.flood_color},
+	{<<"flood-opacity">>, Record#altGlyph.flood_opacity},
+	{<<"font-family">>, Record#altGlyph.font_family},
+	{<<"font-size">>, Record#altGlyph.font_size},
+	{<<"font-size-adjust">>, Record#altGlyph.font_size_adjust},
+	{<<"font-stretch">>, Record#altGlyph.font_stretch},
+	{<<"font-style">>, Record#altGlyph.font_style},
+	{<<"font-variant">>, Record#altGlyph.font_variant},
+	{<<"font-weight">>, Record#altGlyph.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#altGlyph.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#altGlyph.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#altGlyph.image_rendering},
+	{<<"kerning">>, Record#altGlyph.kerning},
+	{<<"letter-spacing">>, Record#altGlyph.letter_spacing},
+	{<<"lighting-color">>, Record#altGlyph.lighting_color},
+	{<<"marker-end">>, Record#altGlyph.marker_end},
+	{<<"marker-mid">>, Record#altGlyph.marker_mid},
+	{<<"marker-start">>, Record#altGlyph.marker_start},
+	{<<"mask">>, Record#altGlyph.mask},
+	{<<"opacity">>, Record#altGlyph.opacity},
+	{<<"overflow">>, Record#altGlyph.overflow},
+	{<<"pointer-events">>, Record#altGlyph.pointer_events},
+	{<<"shape-rendering">>, Record#altGlyph.shape_rendering},
+	{<<"stop-color">>, Record#altGlyph.stop_color},
+	{<<"stop-opacity">>, Record#altGlyph.stop_opacity},
+	{<<"stroke">>, Record#altGlyph.stroke},
+	{<<"stroke-dasharray">>, Record#altGlyph.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#altGlyph.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#altGlyph.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#altGlyph.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#altGlyph.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#altGlyph.stroke_opacity},
+	{<<"stroke-width">>, Record#altGlyph.stroke_width},
+	{<<"text-anchor">>, Record#altGlyph.text_anchor},
+	{<<"text-decoration">>, Record#altGlyph.text_decoration},
+	{<<"text-rendering">>, Record#altGlyph.text_rendering},
+	{<<"unicode-bidi">>, Record#altGlyph.unicode_bidi},
+	{<<"visibility">>, Record#altGlyph.visibility},
+	{<<"word-spacing">>, Record#altGlyph.word_spacing},
+	{<<"writing-mode">>, Record#altGlyph.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#altGlyph.xlinkhref},
+	{<<"xlink:type">>, Record#altGlyph.xlinktype},
+	{<<"xlink:role">>, Record#altGlyph.xlinkrole},
+	{<<"xlink:arcrole">>, Record#altGlyph.xlinkarcrole},
+	{<<"xlink:title">>, Record#altGlyph.xlinktitle},
+	{<<"xlink:show">>, Record#altGlyph.xlinkshow},
+	{<<"xlink:actuate">>, Record#altGlyph.xlinkactuate}
+].

+ 18 - 0
src/element_altglyphdef.erl

@@ -0,0 +1,18 @@
+-module(element_altglyphdef).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"altGlyphDef">>, nitro:render(Record#altGlyphDef.body),
+	lists:append([
+		[
+			{<<"id">>, Record#altGlyphDef.id},
+			{<<"class">>, Record#altGlyphDef.class},
+			{<<"xml:base">>, Record#altGlyphDef.xmlbase},
+			{<<"xml:lang">>, Record#altGlyphDef.xmllang},
+			{<<"xml:space">>, Record#altGlyphDef.xmlspace}
+		],
+		Record#altGlyphDef.data_fields,
+		Record#altGlyphDef.aria_states
+	])).

+ 18 - 0
src/element_altglyphitem.erl

@@ -0,0 +1,18 @@
+-module(element_altglyphitem).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"altGlyphItem">>, nitro:render(Record#altGlyphItem.body),
+	lists:append([
+		[
+			{<<"id">>, Record#altGlyphItem.id},
+			{<<"class">>, Record#altGlyphItem.class},
+			{<<"xml:base">>, Record#altGlyphItem.xmlbase},
+			{<<"xml:lang">>, Record#altGlyphItem.xmllang},
+			{<<"xml:space">>, Record#altGlyphItem.xmlspace}
+		],
+		Record#altGlyphItem.data_fields,
+		Record#altGlyphItem.aria_states
+	])).

+ 86 - 0
src/element_animate.erl

@@ -0,0 +1,86 @@
+-module(element_animate).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"animate">>, nitro:render(Record#animate.body),
+	lists:append([
+		[
+			{<<"id">>, Record#animate.id},
+			{<<"class">>, Record#animate.class},
+			{<<"style">>, Record#animate.style},
+			{<<"externalResourcesRequired">>, Record#animate.externalResourcesRequired}
+		],
+		svg_animation_event(Record),
+		svg_animation_attribut_target(Record),
+		svg_animation_timing(Record),
+		svg_animation_value(Record),
+		svg_animation_addition(Record),
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#animate.data_fields,
+		Record#animate.aria_states
+	])).
+
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#animate.requiredExtensions},
+	{<<"requiredFeatures">>, Record#animate.requiredFeatures},
+	{<<"systemLanguage">>, Record#animate.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#animate.xmlbase},
+	{<<"xml:lang">>, Record#animate.xmllang},
+	{<<"xml:space">>, Record#animate.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#animate.xlinkhref},
+	{<<"xlink:type">>, Record#animate.xlinktype},
+	{<<"xlink:role">>, Record#animate.xlinkrole},
+	{<<"xlink:arcrole">>, Record#animate.xlinkarcrole},
+	{<<"xlink:title">>, Record#animate.xlinktitle},
+	{<<"xlink:show">>, Record#animate.xlinkshow},
+	{<<"xlink:actuate">>, Record#animate.xlinkactuate}
+].
+
+% Common SVG animate attributes
+svg_animation_event(Record) -> [
+	{<<"onbegin">>, Record#animate.onbegin},
+	{<<"onend">>, Record#animate.onend},
+	{<<"onload">>, Record#animate.onload_animation},
+	{<<"onrepeat">>, Record#animate.onrepeat}
+].
+svg_animation_attribut_target(Record) -> [
+	{<<"attributeType">>, Record#animate.attributeType},
+	{<<"attributeName">>, Record#animate.attributeName}
+].
+svg_animation_timing(Record) -> [
+	{<<"begin">>, Record#animate.svgbegin},
+	{<<"dur">>, Record#animate.dur},
+	{<<"end">>, Record#animate.svgend},
+	{<<"min">>, Record#animate.min},
+	{<<"max">>, Record#animate.max},
+	{<<"restart">>, Record#animate.restart},
+	{<<"repeatCount">>, Record#animate.repeatCount},
+	{<<"repeatDur">>, Record#animate.repeatDur},
+	{<<"fill">>, Record#animate.fill}
+].
+svg_animation_value(Record) -> [
+	{<<"calcMode">>, Record#animate.calcMode},
+	{<<"values">>, Record#animate.values},
+	{<<"keyTimes">>, Record#animate.keyTimes},
+	{<<"keySplines">>, Record#animate.keySplines},
+	{<<"from">>, Record#animate.from},
+	{<<"to">>, Record#animate.to},
+	{<<"by">>, Record#animate.by},
+	{<<"autoReverse">>, Record#animate.autoReverse},
+	{<<"accelerate">>, Record#animate.accelerate},
+	{<<"decelerate">>, Record#animate.decelerate}
+].
+svg_animation_addition(Record) -> [
+	{<<"additive">>, Record#animate.additive},
+	{<<"accumulate">>, Record#animate.accumulate}
+].

+ 86 - 0
src/element_animatemotion.erl

@@ -0,0 +1,86 @@
+-module(element_animatemotion).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+%% -import(element_svg, [svg_conditional_processing/1, svg_core/1, svg_xlink/1]).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"animateMotion">>, nitro:render(Record#animateMotion.body),
+	lists:append([
+		[
+			{<<"id">>, Record#animateMotion.id},
+			{<<"class">>, Record#animateMotion.class},
+			{<<"style">>, Record#animateMotion.style},
+			{<<"path">>, Record#animateMotion.path},
+			{<<"keyPoints">>, Record#animateMotion.keyPoints},
+			{<<"rotate">>, Record#animateMotion.rotate},
+			{<<"origin">>, Record#animateMotion.origin},
+			{<<"externalResourcesRequired">>, Record#animateMotion.externalResourcesRequired}
+		],
+		svg_animation_event(Record),
+		svg_animation_timing(Record),
+		svg_animation_value(Record),
+		svg_animation_addition(Record),
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#animateMotion.data_fields,
+		Record#animateMotion.aria_states
+	])).
+
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#animateMotion.requiredExtensions},
+	{<<"requiredFeatures">>, Record#animateMotion.requiredFeatures},
+	{<<"systemLanguage">>, Record#animateMotion.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#animateMotion.xmlbase},
+	{<<"xml:lang">>, Record#animateMotion.xmllang},
+	{<<"xml:space">>, Record#animateMotion.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#animateMotion.xlinkhref},
+	{<<"xlink:type">>, Record#animateMotion.xlinktype},
+	{<<"xlink:role">>, Record#animateMotion.xlinkrole},
+	{<<"xlink:arcrole">>, Record#animateMotion.xlinkarcrole},
+	{<<"xlink:title">>, Record#animateMotion.xlinktitle},
+	{<<"xlink:show">>, Record#animateMotion.xlinkshow},
+	{<<"xlink:actuate">>, Record#animateMotion.xlinkactuate}
+].
+
+% Common SVG animateMotion attributes
+svg_animation_event(Record) -> [
+	{<<"onbegin">>, Record#animateMotion.onbegin},
+	{<<"onend">>, Record#animateMotion.onend},
+	{<<"onload">>, Record#animateMotion.onload_animation},
+	{<<"onrepeat">>, Record#animateMotion.onrepeat}
+].
+svg_animation_timing(Record) -> [
+	{<<"begin">>, Record#animateMotion.svgbegin},
+	{<<"dur">>, Record#animateMotion.dur},
+	{<<"end">>, Record#animateMotion.svgend},
+	{<<"min">>, Record#animateMotion.min},
+	{<<"max">>, Record#animateMotion.max},
+	{<<"restart">>, Record#animateMotion.restart},
+	{<<"repeatCount">>, Record#animateMotion.repeatCount},
+	{<<"repeatDur">>, Record#animateMotion.repeatDur},
+	{<<"fill">>, Record#animateMotion.fill}
+].
+svg_animation_value(Record) -> [
+	{<<"calcMode">>, Record#animateMotion.calcMode},
+	{<<"values">>, Record#animateMotion.values},
+	{<<"keyTimes">>, Record#animateMotion.keyTimes},
+	{<<"keySplines">>, Record#animateMotion.keySplines},
+	{<<"from">>, Record#animateMotion.from},
+	{<<"to">>, Record#animateMotion.to},
+	{<<"by">>, Record#animateMotion.by},
+	{<<"autoReverse">>, Record#animateMotion.autoReverse},
+	{<<"accelerate">>, Record#animateMotion.accelerate},
+	{<<"decelerate">>, Record#animateMotion.decelerate}
+].
+svg_animation_addition(Record) -> [
+	{<<"additive">>, Record#animateMotion.additive},
+	{<<"accumulate">>, Record#animateMotion.accumulate}
+].

+ 88 - 0
src/element_animatetransform.erl

@@ -0,0 +1,88 @@
+-module(element_animatetransform).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+%% -import(element_svg, [svg_conditional_processing/1, svg_core/1, svg_xlink/1]).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"animateTransform">>, nitro:render(Record#animateTransform.body),
+	lists:append([
+		[
+			{<<"id">>, Record#animateTransform.id},
+			{<<"class">>, Record#animateTransform.class},
+			{<<"style">>, Record#animateTransform.style},
+			{<<"type">>, Record#animateTransform.type},
+			{<<"externalResourcesRequired">>, Record#animateTransform.externalResourcesRequired}
+		],
+		svg_animation_event(Record),
+		svg_animation_attribut_target(Record),
+		svg_animation_timing(Record),
+		svg_animation_value(Record),
+		svg_animation_addition(Record),
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#animateTransform.data_fields,
+		Record#animateTransform.aria_states
+	])).
+
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#animateTransform.requiredExtensions},
+	{<<"requiredFeatures">>, Record#animateTransform.requiredFeatures},
+	{<<"systemLanguage">>, Record#animateTransform.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#animateTransform.xmlbase},
+	{<<"xml:lang">>, Record#animateTransform.xmllang},
+	{<<"xml:space">>, Record#animateTransform.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#animateTransform.xlinkhref},
+	{<<"xlink:type">>, Record#animateTransform.xlinktype},
+	{<<"xlink:role">>, Record#animateTransform.xlinkrole},
+	{<<"xlink:arcrole">>, Record#animateTransform.xlinkarcrole},
+	{<<"xlink:title">>, Record#animateTransform.xlinktitle},
+	{<<"xlink:show">>, Record#animateTransform.xlinkshow},
+	{<<"xlink:actuate">>, Record#animateTransform.xlinkactuate}
+].
+
+% Common SVG animateTransform attributes
+svg_animation_event(Record) -> [
+	{<<"onbegin">>, Record#animateTransform.onbegin},
+	{<<"onend">>, Record#animateTransform.onend},
+	{<<"onload">>, Record#animateTransform.onload_animation},
+	{<<"onrepeat">>, Record#animateTransform.onrepeat}
+].
+svg_animation_attribut_target(Record) -> [
+	{<<"attributeType">>, Record#animateTransform.attributeType},
+	{<<"attributeName">>, Record#animateTransform.attributeName}
+].
+svg_animation_timing(Record) -> [
+	{<<"begin">>, Record#animateTransform.svgbegin},
+	{<<"dur">>, Record#animateTransform.dur},
+	{<<"end">>, Record#animateTransform.svgend},
+	{<<"min">>, Record#animateTransform.min},
+	{<<"max">>, Record#animateTransform.max},
+	{<<"restart">>, Record#animateTransform.restart},
+	{<<"repeatCount">>, Record#animateTransform.repeatCount},
+	{<<"repeatDur">>, Record#animateTransform.repeatDur},
+	{<<"fill">>, Record#animateTransform.fill}
+].
+svg_animation_value(Record) -> [
+	{<<"calcMode">>, Record#animateTransform.calcMode},
+	{<<"values">>, Record#animateTransform.values},
+	{<<"keyTimes">>, Record#animateTransform.keyTimes},
+	{<<"keySplines">>, Record#animateTransform.keySplines},
+	{<<"from">>, Record#animateTransform.from},
+	{<<"to">>, Record#animateTransform.to},
+	{<<"by">>, Record#animateTransform.by},
+	{<<"autoReverse">>, Record#animateTransform.autoReverse},
+	{<<"accelerate">>, Record#animateTransform.accelerate},
+	{<<"decelerate">>, Record#animateTransform.decelerate}
+].
+svg_animation_addition(Record) -> [
+	{<<"additive">>, Record#animateTransform.additive},
+	{<<"accumulate">>, Record#animateTransform.accumulate}
+].

+ 114 - 0
src/element_circle.erl

@@ -0,0 +1,114 @@
+-module(element_circle).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"circle">>, nitro:render(Record#circle.body),
+	lists:append([
+		[
+			{<<"id">>, Record#circle.id},
+			{<<"class">>, Record#circle.class},
+			{<<"style">>, Record#circle.style},
+			{<<"cx">>, Record#circle.cx},
+			{<<"cy">>, Record#circle.cy},
+			{<<"r">>, Record#circle.r},
+			{<<"transform">>, Record#circle.transform},
+			{<<"externalResourcesRequired">>, Record#circle.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#circle.data_fields,
+		Record#circle.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#circle.requiredExtensions},
+	{<<"requiredFeatures">>, Record#circle.requiredFeatures},
+	{<<"systemLanguage">>, Record#circle.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#circle.xmlbase},
+	{<<"xml:lang">>, Record#circle.xmllang},
+	{<<"xml:space">>, Record#circle.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#circle.onactivate},
+	{<<"onclick">>, Record#circle.onclick},
+	{<<"onfocusin">>, Record#circle.onfocusin},
+	{<<"onfocusout">>, Record#circle.onfocusout},
+	{<<"onload">>, Record#circle.onload_graphical},
+	{<<"onmousedown">>, Record#circle.onmousedown},
+	{<<"onmousemove">>, Record#circle.onmousemove},
+	{<<"onmouseout">>, Record#circle.onmouseout},
+	{<<"onmouseover">>, Record#circle.onmouseover},
+	{<<"onmouseup">>, Record#circle.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#circle.alignment_baseline},
+	{<<"baseline-shift">>, Record#circle.baseline_shift},
+	{<<"clip">>, Record#circle.clip},
+	{<<"clip-path">>, Record#circle.clip_path},
+	{<<"clip-rule">>, Record#circle.clip_rule},
+	{<<"color">>, Record#circle.color},
+	{<<"color-interpolation">>, Record#circle.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#circle.color_interpolation_filters},
+	{<<"color-profile">>, Record#circle.color_profile},
+	{<<"color-rendering">>, Record#circle.color_rendering},
+	{<<"cursor">>, Record#circle.cursor},
+	{<<"direction">>, Record#circle.direction},
+	{<<"display">>, Record#circle.display},
+	{<<"dominant-baseline">>, Record#circle.dominant_baseline},
+	{<<"enable-background">>, Record#circle.enable_background},
+	{<<"fill">>, Record#circle.fill},
+	{<<"fill-opacity">>, Record#circle.fill_opacity},
+	{<<"fill-rule">>, Record#circle.fill_rule},
+	{<<"filter">>, Record#circle.filter},
+	{<<"flood-color">>, Record#circle.flood_color},
+	{<<"flood-opacity">>, Record#circle.flood_opacity},
+	{<<"font-family">>, Record#circle.font_family},
+	{<<"font-size">>, Record#circle.font_size},
+	{<<"font-size-adjust">>, Record#circle.font_size_adjust},
+	{<<"font-stretch">>, Record#circle.font_stretch},
+	{<<"font-style">>, Record#circle.font_style},
+	{<<"font-variant">>, Record#circle.font_variant},
+	{<<"font-weight">>, Record#circle.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#circle.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#circle.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#circle.image_rendering},
+	{<<"kerning">>, Record#circle.kerning},
+	{<<"letter-spacing">>, Record#circle.letter_spacing},
+	{<<"lighting-color">>, Record#circle.lighting_color},
+	{<<"marker-end">>, Record#circle.marker_end},
+	{<<"marker-mid">>, Record#circle.marker_mid},
+	{<<"marker-start">>, Record#circle.marker_start},
+	{<<"mask">>, Record#circle.mask},
+	{<<"opacity">>, Record#circle.opacity},
+	{<<"overflow">>, Record#circle.overflow},
+	{<<"pointer-events">>, Record#circle.pointer_events},
+	{<<"shape-rendering">>, Record#circle.shape_rendering},
+	{<<"stop-color">>, Record#circle.stop_color},
+	{<<"stop-opacity">>, Record#circle.stop_opacity},
+	{<<"stroke">>, Record#circle.stroke},
+	{<<"stroke-dasharray">>, Record#circle.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#circle.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#circle.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#circle.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#circle.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#circle.stroke_opacity},
+	{<<"stroke-width">>, Record#circle.stroke_width},
+	{<<"text-anchor">>, Record#circle.text_anchor},
+	{<<"text-decoration">>, Record#circle.text_decoration},
+	{<<"text-rendering">>, Record#circle.text_rendering},
+	{<<"unicode-bidi">>, Record#circle.unicode_bidi},
+	{<<"visibility">>, Record#circle.visibility},
+	{<<"word-spacing">>, Record#circle.word_spacing},
+	{<<"writing-mode">>, Record#circle.writing_mode}
+].

+ 98 - 0
src/element_clippath.erl

@@ -0,0 +1,98 @@
+-module(element_clippath).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"clipPath">>, nitro:render(Record#clipPath.body),
+	lists:append([
+		[
+			{<<"id">>, Record#clipPath.id},
+			{<<"class">>, Record#clipPath.class},
+			{<<"style">>, Record#clipPath.style},
+			{<<"clipPathUnits">>, Record#clipPath.clipPathUnits},
+			{<<"transform">>, Record#clipPath.transform},
+			{<<"externalResourcesRequired">>, Record#clipPath.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_presentation(Record),
+		Record#clipPath.data_fields,
+		Record#clipPath.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#clipPath.requiredExtensions},
+	{<<"requiredFeatures">>, Record#clipPath.requiredFeatures},
+	{<<"systemLanguage">>, Record#clipPath.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#clipPath.xmlbase},
+	{<<"xml:lang">>, Record#clipPath.xmllang},
+	{<<"xml:space">>, Record#clipPath.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#clipPath.alignment_baseline},
+	{<<"baseline-shift">>, Record#clipPath.baseline_shift},
+	{<<"clip">>, Record#clipPath.clip},
+	{<<"clip-path">>, Record#clipPath.clip_path},
+	{<<"clip-rule">>, Record#clipPath.clip_rule},
+	{<<"color">>, Record#clipPath.color},
+	{<<"color-interpolation">>, Record#clipPath.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#clipPath.color_interpolation_filters},
+	{<<"color-profile">>, Record#clipPath.color_profile},
+	{<<"color-rendering">>, Record#clipPath.color_rendering},
+	{<<"cursor">>, Record#clipPath.cursor},
+	{<<"direction">>, Record#clipPath.direction},
+	{<<"display">>, Record#clipPath.display},
+	{<<"dominant-baseline">>, Record#clipPath.dominant_baseline},
+	{<<"enable-background">>, Record#clipPath.enable_background},
+	{<<"fill">>, Record#clipPath.fill},
+	{<<"fill-opacity">>, Record#clipPath.fill_opacity},
+	{<<"fill-rule">>, Record#clipPath.fill_rule},
+	{<<"filter">>, Record#clipPath.filter},
+	{<<"flood-color">>, Record#clipPath.flood_color},
+	{<<"flood-opacity">>, Record#clipPath.flood_opacity},
+	{<<"font-family">>, Record#clipPath.font_family},
+	{<<"font-size">>, Record#clipPath.font_size},
+	{<<"font-size-adjust">>, Record#clipPath.font_size_adjust},
+	{<<"font-stretch">>, Record#clipPath.font_stretch},
+	{<<"font-style">>, Record#clipPath.font_style},
+	{<<"font-variant">>, Record#clipPath.font_variant},
+	{<<"font-weight">>, Record#clipPath.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#clipPath.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#clipPath.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#clipPath.image_rendering},
+	{<<"kerning">>, Record#clipPath.kerning},
+	{<<"letter-spacing">>, Record#clipPath.letter_spacing},
+	{<<"lighting-color">>, Record#clipPath.lighting_color},
+	{<<"marker-end">>, Record#clipPath.marker_end},
+	{<<"marker-mid">>, Record#clipPath.marker_mid},
+	{<<"marker-start">>, Record#clipPath.marker_start},
+	{<<"mask">>, Record#clipPath.mask},
+	{<<"opacity">>, Record#clipPath.opacity},
+	{<<"overflow">>, Record#clipPath.overflow},
+	{<<"pointer-events">>, Record#clipPath.pointer_events},
+	{<<"shape-rendering">>, Record#clipPath.shape_rendering},
+	{<<"stop-color">>, Record#clipPath.stop_color},
+	{<<"stop-opacity">>, Record#clipPath.stop_opacity},
+	{<<"stroke">>, Record#clipPath.stroke},
+	{<<"stroke-dasharray">>, Record#clipPath.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#clipPath.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#clipPath.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#clipPath.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#clipPath.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#clipPath.stroke_opacity},
+	{<<"stroke-width">>, Record#clipPath.stroke_width},
+	{<<"text-anchor">>, Record#clipPath.text_anchor},
+	{<<"text-decoration">>, Record#clipPath.text_decoration},
+	{<<"text-rendering">>, Record#clipPath.text_rendering},
+	{<<"unicode-bidi">>, Record#clipPath.unicode_bidi},
+	{<<"visibility">>, Record#clipPath.visibility},
+	{<<"word-spacing">>, Record#clipPath.word_spacing},
+	{<<"writing-mode">>, Record#clipPath.writing_mode}
+].

+ 39 - 0
src/element_colorprofile.erl

@@ -0,0 +1,39 @@
+-module(element_colorprofile).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"color-profile">>, nitro:render(Record#color_profile.body),
+	lists:append([
+		[
+			{<<"id">>, Record#color_profile.id},
+			{<<"class">>, Record#color_profile.class},
+			{<<"style">>, Record#color_profile.style},
+			{<<"local">>, Record#color_profile.local},
+			{<<"name">>, Record#color_profile.name},
+			{<<"rendering-intent">>, Record#color_profile.rendering_intent}
+		],
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#color_profile.data_fields,
+		Record#color_profile.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#color_profile.xmlbase},
+	{<<"xml:lang">>, Record#color_profile.xmllang},
+	{<<"xml:space">>, Record#color_profile.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#color_profile.xlinkhref},
+	{<<"xlink:type">>, Record#color_profile.xlinktype},
+	{<<"xlink:role">>, Record#color_profile.xlinkrole},
+	{<<"xlink:arcrole">>, Record#color_profile.xlinkarcrole},
+	{<<"xlink:title">>, Record#color_profile.xlinktitle},
+	{<<"xlink:show">>, Record#color_profile.xlinkshow},
+	{<<"xlink:actuate">>, Record#color_profile.xlinkactuate}
+].

+ 46 - 0
src/element_cursor.erl

@@ -0,0 +1,46 @@
+-module(element_cursor).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"cursor">>, nitro:render(Record#cursor.body),
+	lists:append([
+		[
+			{<<"id">>, Record#cursor.id},
+			{<<"class">>, Record#cursor.class},
+			{<<"style">>, Record#cursor.style},
+			{<<"x">>, Record#cursor.x},
+			{<<"y">>, Record#cursor.y},
+			{<<"externalResourcesRequired">>, Record#cursor.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#cursor.data_fields,
+		Record#cursor.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#cursor.requiredExtensions},
+	{<<"requiredFeatures">>, Record#cursor.requiredFeatures},
+	{<<"systemLanguage">>, Record#cursor.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#cursor.xmlbase},
+	{<<"xml:lang">>, Record#cursor.xmllang},
+	{<<"xml:space">>, Record#cursor.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#cursor.xlinkhref},
+	{<<"xlink:type">>, Record#cursor.xlinktype},
+	{<<"xlink:role">>, Record#cursor.xlinkrole},
+	{<<"xlink:arcrole">>, Record#cursor.xlinkarcrole},
+	{<<"xlink:title">>, Record#cursor.xlinktitle},
+	{<<"xlink:show">>, Record#cursor.xlinkshow},
+	{<<"xlink:actuate">>, Record#cursor.xlinkactuate}
+].

+ 111 - 0
src/element_defs.erl

@@ -0,0 +1,111 @@
+-module(element_defs).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"defs">>, nitro:render(Record#defs.body),
+	lists:append([
+		[
+			{<<"id">>, Record#defs.id},
+			{<<"class">>, Record#defs.class},
+			{<<"style">>, Record#defs.style},
+			{<<"transform">>, Record#defs.transform},
+			{<<"externalResourcesRequired">>, Record#defs.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#defs.data_fields,
+		Record#defs.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#defs.requiredExtensions},
+	{<<"requiredFeatures">>, Record#defs.requiredFeatures},
+	{<<"systemLanguage">>, Record#defs.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#defs.xmlbase},
+	{<<"xml:lang">>, Record#defs.xmllang},
+	{<<"xml:space">>, Record#defs.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#defs.onactivate},
+	{<<"onclick">>, Record#defs.onclick},
+	{<<"onfocusin">>, Record#defs.onfocusin},
+	{<<"onfocusout">>, Record#defs.onfocusout},
+	{<<"onload">>, Record#defs.onload_graphical},
+	{<<"onmousedown">>, Record#defs.onmousedown},
+	{<<"onmousemove">>, Record#defs.onmousemove},
+	{<<"onmouseout">>, Record#defs.onmouseout},
+	{<<"onmouseover">>, Record#defs.onmouseover},
+	{<<"onmouseup">>, Record#defs.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#defs.alignment_baseline},
+	{<<"baseline-shift">>, Record#defs.baseline_shift},
+	{<<"clip">>, Record#defs.clip},
+	{<<"clip-path">>, Record#defs.clip_path},
+	{<<"clip-rule">>, Record#defs.clip_rule},
+	{<<"color">>, Record#defs.color},
+	{<<"color-interpolation">>, Record#defs.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#defs.color_interpolation_filters},
+	{<<"color-profile">>, Record#defs.color_profile},
+	{<<"color-rendering">>, Record#defs.color_rendering},
+	{<<"cursor">>, Record#defs.cursor},
+	{<<"direction">>, Record#defs.direction},
+	{<<"display">>, Record#defs.display},
+	{<<"dominant-baseline">>, Record#defs.dominant_baseline},
+	{<<"enable-background">>, Record#defs.enable_background},
+	{<<"fill">>, Record#defs.fill},
+	{<<"fill-opacity">>, Record#defs.fill_opacity},
+	{<<"fill-rule">>, Record#defs.fill_rule},
+	{<<"filter">>, Record#defs.filter},
+	{<<"flood-color">>, Record#defs.flood_color},
+	{<<"flood-opacity">>, Record#defs.flood_opacity},
+	{<<"font-family">>, Record#defs.font_family},
+	{<<"font-size">>, Record#defs.font_size},
+	{<<"font-size-adjust">>, Record#defs.font_size_adjust},
+	{<<"font-stretch">>, Record#defs.font_stretch},
+	{<<"font-style">>, Record#defs.font_style},
+	{<<"font-variant">>, Record#defs.font_variant},
+	{<<"font-weight">>, Record#defs.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#defs.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#defs.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#defs.image_rendering},
+	{<<"kerning">>, Record#defs.kerning},
+	{<<"letter-spacing">>, Record#defs.letter_spacing},
+	{<<"lighting-color">>, Record#defs.lighting_color},
+	{<<"marker-end">>, Record#defs.marker_end},
+	{<<"marker-mid">>, Record#defs.marker_mid},
+	{<<"marker-start">>, Record#defs.marker_start},
+	{<<"mask">>, Record#defs.mask},
+	{<<"opacity">>, Record#defs.opacity},
+	{<<"overflow">>, Record#defs.overflow},
+	{<<"pointer-events">>, Record#defs.pointer_events},
+	{<<"shape-rendering">>, Record#defs.shape_rendering},
+	{<<"stop-color">>, Record#defs.stop_color},
+	{<<"stop-opacity">>, Record#defs.stop_opacity},
+	{<<"stroke">>, Record#defs.stroke},
+	{<<"stroke-dasharray">>, Record#defs.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#defs.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#defs.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#defs.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#defs.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#defs.stroke_opacity},
+	{<<"stroke-width">>, Record#defs.stroke_width},
+	{<<"text-anchor">>, Record#defs.text_anchor},
+	{<<"text-decoration">>, Record#defs.text_decoration},
+	{<<"text-rendering">>, Record#defs.text_rendering},
+	{<<"unicode-bidi">>, Record#defs.unicode_bidi},
+	{<<"visibility">>, Record#defs.visibility},
+	{<<"word-spacing">>, Record#defs.word_spacing},
+	{<<"writing-mode">>, Record#defs.writing_mode}
+].

+ 18 - 0
src/element_desc.erl

@@ -0,0 +1,18 @@
+-module(element_desc).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"desc">>, nitro:render(Record#desc.body),
+	lists:append([
+		[
+			{<<"id">>, Record#desc.id},
+			{<<"class">>, Record#desc.class},
+			{<<"xml:base">>, Record#desc.xmlbase},
+			{<<"xml:lang">>, Record#desc.xmllang},
+			{<<"xml:space">>, Record#desc.xmlspace}
+		],
+		Record#desc.data_fields,
+		Record#desc.aria_states
+	])).

+ 115 - 0
src/element_ellipse.erl

@@ -0,0 +1,115 @@
+-module(element_ellipse).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"ellipse">>, nitro:render(Record#ellipse.body),
+	lists:append([
+		[
+			{<<"id">>, Record#ellipse.id},
+			{<<"class">>, Record#ellipse.class},
+			{<<"style">>, Record#ellipse.style},
+			{<<"cx">>, Record#ellipse.cx},
+			{<<"cy">>, Record#ellipse.cy},
+			{<<"rx">>, Record#ellipse.rx},
+			{<<"ry">>, Record#ellipse.ry},
+			{<<"transform">>, Record#ellipse.transform},
+			{<<"externalResourcesRequired">>, Record#ellipse.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#ellipse.data_fields,
+		Record#ellipse.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#ellipse.requiredExtensions},
+	{<<"requiredFeatures">>, Record#ellipse.requiredFeatures},
+	{<<"systemLanguage">>, Record#ellipse.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#ellipse.xmlbase},
+	{<<"xml:lang">>, Record#ellipse.xmllang},
+	{<<"xml:space">>, Record#ellipse.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#ellipse.onactivate},
+	{<<"onclick">>, Record#ellipse.onclick},
+	{<<"onfocusin">>, Record#ellipse.onfocusin},
+	{<<"onfocusout">>, Record#ellipse.onfocusout},
+	{<<"onload">>, Record#ellipse.onload_graphical},
+	{<<"onmousedown">>, Record#ellipse.onmousedown},
+	{<<"onmousemove">>, Record#ellipse.onmousemove},
+	{<<"onmouseout">>, Record#ellipse.onmouseout},
+	{<<"onmouseover">>, Record#ellipse.onmouseover},
+	{<<"onmouseup">>, Record#ellipse.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#ellipse.alignment_baseline},
+	{<<"baseline-shift">>, Record#ellipse.baseline_shift},
+	{<<"clip">>, Record#ellipse.clip},
+	{<<"clip-path">>, Record#ellipse.clip_path},
+	{<<"clip-rule">>, Record#ellipse.clip_rule},
+	{<<"color">>, Record#ellipse.color},
+	{<<"color-interpolation">>, Record#ellipse.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#ellipse.color_interpolation_filters},
+	{<<"color-profile">>, Record#ellipse.color_profile},
+	{<<"color-rendering">>, Record#ellipse.color_rendering},
+	{<<"cursor">>, Record#ellipse.cursor},
+	{<<"direction">>, Record#ellipse.direction},
+	{<<"display">>, Record#ellipse.display},
+	{<<"dominant-baseline">>, Record#ellipse.dominant_baseline},
+	{<<"enable-background">>, Record#ellipse.enable_background},
+	{<<"fill">>, Record#ellipse.fill},
+	{<<"fill-opacity">>, Record#ellipse.fill_opacity},
+	{<<"fill-rule">>, Record#ellipse.fill_rule},
+	{<<"filter">>, Record#ellipse.filter},
+	{<<"flood-color">>, Record#ellipse.flood_color},
+	{<<"flood-opacity">>, Record#ellipse.flood_opacity},
+	{<<"font-family">>, Record#ellipse.font_family},
+	{<<"font-size">>, Record#ellipse.font_size},
+	{<<"font-size-adjust">>, Record#ellipse.font_size_adjust},
+	{<<"font-stretch">>, Record#ellipse.font_stretch},
+	{<<"font-style">>, Record#ellipse.font_style},
+	{<<"font-variant">>, Record#ellipse.font_variant},
+	{<<"font-weight">>, Record#ellipse.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#ellipse.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#ellipse.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#ellipse.image_rendering},
+	{<<"kerning">>, Record#ellipse.kerning},
+	{<<"letter-spacing">>, Record#ellipse.letter_spacing},
+	{<<"lighting-color">>, Record#ellipse.lighting_color},
+	{<<"marker-end">>, Record#ellipse.marker_end},
+	{<<"marker-mid">>, Record#ellipse.marker_mid},
+	{<<"marker-start">>, Record#ellipse.marker_start},
+	{<<"mask">>, Record#ellipse.mask},
+	{<<"opacity">>, Record#ellipse.opacity},
+	{<<"overflow">>, Record#ellipse.overflow},
+	{<<"pointer-events">>, Record#ellipse.pointer_events},
+	{<<"shape-rendering">>, Record#ellipse.shape_rendering},
+	{<<"stop-color">>, Record#ellipse.stop_color},
+	{<<"stop-opacity">>, Record#ellipse.stop_opacity},
+	{<<"stroke">>, Record#ellipse.stroke},
+	{<<"stroke-dasharray">>, Record#ellipse.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#ellipse.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#ellipse.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#ellipse.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#ellipse.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#ellipse.stroke_opacity},
+	{<<"stroke-width">>, Record#ellipse.stroke_width},
+	{<<"text-anchor">>, Record#ellipse.text_anchor},
+	{<<"text-decoration">>, Record#ellipse.text_decoration},
+	{<<"text-rendering">>, Record#ellipse.text_rendering},
+	{<<"unicode-bidi">>, Record#ellipse.unicode_bidi},
+	{<<"visibility">>, Record#ellipse.visibility},
+	{<<"word-spacing">>, Record#ellipse.word_spacing},
+	{<<"writing-mode">>, Record#ellipse.writing_mode}
+].

+ 100 - 0
src/element_feblend.erl

@@ -0,0 +1,100 @@
+-module(element_feblend).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feBlend">>, nitro:render(Record#feBlend.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feBlend.id},
+			{<<"class">>, Record#feBlend.class},
+			{<<"style">>, Record#feBlend.style},
+			{<<"in">>, Record#feBlend.in},
+			{<<"in2">>, Record#feBlend.in2},
+			{<<"mode">>, Record#feBlend.mode}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feBlend.data_fields,
+		Record#feBlend.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feBlend.xmlbase},
+	{<<"xml:lang">>, Record#feBlend.xmllang},
+	{<<"xml:space">>, Record#feBlend.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feBlend.height},
+	{<<"result">>, Record#feBlend.result},
+	{<<"width">>, Record#feBlend.width},
+	{<<"x">>, Record#feBlend.x},
+	{<<"y">>, Record#feBlend.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feBlend.alignment_baseline},
+	{<<"baseline-shift">>, Record#feBlend.baseline_shift},
+	{<<"clip">>, Record#feBlend.clip},
+	{<<"clip-path">>, Record#feBlend.clip_path},
+	{<<"clip-rule">>, Record#feBlend.clip_rule},
+	{<<"color">>, Record#feBlend.color},
+	{<<"color-interpolation">>, Record#feBlend.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feBlend.color_interpolation_filters},
+	{<<"color-profile">>, Record#feBlend.color_profile},
+	{<<"color-rendering">>, Record#feBlend.color_rendering},
+	{<<"cursor">>, Record#feBlend.cursor},
+	{<<"direction">>, Record#feBlend.direction},
+	{<<"display">>, Record#feBlend.display},
+	{<<"dominant-baseline">>, Record#feBlend.dominant_baseline},
+	{<<"enable-background">>, Record#feBlend.enable_background},
+	{<<"fill">>, Record#feBlend.fill},
+	{<<"fill-opacity">>, Record#feBlend.fill_opacity},
+	{<<"fill-rule">>, Record#feBlend.fill_rule},
+	{<<"filter">>, Record#feBlend.filter},
+	{<<"flood-color">>, Record#feBlend.flood_color},
+	{<<"flood-opacity">>, Record#feBlend.flood_opacity},
+	{<<"font-family">>, Record#feBlend.font_family},
+	{<<"font-size">>, Record#feBlend.font_size},
+	{<<"font-size-adjust">>, Record#feBlend.font_size_adjust},
+	{<<"font-stretch">>, Record#feBlend.font_stretch},
+	{<<"font-style">>, Record#feBlend.font_style},
+	{<<"font-variant">>, Record#feBlend.font_variant},
+	{<<"font-weight">>, Record#feBlend.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feBlend.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feBlend.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feBlend.image_rendering},
+	{<<"kerning">>, Record#feBlend.kerning},
+	{<<"letter-spacing">>, Record#feBlend.letter_spacing},
+	{<<"lighting-color">>, Record#feBlend.lighting_color},
+	{<<"marker-end">>, Record#feBlend.marker_end},
+	{<<"marker-mid">>, Record#feBlend.marker_mid},
+	{<<"marker-start">>, Record#feBlend.marker_start},
+	{<<"mask">>, Record#feBlend.mask},
+	{<<"opacity">>, Record#feBlend.opacity},
+	{<<"overflow">>, Record#feBlend.overflow},
+	{<<"pointer-events">>, Record#feBlend.pointer_events},
+	{<<"shape-rendering">>, Record#feBlend.shape_rendering},
+	{<<"stop-color">>, Record#feBlend.stop_color},
+	{<<"stop-opacity">>, Record#feBlend.stop_opacity},
+	{<<"stroke">>, Record#feBlend.stroke},
+	{<<"stroke-dasharray">>, Record#feBlend.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feBlend.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feBlend.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feBlend.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feBlend.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feBlend.stroke_opacity},
+	{<<"stroke-width">>, Record#feBlend.stroke_width},
+	{<<"text-anchor">>, Record#feBlend.text_anchor},
+	{<<"text-decoration">>, Record#feBlend.text_decoration},
+	{<<"text-rendering">>, Record#feBlend.text_rendering},
+	{<<"unicode-bidi">>, Record#feBlend.unicode_bidi},
+	{<<"visibility">>, Record#feBlend.visibility},
+	{<<"word-spacing">>, Record#feBlend.word_spacing},
+	{<<"writing-mode">>, Record#feBlend.writing_mode}
+].

+ 100 - 0
src/element_fecolormatrix.erl

@@ -0,0 +1,100 @@
+-module(element_fecolormatrix).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feColorMatrix">>, nitro:render(Record#feColorMatrix.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feColorMatrix.id},
+			{<<"class">>, Record#feColorMatrix.class},
+			{<<"style">>, Record#feColorMatrix.style},
+			{<<"in">>, Record#feColorMatrix.in},
+			{<<"type">>, Record#feColorMatrix.type},
+			{<<"values">>, Record#feColorMatrix.values}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feColorMatrix.data_fields,
+		Record#feColorMatrix.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feColorMatrix.xmlbase},
+	{<<"xml:lang">>, Record#feColorMatrix.xmllang},
+	{<<"xml:space">>, Record#feColorMatrix.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feColorMatrix.height},
+	{<<"result">>, Record#feColorMatrix.result},
+	{<<"width">>, Record#feColorMatrix.width},
+	{<<"x">>, Record#feColorMatrix.x},
+	{<<"y">>, Record#feColorMatrix.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feColorMatrix.alignment_baseline},
+	{<<"baseline-shift">>, Record#feColorMatrix.baseline_shift},
+	{<<"clip">>, Record#feColorMatrix.clip},
+	{<<"clip-path">>, Record#feColorMatrix.clip_path},
+	{<<"clip-rule">>, Record#feColorMatrix.clip_rule},
+	{<<"color">>, Record#feColorMatrix.color},
+	{<<"color-interpolation">>, Record#feColorMatrix.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feColorMatrix.color_interpolation_filters},
+	{<<"color-profile">>, Record#feColorMatrix.color_profile},
+	{<<"color-rendering">>, Record#feColorMatrix.color_rendering},
+	{<<"cursor">>, Record#feColorMatrix.cursor},
+	{<<"direction">>, Record#feColorMatrix.direction},
+	{<<"display">>, Record#feColorMatrix.display},
+	{<<"dominant-baseline">>, Record#feColorMatrix.dominant_baseline},
+	{<<"enable-background">>, Record#feColorMatrix.enable_background},
+	{<<"fill">>, Record#feColorMatrix.fill},
+	{<<"fill-opacity">>, Record#feColorMatrix.fill_opacity},
+	{<<"fill-rule">>, Record#feColorMatrix.fill_rule},
+	{<<"filter">>, Record#feColorMatrix.filter},
+	{<<"flood-color">>, Record#feColorMatrix.flood_color},
+	{<<"flood-opacity">>, Record#feColorMatrix.flood_opacity},
+	{<<"font-family">>, Record#feColorMatrix.font_family},
+	{<<"font-size">>, Record#feColorMatrix.font_size},
+	{<<"font-size-adjust">>, Record#feColorMatrix.font_size_adjust},
+	{<<"font-stretch">>, Record#feColorMatrix.font_stretch},
+	{<<"font-style">>, Record#feColorMatrix.font_style},
+	{<<"font-variant">>, Record#feColorMatrix.font_variant},
+	{<<"font-weight">>, Record#feColorMatrix.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feColorMatrix.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feColorMatrix.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feColorMatrix.image_rendering},
+	{<<"kerning">>, Record#feColorMatrix.kerning},
+	{<<"letter-spacing">>, Record#feColorMatrix.letter_spacing},
+	{<<"lighting-color">>, Record#feColorMatrix.lighting_color},
+	{<<"marker-end">>, Record#feColorMatrix.marker_end},
+	{<<"marker-mid">>, Record#feColorMatrix.marker_mid},
+	{<<"marker-start">>, Record#feColorMatrix.marker_start},
+	{<<"mask">>, Record#feColorMatrix.mask},
+	{<<"opacity">>, Record#feColorMatrix.opacity},
+	{<<"overflow">>, Record#feColorMatrix.overflow},
+	{<<"pointer-events">>, Record#feColorMatrix.pointer_events},
+	{<<"shape-rendering">>, Record#feColorMatrix.shape_rendering},
+	{<<"stop-color">>, Record#feColorMatrix.stop_color},
+	{<<"stop-opacity">>, Record#feColorMatrix.stop_opacity},
+	{<<"stroke">>, Record#feColorMatrix.stroke},
+	{<<"stroke-dasharray">>, Record#feColorMatrix.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feColorMatrix.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feColorMatrix.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feColorMatrix.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feColorMatrix.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feColorMatrix.stroke_opacity},
+	{<<"stroke-width">>, Record#feColorMatrix.stroke_width},
+	{<<"text-anchor">>, Record#feColorMatrix.text_anchor},
+	{<<"text-decoration">>, Record#feColorMatrix.text_decoration},
+	{<<"text-rendering">>, Record#feColorMatrix.text_rendering},
+	{<<"unicode-bidi">>, Record#feColorMatrix.unicode_bidi},
+	{<<"visibility">>, Record#feColorMatrix.visibility},
+	{<<"word-spacing">>, Record#feColorMatrix.word_spacing},
+	{<<"writing-mode">>, Record#feColorMatrix.writing_mode}
+].

+ 98 - 0
src/element_fecomponenttransfer.erl

@@ -0,0 +1,98 @@
+-module(element_fecomponenttransfer).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feComponentTransfer">>, nitro:render(Record#feComponentTransfer.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feComponentTransfer.id},
+			{<<"class">>, Record#feComponentTransfer.class},
+			{<<"style">>, Record#feComponentTransfer.style},
+			{<<"in">>, Record#feComponentTransfer.in}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feComponentTransfer.data_fields,
+		Record#feComponentTransfer.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feComponentTransfer.xmlbase},
+	{<<"xml:lang">>, Record#feComponentTransfer.xmllang},
+	{<<"xml:space">>, Record#feComponentTransfer.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feComponentTransfer.height},
+	{<<"result">>, Record#feComponentTransfer.result},
+	{<<"width">>, Record#feComponentTransfer.width},
+	{<<"x">>, Record#feComponentTransfer.x},
+	{<<"y">>, Record#feComponentTransfer.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feComponentTransfer.alignment_baseline},
+	{<<"baseline-shift">>, Record#feComponentTransfer.baseline_shift},
+	{<<"clip">>, Record#feComponentTransfer.clip},
+	{<<"clip-path">>, Record#feComponentTransfer.clip_path},
+	{<<"clip-rule">>, Record#feComponentTransfer.clip_rule},
+	{<<"color">>, Record#feComponentTransfer.color},
+	{<<"color-interpolation">>, Record#feComponentTransfer.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feComponentTransfer.color_interpolation_filters},
+	{<<"color-profile">>, Record#feComponentTransfer.color_profile},
+	{<<"color-rendering">>, Record#feComponentTransfer.color_rendering},
+	{<<"cursor">>, Record#feComponentTransfer.cursor},
+	{<<"direction">>, Record#feComponentTransfer.direction},
+	{<<"display">>, Record#feComponentTransfer.display},
+	{<<"dominant-baseline">>, Record#feComponentTransfer.dominant_baseline},
+	{<<"enable-background">>, Record#feComponentTransfer.enable_background},
+	{<<"fill">>, Record#feComponentTransfer.fill},
+	{<<"fill-opacity">>, Record#feComponentTransfer.fill_opacity},
+	{<<"fill-rule">>, Record#feComponentTransfer.fill_rule},
+	{<<"filter">>, Record#feComponentTransfer.filter},
+	{<<"flood-color">>, Record#feComponentTransfer.flood_color},
+	{<<"flood-opacity">>, Record#feComponentTransfer.flood_opacity},
+	{<<"font-family">>, Record#feComponentTransfer.font_family},
+	{<<"font-size">>, Record#feComponentTransfer.font_size},
+	{<<"font-size-adjust">>, Record#feComponentTransfer.font_size_adjust},
+	{<<"font-stretch">>, Record#feComponentTransfer.font_stretch},
+	{<<"font-style">>, Record#feComponentTransfer.font_style},
+	{<<"font-variant">>, Record#feComponentTransfer.font_variant},
+	{<<"font-weight">>, Record#feComponentTransfer.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feComponentTransfer.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feComponentTransfer.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feComponentTransfer.image_rendering},
+	{<<"kerning">>, Record#feComponentTransfer.kerning},
+	{<<"letter-spacing">>, Record#feComponentTransfer.letter_spacing},
+	{<<"lighting-color">>, Record#feComponentTransfer.lighting_color},
+	{<<"marker-end">>, Record#feComponentTransfer.marker_end},
+	{<<"marker-mid">>, Record#feComponentTransfer.marker_mid},
+	{<<"marker-start">>, Record#feComponentTransfer.marker_start},
+	{<<"mask">>, Record#feComponentTransfer.mask},
+	{<<"opacity">>, Record#feComponentTransfer.opacity},
+	{<<"overflow">>, Record#feComponentTransfer.overflow},
+	{<<"pointer-events">>, Record#feComponentTransfer.pointer_events},
+	{<<"shape-rendering">>, Record#feComponentTransfer.shape_rendering},
+	{<<"stop-color">>, Record#feComponentTransfer.stop_color},
+	{<<"stop-opacity">>, Record#feComponentTransfer.stop_opacity},
+	{<<"stroke">>, Record#feComponentTransfer.stroke},
+	{<<"stroke-dasharray">>, Record#feComponentTransfer.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feComponentTransfer.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feComponentTransfer.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feComponentTransfer.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feComponentTransfer.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feComponentTransfer.stroke_opacity},
+	{<<"stroke-width">>, Record#feComponentTransfer.stroke_width},
+	{<<"text-anchor">>, Record#feComponentTransfer.text_anchor},
+	{<<"text-decoration">>, Record#feComponentTransfer.text_decoration},
+	{<<"text-rendering">>, Record#feComponentTransfer.text_rendering},
+	{<<"unicode-bidi">>, Record#feComponentTransfer.unicode_bidi},
+	{<<"visibility">>, Record#feComponentTransfer.visibility},
+	{<<"word-spacing">>, Record#feComponentTransfer.word_spacing},
+	{<<"writing-mode">>, Record#feComponentTransfer.writing_mode}
+].

+ 104 - 0
src/element_fecomposite.erl

@@ -0,0 +1,104 @@
+-module(element_fecomposite).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feComposite">>, nitro:render(Record#feComposite.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feComposite.id},
+			{<<"class">>, Record#feComposite.class},
+			{<<"style">>, Record#feComposite.style},
+			{<<"in">>, Record#feComposite.in},
+			{<<"in2">>, Record#feComposite.in2},
+			{<<"operator">>, Record#feComposite.operator},
+			{<<"k1">>, Record#feComposite.k1},
+			{<<"k2">>, Record#feComposite.k2},
+			{<<"k3">>, Record#feComposite.k3},
+			{<<"k4">>, Record#feComposite.k4}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feComposite.data_fields,
+		Record#feComposite.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feComposite.xmlbase},
+	{<<"xml:lang">>, Record#feComposite.xmllang},
+	{<<"xml:space">>, Record#feComposite.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feComposite.height},
+	{<<"result">>, Record#feComposite.result},
+	{<<"width">>, Record#feComposite.width},
+	{<<"x">>, Record#feComposite.x},
+	{<<"y">>, Record#feComposite.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feComposite.alignment_baseline},
+	{<<"baseline-shift">>, Record#feComposite.baseline_shift},
+	{<<"clip">>, Record#feComposite.clip},
+	{<<"clip-path">>, Record#feComposite.clip_path},
+	{<<"clip-rule">>, Record#feComposite.clip_rule},
+	{<<"color">>, Record#feComposite.color},
+	{<<"color-interpolation">>, Record#feComposite.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feComposite.color_interpolation_filters},
+	{<<"color-profile">>, Record#feComposite.color_profile},
+	{<<"color-rendering">>, Record#feComposite.color_rendering},
+	{<<"cursor">>, Record#feComposite.cursor},
+	{<<"direction">>, Record#feComposite.direction},
+	{<<"display">>, Record#feComposite.display},
+	{<<"dominant-baseline">>, Record#feComposite.dominant_baseline},
+	{<<"enable-background">>, Record#feComposite.enable_background},
+	{<<"fill">>, Record#feComposite.fill},
+	{<<"fill-opacity">>, Record#feComposite.fill_opacity},
+	{<<"fill-rule">>, Record#feComposite.fill_rule},
+	{<<"filter">>, Record#feComposite.filter},
+	{<<"flood-color">>, Record#feComposite.flood_color},
+	{<<"flood-opacity">>, Record#feComposite.flood_opacity},
+	{<<"font-family">>, Record#feComposite.font_family},
+	{<<"font-size">>, Record#feComposite.font_size},
+	{<<"font-size-adjust">>, Record#feComposite.font_size_adjust},
+	{<<"font-stretch">>, Record#feComposite.font_stretch},
+	{<<"font-style">>, Record#feComposite.font_style},
+	{<<"font-variant">>, Record#feComposite.font_variant},
+	{<<"font-weight">>, Record#feComposite.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feComposite.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feComposite.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feComposite.image_rendering},
+	{<<"kerning">>, Record#feComposite.kerning},
+	{<<"letter-spacing">>, Record#feComposite.letter_spacing},
+	{<<"lighting-color">>, Record#feComposite.lighting_color},
+	{<<"marker-end">>, Record#feComposite.marker_end},
+	{<<"marker-mid">>, Record#feComposite.marker_mid},
+	{<<"marker-start">>, Record#feComposite.marker_start},
+	{<<"mask">>, Record#feComposite.mask},
+	{<<"opacity">>, Record#feComposite.opacity},
+	{<<"overflow">>, Record#feComposite.overflow},
+	{<<"pointer-events">>, Record#feComposite.pointer_events},
+	{<<"shape-rendering">>, Record#feComposite.shape_rendering},
+	{<<"stop-color">>, Record#feComposite.stop_color},
+	{<<"stop-opacity">>, Record#feComposite.stop_opacity},
+	{<<"stroke">>, Record#feComposite.stroke},
+	{<<"stroke-dasharray">>, Record#feComposite.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feComposite.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feComposite.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feComposite.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feComposite.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feComposite.stroke_opacity},
+	{<<"stroke-width">>, Record#feComposite.stroke_width},
+	{<<"text-anchor">>, Record#feComposite.text_anchor},
+	{<<"text-decoration">>, Record#feComposite.text_decoration},
+	{<<"text-rendering">>, Record#feComposite.text_rendering},
+	{<<"unicode-bidi">>, Record#feComposite.unicode_bidi},
+	{<<"visibility">>, Record#feComposite.visibility},
+	{<<"word-spacing">>, Record#feComposite.word_spacing},
+	{<<"writing-mode">>, Record#feComposite.writing_mode}
+].

+ 106 - 0
src/element_feconvolvematrix.erl

@@ -0,0 +1,106 @@
+-module(element_feconvolvematrix).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feConvolveMatrix">>, nitro:render(Record#feConvolveMatrix.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feConvolveMatrix.id},
+			{<<"class">>, Record#feConvolveMatrix.class},
+			{<<"style">>, Record#feConvolveMatrix.style},
+			{<<"in">>, Record#feConvolveMatrix.in},
+			{<<"order">>, Record#feConvolveMatrix.order},
+			{<<"kernelMatrix">>, Record#feConvolveMatrix.kernelMatrix},
+			{<<"divisor">>, Record#feConvolveMatrix.divisor},
+			{<<"bias">>, Record#feConvolveMatrix.bias},
+			{<<"targetX">>, Record#feConvolveMatrix.targetX},
+			{<<"targetY">>, Record#feConvolveMatrix.order},
+			{<<"edgeMode">>, Record#feConvolveMatrix.edgeMode},
+			{<<"kernelUnitLength">>, Record#feConvolveMatrix.kernelUnitLength}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feConvolveMatrix.data_fields,
+		Record#feConvolveMatrix.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feConvolveMatrix.xmlbase},
+	{<<"xml:lang">>, Record#feConvolveMatrix.xmllang},
+	{<<"xml:space">>, Record#feConvolveMatrix.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feConvolveMatrix.height},
+	{<<"result">>, Record#feConvolveMatrix.result},
+	{<<"width">>, Record#feConvolveMatrix.width},
+	{<<"x">>, Record#feConvolveMatrix.x},
+	{<<"y">>, Record#feConvolveMatrix.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feConvolveMatrix.alignment_baseline},
+	{<<"baseline-shift">>, Record#feConvolveMatrix.baseline_shift},
+	{<<"clip">>, Record#feConvolveMatrix.clip},
+	{<<"clip-path">>, Record#feConvolveMatrix.clip_path},
+	{<<"clip-rule">>, Record#feConvolveMatrix.clip_rule},
+	{<<"color">>, Record#feConvolveMatrix.color},
+	{<<"color-interpolation">>, Record#feConvolveMatrix.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feConvolveMatrix.color_interpolation_filters},
+	{<<"color-profile">>, Record#feConvolveMatrix.color_profile},
+	{<<"color-rendering">>, Record#feConvolveMatrix.color_rendering},
+	{<<"cursor">>, Record#feConvolveMatrix.cursor},
+	{<<"direction">>, Record#feConvolveMatrix.direction},
+	{<<"display">>, Record#feConvolveMatrix.display},
+	{<<"dominant-baseline">>, Record#feConvolveMatrix.dominant_baseline},
+	{<<"enable-background">>, Record#feConvolveMatrix.enable_background},
+	{<<"fill">>, Record#feConvolveMatrix.fill},
+	{<<"fill-opacity">>, Record#feConvolveMatrix.fill_opacity},
+	{<<"fill-rule">>, Record#feConvolveMatrix.fill_rule},
+	{<<"filter">>, Record#feConvolveMatrix.filter},
+	{<<"flood-color">>, Record#feConvolveMatrix.flood_color},
+	{<<"flood-opacity">>, Record#feConvolveMatrix.flood_opacity},
+	{<<"font-family">>, Record#feConvolveMatrix.font_family},
+	{<<"font-size">>, Record#feConvolveMatrix.font_size},
+	{<<"font-size-adjust">>, Record#feConvolveMatrix.font_size_adjust},
+	{<<"font-stretch">>, Record#feConvolveMatrix.font_stretch},
+	{<<"font-style">>, Record#feConvolveMatrix.font_style},
+	{<<"font-variant">>, Record#feConvolveMatrix.font_variant},
+	{<<"font-weight">>, Record#feConvolveMatrix.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feConvolveMatrix.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feConvolveMatrix.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feConvolveMatrix.image_rendering},
+	{<<"kerning">>, Record#feConvolveMatrix.kerning},
+	{<<"letter-spacing">>, Record#feConvolveMatrix.letter_spacing},
+	{<<"lighting-color">>, Record#feConvolveMatrix.lighting_color},
+	{<<"marker-end">>, Record#feConvolveMatrix.marker_end},
+	{<<"marker-mid">>, Record#feConvolveMatrix.marker_mid},
+	{<<"marker-start">>, Record#feConvolveMatrix.marker_start},
+	{<<"mask">>, Record#feConvolveMatrix.mask},
+	{<<"opacity">>, Record#feConvolveMatrix.opacity},
+	{<<"overflow">>, Record#feConvolveMatrix.overflow},
+	{<<"pointer-events">>, Record#feConvolveMatrix.pointer_events},
+	{<<"shape-rendering">>, Record#feConvolveMatrix.shape_rendering},
+	{<<"stop-color">>, Record#feConvolveMatrix.stop_color},
+	{<<"stop-opacity">>, Record#feConvolveMatrix.stop_opacity},
+	{<<"stroke">>, Record#feConvolveMatrix.stroke},
+	{<<"stroke-dasharray">>, Record#feConvolveMatrix.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feConvolveMatrix.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feConvolveMatrix.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feConvolveMatrix.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feConvolveMatrix.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feConvolveMatrix.stroke_opacity},
+	{<<"stroke-width">>, Record#feConvolveMatrix.stroke_width},
+	{<<"text-anchor">>, Record#feConvolveMatrix.text_anchor},
+	{<<"text-decoration">>, Record#feConvolveMatrix.text_decoration},
+	{<<"text-rendering">>, Record#feConvolveMatrix.text_rendering},
+	{<<"unicode-bidi">>, Record#feConvolveMatrix.unicode_bidi},
+	{<<"visibility">>, Record#feConvolveMatrix.visibility},
+	{<<"word-spacing">>, Record#feConvolveMatrix.word_spacing},
+	{<<"writing-mode">>, Record#feConvolveMatrix.writing_mode}
+].

+ 101 - 0
src/element_fediffuselighting.erl

@@ -0,0 +1,101 @@
+-module(element_fediffuselighting).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feDiffuseLighting">>, nitro:render(Record#feDiffuseLighting.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feDiffuseLighting.id},
+			{<<"class">>, Record#feDiffuseLighting.class},
+			{<<"style">>, Record#feDiffuseLighting.style},
+			{<<"in">>, Record#feDiffuseLighting.in},
+			{<<"surfaceScale">>, Record#feDiffuseLighting.surfaceScale},
+			{<<"diffuseConstant">>, Record#feDiffuseLighting.diffuseConstant},
+			{<<"kernelUnitLength">>, Record#feDiffuseLighting.kernelUnitLength}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feDiffuseLighting.data_fields,
+		Record#feDiffuseLighting.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feDiffuseLighting.xmlbase},
+	{<<"xml:lang">>, Record#feDiffuseLighting.xmllang},
+	{<<"xml:space">>, Record#feDiffuseLighting.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feDiffuseLighting.height},
+	{<<"result">>, Record#feDiffuseLighting.result},
+	{<<"width">>, Record#feDiffuseLighting.width},
+	{<<"x">>, Record#feDiffuseLighting.x},
+	{<<"y">>, Record#feDiffuseLighting.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feDiffuseLighting.alignment_baseline},
+	{<<"baseline-shift">>, Record#feDiffuseLighting.baseline_shift},
+	{<<"clip">>, Record#feDiffuseLighting.clip},
+	{<<"clip-path">>, Record#feDiffuseLighting.clip_path},
+	{<<"clip-rule">>, Record#feDiffuseLighting.clip_rule},
+	{<<"color">>, Record#feDiffuseLighting.color},
+	{<<"color-interpolation">>, Record#feDiffuseLighting.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feDiffuseLighting.color_interpolation_filters},
+	{<<"color-profile">>, Record#feDiffuseLighting.color_profile},
+	{<<"color-rendering">>, Record#feDiffuseLighting.color_rendering},
+	{<<"cursor">>, Record#feDiffuseLighting.cursor},
+	{<<"direction">>, Record#feDiffuseLighting.direction},
+	{<<"display">>, Record#feDiffuseLighting.display},
+	{<<"dominant-baseline">>, Record#feDiffuseLighting.dominant_baseline},
+	{<<"enable-background">>, Record#feDiffuseLighting.enable_background},
+	{<<"fill">>, Record#feDiffuseLighting.fill},
+	{<<"fill-opacity">>, Record#feDiffuseLighting.fill_opacity},
+	{<<"fill-rule">>, Record#feDiffuseLighting.fill_rule},
+	{<<"filter">>, Record#feDiffuseLighting.filter},
+	{<<"flood-color">>, Record#feDiffuseLighting.flood_color},
+	{<<"flood-opacity">>, Record#feDiffuseLighting.flood_opacity},
+	{<<"font-family">>, Record#feDiffuseLighting.font_family},
+	{<<"font-size">>, Record#feDiffuseLighting.font_size},
+	{<<"font-size-adjust">>, Record#feDiffuseLighting.font_size_adjust},
+	{<<"font-stretch">>, Record#feDiffuseLighting.font_stretch},
+	{<<"font-style">>, Record#feDiffuseLighting.font_style},
+	{<<"font-variant">>, Record#feDiffuseLighting.font_variant},
+	{<<"font-weight">>, Record#feDiffuseLighting.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feDiffuseLighting.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feDiffuseLighting.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feDiffuseLighting.image_rendering},
+	{<<"kerning">>, Record#feDiffuseLighting.kerning},
+	{<<"letter-spacing">>, Record#feDiffuseLighting.letter_spacing},
+	{<<"lighting-color">>, Record#feDiffuseLighting.lighting_color},
+	{<<"marker-end">>, Record#feDiffuseLighting.marker_end},
+	{<<"marker-mid">>, Record#feDiffuseLighting.marker_mid},
+	{<<"marker-start">>, Record#feDiffuseLighting.marker_start},
+	{<<"mask">>, Record#feDiffuseLighting.mask},
+	{<<"opacity">>, Record#feDiffuseLighting.opacity},
+	{<<"overflow">>, Record#feDiffuseLighting.overflow},
+	{<<"pointer-events">>, Record#feDiffuseLighting.pointer_events},
+	{<<"shape-rendering">>, Record#feDiffuseLighting.shape_rendering},
+	{<<"stop-color">>, Record#feDiffuseLighting.stop_color},
+	{<<"stop-opacity">>, Record#feDiffuseLighting.stop_opacity},
+	{<<"stroke">>, Record#feDiffuseLighting.stroke},
+	{<<"stroke-dasharray">>, Record#feDiffuseLighting.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feDiffuseLighting.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feDiffuseLighting.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feDiffuseLighting.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feDiffuseLighting.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feDiffuseLighting.stroke_opacity},
+	{<<"stroke-width">>, Record#feDiffuseLighting.stroke_width},
+	{<<"text-anchor">>, Record#feDiffuseLighting.text_anchor},
+	{<<"text-decoration">>, Record#feDiffuseLighting.text_decoration},
+	{<<"text-rendering">>, Record#feDiffuseLighting.text_rendering},
+	{<<"unicode-bidi">>, Record#feDiffuseLighting.unicode_bidi},
+	{<<"visibility">>, Record#feDiffuseLighting.visibility},
+	{<<"word-spacing">>, Record#feDiffuseLighting.word_spacing},
+	{<<"writing-mode">>, Record#feDiffuseLighting.writing_mode}
+].

+ 102 - 0
src/element_fedisplacementmap.erl

@@ -0,0 +1,102 @@
+-module(element_fedisplacementmap).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feDisplacementMap">>, nitro:render(Record#feDisplacementMap.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feDisplacementMap.id},
+			{<<"class">>, Record#feDisplacementMap.class},
+			{<<"style">>, Record#feDisplacementMap.style},
+			{<<"in">>, Record#feDisplacementMap.in},
+			{<<"in2">>, Record#feDisplacementMap.in2},
+			{<<"scale">>, Record#feDisplacementMap.scale},
+			{<<"xChannelSelector">>, Record#feDisplacementMap.xChannelSelector},
+			{<<"yChannelSelector">>, Record#feDisplacementMap.yChannelSelector}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feDisplacementMap.data_fields,
+		Record#feDisplacementMap.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feDisplacementMap.xmlbase},
+	{<<"xml:lang">>, Record#feDisplacementMap.xmllang},
+	{<<"xml:space">>, Record#feDisplacementMap.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feDisplacementMap.height},
+	{<<"result">>, Record#feDisplacementMap.result},
+	{<<"width">>, Record#feDisplacementMap.width},
+	{<<"x">>, Record#feDisplacementMap.x},
+	{<<"y">>, Record#feDisplacementMap.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feDisplacementMap.alignment_baseline},
+	{<<"baseline-shift">>, Record#feDisplacementMap.baseline_shift},
+	{<<"clip">>, Record#feDisplacementMap.clip},
+	{<<"clip-path">>, Record#feDisplacementMap.clip_path},
+	{<<"clip-rule">>, Record#feDisplacementMap.clip_rule},
+	{<<"color">>, Record#feDisplacementMap.color},
+	{<<"color-interpolation">>, Record#feDisplacementMap.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feDisplacementMap.color_interpolation_filters},
+	{<<"color-profile">>, Record#feDisplacementMap.color_profile},
+	{<<"color-rendering">>, Record#feDisplacementMap.color_rendering},
+	{<<"cursor">>, Record#feDisplacementMap.cursor},
+	{<<"direction">>, Record#feDisplacementMap.direction},
+	{<<"display">>, Record#feDisplacementMap.display},
+	{<<"dominant-baseline">>, Record#feDisplacementMap.dominant_baseline},
+	{<<"enable-background">>, Record#feDisplacementMap.enable_background},
+	{<<"fill">>, Record#feDisplacementMap.fill},
+	{<<"fill-opacity">>, Record#feDisplacementMap.fill_opacity},
+	{<<"fill-rule">>, Record#feDisplacementMap.fill_rule},
+	{<<"filter">>, Record#feDisplacementMap.filter},
+	{<<"flood-color">>, Record#feDisplacementMap.flood_color},
+	{<<"flood-opacity">>, Record#feDisplacementMap.flood_opacity},
+	{<<"font-family">>, Record#feDisplacementMap.font_family},
+	{<<"font-size">>, Record#feDisplacementMap.font_size},
+	{<<"font-size-adjust">>, Record#feDisplacementMap.font_size_adjust},
+	{<<"font-stretch">>, Record#feDisplacementMap.font_stretch},
+	{<<"font-style">>, Record#feDisplacementMap.font_style},
+	{<<"font-variant">>, Record#feDisplacementMap.font_variant},
+	{<<"font-weight">>, Record#feDisplacementMap.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feDisplacementMap.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feDisplacementMap.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feDisplacementMap.image_rendering},
+	{<<"kerning">>, Record#feDisplacementMap.kerning},
+	{<<"letter-spacing">>, Record#feDisplacementMap.letter_spacing},
+	{<<"lighting-color">>, Record#feDisplacementMap.lighting_color},
+	{<<"marker-end">>, Record#feDisplacementMap.marker_end},
+	{<<"marker-mid">>, Record#feDisplacementMap.marker_mid},
+	{<<"marker-start">>, Record#feDisplacementMap.marker_start},
+	{<<"mask">>, Record#feDisplacementMap.mask},
+	{<<"opacity">>, Record#feDisplacementMap.opacity},
+	{<<"overflow">>, Record#feDisplacementMap.overflow},
+	{<<"pointer-events">>, Record#feDisplacementMap.pointer_events},
+	{<<"shape-rendering">>, Record#feDisplacementMap.shape_rendering},
+	{<<"stop-color">>, Record#feDisplacementMap.stop_color},
+	{<<"stop-opacity">>, Record#feDisplacementMap.stop_opacity},
+	{<<"stroke">>, Record#feDisplacementMap.stroke},
+	{<<"stroke-dasharray">>, Record#feDisplacementMap.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feDisplacementMap.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feDisplacementMap.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feDisplacementMap.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feDisplacementMap.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feDisplacementMap.stroke_opacity},
+	{<<"stroke-width">>, Record#feDisplacementMap.stroke_width},
+	{<<"text-anchor">>, Record#feDisplacementMap.text_anchor},
+	{<<"text-decoration">>, Record#feDisplacementMap.text_decoration},
+	{<<"text-rendering">>, Record#feDisplacementMap.text_rendering},
+	{<<"unicode-bidi">>, Record#feDisplacementMap.unicode_bidi},
+	{<<"visibility">>, Record#feDisplacementMap.visibility},
+	{<<"word-spacing">>, Record#feDisplacementMap.word_spacing},
+	{<<"writing-mode">>, Record#feDisplacementMap.writing_mode}
+].

+ 27 - 0
src/element_fedistantlight.erl

@@ -0,0 +1,27 @@
+-module(element_fedistantlight).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feDistantLight">>, nitro:render(Record#feDistantLight.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feDistantLight.id},
+			{<<"class">>, Record#feDistantLight.class},
+			{<<"style">>, Record#feDistantLight.style},
+			{<<"azimuth">>, Record#feDistantLight.azimuth},
+			{<<"elevation">>, Record#feDistantLight.elevation}
+		],
+		svg_core(Record),
+		Record#feDistantLight.data_fields,
+		Record#feDistantLight.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feDistantLight.xmlbase},
+	{<<"xml:lang">>, Record#feDistantLight.xmllang},
+	{<<"xml:space">>, Record#feDistantLight.xmlspace}
+].

+ 97 - 0
src/element_feflood.erl

@@ -0,0 +1,97 @@
+-module(element_feflood).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feFlood">>, nitro:render(Record#feFlood.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feFlood.id},
+			{<<"class">>, Record#feFlood.class},
+			{<<"style">>, Record#feFlood.style}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feFlood.data_fields,
+		Record#feFlood.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feFlood.xmlbase},
+	{<<"xml:lang">>, Record#feFlood.xmllang},
+	{<<"xml:space">>, Record#feFlood.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feFlood.height},
+	{<<"result">>, Record#feFlood.result},
+	{<<"width">>, Record#feFlood.width},
+	{<<"x">>, Record#feFlood.x},
+	{<<"y">>, Record#feFlood.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feFlood.alignment_baseline},
+	{<<"baseline-shift">>, Record#feFlood.baseline_shift},
+	{<<"clip">>, Record#feFlood.clip},
+	{<<"clip-path">>, Record#feFlood.clip_path},
+	{<<"clip-rule">>, Record#feFlood.clip_rule},
+	{<<"color">>, Record#feFlood.color},
+	{<<"color-interpolation">>, Record#feFlood.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feFlood.color_interpolation_filters},
+	{<<"color-profile">>, Record#feFlood.color_profile},
+	{<<"color-rendering">>, Record#feFlood.color_rendering},
+	{<<"cursor">>, Record#feFlood.cursor},
+	{<<"direction">>, Record#feFlood.direction},
+	{<<"display">>, Record#feFlood.display},
+	{<<"dominant-baseline">>, Record#feFlood.dominant_baseline},
+	{<<"enable-background">>, Record#feFlood.enable_background},
+	{<<"fill">>, Record#feFlood.fill},
+	{<<"fill-opacity">>, Record#feFlood.fill_opacity},
+	{<<"fill-rule">>, Record#feFlood.fill_rule},
+	{<<"filter">>, Record#feFlood.filter},
+	{<<"flood-color">>, Record#feFlood.flood_color},
+	{<<"flood-opacity">>, Record#feFlood.flood_opacity},
+	{<<"font-family">>, Record#feFlood.font_family},
+	{<<"font-size">>, Record#feFlood.font_size},
+	{<<"font-size-adjust">>, Record#feFlood.font_size_adjust},
+	{<<"font-stretch">>, Record#feFlood.font_stretch},
+	{<<"font-style">>, Record#feFlood.font_style},
+	{<<"font-variant">>, Record#feFlood.font_variant},
+	{<<"font-weight">>, Record#feFlood.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feFlood.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feFlood.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feFlood.image_rendering},
+	{<<"kerning">>, Record#feFlood.kerning},
+	{<<"letter-spacing">>, Record#feFlood.letter_spacing},
+	{<<"lighting-color">>, Record#feFlood.lighting_color},
+	{<<"marker-end">>, Record#feFlood.marker_end},
+	{<<"marker-mid">>, Record#feFlood.marker_mid},
+	{<<"marker-start">>, Record#feFlood.marker_start},
+	{<<"mask">>, Record#feFlood.mask},
+	{<<"opacity">>, Record#feFlood.opacity},
+	{<<"overflow">>, Record#feFlood.overflow},
+	{<<"pointer-events">>, Record#feFlood.pointer_events},
+	{<<"shape-rendering">>, Record#feFlood.shape_rendering},
+	{<<"stop-color">>, Record#feFlood.stop_color},
+	{<<"stop-opacity">>, Record#feFlood.stop_opacity},
+	{<<"stroke">>, Record#feFlood.stroke},
+	{<<"stroke-dasharray">>, Record#feFlood.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feFlood.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feFlood.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feFlood.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feFlood.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feFlood.stroke_opacity},
+	{<<"stroke-width">>, Record#feFlood.stroke_width},
+	{<<"text-anchor">>, Record#feFlood.text_anchor},
+	{<<"text-decoration">>, Record#feFlood.text_decoration},
+	{<<"text-rendering">>, Record#feFlood.text_rendering},
+	{<<"unicode-bidi">>, Record#feFlood.unicode_bidi},
+	{<<"visibility">>, Record#feFlood.visibility},
+	{<<"word-spacing">>, Record#feFlood.word_spacing},
+	{<<"writing-mode">>, Record#feFlood.writing_mode}
+].

+ 36 - 0
src/element_fefunca.erl

@@ -0,0 +1,36 @@
+-module(element_fefunca).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feFuncA">>, nitro:render(Record#feFuncA.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feFuncA.id},
+			{<<"class">>, Record#feFuncA.class},
+			{<<"style">>, Record#feFuncA.style}
+		],
+		svg_core(Record),
+		svg_transfert_function(Record),
+		Record#feFuncA.data_fields,
+		Record#feFuncA.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feFuncA.xmlbase},
+	{<<"xml:lang">>, Record#feFuncA.xmllang},
+	{<<"xml:space">>, Record#feFuncA.xmlspace}
+].
+
+svg_transfert_function(Record)-> [
+	{<<"type">>, Record#feFuncA.type},
+	{<<"tableValues">>, Record#feFuncA.tableValues},
+	{<<"slope">>, Record#feFuncA.slope},
+	{<<"intercept">>, Record#feFuncA.intercept},
+	{<<"amplitude">>, Record#feFuncA.amplitude},
+	{<<"exponent">>, Record#feFuncA.exponent},
+	{<<"offset">>, Record#feFuncA.offset}
+].

+ 36 - 0
src/element_fefuncb.erl

@@ -0,0 +1,36 @@
+-module(element_fefuncb).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feFuncB">>, nitro:render(Record#feFuncB.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feFuncB.id},
+			{<<"class">>, Record#feFuncB.class},
+			{<<"style">>, Record#feFuncB.style}
+		],
+		svg_core(Record),
+		svg_transfert_function(Record),
+		Record#feFuncB.data_fields,
+		Record#feFuncB.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feFuncB.xmlbase},
+	{<<"xml:lang">>, Record#feFuncB.xmllang},
+	{<<"xml:space">>, Record#feFuncB.xmlspace}
+].
+
+svg_transfert_function(Record)-> [
+	{<<"type">>, Record#feFuncB.type},
+	{<<"tableValues">>, Record#feFuncB.tableValues},
+	{<<"slope">>, Record#feFuncB.slope},
+	{<<"intercept">>, Record#feFuncB.intercept},
+	{<<"amplitude">>, Record#feFuncB.amplitude},
+	{<<"exponent">>, Record#feFuncB.exponent},
+	{<<"offset">>, Record#feFuncB.offset}
+].

+ 36 - 0
src/element_fefuncg.erl

@@ -0,0 +1,36 @@
+-module(element_fefuncg).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feFuncG">>, nitro:render(Record#feFuncG.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feFuncG.id},
+			{<<"class">>, Record#feFuncG.class},
+			{<<"style">>, Record#feFuncG.style}
+		],
+		svg_core(Record),
+		svg_transfert_function(Record),
+		Record#feFuncG.data_fields,
+		Record#feFuncG.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feFuncG.xmlbase},
+	{<<"xml:lang">>, Record#feFuncG.xmllang},
+	{<<"xml:space">>, Record#feFuncG.xmlspace}
+].
+
+svg_transfert_function(Record)-> [
+	{<<"type">>, Record#feFuncG.type},
+	{<<"tableValues">>, Record#feFuncG.tableValues},
+	{<<"slope">>, Record#feFuncG.slope},
+	{<<"intercept">>, Record#feFuncG.intercept},
+	{<<"amplitude">>, Record#feFuncG.amplitude},
+	{<<"exponent">>, Record#feFuncG.exponent},
+	{<<"offset">>, Record#feFuncG.offset}
+].

+ 36 - 0
src/element_fefuncr.erl

@@ -0,0 +1,36 @@
+-module(element_fefuncr).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feFuncR">>, nitro:render(Record#feFuncR.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feFuncR.id},
+			{<<"class">>, Record#feFuncR.class},
+			{<<"style">>, Record#feFuncR.style}
+		],
+		svg_core(Record),
+		svg_transfert_function(Record),
+		Record#feFuncR.data_fields,
+		Record#feFuncR.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feFuncR.xmlbase},
+	{<<"xml:lang">>, Record#feFuncR.xmllang},
+	{<<"xml:space">>, Record#feFuncR.xmlspace}
+].
+
+svg_transfert_function(Record)-> [
+	{<<"type">>, Record#feFuncR.type},
+	{<<"tableValues">>, Record#feFuncR.tableValues},
+	{<<"slope">>, Record#feFuncR.slope},
+	{<<"intercept">>, Record#feFuncR.intercept},
+	{<<"amplitude">>, Record#feFuncR.amplitude},
+	{<<"exponent">>, Record#feFuncR.exponent},
+	{<<"offset">>, Record#feFuncR.offset}
+].

+ 99 - 0
src/element_fegaussianblur.erl

@@ -0,0 +1,99 @@
+-module(element_fegaussianblur).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feGaussianBlur">>, nitro:render(Record#feGaussianBlur.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feGaussianBlur.id},
+			{<<"class">>, Record#feGaussianBlur.class},
+			{<<"style">>, Record#feGaussianBlur.style},
+			{<<"in">>, Record#feGaussianBlur.in},
+			{<<"stdDeviation">>, Record#feGaussianBlur.stdDeviation}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feGaussianBlur.data_fields,
+		Record#feGaussianBlur.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feGaussianBlur.xmlbase},
+	{<<"xml:lang">>, Record#feGaussianBlur.xmllang},
+	{<<"xml:space">>, Record#feGaussianBlur.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feGaussianBlur.height},
+	{<<"result">>, Record#feGaussianBlur.result},
+	{<<"width">>, Record#feGaussianBlur.width},
+	{<<"x">>, Record#feGaussianBlur.x},
+	{<<"y">>, Record#feGaussianBlur.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feGaussianBlur.alignment_baseline},
+	{<<"baseline-shift">>, Record#feGaussianBlur.baseline_shift},
+	{<<"clip">>, Record#feGaussianBlur.clip},
+	{<<"clip-path">>, Record#feGaussianBlur.clip_path},
+	{<<"clip-rule">>, Record#feGaussianBlur.clip_rule},
+	{<<"color">>, Record#feGaussianBlur.color},
+	{<<"color-interpolation">>, Record#feGaussianBlur.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feGaussianBlur.color_interpolation_filters},
+	{<<"color-profile">>, Record#feGaussianBlur.color_profile},
+	{<<"color-rendering">>, Record#feGaussianBlur.color_rendering},
+	{<<"cursor">>, Record#feGaussianBlur.cursor},
+	{<<"direction">>, Record#feGaussianBlur.direction},
+	{<<"display">>, Record#feGaussianBlur.display},
+	{<<"dominant-baseline">>, Record#feGaussianBlur.dominant_baseline},
+	{<<"enable-background">>, Record#feGaussianBlur.enable_background},
+	{<<"fill">>, Record#feGaussianBlur.fill},
+	{<<"fill-opacity">>, Record#feGaussianBlur.fill_opacity},
+	{<<"fill-rule">>, Record#feGaussianBlur.fill_rule},
+	{<<"filter">>, Record#feGaussianBlur.filter},
+	{<<"flood-color">>, Record#feGaussianBlur.flood_color},
+	{<<"flood-opacity">>, Record#feGaussianBlur.flood_opacity},
+	{<<"font-family">>, Record#feGaussianBlur.font_family},
+	{<<"font-size">>, Record#feGaussianBlur.font_size},
+	{<<"font-size-adjust">>, Record#feGaussianBlur.font_size_adjust},
+	{<<"font-stretch">>, Record#feGaussianBlur.font_stretch},
+	{<<"font-style">>, Record#feGaussianBlur.font_style},
+	{<<"font-variant">>, Record#feGaussianBlur.font_variant},
+	{<<"font-weight">>, Record#feGaussianBlur.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feGaussianBlur.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feGaussianBlur.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feGaussianBlur.image_rendering},
+	{<<"kerning">>, Record#feGaussianBlur.kerning},
+	{<<"letter-spacing">>, Record#feGaussianBlur.letter_spacing},
+	{<<"lighting-color">>, Record#feGaussianBlur.lighting_color},
+	{<<"marker-end">>, Record#feGaussianBlur.marker_end},
+	{<<"marker-mid">>, Record#feGaussianBlur.marker_mid},
+	{<<"marker-start">>, Record#feGaussianBlur.marker_start},
+	{<<"mask">>, Record#feGaussianBlur.mask},
+	{<<"opacity">>, Record#feGaussianBlur.opacity},
+	{<<"overflow">>, Record#feGaussianBlur.overflow},
+	{<<"pointer-events">>, Record#feGaussianBlur.pointer_events},
+	{<<"shape-rendering">>, Record#feGaussianBlur.shape_rendering},
+	{<<"stop-color">>, Record#feGaussianBlur.stop_color},
+	{<<"stop-opacity">>, Record#feGaussianBlur.stop_opacity},
+	{<<"stroke">>, Record#feGaussianBlur.stroke},
+	{<<"stroke-dasharray">>, Record#feGaussianBlur.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feGaussianBlur.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feGaussianBlur.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feGaussianBlur.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feGaussianBlur.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feGaussianBlur.stroke_opacity},
+	{<<"stroke-width">>, Record#feGaussianBlur.stroke_width},
+	{<<"text-anchor">>, Record#feGaussianBlur.text_anchor},
+	{<<"text-decoration">>, Record#feGaussianBlur.text_decoration},
+	{<<"text-rendering">>, Record#feGaussianBlur.text_rendering},
+	{<<"unicode-bidi">>, Record#feGaussianBlur.unicode_bidi},
+	{<<"visibility">>, Record#feGaussianBlur.visibility},
+	{<<"word-spacing">>, Record#feGaussianBlur.word_spacing},
+	{<<"writing-mode">>, Record#feGaussianBlur.writing_mode}
+].

+ 110 - 0
src/element_feimage.erl

@@ -0,0 +1,110 @@
+-module(element_feimage).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feImage">>, nitro:render(Record#feImage.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feImage.id},
+			{<<"class">>, Record#feImage.class},
+			{<<"style">>, Record#feImage.style},
+			{<<"preserveAspectRatio">>, Record#feImage.preserveAspectRatio},
+			{<<"externalResourcesRequired">>, Record#feImage.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#feImage.data_fields,
+		Record#feImage.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feImage.xmlbase},
+	{<<"xml:lang">>, Record#feImage.xmllang},
+	{<<"xml:space">>, Record#feImage.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feImage.height},
+	{<<"result">>, Record#feImage.result},
+	{<<"width">>, Record#feImage.width},
+	{<<"x">>, Record#feImage.x},
+	{<<"y">>, Record#feImage.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feImage.alignment_baseline},
+	{<<"baseline-shift">>, Record#feImage.baseline_shift},
+	{<<"clip">>, Record#feImage.clip},
+	{<<"clip-path">>, Record#feImage.clip_path},
+	{<<"clip-rule">>, Record#feImage.clip_rule},
+	{<<"color">>, Record#feImage.color},
+	{<<"color-interpolation">>, Record#feImage.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feImage.color_interpolation_filters},
+	{<<"color-profile">>, Record#feImage.color_profile},
+	{<<"color-rendering">>, Record#feImage.color_rendering},
+	{<<"cursor">>, Record#feImage.cursor},
+	{<<"direction">>, Record#feImage.direction},
+	{<<"display">>, Record#feImage.display},
+	{<<"dominant-baseline">>, Record#feImage.dominant_baseline},
+	{<<"enable-background">>, Record#feImage.enable_background},
+	{<<"fill">>, Record#feImage.fill},
+	{<<"fill-opacity">>, Record#feImage.fill_opacity},
+	{<<"fill-rule">>, Record#feImage.fill_rule},
+	{<<"filter">>, Record#feImage.filter},
+	{<<"flood-color">>, Record#feImage.flood_color},
+	{<<"flood-opacity">>, Record#feImage.flood_opacity},
+	{<<"font-family">>, Record#feImage.font_family},
+	{<<"font-size">>, Record#feImage.font_size},
+	{<<"font-size-adjust">>, Record#feImage.font_size_adjust},
+	{<<"font-stretch">>, Record#feImage.font_stretch},
+	{<<"font-style">>, Record#feImage.font_style},
+	{<<"font-variant">>, Record#feImage.font_variant},
+	{<<"font-weight">>, Record#feImage.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feImage.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feImage.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feImage.image_rendering},
+	{<<"kerning">>, Record#feImage.kerning},
+	{<<"letter-spacing">>, Record#feImage.letter_spacing},
+	{<<"lighting-color">>, Record#feImage.lighting_color},
+	{<<"marker-end">>, Record#feImage.marker_end},
+	{<<"marker-mid">>, Record#feImage.marker_mid},
+	{<<"marker-start">>, Record#feImage.marker_start},
+	{<<"mask">>, Record#feImage.mask},
+	{<<"opacity">>, Record#feImage.opacity},
+	{<<"overflow">>, Record#feImage.overflow},
+	{<<"pointer-events">>, Record#feImage.pointer_events},
+	{<<"shape-rendering">>, Record#feImage.shape_rendering},
+	{<<"stop-color">>, Record#feImage.stop_color},
+	{<<"stop-opacity">>, Record#feImage.stop_opacity},
+	{<<"stroke">>, Record#feImage.stroke},
+	{<<"stroke-dasharray">>, Record#feImage.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feImage.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feImage.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feImage.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feImage.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feImage.stroke_opacity},
+	{<<"stroke-width">>, Record#feImage.stroke_width},
+	{<<"text-anchor">>, Record#feImage.text_anchor},
+	{<<"text-decoration">>, Record#feImage.text_decoration},
+	{<<"text-rendering">>, Record#feImage.text_rendering},
+	{<<"unicode-bidi">>, Record#feImage.unicode_bidi},
+	{<<"visibility">>, Record#feImage.visibility},
+	{<<"word-spacing">>, Record#feImage.word_spacing},
+	{<<"writing-mode">>, Record#feImage.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#feImage.xlinkhref},
+	{<<"xlink:type">>, Record#feImage.xlinktype},
+	{<<"xlink:role">>, Record#feImage.xlinkrole},
+	{<<"xlink:arcrole">>, Record#feImage.xlinkarcrole},
+	{<<"xlink:title">>, Record#feImage.xlinktitle},
+	{<<"xlink:show">>, Record#feImage.xlinkshow},
+	{<<"xlink:actuate">>, Record#feImage.xlinkactuate}
+].

+ 97 - 0
src/element_femerge.erl

@@ -0,0 +1,97 @@
+-module(element_femerge).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feMerge">>, nitro:render(Record#feMerge.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feMerge.id},
+			{<<"class">>, Record#feMerge.class},
+			{<<"style">>, Record#feMerge.style}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feMerge.data_fields,
+		Record#feMerge.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feMerge.xmlbase},
+	{<<"xml:lang">>, Record#feMerge.xmllang},
+	{<<"xml:space">>, Record#feMerge.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feMerge.height},
+	{<<"result">>, Record#feMerge.result},
+	{<<"width">>, Record#feMerge.width},
+	{<<"x">>, Record#feMerge.x},
+	{<<"y">>, Record#feMerge.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feMerge.alignment_baseline},
+	{<<"baseline-shift">>, Record#feMerge.baseline_shift},
+	{<<"clip">>, Record#feMerge.clip},
+	{<<"clip-path">>, Record#feMerge.clip_path},
+	{<<"clip-rule">>, Record#feMerge.clip_rule},
+	{<<"color">>, Record#feMerge.color},
+	{<<"color-interpolation">>, Record#feMerge.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feMerge.color_interpolation_filters},
+	{<<"color-profile">>, Record#feMerge.color_profile},
+	{<<"color-rendering">>, Record#feMerge.color_rendering},
+	{<<"cursor">>, Record#feMerge.cursor},
+	{<<"direction">>, Record#feMerge.direction},
+	{<<"display">>, Record#feMerge.display},
+	{<<"dominant-baseline">>, Record#feMerge.dominant_baseline},
+	{<<"enable-background">>, Record#feMerge.enable_background},
+	{<<"fill">>, Record#feMerge.fill},
+	{<<"fill-opacity">>, Record#feMerge.fill_opacity},
+	{<<"fill-rule">>, Record#feMerge.fill_rule},
+	{<<"filter">>, Record#feMerge.filter},
+	{<<"flood-color">>, Record#feMerge.flood_color},
+	{<<"flood-opacity">>, Record#feMerge.flood_opacity},
+	{<<"font-family">>, Record#feMerge.font_family},
+	{<<"font-size">>, Record#feMerge.font_size},
+	{<<"font-size-adjust">>, Record#feMerge.font_size_adjust},
+	{<<"font-stretch">>, Record#feMerge.font_stretch},
+	{<<"font-style">>, Record#feMerge.font_style},
+	{<<"font-variant">>, Record#feMerge.font_variant},
+	{<<"font-weight">>, Record#feMerge.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feMerge.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feMerge.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feMerge.image_rendering},
+	{<<"kerning">>, Record#feMerge.kerning},
+	{<<"letter-spacing">>, Record#feMerge.letter_spacing},
+	{<<"lighting-color">>, Record#feMerge.lighting_color},
+	{<<"marker-end">>, Record#feMerge.marker_end},
+	{<<"marker-mid">>, Record#feMerge.marker_mid},
+	{<<"marker-start">>, Record#feMerge.marker_start},
+	{<<"mask">>, Record#feMerge.mask},
+	{<<"opacity">>, Record#feMerge.opacity},
+	{<<"overflow">>, Record#feMerge.overflow},
+	{<<"pointer-events">>, Record#feMerge.pointer_events},
+	{<<"shape-rendering">>, Record#feMerge.shape_rendering},
+	{<<"stop-color">>, Record#feMerge.stop_color},
+	{<<"stop-opacity">>, Record#feMerge.stop_opacity},
+	{<<"stroke">>, Record#feMerge.stroke},
+	{<<"stroke-dasharray">>, Record#feMerge.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feMerge.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feMerge.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feMerge.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feMerge.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feMerge.stroke_opacity},
+	{<<"stroke-width">>, Record#feMerge.stroke_width},
+	{<<"text-anchor">>, Record#feMerge.text_anchor},
+	{<<"text-decoration">>, Record#feMerge.text_decoration},
+	{<<"text-rendering">>, Record#feMerge.text_rendering},
+	{<<"unicode-bidi">>, Record#feMerge.unicode_bidi},
+	{<<"visibility">>, Record#feMerge.visibility},
+	{<<"word-spacing">>, Record#feMerge.word_spacing},
+	{<<"writing-mode">>, Record#feMerge.writing_mode}
+].

+ 26 - 0
src/element_femergenode.erl

@@ -0,0 +1,26 @@
+-module(element_femergenode).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feMergeNode">>, nitro:render(Record#feMergeNode.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feMergeNode.id},
+			{<<"class">>, Record#feMergeNode.class},
+			{<<"style">>, Record#feMergeNode.style},
+			{<<"in">>, Record#feMergeNode.in}
+		],
+		svg_core(Record),
+		Record#feMergeNode.data_fields,
+		Record#feMergeNode.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feMergeNode.xmlbase},
+	{<<"xml:lang">>, Record#feMergeNode.xmllang},
+	{<<"xml:space">>, Record#feMergeNode.xmlspace}
+].

+ 100 - 0
src/element_femorphology.erl

@@ -0,0 +1,100 @@
+-module(element_femorphology).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feMorphology">>, nitro:render(Record#feMorphology.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feMorphology.id},
+			{<<"class">>, Record#feMorphology.class},
+			{<<"style">>, Record#feMorphology.style},
+			{<<"in">>, Record#feMorphology.in},
+			{<<"operator">>, Record#feMorphology.operator},
+			{<<"radius">>, Record#feMorphology.radius}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feMorphology.data_fields,
+		Record#feMorphology.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feMorphology.xmlbase},
+	{<<"xml:lang">>, Record#feMorphology.xmllang},
+	{<<"xml:space">>, Record#feMorphology.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feMorphology.height},
+	{<<"result">>, Record#feMorphology.result},
+	{<<"width">>, Record#feMorphology.width},
+	{<<"x">>, Record#feMorphology.x},
+	{<<"y">>, Record#feMorphology.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feMorphology.alignment_baseline},
+	{<<"baseline-shift">>, Record#feMorphology.baseline_shift},
+	{<<"clip">>, Record#feMorphology.clip},
+	{<<"clip-path">>, Record#feMorphology.clip_path},
+	{<<"clip-rule">>, Record#feMorphology.clip_rule},
+	{<<"color">>, Record#feMorphology.color},
+	{<<"color-interpolation">>, Record#feMorphology.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feMorphology.color_interpolation_filters},
+	{<<"color-profile">>, Record#feMorphology.color_profile},
+	{<<"color-rendering">>, Record#feMorphology.color_rendering},
+	{<<"cursor">>, Record#feMorphology.cursor},
+	{<<"direction">>, Record#feMorphology.direction},
+	{<<"display">>, Record#feMorphology.display},
+	{<<"dominant-baseline">>, Record#feMorphology.dominant_baseline},
+	{<<"enable-background">>, Record#feMorphology.enable_background},
+	{<<"fill">>, Record#feMorphology.fill},
+	{<<"fill-opacity">>, Record#feMorphology.fill_opacity},
+	{<<"fill-rule">>, Record#feMorphology.fill_rule},
+	{<<"filter">>, Record#feMorphology.filter},
+	{<<"flood-color">>, Record#feMorphology.flood_color},
+	{<<"flood-opacity">>, Record#feMorphology.flood_opacity},
+	{<<"font-family">>, Record#feMorphology.font_family},
+	{<<"font-size">>, Record#feMorphology.font_size},
+	{<<"font-size-adjust">>, Record#feMorphology.font_size_adjust},
+	{<<"font-stretch">>, Record#feMorphology.font_stretch},
+	{<<"font-style">>, Record#feMorphology.font_style},
+	{<<"font-variant">>, Record#feMorphology.font_variant},
+	{<<"font-weight">>, Record#feMorphology.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feMorphology.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feMorphology.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feMorphology.image_rendering},
+	{<<"kerning">>, Record#feMorphology.kerning},
+	{<<"letter-spacing">>, Record#feMorphology.letter_spacing},
+	{<<"lighting-color">>, Record#feMorphology.lighting_color},
+	{<<"marker-end">>, Record#feMorphology.marker_end},
+	{<<"marker-mid">>, Record#feMorphology.marker_mid},
+	{<<"marker-start">>, Record#feMorphology.marker_start},
+	{<<"mask">>, Record#feMorphology.mask},
+	{<<"opacity">>, Record#feMorphology.opacity},
+	{<<"overflow">>, Record#feMorphology.overflow},
+	{<<"pointer-events">>, Record#feMorphology.pointer_events},
+	{<<"shape-rendering">>, Record#feMorphology.shape_rendering},
+	{<<"stop-color">>, Record#feMorphology.stop_color},
+	{<<"stop-opacity">>, Record#feMorphology.stop_opacity},
+	{<<"stroke">>, Record#feMorphology.stroke},
+	{<<"stroke-dasharray">>, Record#feMorphology.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feMorphology.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feMorphology.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feMorphology.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feMorphology.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feMorphology.stroke_opacity},
+	{<<"stroke-width">>, Record#feMorphology.stroke_width},
+	{<<"text-anchor">>, Record#feMorphology.text_anchor},
+	{<<"text-decoration">>, Record#feMorphology.text_decoration},
+	{<<"text-rendering">>, Record#feMorphology.text_rendering},
+	{<<"unicode-bidi">>, Record#feMorphology.unicode_bidi},
+	{<<"visibility">>, Record#feMorphology.visibility},
+	{<<"word-spacing">>, Record#feMorphology.word_spacing},
+	{<<"writing-mode">>, Record#feMorphology.writing_mode}
+].

+ 100 - 0
src/element_feoffset.erl

@@ -0,0 +1,100 @@
+-module(element_feoffset).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feOffset">>, nitro:render(Record#feOffset.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feOffset.id},
+			{<<"class">>, Record#feOffset.class},
+			{<<"style">>, Record#feOffset.style},
+			{<<"in">>, Record#feOffset.in},
+			{<<"dx">>, Record#feOffset.dx},
+			{<<"dy">>, Record#feOffset.dy}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feOffset.data_fields,
+		Record#feOffset.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feOffset.xmlbase},
+	{<<"xml:lang">>, Record#feOffset.xmllang},
+	{<<"xml:space">>, Record#feOffset.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feOffset.height},
+	{<<"result">>, Record#feOffset.result},
+	{<<"width">>, Record#feOffset.width},
+	{<<"x">>, Record#feOffset.x},
+	{<<"y">>, Record#feOffset.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feOffset.alignment_baseline},
+	{<<"baseline-shift">>, Record#feOffset.baseline_shift},
+	{<<"clip">>, Record#feOffset.clip},
+	{<<"clip-path">>, Record#feOffset.clip_path},
+	{<<"clip-rule">>, Record#feOffset.clip_rule},
+	{<<"color">>, Record#feOffset.color},
+	{<<"color-interpolation">>, Record#feOffset.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feOffset.color_interpolation_filters},
+	{<<"color-profile">>, Record#feOffset.color_profile},
+	{<<"color-rendering">>, Record#feOffset.color_rendering},
+	{<<"cursor">>, Record#feOffset.cursor},
+	{<<"direction">>, Record#feOffset.direction},
+	{<<"display">>, Record#feOffset.display},
+	{<<"dominant-baseline">>, Record#feOffset.dominant_baseline},
+	{<<"enable-background">>, Record#feOffset.enable_background},
+	{<<"fill">>, Record#feOffset.fill},
+	{<<"fill-opacity">>, Record#feOffset.fill_opacity},
+	{<<"fill-rule">>, Record#feOffset.fill_rule},
+	{<<"filter">>, Record#feOffset.filter},
+	{<<"flood-color">>, Record#feOffset.flood_color},
+	{<<"flood-opacity">>, Record#feOffset.flood_opacity},
+	{<<"font-family">>, Record#feOffset.font_family},
+	{<<"font-size">>, Record#feOffset.font_size},
+	{<<"font-size-adjust">>, Record#feOffset.font_size_adjust},
+	{<<"font-stretch">>, Record#feOffset.font_stretch},
+	{<<"font-style">>, Record#feOffset.font_style},
+	{<<"font-variant">>, Record#feOffset.font_variant},
+	{<<"font-weight">>, Record#feOffset.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feOffset.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feOffset.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feOffset.image_rendering},
+	{<<"kerning">>, Record#feOffset.kerning},
+	{<<"letter-spacing">>, Record#feOffset.letter_spacing},
+	{<<"lighting-color">>, Record#feOffset.lighting_color},
+	{<<"marker-end">>, Record#feOffset.marker_end},
+	{<<"marker-mid">>, Record#feOffset.marker_mid},
+	{<<"marker-start">>, Record#feOffset.marker_start},
+	{<<"mask">>, Record#feOffset.mask},
+	{<<"opacity">>, Record#feOffset.opacity},
+	{<<"overflow">>, Record#feOffset.overflow},
+	{<<"pointer-events">>, Record#feOffset.pointer_events},
+	{<<"shape-rendering">>, Record#feOffset.shape_rendering},
+	{<<"stop-color">>, Record#feOffset.stop_color},
+	{<<"stop-opacity">>, Record#feOffset.stop_opacity},
+	{<<"stroke">>, Record#feOffset.stroke},
+	{<<"stroke-dasharray">>, Record#feOffset.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feOffset.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feOffset.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feOffset.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feOffset.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feOffset.stroke_opacity},
+	{<<"stroke-width">>, Record#feOffset.stroke_width},
+	{<<"text-anchor">>, Record#feOffset.text_anchor},
+	{<<"text-decoration">>, Record#feOffset.text_decoration},
+	{<<"text-rendering">>, Record#feOffset.text_rendering},
+	{<<"unicode-bidi">>, Record#feOffset.unicode_bidi},
+	{<<"visibility">>, Record#feOffset.visibility},
+	{<<"word-spacing">>, Record#feOffset.word_spacing},
+	{<<"writing-mode">>, Record#feOffset.writing_mode}
+].

+ 28 - 0
src/element_fepointlight.erl

@@ -0,0 +1,28 @@
+-module(element_fepointlight).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"fePointLight">>, nitro:render(Record#fePointLight.body),
+	lists:append([
+		[
+			{<<"id">>, Record#fePointLight.id},
+			{<<"class">>, Record#fePointLight.class},
+			{<<"style">>, Record#fePointLight.style},
+			{<<"x">>, Record#fePointLight.x},
+			{<<"y">>, Record#fePointLight.y},
+			{<<"z">>, Record#fePointLight.z}
+		],
+		svg_core(Record),
+		Record#fePointLight.data_fields,
+		Record#fePointLight.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#fePointLight.xmlbase},
+	{<<"xml:lang">>, Record#fePointLight.xmllang},
+	{<<"xml:space">>, Record#fePointLight.xmlspace}
+].

+ 102 - 0
src/element_fespecularlighting.erl

@@ -0,0 +1,102 @@
+-module(element_fespecularlighting).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feSpecularLighting">>, nitro:render(Record#feSpecularLighting.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feSpecularLighting.id},
+			{<<"class">>, Record#feSpecularLighting.class},
+			{<<"style">>, Record#feSpecularLighting.style},
+			{<<"in">>, Record#feSpecularLighting.in},
+			{<<"surfaceScale">>, Record#feSpecularLighting.surfaceScale},
+			{<<"specularConstant">>, Record#feSpecularLighting.specularConstant},
+			{<<"specularExponent">>, Record#feSpecularLighting.specularExponent},
+			{<<"kernelUnitLength">>, Record#feSpecularLighting.kernelUnitLength}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feSpecularLighting.data_fields,
+		Record#feSpecularLighting.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feSpecularLighting.xmlbase},
+	{<<"xml:lang">>, Record#feSpecularLighting.xmllang},
+	{<<"xml:space">>, Record#feSpecularLighting.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feSpecularLighting.height},
+	{<<"result">>, Record#feSpecularLighting.result},
+	{<<"width">>, Record#feSpecularLighting.width},
+	{<<"x">>, Record#feSpecularLighting.x},
+	{<<"y">>, Record#feSpecularLighting.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feSpecularLighting.alignment_baseline},
+	{<<"baseline-shift">>, Record#feSpecularLighting.baseline_shift},
+	{<<"clip">>, Record#feSpecularLighting.clip},
+	{<<"clip-path">>, Record#feSpecularLighting.clip_path},
+	{<<"clip-rule">>, Record#feSpecularLighting.clip_rule},
+	{<<"color">>, Record#feSpecularLighting.color},
+	{<<"color-interpolation">>, Record#feSpecularLighting.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feSpecularLighting.color_interpolation_filters},
+	{<<"color-profile">>, Record#feSpecularLighting.color_profile},
+	{<<"color-rendering">>, Record#feSpecularLighting.color_rendering},
+	{<<"cursor">>, Record#feSpecularLighting.cursor},
+	{<<"direction">>, Record#feSpecularLighting.direction},
+	{<<"display">>, Record#feSpecularLighting.display},
+	{<<"dominant-baseline">>, Record#feSpecularLighting.dominant_baseline},
+	{<<"enable-background">>, Record#feSpecularLighting.enable_background},
+	{<<"fill">>, Record#feSpecularLighting.fill},
+	{<<"fill-opacity">>, Record#feSpecularLighting.fill_opacity},
+	{<<"fill-rule">>, Record#feSpecularLighting.fill_rule},
+	{<<"filter">>, Record#feSpecularLighting.filter},
+	{<<"flood-color">>, Record#feSpecularLighting.flood_color},
+	{<<"flood-opacity">>, Record#feSpecularLighting.flood_opacity},
+	{<<"font-family">>, Record#feSpecularLighting.font_family},
+	{<<"font-size">>, Record#feSpecularLighting.font_size},
+	{<<"font-size-adjust">>, Record#feSpecularLighting.font_size_adjust},
+	{<<"font-stretch">>, Record#feSpecularLighting.font_stretch},
+	{<<"font-style">>, Record#feSpecularLighting.font_style},
+	{<<"font-variant">>, Record#feSpecularLighting.font_variant},
+	{<<"font-weight">>, Record#feSpecularLighting.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feSpecularLighting.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feSpecularLighting.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feSpecularLighting.image_rendering},
+	{<<"kerning">>, Record#feSpecularLighting.kerning},
+	{<<"letter-spacing">>, Record#feSpecularLighting.letter_spacing},
+	{<<"lighting-color">>, Record#feSpecularLighting.lighting_color},
+	{<<"marker-end">>, Record#feSpecularLighting.marker_end},
+	{<<"marker-mid">>, Record#feSpecularLighting.marker_mid},
+	{<<"marker-start">>, Record#feSpecularLighting.marker_start},
+	{<<"mask">>, Record#feSpecularLighting.mask},
+	{<<"opacity">>, Record#feSpecularLighting.opacity},
+	{<<"overflow">>, Record#feSpecularLighting.overflow},
+	{<<"pointer-events">>, Record#feSpecularLighting.pointer_events},
+	{<<"shape-rendering">>, Record#feSpecularLighting.shape_rendering},
+	{<<"stop-color">>, Record#feSpecularLighting.stop_color},
+	{<<"stop-opacity">>, Record#feSpecularLighting.stop_opacity},
+	{<<"stroke">>, Record#feSpecularLighting.stroke},
+	{<<"stroke-dasharray">>, Record#feSpecularLighting.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feSpecularLighting.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feSpecularLighting.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feSpecularLighting.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feSpecularLighting.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feSpecularLighting.stroke_opacity},
+	{<<"stroke-width">>, Record#feSpecularLighting.stroke_width},
+	{<<"text-anchor">>, Record#feSpecularLighting.text_anchor},
+	{<<"text-decoration">>, Record#feSpecularLighting.text_decoration},
+	{<<"text-rendering">>, Record#feSpecularLighting.text_rendering},
+	{<<"unicode-bidi">>, Record#feSpecularLighting.unicode_bidi},
+	{<<"visibility">>, Record#feSpecularLighting.visibility},
+	{<<"word-spacing">>, Record#feSpecularLighting.word_spacing},
+	{<<"writing-mode">>, Record#feSpecularLighting.writing_mode}
+].

+ 33 - 0
src/element_fespotlight.erl

@@ -0,0 +1,33 @@
+-module(element_fespotlight).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feSpotLight">>, nitro:render(Record#feSpotLight.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feSpotLight.id},
+			{<<"class">>, Record#feSpotLight.class},
+			{<<"style">>, Record#feSpotLight.style},
+			{<<"x">>, Record#feSpotLight.x},
+			{<<"y">>, Record#feSpotLight.y},
+			{<<"z">>, Record#feSpotLight.z},
+			{<<"pointsAtX">>, Record#feSpotLight.pointsAtX},
+			{<<"pointsAtY">>, Record#feSpotLight.pointsAtY},
+			{<<"pointsAtZ">>, Record#feSpotLight.pointsAtZ},
+			{<<"specularExponent">>, Record#feSpotLight.specularExponent},
+			{<<"limitingConeAngle">>, Record#feSpotLight.limitingConeAngle}
+		],
+		svg_core(Record),
+		Record#feSpotLight.data_fields,
+		Record#feSpotLight.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feSpotLight.xmlbase},
+	{<<"xml:lang">>, Record#feSpotLight.xmllang},
+	{<<"xml:space">>, Record#feSpotLight.xmlspace}
+].

+ 98 - 0
src/element_fetile.erl

@@ -0,0 +1,98 @@
+-module(element_fetile).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feTile">>, nitro:render(Record#feTile.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feTile.id},
+			{<<"class">>, Record#feTile.class},
+			{<<"style">>, Record#feTile.style},
+			{<<"in">>, Record#feTile.in}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feTile.data_fields,
+		Record#feTile.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feTile.xmlbase},
+	{<<"xml:lang">>, Record#feTile.xmllang},
+	{<<"xml:space">>, Record#feTile.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feTile.height},
+	{<<"result">>, Record#feTile.result},
+	{<<"width">>, Record#feTile.width},
+	{<<"x">>, Record#feTile.x},
+	{<<"y">>, Record#feTile.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feTile.alignment_baseline},
+	{<<"baseline-shift">>, Record#feTile.baseline_shift},
+	{<<"clip">>, Record#feTile.clip},
+	{<<"clip-path">>, Record#feTile.clip_path},
+	{<<"clip-rule">>, Record#feTile.clip_rule},
+	{<<"color">>, Record#feTile.color},
+	{<<"color-interpolation">>, Record#feTile.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feTile.color_interpolation_filters},
+	{<<"color-profile">>, Record#feTile.color_profile},
+	{<<"color-rendering">>, Record#feTile.color_rendering},
+	{<<"cursor">>, Record#feTile.cursor},
+	{<<"direction">>, Record#feTile.direction},
+	{<<"display">>, Record#feTile.display},
+	{<<"dominant-baseline">>, Record#feTile.dominant_baseline},
+	{<<"enable-background">>, Record#feTile.enable_background},
+	{<<"fill">>, Record#feTile.fill},
+	{<<"fill-opacity">>, Record#feTile.fill_opacity},
+	{<<"fill-rule">>, Record#feTile.fill_rule},
+	{<<"filter">>, Record#feTile.filter},
+	{<<"flood-color">>, Record#feTile.flood_color},
+	{<<"flood-opacity">>, Record#feTile.flood_opacity},
+	{<<"font-family">>, Record#feTile.font_family},
+	{<<"font-size">>, Record#feTile.font_size},
+	{<<"font-size-adjust">>, Record#feTile.font_size_adjust},
+	{<<"font-stretch">>, Record#feTile.font_stretch},
+	{<<"font-style">>, Record#feTile.font_style},
+	{<<"font-variant">>, Record#feTile.font_variant},
+	{<<"font-weight">>, Record#feTile.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feTile.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feTile.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feTile.image_rendering},
+	{<<"kerning">>, Record#feTile.kerning},
+	{<<"letter-spacing">>, Record#feTile.letter_spacing},
+	{<<"lighting-color">>, Record#feTile.lighting_color},
+	{<<"marker-end">>, Record#feTile.marker_end},
+	{<<"marker-mid">>, Record#feTile.marker_mid},
+	{<<"marker-start">>, Record#feTile.marker_start},
+	{<<"mask">>, Record#feTile.mask},
+	{<<"opacity">>, Record#feTile.opacity},
+	{<<"overflow">>, Record#feTile.overflow},
+	{<<"pointer-events">>, Record#feTile.pointer_events},
+	{<<"shape-rendering">>, Record#feTile.shape_rendering},
+	{<<"stop-color">>, Record#feTile.stop_color},
+	{<<"stop-opacity">>, Record#feTile.stop_opacity},
+	{<<"stroke">>, Record#feTile.stroke},
+	{<<"stroke-dasharray">>, Record#feTile.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feTile.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feTile.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feTile.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feTile.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feTile.stroke_opacity},
+	{<<"stroke-width">>, Record#feTile.stroke_width},
+	{<<"text-anchor">>, Record#feTile.text_anchor},
+	{<<"text-decoration">>, Record#feTile.text_decoration},
+	{<<"text-rendering">>, Record#feTile.text_rendering},
+	{<<"unicode-bidi">>, Record#feTile.unicode_bidi},
+	{<<"visibility">>, Record#feTile.visibility},
+	{<<"word-spacing">>, Record#feTile.word_spacing},
+	{<<"writing-mode">>, Record#feTile.writing_mode}
+].

+ 102 - 0
src/element_feturbulence.erl

@@ -0,0 +1,102 @@
+-module(element_feturbulence).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"feTurbulence">>, nitro:render(Record#feTurbulence.body),
+	lists:append([
+		[
+			{<<"id">>, Record#feTurbulence.id},
+			{<<"class">>, Record#feTurbulence.class},
+			{<<"style">>, Record#feTurbulence.style},
+			{<<"baseFrequency">>, Record#feTurbulence.baseFrequency},
+			{<<"numOctaves">>, Record#feTurbulence.numOctaves},
+			{<<"seed">>, Record#feTurbulence.seed},
+			{<<"stitchTiles">>, Record#feTurbulence.stitchTiles},
+			{<<"type">>, Record#feTurbulence.type}
+		],
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_presentation(Record),
+		Record#feTurbulence.data_fields,
+		Record#feTurbulence.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#feTurbulence.xmlbase},
+	{<<"xml:lang">>, Record#feTurbulence.xmllang},
+	{<<"xml:space">>, Record#feTurbulence.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#feTurbulence.height},
+	{<<"result">>, Record#feTurbulence.result},
+	{<<"width">>, Record#feTurbulence.width},
+	{<<"x">>, Record#feTurbulence.x},
+	{<<"y">>, Record#feTurbulence.y}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#feTurbulence.alignment_baseline},
+	{<<"baseline-shift">>, Record#feTurbulence.baseline_shift},
+	{<<"clip">>, Record#feTurbulence.clip},
+	{<<"clip-path">>, Record#feTurbulence.clip_path},
+	{<<"clip-rule">>, Record#feTurbulence.clip_rule},
+	{<<"color">>, Record#feTurbulence.color},
+	{<<"color-interpolation">>, Record#feTurbulence.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#feTurbulence.color_interpolation_filters},
+	{<<"color-profile">>, Record#feTurbulence.color_profile},
+	{<<"color-rendering">>, Record#feTurbulence.color_rendering},
+	{<<"cursor">>, Record#feTurbulence.cursor},
+	{<<"direction">>, Record#feTurbulence.direction},
+	{<<"display">>, Record#feTurbulence.display},
+	{<<"dominant-baseline">>, Record#feTurbulence.dominant_baseline},
+	{<<"enable-background">>, Record#feTurbulence.enable_background},
+	{<<"fill">>, Record#feTurbulence.fill},
+	{<<"fill-opacity">>, Record#feTurbulence.fill_opacity},
+	{<<"fill-rule">>, Record#feTurbulence.fill_rule},
+	{<<"filter">>, Record#feTurbulence.filter},
+	{<<"flood-color">>, Record#feTurbulence.flood_color},
+	{<<"flood-opacity">>, Record#feTurbulence.flood_opacity},
+	{<<"font-family">>, Record#feTurbulence.font_family},
+	{<<"font-size">>, Record#feTurbulence.font_size},
+	{<<"font-size-adjust">>, Record#feTurbulence.font_size_adjust},
+	{<<"font-stretch">>, Record#feTurbulence.font_stretch},
+	{<<"font-style">>, Record#feTurbulence.font_style},
+	{<<"font-variant">>, Record#feTurbulence.font_variant},
+	{<<"font-weight">>, Record#feTurbulence.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#feTurbulence.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#feTurbulence.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#feTurbulence.image_rendering},
+	{<<"kerning">>, Record#feTurbulence.kerning},
+	{<<"letter-spacing">>, Record#feTurbulence.letter_spacing},
+	{<<"lighting-color">>, Record#feTurbulence.lighting_color},
+	{<<"marker-end">>, Record#feTurbulence.marker_end},
+	{<<"marker-mid">>, Record#feTurbulence.marker_mid},
+	{<<"marker-start">>, Record#feTurbulence.marker_start},
+	{<<"mask">>, Record#feTurbulence.mask},
+	{<<"opacity">>, Record#feTurbulence.opacity},
+	{<<"overflow">>, Record#feTurbulence.overflow},
+	{<<"pointer-events">>, Record#feTurbulence.pointer_events},
+	{<<"shape-rendering">>, Record#feTurbulence.shape_rendering},
+	{<<"stop-color">>, Record#feTurbulence.stop_color},
+	{<<"stop-opacity">>, Record#feTurbulence.stop_opacity},
+	{<<"stroke">>, Record#feTurbulence.stroke},
+	{<<"stroke-dasharray">>, Record#feTurbulence.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#feTurbulence.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#feTurbulence.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#feTurbulence.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#feTurbulence.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#feTurbulence.stroke_opacity},
+	{<<"stroke-width">>, Record#feTurbulence.stroke_width},
+	{<<"text-anchor">>, Record#feTurbulence.text_anchor},
+	{<<"text-decoration">>, Record#feTurbulence.text_decoration},
+	{<<"text-rendering">>, Record#feTurbulence.text_rendering},
+	{<<"unicode-bidi">>, Record#feTurbulence.unicode_bidi},
+	{<<"visibility">>, Record#feTurbulence.visibility},
+	{<<"word-spacing">>, Record#feTurbulence.word_spacing},
+	{<<"writing-mode">>, Record#feTurbulence.writing_mode}
+].

+ 107 - 0
src/element_filter.erl

@@ -0,0 +1,107 @@
+-module(element_filter).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"filter">>, nitro:render(Record#filter.body),
+	lists:append([
+		[
+			{<<"id">>, Record#filter.id},
+			{<<"class">>, Record#filter.class},
+			{<<"style">>, Record#filter.style},
+			{<<"x">>, Record#filter.x},
+			{<<"y">>, Record#filter.y},
+			{<<"width">>, Record#filter.width},
+			{<<"height">>, Record#filter.height},
+			{<<"filterRes">>, Record#filter.filterRes},
+			{<<"filterUnits">>, Record#filter.filterUnits},
+			{<<"primitiveUnits">>, Record#filter.primitiveUnits},
+			{<<"externalResourcesRequired">>, Record#filter.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#filter.data_fields,
+		Record#filter.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#filter.xmlbase},
+	{<<"xml:lang">>, Record#filter.xmllang},
+	{<<"xml:space">>, Record#filter.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#filter.alignment_baseline},
+	{<<"baseline-shift">>, Record#filter.baseline_shift},
+	{<<"clip">>, Record#filter.clip},
+	{<<"clip-path">>, Record#filter.clip_path},
+	{<<"clip-rule">>, Record#filter.clip_rule},
+	{<<"color">>, Record#filter.color},
+	{<<"color-interpolation">>, Record#filter.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#filter.color_interpolation_filters},
+	{<<"color-profile">>, Record#filter.color_profile},
+	{<<"color-rendering">>, Record#filter.color_rendering},
+	{<<"cursor">>, Record#filter.cursor},
+	{<<"direction">>, Record#filter.direction},
+	{<<"display">>, Record#filter.display},
+	{<<"dominant-baseline">>, Record#filter.dominant_baseline},
+	{<<"enable-background">>, Record#filter.enable_background},
+	{<<"fill">>, Record#filter.fill},
+	{<<"fill-opacity">>, Record#filter.fill_opacity},
+	{<<"fill-rule">>, Record#filter.fill_rule},
+	{<<"filter">>, Record#filter.filter},
+	{<<"flood-color">>, Record#filter.flood_color},
+	{<<"flood-opacity">>, Record#filter.flood_opacity},
+	{<<"font-family">>, Record#filter.font_family},
+	{<<"font-size">>, Record#filter.font_size},
+	{<<"font-size-adjust">>, Record#filter.font_size_adjust},
+	{<<"font-stretch">>, Record#filter.font_stretch},
+	{<<"font-style">>, Record#filter.font_style},
+	{<<"font-variant">>, Record#filter.font_variant},
+	{<<"font-weight">>, Record#filter.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#filter.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#filter.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#filter.image_rendering},
+	{<<"kerning">>, Record#filter.kerning},
+	{<<"letter-spacing">>, Record#filter.letter_spacing},
+	{<<"lighting-color">>, Record#filter.lighting_color},
+	{<<"marker-end">>, Record#filter.marker_end},
+	{<<"marker-mid">>, Record#filter.marker_mid},
+	{<<"marker-start">>, Record#filter.marker_start},
+	{<<"mask">>, Record#filter.mask},
+	{<<"opacity">>, Record#filter.opacity},
+	{<<"overflow">>, Record#filter.overflow},
+	{<<"pointer-events">>, Record#filter.pointer_events},
+	{<<"shape-rendering">>, Record#filter.shape_rendering},
+	{<<"stop-color">>, Record#filter.stop_color},
+	{<<"stop-opacity">>, Record#filter.stop_opacity},
+	{<<"stroke">>, Record#filter.stroke},
+	{<<"stroke-dasharray">>, Record#filter.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#filter.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#filter.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#filter.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#filter.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#filter.stroke_opacity},
+	{<<"stroke-width">>, Record#filter.stroke_width},
+	{<<"text-anchor">>, Record#filter.text_anchor},
+	{<<"text-decoration">>, Record#filter.text_decoration},
+	{<<"text-rendering">>, Record#filter.text_rendering},
+	{<<"unicode-bidi">>, Record#filter.unicode_bidi},
+	{<<"visibility">>, Record#filter.visibility},
+	{<<"word-spacing">>, Record#filter.word_spacing},
+	{<<"writing-mode">>, Record#filter.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#filter.xlinkhref},
+	{<<"xlink:type">>, Record#filter.xlinktype},
+	{<<"xlink:role">>, Record#filter.xlinkrole},
+	{<<"xlink:arcrole">>, Record#filter.xlinkarcrole},
+	{<<"xlink:title">>, Record#filter.xlinktitle},
+	{<<"xlink:show">>, Record#filter.xlinkshow},
+	{<<"xlink:actuate">>, Record#filter.xlinkactuate}
+].

+ 95 - 0
src/element_font.erl

@@ -0,0 +1,95 @@
+-module(element_font).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"font">>, nitro:render(Record#font.body),
+	lists:append([
+		[
+			{<<"id">>, Record#font.id},
+			{<<"class">>, Record#font.class},
+			{<<"style">>, Record#font.style},
+			{<<"horiz-origin-x">>, Record#font.horiz_origin_x},
+			{<<"horiz-origin-y">>, Record#font.horiz_origin_y},
+			{<<"horiz-adv-x">>, Record#font.horiz_adv_x},
+			{<<"vert-origin-x">>, Record#font.vert_origin_x},
+			{<<"vert-origin-y">>, Record#font.vert_origin_y},
+			{<<"vert-adv-y">>, Record#font.vert_adv_y},
+			{<<"externalResourcesRequired">>, Record#font.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		Record#font.data_fields,
+		Record#font.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#font.xmlbase},
+	{<<"xml:lang">>, Record#font.xmllang},
+	{<<"xml:space">>, Record#font.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#font.alignment_baseline},
+	{<<"baseline-shift">>, Record#font.baseline_shift},
+	{<<"clip">>, Record#font.clip},
+	{<<"clip-path">>, Record#font.clip_path},
+	{<<"clip-rule">>, Record#font.clip_rule},
+	{<<"color">>, Record#font.color},
+	{<<"color-interpolation">>, Record#font.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#font.color_interpolation_filters},
+	{<<"color-profile">>, Record#font.color_profile},
+	{<<"color-rendering">>, Record#font.color_rendering},
+	{<<"cursor">>, Record#font.cursor},
+	{<<"direction">>, Record#font.direction},
+	{<<"display">>, Record#font.display},
+	{<<"dominant-baseline">>, Record#font.dominant_baseline},
+	{<<"enable-background">>, Record#font.enable_background},
+	{<<"fill">>, Record#font.fill},
+	{<<"fill-opacity">>, Record#font.fill_opacity},
+	{<<"fill-rule">>, Record#font.fill_rule},
+	{<<"filter">>, Record#font.filter},
+	{<<"flood-color">>, Record#font.flood_color},
+	{<<"flood-opacity">>, Record#font.flood_opacity},
+	{<<"font-family">>, Record#font.font_family},
+	{<<"font-size">>, Record#font.font_size},
+	{<<"font-size-adjust">>, Record#font.font_size_adjust},
+	{<<"font-stretch">>, Record#font.font_stretch},
+	{<<"font-style">>, Record#font.font_style},
+	{<<"font-variant">>, Record#font.font_variant},
+	{<<"font-weight">>, Record#font.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#font.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#font.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#font.image_rendering},
+	{<<"kerning">>, Record#font.kerning},
+	{<<"letter-spacing">>, Record#font.letter_spacing},
+	{<<"lighting-color">>, Record#font.lighting_color},
+	{<<"marker-end">>, Record#font.marker_end},
+	{<<"marker-mid">>, Record#font.marker_mid},
+	{<<"marker-start">>, Record#font.marker_start},
+	{<<"mask">>, Record#font.mask},
+	{<<"opacity">>, Record#font.opacity},
+	{<<"overflow">>, Record#font.overflow},
+	{<<"pointer-events">>, Record#font.pointer_events},
+	{<<"shape-rendering">>, Record#font.shape_rendering},
+	{<<"stop-color">>, Record#font.stop_color},
+	{<<"stop-opacity">>, Record#font.stop_opacity},
+	{<<"stroke">>, Record#font.stroke},
+	{<<"stroke-dasharray">>, Record#font.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#font.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#font.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#font.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#font.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#font.stroke_opacity},
+	{<<"stroke-width">>, Record#font.stroke_width},
+	{<<"text-anchor">>, Record#font.text_anchor},
+	{<<"text-decoration">>, Record#font.text_decoration},
+	{<<"text-rendering">>, Record#font.text_rendering},
+	{<<"unicode-bidi">>, Record#font.unicode_bidi},
+	{<<"visibility">>, Record#font.visibility},
+	{<<"word-spacing">>, Record#font.word_spacing},
+	{<<"writing-mode">>, Record#font.writing_mode}
+].

+ 58 - 0
src/element_fontface.erl

@@ -0,0 +1,58 @@
+-module(element_fontface).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"font-face">>, nitro:render(Record#font_face.body),
+	lists:append([
+		[
+			{<<"id">>, Record#font_face.id},
+			{<<"class">>, Record#font_face.class},
+			{<<"style">>, Record#font_face.style},
+			{<<"font-family">>, Record#font_face.font_family},
+			{<<"font-style">>, Record#font_face.font_style},
+			{<<"font-variant">>, Record#font_face.font_variant},
+			{<<"font-weight">>, Record#font_face.font_weight},
+			{<<"font-stretch">>, Record#font_face.font_stretch},
+			{<<"font-size">>, Record#font_face.font_size},
+			{<<"unicode-range">>, Record#font_face.unicode_range},
+			{<<"units-per-em">>, Record#font_face.units_per_em},
+			{<<"panose-1">>, Record#font_face.panose_1},
+			{<<"stemv">>, Record#font_face.stemv},
+			{<<"stemh">>, Record#font_face.stemh},
+			{<<"slope">>, Record#font_face.slope},
+			{<<"cap-height">>, Record#font_face.cap_height},
+			{<<"x-height">>, Record#font_face.x_height},
+			{<<"accent-height">>, Record#font_face.accent_height},
+			{<<"ascent">>, Record#font_face.ascent},
+			{<<"descent">>, Record#font_face.descent},
+			{<<"widths">>, Record#font_face.widths},
+			{<<"bbox">>, Record#font_face.bbox},
+			{<<"ideographic">>, Record#font_face.ideographic},
+			{<<"alphabetic">>, Record#font_face.alphabetic},
+			{<<"mathematical">>, Record#font_face.mathematical},
+			{<<"hanging">>, Record#font_face.hanging},
+			{<<"v-ideographic">>, Record#font_face.v_ideographic},
+			{<<"v-alphabetic">>, Record#font_face.v_alphabetic},
+			{<<"v-mathematical">>, Record#font_face.v_mathematical},
+			{<<"v-hanging">>, Record#font_face.v_hanging},
+			{<<"underline-position">>, Record#font_face.underline_position},
+			{<<"underline-thickness">>, Record#font_face.underline_thickness},
+			{<<"strikethrough-position">>, Record#font_face.strikethrough_position},
+			{<<"strikethrough-thickness">>, Record#font_face.strikethrough_thickness},
+			{<<"overline-position">>, Record#font_face.overline_position},
+			{<<"overline-thickness">>, Record#font_face.overline_thickness}
+		],
+		svg_core(Record),
+		Record#font_face.data_fields,
+		Record#font_face.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#font_face.xmlbase},
+	{<<"xml:lang">>, Record#font_face.xmllang},
+	{<<"xml:space">>, Record#font_face.xmlspace}
+].

+ 26 - 0
src/element_fontfaceformat.erl

@@ -0,0 +1,26 @@
+-module(element_fontfaceformat).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"font-face-format">>, nitro:render(Record#font_face_format.body),
+	lists:append([
+		[
+			{<<"id">>, Record#font_face_format.id},
+			{<<"class">>, Record#font_face_format.class},
+			{<<"style">>, Record#font_face_format.style},
+			{<<"string">>, Record#font_face_format.string}
+		],
+		svg_core(Record),
+		Record#font_face_format.data_fields,
+		Record#font_face_format.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#font_face_format.xmlbase},
+	{<<"xml:lang">>, Record#font_face_format.xmllang},
+	{<<"xml:space">>, Record#font_face_format.xmlspace}
+].

+ 26 - 0
src/element_fontfacename.erl

@@ -0,0 +1,26 @@
+-module(element_fontfacename).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"font-face-name">>, nitro:render(Record#font_face_name.body),
+	lists:append([
+		[
+			{<<"id">>, Record#font_face_name.id},
+			{<<"class">>, Record#font_face_name.class},
+			{<<"style">>, Record#font_face_name.style},
+			{<<"name">>, Record#font_face_name.name}
+		],
+		svg_core(Record),
+		Record#font_face_name.data_fields,
+		Record#font_face_name.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#font_face_name.xmlbase},
+	{<<"xml:lang">>, Record#font_face_name.xmllang},
+	{<<"xml:space">>, Record#font_face_name.xmlspace}
+].

+ 25 - 0
src/element_fontfacesrc.erl

@@ -0,0 +1,25 @@
+-module(element_fontfacesrc).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"font-face-src">>, nitro:render(Record#font_face_src.body),
+	lists:append([
+		[
+			{<<"id">>, Record#font_face_src.id},
+			{<<"class">>, Record#font_face_src.class},
+			{<<"style">>, Record#font_face_src.style}
+		],
+		svg_core(Record),
+		Record#font_face_src.data_fields,
+		Record#font_face_src.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#font_face_src.xmlbase},
+	{<<"xml:lang">>, Record#font_face_src.xmllang},
+	{<<"xml:space">>, Record#font_face_src.xmlspace}
+].

+ 36 - 0
src/element_fontfaceuri.erl

@@ -0,0 +1,36 @@
+-module(element_fontfaceuri).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"font_face-uri">>, nitro:render(Record#font_face_uri.body),
+	lists:append([
+		[
+			{<<"id">>, Record#font_face_uri.id},
+			{<<"class">>, Record#font_face_uri.class},
+			{<<"style">>, Record#font_face_uri.style}
+		],
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#font_face_uri.data_fields,
+		Record#font_face_uri.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#font_face_uri.xmlbase},
+	{<<"xml:lang">>, Record#font_face_uri.xmllang},
+	{<<"xml:space">>, Record#font_face_uri.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#font_face_uri.xlinkhref},
+	{<<"xlink:type">>, Record#font_face_uri.xlinktype},
+	{<<"xlink:role">>, Record#font_face_uri.xlinkrole},
+	{<<"xlink:arcrole">>, Record#font_face_uri.xlinkarcrole},
+	{<<"xlink:title">>, Record#font_face_uri.xlinktitle},
+	{<<"xlink:show">>, Record#font_face_uri.xlinkshow},
+	{<<"xlink:actuate">>, Record#font_face_uri.xlinkactuate}
+].

+ 115 - 0
src/element_foreignobject.erl

@@ -0,0 +1,115 @@
+-module(element_foreignobject).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"foreignObject">>, nitro:render(Record#foreignObject.body),
+	lists:append([
+		[
+			{<<"id">>, Record#foreignObject.id},
+			{<<"class">>, Record#foreignObject.class},
+			{<<"style">>, Record#foreignObject.style},
+			{<<"x">>, Record#foreignObject.x},
+			{<<"y">>, Record#foreignObject.y},
+			{<<"width">>, Record#foreignObject.width},
+			{<<"height">>, Record#foreignObject.height},
+			{<<"transform">>, Record#foreignObject.transform},
+			{<<"externalResourcesRequired">>, Record#foreignObject.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#foreignObject.data_fields,
+		Record#foreignObject.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#foreignObject.requiredExtensions},
+	{<<"requiredFeatures">>, Record#foreignObject.requiredFeatures},
+	{<<"systemLanguage">>, Record#foreignObject.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#foreignObject.xmlbase},
+	{<<"xml:lang">>, Record#foreignObject.xmllang},
+	{<<"xml:space">>, Record#foreignObject.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#foreignObject.onactivate},
+	{<<"onclick">>, Record#foreignObject.onclick},
+	{<<"onfocusin">>, Record#foreignObject.onfocusin},
+	{<<"onfocusout">>, Record#foreignObject.onfocusout},
+	{<<"onload">>, Record#foreignObject.onload_graphical},
+	{<<"onmousedown">>, Record#foreignObject.onmousedown},
+	{<<"onmousemove">>, Record#foreignObject.onmousemove},
+	{<<"onmouseout">>, Record#foreignObject.onmouseout},
+	{<<"onmouseover">>, Record#foreignObject.onmouseover},
+	{<<"onmouseup">>, Record#foreignObject.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#foreignObject.alignment_baseline},
+	{<<"baseline-shift">>, Record#foreignObject.baseline_shift},
+	{<<"clip">>, Record#foreignObject.clip},
+	{<<"clip-path">>, Record#foreignObject.clip_path},
+	{<<"clip-rule">>, Record#foreignObject.clip_rule},
+	{<<"color">>, Record#foreignObject.color},
+	{<<"color-interpolation">>, Record#foreignObject.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#foreignObject.color_interpolation_filters},
+	{<<"color-profile">>, Record#foreignObject.color_profile},
+	{<<"color-rendering">>, Record#foreignObject.color_rendering},
+	{<<"cursor">>, Record#foreignObject.cursor},
+	{<<"direction">>, Record#foreignObject.direction},
+	{<<"display">>, Record#foreignObject.display},
+	{<<"dominant-baseline">>, Record#foreignObject.dominant_baseline},
+	{<<"enable-background">>, Record#foreignObject.enable_background},
+	{<<"fill">>, Record#foreignObject.fill},
+	{<<"fill-opacity">>, Record#foreignObject.fill_opacity},
+	{<<"fill-rule">>, Record#foreignObject.fill_rule},
+	{<<"filter">>, Record#foreignObject.filter},
+	{<<"flood-color">>, Record#foreignObject.flood_color},
+	{<<"flood-opacity">>, Record#foreignObject.flood_opacity},
+	{<<"font-family">>, Record#foreignObject.font_family},
+	{<<"font-size">>, Record#foreignObject.font_size},
+	{<<"font-size-adjust">>, Record#foreignObject.font_size_adjust},
+	{<<"font-stretch">>, Record#foreignObject.font_stretch},
+	{<<"font-style">>, Record#foreignObject.font_style},
+	{<<"font-variant">>, Record#foreignObject.font_variant},
+	{<<"font-weight">>, Record#foreignObject.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#foreignObject.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#foreignObject.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#foreignObject.image_rendering},
+	{<<"kerning">>, Record#foreignObject.kerning},
+	{<<"letter-spacing">>, Record#foreignObject.letter_spacing},
+	{<<"lighting-color">>, Record#foreignObject.lighting_color},
+	{<<"marker-end">>, Record#foreignObject.marker_end},
+	{<<"marker-mid">>, Record#foreignObject.marker_mid},
+	{<<"marker-start">>, Record#foreignObject.marker_start},
+	{<<"mask">>, Record#foreignObject.mask},
+	{<<"opacity">>, Record#foreignObject.opacity},
+	{<<"overflow">>, Record#foreignObject.overflow},
+	{<<"pointer-events">>, Record#foreignObject.pointer_events},
+	{<<"shape-rendering">>, Record#foreignObject.shape_rendering},
+	{<<"stop-color">>, Record#foreignObject.stop_color},
+	{<<"stop-opacity">>, Record#foreignObject.stop_opacity},
+	{<<"stroke">>, Record#foreignObject.stroke},
+	{<<"stroke-dasharray">>, Record#foreignObject.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#foreignObject.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#foreignObject.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#foreignObject.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#foreignObject.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#foreignObject.stroke_opacity},
+	{<<"stroke-width">>, Record#foreignObject.stroke_width},
+	{<<"text-anchor">>, Record#foreignObject.text_anchor},
+	{<<"text-decoration">>, Record#foreignObject.text_decoration},
+	{<<"text-rendering">>, Record#foreignObject.text_rendering},
+	{<<"unicode-bidi">>, Record#foreignObject.unicode_bidi},
+	{<<"visibility">>, Record#foreignObject.visibility},
+	{<<"word-spacing">>, Record#foreignObject.word_spacing},
+	{<<"writing-mode">>, Record#foreignObject.writing_mode}
+].

+ 111 - 0
src/element_g.erl

@@ -0,0 +1,111 @@
+-module(element_g).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"g">>, nitro:render(Record#g.body),
+	lists:append([
+		[
+			{<<"id">>, Record#g.id},
+			{<<"class">>, Record#g.class},
+			{<<"style">>, Record#g.style},
+			{<<"transform">>, Record#g.transform},
+			{<<"externalResourcesRequired">>, Record#g.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#g.data_fields,
+		Record#g.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#g.requiredExtensions},
+	{<<"requiredFeatures">>, Record#g.requiredFeatures},
+	{<<"systemLanguage">>, Record#g.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#g.xmlbase},
+	{<<"xml:lang">>, Record#g.xmllang},
+	{<<"xml:space">>, Record#g.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#g.onactivate},
+	{<<"onclick">>, Record#g.onclick},
+	{<<"onfocusin">>, Record#g.onfocusin},
+	{<<"onfocusout">>, Record#g.onfocusout},
+	{<<"onload">>, Record#g.onload_graphical},
+	{<<"onmousedown">>, Record#g.onmousedown},
+	{<<"onmousemove">>, Record#g.onmousemove},
+	{<<"onmouseout">>, Record#g.onmouseout},
+	{<<"onmouseover">>, Record#g.onmouseover},
+	{<<"onmouseup">>, Record#g.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#g.alignment_baseline},
+	{<<"baseline-shift">>, Record#g.baseline_shift},
+	{<<"clip">>, Record#g.clip},
+	{<<"clip-path">>, Record#g.clip_path},
+	{<<"clip-rule">>, Record#g.clip_rule},
+	{<<"color">>, Record#g.color},
+	{<<"color-interpolation">>, Record#g.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#g.color_interpolation_filters},
+	{<<"color-profile">>, Record#g.color_profile},
+	{<<"color-rendering">>, Record#g.color_rendering},
+	{<<"cursor">>, Record#g.cursor},
+	{<<"direction">>, Record#g.direction},
+	{<<"display">>, Record#g.display},
+	{<<"dominant-baseline">>, Record#g.dominant_baseline},
+	{<<"enable-background">>, Record#g.enable_background},
+	{<<"fill">>, Record#g.fill},
+	{<<"fill-opacity">>, Record#g.fill_opacity},
+	{<<"fill-rule">>, Record#g.fill_rule},
+	{<<"filter">>, Record#g.filter},
+	{<<"flood-color">>, Record#g.flood_color},
+	{<<"flood-opacity">>, Record#g.flood_opacity},
+	{<<"font-family">>, Record#g.font_family},
+	{<<"font-size">>, Record#g.font_size},
+	{<<"font-size-adjust">>, Record#g.font_size_adjust},
+	{<<"font-stretch">>, Record#g.font_stretch},
+	{<<"font-style">>, Record#g.font_style},
+	{<<"font-variant">>, Record#g.font_variant},
+	{<<"font-weight">>, Record#g.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#g.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#g.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#g.image_rendering},
+	{<<"kerning">>, Record#g.kerning},
+	{<<"letter-spacing">>, Record#g.letter_spacing},
+	{<<"lighting-color">>, Record#g.lighting_color},
+	{<<"marker-end">>, Record#g.marker_end},
+	{<<"marker-mid">>, Record#g.marker_mid},
+	{<<"marker-start">>, Record#g.marker_start},
+	{<<"mask">>, Record#g.mask},
+	{<<"opacity">>, Record#g.opacity},
+	{<<"overflow">>, Record#g.overflow},
+	{<<"pointer-events">>, Record#g.pointer_events},
+	{<<"shape-rendering">>, Record#g.shape_rendering},
+	{<<"stop-color">>, Record#g.stop_color},
+	{<<"stop-opacity">>, Record#g.stop_opacity},
+	{<<"stroke">>, Record#g.stroke},
+	{<<"stroke-dasharray">>, Record#g.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#g.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#g.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#g.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#g.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#g.stroke_opacity},
+	{<<"stroke-width">>, Record#g.stroke_width},
+	{<<"text-anchor">>, Record#g.text_anchor},
+	{<<"text-decoration">>, Record#g.text_decoration},
+	{<<"text-rendering">>, Record#g.text_rendering},
+	{<<"unicode-bidi">>, Record#g.unicode_bidi},
+	{<<"visibility">>, Record#g.visibility},
+	{<<"word-spacing">>, Record#g.word_spacing},
+	{<<"writing-mode">>, Record#g.writing_mode}
+].

+ 98 - 0
src/element_glyph.erl

@@ -0,0 +1,98 @@
+-module(element_glyph).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"glyph">>, nitro:render(Record#glyph.body),
+	lists:append([
+		[
+			{<<"id">>, Record#glyph.id},
+			{<<"class">>, Record#glyph.class},
+			{<<"style">>, Record#glyph.style},
+			{<<"d">>, Record#glyph.d},
+			{<<"horiz-adv-x">>, Record#glyph.horiz_adv_x},
+			{<<"vert-origin-x">>, Record#glyph.vert_origin_x},
+			{<<"vert-origin-y">>, Record#glyph.vert_origin_y},
+			{<<"vert-adv-y">>, Record#glyph.vert_adv_y},
+			{<<"unicode">>, Record#glyph.unicode},
+			{<<"glyph-name">>, Record#glyph.glyph_name},
+			{<<"orientation">>, Record#glyph.orientation},
+			{<<"arabic-form">>, Record#glyph.arabic_form},
+			{<<"lang">>, Record#glyph.lang}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		Record#glyph.data_fields,
+		Record#glyph.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#glyph.xmlbase},
+	{<<"xml:lang">>, Record#glyph.xmllang},
+	{<<"xml:space">>, Record#glyph.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#glyph.alignment_baseline},
+	{<<"baseline-shift">>, Record#glyph.baseline_shift},
+	{<<"clip">>, Record#glyph.clip},
+	{<<"clip-path">>, Record#glyph.clip_path},
+	{<<"clip-rule">>, Record#glyph.clip_rule},
+	{<<"color">>, Record#glyph.color},
+	{<<"color-interpolation">>, Record#glyph.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#glyph.color_interpolation_filters},
+	{<<"color-profile">>, Record#glyph.color_profile},
+	{<<"color-rendering">>, Record#glyph.color_rendering},
+	{<<"cursor">>, Record#glyph.cursor},
+	{<<"direction">>, Record#glyph.direction},
+	{<<"display">>, Record#glyph.display},
+	{<<"dominant-baseline">>, Record#glyph.dominant_baseline},
+	{<<"enable-background">>, Record#glyph.enable_background},
+	{<<"fill">>, Record#glyph.fill},
+	{<<"fill-opacity">>, Record#glyph.fill_opacity},
+	{<<"fill-rule">>, Record#glyph.fill_rule},
+	{<<"filter">>, Record#glyph.filter},
+	{<<"flood-color">>, Record#glyph.flood_color},
+	{<<"flood-opacity">>, Record#glyph.flood_opacity},
+	{<<"font-family">>, Record#glyph.font_family},
+	{<<"font-size">>, Record#glyph.font_size},
+	{<<"font-size-adjust">>, Record#glyph.font_size_adjust},
+	{<<"font-stretch">>, Record#glyph.font_stretch},
+	{<<"font-style">>, Record#glyph.font_style},
+	{<<"font-variant">>, Record#glyph.font_variant},
+	{<<"font-weight">>, Record#glyph.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#glyph.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#glyph.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#glyph.image_rendering},
+	{<<"kerning">>, Record#glyph.kerning},
+	{<<"letter-spacing">>, Record#glyph.letter_spacing},
+	{<<"lighting-color">>, Record#glyph.lighting_color},
+	{<<"marker-end">>, Record#glyph.marker_end},
+	{<<"marker-mid">>, Record#glyph.marker_mid},
+	{<<"marker-start">>, Record#glyph.marker_start},
+	{<<"mask">>, Record#glyph.mask},
+	{<<"opacity">>, Record#glyph.opacity},
+	{<<"overflow">>, Record#glyph.overflow},
+	{<<"pointer-events">>, Record#glyph.pointer_events},
+	{<<"shape-rendering">>, Record#glyph.shape_rendering},
+	{<<"stop-color">>, Record#glyph.stop_color},
+	{<<"stop-opacity">>, Record#glyph.stop_opacity},
+	{<<"stroke">>, Record#glyph.stroke},
+	{<<"stroke-dasharray">>, Record#glyph.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#glyph.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#glyph.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#glyph.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#glyph.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#glyph.stroke_opacity},
+	{<<"stroke-width">>, Record#glyph.stroke_width},
+	{<<"text-anchor">>, Record#glyph.text_anchor},
+	{<<"text-decoration">>, Record#glyph.text_decoration},
+	{<<"text-rendering">>, Record#glyph.text_rendering},
+	{<<"unicode-bidi">>, Record#glyph.unicode_bidi},
+	{<<"visibility">>, Record#glyph.visibility},
+	{<<"word-spacing">>, Record#glyph.word_spacing},
+	{<<"writing-mode">>, Record#glyph.writing_mode}
+].

+ 105 - 0
src/element_glyphref.erl

@@ -0,0 +1,105 @@
+-module(element_glyphref).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"glyphRef">>, nitro:render(Record#glyphRef.body),
+	lists:append([
+		[
+			{<<"id">>, Record#glyphRef.id},
+			{<<"class">>, Record#glyphRef.class},
+			{<<"style">>, Record#glyphRef.style},
+			{<<"x">>, Record#glyphRef.x},
+			{<<"y">>, Record#glyphRef.y},
+			{<<"dx">>, Record#glyphRef.dx},
+			{<<"dy">>, Record#glyphRef.dy},
+			{<<"glyphRef">>, Record#glyphRef.glyphRef},
+			{<<"format">>, Record#glyphRef.format}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#glyphRef.data_fields,
+		Record#glyphRef.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#glyphRef.xmlbase},
+	{<<"xml:lang">>, Record#glyphRef.xmllang},
+	{<<"xml:space">>, Record#glyphRef.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#glyphRef.alignment_baseline},
+	{<<"baseline-shift">>, Record#glyphRef.baseline_shift},
+	{<<"clip">>, Record#glyphRef.clip},
+	{<<"clip-path">>, Record#glyphRef.clip_path},
+	{<<"clip-rule">>, Record#glyphRef.clip_rule},
+	{<<"color">>, Record#glyphRef.color},
+	{<<"color-interpolation">>, Record#glyphRef.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#glyphRef.color_interpolation_filters},
+	{<<"color-profile">>, Record#glyphRef.color_profile},
+	{<<"color-rendering">>, Record#glyphRef.color_rendering},
+	{<<"cursor">>, Record#glyphRef.cursor},
+	{<<"direction">>, Record#glyphRef.direction},
+	{<<"display">>, Record#glyphRef.display},
+	{<<"dominant-baseline">>, Record#glyphRef.dominant_baseline},
+	{<<"enable-background">>, Record#glyphRef.enable_background},
+	{<<"fill">>, Record#glyphRef.fill},
+	{<<"fill-opacity">>, Record#glyphRef.fill_opacity},
+	{<<"fill-rule">>, Record#glyphRef.fill_rule},
+	{<<"filter">>, Record#glyphRef.filter},
+	{<<"flood-color">>, Record#glyphRef.flood_color},
+	{<<"flood-opacity">>, Record#glyphRef.flood_opacity},
+	{<<"font-family">>, Record#glyphRef.font_family},
+	{<<"font-size">>, Record#glyphRef.font_size},
+	{<<"font-size-adjust">>, Record#glyphRef.font_size_adjust},
+	{<<"font-stretch">>, Record#glyphRef.font_stretch},
+	{<<"font-style">>, Record#glyphRef.font_style},
+	{<<"font-variant">>, Record#glyphRef.font_variant},
+	{<<"font-weight">>, Record#glyphRef.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#glyphRef.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#glyphRef.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#glyphRef.image_rendering},
+	{<<"kerning">>, Record#glyphRef.kerning},
+	{<<"letter-spacing">>, Record#glyphRef.letter_spacing},
+	{<<"lighting-color">>, Record#glyphRef.lighting_color},
+	{<<"marker-end">>, Record#glyphRef.marker_end},
+	{<<"marker-mid">>, Record#glyphRef.marker_mid},
+	{<<"marker-start">>, Record#glyphRef.marker_start},
+	{<<"mask">>, Record#glyphRef.mask},
+	{<<"opacity">>, Record#glyphRef.opacity},
+	{<<"overflow">>, Record#glyphRef.overflow},
+	{<<"pointer-events">>, Record#glyphRef.pointer_events},
+	{<<"shape-rendering">>, Record#glyphRef.shape_rendering},
+	{<<"stop-color">>, Record#glyphRef.stop_color},
+	{<<"stop-opacity">>, Record#glyphRef.stop_opacity},
+	{<<"stroke">>, Record#glyphRef.stroke},
+	{<<"stroke-dasharray">>, Record#glyphRef.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#glyphRef.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#glyphRef.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#glyphRef.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#glyphRef.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#glyphRef.stroke_opacity},
+	{<<"stroke-width">>, Record#glyphRef.stroke_width},
+	{<<"text-anchor">>, Record#glyphRef.text_anchor},
+	{<<"text-decoration">>, Record#glyphRef.text_decoration},
+	{<<"text-rendering">>, Record#glyphRef.text_rendering},
+	{<<"unicode-bidi">>, Record#glyphRef.unicode_bidi},
+	{<<"visibility">>, Record#glyphRef.visibility},
+	{<<"word-spacing">>, Record#glyphRef.word_spacing},
+	{<<"writing-mode">>, Record#glyphRef.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#glyphRef.xlinkhref},
+	{<<"xlink:type">>, Record#glyphRef.xlinktype},
+	{<<"xlink:role">>, Record#glyphRef.xlinkrole},
+	{<<"xlink:arcrole">>, Record#glyphRef.xlinkarcrole},
+	{<<"xlink:title">>, Record#glyphRef.xlinktitle},
+	{<<"xlink:show">>, Record#glyphRef.xlinkshow},
+	{<<"xlink:actuate">>, Record#glyphRef.xlinkactuate}
+].

+ 30 - 0
src/element_hkern.erl

@@ -0,0 +1,30 @@
+-module(element_hkern).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"hkern">>, nitro:render(Record#hkern.body),
+	lists:append([
+		[
+			{<<"id">>, Record#hkern.id},
+			{<<"class">>, Record#hkern.class},
+			{<<"style">>, Record#hkern.style},
+			{<<"u1">>, Record#hkern.u1},
+			{<<"g1">>, Record#hkern.g1},
+			{<<"u2">>, Record#hkern.u2},
+			{<<"g2">>, Record#hkern.g2},
+			{<<"k">>, Record#hkern.k}
+		],
+		svg_core(Record),
+		Record#hkern.data_fields,
+		Record#hkern.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#hkern.xmlbase},
+	{<<"xml:lang">>, Record#hkern.xmllang},
+	{<<"xml:space">>, Record#hkern.xmlspace}
+].

+ 115 - 0
src/element_line.erl

@@ -0,0 +1,115 @@
+-module(element_line).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"line">>, nitro:render(Record#line.body),
+	lists:append([
+		[
+			{<<"id">>, Record#line.id},
+			{<<"class">>, Record#line.class},
+			{<<"style">>, Record#line.style},
+			{<<"x1">>, Record#line.x1},
+			{<<"x2">>, Record#line.x2},
+			{<<"y1">>, Record#line.y1},
+			{<<"y2">>, Record#line.y2},
+			{<<"transform">>, Record#line.transform},
+			{<<"externalResourcesRequired">>, Record#line.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#line.data_fields,
+		Record#line.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#line.requiredExtensions},
+	{<<"requiredFeatures">>, Record#line.requiredFeatures},
+	{<<"systemLanguage">>, Record#line.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#line.xmlbase},
+	{<<"xml:lang">>, Record#line.xmllang},
+	{<<"xml:space">>, Record#line.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#line.onactivate},
+	{<<"onclick">>, Record#line.onclick},
+	{<<"onfocusin">>, Record#line.onfocusin},
+	{<<"onfocusout">>, Record#line.onfocusout},
+	{<<"onload">>, Record#line.onload_graphical},
+	{<<"onmousedown">>, Record#line.onmousedown},
+	{<<"onmousemove">>, Record#line.onmousemove},
+	{<<"onmouseout">>, Record#line.onmouseout},
+	{<<"onmouseover">>, Record#line.onmouseover},
+	{<<"onmouseup">>, Record#line.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#line.alignment_baseline},
+	{<<"baseline-shift">>, Record#line.baseline_shift},
+	{<<"clip">>, Record#line.clip},
+	{<<"clip-path">>, Record#line.clip_path},
+	{<<"clip-rule">>, Record#line.clip_rule},
+	{<<"color">>, Record#line.color},
+	{<<"color-interpolation">>, Record#line.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#line.color_interpolation_filters},
+	{<<"color-profile">>, Record#line.color_profile},
+	{<<"color-rendering">>, Record#line.color_rendering},
+	{<<"cursor">>, Record#line.cursor},
+	{<<"direction">>, Record#line.direction},
+	{<<"display">>, Record#line.display},
+	{<<"dominant-baseline">>, Record#line.dominant_baseline},
+	{<<"enable-background">>, Record#line.enable_background},
+	{<<"fill">>, Record#line.fill},
+	{<<"fill-opacity">>, Record#line.fill_opacity},
+	{<<"fill-rule">>, Record#line.fill_rule},
+	{<<"filter">>, Record#line.filter},
+	{<<"flood-color">>, Record#line.flood_color},
+	{<<"flood-opacity">>, Record#line.flood_opacity},
+	{<<"font-family">>, Record#line.font_family},
+	{<<"font-size">>, Record#line.font_size},
+	{<<"font-size-adjust">>, Record#line.font_size_adjust},
+	{<<"font-stretch">>, Record#line.font_stretch},
+	{<<"font-style">>, Record#line.font_style},
+	{<<"font-variant">>, Record#line.font_variant},
+	{<<"font-weight">>, Record#line.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#line.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#line.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#line.image_rendering},
+	{<<"kerning">>, Record#line.kerning},
+	{<<"letter-spacing">>, Record#line.letter_spacing},
+	{<<"lighting-color">>, Record#line.lighting_color},
+	{<<"marker-end">>, Record#line.marker_end},
+	{<<"marker-mid">>, Record#line.marker_mid},
+	{<<"marker-start">>, Record#line.marker_start},
+	{<<"mask">>, Record#line.mask},
+	{<<"opacity">>, Record#line.opacity},
+	{<<"overflow">>, Record#line.overflow},
+	{<<"pointer-events">>, Record#line.pointer_events},
+	{<<"shape-rendering">>, Record#line.shape_rendering},
+	{<<"stop-color">>, Record#line.stop_color},
+	{<<"stop-opacity">>, Record#line.stop_opacity},
+	{<<"stroke">>, Record#line.stroke},
+	{<<"stroke-dasharray">>, Record#line.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#line.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#line.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#line.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#line.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#line.stroke_opacity},
+	{<<"stroke-width">>, Record#line.stroke_width},
+	{<<"text-anchor">>, Record#line.text_anchor},
+	{<<"text-decoration">>, Record#line.text_decoration},
+	{<<"text-rendering">>, Record#line.text_rendering},
+	{<<"unicode-bidi">>, Record#line.unicode_bidi},
+	{<<"visibility">>, Record#line.visibility},
+	{<<"word-spacing">>, Record#line.word_spacing},
+	{<<"writing-mode">>, Record#line.writing_mode}
+].

+ 107 - 0
src/element_lineargradient.erl

@@ -0,0 +1,107 @@
+-module(element_lineargradient).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"linearGradient">>, nitro:render(Record#linearGradient.body),
+	lists:append([
+		[
+			{<<"id">>, Record#linearGradient.id},
+			{<<"class">>, Record#linearGradient.class},
+			{<<"style">>, Record#linearGradient.style},
+			{<<"gradientUnits">>, Record#linearGradient.gradientUnits},
+			{<<"gradientTransform">>, Record#linearGradient.gradientTransform},
+			{<<"x1">>, Record#linearGradient.x1},
+			{<<"x2">>, Record#linearGradient.x2},
+			{<<"y1">>, Record#linearGradient.y1},
+			{<<"y2">>, Record#linearGradient.y2},
+			{<<"spreadMethod">>, Record#linearGradient.spreadMethod},
+			{<<"externalResourcesRequired">>, Record#linearGradient.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#linearGradient.data_fields,
+		Record#linearGradient.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#linearGradient.xmlbase},
+	{<<"xml:lang">>, Record#linearGradient.xmllang},
+	{<<"xml:space">>, Record#linearGradient.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#linearGradient.alignment_baseline},
+	{<<"baseline-shift">>, Record#linearGradient.baseline_shift},
+	{<<"clip">>, Record#linearGradient.clip},
+	{<<"clip-path">>, Record#linearGradient.clip_path},
+	{<<"clip-rule">>, Record#linearGradient.clip_rule},
+	{<<"color">>, Record#linearGradient.color},
+	{<<"color-interpolation">>, Record#linearGradient.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#linearGradient.color_interpolation_filters},
+	{<<"color-profile">>, Record#linearGradient.color_profile},
+	{<<"color-rendering">>, Record#linearGradient.color_rendering},
+	{<<"cursor">>, Record#linearGradient.cursor},
+	{<<"direction">>, Record#linearGradient.direction},
+	{<<"display">>, Record#linearGradient.display},
+	{<<"dominant-baseline">>, Record#linearGradient.dominant_baseline},
+	{<<"enable-background">>, Record#linearGradient.enable_background},
+	{<<"fill">>, Record#linearGradient.fill},
+	{<<"fill-opacity">>, Record#linearGradient.fill_opacity},
+	{<<"fill-rule">>, Record#linearGradient.fill_rule},
+	{<<"filter">>, Record#linearGradient.filter},
+	{<<"flood-color">>, Record#linearGradient.flood_color},
+	{<<"flood-opacity">>, Record#linearGradient.flood_opacity},
+	{<<"font-family">>, Record#linearGradient.font_family},
+	{<<"font-size">>, Record#linearGradient.font_size},
+	{<<"font-size-adjust">>, Record#linearGradient.font_size_adjust},
+	{<<"font-stretch">>, Record#linearGradient.font_stretch},
+	{<<"font-style">>, Record#linearGradient.font_style},
+	{<<"font-variant">>, Record#linearGradient.font_variant},
+	{<<"font-weight">>, Record#linearGradient.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#linearGradient.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#linearGradient.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#linearGradient.image_rendering},
+	{<<"kerning">>, Record#linearGradient.kerning},
+	{<<"letter-spacing">>, Record#linearGradient.letter_spacing},
+	{<<"lighting-color">>, Record#linearGradient.lighting_color},
+	{<<"marker-end">>, Record#linearGradient.marker_end},
+	{<<"marker-mid">>, Record#linearGradient.marker_mid},
+	{<<"marker-start">>, Record#linearGradient.marker_start},
+	{<<"mask">>, Record#linearGradient.mask},
+	{<<"opacity">>, Record#linearGradient.opacity},
+	{<<"overflow">>, Record#linearGradient.overflow},
+	{<<"pointer-events">>, Record#linearGradient.pointer_events},
+	{<<"shape-rendering">>, Record#linearGradient.shape_rendering},
+	{<<"stop-color">>, Record#linearGradient.stop_color},
+	{<<"stop-opacity">>, Record#linearGradient.stop_opacity},
+	{<<"stroke">>, Record#linearGradient.stroke},
+	{<<"stroke-dasharray">>, Record#linearGradient.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#linearGradient.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#linearGradient.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#linearGradient.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#linearGradient.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#linearGradient.stroke_opacity},
+	{<<"stroke-width">>, Record#linearGradient.stroke_width},
+	{<<"text-anchor">>, Record#linearGradient.text_anchor},
+	{<<"text-decoration">>, Record#linearGradient.text_decoration},
+	{<<"text-rendering">>, Record#linearGradient.text_rendering},
+	{<<"unicode-bidi">>, Record#linearGradient.unicode_bidi},
+	{<<"visibility">>, Record#linearGradient.visibility},
+	{<<"word-spacing">>, Record#linearGradient.word_spacing},
+	{<<"writing-mode">>, Record#linearGradient.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#linearGradient.xlinkhref},
+	{<<"xlink:type">>, Record#linearGradient.xlinktype},
+	{<<"xlink:role">>, Record#linearGradient.xlinkrole},
+	{<<"xlink:arcrole">>, Record#linearGradient.xlinkarcrole},
+	{<<"xlink:title">>, Record#linearGradient.xlinktitle},
+	{<<"xlink:show">>, Record#linearGradient.xlinkshow},
+	{<<"xlink:actuate">>, Record#linearGradient.xlinkactuate}
+].

+ 98 - 0
src/element_marker.erl

@@ -0,0 +1,98 @@
+-module(element_marker).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"marker">>, nitro:render(Record#marker.body),
+	lists:append([
+		[
+			{<<"id">>, Record#marker.id},
+			{<<"class">>, Record#marker.class},
+			{<<"style">>, Record#marker.style},
+			{<<"markerUnits">>, Record#marker.markerUnits},
+			{<<"refX">>, Record#marker.refX},
+			{<<"refY">>, Record#marker.refY},
+			{<<"markerWidth">>, Record#marker.markerWidth},
+			{<<"markerHeight">>, Record#marker.markerHeight},
+			{<<"orient">>, Record#marker.orient},
+			{<<"viewBox">>, Record#marker.viewBox},
+			{<<"preserveAspectRatio">>, Record#marker.preserveAspectRatio},
+			{<<"transform">>, Record#marker.transform},
+			{<<"externalResourcesRequired">>, Record#marker.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		Record#marker.data_fields,
+		Record#marker.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#marker.xmlbase},
+	{<<"xml:lang">>, Record#marker.xmllang},
+	{<<"xml:space">>, Record#marker.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#marker.alignment_baseline},
+	{<<"baseline-shift">>, Record#marker.baseline_shift},
+	{<<"clip">>, Record#marker.clip},
+	{<<"clip-path">>, Record#marker.clip_path},
+	{<<"clip-rule">>, Record#marker.clip_rule},
+	{<<"color">>, Record#marker.color},
+	{<<"color-interpolation">>, Record#marker.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#marker.color_interpolation_filters},
+	{<<"color-profile">>, Record#marker.color_profile},
+	{<<"color-rendering">>, Record#marker.color_rendering},
+	{<<"cursor">>, Record#marker.cursor},
+	{<<"direction">>, Record#marker.direction},
+	{<<"display">>, Record#marker.display},
+	{<<"dominant-baseline">>, Record#marker.dominant_baseline},
+	{<<"enable-background">>, Record#marker.enable_background},
+	{<<"fill">>, Record#marker.fill},
+	{<<"fill-opacity">>, Record#marker.fill_opacity},
+	{<<"fill-rule">>, Record#marker.fill_rule},
+	{<<"filter">>, Record#marker.filter},
+	{<<"flood-color">>, Record#marker.flood_color},
+	{<<"flood-opacity">>, Record#marker.flood_opacity},
+	{<<"font-family">>, Record#marker.font_family},
+	{<<"font-size">>, Record#marker.font_size},
+	{<<"font-size-adjust">>, Record#marker.font_size_adjust},
+	{<<"font-stretch">>, Record#marker.font_stretch},
+	{<<"font-style">>, Record#marker.font_style},
+	{<<"font-variant">>, Record#marker.font_variant},
+	{<<"font-weight">>, Record#marker.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#marker.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#marker.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#marker.image_rendering},
+	{<<"kerning">>, Record#marker.kerning},
+	{<<"letter-spacing">>, Record#marker.letter_spacing},
+	{<<"lighting-color">>, Record#marker.lighting_color},
+	{<<"marker-end">>, Record#marker.marker_end},
+	{<<"marker-mid">>, Record#marker.marker_mid},
+	{<<"marker-start">>, Record#marker.marker_start},
+	{<<"mask">>, Record#marker.mask},
+	{<<"opacity">>, Record#marker.opacity},
+	{<<"overflow">>, Record#marker.overflow},
+	{<<"pointer-events">>, Record#marker.pointer_events},
+	{<<"shape-rendering">>, Record#marker.shape_rendering},
+	{<<"stop-color">>, Record#marker.stop_color},
+	{<<"stop-opacity">>, Record#marker.stop_opacity},
+	{<<"stroke">>, Record#marker.stroke},
+	{<<"stroke-dasharray">>, Record#marker.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#marker.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#marker.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#marker.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#marker.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#marker.stroke_opacity},
+	{<<"stroke-width">>, Record#marker.stroke_width},
+	{<<"text-anchor">>, Record#marker.text_anchor},
+	{<<"text-decoration">>, Record#marker.text_decoration},
+	{<<"text-rendering">>, Record#marker.text_rendering},
+	{<<"unicode-bidi">>, Record#marker.unicode_bidi},
+	{<<"visibility">>, Record#marker.visibility},
+	{<<"word-spacing">>, Record#marker.word_spacing},
+	{<<"writing-mode">>, Record#marker.writing_mode}
+].

+ 102 - 0
src/element_mask.erl

@@ -0,0 +1,102 @@
+-module(element_mask).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"mask">>, nitro:render(Record#mask.body),
+	lists:append([
+		[
+			{<<"id">>, Record#mask.id},
+			{<<"class">>, Record#mask.class},
+			{<<"style">>, Record#mask.style},
+			{<<"maskUnits">>, Record#mask.maskUnits},
+			{<<"maskContentUnits">>, Record#mask.maskContentUnits},
+			{<<"x">>, Record#mask.x},
+			{<<"y">>, Record#mask.y},
+			{<<"width">>, Record#mask.width},
+			{<<"height">>, Record#mask.height},
+			{<<"externalResourcesRequired">>, Record#mask.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_presentation(Record),
+		Record#mask.data_fields,
+		Record#mask.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#mask.requiredExtensions},
+	{<<"requiredFeatures">>, Record#mask.requiredFeatures},
+	{<<"systemLanguage">>, Record#mask.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#mask.xmlbase},
+	{<<"xml:lang">>, Record#mask.xmllang},
+	{<<"xml:space">>, Record#mask.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#mask.alignment_baseline},
+	{<<"baseline-shift">>, Record#mask.baseline_shift},
+	{<<"clip">>, Record#mask.clip},
+	{<<"clip-path">>, Record#mask.clip_path},
+	{<<"clip-rule">>, Record#mask.clip_rule},
+	{<<"color">>, Record#mask.color},
+	{<<"color-interpolation">>, Record#mask.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#mask.color_interpolation_filters},
+	{<<"color-profile">>, Record#mask.color_profile},
+	{<<"color-rendering">>, Record#mask.color_rendering},
+	{<<"cursor">>, Record#mask.cursor},
+	{<<"direction">>, Record#mask.direction},
+	{<<"display">>, Record#mask.display},
+	{<<"dominant-baseline">>, Record#mask.dominant_baseline},
+	{<<"enable-background">>, Record#mask.enable_background},
+	{<<"fill">>, Record#mask.fill},
+	{<<"fill-opacity">>, Record#mask.fill_opacity},
+	{<<"fill-rule">>, Record#mask.fill_rule},
+	{<<"filter">>, Record#mask.filter},
+	{<<"flood-color">>, Record#mask.flood_color},
+	{<<"flood-opacity">>, Record#mask.flood_opacity},
+	{<<"font-family">>, Record#mask.font_family},
+	{<<"font-size">>, Record#mask.font_size},
+	{<<"font-size-adjust">>, Record#mask.font_size_adjust},
+	{<<"font-stretch">>, Record#mask.font_stretch},
+	{<<"font-style">>, Record#mask.font_style},
+	{<<"font-variant">>, Record#mask.font_variant},
+	{<<"font-weight">>, Record#mask.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#mask.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#mask.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#mask.image_rendering},
+	{<<"kerning">>, Record#mask.kerning},
+	{<<"letter-spacing">>, Record#mask.letter_spacing},
+	{<<"lighting-color">>, Record#mask.lighting_color},
+	{<<"marker-end">>, Record#mask.marker_end},
+	{<<"marker-mid">>, Record#mask.marker_mid},
+	{<<"marker-start">>, Record#mask.marker_start},
+	{<<"mask">>, Record#mask.mask},
+	{<<"opacity">>, Record#mask.opacity},
+	{<<"overflow">>, Record#mask.overflow},
+	{<<"pointer-events">>, Record#mask.pointer_events},
+	{<<"shape-rendering">>, Record#mask.shape_rendering},
+	{<<"stop-color">>, Record#mask.stop_color},
+	{<<"stop-opacity">>, Record#mask.stop_opacity},
+	{<<"stroke">>, Record#mask.stroke},
+	{<<"stroke-dasharray">>, Record#mask.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#mask.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#mask.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#mask.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#mask.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#mask.stroke_opacity},
+	{<<"stroke-width">>, Record#mask.stroke_width},
+	{<<"text-anchor">>, Record#mask.text_anchor},
+	{<<"text-decoration">>, Record#mask.text_decoration},
+	{<<"text-rendering">>, Record#mask.text_rendering},
+	{<<"unicode-bidi">>, Record#mask.unicode_bidi},
+	{<<"visibility">>, Record#mask.visibility},
+	{<<"word-spacing">>, Record#mask.word_spacing},
+	{<<"writing-mode">>, Record#mask.writing_mode}
+].

+ 25 - 0
src/element_metadata.erl

@@ -0,0 +1,25 @@
+-module(element_metadata).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"metadata">>, nitro:render(Record#metadata.body),
+	lists:append([
+		[
+			{<<"id">>, Record#metadata.id},
+			{<<"class">>, Record#metadata.class},
+			{<<"style">>, Record#metadata.style}
+		],
+		svg_core(Record),
+		Record#metadata.data_fields,
+		Record#metadata.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#metadata.xmlbase},
+	{<<"xml:lang">>, Record#metadata.xmllang},
+	{<<"xml:space">>, Record#metadata.xmlspace}
+].

+ 93 - 0
src/element_missingglyph.erl

@@ -0,0 +1,93 @@
+-module(element_missingglyph).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"missing-glyph">>, nitro:render(Record#missing_glyph.body),
+	lists:append([
+		[
+			{<<"id">>, Record#missing_glyph.id},
+			{<<"class">>, Record#missing_glyph.class},
+			{<<"style">>, Record#missing_glyph.style},
+			{<<"d">>, Record#missing_glyph.d},
+			{<<"horiz-adv-x">>, Record#missing_glyph.horiz_adv_x},
+			{<<"vert-origin-x">>, Record#missing_glyph.vert_origin_x},
+			{<<"vert-origin-y">>, Record#missing_glyph.vert_origin_y},
+			{<<"vert-adv-y">>, Record#missing_glyph.vert_adv_y}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		Record#missing_glyph.data_fields,
+		Record#missing_glyph.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#missing_glyph.xmlbase},
+	{<<"xml:lang">>, Record#missing_glyph.xmllang},
+	{<<"xml:space">>, Record#missing_glyph.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#missing_glyph.alignment_baseline},
+	{<<"baseline-shift">>, Record#missing_glyph.baseline_shift},
+	{<<"clip">>, Record#missing_glyph.clip},
+	{<<"clip-path">>, Record#missing_glyph.clip_path},
+	{<<"clip-rule">>, Record#missing_glyph.clip_rule},
+	{<<"color">>, Record#missing_glyph.color},
+	{<<"color-interpolation">>, Record#missing_glyph.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#missing_glyph.color_interpolation_filters},
+	{<<"color-profile">>, Record#missing_glyph.color_profile},
+	{<<"color-rendering">>, Record#missing_glyph.color_rendering},
+	{<<"cursor">>, Record#missing_glyph.cursor},
+	{<<"direction">>, Record#missing_glyph.direction},
+	{<<"display">>, Record#missing_glyph.display},
+	{<<"dominant-baseline">>, Record#missing_glyph.dominant_baseline},
+	{<<"enable-background">>, Record#missing_glyph.enable_background},
+	{<<"fill">>, Record#missing_glyph.fill},
+	{<<"fill-opacity">>, Record#missing_glyph.fill_opacity},
+	{<<"fill-rule">>, Record#missing_glyph.fill_rule},
+	{<<"filter">>, Record#missing_glyph.filter},
+	{<<"flood-color">>, Record#missing_glyph.flood_color},
+	{<<"flood-opacity">>, Record#missing_glyph.flood_opacity},
+	{<<"font-family">>, Record#missing_glyph.font_family},
+	{<<"font-size">>, Record#missing_glyph.font_size},
+	{<<"font-size-adjust">>, Record#missing_glyph.font_size_adjust},
+	{<<"font-stretch">>, Record#missing_glyph.font_stretch},
+	{<<"font-style">>, Record#missing_glyph.font_style},
+	{<<"font-variant">>, Record#missing_glyph.font_variant},
+	{<<"font-weight">>, Record#missing_glyph.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#missing_glyph.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#missing_glyph.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#missing_glyph.image_rendering},
+	{<<"kerning">>, Record#missing_glyph.kerning},
+	{<<"letter-spacing">>, Record#missing_glyph.letter_spacing},
+	{<<"lighting-color">>, Record#missing_glyph.lighting_color},
+	{<<"marker-end">>, Record#missing_glyph.marker_end},
+	{<<"marker-mid">>, Record#missing_glyph.marker_mid},
+	{<<"marker-start">>, Record#missing_glyph.marker_start},
+	{<<"mask">>, Record#missing_glyph.mask},
+	{<<"opacity">>, Record#missing_glyph.opacity},
+	{<<"overflow">>, Record#missing_glyph.overflow},
+	{<<"pointer-events">>, Record#missing_glyph.pointer_events},
+	{<<"shape-rendering">>, Record#missing_glyph.shape_rendering},
+	{<<"stop-color">>, Record#missing_glyph.stop_color},
+	{<<"stop-opacity">>, Record#missing_glyph.stop_opacity},
+	{<<"stroke">>, Record#missing_glyph.stroke},
+	{<<"stroke-dasharray">>, Record#missing_glyph.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#missing_glyph.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#missing_glyph.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#missing_glyph.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#missing_glyph.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#missing_glyph.stroke_opacity},
+	{<<"stroke-width">>, Record#missing_glyph.stroke_width},
+	{<<"text-anchor">>, Record#missing_glyph.text_anchor},
+	{<<"text-decoration">>, Record#missing_glyph.text_decoration},
+	{<<"text-rendering">>, Record#missing_glyph.text_rendering},
+	{<<"unicode-bidi">>, Record#missing_glyph.unicode_bidi},
+	{<<"visibility">>, Record#missing_glyph.visibility},
+	{<<"word-spacing">>, Record#missing_glyph.word_spacing},
+	{<<"writing-mode">>, Record#missing_glyph.writing_mode}
+].

+ 37 - 0
src/element_mpath.erl

@@ -0,0 +1,37 @@
+-module(element_mpath).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"mpath">>, nitro:render(Record#mpath.body),
+	lists:append([
+		[
+			{<<"id">>, Record#mpath.id},
+			{<<"class">>, Record#mpath.class},
+			{<<"style">>, Record#mpath.style},
+			{<<"externalResourcesRequired">>, Record#mpath.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#mpath.data_fields,
+		Record#mpath.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#mpath.xmlbase},
+	{<<"xml:lang">>, Record#mpath.xmllang},
+	{<<"xml:space">>, Record#mpath.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#mpath.xlinkhref},
+	{<<"xlink:type">>, Record#mpath.xlinktype},
+	{<<"xlink:role">>, Record#mpath.xlinkrole},
+	{<<"xlink:arcrole">>, Record#mpath.xlinkarcrole},
+	{<<"xlink:title">>, Record#mpath.xlinktitle},
+	{<<"xlink:show">>, Record#mpath.xlinkshow},
+	{<<"xlink:actuate">>, Record#mpath.xlinkactuate}
+].

+ 113 - 0
src/element_path.erl

@@ -0,0 +1,113 @@
+-module(element_path).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"path">>, nitro:render(Record#path.body),
+	lists:append([
+		[
+			{<<"id">>, Record#path.id},
+			{<<"class">>, Record#path.class},
+			{<<"style">>, Record#path.style},
+			{<<"d">>, Record#path.d},
+			{<<"pathLength">>, Record#path.pathLength},
+			{<<"transform">>, Record#path.transform},
+			{<<"externalResourcesRequired">>, Record#path.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#path.data_fields,
+		Record#path.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#path.requiredExtensions},
+	{<<"requiredFeatures">>, Record#path.requiredFeatures},
+	{<<"systemLanguage">>, Record#path.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#path.xmlbase},
+	{<<"xml:lang">>, Record#path.xmllang},
+	{<<"xml:space">>, Record#path.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#path.onactivate},
+	{<<"onclick">>, Record#path.onclick},
+	{<<"onfocusin">>, Record#path.onfocusin},
+	{<<"onfocusout">>, Record#path.onfocusout},
+	{<<"onload">>, Record#path.onload_graphical},
+	{<<"onmousedown">>, Record#path.onmousedown},
+	{<<"onmousemove">>, Record#path.onmousemove},
+	{<<"onmouseout">>, Record#path.onmouseout},
+	{<<"onmouseover">>, Record#path.onmouseover},
+	{<<"onmouseup">>, Record#path.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#path.alignment_baseline},
+	{<<"baseline-shift">>, Record#path.baseline_shift},
+	{<<"clip">>, Record#path.clip},
+	{<<"clip-path">>, Record#path.clip_path},
+	{<<"clip-rule">>, Record#path.clip_rule},
+	{<<"color">>, Record#path.color},
+	{<<"color-interpolation">>, Record#path.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#path.color_interpolation_filters},
+	{<<"color-profile">>, Record#path.color_profile},
+	{<<"color-rendering">>, Record#path.color_rendering},
+	{<<"cursor">>, Record#path.cursor},
+	{<<"direction">>, Record#path.direction},
+	{<<"display">>, Record#path.display},
+	{<<"dominant-baseline">>, Record#path.dominant_baseline},
+	{<<"enable-background">>, Record#path.enable_background},
+	{<<"fill">>, Record#path.fill},
+	{<<"fill-opacity">>, Record#path.fill_opacity},
+	{<<"fill-rule">>, Record#path.fill_rule},
+	{<<"filter">>, Record#path.filter},
+	{<<"flood-color">>, Record#path.flood_color},
+	{<<"flood-opacity">>, Record#path.flood_opacity},
+	{<<"font-family">>, Record#path.font_family},
+	{<<"font-size">>, Record#path.font_size},
+	{<<"font-size-adjust">>, Record#path.font_size_adjust},
+	{<<"font-stretch">>, Record#path.font_stretch},
+	{<<"font-style">>, Record#path.font_style},
+	{<<"font-variant">>, Record#path.font_variant},
+	{<<"font-weight">>, Record#path.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#path.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#path.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#path.image_rendering},
+	{<<"kerning">>, Record#path.kerning},
+	{<<"letter-spacing">>, Record#path.letter_spacing},
+	{<<"lighting-color">>, Record#path.lighting_color},
+	{<<"marker-end">>, Record#path.marker_end},
+	{<<"marker-mid">>, Record#path.marker_mid},
+	{<<"marker-start">>, Record#path.marker_start},
+	{<<"mask">>, Record#path.mask},
+	{<<"opacity">>, Record#path.opacity},
+	{<<"overflow">>, Record#path.overflow},
+	{<<"pointer-events">>, Record#path.pointer_events},
+	{<<"shape-rendering">>, Record#path.shape_rendering},
+	{<<"stop-color">>, Record#path.stop_color},
+	{<<"stop-opacity">>, Record#path.stop_opacity},
+	{<<"stroke">>, Record#path.stroke},
+	{<<"stroke-dasharray">>, Record#path.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#path.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#path.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#path.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#path.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#path.stroke_opacity},
+	{<<"stroke-width">>, Record#path.stroke_width},
+	{<<"text-anchor">>, Record#path.text_anchor},
+	{<<"text-decoration">>, Record#path.text_decoration},
+	{<<"text-rendering">>, Record#path.text_rendering},
+	{<<"unicode-bidi">>, Record#path.unicode_bidi},
+	{<<"visibility">>, Record#path.visibility},
+	{<<"word-spacing">>, Record#path.word_spacing},
+	{<<"writing-mode">>, Record#path.writing_mode}
+].

+ 116 - 0
src/element_pattern.erl

@@ -0,0 +1,116 @@
+-module(element_pattern).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"pattern">>, nitro:render(Record#pattern.body),
+	lists:append([
+		[
+			{<<"id">>, Record#pattern.id},
+			{<<"class">>, Record#pattern.class},
+			{<<"style">>, Record#pattern.style},
+			{<<"patternUnits">>, Record#pattern.patternUnits},
+			{<<"patternContentUnits">>, Record#pattern.patternContentUnits},
+			{<<"patternTransform">>, Record#pattern.patternTransform},
+			{<<"x">>, Record#pattern.x},
+			{<<"y">>, Record#pattern.y},
+			{<<"width">>, Record#pattern.width},
+			{<<"height">>, Record#pattern.height},
+			{<<"preserveAspectRatio">>, Record#pattern.preserveAspectRatio},
+			{<<"viewBox">>, Record#pattern.viewBox},
+			{<<"externalResourcesRequired">>, Record#pattern.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#pattern.data_fields,
+		Record#pattern.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#pattern.requiredExtensions},
+	{<<"requiredFeatures">>, Record#pattern.requiredFeatures},
+	{<<"systemLanguage">>, Record#pattern.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#pattern.xmlbase},
+	{<<"xml:lang">>, Record#pattern.xmllang},
+	{<<"xml:space">>, Record#pattern.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#pattern.alignment_baseline},
+	{<<"baseline-shift">>, Record#pattern.baseline_shift},
+	{<<"clip">>, Record#pattern.clip},
+	{<<"clip-path">>, Record#pattern.clip_path},
+	{<<"clip-rule">>, Record#pattern.clip_rule},
+	{<<"color">>, Record#pattern.color},
+	{<<"color-interpolation">>, Record#pattern.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#pattern.color_interpolation_filters},
+	{<<"color-profile">>, Record#pattern.color_profile},
+	{<<"color-rendering">>, Record#pattern.color_rendering},
+	{<<"cursor">>, Record#pattern.cursor},
+	{<<"direction">>, Record#pattern.direction},
+	{<<"display">>, Record#pattern.display},
+	{<<"dominant-baseline">>, Record#pattern.dominant_baseline},
+	{<<"enable-background">>, Record#pattern.enable_background},
+	{<<"fill">>, Record#pattern.fill},
+	{<<"fill-opacity">>, Record#pattern.fill_opacity},
+	{<<"fill-rule">>, Record#pattern.fill_rule},
+	{<<"filter">>, Record#pattern.filter},
+	{<<"flood-color">>, Record#pattern.flood_color},
+	{<<"flood-opacity">>, Record#pattern.flood_opacity},
+	{<<"font-family">>, Record#pattern.font_family},
+	{<<"font-size">>, Record#pattern.font_size},
+	{<<"font-size-adjust">>, Record#pattern.font_size_adjust},
+	{<<"font-stretch">>, Record#pattern.font_stretch},
+	{<<"font-style">>, Record#pattern.font_style},
+	{<<"font-variant">>, Record#pattern.font_variant},
+	{<<"font-weight">>, Record#pattern.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#pattern.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#pattern.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#pattern.image_rendering},
+	{<<"kerning">>, Record#pattern.kerning},
+	{<<"letter-spacing">>, Record#pattern.letter_spacing},
+	{<<"lighting-color">>, Record#pattern.lighting_color},
+	{<<"marker-end">>, Record#pattern.marker_end},
+	{<<"marker-mid">>, Record#pattern.marker_mid},
+	{<<"marker-start">>, Record#pattern.marker_start},
+	{<<"mask">>, Record#pattern.mask},
+	{<<"opacity">>, Record#pattern.opacity},
+	{<<"overflow">>, Record#pattern.overflow},
+	{<<"pointer-events">>, Record#pattern.pointer_events},
+	{<<"shape-rendering">>, Record#pattern.shape_rendering},
+	{<<"stop-color">>, Record#pattern.stop_color},
+	{<<"stop-opacity">>, Record#pattern.stop_opacity},
+	{<<"stroke">>, Record#pattern.stroke},
+	{<<"stroke-dasharray">>, Record#pattern.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#pattern.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#pattern.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#pattern.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#pattern.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#pattern.stroke_opacity},
+	{<<"stroke-width">>, Record#pattern.stroke_width},
+	{<<"text-anchor">>, Record#pattern.text_anchor},
+	{<<"text-decoration">>, Record#pattern.text_decoration},
+	{<<"text-rendering">>, Record#pattern.text_rendering},
+	{<<"unicode-bidi">>, Record#pattern.unicode_bidi},
+	{<<"visibility">>, Record#pattern.visibility},
+	{<<"word-spacing">>, Record#pattern.word_spacing},
+	{<<"writing-mode">>, Record#pattern.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#pattern.xlinkhref},
+	{<<"xlink:type">>, Record#pattern.xlinktype},
+	{<<"xlink:role">>, Record#pattern.xlinkrole},
+	{<<"xlink:arcrole">>, Record#pattern.xlinkarcrole},
+	{<<"xlink:title">>, Record#pattern.xlinktitle},
+	{<<"xlink:show">>, Record#pattern.xlinkshow},
+	{<<"xlink:actuate">>, Record#pattern.xlinkactuate}
+].

+ 112 - 0
src/element_polygon.erl

@@ -0,0 +1,112 @@
+-module(element_polygon).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"polygon">>, nitro:render(Record#polygon.body),
+	lists:append([
+		[
+			{<<"id">>, Record#polygon.id},
+			{<<"class">>, Record#polygon.class},
+			{<<"style">>, Record#polygon.style},
+			{<<"points">>, Record#polygon.points},
+			{<<"transform">>, Record#polygon.transform},
+			{<<"externalResourcesRequired">>, Record#polygon.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#polygon.data_fields,
+		Record#polygon.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#polygon.requiredExtensions},
+	{<<"requiredFeatures">>, Record#polygon.requiredFeatures},
+	{<<"systemLanguage">>, Record#polygon.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#polygon.xmlbase},
+	{<<"xml:lang">>, Record#polygon.xmllang},
+	{<<"xml:space">>, Record#polygon.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#polygon.onactivate},
+	{<<"onclick">>, Record#polygon.onclick},
+	{<<"onfocusin">>, Record#polygon.onfocusin},
+	{<<"onfocusout">>, Record#polygon.onfocusout},
+	{<<"onload">>, Record#polygon.onload_graphical},
+	{<<"onmousedown">>, Record#polygon.onmousedown},
+	{<<"onmousemove">>, Record#polygon.onmousemove},
+	{<<"onmouseout">>, Record#polygon.onmouseout},
+	{<<"onmouseover">>, Record#polygon.onmouseover},
+	{<<"onmouseup">>, Record#polygon.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#polygon.alignment_baseline},
+	{<<"baseline-shift">>, Record#polygon.baseline_shift},
+	{<<"clip">>, Record#polygon.clip},
+	{<<"clip-path">>, Record#polygon.clip_path},
+	{<<"clip-rule">>, Record#polygon.clip_rule},
+	{<<"color">>, Record#polygon.color},
+	{<<"color-interpolation">>, Record#polygon.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#polygon.color_interpolation_filters},
+	{<<"color-profile">>, Record#polygon.color_profile},
+	{<<"color-rendering">>, Record#polygon.color_rendering},
+	{<<"cursor">>, Record#polygon.cursor},
+	{<<"direction">>, Record#polygon.direction},
+	{<<"display">>, Record#polygon.display},
+	{<<"dominant-baseline">>, Record#polygon.dominant_baseline},
+	{<<"enable-background">>, Record#polygon.enable_background},
+	{<<"fill">>, Record#polygon.fill},
+	{<<"fill-opacity">>, Record#polygon.fill_opacity},
+	{<<"fill-rule">>, Record#polygon.fill_rule},
+	{<<"filter">>, Record#polygon.filter},
+	{<<"flood-color">>, Record#polygon.flood_color},
+	{<<"flood-opacity">>, Record#polygon.flood_opacity},
+	{<<"font-family">>, Record#polygon.font_family},
+	{<<"font-size">>, Record#polygon.font_size},
+	{<<"font-size-adjust">>, Record#polygon.font_size_adjust},
+	{<<"font-stretch">>, Record#polygon.font_stretch},
+	{<<"font-style">>, Record#polygon.font_style},
+	{<<"font-variant">>, Record#polygon.font_variant},
+	{<<"font-weight">>, Record#polygon.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#polygon.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#polygon.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#polygon.image_rendering},
+	{<<"kerning">>, Record#polygon.kerning},
+	{<<"letter-spacing">>, Record#polygon.letter_spacing},
+	{<<"lighting-color">>, Record#polygon.lighting_color},
+	{<<"marker-end">>, Record#polygon.marker_end},
+	{<<"marker-mid">>, Record#polygon.marker_mid},
+	{<<"marker-start">>, Record#polygon.marker_start},
+	{<<"mask">>, Record#polygon.mask},
+	{<<"opacity">>, Record#polygon.opacity},
+	{<<"overflow">>, Record#polygon.overflow},
+	{<<"pointer-events">>, Record#polygon.pointer_events},
+	{<<"shape-rendering">>, Record#polygon.shape_rendering},
+	{<<"stop-color">>, Record#polygon.stop_color},
+	{<<"stop-opacity">>, Record#polygon.stop_opacity},
+	{<<"stroke">>, Record#polygon.stroke},
+	{<<"stroke-dasharray">>, Record#polygon.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#polygon.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#polygon.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#polygon.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#polygon.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#polygon.stroke_opacity},
+	{<<"stroke-width">>, Record#polygon.stroke_width},
+	{<<"text-anchor">>, Record#polygon.text_anchor},
+	{<<"text-decoration">>, Record#polygon.text_decoration},
+	{<<"text-rendering">>, Record#polygon.text_rendering},
+	{<<"unicode-bidi">>, Record#polygon.unicode_bidi},
+	{<<"visibility">>, Record#polygon.visibility},
+	{<<"word-spacing">>, Record#polygon.word_spacing},
+	{<<"writing-mode">>, Record#polygon.writing_mode}
+].

+ 112 - 0
src/element_polyline.erl

@@ -0,0 +1,112 @@
+-module(element_polyline).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"polyline">>, nitro:render(Record#polyline.body),
+	lists:append([
+		[
+			{<<"id">>, Record#polyline.id},
+			{<<"class">>, Record#polyline.class},
+			{<<"style">>, Record#polyline.style},
+			{<<"points">>, Record#polyline.points},
+			{<<"transform">>, Record#polyline.transform},
+			{<<"externalResourcesRequired">>, Record#polyline.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#polyline.data_fields,
+		Record#polyline.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#polyline.requiredExtensions},
+	{<<"requiredFeatures">>, Record#polyline.requiredFeatures},
+	{<<"systemLanguage">>, Record#polyline.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#polyline.xmlbase},
+	{<<"xml:lang">>, Record#polyline.xmllang},
+	{<<"xml:space">>, Record#polyline.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#polyline.onactivate},
+	{<<"onclick">>, Record#polyline.onclick},
+	{<<"onfocusin">>, Record#polyline.onfocusin},
+	{<<"onfocusout">>, Record#polyline.onfocusout},
+	{<<"onload">>, Record#polyline.onload_graphical},
+	{<<"onmousedown">>, Record#polyline.onmousedown},
+	{<<"onmousemove">>, Record#polyline.onmousemove},
+	{<<"onmouseout">>, Record#polyline.onmouseout},
+	{<<"onmouseover">>, Record#polyline.onmouseover},
+	{<<"onmouseup">>, Record#polyline.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#polyline.alignment_baseline},
+	{<<"baseline-shift">>, Record#polyline.baseline_shift},
+	{<<"clip">>, Record#polyline.clip},
+	{<<"clip-path">>, Record#polyline.clip_path},
+	{<<"clip-rule">>, Record#polyline.clip_rule},
+	{<<"color">>, Record#polyline.color},
+	{<<"color-interpolation">>, Record#polyline.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#polyline.color_interpolation_filters},
+	{<<"color-profile">>, Record#polyline.color_profile},
+	{<<"color-rendering">>, Record#polyline.color_rendering},
+	{<<"cursor">>, Record#polyline.cursor},
+	{<<"direction">>, Record#polyline.direction},
+	{<<"display">>, Record#polyline.display},
+	{<<"dominant-baseline">>, Record#polyline.dominant_baseline},
+	{<<"enable-background">>, Record#polyline.enable_background},
+	{<<"fill">>, Record#polyline.fill},
+	{<<"fill-opacity">>, Record#polyline.fill_opacity},
+	{<<"fill-rule">>, Record#polyline.fill_rule},
+	{<<"filter">>, Record#polyline.filter},
+	{<<"flood-color">>, Record#polyline.flood_color},
+	{<<"flood-opacity">>, Record#polyline.flood_opacity},
+	{<<"font-family">>, Record#polyline.font_family},
+	{<<"font-size">>, Record#polyline.font_size},
+	{<<"font-size-adjust">>, Record#polyline.font_size_adjust},
+	{<<"font-stretch">>, Record#polyline.font_stretch},
+	{<<"font-style">>, Record#polyline.font_style},
+	{<<"font-variant">>, Record#polyline.font_variant},
+	{<<"font-weight">>, Record#polyline.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#polyline.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#polyline.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#polyline.image_rendering},
+	{<<"kerning">>, Record#polyline.kerning},
+	{<<"letter-spacing">>, Record#polyline.letter_spacing},
+	{<<"lighting-color">>, Record#polyline.lighting_color},
+	{<<"marker-end">>, Record#polyline.marker_end},
+	{<<"marker-mid">>, Record#polyline.marker_mid},
+	{<<"marker-start">>, Record#polyline.marker_start},
+	{<<"mask">>, Record#polyline.mask},
+	{<<"opacity">>, Record#polyline.opacity},
+	{<<"overflow">>, Record#polyline.overflow},
+	{<<"pointer-events">>, Record#polyline.pointer_events},
+	{<<"shape-rendering">>, Record#polyline.shape_rendering},
+	{<<"stop-color">>, Record#polyline.stop_color},
+	{<<"stop-opacity">>, Record#polyline.stop_opacity},
+	{<<"stroke">>, Record#polyline.stroke},
+	{<<"stroke-dasharray">>, Record#polyline.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#polyline.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#polyline.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#polyline.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#polyline.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#polyline.stroke_opacity},
+	{<<"stroke-width">>, Record#polyline.stroke_width},
+	{<<"text-anchor">>, Record#polyline.text_anchor},
+	{<<"text-decoration">>, Record#polyline.text_decoration},
+	{<<"text-rendering">>, Record#polyline.text_rendering},
+	{<<"unicode-bidi">>, Record#polyline.unicode_bidi},
+	{<<"visibility">>, Record#polyline.visibility},
+	{<<"word-spacing">>, Record#polyline.word_spacing},
+	{<<"writing-mode">>, Record#polyline.writing_mode}
+].

+ 108 - 0
src/element_radialgradient.erl

@@ -0,0 +1,108 @@
+-module(element_radialgradient).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"radialGradient">>, nitro:render(Record#radialGradient.body),
+	lists:append([
+		[
+			{<<"id">>, Record#radialGradient.id},
+			{<<"class">>, Record#radialGradient.class},
+			{<<"style">>, Record#radialGradient.style},
+			{<<"gradientUnits">>, Record#radialGradient.gradientUnits},
+			{<<"gradientTransform">>, Record#radialGradient.gradientTransform},
+			{<<"cx">>, Record#radialGradient.cx},
+			{<<"cy">>, Record#radialGradient.cy},
+			{<<"r">>, Record#radialGradient.r},
+			{<<"fx">>, Record#radialGradient.fx},
+			{<<"fy">>, Record#radialGradient.fy},
+			{<<"spreadMethod">>, Record#radialGradient.spreadMethod},
+			{<<"externalResourcesRequired">>, Record#radialGradient.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#radialGradient.data_fields,
+		Record#radialGradient.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#radialGradient.xmlbase},
+	{<<"xml:lang">>, Record#radialGradient.xmllang},
+	{<<"xml:space">>, Record#radialGradient.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#radialGradient.alignment_baseline},
+	{<<"baseline-shift">>, Record#radialGradient.baseline_shift},
+	{<<"clip">>, Record#radialGradient.clip},
+	{<<"clip-path">>, Record#radialGradient.clip_path},
+	{<<"clip-rule">>, Record#radialGradient.clip_rule},
+	{<<"color">>, Record#radialGradient.color},
+	{<<"color-interpolation">>, Record#radialGradient.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#radialGradient.color_interpolation_filters},
+	{<<"color-profile">>, Record#radialGradient.color_profile},
+	{<<"color-rendering">>, Record#radialGradient.color_rendering},
+	{<<"cursor">>, Record#radialGradient.cursor},
+	{<<"direction">>, Record#radialGradient.direction},
+	{<<"display">>, Record#radialGradient.display},
+	{<<"dominant-baseline">>, Record#radialGradient.dominant_baseline},
+	{<<"enable-background">>, Record#radialGradient.enable_background},
+	{<<"fill">>, Record#radialGradient.fill},
+	{<<"fill-opacity">>, Record#radialGradient.fill_opacity},
+	{<<"fill-rule">>, Record#radialGradient.fill_rule},
+	{<<"filter">>, Record#radialGradient.filter},
+	{<<"flood-color">>, Record#radialGradient.flood_color},
+	{<<"flood-opacity">>, Record#radialGradient.flood_opacity},
+	{<<"font-family">>, Record#radialGradient.font_family},
+	{<<"font-size">>, Record#radialGradient.font_size},
+	{<<"font-size-adjust">>, Record#radialGradient.font_size_adjust},
+	{<<"font-stretch">>, Record#radialGradient.font_stretch},
+	{<<"font-style">>, Record#radialGradient.font_style},
+	{<<"font-variant">>, Record#radialGradient.font_variant},
+	{<<"font-weight">>, Record#radialGradient.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#radialGradient.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#radialGradient.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#radialGradient.image_rendering},
+	{<<"kerning">>, Record#radialGradient.kerning},
+	{<<"letter-spacing">>, Record#radialGradient.letter_spacing},
+	{<<"lighting-color">>, Record#radialGradient.lighting_color},
+	{<<"marker-end">>, Record#radialGradient.marker_end},
+	{<<"marker-mid">>, Record#radialGradient.marker_mid},
+	{<<"marker-start">>, Record#radialGradient.marker_start},
+	{<<"mask">>, Record#radialGradient.mask},
+	{<<"opacity">>, Record#radialGradient.opacity},
+	{<<"overflow">>, Record#radialGradient.overflow},
+	{<<"pointer-events">>, Record#radialGradient.pointer_events},
+	{<<"shape-rendering">>, Record#radialGradient.shape_rendering},
+	{<<"stop-color">>, Record#radialGradient.stop_color},
+	{<<"stop-opacity">>, Record#radialGradient.stop_opacity},
+	{<<"stroke">>, Record#radialGradient.stroke},
+	{<<"stroke-dasharray">>, Record#radialGradient.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#radialGradient.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#radialGradient.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#radialGradient.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#radialGradient.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#radialGradient.stroke_opacity},
+	{<<"stroke-width">>, Record#radialGradient.stroke_width},
+	{<<"text-anchor">>, Record#radialGradient.text_anchor},
+	{<<"text-decoration">>, Record#radialGradient.text_decoration},
+	{<<"text-rendering">>, Record#radialGradient.text_rendering},
+	{<<"unicode-bidi">>, Record#radialGradient.unicode_bidi},
+	{<<"visibility">>, Record#radialGradient.visibility},
+	{<<"word-spacing">>, Record#radialGradient.word_spacing},
+	{<<"writing-mode">>, Record#radialGradient.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#radialGradient.xlinkhref},
+	{<<"xlink:type">>, Record#radialGradient.xlinktype},
+	{<<"xlink:role">>, Record#radialGradient.xlinkrole},
+	{<<"xlink:arcrole">>, Record#radialGradient.xlinkarcrole},
+	{<<"xlink:title">>, Record#radialGradient.xlinktitle},
+	{<<"xlink:show">>, Record#radialGradient.xlinkshow},
+	{<<"xlink:actuate">>, Record#radialGradient.xlinkactuate}
+].

+ 117 - 0
src/element_rect.erl

@@ -0,0 +1,117 @@
+-module(element_rect).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"rect">>, nitro:render(Record#rect.body),
+	lists:append([
+		[
+			{<<"id">>, Record#rect.id},
+			{<<"class">>, Record#rect.class},
+			{<<"style">>, Record#rect.style},
+			{<<"x">>, Record#rect.x},
+			{<<"y">>, Record#rect.y},
+			{<<"width">>, Record#rect.width},
+			{<<"height">>, Record#rect.height},
+			{<<"rx">>, Record#rect.rx},
+			{<<"ry">>, Record#rect.ry},
+			{<<"transform">>, Record#rect.transform},
+			{<<"externalResourcesRequired">>, Record#rect.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#rect.data_fields,
+		Record#rect.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#rect.requiredExtensions},
+	{<<"requiredFeatures">>, Record#rect.requiredFeatures},
+	{<<"systemLanguage">>, Record#rect.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#rect.xmlbase},
+	{<<"xml:lang">>, Record#rect.xmllang},
+	{<<"xml:space">>, Record#rect.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#rect.onactivate},
+	{<<"onclick">>, Record#rect.onclick},
+	{<<"onfocusin">>, Record#rect.onfocusin},
+	{<<"onfocusout">>, Record#rect.onfocusout},
+	{<<"onload">>, Record#rect.onload_graphical},
+	{<<"onmousedown">>, Record#rect.onmousedown},
+	{<<"onmousemove">>, Record#rect.onmousemove},
+	{<<"onmouseout">>, Record#rect.onmouseout},
+	{<<"onmouseover">>, Record#rect.onmouseover},
+	{<<"onmouseup">>, Record#rect.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#rect.alignment_baseline},
+	{<<"baseline-shift">>, Record#rect.baseline_shift},
+	{<<"clip">>, Record#rect.clip},
+	{<<"clip-path">>, Record#rect.clip_path},
+	{<<"clip-rule">>, Record#rect.clip_rule},
+	{<<"color">>, Record#rect.color},
+	{<<"color-interpolation">>, Record#rect.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#rect.color_interpolation_filters},
+	{<<"color-profile">>, Record#rect.color_profile},
+	{<<"color-rendering">>, Record#rect.color_rendering},
+	{<<"cursor">>, Record#rect.cursor},
+	{<<"direction">>, Record#rect.direction},
+	{<<"display">>, Record#rect.display},
+	{<<"dominant-baseline">>, Record#rect.dominant_baseline},
+	{<<"enable-background">>, Record#rect.enable_background},
+	{<<"fill">>, Record#rect.fill},
+	{<<"fill-opacity">>, Record#rect.fill_opacity},
+	{<<"fill-rule">>, Record#rect.fill_rule},
+	{<<"filter">>, Record#rect.filter},
+	{<<"flood-color">>, Record#rect.flood_color},
+	{<<"flood-opacity">>, Record#rect.flood_opacity},
+	{<<"font-family">>, Record#rect.font_family},
+	{<<"font-size">>, Record#rect.font_size},
+	{<<"font-size-adjust">>, Record#rect.font_size_adjust},
+	{<<"font-stretch">>, Record#rect.font_stretch},
+	{<<"font-style">>, Record#rect.font_style},
+	{<<"font-variant">>, Record#rect.font_variant},
+	{<<"font-weight">>, Record#rect.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#rect.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#rect.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#rect.image_rendering},
+	{<<"kerning">>, Record#rect.kerning},
+	{<<"letter-spacing">>, Record#rect.letter_spacing},
+	{<<"lighting-color">>, Record#rect.lighting_color},
+	{<<"marker-end">>, Record#rect.marker_end},
+	{<<"marker-mid">>, Record#rect.marker_mid},
+	{<<"marker-start">>, Record#rect.marker_start},
+	{<<"mask">>, Record#rect.mask},
+	{<<"opacity">>, Record#rect.opacity},
+	{<<"overflow">>, Record#rect.overflow},
+	{<<"pointer-events">>, Record#rect.pointer_events},
+	{<<"shape-rendering">>, Record#rect.shape_rendering},
+	{<<"stop-color">>, Record#rect.stop_color},
+	{<<"stop-opacity">>, Record#rect.stop_opacity},
+	{<<"stroke">>, Record#rect.stroke},
+	{<<"stroke-dasharray">>, Record#rect.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#rect.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#rect.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#rect.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#rect.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#rect.stroke_opacity},
+	{<<"stroke-width">>, Record#rect.stroke_width},
+	{<<"text-anchor">>, Record#rect.text_anchor},
+	{<<"text-decoration">>, Record#rect.text_decoration},
+	{<<"text-rendering">>, Record#rect.text_rendering},
+	{<<"unicode-bidi">>, Record#rect.unicode_bidi},
+	{<<"visibility">>, Record#rect.visibility},
+	{<<"word-spacing">>, Record#rect.word_spacing},
+	{<<"writing-mode">>, Record#rect.writing_mode}
+].

+ 71 - 0
src/element_set.erl

@@ -0,0 +1,71 @@
+-module(element_set).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"set">>, nitro:render(Record#set.body),
+	lists:append([
+		[
+			{<<"id">>, Record#set.id},
+			{<<"class">>, Record#set.class},
+			{<<"style">>, Record#set.style},
+			{<<"to">>, Record#set.to},
+			{<<"externalResourcesRequired">>, Record#set.externalResourcesRequired}
+		],
+		svg_animation_event(Record),
+		svg_animation_attribut_target(Record),
+		svg_animation_timing(Record),
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_xlink(Record),
+		Record#set.data_fields,
+		Record#set.aria_states
+	])).
+
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#set.requiredExtensions},
+	{<<"requiredFeatures">>, Record#set.requiredFeatures},
+	{<<"systemLanguage">>, Record#set.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#set.xmlbase},
+	{<<"xml:lang">>, Record#set.xmllang},
+	{<<"xml:space">>, Record#set.xmlspace}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#set.xlinkhref},
+	{<<"xlink:type">>, Record#set.xlinktype},
+	{<<"xlink:role">>, Record#set.xlinkrole},
+	{<<"xlink:arcrole">>, Record#set.xlinkarcrole},
+	{<<"xlink:title">>, Record#set.xlinktitle},
+	{<<"xlink:show">>, Record#set.xlinkshow},
+	{<<"xlink:actuate">>, Record#set.xlinkactuate}
+].
+
+% Common SVG animate attributes
+svg_animation_event(Record) -> [
+	{<<"onbegin">>, Record#set.onbegin},
+	{<<"onend">>, Record#set.onend},
+	{<<"onload">>, Record#set.onload_animation},
+	{<<"onrepeat">>, Record#set.onrepeat}
+].
+
+svg_animation_attribut_target(Record) -> [
+	{<<"attributeType">>, Record#set.attributeType},
+	{<<"attributeName">>, Record#set.attributeName}
+].
+
+svg_animation_timing(Record) -> [
+	{<<"begin">>, Record#set.svgbegin},
+	{<<"dur">>, Record#set.dur},
+	{<<"end">>, Record#set.svgend},
+	{<<"min">>, Record#set.min},
+	{<<"max">>, Record#set.max},
+	{<<"restart">>, Record#set.restart},
+	{<<"repeatCount">>, Record#set.repeatCount},
+	{<<"repeatDur">>, Record#set.repeatDur},
+	{<<"fill">>, Record#set.fill}
+].

+ 89 - 0
src/element_stop.erl

@@ -0,0 +1,89 @@
+-module(element_stop).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"stop">>, nitro:render(Record#stop.body),
+	lists:append([
+		[
+			{<<"id">>, Record#stop.id},
+			{<<"class">>, Record#stop.class},
+			{<<"style">>, Record#stop.style},
+			{<<"offset">>, Record#stop.offset}
+		],
+		svg_core(Record),
+		svg_presentation(Record),
+		Record#stop.data_fields,
+		Record#stop.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#stop.xmlbase},
+	{<<"xml:lang">>, Record#stop.xmllang},
+	{<<"xml:space">>, Record#stop.xmlspace}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#stop.alignment_baseline},
+	{<<"baseline-shift">>, Record#stop.baseline_shift},
+	{<<"clip">>, Record#stop.clip},
+	{<<"clip-path">>, Record#stop.clip_path},
+	{<<"clip-rule">>, Record#stop.clip_rule},
+	{<<"color">>, Record#stop.color},
+	{<<"color-interpolation">>, Record#stop.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#stop.color_interpolation_filters},
+	{<<"color-profile">>, Record#stop.color_profile},
+	{<<"color-rendering">>, Record#stop.color_rendering},
+	{<<"cursor">>, Record#stop.cursor},
+	{<<"direction">>, Record#stop.direction},
+	{<<"display">>, Record#stop.display},
+	{<<"dominant-baseline">>, Record#stop.dominant_baseline},
+	{<<"enable-background">>, Record#stop.enable_background},
+	{<<"fill">>, Record#stop.fill},
+	{<<"fill-opacity">>, Record#stop.fill_opacity},
+	{<<"fill-rule">>, Record#stop.fill_rule},
+	{<<"filter">>, Record#stop.filter},
+	{<<"flood-color">>, Record#stop.flood_color},
+	{<<"flood-opacity">>, Record#stop.flood_opacity},
+	{<<"font-family">>, Record#stop.font_family},
+	{<<"font-size">>, Record#stop.font_size},
+	{<<"font-size-adjust">>, Record#stop.font_size_adjust},
+	{<<"font-stretch">>, Record#stop.font_stretch},
+	{<<"font-style">>, Record#stop.font_style},
+	{<<"font-variant">>, Record#stop.font_variant},
+	{<<"font-weight">>, Record#stop.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#stop.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#stop.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#stop.image_rendering},
+	{<<"kerning">>, Record#stop.kerning},
+	{<<"letter-spacing">>, Record#stop.letter_spacing},
+	{<<"lighting-color">>, Record#stop.lighting_color},
+	{<<"marker-end">>, Record#stop.marker_end},
+	{<<"marker-mid">>, Record#stop.marker_mid},
+	{<<"marker-start">>, Record#stop.marker_start},
+	{<<"mask">>, Record#stop.mask},
+	{<<"opacity">>, Record#stop.opacity},
+	{<<"overflow">>, Record#stop.overflow},
+	{<<"pointer-events">>, Record#stop.pointer_events},
+	{<<"shape-rendering">>, Record#stop.shape_rendering},
+	{<<"stop-color">>, Record#stop.stop_color},
+	{<<"stop-opacity">>, Record#stop.stop_opacity},
+	{<<"stroke">>, Record#stop.stroke},
+	{<<"stroke-dasharray">>, Record#stop.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#stop.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#stop.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#stop.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#stop.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#stop.stroke_opacity},
+	{<<"stroke-width">>, Record#stop.stroke_width},
+	{<<"text-anchor">>, Record#stop.text_anchor},
+	{<<"text-decoration">>, Record#stop.text_decoration},
+	{<<"text-rendering">>, Record#stop.text_rendering},
+	{<<"unicode-bidi">>, Record#stop.unicode_bidi},
+	{<<"visibility">>, Record#stop.visibility},
+	{<<"word-spacing">>, Record#stop.word_spacing},
+	{<<"writing-mode">>, Record#stop.writing_mode}
+].

+ 160 - 0
src/element_svg.erl

@@ -0,0 +1,160 @@
+-module(element_svg).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"svg">>, nitro:render(Record#svg.body),
+	lists:append([
+		[
+			{<<"id">>, Record#svg.id},
+			{<<"class">>, Record#svg.class},
+			{<<"style">>, Record#svg.style},
+			{<<"version">>, Record#svg.version},
+			{<<"baseProfile">>, Record#svg.baseProfile},
+			{<<"xmlns">>, Record#svg.xmlns},
+			{<<"xmlns:xlink">>, Record#svg.xmlnsxlink},
+			{<<"xmlns:ev">>, Record#svg.xmlnsev},
+			{<<"preserveAspectRatio">>, Record#svg.preserveAspectRatio},
+			{<<"contentScriptType">>, Record#svg.contentScriptType},
+			{<<"contentStyleType">>, Record#svg.contentStyleType},
+			{<<"viewBox">>, Record#svg.viewBox},
+			{<<"externalResourcesRequired">>, Record#svg.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_document_event(Record),
+		svg_filter_primitive(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		svg_transfert_function(Record),
+		svg_xlink(Record),
+		Record#svg.data_fields,
+		Record#svg.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#svg.requiredExtensions},
+	{<<"requiredFeatures">>, Record#svg.requiredFeatures},
+	{<<"systemLanguage">>, Record#svg.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#svg.xmlbase},
+	{<<"xml:lang">>, Record#svg.xmllang},
+	{<<"xml:space">>, Record#svg.xmlspace}
+].
+
+svg_document_event(Record)-> [
+	{<<"onabort">>, Record#svg.onabort},
+	{<<"onerror">>, Record#svg.onerror},
+	{<<"onresize">>, Record#svg.onresize},
+	{<<"onscroll">>, Record#svg.onscroll},
+	{<<"onunload">>, Record#svg.onunload_document},
+	{<<"onzoom">>, Record#svg.onzoom}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#svg.height},
+	{<<"result">>, Record#svg.result},
+	{<<"width">>, Record#svg.width},
+	{<<"x">>, Record#svg.x},
+	{<<"y">>, Record#svg.y}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#svg.onactivate},
+	{<<"onclick">>, Record#svg.onclick},
+	{<<"onfocusin">>, Record#svg.onfocusin},
+	{<<"onfocusout">>, Record#svg.onfocusout},
+	{<<"onload">>, Record#svg.onload_graphical},
+	{<<"onmousedown">>, Record#svg.onmousedown},
+	{<<"onmousemove">>, Record#svg.onmousemove},
+	{<<"onmouseout">>, Record#svg.onmouseout},
+	{<<"onmouseover">>, Record#svg.onmouseover},
+	{<<"onmouseup">>, Record#svg.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#svg.alignment_baseline},
+	{<<"baseline-shift">>, Record#svg.baseline_shift},
+	{<<"clip">>, Record#svg.clip},
+	{<<"clip-path">>, Record#svg.clip_path},
+	{<<"clip-rule">>, Record#svg.clip_rule},
+	{<<"color">>, Record#svg.color},
+	{<<"color-interpolation">>, Record#svg.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#svg.color_interpolation_filters},
+	{<<"color-profile">>, Record#svg.color_profile},
+	{<<"color-rendering">>, Record#svg.color_rendering},
+	{<<"cursor">>, Record#svg.cursor},
+	{<<"direction">>, Record#svg.direction},
+	{<<"display">>, Record#svg.display},
+	{<<"dominant-baseline">>, Record#svg.dominant_baseline},
+	{<<"enable-background">>, Record#svg.enable_background},
+	{<<"fill">>, Record#svg.fill},
+	{<<"fill-opacity">>, Record#svg.fill_opacity},
+	{<<"fill-rule">>, Record#svg.fill_rule},
+	{<<"filter">>, Record#svg.filter},
+	{<<"flood-color">>, Record#svg.flood_color},
+	{<<"flood-opacity">>, Record#svg.flood_opacity},
+	{<<"font-family">>, Record#svg.font_family},
+	{<<"font-size">>, Record#svg.font_size},
+	{<<"font-size-adjust">>, Record#svg.font_size_adjust},
+	{<<"font-stretch">>, Record#svg.font_stretch},
+	{<<"font-style">>, Record#svg.font_style},
+	{<<"font-variant">>, Record#svg.font_variant},
+	{<<"font-weight">>, Record#svg.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#svg.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#svg.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#svg.image_rendering},
+	{<<"kerning">>, Record#svg.kerning},
+	{<<"letter-spacing">>, Record#svg.letter_spacing},
+	{<<"lighting-color">>, Record#svg.lighting_color},
+	{<<"marker-end">>, Record#svg.marker_end},
+	{<<"marker-mid">>, Record#svg.marker_mid},
+	{<<"marker-start">>, Record#svg.marker_start},
+	{<<"mask">>, Record#svg.mask},
+	{<<"opacity">>, Record#svg.opacity},
+	{<<"overflow">>, Record#svg.overflow},
+	{<<"pointer-events">>, Record#svg.pointer_events},
+	{<<"shape-rendering">>, Record#svg.shape_rendering},
+	{<<"stop-color">>, Record#svg.stop_color},
+	{<<"stop-opacity">>, Record#svg.stop_opacity},
+	{<<"stroke">>, Record#svg.stroke},
+	{<<"stroke-dasharray">>, Record#svg.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#svg.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#svg.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#svg.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#svg.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#svg.stroke_opacity},
+	{<<"stroke-width">>, Record#svg.stroke_width},
+	{<<"text-anchor">>, Record#svg.text_anchor},
+	{<<"text-decoration">>, Record#svg.text_decoration},
+	{<<"text-rendering">>, Record#svg.text_rendering},
+	{<<"unicode-bidi">>, Record#svg.unicode_bidi},
+	{<<"visibility">>, Record#svg.visibility},
+	{<<"word-spacing">>, Record#svg.word_spacing},
+	{<<"writing-mode">>, Record#svg.writing_mode}
+].
+
+svg_transfert_function(Record)-> [
+	{<<"type">>, Record#svg.type},
+	{<<"tableValues">>, Record#svg.tableValues},
+	{<<"slope">>, Record#svg.slope},
+	{<<"intercept">>, Record#svg.intercept},
+	{<<"amplitude">>, Record#svg.amplitude},
+	{<<"exponent">>, Record#svg.exponent},
+	{<<"offset">>, Record#svg.offset}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#svg.xlinkhref},
+	{<<"xlink:type">>, Record#svg.xlinktype},
+	{<<"xlink:role">>, Record#svg.xlinkrole},
+	{<<"xlink:arcrole">>, Record#svg.xlinkarcrole},
+	{<<"xlink:title">>, Record#svg.xlinktitle},
+	{<<"xlink:show">>, Record#svg.xlinkshow},
+	{<<"xlink:actuate">>, Record#svg.xlinkactuate}
+].

+ 127 - 0
src/element_svgimage.erl

@@ -0,0 +1,127 @@
+-module(element_svgimage).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"image">>, nitro:render(Record#svgimage.body),
+	lists:append([
+		[
+			{<<"id">>, Record#svgimage.id},
+			{<<"class">>, Record#svgimage.class},
+			{<<"style">>, Record#svgimage.style},
+			{<<"x">>, Record#svgimage.x},
+			{<<"y">>, Record#svgimage.y},
+			{<<"width">>, Record#svgimage.width},
+			{<<"height">>, Record#svgimage.height},
+			{<<"preserveAspectRatio">>, Record#svgimage.preserveAspectRatio},
+			{<<"transform">>, Record#svgimage.transform},
+			{<<"externalResourcesRequired">>, Record#svgimage.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#svgimage.data_fields,
+		Record#svgimage.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#svgimage.requiredExtensions},
+	{<<"requiredFeatures">>, Record#svgimage.requiredFeatures},
+	{<<"systemLanguage">>, Record#svgimage.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#svgimage.xmlbase},
+	{<<"xml:lang">>, Record#svgimage.xmllang},
+	{<<"xml:space">>, Record#svgimage.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#svgimage.onactivate},
+	{<<"onclick">>, Record#svgimage.onclick},
+	{<<"onfocusin">>, Record#svgimage.onfocusin},
+	{<<"onfocusout">>, Record#svgimage.onfocusout},
+	{<<"onload">>, Record#svgimage.onload_graphical},
+	{<<"onmousedown">>, Record#svgimage.onmousedown},
+	{<<"onmousemove">>, Record#svgimage.onmousemove},
+	{<<"onmouseout">>, Record#svgimage.onmouseout},
+	{<<"onmouseover">>, Record#svgimage.onmouseover},
+	{<<"onmouseup">>, Record#svgimage.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#svgimage.alignment_baseline},
+	{<<"baseline-shift">>, Record#svgimage.baseline_shift},
+	{<<"clip">>, Record#svgimage.clip},
+	{<<"clip-path">>, Record#svgimage.clip_path},
+	{<<"clip-rule">>, Record#svgimage.clip_rule},
+	{<<"color">>, Record#svgimage.color},
+	{<<"color-interpolation">>, Record#svgimage.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#svgimage.color_interpolation_filters},
+	{<<"color-profile">>, Record#svgimage.color_profile},
+	{<<"color-rendering">>, Record#svgimage.color_rendering},
+	{<<"cursor">>, Record#svgimage.cursor},
+	{<<"direction">>, Record#svgimage.direction},
+	{<<"display">>, Record#svgimage.display},
+	{<<"dominant-baseline">>, Record#svgimage.dominant_baseline},
+	{<<"enable-background">>, Record#svgimage.enable_background},
+	{<<"fill">>, Record#svgimage.fill},
+	{<<"fill-opacity">>, Record#svgimage.fill_opacity},
+	{<<"fill-rule">>, Record#svgimage.fill_rule},
+	{<<"filter">>, Record#svgimage.filter},
+	{<<"flood-color">>, Record#svgimage.flood_color},
+	{<<"flood-opacity">>, Record#svgimage.flood_opacity},
+	{<<"font-family">>, Record#svgimage.font_family},
+	{<<"font-size">>, Record#svgimage.font_size},
+	{<<"font-size-adjust">>, Record#svgimage.font_size_adjust},
+	{<<"font-stretch">>, Record#svgimage.font_stretch},
+	{<<"font-style">>, Record#svgimage.font_style},
+	{<<"font-variant">>, Record#svgimage.font_variant},
+	{<<"font-weight">>, Record#svgimage.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#svgimage.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#svgimage.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#svgimage.image_rendering},
+	{<<"kerning">>, Record#svgimage.kerning},
+	{<<"letter-spacing">>, Record#svgimage.letter_spacing},
+	{<<"lighting-color">>, Record#svgimage.lighting_color},
+	{<<"marker-end">>, Record#svgimage.marker_end},
+	{<<"marker-mid">>, Record#svgimage.marker_mid},
+	{<<"marker-start">>, Record#svgimage.marker_start},
+	{<<"mask">>, Record#svgimage.mask},
+	{<<"opacity">>, Record#svgimage.opacity},
+	{<<"overflow">>, Record#svgimage.overflow},
+	{<<"pointer-events">>, Record#svgimage.pointer_events},
+	{<<"shape-rendering">>, Record#svgimage.shape_rendering},
+	{<<"stop-color">>, Record#svgimage.stop_color},
+	{<<"stop-opacity">>, Record#svgimage.stop_opacity},
+	{<<"stroke">>, Record#svgimage.stroke},
+	{<<"stroke-dasharray">>, Record#svgimage.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#svgimage.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#svgimage.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#svgimage.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#svgimage.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#svgimage.stroke_opacity},
+	{<<"stroke-width">>, Record#svgimage.stroke_width},
+	{<<"text-anchor">>, Record#svgimage.text_anchor},
+	{<<"text-decoration">>, Record#svgimage.text_decoration},
+	{<<"text-rendering">>, Record#svgimage.text_rendering},
+	{<<"unicode-bidi">>, Record#svgimage.unicode_bidi},
+	{<<"visibility">>, Record#svgimage.visibility},
+	{<<"word-spacing">>, Record#svgimage.word_spacing},
+	{<<"writing-mode">>, Record#svgimage.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#svgimage.xlinkhref},
+	{<<"xlink:type">>, Record#svgimage.xlinktype},
+	{<<"xlink:role">>, Record#svgimage.xlinkrole},
+	{<<"xlink:arcrole">>, Record#svgimage.xlinkarcrole},
+	{<<"xlink:title">>, Record#svgimage.xlinktitle},
+	{<<"xlink:show">>, Record#svgimage.xlinkshow},
+	{<<"xlink:actuate">>, Record#svgimage.xlinkactuate}
+].

+ 38 - 0
src/element_svgscript.erl

@@ -0,0 +1,38 @@
+-module(element_svgscript).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"svgscript">>, nitro:render(Record#svgscript.body),
+	lists:append([
+		[
+			{<<"id">>, Record#svgscript.id},
+			{<<"class">>, Record#svgscript.class},
+			{<<"style">>, Record#svgscript.style},
+			{<<"type">>, Record#svgscript.type},
+			{<<"externalResourcesRequired">>, Record#svgscript.externalResourcesRequired}
+		],
+		svgscript_core(Record),
+		svgscript_xlink(Record),
+		Record#svgscript.data_fields,
+		Record#svgscript.aria_states
+	])).
+
+
+%% Common SVG attributes
+svgscript_core(Record)-> [
+	{<<"xml:base">>, Record#svgscript.xmlbase},
+	{<<"xml:lang">>, Record#svgscript.xmllang},
+	{<<"xml:space">>, Record#svgscript.xmlspace}
+].
+
+svgscript_xlink(Record)-> [
+	{<<"xlink:href">>, Record#svgscript.xlinkhref},
+	{<<"xlink:type">>, Record#svgscript.xlinktype},
+	{<<"xlink:role">>, Record#svgscript.xlinkrole},
+	{<<"xlink:arcrole">>, Record#svgscript.xlinkarcrole},
+	{<<"xlink:title">>, Record#svgscript.xlinktitle},
+	{<<"xlink:show">>, Record#svgscript.xlinkshow},
+	{<<"xlink:actuate">>, Record#svgscript.xlinkactuate}
+].

+ 39 - 0
src/element_svgstyle.erl

@@ -0,0 +1,39 @@
+-module(element_svgstyle).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"svgstyle">>, nitro:render(Record#svgstyle.body),
+	lists:append([
+		[
+			{<<"id">>, Record#svgstyle.id},
+			{<<"class">>, Record#svgstyle.class},
+			{<<"style">>, Record#svgstyle.style},
+			{<<"type">>, Record#svgstyle.type},
+			{<<"media">>, Record#svgstyle.media},
+			{<<"title">>, Record#svgstyle.title}
+		],
+		svgstyle_core(Record),
+		svgstyle_xlink(Record),
+		Record#svgstyle.data_fields,
+		Record#svgstyle.aria_states
+	])).
+
+
+%% Common SVG attributes
+svgstyle_core(Record)-> [
+	{<<"xml:base">>, Record#svgstyle.xmlbase},
+	{<<"xml:lang">>, Record#svgstyle.xmllang},
+	{<<"xml:space">>, Record#svgstyle.xmlspace}
+].
+
+svgstyle_xlink(Record)-> [
+	{<<"xlink:href">>, Record#svgstyle.xlinkhref},
+	{<<"xlink:type">>, Record#svgstyle.xlinktype},
+	{<<"xlink:role">>, Record#svgstyle.xlinkrole},
+	{<<"xlink:arcrole">>, Record#svgstyle.xlinkarcrole},
+	{<<"xlink:title">>, Record#svgstyle.xlinktitle},
+	{<<"xlink:show">>, Record#svgstyle.xlinkshow},
+	{<<"xlink:actuate">>, Record#svgstyle.xlinkactuate}
+].

+ 25 - 0
src/element_svgtitle.erl

@@ -0,0 +1,25 @@
+-module(element_svgtitle).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"title">>, nitro:render(Record#svgtitle.body),
+	lists:append([
+		[
+			{<<"id">>, Record#svgtitle.id},
+			{<<"class">>, Record#svgtitle.class},
+			{<<"style">>, Record#svgtitle.style}
+		],
+		svg_core(Record),
+		Record#svgtitle.data_fields,
+		Record#svgtitle.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#svgtitle.xmlbase},
+	{<<"xml:lang">>, Record#svgtitle.xmllang},
+	{<<"xml:space">>, Record#svgtitle.xmlspace}
+].

+ 112 - 0
src/element_switch.erl

@@ -0,0 +1,112 @@
+-module(element_switch).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"switch">>, nitro:render(Record#switch.body),
+	lists:append([
+		[
+			{<<"id">>, Record#switch.id},
+			{<<"class">>, Record#switch.class},
+			{<<"style">>, Record#switch.style},
+			{<<"allowReorderm">>, Record#switch.allowReorderm},
+			{<<"transform">>, Record#switch.transform},
+			{<<"externalResourcesRequired">>, Record#switch.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#switch.data_fields,
+		Record#switch.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#switch.requiredExtensions},
+	{<<"requiredFeatures">>, Record#switch.requiredFeatures},
+	{<<"systemLanguage">>, Record#switch.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#switch.xmlbase},
+	{<<"xml:lang">>, Record#switch.xmllang},
+	{<<"xml:space">>, Record#switch.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#switch.onactivate},
+	{<<"onclick">>, Record#switch.onclick},
+	{<<"onfocusin">>, Record#switch.onfocusin},
+	{<<"onfocusout">>, Record#switch.onfocusout},
+	{<<"onload">>, Record#switch.onload_graphical},
+	{<<"onmousedown">>, Record#switch.onmousedown},
+	{<<"onmousemove">>, Record#switch.onmousemove},
+	{<<"onmouseout">>, Record#switch.onmouseout},
+	{<<"onmouseover">>, Record#switch.onmouseover},
+	{<<"onmouseup">>, Record#switch.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#switch.alignment_baseline},
+	{<<"baseline-shift">>, Record#switch.baseline_shift},
+	{<<"clip">>, Record#switch.clip},
+	{<<"clip-path">>, Record#switch.clip_path},
+	{<<"clip-rule">>, Record#switch.clip_rule},
+	{<<"color">>, Record#switch.color},
+	{<<"color-interpolation">>, Record#switch.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#switch.color_interpolation_filters},
+	{<<"color-profile">>, Record#switch.color_profile},
+	{<<"color-rendering">>, Record#switch.color_rendering},
+	{<<"cursor">>, Record#switch.cursor},
+	{<<"direction">>, Record#switch.direction},
+	{<<"display">>, Record#switch.display},
+	{<<"dominant-baseline">>, Record#switch.dominant_baseline},
+	{<<"enable-background">>, Record#switch.enable_background},
+	{<<"fill">>, Record#switch.fill},
+	{<<"fill-opacity">>, Record#switch.fill_opacity},
+	{<<"fill-rule">>, Record#switch.fill_rule},
+	{<<"filter">>, Record#switch.filter},
+	{<<"flood-color">>, Record#switch.flood_color},
+	{<<"flood-opacity">>, Record#switch.flood_opacity},
+	{<<"font-family">>, Record#switch.font_family},
+	{<<"font-size">>, Record#switch.font_size},
+	{<<"font-size-adjust">>, Record#switch.font_size_adjust},
+	{<<"font-stretch">>, Record#switch.font_stretch},
+	{<<"font-style">>, Record#switch.font_style},
+	{<<"font-variant">>, Record#switch.font_variant},
+	{<<"font-weight">>, Record#switch.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#switch.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#switch.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#switch.image_rendering},
+	{<<"kerning">>, Record#switch.kerning},
+	{<<"letter-spacing">>, Record#switch.letter_spacing},
+	{<<"lighting-color">>, Record#switch.lighting_color},
+	{<<"marker-end">>, Record#switch.marker_end},
+	{<<"marker-mid">>, Record#switch.marker_mid},
+	{<<"marker-start">>, Record#switch.marker_start},
+	{<<"mask">>, Record#switch.mask},
+	{<<"opacity">>, Record#switch.opacity},
+	{<<"overflow">>, Record#switch.overflow},
+	{<<"pointer-events">>, Record#switch.pointer_events},
+	{<<"shape-rendering">>, Record#switch.shape_rendering},
+	{<<"stop-color">>, Record#switch.stop_color},
+	{<<"stop-opacity">>, Record#switch.stop_opacity},
+	{<<"stroke">>, Record#switch.stroke},
+	{<<"stroke-dasharray">>, Record#switch.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#switch.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#switch.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#switch.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#switch.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#switch.stroke_opacity},
+	{<<"stroke-width">>, Record#switch.stroke_width},
+	{<<"text-anchor">>, Record#switch.text_anchor},
+	{<<"text-decoration">>, Record#switch.text_decoration},
+	{<<"text-rendering">>, Record#switch.text_rendering},
+	{<<"unicode-bidi">>, Record#switch.unicode_bidi},
+	{<<"visibility">>, Record#switch.visibility},
+	{<<"word-spacing">>, Record#switch.word_spacing},
+	{<<"writing-mode">>, Record#switch.writing_mode}
+].

+ 105 - 0
src/element_symbol.erl

@@ -0,0 +1,105 @@
+-module(element_symbol).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"symbol">>, nitro:render(Record#symbol.body),
+	lists:append([
+		[
+			{<<"id">>, Record#symbol.id},
+			{<<"class">>, Record#symbol.class},
+			{<<"style">>, Record#symbol.style},
+			{<<"preserveAspectRatio">>, Record#symbol.preserveAspectRatio},
+			{<<"viewBox">>, Record#symbol.viewBox},
+			{<<"externalResourcesRequired">>, Record#symbol.externalResourcesRequired}
+		],
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#symbol.data_fields,
+		Record#symbol.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#symbol.xmlbase},
+	{<<"xml:lang">>, Record#symbol.xmllang},
+	{<<"xml:space">>, Record#symbol.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#symbol.onactivate},
+	{<<"onclick">>, Record#symbol.onclick},
+	{<<"onfocusin">>, Record#symbol.onfocusin},
+	{<<"onfocusout">>, Record#symbol.onfocusout},
+	{<<"onload">>, Record#symbol.onload_graphical},
+	{<<"onmousedown">>, Record#symbol.onmousedown},
+	{<<"onmousemove">>, Record#symbol.onmousemove},
+	{<<"onmouseout">>, Record#symbol.onmouseout},
+	{<<"onmouseover">>, Record#symbol.onmouseover},
+	{<<"onmouseup">>, Record#symbol.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#symbol.alignment_baseline},
+	{<<"baseline-shift">>, Record#symbol.baseline_shift},
+	{<<"clip">>, Record#symbol.clip},
+	{<<"clip-path">>, Record#symbol.clip_path},
+	{<<"clip-rule">>, Record#symbol.clip_rule},
+	{<<"color">>, Record#symbol.color},
+	{<<"color-interpolation">>, Record#symbol.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#symbol.color_interpolation_filters},
+	{<<"color-profile">>, Record#symbol.color_profile},
+	{<<"color-rendering">>, Record#symbol.color_rendering},
+	{<<"cursor">>, Record#symbol.cursor},
+	{<<"direction">>, Record#symbol.direction},
+	{<<"display">>, Record#symbol.display},
+	{<<"dominant-baseline">>, Record#symbol.dominant_baseline},
+	{<<"enable-background">>, Record#symbol.enable_background},
+	{<<"fill">>, Record#symbol.fill},
+	{<<"fill-opacity">>, Record#symbol.fill_opacity},
+	{<<"fill-rule">>, Record#symbol.fill_rule},
+	{<<"filter">>, Record#symbol.filter},
+	{<<"flood-color">>, Record#symbol.flood_color},
+	{<<"flood-opacity">>, Record#symbol.flood_opacity},
+	{<<"font-family">>, Record#symbol.font_family},
+	{<<"font-size">>, Record#symbol.font_size},
+	{<<"font-size-adjust">>, Record#symbol.font_size_adjust},
+	{<<"font-stretch">>, Record#symbol.font_stretch},
+	{<<"font-style">>, Record#symbol.font_style},
+	{<<"font-variant">>, Record#symbol.font_variant},
+	{<<"font-weight">>, Record#symbol.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#symbol.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#symbol.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#symbol.image_rendering},
+	{<<"kerning">>, Record#symbol.kerning},
+	{<<"letter-spacing">>, Record#symbol.letter_spacing},
+	{<<"lighting-color">>, Record#symbol.lighting_color},
+	{<<"marker-end">>, Record#symbol.marker_end},
+	{<<"marker-mid">>, Record#symbol.marker_mid},
+	{<<"marker-start">>, Record#symbol.marker_start},
+	{<<"mask">>, Record#symbol.mask},
+	{<<"opacity">>, Record#symbol.opacity},
+	{<<"overflow">>, Record#symbol.overflow},
+	{<<"pointer-events">>, Record#symbol.pointer_events},
+	{<<"shape-rendering">>, Record#symbol.shape_rendering},
+	{<<"stop-color">>, Record#symbol.stop_color},
+	{<<"stop-opacity">>, Record#symbol.stop_opacity},
+	{<<"stroke">>, Record#symbol.stroke},
+	{<<"stroke-dasharray">>, Record#symbol.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#symbol.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#symbol.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#symbol.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#symbol.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#symbol.stroke_opacity},
+	{<<"stroke-width">>, Record#symbol.stroke_width},
+	{<<"text-anchor">>, Record#symbol.text_anchor},
+	{<<"text-decoration">>, Record#symbol.text_decoration},
+	{<<"text-rendering">>, Record#symbol.text_rendering},
+	{<<"unicode-bidi">>, Record#symbol.unicode_bidi},
+	{<<"visibility">>, Record#symbol.visibility},
+	{<<"word-spacing">>, Record#symbol.word_spacing},
+	{<<"writing-mode">>, Record#symbol.writing_mode}
+].

+ 118 - 0
src/element_text.erl

@@ -0,0 +1,118 @@
+-module(element_text).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"text">>, nitro:render(Record#text.body),
+	lists:append([
+		[
+			{<<"id">>, Record#text.id},
+			{<<"class">>, Record#text.class},
+			{<<"style">>, Record#text.style},
+			{<<"x">>, Record#text.x},
+			{<<"y">>, Record#text.y},
+			{<<"dx">>, Record#text.dx},
+			{<<"dy">>, Record#text.dy},
+			{<<"rotate">>, Record#text.rotate},
+			{<<"textLength">>, Record#text.textLength},
+			{<<"lengthAdjust">>, Record#text.lengthAdjust},
+			{<<"transform">>, Record#text.transform},
+			{<<"externalResourcesRequired">>, Record#text.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#text.data_fields,
+		Record#text.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#text.requiredExtensions},
+	{<<"requiredFeatures">>, Record#text.requiredFeatures},
+	{<<"systemLanguage">>, Record#text.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#text.xmlbase},
+	{<<"xml:lang">>, Record#text.xmllang},
+	{<<"xml:space">>, Record#text.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#text.onactivate},
+	{<<"onclick">>, Record#text.onclick},
+	{<<"onfocusin">>, Record#text.onfocusin},
+	{<<"onfocusout">>, Record#text.onfocusout},
+	{<<"onload">>, Record#text.onload_graphical},
+	{<<"onmousedown">>, Record#text.onmousedown},
+	{<<"onmousemove">>, Record#text.onmousemove},
+	{<<"onmouseout">>, Record#text.onmouseout},
+	{<<"onmouseover">>, Record#text.onmouseover},
+	{<<"onmouseup">>, Record#text.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#text.alignment_baseline},
+	{<<"baseline-shift">>, Record#text.baseline_shift},
+	{<<"clip">>, Record#text.clip},
+	{<<"clip-path">>, Record#text.clip_path},
+	{<<"clip-rule">>, Record#text.clip_rule},
+	{<<"color">>, Record#text.color},
+	{<<"color-interpolation">>, Record#text.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#text.color_interpolation_filters},
+	{<<"color-profile">>, Record#text.color_profile},
+	{<<"color-rendering">>, Record#text.color_rendering},
+	{<<"cursor">>, Record#text.cursor},
+	{<<"direction">>, Record#text.direction},
+	{<<"display">>, Record#text.display},
+	{<<"dominant-baseline">>, Record#text.dominant_baseline},
+	{<<"enable-background">>, Record#text.enable_background},
+	{<<"fill">>, Record#text.fill},
+	{<<"fill-opacity">>, Record#text.fill_opacity},
+	{<<"fill-rule">>, Record#text.fill_rule},
+	{<<"filter">>, Record#text.filter},
+	{<<"flood-color">>, Record#text.flood_color},
+	{<<"flood-opacity">>, Record#text.flood_opacity},
+	{<<"font-family">>, Record#text.font_family},
+	{<<"font-size">>, Record#text.font_size},
+	{<<"font-size-adjust">>, Record#text.font_size_adjust},
+	{<<"font-stretch">>, Record#text.font_stretch},
+	{<<"font-style">>, Record#text.font_style},
+	{<<"font-variant">>, Record#text.font_variant},
+	{<<"font-weight">>, Record#text.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#text.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#text.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#text.image_rendering},
+	{<<"kerning">>, Record#text.kerning},
+	{<<"letter-spacing">>, Record#text.letter_spacing},
+	{<<"lighting-color">>, Record#text.lighting_color},
+	{<<"marker-end">>, Record#text.marker_end},
+	{<<"marker-mid">>, Record#text.marker_mid},
+	{<<"marker-start">>, Record#text.marker_start},
+	{<<"mask">>, Record#text.mask},
+	{<<"opacity">>, Record#text.opacity},
+	{<<"overflow">>, Record#text.overflow},
+	{<<"pointer-events">>, Record#text.pointer_events},
+	{<<"shape-rendering">>, Record#text.shape_rendering},
+	{<<"stop-color">>, Record#text.stop_color},
+	{<<"stop-opacity">>, Record#text.stop_opacity},
+	{<<"stroke">>, Record#text.stroke},
+	{<<"stroke-dasharray">>, Record#text.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#text.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#text.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#text.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#text.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#text.stroke_opacity},
+	{<<"stroke-width">>, Record#text.stroke_width},
+	{<<"text-anchor">>, Record#text.text_anchor},
+	{<<"text-decoration">>, Record#text.text_decoration},
+	{<<"text-rendering">>, Record#text.text_rendering},
+	{<<"unicode-bidi">>, Record#text.unicode_bidi},
+	{<<"visibility">>, Record#text.visibility},
+	{<<"word-spacing">>, Record#text.word_spacing},
+	{<<"writing-mode">>, Record#text.writing_mode}
+].

+ 124 - 0
src/element_textpath.erl

@@ -0,0 +1,124 @@
+-module(element_textpath).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"textPath">>, nitro:render(Record#textPath.body),
+	lists:append([
+		[
+			{<<"id">>, Record#textPath.id},
+			{<<"class">>, Record#textPath.class},
+			{<<"style">>, Record#textPath.style},
+			{<<"startOffset">>, Record#textPath.startOffset},
+			{<<"method">>, Record#textPath.method},
+			{<<"spacing">>, Record#textPath.spacing},
+			{<<"externalResourcesRequired">>, Record#textPath.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#textPath.data_fields,
+		Record#textPath.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#textPath.requiredExtensions},
+	{<<"requiredFeatures">>, Record#textPath.requiredFeatures},
+	{<<"systemLanguage">>, Record#textPath.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#textPath.xmlbase},
+	{<<"xml:lang">>, Record#textPath.xmllang},
+	{<<"xml:space">>, Record#textPath.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#textPath.onactivate},
+	{<<"onclick">>, Record#textPath.onclick},
+	{<<"onfocusin">>, Record#textPath.onfocusin},
+	{<<"onfocusout">>, Record#textPath.onfocusout},
+	{<<"onload">>, Record#textPath.onload_graphical},
+	{<<"onmousedown">>, Record#textPath.onmousedown},
+	{<<"onmousemove">>, Record#textPath.onmousemove},
+	{<<"onmouseout">>, Record#textPath.onmouseout},
+	{<<"onmouseover">>, Record#textPath.onmouseover},
+	{<<"onmouseup">>, Record#textPath.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#textPath.alignment_baseline},
+	{<<"baseline-shift">>, Record#textPath.baseline_shift},
+	{<<"clip">>, Record#textPath.clip},
+	{<<"clip-path">>, Record#textPath.clip_path},
+	{<<"clip-rule">>, Record#textPath.clip_rule},
+	{<<"color">>, Record#textPath.color},
+	{<<"color-interpolation">>, Record#textPath.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#textPath.color_interpolation_filters},
+	{<<"color-profile">>, Record#textPath.color_profile},
+	{<<"color-rendering">>, Record#textPath.color_rendering},
+	{<<"cursor">>, Record#textPath.cursor},
+	{<<"direction">>, Record#textPath.direction},
+	{<<"display">>, Record#textPath.display},
+	{<<"dominant-baseline">>, Record#textPath.dominant_baseline},
+	{<<"enable-background">>, Record#textPath.enable_background},
+	{<<"fill">>, Record#textPath.fill},
+	{<<"fill-opacity">>, Record#textPath.fill_opacity},
+	{<<"fill-rule">>, Record#textPath.fill_rule},
+	{<<"filter">>, Record#textPath.filter},
+	{<<"flood-color">>, Record#textPath.flood_color},
+	{<<"flood-opacity">>, Record#textPath.flood_opacity},
+	{<<"font-family">>, Record#textPath.font_family},
+	{<<"font-size">>, Record#textPath.font_size},
+	{<<"font-size-adjust">>, Record#textPath.font_size_adjust},
+	{<<"font-stretch">>, Record#textPath.font_stretch},
+	{<<"font-style">>, Record#textPath.font_style},
+	{<<"font-variant">>, Record#textPath.font_variant},
+	{<<"font-weight">>, Record#textPath.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#textPath.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#textPath.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#textPath.image_rendering},
+	{<<"kerning">>, Record#textPath.kerning},
+	{<<"letter-spacing">>, Record#textPath.letter_spacing},
+	{<<"lighting-color">>, Record#textPath.lighting_color},
+	{<<"marker-end">>, Record#textPath.marker_end},
+	{<<"marker-mid">>, Record#textPath.marker_mid},
+	{<<"marker-start">>, Record#textPath.marker_start},
+	{<<"mask">>, Record#textPath.mask},
+	{<<"opacity">>, Record#textPath.opacity},
+	{<<"overflow">>, Record#textPath.overflow},
+	{<<"pointer-events">>, Record#textPath.pointer_events},
+	{<<"shape-rendering">>, Record#textPath.shape_rendering},
+	{<<"stop-color">>, Record#textPath.stop_color},
+	{<<"stop-opacity">>, Record#textPath.stop_opacity},
+	{<<"stroke">>, Record#textPath.stroke},
+	{<<"stroke-dasharray">>, Record#textPath.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#textPath.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#textPath.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#textPath.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#textPath.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#textPath.stroke_opacity},
+	{<<"stroke-width">>, Record#textPath.stroke_width},
+	{<<"text-anchor">>, Record#textPath.text_anchor},
+	{<<"text-decoration">>, Record#textPath.text_decoration},
+	{<<"text-rendering">>, Record#textPath.text_rendering},
+	{<<"unicode-bidi">>, Record#textPath.unicode_bidi},
+	{<<"visibility">>, Record#textPath.visibility},
+	{<<"word-spacing">>, Record#textPath.word_spacing},
+	{<<"writing-mode">>, Record#textPath.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#textPath.xlinkhref},
+	{<<"xlink:type">>, Record#textPath.xlinktype},
+	{<<"xlink:role">>, Record#textPath.xlinkrole},
+	{<<"xlink:arcrole">>, Record#textPath.xlinkarcrole},
+	{<<"xlink:title">>, Record#textPath.xlinktitle},
+	{<<"xlink:show">>, Record#textPath.xlinkshow},
+	{<<"xlink:actuate">>, Record#textPath.xlinkactuate}
+].

+ 121 - 0
src/element_tref.erl

@@ -0,0 +1,121 @@
+-module(element_tref).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"tref">>, nitro:render(Record#tref.body),
+	lists:append([
+		[
+			{<<"id">>, Record#tref.id},
+			{<<"class">>, Record#tref.class},
+			{<<"style">>, Record#tref.style},
+			{<<"externalResourcesRequired">>, Record#tref.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#tref.data_fields,
+		Record#tref.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#tref.requiredExtensions},
+	{<<"requiredFeatures">>, Record#tref.requiredFeatures},
+	{<<"systemLanguage">>, Record#tref.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#tref.xmlbase},
+	{<<"xml:lang">>, Record#tref.xmllang},
+	{<<"xml:space">>, Record#tref.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#tref.onactivate},
+	{<<"onclick">>, Record#tref.onclick},
+	{<<"onfocusin">>, Record#tref.onfocusin},
+	{<<"onfocusout">>, Record#tref.onfocusout},
+	{<<"onload">>, Record#tref.onload_graphical},
+	{<<"onmousedown">>, Record#tref.onmousedown},
+	{<<"onmousemove">>, Record#tref.onmousemove},
+	{<<"onmouseout">>, Record#tref.onmouseout},
+	{<<"onmouseover">>, Record#tref.onmouseover},
+	{<<"onmouseup">>, Record#tref.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#tref.alignment_baseline},
+	{<<"baseline-shift">>, Record#tref.baseline_shift},
+	{<<"clip">>, Record#tref.clip},
+	{<<"clip-path">>, Record#tref.clip_path},
+	{<<"clip-rule">>, Record#tref.clip_rule},
+	{<<"color">>, Record#tref.color},
+	{<<"color-interpolation">>, Record#tref.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#tref.color_interpolation_filters},
+	{<<"color-profile">>, Record#tref.color_profile},
+	{<<"color-rendering">>, Record#tref.color_rendering},
+	{<<"cursor">>, Record#tref.cursor},
+	{<<"direction">>, Record#tref.direction},
+	{<<"display">>, Record#tref.display},
+	{<<"dominant-baseline">>, Record#tref.dominant_baseline},
+	{<<"enable-background">>, Record#tref.enable_background},
+	{<<"fill">>, Record#tref.fill},
+	{<<"fill-opacity">>, Record#tref.fill_opacity},
+	{<<"fill-rule">>, Record#tref.fill_rule},
+	{<<"filter">>, Record#tref.filter},
+	{<<"flood-color">>, Record#tref.flood_color},
+	{<<"flood-opacity">>, Record#tref.flood_opacity},
+	{<<"font-family">>, Record#tref.font_family},
+	{<<"font-size">>, Record#tref.font_size},
+	{<<"font-size-adjust">>, Record#tref.font_size_adjust},
+	{<<"font-stretch">>, Record#tref.font_stretch},
+	{<<"font-style">>, Record#tref.font_style},
+	{<<"font-variant">>, Record#tref.font_variant},
+	{<<"font-weight">>, Record#tref.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#tref.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#tref.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#tref.image_rendering},
+	{<<"kerning">>, Record#tref.kerning},
+	{<<"letter-spacing">>, Record#tref.letter_spacing},
+	{<<"lighting-color">>, Record#tref.lighting_color},
+	{<<"marker-end">>, Record#tref.marker_end},
+	{<<"marker-mid">>, Record#tref.marker_mid},
+	{<<"marker-start">>, Record#tref.marker_start},
+	{<<"mask">>, Record#tref.mask},
+	{<<"opacity">>, Record#tref.opacity},
+	{<<"overflow">>, Record#tref.overflow},
+	{<<"pointer-events">>, Record#tref.pointer_events},
+	{<<"shape-rendering">>, Record#tref.shape_rendering},
+	{<<"stop-color">>, Record#tref.stop_color},
+	{<<"stop-opacity">>, Record#tref.stop_opacity},
+	{<<"stroke">>, Record#tref.stroke},
+	{<<"stroke-dasharray">>, Record#tref.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#tref.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#tref.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#tref.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#tref.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#tref.stroke_opacity},
+	{<<"stroke-width">>, Record#tref.stroke_width},
+	{<<"text-anchor">>, Record#tref.text_anchor},
+	{<<"text-decoration">>, Record#tref.text_decoration},
+	{<<"text-rendering">>, Record#tref.text_rendering},
+	{<<"unicode-bidi">>, Record#tref.unicode_bidi},
+	{<<"visibility">>, Record#tref.visibility},
+	{<<"word-spacing">>, Record#tref.word_spacing},
+	{<<"writing-mode">>, Record#tref.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#tref.xlinkhref},
+	{<<"xlink:type">>, Record#tref.xlinktype},
+	{<<"xlink:role">>, Record#tref.xlinkrole},
+	{<<"xlink:arcrole">>, Record#tref.xlinkarcrole},
+	{<<"xlink:title">>, Record#tref.xlinktitle},
+	{<<"xlink:show">>, Record#tref.xlinkshow},
+	{<<"xlink:actuate">>, Record#tref.xlinkactuate}
+].

+ 117 - 0
src/element_tspan.erl

@@ -0,0 +1,117 @@
+-module(element_tspan).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"tspan">>, nitro:render(Record#tspan.body),
+	lists:append([
+		[
+			{<<"id">>, Record#tspan.id},
+			{<<"class">>, Record#tspan.class},
+			{<<"style">>, Record#tspan.style},
+			{<<"x">>, Record#tspan.x},
+			{<<"y">>, Record#tspan.y},
+			{<<"dx">>, Record#tspan.dx},
+			{<<"dy">>, Record#tspan.dy},
+			{<<"rotate">>, Record#tspan.rotate},
+			{<<"textLength">>, Record#tspan.textLength},
+			{<<"lengthAdjust">>, Record#tspan.lengthAdjust},
+			{<<"externalResourcesRequired">>, Record#tspan.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		Record#tspan.data_fields,
+		Record#tspan.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#tspan.requiredExtensions},
+	{<<"requiredFeatures">>, Record#tspan.requiredFeatures},
+	{<<"systemLanguage">>, Record#tspan.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#tspan.xmlbase},
+	{<<"xml:lang">>, Record#tspan.xmllang},
+	{<<"xml:space">>, Record#tspan.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#tspan.onactivate},
+	{<<"onclick">>, Record#tspan.onclick},
+	{<<"onfocusin">>, Record#tspan.onfocusin},
+	{<<"onfocusout">>, Record#tspan.onfocusout},
+	{<<"onload">>, Record#tspan.onload_graphical},
+	{<<"onmousedown">>, Record#tspan.onmousedown},
+	{<<"onmousemove">>, Record#tspan.onmousemove},
+	{<<"onmouseout">>, Record#tspan.onmouseout},
+	{<<"onmouseover">>, Record#tspan.onmouseover},
+	{<<"onmouseup">>, Record#tspan.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#tspan.alignment_baseline},
+	{<<"baseline-shift">>, Record#tspan.baseline_shift},
+	{<<"clip">>, Record#tspan.clip},
+	{<<"clip-path">>, Record#tspan.clip_path},
+	{<<"clip-rule">>, Record#tspan.clip_rule},
+	{<<"color">>, Record#tspan.color},
+	{<<"color-interpolation">>, Record#tspan.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#tspan.color_interpolation_filters},
+	{<<"color-profile">>, Record#tspan.color_profile},
+	{<<"color-rendering">>, Record#tspan.color_rendering},
+	{<<"cursor">>, Record#tspan.cursor},
+	{<<"direction">>, Record#tspan.direction},
+	{<<"display">>, Record#tspan.display},
+	{<<"dominant-baseline">>, Record#tspan.dominant_baseline},
+	{<<"enable-background">>, Record#tspan.enable_background},
+	{<<"fill">>, Record#tspan.fill},
+	{<<"fill-opacity">>, Record#tspan.fill_opacity},
+	{<<"fill-rule">>, Record#tspan.fill_rule},
+	{<<"filter">>, Record#tspan.filter},
+	{<<"flood-color">>, Record#tspan.flood_color},
+	{<<"flood-opacity">>, Record#tspan.flood_opacity},
+	{<<"font-family">>, Record#tspan.font_family},
+	{<<"font-size">>, Record#tspan.font_size},
+	{<<"font-size-adjust">>, Record#tspan.font_size_adjust},
+	{<<"font-stretch">>, Record#tspan.font_stretch},
+	{<<"font-style">>, Record#tspan.font_style},
+	{<<"font-variant">>, Record#tspan.font_variant},
+	{<<"font-weight">>, Record#tspan.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#tspan.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#tspan.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#tspan.image_rendering},
+	{<<"kerning">>, Record#tspan.kerning},
+	{<<"letter-spacing">>, Record#tspan.letter_spacing},
+	{<<"lighting-color">>, Record#tspan.lighting_color},
+	{<<"marker-end">>, Record#tspan.marker_end},
+	{<<"marker-mid">>, Record#tspan.marker_mid},
+	{<<"marker-start">>, Record#tspan.marker_start},
+	{<<"mask">>, Record#tspan.mask},
+	{<<"opacity">>, Record#tspan.opacity},
+	{<<"overflow">>, Record#tspan.overflow},
+	{<<"pointer-events">>, Record#tspan.pointer_events},
+	{<<"shape-rendering">>, Record#tspan.shape_rendering},
+	{<<"stop-color">>, Record#tspan.stop_color},
+	{<<"stop-opacity">>, Record#tspan.stop_opacity},
+	{<<"stroke">>, Record#tspan.stroke},
+	{<<"stroke-dasharray">>, Record#tspan.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#tspan.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#tspan.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#tspan.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#tspan.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#tspan.stroke_opacity},
+	{<<"stroke-width">>, Record#tspan.stroke_width},
+	{<<"text-anchor">>, Record#tspan.text_anchor},
+	{<<"text-decoration">>, Record#tspan.text_decoration},
+	{<<"text-rendering">>, Record#tspan.text_rendering},
+	{<<"unicode-bidi">>, Record#tspan.unicode_bidi},
+	{<<"visibility">>, Record#tspan.visibility},
+	{<<"word-spacing">>, Record#tspan.word_spacing},
+	{<<"writing-mode">>, Record#tspan.writing_mode}
+].

+ 126 - 0
src/element_use.erl

@@ -0,0 +1,126 @@
+-module(element_use).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"use">>, nitro:render(Record#use.body),
+	lists:append([
+		[
+			{<<"id">>, Record#use.id},
+			{<<"class">>, Record#use.class},
+			{<<"style">>, Record#use.style},
+			{<<"x">>, Record#use.x},
+			{<<"y">>, Record#use.y},
+			{<<"width">>, Record#use.width},
+			{<<"height">>, Record#use.height},
+			{<<"transform">>, Record#use.transform},
+			{<<"externalResourcesRequired">>, Record#use.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		svg_xlink(Record),
+		Record#use.data_fields,
+		Record#use.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#use.requiredExtensions},
+	{<<"requiredFeatures">>, Record#use.requiredFeatures},
+	{<<"systemLanguage">>, Record#use.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#use.xmlbase},
+	{<<"xml:lang">>, Record#use.xmllang},
+	{<<"xml:space">>, Record#use.xmlspace}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#use.onactivate},
+	{<<"onclick">>, Record#use.onclick},
+	{<<"onfocusin">>, Record#use.onfocusin},
+	{<<"onfocusout">>, Record#use.onfocusout},
+	{<<"onload">>, Record#use.onload_graphical},
+	{<<"onmousedown">>, Record#use.onmousedown},
+	{<<"onmousemove">>, Record#use.onmousemove},
+	{<<"onmouseout">>, Record#use.onmouseout},
+	{<<"onmouseover">>, Record#use.onmouseover},
+	{<<"onmouseup">>, Record#use.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#use.alignment_baseline},
+	{<<"baseline-shift">>, Record#use.baseline_shift},
+	{<<"clip">>, Record#use.clip},
+	{<<"clip-path">>, Record#use.clip_path},
+	{<<"clip-rule">>, Record#use.clip_rule},
+	{<<"color">>, Record#use.color},
+	{<<"color-interpolation">>, Record#use.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#use.color_interpolation_filters},
+	{<<"color-profile">>, Record#use.color_profile},
+	{<<"color-rendering">>, Record#use.color_rendering},
+	{<<"cursor">>, Record#use.cursor},
+	{<<"direction">>, Record#use.direction},
+	{<<"display">>, Record#use.display},
+	{<<"dominant-baseline">>, Record#use.dominant_baseline},
+	{<<"enable-background">>, Record#use.enable_background},
+	{<<"fill">>, Record#use.fill},
+	{<<"fill-opacity">>, Record#use.fill_opacity},
+	{<<"fill-rule">>, Record#use.fill_rule},
+	{<<"filter">>, Record#use.filter},
+	{<<"flood-color">>, Record#use.flood_color},
+	{<<"flood-opacity">>, Record#use.flood_opacity},
+	{<<"font-family">>, Record#use.font_family},
+	{<<"font-size">>, Record#use.font_size},
+	{<<"font-size-adjust">>, Record#use.font_size_adjust},
+	{<<"font-stretch">>, Record#use.font_stretch},
+	{<<"font-style">>, Record#use.font_style},
+	{<<"font-variant">>, Record#use.font_variant},
+	{<<"font-weight">>, Record#use.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#use.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#use.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#use.image_rendering},
+	{<<"kerning">>, Record#use.kerning},
+	{<<"letter-spacing">>, Record#use.letter_spacing},
+	{<<"lighting-color">>, Record#use.lighting_color},
+	{<<"marker-end">>, Record#use.marker_end},
+	{<<"marker-mid">>, Record#use.marker_mid},
+	{<<"marker-start">>, Record#use.marker_start},
+	{<<"mask">>, Record#use.mask},
+	{<<"opacity">>, Record#use.opacity},
+	{<<"overflow">>, Record#use.overflow},
+	{<<"pointer-events">>, Record#use.pointer_events},
+	{<<"shape-rendering">>, Record#use.shape_rendering},
+	{<<"stop-color">>, Record#use.stop_color},
+	{<<"stop-opacity">>, Record#use.stop_opacity},
+	{<<"stroke">>, Record#use.stroke},
+	{<<"stroke-dasharray">>, Record#use.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#use.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#use.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#use.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#use.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#use.stroke_opacity},
+	{<<"stroke-width">>, Record#use.stroke_width},
+	{<<"text-anchor">>, Record#use.text_anchor},
+	{<<"text-decoration">>, Record#use.text_decoration},
+	{<<"text-rendering">>, Record#use.text_rendering},
+	{<<"unicode-bidi">>, Record#use.unicode_bidi},
+	{<<"visibility">>, Record#use.visibility},
+	{<<"word-spacing">>, Record#use.word_spacing},
+	{<<"writing-mode">>, Record#use.writing_mode}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#use.xlinkhref},
+	{<<"xlink:type">>, Record#use.xlinktype},
+	{<<"xlink:role">>, Record#use.xlinkrole},
+	{<<"xlink:arcrole">>, Record#use.xlinkarcrole},
+	{<<"xlink:title">>, Record#use.xlinktitle},
+	{<<"xlink:show">>, Record#use.xlinkshow},
+	{<<"xlink:actuate">>, Record#use.xlinkactuate}
+].

+ 30 - 0
src/element_view.erl

@@ -0,0 +1,30 @@
+-module(element_view).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"view">>, nitro:render(Record#view.body),
+	lists:append([
+		[
+			{<<"id">>, Record#view.id},
+			{<<"class">>, Record#view.class},
+			{<<"style">>, Record#view.style},
+			{<<"viewBox">>, Record#view.viewBox},
+			{<<"preserveAspectRatio">>, Record#view.preserveAspectRatio},
+			{<<"zoomAndPan">>, Record#view.zoomAndPan},
+			{<<"viewTarget">>, Record#view.viewTarget},
+			{<<"externalResourcesRequired">>, Record#view.externalResourcesRequired}
+		],
+		svg_core(Record),
+		Record#view.data_fields,
+		Record#view.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#view.xmlbase},
+	{<<"xml:lang">>, Record#view.xmllang},
+	{<<"xml:space">>, Record#view.xmlspace}
+].

+ 30 - 0
src/element_vkern.erl

@@ -0,0 +1,30 @@
+-module(element_vkern).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	wf_tags:emit_tag(<<"vkern">>, nitro:render(Record#vkern.body),
+	lists:append([
+		[
+			{<<"id">>, Record#vkern.id},
+			{<<"class">>, Record#vkern.class},
+			{<<"style">>, Record#vkern.style},
+			{<<"u1">>, Record#vkern.u1},
+			{<<"g1">>, Record#vkern.g1},
+			{<<"u2">>, Record#vkern.u2},
+			{<<"g2">>, Record#vkern.g2},
+			{<<"k">>, Record#vkern.k}
+		],
+		svg_core(Record),
+		Record#vkern.data_fields,
+		Record#vkern.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#vkern.xmlbase},
+	{<<"xml:lang">>, Record#vkern.xmllang},
+	{<<"xml:space">>, Record#vkern.xmlspace}
+].

+ 153 - 0
src/element_xlink.erl

@@ -0,0 +1,153 @@
+-module(element_xlink).
+-author('Konstantin Zakablukovsky').
+-include("svg.hrl").
+-compile(export_all).
+
+render_element(Record) ->
+	Id = case Record#xlink.postback of
+		undefined -> Record#xlink.id;
+		Postback ->
+			ID = case Record#xlink.id of undefined ->
+				nitro:temp_id();
+				I -> I
+			end,
+			nitro:wire(#event{ type=click,postback=Postback,target=ID, source=Record#xlink.source,delegate=Record#xlink.delegate,validation=Record#xlink.validate}),
+			ID
+	end,
+	wf_tags:emit_tag(<<"a">>, nitro:render(Record#xlink.body),
+	lists:append([
+		[
+			{<<"id">>, Id},
+			{<<"class">>, Record#xlink.class},
+			{<<"style">>, Record#xlink.style},
+			{<<"transform">>, Record#xlink.transform},
+			{<<"target">>, Record#xlink.target},
+			{<<"externalResourcesRequired">>, Record#xlink.externalResourcesRequired}
+		],
+		svg_conditional_processing(Record),
+		svg_core(Record),
+		svg_filter_primitive(Record),
+		svg_graphical_event(Record),
+		svg_presentation(Record),
+		svg_transfert_function(Record),
+		svg_xlink(Record),
+		Record#xlink.data_fields,
+		Record#xlink.aria_states
+	])).
+
+
+%% Common SVG attributes
+svg_conditional_processing(Record)-> [
+	{<<"requiredExtensions">>, Record#xlink.requiredExtensions},
+	{<<"requiredFeatures">>, Record#xlink.requiredFeatures},
+	{<<"systemLanguage">>, Record#xlink.systemLanguage}
+].
+
+svg_core(Record)-> [
+	{<<"xml:base">>, Record#xlink.xmlbase},
+	{<<"xml:lang">>, Record#xlink.xmllang},
+	{<<"xml:space">>, Record#xlink.xmlspace}
+].
+
+svg_filter_primitive(Record)-> [
+	{<<"height">>, Record#xlink.height},
+	{<<"result">>, Record#xlink.result},
+	{<<"width">>, Record#xlink.width},
+	{<<"x">>, Record#xlink.x},
+	{<<"y">>, Record#xlink.y}
+].
+
+svg_graphical_event(Record)-> [
+	{<<"onactivate">>, Record#xlink.onactivate},
+	{<<"onclick">>, Record#xlink.onclick},
+	{<<"onfocusin">>, Record#xlink.onfocusin},
+	{<<"onfocusout">>, Record#xlink.onfocusout},
+	{<<"onload">>, Record#xlink.onload_graphical},
+	{<<"onmousedown">>, Record#xlink.onmousedown},
+	{<<"onmousemove">>, Record#xlink.onmousemove},
+	{<<"onmouseout">>, Record#xlink.onmouseout},
+	{<<"onmouseover">>, Record#xlink.onmouseover},
+	{<<"onmouseup">>, Record#xlink.onmouseup}
+].
+
+svg_presentation(Record)-> [
+	{<<"alignment-baseline">>, Record#xlink.alignment_baseline},
+	{<<"baseline-shift">>, Record#xlink.baseline_shift},
+	{<<"clip">>, Record#xlink.clip},
+	{<<"clip-path">>, Record#xlink.clip_path},
+	{<<"clip-rule">>, Record#xlink.clip_rule},
+	{<<"color">>, Record#xlink.color},
+	{<<"color-interpolation">>, Record#xlink.color_interpolation},
+	{<<"color-interpolation-filters">>, Record#xlink.color_interpolation_filters},
+	{<<"color-profile">>, Record#xlink.color_profile},
+	{<<"color-rendering">>, Record#xlink.color_rendering},
+	{<<"cursor">>, Record#xlink.cursor},
+	{<<"direction">>, Record#xlink.direction},
+	{<<"display">>, Record#xlink.display},
+	{<<"dominant-baseline">>, Record#xlink.dominant_baseline},
+	{<<"enable-background">>, Record#xlink.enable_background},
+	{<<"fill">>, Record#xlink.fill},
+	{<<"fill-opacity">>, Record#xlink.fill_opacity},
+	{<<"fill-rule">>, Record#xlink.fill_rule},
+	{<<"filter">>, Record#xlink.filter},
+	{<<"flood-color">>, Record#xlink.flood_color},
+	{<<"flood-opacity">>, Record#xlink.flood_opacity},
+	{<<"font-family">>, Record#xlink.font_family},
+	{<<"font-size">>, Record#xlink.font_size},
+	{<<"font-size-adjust">>, Record#xlink.font_size_adjust},
+	{<<"font-stretch">>, Record#xlink.font_stretch},
+	{<<"font-style">>, Record#xlink.font_style},
+	{<<"font-variant">>, Record#xlink.font_variant},
+	{<<"font-weight">>, Record#xlink.font_weight},
+	{<<"glyph-orientation-horizontal">>, Record#xlink.glyph_orientation_horizontal},
+	{<<"glyph-orientation-vertical">>, Record#xlink.glyph_orientation_vertical},
+	{<<"image-rendering">>, Record#xlink.image_rendering},
+	{<<"kerning">>, Record#xlink.kerning},
+	{<<"letter-spacing">>, Record#xlink.letter_spacing},
+	{<<"lighting-color">>, Record#xlink.lighting_color},
+	{<<"marker-end">>, Record#xlink.marker_end},
+	{<<"marker-mid">>, Record#xlink.marker_mid},
+	{<<"marker-start">>, Record#xlink.marker_start},
+	{<<"mask">>, Record#xlink.mask},
+	{<<"opacity">>, Record#xlink.opacity},
+	{<<"overflow">>, Record#xlink.overflow},
+	{<<"pointer-events">>, Record#xlink.pointer_events},
+	{<<"shape-rendering">>, Record#xlink.shape_rendering},
+	{<<"stop-color">>, Record#xlink.stop_color},
+	{<<"stop-opacity">>, Record#xlink.stop_opacity},
+	{<<"stroke">>, Record#xlink.stroke},
+	{<<"stroke-dasharray">>, Record#xlink.stroke_dasharray},
+	{<<"stroke-dashoffset">>, Record#xlink.stroke_dashoffset},
+	{<<"stroke-linecap">>, Record#xlink.stroke_linecap},
+	{<<"stroke-linejoin">>, Record#xlink.stroke_linejoin},
+	{<<"stroke-miterlimit">>, Record#xlink.stroke_miterlimit},
+	{<<"stroke-opacity">>, Record#xlink.stroke_opacity},
+	{<<"stroke-width">>, Record#xlink.stroke_width},
+	{<<"text-anchor">>, Record#xlink.text_anchor},
+	{<<"text-decoration">>, Record#xlink.text_decoration},
+	{<<"text-rendering">>, Record#xlink.text_rendering},
+	{<<"unicode-bidi">>, Record#xlink.unicode_bidi},
+	{<<"visibility">>, Record#xlink.visibility},
+	{<<"word-spacing">>, Record#xlink.word_spacing},
+	{<<"writing-mode">>, Record#xlink.writing_mode}
+].
+
+svg_transfert_function(Record)-> [
+	{<<"type">>, Record#xlink.type},
+	{<<"tableValues">>, Record#xlink.tableValues},
+	{<<"slope">>, Record#xlink.slope},
+	{<<"intercept">>, Record#xlink.intercept},
+	{<<"amplitude">>, Record#xlink.amplitude},
+	{<<"exponent">>, Record#xlink.exponent},
+	{<<"offset">>, Record#xlink.offset}
+].
+
+svg_xlink(Record)-> [
+	{<<"xlink:href">>, Record#xlink.xlinkhref},
+	{<<"xlink:type">>, Record#xlink.xlinktype},
+	{<<"xlink:role">>, Record#xlink.xlinkrole},
+	{<<"xlink:arcrole">>, Record#xlink.xlinkarcrole},
+	{<<"xlink:title">>, Record#xlink.xlinktitle},
+	{<<"xlink:show">>, Record#xlink.xlinkshow},
+	{<<"xlink:actuate">>, Record#xlink.xlinkactuate}
+].