css_ast/values/writing_modes/
impls.rs1use super::{GlyphOrientationVerticalKeywords, GlyphOrientationVerticalStyleValue};
2use css_parse::{Parse, Parser, Peek, Result as ParseResult, T};
3
4pub(crate) use crate::traits::StyleValue;
5pub(crate) use csskit_derives::*;
6pub(crate) use csskit_proc_macro::*;
7
8impl<'a> Parse<'a> for GlyphOrientationVerticalStyleValue {
9 fn parse(p: &mut Parser<'a>) -> ParseResult<Self> {
10 match p.parse_if_peek::<GlyphOrientationVerticalKeywords>()? {
11 Some(GlyphOrientationVerticalKeywords::Auto(ident)) => Ok(Self::Auto(ident)),
12 None => {
13 if let Some(tk) = p.parse_if_peek::<crate::CSSInt>()? {
14 match tk.into() {
15 0i32 => {
16 return Ok(Self::Literal0(tk));
17 }
18 90i32 => {
19 return Ok(Self::Literal90(tk));
20 }
21 _ => {}
22 }
23 }
24 if let Some(tk) = p.parse_if_peek::<T![Dimension]>()? {
25 match tk.into() {
26 (0f32, ::css_parse::DimensionUnit::Deg) => {
27 return Ok(Self::Literal0deg(tk));
28 }
29 (90f32, ::css_parse::DimensionUnit::Deg) => {
30 return Ok(Self::Literal90deg(tk));
31 }
32 _ => {}
33 }
34 }
35 Err(crate::diagnostics::Unexpected(p.next()))?
36 }
37 }
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::super::*;
44 use css_parse::{assert_parse, assert_parse_error};
45
46 #[test]
47 fn size_test() {
48 assert_eq!(std::mem::size_of::<DirectionStyleValue>(), 16);
49 assert_eq!(std::mem::size_of::<UnicodeBidiStyleValue>(), 16);
50 assert_eq!(std::mem::size_of::<WritingModeStyleValue>(), 16);
51 assert_eq!(std::mem::size_of::<TextOrientationStyleValue>(), 16);
52 assert_eq!(std::mem::size_of::<GlyphOrientationVerticalStyleValue>(), 16);
53 assert_eq!(std::mem::size_of::<TextCombineUprightStyleValue>(), 28);
54 }
55
56 #[test]
57 fn test_parse() {
58 assert_parse!(GlyphOrientationVerticalStyleValue, "auto");
59 assert_parse!(GlyphOrientationVerticalStyleValue, "0");
60 assert_parse!(GlyphOrientationVerticalStyleValue, "90");
61 assert_parse!(GlyphOrientationVerticalStyleValue, "90deg");
62 assert_parse!(TextCombineUprightStyleValue, "none");
63 assert_parse!(TextCombineUprightStyleValue, "all");
64 assert_parse!(TextCombineUprightStyleValue, "digits");
65 assert_parse!(TextCombineUprightStyleValue, "digits 2");
66 assert_parse!(TextCombineUprightStyleValue, "digits 4");
67 }
68
69 #[test]
70 fn test_parse_error() {
71 assert_parse_error!(GlyphOrientationVerticalStyleValue, "128");
72 assert_parse_error!(GlyphOrientationVerticalStyleValue, "50deg");
73 assert_parse_error!(GlyphOrientationVerticalStyleValue, "50deg");
74 assert_parse_error!(TextCombineUprightStyleValue, "digits 1");
75 assert_parse_error!(TextCombineUprightStyleValue, "digits 2 2");
76 assert_parse_error!(TextCombineUprightStyleValue, "digits 5");
77 }
78
79 #[cfg(feature = "css_feature_data")]
80 #[test]
81 fn test_feature_data() {
82 use crate::assert_feature_id;
83 assert_feature_id!("all", TextCombineUprightStyleValue, "css.properties.text-combine-upright.all");
84 assert_feature_id!("none", TextCombineUprightStyleValue, "css.properties.text-combine-upright.none");
85 assert_feature_id!("digits 2", TextCombineUprightStyleValue, "css.properties.text-combine-upright");
86 }
87}