Skip to main content

css_ast/types/
counter_style.rs

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/// <https://drafts.csswg.org/css-counter-styles-3/#predefined-counters>
30#[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}