css_ast/functions/
symbols_function.rs1use super::prelude::*;
2use crate::{CssAtomSet, types::Image};
3
4#[node]
10#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
11#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
12#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
13#[derive(csskit_derives::NodeWithMetadata)]
14pub struct SymbolsFunction<'a> {
15 #[atom(CssAtomSet::Symbols)]
16 pub name: T![Function],
17 pub params: SymbolsFunctionParams<'a>,
18 #[semantic_eq(skip)]
19 pub close: T![')'],
20}
21
22#[node]
23#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
24#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
25#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
26#[derive(csskit_derives::NodeWithMetadata)]
27pub struct SymbolsFunctionParams<'a> {
28 pub symbols_type: Option<SymbolsType>,
29 pub symbols: Vec<'a, Symbol<'a>>,
30}
31
32#[node]
38#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
39#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
40#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(skip))]
41#[derive(csskit_derives::NodeWithMetadata)]
42pub enum SymbolsType {
43 #[atom(CssAtomSet::Cyclic)]
44 Cyclic(T![Ident]),
45 #[atom(CssAtomSet::Numeric)]
46 Numeric(T![Ident]),
47 #[atom(CssAtomSet::Alphabetic)]
48 Alphabetic(T![Ident]),
49 #[atom(CssAtomSet::Symbolic)]
50 Symbolic(T![Ident]),
51 #[atom(CssAtomSet::Fixed)]
52 Fixed(T![Ident]),
53}
54
55#[node]
63#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
64#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
65#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(children))]
66#[derive(csskit_derives::NodeWithMetadata)]
67pub enum Symbol<'a> {
68 #[cfg_attr(feature = "visitable", visit(skip))]
69 String(T![String]),
70 Image(Image<'a>),
71}
72
73#[cfg(test)]
74mod tests {
75 use super::*;
76 use crate::CssAtomSet;
77 use css_parse::assert_parse;
78
79 #[test]
80 fn test_writes() {
81 assert_parse!(CssAtomSet::ATOMS, SymbolsFunction, "symbols(symbolic'+')");
82 assert_parse!(CssAtomSet::ATOMS, SymbolsFunction, "symbols(symbolic'*''†''‡')");
83 }
84}