[librsvg] parse_transform.lalrpop: Parse the "translate" transform



commit c82d223bb5d6016284b806e7611e872157b9c15a
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Mar 22 08:02:21 2017 -0600

    parse_transform.lalrpop: Parse the "translate" transform

 rust/src/parse_transform.lalrpop |    5 +++++
 rust/src/parsers.rs              |   12 ++++++++++++
 2 files changed, 17 insertions(+), 0 deletions(-)
---
diff --git a/rust/src/parse_transform.lalrpop b/rust/src/parse_transform.lalrpop
index 50b61da..4f09f79 100644
--- a/rust/src/parse_transform.lalrpop
+++ b/rust/src/parse_transform.lalrpop
@@ -19,6 +19,11 @@ pub Transform: cairo::Matrix = {
 pub Matrix: cairo::Matrix = "matrix" "(" <Num> comma? <Num> comma? <Num> comma? <Num> comma? <Num> comma? 
<Num> ")" =>
     cairo::Matrix::new (<>);
 
+pub Translate: cairo::Matrix = {
+    "translate" "(" <Num> ")" => cairo::Matrix::new (1.0, 0.0, 0.0, 1.0, <>, 0.0),
+    "translate" "(" <Num> comma? <Num> ")" => cairo::Matrix::new (1.0, 0.0, 0.0, 1.0, <>)
+};
+
 pub Num: f64 = <s:r"[+-]?([0-9]*\.[0-9]+|[0-9]+(\.[0-9]*)?)([Ee][+-]?[0-9]+)?"> =>
     f64::from_str (s).unwrap ();
 
diff --git a/rust/src/parsers.rs b/rust/src/parsers.rs
index ae70d7a..0a131d6 100644
--- a/rust/src/parsers.rs
+++ b/rust/src/parsers.rs
@@ -304,4 +304,16 @@ mod parse_transform_tests {
         assert_eq! (parse_Matrix ("matrix (1,2.25,-3.25e2,4 5 6)").unwrap (),
                     cairo::Matrix::new (1.0, 2.25, -325.0, 4.0, 5.0, 6.0));
     }
+
+    #[test]
+    fn parses_translate () {
+        assert_eq! (parse_Translate ("translate(-1 -2)").unwrap (),
+                    cairo::Matrix::new (1.0, 0.0, 0.0, 1.0, -1.0, -2.0));
+
+        assert_eq! (parse_Translate ("translate(-1, -2)").unwrap (),
+                    cairo::Matrix::new (1.0, 0.0, 0.0, 1.0, -1.0, -2.0));
+
+        assert_eq! (parse_Translate ("translate(-1)").unwrap (),
+                    cairo::Matrix::new (1.0, 0.0, 0.0, 1.0, -1.0, 0.0));
+    }
 }


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