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<'cmt, 's: 'cmt> Parse<'cmt, 's> for CustomMedia<'s> {
13    fn parse(input: &mut Parser<'cmt, 's>) -> PResult<Self> {
14        let name = input.parse_dashed_ident()?;
15        let value = input.parse::<CustomMediaValue>()?;
16        let span = Span {
17            start: name.span().start,
18            end: value.span().end,
19        };
20        Ok(CustomMedia { name, value, span })
21    }
22}
23
24impl<'cmt, 's: 'cmt> Parse<'cmt, 's> for CustomMediaValue<'s> {
25    fn parse(input: &mut Parser<'cmt, 's>) -> PResult<Self> {
26        match &peek!(input).token {
27            Token::Ident(ident) => {
28                let name = ident.name();
29                if name.eq_ignore_ascii_case("true") {
30                    input.parse().map(CustomMediaValue::True)
31                } else if name.eq_ignore_ascii_case("false") {
32                    input.parse().map(CustomMediaValue::False)
33                } else {
34                    input.parse().map(CustomMediaValue::MediaQueryList)
35                }
36            }
37            _ => input.parse().map(CustomMediaValue::MediaQueryList),
38        }
39    }
40}