Skip to main content

oxc_css_parser/parser/at_rule/
custom_media.rs

1use super::Parser;
2use crate::{
3    Parse,
4    ast::*,
5    error::PResult,
6    peek,
7    pos::{Span, Spanned},
8    tokenizer::Token,
9};
10
11// https://www.w3.org/TR/mediaqueries-5/#custom-mq
12impl<'a> Parse<'a> for CustomMedia<'a> {
13    fn parse(input: &mut Parser<'a>) -> PResult<Self> {
14        let name = input.parse_dashed_ident()?;
15        let value = input.parse::<CustomMediaValue>()?;
16        let span = Span { start: name.span().start, end: value.span().end };
17        Ok(CustomMedia { name, value, span })
18    }
19}
20
21impl<'a> Parse<'a> for CustomMediaValue<'a> {
22    fn parse(input: &mut Parser<'a>) -> PResult<Self> {
23        match &peek!(input).token {
24            Token::Ident(ident) => {
25                let name = ident.name();
26                if name.eq_ignore_ascii_case("true") {
27                    input.parse().map(CustomMediaValue::True)
28                } else if name.eq_ignore_ascii_case("false") {
29                    input.parse().map(CustomMediaValue::False)
30                } else {
31                    input.parse().map(CustomMediaValue::MediaQueryList)
32                }
33            }
34            _ => input.parse().map(CustomMediaValue::MediaQueryList),
35        }
36    }
37}