Skip to main content

oxc_css_parser/parser/at_rule/
font_feature_values.rs

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