Skip to main content

oxc_css_parser/parser/at_rule/
font_feature_values.rs

1use super::Parser;
2use crate::{Parse, Spanned, arena_vec, ast::*, error::PResult, peek, tokenizer::Token};
3
4// https://drafts.csswg.org/css-fonts/Overview.bs
5impl<'a> Parse<'a> for FontFamilyName<'a> {
6    fn parse(input: &mut Parser<'a>) -> PResult<Self> {
7        match &peek!(input).token {
8            Token::Str(..) | Token::StrTemplate(..) => input.parse().map(FontFamilyName::Str),
9            _ => {
10                let first = input.parse::<InterpolableIdent>()?;
11                let mut span = first.span().clone();
12
13                let mut idents = arena_vec!(input; first);
14                while let Token::Ident(..) | Token::HashLBrace(..) | Token::AtLBraceVar(..) =
15                    &peek!(input).token
16                {
17                    idents.push(input.parse()?);
18                }
19                if let Some(last) = idents.last() {
20                    span.end = last.span().end;
21                }
22                Ok(FontFamilyName::Unquoted(UnquotedFontFamilyName { idents, span }))
23            }
24        }
25    }
26}