[librsvg: 3/4] element: replace create_element function with Element::new
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 3/4] element: replace create_element function with Element::new
- Date: Thu, 16 Apr 2020 22:19:44 +0000 (UTC)
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]