[librsvg/rustification] RsvgLength: make ::parse() a constructor, not a standalone parse_length() function
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/rustification] RsvgLength: make ::parse() a constructor, not a standalone parse_length() function
- Date: Wed, 16 Nov 2016 17:17:45 +0000 (UTC)
commit 822459f29b74e4e154d721c80f6e16fe6f05e0f2
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Nov 15 18:38:10 2016 -0600
RsvgLength: make ::parse() a constructor, not a standalone parse_length() function
rust/src/length.rs | 168 ++++++++++++++++++++++++++--------------------------
1 files changed, 85 insertions(+), 83 deletions(-)
---
diff --git a/rust/src/length.rs b/rust/src/length.rs
index adf291a..eeffb12 100644
--- a/rust/src/length.rs
+++ b/rust/src/length.rs
@@ -68,7 +68,7 @@ fn compute_named_size (name: &str) -> f64 {
pub extern fn rsvg_length_parse (string: *const libc::c_char, dir: LengthDir) -> RsvgLength {
let my_string = unsafe { &String::from_glib_none (string) };
- parse_length (my_string, dir)
+ RsvgLength::parse (my_string, dir)
}
/* https://www.w3.org/TR/SVG/types.html#DataTypeLength
@@ -82,77 +82,79 @@ pub extern fn rsvg_length_parse (string: *const libc::c_char, dir: LengthDir) ->
* when _rsvg_css_normalize_length() needs to know to what the
* length refers.
*/
-pub fn parse_length (string: &str, dir: LengthDir) -> RsvgLength {
- let unit: LengthUnit;
-
- let (mut value, rest) = strtod (string);
-
- match rest.as_ref () {
- "%" => {
- value *= 0.01; // normalize to [0, 1]
- unit = LengthUnit::Percent;
- },
-
- "em" => {
- unit = LengthUnit::FontEm;
- },
-
- "ex" => {
- unit = LengthUnit::FontEx;
- },
-
- "pt" => {
- value /= POINTS_PER_INCH;
- unit = LengthUnit::Inch;
- },
-
- "in" => {
- unit = LengthUnit::Inch;
- },
-
- "cm" => {
- value /= CM_PER_INCH;
- unit = LengthUnit::Inch;
- },
-
- "mm" => {
- value /= MM_PER_INCH;
- unit = LengthUnit::Inch;
- },
-
- "pc" => {
- value /= PICA_PER_INCH;
- unit = LengthUnit::Inch;
- },
-
- "larger" => {
- unit = LengthUnit::RelativeLarger;
- },
-
- "smaller" => {
- unit = LengthUnit::RelativeSmaller;
- },
-
- "xx-small" |
- "x-small" |
- "small" |
- "medium" |
- "large" |
- "x-large" |
- "xx-large" => {
- value = compute_named_size (rest);
- unit = LengthUnit::Inch;
- },
-
- _ => {
- unit = LengthUnit::Default;
+impl RsvgLength {
+ pub fn parse (string: &str, dir: LengthDir) -> RsvgLength {
+ let unit: LengthUnit;
+
+ let (mut value, rest) = strtod (string);
+
+ match rest.as_ref () {
+ "%" => {
+ value *= 0.01; // normalize to [0, 1]
+ unit = LengthUnit::Percent;
+ },
+
+ "em" => {
+ unit = LengthUnit::FontEm;
+ },
+
+ "ex" => {
+ unit = LengthUnit::FontEx;
+ },
+
+ "pt" => {
+ value /= POINTS_PER_INCH;
+ unit = LengthUnit::Inch;
+ },
+
+ "in" => {
+ unit = LengthUnit::Inch;
+ },
+
+ "cm" => {
+ value /= CM_PER_INCH;
+ unit = LengthUnit::Inch;
+ },
+
+ "mm" => {
+ value /= MM_PER_INCH;
+ unit = LengthUnit::Inch;
+ },
+
+ "pc" => {
+ value /= PICA_PER_INCH;
+ unit = LengthUnit::Inch;
+ },
+
+ "larger" => {
+ unit = LengthUnit::RelativeLarger;
+ },
+
+ "smaller" => {
+ unit = LengthUnit::RelativeSmaller;
+ },
+
+ "xx-small" |
+ "x-small" |
+ "small" |
+ "medium" |
+ "large" |
+ "x-large" |
+ "xx-large" => {
+ value = compute_named_size (rest);
+ unit = LengthUnit::Inch;
+ },
+
+ _ => {
+ unit = LengthUnit::Default;
+ }
}
- }
- RsvgLength {
- length: value,
- unit: unit,
- dir: dir
+ RsvgLength {
+ length: value,
+ unit: unit,
+ dir: dir
+ }
}
}
@@ -175,13 +177,13 @@ mod tests {
#[test]
fn parses_default () {
- assert_eq! (parse_length ("42", LengthDir::Horizontal),
+ assert_eq! (RsvgLength::parse ("42", LengthDir::Horizontal),
RsvgLength {
length: 42.0,
unit: LengthUnit::Default,
dir: LengthDir::Horizontal});
- assert_eq! (parse_length ("-42px", LengthDir::Horizontal),
+ assert_eq! (RsvgLength::parse ("-42px", LengthDir::Horizontal),
RsvgLength {
length: -42.0,
unit: LengthUnit::Default,
@@ -190,7 +192,7 @@ mod tests {
#[test]
fn parses_percent () {
- assert_eq! (parse_length ("50.0%", LengthDir::Horizontal),
+ assert_eq! (RsvgLength::parse ("50.0%", LengthDir::Horizontal),
RsvgLength {
length: 0.5,
unit: LengthUnit::Percent,
@@ -199,7 +201,7 @@ mod tests {
#[test]
fn parses_font_em () {
- assert_eq! (parse_length ("22.5em", LengthDir::Vertical),
+ assert_eq! (RsvgLength::parse ("22.5em", LengthDir::Vertical),
RsvgLength {
length: 22.5,
unit: LengthUnit::FontEm,
@@ -208,7 +210,7 @@ mod tests {
#[test]
fn parses_font_ex () {
- assert_eq! (parse_length ("22.5ex", LengthDir::Vertical),
+ assert_eq! (RsvgLength::parse ("22.5ex", LengthDir::Vertical),
RsvgLength {
length: 22.5,
unit: LengthUnit::FontEx,
@@ -217,31 +219,31 @@ mod tests {
#[test]
fn parses_physical_units () {
- assert_eq! (parse_length ("72pt", LengthDir::Both),
+ assert_eq! (RsvgLength::parse ("72pt", LengthDir::Both),
RsvgLength {
length: 1.0,
unit: LengthUnit::Inch,
dir: LengthDir::Both });
- assert_eq! (parse_length ("-22.5in", LengthDir::Both),
+ assert_eq! (RsvgLength::parse ("-22.5in", LengthDir::Both),
RsvgLength {
length: -22.5,
unit: LengthUnit::Inch,
dir: LengthDir::Both });
- assert_eq! (parse_length ("-25.4cm", LengthDir::Both),
+ assert_eq! (RsvgLength::parse ("-25.4cm", LengthDir::Both),
RsvgLength {
length: -10.0,
unit: LengthUnit::Inch,
dir: LengthDir::Both });
- assert_eq! (parse_length ("254mm", LengthDir::Both),
+ assert_eq! (RsvgLength::parse ("254mm", LengthDir::Both),
RsvgLength {
length: 10.0,
unit: LengthUnit::Inch,
dir: LengthDir::Both });
- assert_eq! (parse_length ("60pc", LengthDir::Both),
+ assert_eq! (RsvgLength::parse ("60pc", LengthDir::Both),
RsvgLength {
length: 10.0,
unit: LengthUnit::Inch,
@@ -250,7 +252,7 @@ mod tests {
#[test]
fn parses_relative_larger () {
- assert_eq! (parse_length ("larger", LengthDir::Vertical),
+ assert_eq! (RsvgLength::parse ("larger", LengthDir::Vertical),
RsvgLength {
length: 0.0,
unit: LengthUnit::RelativeLarger,
@@ -259,7 +261,7 @@ mod tests {
#[test]
fn parses_relative_smaller () {
- assert_eq! (parse_length ("smaller", LengthDir::Vertical),
+ assert_eq! (RsvgLength::parse ("smaller", LengthDir::Vertical),
RsvgLength {
length: 0.0,
unit: LengthUnit::RelativeSmaller,
@@ -282,7 +284,7 @@ mod tests {
// enforce a particular sequence.
for name in names {
- let length = parse_length (name, LengthDir::Both);
+ let length = RsvgLength::parse (name, LengthDir::Both);
assert_eq! (length.unit, LengthUnit::Inch);
assert_eq! (length.dir, LengthDir::Both);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]