Konstantin Zakablukovsky 9 years ago
parent
commit
fd4ec0f4e4

+ 25 - 0
include/nitro.hrl

@@ -215,6 +215,31 @@
 -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(g, {?ELEMENT_BASE(element_g), transform, externalResourcesRequired,  ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
 -record(path, {?ELEMENT_BASE(element_path), d, pathLength, transform, externalResourcesRequired,  ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).
 -record(rect, {?ELEMENT_BASE(element_rect), x, y, width, height, rx, ry, transform, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION}).

+ 100 - 0
src/elements/element_feblend.erl

@@ -0,0 +1,100 @@
+-module(element_feblend).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fecolormatrix.erl

@@ -0,0 +1,100 @@
+-module(element_fecolormatrix).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fecomponenttransfer.erl

@@ -0,0 +1,98 @@
+-module(element_fecomponenttransfer).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fecomposite.erl

@@ -0,0 +1,104 @@
+-module(element_fecomposite).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_feconvolvematrix.erl

@@ -0,0 +1,106 @@
+-module(element_feconvolvematrix).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fediffuselighting.erl

@@ -0,0 +1,101 @@
+-module(element_fediffuselighting).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fedisplacementmap.erl

@@ -0,0 +1,102 @@
+-module(element_fedisplacementmap).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fedistantlight.erl

@@ -0,0 +1,27 @@
+-module(element_fedistantlight).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_feflood.erl

@@ -0,0 +1,97 @@
+-module(element_feflood).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fefunca.erl

@@ -0,0 +1,36 @@
+-module(element_fefunca).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fefuncb.erl

@@ -0,0 +1,36 @@
+-module(element_fefuncb).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fefuncg.erl

@@ -0,0 +1,36 @@
+-module(element_fefuncg).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fefuncr.erl

@@ -0,0 +1,36 @@
+-module(element_fefuncr).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fegaussianblur.erl

@@ -0,0 +1,99 @@
+-module(element_fegaussianblur).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_feimage.erl

@@ -0,0 +1,110 @@
+-module(element_feimage).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_femerge.erl

@@ -0,0 +1,97 @@
+-module(element_femerge).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_femergenode.erl

@@ -0,0 +1,26 @@
+-module(element_femergenode).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_femorphology.erl

@@ -0,0 +1,100 @@
+-module(element_femorphology).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_feoffset.erl

@@ -0,0 +1,100 @@
+-module(element_feoffset).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fepointlight.erl

@@ -0,0 +1,28 @@
+-module(element_fepointlight).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fespecularlighting.erl

@@ -0,0 +1,102 @@
+-module(element_fespecularlighting).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fespotlight.erl

@@ -0,0 +1,33 @@
+-module(element_fespotlight).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_fetile.erl

@@ -0,0 +1,98 @@
+-module(element_fetile).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_feturbulence.erl

@@ -0,0 +1,102 @@
+-module(element_feturbulence).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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/elements/element_filter.erl

@@ -0,0 +1,107 @@
+-module(element_filter).
+-author('Konstantin Zakablukovsky').
+-include("nitro.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}
+].