[librsvg: 3/4] element: replace create_element function with Element::new



commit 505cd84d8f4a519a44a50a47dac9eae2b9d51276
Author: Paolo Borelli <pborelli gnome org>
Date:   Thu Apr 16 11:58:04 2020 +0200

    element: replace create_element function with Element::new

 rsvg_internals/src/element.rs | 113 ++++++++++++++++++++----------------------
 rsvg_internals/src/node.rs    |   2 +-
 2 files changed, 55 insertions(+), 60 deletions(-)
---
diff --git a/rsvg_internals/src/element.rs b/rsvg_internals/src/element.rs
index fcff04fe..b24b3292 100644
--- a/rsvg_internals/src/element.rs
+++ b/rsvg_internals/src/element.rs
@@ -1,9 +1,4 @@
 //! SVG Elements.
-//!
-//! The [`create_element`] function takes an XML element name, and
-//! creates an [`Element`] for it.
-//!
-//! [`create_element`]: fn.create_element.html
 
 use locale_config::{LanguageRange, Locale};
 use markup5ever::{expanded_name, local_name, namespace_url, ns, QualName};
@@ -462,6 +457,60 @@ macro_rules! call_inner {
 }
 
 impl Element {
+    /// Takes an XML element name and a list of attribute/value pairs and creates an [`Element`].
+    ///
+    /// This operation does not fail.  Unknown element names simply produce a [`NonRendering`]
+    /// element.
+    ///
+    /// [`Element`]: type.Element.html
+    /// [`NonRendering`]: ../structure/struct.NonRendering.html
+    pub fn new(name: &QualName, pbag: &PropertyBag) -> Element {
+        let mut id = None;
+        let mut class = None;
+
+        for (attr, value) in pbag.iter() {
+            match attr.expanded() {
+                expanded_name!("", "id") => id = Some(value),
+                expanded_name!("", "class") => class = Some(value),
+                _ => (),
+            }
+        }
+
+        let (create_fn, flags) = if name.ns == ns!(svg) {
+            match ELEMENT_CREATORS.get(name.local.as_ref()) {
+                // hack in the SVG namespace for supported element names
+                Some(&(create_fn, flags)) => (create_fn, flags),
+
+                // Whenever we encounter a element name we don't understand, represent it as a
+                // non-rendering element.  This is like a group, but it doesn't do any rendering
+                // of children.  The effect is that we will ignore all children of unknown elements.
+                None => (
+                    create_non_rendering as ElementCreateFn,
+                    ElementCreateFlags::Default,
+                ),
+            }
+        } else {
+            (
+                create_non_rendering as ElementCreateFn,
+                ElementCreateFlags::Default,
+            )
+        };
+
+        if flags == ElementCreateFlags::IgnoreClass {
+            class = None;
+        };
+
+        //    sizes::print_sizes();
+
+        let mut element = create_fn(name, id, class);
+
+        if let Err(e) = element.set_attributes(pbag) {
+            element.set_error(e);
+        }
+
+        element
+    }
+
     pub fn element_name(&self) -> &QualName {
         call_inner!(self, element_name)
     }
@@ -779,60 +828,6 @@ static ELEMENT_CREATORS: Lazy<HashMap<&'static str, (ElementCreateFn, ElementCre
     creators_table.into_iter().map(|(n, c, f)| (n, (c, f))).collect()
 });
 
-/// Takes an XML element name and a list of attribute/value pairs and creates an [`Element`].
-///
-/// This operation does not fail.  Unknown element names simply produce a [`NonRendering`]
-/// element.
-///
-/// [`Element`]: type.Element.html
-/// [`NonRendering`]: ../structure/struct.NonRendering.html
-pub fn create_element(name: &QualName, pbag: &PropertyBag) -> Element {
-    let mut id = None;
-    let mut class = None;
-
-    for (attr, value) in pbag.iter() {
-        match attr.expanded() {
-            expanded_name!("", "id") => id = Some(value),
-            expanded_name!("", "class") => class = Some(value),
-            _ => (),
-        }
-    }
-
-    let (create_fn, flags) = if name.ns == ns!(svg) {
-        match ELEMENT_CREATORS.get(name.local.as_ref()) {
-            // hack in the SVG namespace for supported element names
-            Some(&(create_fn, flags)) => (create_fn, flags),
-
-            // Whenever we encounter a element name we don't understand, represent it as a
-            // non-rendering element.  This is like a group, but it doesn't do any rendering
-            // of children.  The effect is that we will ignore all children of unknown elements.
-            None => (
-                create_non_rendering as ElementCreateFn,
-                ElementCreateFlags::Default,
-            ),
-        }
-    } else {
-        (
-            create_non_rendering as ElementCreateFn,
-            ElementCreateFlags::Default,
-        )
-    };
-
-    if flags == ElementCreateFlags::IgnoreClass {
-        class = None;
-    };
-
-    //    sizes::print_sizes();
-
-    let mut element = create_fn(name, id, class);
-
-    if let Err(e) = element.set_attributes(pbag) {
-        element.set_error(e);
-    }
-
-    element
-}
-
 /// Gets the user's preferred locale from the environment and
 /// translates it to a `Locale` with `LanguageRange` fallbacks.
 ///
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 370381e5..94fabc8f 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -69,7 +69,7 @@ pub enum NodeData {
 
 impl NodeData {
     pub fn new_element(name: &QualName, pbag: &PropertyBag) -> NodeData {
-        NodeData::Element(create_element(name, pbag))
+        NodeData::Element(Element::new(name, pbag))
     }
 
     pub fn new_chars() -> NodeData {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]