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