css_ast/types/
counter_style.rs1use css_parse::{Cursor, Parser, Peek, T, keyword_set};
2use csskit_derives::{Parse, ToCursors, ToSpan, Visitable};
3
4use crate::SymbolsFunction;
5
6#[derive(Parse, ToCursors, ToSpan, Visitable, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
8#[visit]
9pub enum CounterStyle<'a> {
10 #[visit(skip)]
11 Predefined(PredefinedCounter),
12 #[visit(skip)]
13 Named(T![Ident]),
14 SymbolsFunction(SymbolsFunction<'a>),
15}
16
17impl<'a> Peek<'a> for CounterStyle<'a> {
18 fn peek(p: &Parser<'a>, c: Cursor) -> bool {
19 <T![Ident]>::peek(p, c) || <SymbolsFunction>::peek(p, c)
20 }
21}
22
23keyword_set!(
24 pub enum PredefinedCounter {
26 Decimal: "decimal",
27 DecimalLeadingZero: "decimal-leading-zero",
28 ArabicIndic: "arabic-indic",
29 Armenian: "armenian",
30 UpperArmenian: "upper-armenian",
31 LowerArmenian: "lower-armenian",
32 Bengali: "bengali",
33 Cambodian: "cambodian",
34 Khmer: "khmer",
35 CjkDecimal: "cjk-decimal",
36 Devanagari: "devanagari",
37 Georgian: "georgian",
38 Gujarati: "gujarati",
39 Gurmukhi: "gurmukhi",
40 Hebrew: "hebrew",
41 Kannada: "kannada",
42 Lao: "lao",
43 Malayalam: "malayalam",
44 Mongolian: "mongolian",
45 Myanmar: "myanmar",
46 Oriya: "oriya",
47 Persian: "persian",
48 LowerRoman: "lower-roman",
49 UpperRoman: "upper-roman",
50 Tamil: "tamil",
51 Telugu: "telugu",
52 Thai: "thai",
53 Tibetan: "tibetan",
54 LowerAlpha: "lower-alpha",
55 UpperAlpha: "upper-alpha",
56 UpperLatin: "upper-latin",
57 LowerGreek: "lower-greek",
58 Hiragana: "hiragana",
59 HiraganaIroha: "hiragana-iroha",
60 Katakana: "katakana",
61 KatakanaIroha: "katakana-iroha",
62 Disc: "disc",
63 Square: "square",
64 DisclousureOpen: "disclousure-open",
65 DisclousureClosed: "disclousure-closed",
66 CjkEarthlyBranch: "cjk-earthly-branch",
67 CjkHeavenlyStem: "cjk-heavenly-stem",
68 }
69);
70
71#[cfg(test)]
72mod tests {
73 use super::*;
74 use css_parse::assert_parse;
75
76 #[test]
77 fn size_test() {
78 assert_eq!(std::mem::size_of::<CounterStyle>(), 80);
79 }
80
81 #[test]
82 fn test_writes() {
83 assert_parse!(CounterStyle, "cjk-heavenly-stem");
84 assert_parse!(CounterStyle, "foobar");
85 assert_parse!(CounterStyle, "symbols(symbolic'+')");
86 }
87}