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