[librsvg: 44/51] blend.rs: impl Parse for Mode instead of using a custom method



commit c4cf96e2ba35c7a9446e6219feb1f03e8d6600b5
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Dec 18 10:47:04 2019 -0600

    blend.rs: impl Parse for Mode instead of using a custom method

 rsvg_internals/src/filters/blend.rs | 49 ++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 23 deletions(-)
---
diff --git a/rsvg_internals/src/filters/blend.rs b/rsvg_internals/src/filters/blend.rs
index 6cae800c..94e32032 100755
--- a/rsvg_internals/src/filters/blend.rs
+++ b/rsvg_internals/src/filters/blend.rs
@@ -1,9 +1,11 @@
 use cairo;
-use markup5ever::{expanded_name, local_name, namespace_url, ns, QualName};
+use cssparser::Parser;
+use markup5ever::{expanded_name, local_name, namespace_url, ns};
 
 use crate::drawing_ctx::DrawingCtx;
 use crate::error::*;
 use crate::node::{NodeResult, NodeTrait, RsvgNode};
+use crate::parsers::{Parse, ParseValue};
 use crate::property_bag::PropertyBag;
 use crate::surface_utils::shared_surface::SharedImageSurface;
 
@@ -62,7 +64,7 @@ impl NodeTrait for FeBlend {
                 expanded_name!(svg "in2") => {
                     self.in2 = Some(Input::parse(attr, value)?);
                 }
-                expanded_name!(svg "mode") => self.mode = Mode::parse(attr, value)?,
+                expanded_name!(svg "mode") => self.mode = attr.parse(value)?,
                 _ => (),
             }
         }
@@ -131,27 +133,28 @@ impl FilterEffect for FeBlend {
     }
 }
 
-impl Mode {
-    fn parse(attr: QualName, s: &str) -> Result<Self, NodeError> {
-        match s {
-            "normal" => Ok(Mode::Normal),
-            "multiply" => Ok(Mode::Multiply),
-            "screen" => Ok(Mode::Screen),
-            "darken" => Ok(Mode::Darken),
-            "lighten" => Ok(Mode::Lighten),
-            "overlay" => Ok(Mode::Overlay),
-            "color-dodge" => Ok(Mode::ColorDodge),
-            "color-burn" => Ok(Mode::ColorBurn),
-            "hard-light" => Ok(Mode::HardLight),
-            "soft-light" => Ok(Mode::SoftLight),
-            "difference" => Ok(Mode::Difference),
-            "exclusion" => Ok(Mode::Exclusion),
-            "hue" => Ok(Mode::HslHue),
-            "saturation" => Ok(Mode::HslSaturation),
-            "color" => Ok(Mode::HslColor),
-            "luminosity" => Ok(Mode::HslLuminosity),
-            _ => Err(ValueErrorKind::parse_error("invalid value")).attribute(attr),
-        }
+impl Parse for Mode {
+    fn parse(parser: &mut Parser<'_, '_>) -> Result<Self, ValueErrorKind> {
+        parse_identifiers!(
+            parser,
+            "normal" => Mode::Normal,
+            "multiply" => Mode::Multiply,
+            "screen" => Mode::Screen,
+            "darken" => Mode::Darken,
+            "lighten" => Mode::Lighten,
+            "overlay" => Mode::Overlay,
+            "color-dodge" => Mode::ColorDodge,
+            "color-burn" => Mode::ColorBurn,
+            "hard-light" => Mode::HardLight,
+            "soft-light" => Mode::SoftLight,
+            "difference" => Mode::Difference,
+            "exclusion" => Mode::Exclusion,
+            "hue" => Mode::HslHue,
+            "saturation" => Mode::HslSaturation,
+            "color" => Mode::HslColor,
+            "luminosity" => Mode::HslLuminosity,
+        )
+        .map_err(|_: ParseError| ValueErrorKind::parse_error("parse error"))
     }
 }
 


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