[librsvg] Move CustomIdent to the parsers module



commit 4b4251273553128c5f80206d936956480fd855ef
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun Apr 12 18:26:00 2020 +0200

    Move CustomIdent to the parsers module

 Makefile.am                             |  1 -
 po/POTFILES.in                          |  1 -
 rsvg_internals/src/filters/blend.rs     |  3 +-
 rsvg_internals/src/filters/composite.rs |  3 +-
 rsvg_internals/src/filters/context.rs   |  3 +-
 rsvg_internals/src/filters/input.rs     | 86 ---------------------------------
 rsvg_internals/src/filters/merge.rs     |  3 +-
 rsvg_internals/src/filters/mod.rs       | 44 ++++++++++++++---
 rsvg_internals/src/parsers.rs           | 47 +++++++++++++++++-
 9 files changed, 87 insertions(+), 104 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 0b1e2aa3..98e4cbf2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -55,7 +55,6 @@ LIBRSVG_INTERNALS_SRC =                                               \
        rsvg_internals/src/filters/merge.rs                     \
        rsvg_internals/src/filters/morphology.rs                \
        rsvg_internals/src/filters/mod.rs                       \
-       rsvg_internals/src/filters/input.rs                     \
        rsvg_internals/src/filters/offset.rs                    \
        rsvg_internals/src/filters/tile.rs                      \
        rsvg_internals/src/filters/turbulence.rs                \
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 52aefded..8f992fb3 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -37,7 +37,6 @@ rsvg_internals/src/filters/error.rs
 rsvg_internals/src/filters/flood.rs
 rsvg_internals/src/filters/gaussian_blur.rs
 rsvg_internals/src/filters/image.rs
-rsvg_internals/src/filters/input.rs
 rsvg_internals/src/filters/light/light_source.rs
 rsvg_internals/src/filters/light/lighting.rs
 rsvg_internals/src/filters/light/mod.rs
diff --git a/rsvg_internals/src/filters/blend.rs b/rsvg_internals/src/filters/blend.rs
index 20f8f71f..2038b9ee 100755
--- a/rsvg_internals/src/filters/blend.rs
+++ b/rsvg_internals/src/filters/blend.rs
@@ -10,8 +10,7 @@ use crate::parsers::{Parse, ParseValue};
 use crate::property_bag::PropertyBag;
 
 use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::input::Input;
-use super::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, Input, PrimitiveWithInput};
 
 /// Enumeration of the possible blending modes.
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
diff --git a/rsvg_internals/src/filters/composite.rs b/rsvg_internals/src/filters/composite.rs
index 2aad6232..aa1ae921 100644
--- a/rsvg_internals/src/filters/composite.rs
+++ b/rsvg_internals/src/filters/composite.rs
@@ -10,8 +10,7 @@ use crate::parsers::{Parse, ParseValue};
 use crate::property_bag::PropertyBag;
 
 use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::input::Input;
-use super::{FilterEffect, FilterError, PrimitiveWithInput};
+use super::{FilterEffect, FilterError, Input, PrimitiveWithInput};
 
 /// Enumeration of the possible compositing operations.
 #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
diff --git a/rsvg_internals/src/filters/context.rs b/rsvg_internals/src/filters/context.rs
index d1cb737e..a14033d4 100644
--- a/rsvg_internals/src/filters/context.rs
+++ b/rsvg_internals/src/filters/context.rs
@@ -9,6 +9,7 @@ use crate::drawing_ctx::{DrawingCtx, ViewParams};
 use crate::filter::Filter;
 use crate::node::{Node, NodeBorrow};
 use crate::paint_server::PaintServer;
