Skip to main content

oxc_css_parser/parser/at_rule/
font_feature_values.rs

1use super::Parser;
2use crate::{Parse, Spanned, ast::*, error::PResult, peek, tokenizer::Token};
3
4// https://drafts.csswg.org/css-fonts/Overview.bs
5impl<'cmt, 's: 'cmt> Parse<'cmt, 's> for FontFamilyName<'s> {
6    fn parse(input: &mut Parser<'cmt, 's>) -> 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 = vec![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 {
23                    idents,
24                    span,
25                }))
26            }
27        }
28    }
29}