mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
style: Improve #[derive(Parse)].
I want to do this so that I can get rid of Either<>. The reasons for getting rid of either are multiple: * It doesn't generate as nice C++ code using cbindgen. * It isn't that nice to use either from Rust. * cbindgen has bugs with zero-sized types. I started using this for ColorOrAuto and a few others, for now. Differential Revision: https://phabricator.services.mozilla.com/D19844
This commit is contained in:
parent
6118e4d993
commit
73d5b82f9f
24 changed files with 238 additions and 362 deletions
|
@ -17,7 +17,7 @@ use crate::values::generics::font::{KeywordSize, VariationValue};
|
|||
use crate::values::generics::NonNegative;
|
||||
use crate::values::specified::length::{FontBaseSize, AU_PER_PT, AU_PER_PX};
|
||||
use crate::values::specified::{AllowQuirks, Angle, Integer, LengthPercentage};
|
||||
use crate::values::specified::{NoCalcLength, Number, Percentage};
|
||||
use crate::values::specified::{NoCalcLength, Number, NonNegativeNumber, Percentage};
|
||||
use crate::values::CustomIdent;
|
||||
use crate::Atom;
|
||||
use app_units::Au;
|
||||
|
@ -81,7 +81,7 @@ pub const MAX_FONT_WEIGHT: f32 = 1000.;
|
|||
/// A specified font-weight value.
|
||||
///
|
||||
/// https://drafts.csswg.org/css-fonts-4/#propdef-font-weight
|
||||
#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss)]
|
||||
#[derive(Clone, Copy, Debug, MallocSizeOf, Parse, PartialEq, SpecifiedValueInfo, ToCss)]
|
||||
pub enum FontWeight {
|
||||
/// `<font-weight-absolute>`
|
||||
Absolute(AbsoluteFontWeight),
|
||||
|
@ -111,22 +111,6 @@ impl FontWeight {
|
|||
}
|
||||
}
|
||||
|
||||
impl Parse for FontWeight {
|
||||
fn parse<'i, 't>(
|
||||
context: &ParserContext,
|
||||
input: &mut Parser<'i, 't>,
|
||||
) -> Result<FontWeight, ParseError<'i>> {
|
||||
if let Ok(absolute) = input.try(|input| AbsoluteFontWeight::parse(context, input)) {
|
||||
return Ok(FontWeight::Absolute(absolute));
|
||||
}
|
||||
|
||||
Ok(try_match_ident_ignore_ascii_case! { input,
|
||||
"bolder" => FontWeight::Bolder,
|
||||
"lighter" => FontWeight::Lighter,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl ToComputedValue for FontWeight {
|
||||
type ComputedValue = computed::FontWeight;
|
||||
|
||||
|
@ -335,7 +319,7 @@ impl SpecifiedFontStyle {
|
|||
}
|
||||
|
||||
/// The specified value of the `font-style` property.
|
||||
#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss)]
|
||||
#[derive(Clone, Copy, Debug, MallocSizeOf, Parse, PartialEq, SpecifiedValueInfo, ToCss)]
|
||||
#[allow(missing_docs)]
|
||||
pub enum FontStyle {
|
||||
Specified(SpecifiedFontStyle),
|
||||
|
@ -368,20 +352,11 @@ impl ToComputedValue for FontStyle {
|
|||
}
|
||||
}
|
||||
|
||||
impl Parse for FontStyle {
|
||||
fn parse<'i, 't>(
|
||||
context: &ParserContext,
|
||||
input: &mut Parser<'i, 't>,
|
||||
) -> Result<Self, ParseError<'i>> {
|
||||
Ok(FontStyle::Specified(SpecifiedFontStyle::parse(
|
||||
context, input,
|
||||
)?))
|
||||
}
|
||||
}
|
||||
|
||||
/// A value for the `font-stretch` property.
|
||||
///
|
||||
/// https://drafts.csswg.org/css-fonts-4/#font-stretch-prop
|
||||
///
|
||||
/// TODO(emilio): We could derive Parse if we had NonNegativePercentage.
|
||||
#[allow(missing_docs)]
|
||||
#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss)]
|
||||
#[repr(u8)]
|
||||
|
@ -628,13 +603,13 @@ impl Parse for FamilyName {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, SpecifiedValueInfo, ToCss)]
|
||||
#[derive(Clone, Copy, Debug, MallocSizeOf, Parse, PartialEq, SpecifiedValueInfo, ToCss)]
|
||||
/// Preserve the readability of text when font fallback occurs
|
||||
pub enum FontSizeAdjust {
|
||||
/// None variant
|
||||
None,
|
||||
/// Number variant
|
||||
Number(Number),
|
||||
Number(NonNegativeNumber),
|
||||
/// system font
|
||||
#[css(skip)]
|
||||
System(SystemFont),
|
||||
|
@ -657,7 +632,9 @@ impl ToComputedValue for FontSizeAdjust {
|
|||
match *self {
|
||||
FontSizeAdjust::None => computed::FontSizeAdjust::None,
|
||||
FontSizeAdjust::Number(ref n) => {
|
||||
computed::FontSizeAdjust::Number(n.to_computed_value(context))
|
||||
// The computed version handles clamping of animated values
|
||||
// itself.
|
||||
computed::FontSizeAdjust::Number(n.to_computed_value(context).0)
|
||||
},
|
||||
FontSizeAdjust::System(_) => self.compute_system(context),
|
||||
}
|
||||
|
@ -666,32 +643,13 @@ impl ToComputedValue for FontSizeAdjust {
|
|||
fn from_computed_value(computed: &computed::FontSizeAdjust) -> Self {
|
||||
match *computed {
|
||||
computed::FontSizeAdjust::None => FontSizeAdjust::None,
|
||||
computed::FontSizeAdjust::Number(ref v) => {
|
||||
FontSizeAdjust::Number(Number::from_computed_value(v))
|
||||
computed::FontSizeAdjust::Number(v) => {
|
||||
FontSizeAdjust::Number(NonNegativeNumber::from_computed_value(&v.into()))
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Parse for FontSizeAdjust {
|
||||
/// none | <number>
|
||||
fn parse<'i, 't>(
|
||||
context: &ParserContext,
|
||||
input: &mut Parser<'i, 't>,
|
||||
) -> Result<FontSizeAdjust, ParseError<'i>> {
|
||||
if input
|
||||
.try(|input| input.expect_ident_matching("none"))
|
||||
.is_ok()
|
||||
{
|
||||
return Ok(FontSizeAdjust::None);
|
||||
}
|
||||
|
||||
Ok(FontSizeAdjust::Number(Number::parse_non_negative(
|
||||
context, input,
|
||||
)?))
|
||||
}
|
||||
}
|
||||
|
||||
/// Additional information for specified keyword-derived font sizes.
|
||||
pub type KeywordInfo = generics::KeywordInfo<NonNegativeLength>;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue