1use super::prelude::*;
2
3use crate::SymbolsFunction;
4
5#[derive(Parse, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
7#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit)]
8#[derive(csskit_derives::NodeWithMetadata)]
9pub enum CounterStyle<'a> {
10 #[cfg_attr(feature = "visitable", visit(skip))]
11 Predefined(PredefinedCounter),
12 #[cfg_attr(feature = "visitable", visit(skip))]
13 Named(T![Ident]),
14 SymbolsFunction(SymbolsFunction<'a>),
15}
16
17impl<'a> Peek<'a> for CounterStyle<'a> {
18 const PEEK_KINDSET: KindSet = <T![Ident]>::PEEK_KINDSET.combine(SymbolsFunction::PEEK_KINDSET);
19
20 #[inline(always)]
21 fn peek<I>(p: &Parser<'a, I>, c: Cursor) -> bool
22 where
23 I: Iterator<Item = Cursor> + Clone,
24 {
25 <T![Ident]>::peek(p, c) || <SymbolsFunction>::peek(p, c)
26 }
27}
28
29#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
31#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
32pub enum PredefinedCounter {
33 #[atom(CssAtomSet::Decimal)]
34 Decimal(T![Ident]),
35 #[atom(CssAtomSet::DecimalLeadingZero)]
36 DecimalLeadingZero(T![Ident]),
37 #[atom(CssAtomSet::ArabicIndic)]
38 ArabicIndic(T![Ident]),
39 #[atom(CssAtomSet::Armenian)]
40 Armenian(T![Ident]),
41 #[atom(CssAtomSet::UpperArmenian)]
42 UpperArmenian(T![Ident]),
43 #[atom(CssAtomSet::LowerArmenian)]
44 LowerArmenian(T![Ident]),
45 #[atom(CssAtomSet::Bengali)]
46 Bengali(T![Ident]),
47 #[atom(CssAtomSet::Cambodian)]
48 Cambodian(T![Ident]),
49 #[atom(CssAtomSet::Khmer)]
50 Khmer(T![Ident]),
51 #[atom(CssAtomSet::CjkDecimal)]
52 CjkDecimal(T![Ident]),
53 #[atom(CssAtomSet::Devanagari)]
54 Devanagari(T![Ident]),
55 #[atom(CssAtomSet::Georgian)]
56 Georgian(T![Ident]),
57 #[atom(CssAtomSet::Gujarati)]
58 Gujarati(T![Ident]),
59 #[atom(CssAtomSet::Gurmukhi)]
60 Gurmukhi(T![Ident]),
61 #[atom(CssAtomSet::Hebrew)]
62 Hebrew(T![Ident]),
63 #[atom(CssAtomSet::Kannada)]
64 Kannada(T![Ident]),
65 #[atom(CssAtomSet::Lao)]
66 Lao(T![Ident]),
67 #[atom(CssAtomSet::Malayalam)]
68 Malayalam(T![Ident]),
69 #[atom(CssAtomSet::Mongolian)]
70 Mongolian(T![Ident]),
71 #[atom(CssAtomSet::Myanmar)]
72 Myanmar(T![Ident]),
73 #[atom(CssAtomSet::Oriya)]
74 Oriya(T![Ident]),
75 #[atom(CssAtomSet::Persian)]
76 Persian(T![Ident]),
77 #[atom(CssAtomSet::LowerRoman)]
78 LowerRoman(T![Ident]),
79 #[atom(CssAtomSet::UpperRoman)]
80 UpperRoman(T![Ident]),
81 #[atom(CssAtomSet::Tamil)]
82 Tamil(T![Ident]),
83 #[atom(CssAtomSet::Telugu)]
84 Telugu(T![Ident]),
85 #[atom(CssAtomSet::Thai)]
86 Thai(T![Ident]),
87 #[atom(CssAtomSet::Tibetan)]
88 Tibetan(T![Ident]),
89 #[atom(CssAtomSet::LowerAlpha)]
90 LowerAlpha(T![Ident]),
91 #[atom(CssAtomSet::UpperAlpha)]
92 UpperAlpha(T![Ident]),
93 #[atom(CssAtomSet::UpperLatin)]
94 UpperLatin(T![Ident]),
95 #[atom(CssAtomSet::LowerGreek)]
96 LowerGreek(T![Ident]),
97 #[atom(CssAtomSet::Hiragana)]
98 Hiragana(T![Ident]),
99 #[atom(CssAtomSet::HiraganaIroha)]
100 HiraganaIroha(T![Ident]),
101 #[atom(CssAtomSet::Katakana)]
102 Katakana(T![Ident]),
103 #[atom(CssAtomSet::KatakanaIroha)]
104 KatakanaIroha(T![Ident]),
105 #[atom(CssAtomSet::Disc)]
106 Disc(T![Ident]),
107 #[atom(CssAtomSet::Square)]
108 Square(T![Ident]),
109 #[atom(CssAtomSet::DisclousureOpen)]
110 DisclousureOpen(T![Ident]),
111 #[atom(CssAtomSet::DisclousureClosed)]
112 DisclousureClosed(T![Ident]),
113 #[atom(CssAtomSet::CjkEarthlyBranch)]
114 CjkEarthlyBranch(T![Ident]),
115 #[atom(CssAtomSet::CjkHeavenlyStem)]
116 CjkHeavenlyStem(T![Ident]),
117}
118
119#[cfg(test)]
120mod tests {
121 use super::*;
122 use crate::CssAtomSet;
123 use css_parse::assert_parse;
124
125 #[test]
126 fn size_test() {
127 assert_eq!(std::mem::size_of::<CounterStyle>(), 72);
128 }
129
130 #[test]
131 fn test_writes() {
132 assert_parse!(CssAtomSet::ATOMS, CounterStyle, "cjk-heavenly-stem");
133 assert_parse!(CssAtomSet::ATOMS, CounterStyle, "foobar");
134 assert_parse!(CssAtomSet::ATOMS, CounterStyle, "symbols(symbolic'+')");
135 }
136}