|
5 | 5 | use std::ascii::AsciiExt; |
6 | 6 | use std::fmt::{self, Write}; |
7 | 7 |
|
8 | | -use super::{Token, NumericValue, PercentageValue}; |
| 8 | +use super::{Token, PercentageValue}; |
9 | 9 |
|
10 | 10 |
|
11 | 11 | /// Trait for things the can serialize themselves in CSS syntax. |
@@ -43,20 +43,21 @@ pub trait ToCss { |
43 | 43 |
|
44 | 44 |
|
45 | 45 | #[inline] |
46 | | -fn write_numeric<W>(value: NumericValue, dest: &mut W) -> fmt::Result where W: fmt::Write { |
| 46 | +fn write_numeric<W>(value: f32, int_value: Option<i32>, has_sign: bool, dest: &mut W) |
| 47 | + -> fmt::Result where W: fmt::Write { |
47 | 48 | // `value.value >= 0` is true for negative 0. |
48 | | - if value.has_sign && value.value.is_sign_positive() { |
| 49 | + if has_sign && value.is_sign_positive() { |
49 | 50 | try!(dest.write_str("+")); |
50 | 51 | } |
51 | 52 |
|
52 | | - if value.value == 0.0 && value.value.is_sign_negative() { |
| 53 | + if value == 0.0 && value.is_sign_negative() { |
53 | 54 | // Negative zero. Work around #20596. |
54 | 55 | try!(dest.write_str("-0")) |
55 | 56 | } else { |
56 | | - try!(write!(dest, "{}", value.value)) |
| 57 | + try!(write!(dest, "{}", value)) |
57 | 58 | } |
58 | 59 |
|
59 | | - if value.int_value.is_none() && value.value.fract() == 0. { |
| 60 | + if int_value.is_none() && value.fract() == 0. { |
60 | 61 | try!(dest.write_str(".0")); |
61 | 62 | } |
62 | 63 | Ok(()) |
@@ -87,22 +88,15 @@ impl<'a> ToCss for Token<'a> { |
87 | 88 | }, |
88 | 89 | Token::Delim(value) => try!(write!(dest, "{}", value)), |
89 | 90 |
|
90 | | - Token::Number(value) => try!(write_numeric(value, dest)), |
| 91 | + Token::Number { value, int_value, has_sign } => { |
| 92 | + try!(write_numeric(value, int_value, has_sign, dest)) |
| 93 | + } |
91 | 94 | Token::Percentage(PercentageValue { unit_value, int_value, has_sign }) => { |
92 | | - let value = NumericValue { |
93 | | - value: unit_value * 100., |
94 | | - int_value: int_value, |
95 | | - has_sign: has_sign, |
96 | | - }; |
97 | | - try!(write_numeric(value, dest)); |
| 95 | + try!(write_numeric(unit_value * 100., int_value, has_sign, dest)); |
98 | 96 | try!(dest.write_str("%")); |
99 | 97 | }, |
100 | 98 | Token::Dimension { value, int_value, has_sign, ref unit } => { |
101 | | - try!(write_numeric(NumericValue { |
102 | | - value: value, |
103 | | - int_value: int_value, |
104 | | - has_sign: has_sign, |
105 | | - }, dest)); |
| 99 | + try!(write_numeric(value, int_value, has_sign, dest)); |
106 | 100 | // Disambiguate with scientific notation. |
107 | 101 | let unit = &**unit; |
108 | 102 | if unit == "e" || unit == "E" || unit.starts_with("e-") || unit.starts_with("E-") { |
@@ -393,7 +387,7 @@ impl<'a> Token<'a> { |
393 | 387 | Token::Delim('|') => DelimBar, |
394 | 388 | Token::Delim('/') => DelimSlash, |
395 | 389 | Token::Delim('*') => DelimAsterisk, |
396 | | - Token::Number(_) => Number, |
| 390 | + Token::Number { .. } => Number, |
397 | 391 | Token::Percentage(_) => Percentage, |
398 | 392 | Token::Dimension { .. } => Dimension, |
399 | 393 | Token::WhiteSpace(_) => WhiteSpace, |
|
0 commit comments