use crate::style::ToCss;
use crate::style::{CssSyntaxKind, CssToken, FromCss, MakeComputed, ParseResult};
use cssparser::Parser;
use parley::FontVariation;
use std::fmt;
use super::font_feature_settings::parse_opentype_tag;
pub type FontVariationSettings = Box<[FontVariation]>;
impl MakeComputed for FontVariationSettings {}
impl<'i> FromCss<'i> for FontVariationSettings {
fn from_css(input: &mut Parser<'i, '_>) -> ParseResult<'i, Self> {
if input
.try_parse(|input| input.expect_ident_matching("normal"))
.is_ok()
{
return Ok(Box::new([]));
}
let list = input.parse_comma_separated(|input| {
let tag = parse_opentype_tag::<FontVariationSettings>(input)?;
let value = input.expect_number()?;
Ok(FontVariation { tag, value })
})?;
Ok(list.into_boxed_slice())
}
const VALID_TOKENS: &'static [CssToken] = &[
CssToken::Keyword("normal"),
CssToken::Syntax(CssSyntaxKind::String),
];
}
impl ToCss for parley::FontVariation {
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result {
write!(dest, "\"{}\" {}", self.tag, self.value)
}
}