+use crate::parsers::CustomIdent;
 use crate::properties::ComputedValues;
 use crate::rect::IRect;
 use crate::surface_utils::shared_surface::{
@@ -18,7 +19,7 @@ use crate::transform::Transform;
 use crate::unit_interval::UnitInterval;
 
 use super::error::FilterError;
-use super::input::{CustomIdent, Input};
+use super::Input;
 
 /// A filter primitive output.
 #[derive(Debug, Clone)]
diff --git a/rsvg_internals/src/filters/input.rs b/rsvg_internals/src/filters/input.rs
index 55bb69bf..e69de29b 100644
--- a/rsvg_internals/src/filters/input.rs
+++ b/rsvg_internals/src/filters/input.rs
@@ -1,86 +0,0 @@
-use cssparser::{BasicParseError, Parser, Token};
-
-use crate::error::*;
-use crate::parsers::Parse;
-
-/// An enumeration of possible inputs for a filter primitive.
-#[derive(Debug, Clone, Eq, PartialEq, Hash)]
-pub enum Input {
-    SourceGraphic,
-    SourceAlpha,
-    BackgroundImage,
-    BackgroundAlpha,
-    FillPaint,
-    StrokePaint,
-    FilterOutput(CustomIdent),
-}
-
-/// https://www.w3.org/TR/css-values-4/#custom-idents
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct CustomIdent(String);
-
-impl Parse for Input {
-    fn parse<'i>(parser: &mut Parser<'i, '_>) -> Result<Self, ParseError<'i>> {
-        parser
-            .try_parse(|p| {
-                Ok(parse_identifiers!(
-                    p,
-                    "SourceGraphic" => Input::SourceGraphic,
-                    "SourceAlpha" => Input::SourceAlpha,
-                    "BackgroundImage" => Input::BackgroundImage,
-                    "BackgroundAlpha" => Input::BackgroundAlpha,
-                    "FillPaint" => Input::FillPaint,
-                    "StrokePaint" => Input::StrokePaint,
-                )?)
-            })
-            .or_else(|_: BasicParseError| {
-                let ident = CustomIdent::parse(parser)?;
-                Ok(Input::FilterOutput(ident))
-            })
-    }
-}
-
-impl Parse for CustomIdent {
-    fn parse<'i>(parser: &mut Parser<'i, '_>) -> Result<Self, ParseError<'i>> {
-        let loc = parser.current_source_location();
-        let token = parser.next()?;
-
-        match token {
-            // CSS-wide keywords and "default" are errors here
-            // https://www.w3.org/TR/css-values-4/#css-wide-keywords
-            Token::Ident(ref cow) => {
-                for s in &["initial", "inherit", "unset", "default"] {
-                    if cow.eq_ignore_ascii_case(s) {
-                        Err(loc.new_basic_unexpected_token_error(token.clone()))?
-                    }
-                }
-
-                Ok(CustomIdent(cow.as_ref().to_string()))
-            }
-
-            _ => Err(loc.new_basic_unexpected_token_error(token.clone()))?,
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    #[test]
-    fn parses_custom_ident() {
-        assert_eq!(
-            CustomIdent::parse_str("hello"),
-            Ok(CustomIdent("hello".to_string()))
-        );
-    }
-
-    #[test]
-    fn invalid_custom_ident_yields_error() {
-        assert!(CustomIdent::parse_str("initial").is_err());
-        assert!(CustomIdent::parse_str("inherit").is_err());
-        assert!(CustomIdent::parse_str("unset").is_err());
-        assert!(CustomIdent::parse_str("default").is_err());
-        assert!(CustomIdent::parse_str("").is_err());
-    }
-}
diff --git a/rsvg_internals/src/filters/merge.rs b/rsvg_internals/src/filters/merge.rs
index d7124f48..b255c854 100644
--- a/rsvg_internals/src/filters/merge.rs
+++ b/rsvg_internals/src/filters/merge.rs
@@ -10,8 +10,7 @@ use crate::rect::IRect;
 use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
 
 use super::context::{FilterContext, FilterOutput, FilterResult};
-use super::input::Input;
-use super::{FilterEffect, FilterError, Primitive};
+use super::{FilterEffect, FilterError, Input, Primitive};
 
 /// The `feMerge` filter primitive.
 pub struct FeMerge {
diff --git a/rsvg_internals/src/filters/mod.rs b/rsvg_internals/src/filters/mod.rs
index c161df56..7ad2da82 100644
--- a/rsvg_internals/src/filters/mod.rs
+++ b/rsvg_internals/src/filters/mod.rs
@@ -1,20 +1,20 @@
 //! Entry point for the CSS filters infrastructure.
 
+use cssparser::{BasicParseError, Parser};
+use markup5ever::{expanded_name, local_name, namespace_url, ns};
 use std::ops::Deref;
 use std::time::Instant;
 
-use markup5ever::{expanded_name, local_name, namespace_url, ns};
-
 use crate::bbox::BoundingBox;
 use crate::coord_units::CoordUnits;
 use crate::document::AcquiredNodes;
 use crate::drawing_ctx::DrawingCtx;
 use crate::element::{ElementResult, ElementTrait, ElementType};
-use crate::error::RenderingError;
+use crate::error::{ParseError, RenderingError};
 use crate::filter::Filter;
 use crate::length::*;
 use crate::node::{CascadedValues, Node, NodeBorrow};
-use crate::parsers::ParseValue;
+use crate::parsers::{CustomIdent, Parse, ParseValue};
 use crate::properties::ComputedValues;
 use crate::property_bag::PropertyBag;
 use crate::property_defs::ColorInterpolationFilters;
@@ -29,9 +29,6 @@ use self::context::{FilterContext, FilterInput, FilterResult};
 mod error;
 use self::error::FilterError;
 
-mod input;
-use self::input::{CustomIdent, Input};
-
 /// A filter primitive interface.
 pub trait FilterEffect: ElementTrait {
     /// Renders this filter primitive.
@@ -87,6 +84,39 @@ struct Primitive {
     result: Option<CustomIdent>,
 }
 
+/// An enumeration of possible inputs for a filter primitive.
+#[derive(Debug, Clone, Eq, PartialEq, Hash)]
+pub enum Input {
+    SourceGraphic,
+    SourceAlpha,
+    BackgroundImage,
+    BackgroundAlpha,
+    FillPaint,
+    StrokePaint,
+    FilterOutput(CustomIdent),
+}
+
+impl Parse for Input {
+    fn parse<'i>(parser: &mut Parser<'i, '_>) -> Result<Self, ParseError<'i>> {
+        parser
+            .try_parse(|p| {
+                Ok(parse_identifiers!(
+                    p,
+                    "SourceGraphic" => Input::SourceGraphic,
+                    "SourceAlpha" => Input::SourceAlpha,
+                    "BackgroundImage" => Input::BackgroundImage,
+                    "BackgroundAlpha" => Input::BackgroundAlpha,
+                    "FillPaint" => Input::FillPaint,
+                    "StrokePaint" => Input::StrokePaint,
+                )?)
+            })
+            .or_else(|_: BasicParseError| {
+                let ident = CustomIdent::parse(parser)?;
+                Ok(Input::FilterOutput(ident))
+            })
+    }
+}
+
 /// The base node for filter primitives which accept input.
 struct PrimitiveWithInput {
     base: Primitive,
diff --git a/rsvg_internals/src/parsers.rs b/rsvg_internals/src/parsers.rs
index b64b6d89..db0b1107 100644
--- a/rsvg_internals/src/parsers.rs
+++ b/rsvg_internals/src/parsers.rs
@@ -1,8 +1,7 @@
 //! The `Parse` trait for CSS properties, and utilities for parsers.
 
-use cssparser::{Parser, ParserInput};
+use cssparser::{Parser, ParserInput, Token};
 use markup5ever::QualName;
-
 use std::str;
 
 use crate::error::*;
@@ -147,6 +146,33 @@ macro_rules! parse_identifiers {
     };
 }
 
+/// https://www.w3.org/TR/css-values-4/#custom-idents
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub struct CustomIdent(String);
+
+impl Parse for CustomIdent {
+    fn parse<'i>(parser: &mut Parser<'i, '_>) -> Result<Self, ParseError<'i>> {
+        let loc = parser.current_source_location();
+        let token = parser.next()?;
+
+        match token {
+            // CSS-wide keywords and "default" are errors here
+            // https://www.w3.org/TR/css-values-4/#css-wide-keywords
+            Token::Ident(ref cow) => {
+                for s in &["initial", "inherit", "unset", "default"] {
+                    if cow.eq_ignore_ascii_case(s) {
+                        Err(loc.new_basic_unexpected_token_error(token.clone()))?
+                    }
+                }
+
+                Ok(CustomIdent(cow.as_ref().to_string()))
+            }
+
+            _ => Err(loc.new_basic_unexpected_token_error(token.clone()))?,
+        }
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;
@@ -246,4 +272,21 @@ mod tests {
         assert!(NumberOptionalNumber::<i32>::parse_str("1 2.5").is_err());
         assert!(NumberOptionalNumber::<i32>::parse_str("1, 2.5").is_err());
     }
+
+    #[test]
+    fn parses_custom_ident() {
+        assert_eq!(
+            CustomIdent::parse_str("hello"),
+            Ok(CustomIdent("hello".to_string()))
+        );
+    }
+
+    #[test]
+    fn invalid_custom_ident_yields_error() {
+        assert!(CustomIdent::parse_str("initial").is_err());
+        assert!(CustomIdent::parse_str("inherit").is_err());
+        assert!(CustomIdent::parse_str("unset").is_err());
+        assert!(CustomIdent::parse_str("default").is_err());
+        assert!(CustomIdent::parse_str("").is_err());
+    }
 }


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