[librsvg: 2/3] create_node: remove a macro, leverage FromIterator for the HashMap
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 2/3] create_node: remove a macro, leverage FromIterator for the HashMap
- Date: Sun, 10 Nov 2019 20:13:11 +0000 (UTC)
commit 07fdfa2494f3775f7bb94c1ed1ad105fba6860b9
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Nov 10 12:21:25 2019 +0100
create_node: remove a macro, leverage FromIterator for the HashMap
rsvg_internals/src/create_node.rs | 180 +++++++++++++++++++-------------------
1 file changed, 88 insertions(+), 92 deletions(-)
---
diff --git a/rsvg_internals/src/create_node.rs b/rsvg_internals/src/create_node.rs
index 0e345a01..6d0684da 100644
--- a/rsvg_internals/src/create_node.rs
+++ b/rsvg_internals/src/create_node.rs
@@ -127,101 +127,97 @@ use creators::*;
type NodeCreateFn = fn(element_name: &QualName, id: Option<&str>, class: Option<&str>) -> RsvgNode;
-macro_rules! c {
- ($hashset:expr, $str_name:expr, $supports_class:expr, $fn_name:ident) => {
- $hashset.insert($str_name, ($supports_class, $fn_name as NodeCreateFn));
- };
-}
-
// Lines in comments are elements that we don't support.
#[cfg_attr(rustfmt, rustfmt_skip)]
static NODE_CREATORS: Lazy<HashMap<&'static str, (bool, NodeCreateFn)>> = Lazy::new(|| {
- let mut h = HashMap::new();
- // name, supports_class, create_fn
- c!(h, "a", true, create_link);
- /* c!(h, "altGlyph", true, ); */
- /* c!(h, "altGlyphDef", false, ); */
- /* c!(h, "altGlyphItem", false, ); */
- /* c!(h, "animate", false, ); */
- /* c!(h, "animateColor", false, ); */
- /* c!(h, "animateMotion", false, ); */
- /* c!(h, "animateTransform", false, ); */
- c!(h, "circle", true, create_circle);
- c!(h, "clipPath", true, create_clip_path);
- /* c!(h, "color-profile", false, ); */
- /* c!(h, "cursor", false, ); */
- c!(h, "defs", true, create_defs);
- /* c!(h, "desc", true, ); */
- c!(h, "ellipse", true, create_ellipse);
- c!(h, "feBlend", true, create_fe_blend);
- c!(h, "feColorMatrix", true, create_fe_color_matrix);
- c!(h, "feComponentTransfer", true, create_fe_component_transfer);
- c!(h, "feComposite", true, create_fe_composite);
- c!(h, "feConvolveMatrix", true, create_fe_convolve_matrix);
- c!(h, "feDiffuseLighting", true, create_fe_diffuse_lighting);
- c!(h, "feDisplacementMap", true, create_fe_displacement_map);
- c!(h, "feDistantLight", false, create_fe_distant_light);
- c!(h, "feFuncA", false, create_fe_func_a);
- c!(h, "feFuncB", false, create_fe_func_b);
- c!(h, "feFuncG", false, create_fe_func_g);
- c!(h, "feFuncR", false, create_fe_func_r);
- c!(h, "feFlood", true, create_fe_flood);
- c!(h, "feGaussianBlur", true, create_fe_gaussian_blur);
- c!(h, "feImage", true, create_fe_image);
- c!(h, "feMerge", true, create_fe_merge);
- c!(h, "feMergeNode", false, create_fe_merge_node);
- c!(h, "feMorphology", true, create_fe_morphology);
- c!(h, "feOffset", true, create_fe_offset);
- c!(h, "fePointLight", false, create_fe_point_light);
- c!(h, "feSpecularLighting", true, create_fe_specular_lighting);
- c!(h, "feSpotLight", false, create_fe_spot_light);
- c!(h, "feTile", true, create_fe_tile);
- c!(h, "feTurbulence", true, create_fe_turbulence);
- c!(h, "filter", true, create_filter);
- /* c!(h, "font", true, ); */
- /* c!(h, "font-face", false, ); */
- /* c!(h, "font-face-format", false, ); */
- /* c!(h, "font-face-name", false, ); */
- /* c!(h, "font-face-src", false, ); */
- /* c!(h, "font-face-uri", false, ); */
- /* c!(h, "foreignObject", true, ); */
- c!(h, "g", true, create_group);
- /* c!(h, "glyph", true, ); */
- /* c!(h, "glyphRef", true, ); */
- /* c!(h, "hkern", false, ); */
- c!(h, "image", true, create_image);
- c!(h, "line", true, create_line);
- c!(h, "linearGradient", true, create_linear_gradient);
- c!(h, "marker", true, create_marker);
- c!(h, "mask", true, create_mask);
- /* c!(h, "metadata", false, ); */
- /* c!(h, "missing-glyph", true, ); */
- /* c!(h, "mpath", false, ); */
- /* c!(h, "multiImage", false, create_multi_image); */
- c!(h, "path", true, create_path);
- c!(h, "pattern", true, create_pattern);
- c!(h, "polygon", true, create_polygon);
- c!(h, "polyline", true, create_polyline);
- c!(h, "radialGradient", true, create_radial_gradient);
- c!(h, "rect", true, create_rect);
- /* c!(h, "script", false, ); */
- /* c!(h, "set", false, ); */
- c!(h, "stop", true, create_stop);
- c!(h, "style", false, create_style);
- /* c!(h, "subImage", false, create_sub_image); */
- /* c!(h, "subImageRef", false, create_sub_image_ref); */
- c!(h, "svg", true, create_svg);
- c!(h, "switch", true, create_switch);
- c!(h, "symbol", true, create_symbol);
- c!(h, "text", true, create_text);
- /* c!(h, "textPath", true, ); */
- /* c!(h, "title", true, ); */
- c!(h, "tref", true, create_tref);
- c!(h, "tspan", true, create_tspan);
- c!(h, "use", true, create_use);
- /* c!(h, "view", false, ); */
- /* c!(h, "vkern", false, ); */
- h
+ let creators_table: Vec<(&str, bool, NodeCreateFn)> = vec![
+ // name, supports_class, create_fn
+ ("a", true, create_link),
+ /* ("altGlyph", true, ), */
+ /* ("altGlyphDef", false, ), */
+ /* ("altGlyphItem", false, ), */
+ /* ("animate", false, ), */
+ /* ("animateColor", false, ), */
+ /* ("animateMotion", false, ), */
+ /* ("animateTransform", false, ), */
+ ("circle", true, create_circle),
+ ("clipPath", true, create_clip_path),
+ /* ("color-profile", false, ), */
+ /* ("cursor", false, ), */
+ ("defs", true, create_defs),
+ /* ("desc", true, ), */
+ ("ellipse", true, create_ellipse),
+ ("feBlend", true, create_fe_blend),
+ ("feColorMatrix", true, create_fe_color_matrix),
+ ("feComponentTransfer", true, create_fe_component_transfer),
+ ("feComposite", true, create_fe_composite),
+ ("feConvolveMatrix", true, create_fe_convolve_matrix),
+ ("feDiffuseLighting", true, create_fe_diffuse_lighting),
+ ("feDisplacementMap", true, create_fe_displacement_map),
+ ("feDistantLight", false, create_fe_distant_light),
+ ("feFuncA", false, create_fe_func_a),
+ ("feFuncB", false, create_fe_func_b),
+ ("feFuncG", false, create_fe_func_g),
+ ("feFuncR", false, create_fe_func_r),
+ ("feFlood", true, create_fe_flood),
+ ("feGaussianBlur", true, create_fe_gaussian_blur),
+ ("feImage", true, create_fe_image),
+ ("feMerge", true, create_fe_merge),
+ ("feMergeNode", false, create_fe_merge_node),
+ ("feMorphology", true, create_fe_morphology),
+ ("feOffset", true, create_fe_offset),
+ ("fePointLight", false, create_fe_point_light),
+ ("feSpecularLighting", true, create_fe_specular_lighting),
+ ("feSpotLight", false, create_fe_spot_light),
+ ("feTile", true, create_fe_tile),
+ ("feTurbulence", true, create_fe_turbulence),
+ ("filter", true, create_filter),
+ /* ("font", true, ), */
+ /* ("font-face", false, ), */
+ /* ("font-face-format", false, ), */
+ /* ("font-face-name", false, ), */
+ /* ("font-face-src", false, ), */
+ /* ("font-face-uri", false, ), */
+ /* ("foreignObject", true, ), */
+ ("g", true, create_group),
+ /* ("glyph", true, ), */
+ /* ("glyphRef", true, ), */
+ /* ("hkern", false, ), */
+ ("image", true, create_image),
+ ("line", true, create_line),
+ ("linearGradient", true, create_linear_gradient),
+ ("marker", true, create_marker),
+ ("mask", true, create_mask),
+ /* ("metadata", false, ), */
+ /* ("missing-glyph", true, ), */
+ /* ("mpath", false, ), */
+ /* ("multiImage", false, create_multi_image), */
+ ("path", true, create_path),
+ ("pattern", true, create_pattern),
+ ("polygon", true, create_polygon),
+ ("polyline", true, create_polyline),
+ ("radialGradient", true, create_radial_gradient),
+ ("rect", true, create_rect),
+ /* ("script", false, ), */
+ /* ("set", false, ), */
+ ("stop", true, create_stop),
+ ("style", false, create_style),
+ /* ("subImage", false, create_sub_image), */
+ /* ("subImageRef", false, create_sub_image_ref), */
+ ("svg", true, create_svg),
+ ("switch", true, create_switch),
+ ("symbol", true, create_symbol),
+ ("text", true, create_text),
+ /* ("textPath", true, ), */
+ /* ("title", true, ), */
+ ("tref", true, create_tref),
+ ("tspan", true, create_tspan),
+ ("use", true, create_use),
+ /* ("view", false, ), */
+ /* ("vkern", false, ), */
+ ];
+
+ creators_table.into_iter().map(|(n, s, f)| (n, (s, f))).collect()
});
pub fn create_node(name: &QualName, pbag: &PropertyBag) -> RsvgNode {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]