pub(crate) struct FontFeatureValuesAtRuleParser<'a>
{
pub(crate) context: &'a ParserContext,
pub(crate) rule: &'a mut FontFeatureValuesAtRule,
}
impl<'a, 'i> QualifiedRuleParser<'i> for FontFeatureValuesAtRuleParser<'a>
{
type Prelude = ();
type QualifiedRule = ();
type Error = CustomParseError<'i>;
}
impl<'a, 'i> AtRuleParser<'i> for FontFeatureValuesAtRuleParser<'a>
{
type PreludeNoBlock = ();
type PreludeBlock = FontFeatureValuesBlockType;
type AtRule = ();
type Error = CustomParseError<'i>;
fn parse_prelude<'t>(&mut self, name: CowRcStr<'i>, _input: &mut Parser<'i, 't>) -> Result<AtRuleType<Self::PreludeNoBlock, Self::PreludeBlock>, ParseError<'i, Self::Error>>
{
use self::AtRuleType::WithBlock;
use self::FontFeatureValuesBlockType::*;
match_ignore_ascii_case!
{
&*name,
"swash" => Ok(WithBlock(swash)),
"stylistic" => Ok(WithBlock(stylistic)),
"ornaments" => Ok(WithBlock(ornaments)),
"annotation" => Ok(WithBlock(annotation)),
"character-variant" => Ok(WithBlock(character_variant)),
"styleset" => Ok(WithBlock(styleset)),
_ => Err(BasicParseError::AtRuleBodyInvalid.into()),
}
}
fn parse_block<'t>(&mut self, prelude: Self::PreludeBlock, input: &mut Parser<'i, 't>) -> Result<Self::AtRule, ParseError<'i, CustomParseError<'i>>>
{
use self::FontFeatureValuesBlockType::*;
match prelude
{
swash => Self::parseBlock(self.context, input, &mut self.rule.swash),
stylistic => Self::parseBlock(self.context, input, &mut self.rule.stylistic),
ornaments => Self::parseBlock(self.context, input, &mut self.rule.ornaments),
annotation => Self::parseBlock(self.context, input, &mut self.rule.annotation),
character_variant => Self::parseBlock(self.context, input, &mut self.rule.character_variant),
styleset => Self::parseBlock(self.context, input, &mut self.rule.styleset),
}
}
}
impl<'a> FontFeatureValuesAtRuleParser<'a>
{
#[inline(always)]
fn parseBlock<'i, 't, T: 'a + ToCss + Parse>(context: &ParserContext, input: &mut Parser<'i, 't>, declarations: &'a mut Vec<FontFeatureValuesDeclaration<T>>) -> Result<(), ParseError<'i, CustomParseError<'i>>>
{
FontFeatureValuesDeclarationsParser::parseBlock(input, context, declarations)
}
}