Skip to main content

azul_css/props/
macros.rs

1//! Internal macros for reducing boilerplate in property definitions.
2//!
3//! - `impl_pixel_value!` — adds unit constructors (`px`, `em`, `pt`, …) to structs wrapping `PixelValue`
4//! - `impl_percentage_value!` — adds constructors and `Display`/`Debug` impls for percentage wrappers
5//! - `css_property_from_type!` — maps `CssPropertyType` variants to `CssProperty` enum values (used by `property.rs`)
6
7/// Creates `pt`, `px` and `em` constructors for any struct that has a
8/// `PixelValue` as its `self.inner` field.
9macro_rules! impl_pixel_value {
10    ($struct:ident) => {
11        impl $struct {
12            #[inline]
13            pub const fn zero() -> Self {
14                Self {
15                    inner: crate::props::basic::pixel::PixelValue::zero(),
16                }
17            }
18
19            #[inline]
20            pub const fn const_px(value: isize) -> Self {
21                Self {
22                    inner: crate::props::basic::pixel::PixelValue::const_px(value),
23                }
24            }
25
26            #[inline]
27            pub const fn const_em(value: isize) -> Self {
28                Self {
29                    inner: crate::props::basic::pixel::PixelValue::const_em(value),
30                }
31            }
32
33            #[inline]
34            pub const fn const_pt(value: isize) -> Self {
35                Self {
36                    inner: crate::props::basic::pixel::PixelValue::const_pt(value),
37                }
38            }
39
40            #[inline]
41            pub const fn const_percent(value: isize) -> Self {
42                Self {
43                    inner: crate::props::basic::pixel::PixelValue::const_percent(value),
44                }
45            }
46
47            #[inline]
48            pub const fn const_in(value: isize) -> Self {
49                Self {
50                    inner: crate::props::basic::pixel::PixelValue::const_in(value),
51                }
52            }
53
54            #[inline]
55            pub const fn const_cm(value: isize) -> Self {
56                Self {
57                    inner: crate::props::basic::pixel::PixelValue::const_cm(value),
58                }
59            }
60
61            #[inline]
62            pub const fn const_mm(value: isize) -> Self {
63                Self {
64                    inner: crate::props::basic::pixel::PixelValue::const_mm(value),
65                }
66            }
67
68            #[inline]
69            pub const fn const_from_metric(
70                metric: crate::props::basic::length::SizeMetric,
71                value: isize,
72            ) -> Self {
73                Self {
74                    inner: crate::props::basic::pixel::PixelValue::const_from_metric(metric, value),
75                }
76            }
77
78            #[inline]
79            pub fn px(value: f32) -> Self {
80                Self {
81                    inner: crate::props::basic::pixel::PixelValue::px(value),
82                }
83            }
84
85            #[inline]
86            pub fn em(value: f32) -> Self {
87                Self {
88                    inner: crate::props::basic::pixel::PixelValue::em(value),
89                }
90            }
91
92            #[inline]
93            pub fn pt(value: f32) -> Self {
94                Self {
95                    inner: crate::props::basic::pixel::PixelValue::pt(value),
96                }
97            }
98
99            #[inline]
100            pub fn percent(value: f32) -> Self {
101                Self {
102                    inner: crate::props::basic::pixel::PixelValue::percent(value),
103                }
104            }
105
106            #[inline]
107            pub fn from_metric(
108                metric: crate::props::basic::length::SizeMetric,
109                value: f32,
110            ) -> Self {
111                Self {
112                    inner: crate::props::basic::pixel::PixelValue::from_metric(metric, value),
113                }
114            }
115
116            #[inline]
117            pub fn interpolate(&self, other: &Self, t: f32) -> Self {
118                $struct {
119                    inner: self.inner.interpolate(&other.inner, t),
120                }
121            }
122        }
123    };
124}
125
126macro_rules! impl_percentage_value {
127    ($struct:ident) => {
128        impl ::core::fmt::Display for $struct {
129            fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
130                write!(f, "{}%", self.inner.normalized() * 100.0)
131            }
132        }
133
134        impl ::core::fmt::Debug for $struct {
135            fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
136                write!(f, "{}%", self.inner.normalized() * 100.0)
137            }
138        }
139
140        impl $struct {
141            /// Same as `PercentageValue::new()`, but only accepts whole numbers
142            /// in order to be usable in `const` context.
143            #[inline]
144            pub const fn const_new(value: isize) -> Self {
145                Self {
146                    inner: PercentageValue::const_new(value),
147                }
148            }
149
150            #[inline]
151            pub fn new(value: f32) -> Self {
152                Self {
153                    inner: PercentageValue::new(value),
154                }
155            }
156
157            #[inline]
158            pub fn interpolate(&self, other: &Self, t: f32) -> Self {
159                $struct {
160                    inner: self.inner.interpolate(&other.inner, t),
161                }
162            }
163        }
164    };
165}
166
167/// Converts a `PixelValue` into a typed dimension wrapper, used by the layout solver.
168pub trait PixelValueTaker {
169    fn from_pixel_value(inner: crate::props::basic::pixel::PixelValue) -> Self;
170}
171
172macro_rules! css_property_from_type {
173    ($prop_type:expr, $content_type:ident) => {{
174        match $prop_type {
175            CssPropertyType::CaretColor => CssProperty::CaretColor(CssPropertyValue::$content_type),
176            CssPropertyType::CaretWidth => CssProperty::CaretWidth(CssPropertyValue::$content_type),
177            CssPropertyType::CaretAnimationDuration => {
178                CssProperty::CaretAnimationDuration(CssPropertyValue::$content_type)
179            }
180            CssPropertyType::SelectionBackgroundColor => {
181                CssProperty::SelectionBackgroundColor(CssPropertyValue::$content_type)
182            }
183            CssPropertyType::SelectionColor => {
184                CssProperty::SelectionColor(CssPropertyValue::$content_type)
185            }
186            CssPropertyType::SelectionRadius => {
187                CssProperty::SelectionRadius(CssPropertyValue::$content_type)
188            }
189
190            CssPropertyType::TextColor => CssProperty::TextColor(CssPropertyValue::$content_type),
191            CssPropertyType::FontSize => CssProperty::FontSize(CssPropertyValue::$content_type),
192            CssPropertyType::FontFamily => CssProperty::FontFamily(CssPropertyValue::$content_type),
193            CssPropertyType::TextAlign => CssProperty::TextAlign(CssPropertyValue::$content_type),
194            CssPropertyType::VerticalAlign => {
195                CssProperty::VerticalAlign(CssPropertyValue::$content_type)
196            }
197            CssPropertyType::LetterSpacing => {
198                CssProperty::LetterSpacing(CssPropertyValue::$content_type)
199            }
200            CssPropertyType::TextIndent => CssProperty::TextIndent(CssPropertyValue::$content_type),
201            CssPropertyType::InitialLetter => {
202                CssProperty::InitialLetter(CssPropertyValue::$content_type)
203            }
204            CssPropertyType::LineClamp => CssProperty::LineClamp(CssPropertyValue::$content_type),
205            CssPropertyType::HangingPunctuation => {
206                CssProperty::HangingPunctuation(CssPropertyValue::$content_type)
207            }
208            CssPropertyType::TextCombineUpright => {
209                CssProperty::TextCombineUpright(CssPropertyValue::$content_type)
210            }
211            CssPropertyType::ExclusionMargin => {
212                CssProperty::ExclusionMargin(CssPropertyValue::$content_type)
213            }
214            CssPropertyType::HyphenationLanguage => {
215                CssProperty::HyphenationLanguage(CssPropertyValue::$content_type)
216            }
217            CssPropertyType::LineHeight => CssProperty::LineHeight(CssPropertyValue::$content_type),
218            CssPropertyType::WordSpacing => {
219                CssProperty::WordSpacing(CssPropertyValue::$content_type)
220            }
221            CssPropertyType::TabSize => CssProperty::TabSize(CssPropertyValue::$content_type),
222            CssPropertyType::Cursor => CssProperty::Cursor(CssPropertyValue::$content_type),
223            CssPropertyType::Display => CssProperty::Display(CssPropertyValue::$content_type),
224            CssPropertyType::Float => CssProperty::Float(CssPropertyValue::$content_type),
225            CssPropertyType::BoxSizing => CssProperty::BoxSizing(CssPropertyValue::$content_type),
226            CssPropertyType::Width => CssProperty::Width(CssPropertyValue::$content_type),
227            CssPropertyType::Height => CssProperty::Height(CssPropertyValue::$content_type),
228            CssPropertyType::MinWidth => CssProperty::MinWidth(CssPropertyValue::$content_type),
229            CssPropertyType::MinHeight => CssProperty::MinHeight(CssPropertyValue::$content_type),
230            CssPropertyType::MaxWidth => CssProperty::MaxWidth(CssPropertyValue::$content_type),
231            CssPropertyType::MaxHeight => CssProperty::MaxHeight(CssPropertyValue::$content_type),
232            CssPropertyType::Position => CssProperty::Position(CssPropertyValue::$content_type),
233            CssPropertyType::Top => CssProperty::Top(CssPropertyValue::$content_type),
234            CssPropertyType::Right => CssProperty::Right(CssPropertyValue::$content_type),
235            CssPropertyType::Left => CssProperty::Left(CssPropertyValue::$content_type),
236            CssPropertyType::Bottom => CssProperty::Bottom(CssPropertyValue::$content_type),
237            CssPropertyType::ZIndex => CssProperty::ZIndex(CssPropertyValue::$content_type),
238            CssPropertyType::FlexWrap => CssProperty::FlexWrap(CssPropertyValue::$content_type),
239            CssPropertyType::FlexDirection => {
240                CssProperty::FlexDirection(CssPropertyValue::$content_type)
241            }
242            CssPropertyType::FlexGrow => CssProperty::FlexGrow(CssPropertyValue::$content_type),
243            CssPropertyType::FlexShrink => CssProperty::FlexShrink(CssPropertyValue::$content_type),
244            CssPropertyType::FlexBasis => CssProperty::FlexBasis(CssPropertyValue::$content_type),
245            CssPropertyType::JustifyContent => {
246                CssProperty::JustifyContent(CssPropertyValue::$content_type)
247            }
248            CssPropertyType::AlignItems => CssProperty::AlignItems(CssPropertyValue::$content_type),
249            CssPropertyType::AlignContent => {
250                CssProperty::AlignContent(CssPropertyValue::$content_type)
251            }
252            CssPropertyType::ColumnGap => CssProperty::ColumnGap(CssPropertyValue::$content_type),
253            CssPropertyType::RowGap => CssProperty::RowGap(CssPropertyValue::$content_type),
254            CssPropertyType::GridTemplateColumns => {
255                CssProperty::GridTemplateColumns(CssPropertyValue::$content_type)
256            }
257            CssPropertyType::GridTemplateRows => {
258                CssProperty::GridTemplateRows(CssPropertyValue::$content_type)
259            }
260            CssPropertyType::GridAutoColumns => {
261                CssProperty::GridAutoColumns(CssPropertyValue::$content_type)
262            }
263            CssPropertyType::GridAutoFlow => {
264                CssProperty::GridAutoFlow(CssPropertyValue::$content_type)
265            }
266            CssPropertyType::JustifySelf => {
267                CssProperty::JustifySelf(CssPropertyValue::$content_type)
268            }
269            CssPropertyType::JustifyItems => {
270                CssProperty::JustifyItems(CssPropertyValue::$content_type)
271            }
272            CssPropertyType::Gap => CssProperty::Gap(CssPropertyValue::$content_type),
273            CssPropertyType::GridGap => CssProperty::GridGap(CssPropertyValue::$content_type),
274            CssPropertyType::AlignSelf => CssProperty::AlignSelf(CssPropertyValue::$content_type),
275            CssPropertyType::Font => CssProperty::Font(CssPropertyValue::$content_type),
276            CssPropertyType::GridAutoRows => {
277                CssProperty::GridAutoRows(CssPropertyValue::$content_type)
278            }
279            CssPropertyType::GridColumn => CssProperty::GridColumn(CssPropertyValue::$content_type),
280            CssPropertyType::GridRow => CssProperty::GridRow(CssPropertyValue::$content_type),
281            CssPropertyType::GridTemplateAreas => {
282                CssProperty::GridTemplateAreas(CssPropertyValue::$content_type)
283            }
284            CssPropertyType::WritingMode => {
285                CssProperty::WritingMode(CssPropertyValue::$content_type)
286            }
287            CssPropertyType::Clear => CssProperty::Clear(CssPropertyValue::$content_type),
288            CssPropertyType::OverflowX => CssProperty::OverflowX(CssPropertyValue::$content_type),
289            CssPropertyType::OverflowY => CssProperty::OverflowY(CssPropertyValue::$content_type),
290            CssPropertyType::OverflowBlock => CssProperty::OverflowBlock(CssPropertyValue::$content_type),
291            CssPropertyType::OverflowInline => CssProperty::OverflowInline(CssPropertyValue::$content_type),
292            CssPropertyType::PaddingTop => CssProperty::PaddingTop(CssPropertyValue::$content_type),
293            CssPropertyType::PaddingLeft => {
294                CssProperty::PaddingLeft(CssPropertyValue::$content_type)
295            }
296            CssPropertyType::PaddingRight => {
297                CssProperty::PaddingRight(CssPropertyValue::$content_type)
298            }
299            CssPropertyType::PaddingBottom => {
300                CssProperty::PaddingBottom(CssPropertyValue::$content_type)
301            }
302            CssPropertyType::PaddingInlineStart => {
303                CssProperty::PaddingInlineStart(CssPropertyValue::$content_type)
304            }
305            CssPropertyType::PaddingInlineEnd => {
306                CssProperty::PaddingInlineEnd(CssPropertyValue::$content_type)
307            }
308            CssPropertyType::MarginTop => CssProperty::MarginTop(CssPropertyValue::$content_type),
309            CssPropertyType::MarginLeft => CssProperty::MarginLeft(CssPropertyValue::$content_type),
310            CssPropertyType::MarginRight => {
311                CssProperty::MarginRight(CssPropertyValue::$content_type)
312            }
313            CssPropertyType::MarginBottom => {
314                CssProperty::MarginBottom(CssPropertyValue::$content_type)
315            }
316            CssPropertyType::BackgroundContent => {
317                CssProperty::BackgroundContent(CssPropertyValue::$content_type)
318            }
319            CssPropertyType::BackgroundPosition => {
320                CssProperty::BackgroundPosition(CssPropertyValue::$content_type)
321            }
322            CssPropertyType::BackgroundSize => {
323                CssProperty::BackgroundSize(CssPropertyValue::$content_type)
324            }
325            CssPropertyType::BackgroundRepeat => {
326                CssProperty::BackgroundRepeat(CssPropertyValue::$content_type)
327            }
328            CssPropertyType::BorderTopLeftRadius => {
329                CssProperty::BorderTopLeftRadius(CssPropertyValue::$content_type)
330            }
331            CssPropertyType::BorderTopRightRadius => {
332                CssProperty::BorderTopRightRadius(CssPropertyValue::$content_type)
333            }
334            CssPropertyType::BorderBottomLeftRadius => {
335                CssProperty::BorderBottomLeftRadius(CssPropertyValue::$content_type)
336            }
337            CssPropertyType::BorderBottomRightRadius => {
338                CssProperty::BorderBottomRightRadius(CssPropertyValue::$content_type)
339            }
340            CssPropertyType::BorderTopColor => {
341                CssProperty::BorderTopColor(CssPropertyValue::$content_type)
342            }
343            CssPropertyType::BorderRightColor => {
344                CssProperty::BorderRightColor(CssPropertyValue::$content_type)
345            }
346            CssPropertyType::BorderLeftColor => {
347                CssProperty::BorderLeftColor(CssPropertyValue::$content_type)
348            }
349            CssPropertyType::BorderBottomColor => {
350                CssProperty::BorderBottomColor(CssPropertyValue::$content_type)
351            }
352            CssPropertyType::BorderTopStyle => {
353                CssProperty::BorderTopStyle(CssPropertyValue::$content_type)
354            }
355            CssPropertyType::BorderRightStyle => {
356                CssProperty::BorderRightStyle(CssPropertyValue::$content_type)
357            }
358            CssPropertyType::BorderLeftStyle => {
359                CssProperty::BorderLeftStyle(CssPropertyValue::$content_type)
360            }
361            CssPropertyType::BorderBottomStyle => {
362                CssProperty::BorderBottomStyle(CssPropertyValue::$content_type)
363            }
364            CssPropertyType::BorderTopWidth => {
365                CssProperty::BorderTopWidth(CssPropertyValue::$content_type)
366            }
367            CssPropertyType::BorderRightWidth => {
368                CssProperty::BorderRightWidth(CssPropertyValue::$content_type)
369            }
370            CssPropertyType::BorderLeftWidth => {
371                CssProperty::BorderLeftWidth(CssPropertyValue::$content_type)
372            }
373            CssPropertyType::BorderBottomWidth => {
374                CssProperty::BorderBottomWidth(CssPropertyValue::$content_type)
375            }
376            CssPropertyType::BoxShadowLeft => {
377                CssProperty::BoxShadowLeft(CssPropertyValue::$content_type)
378            }
379            CssPropertyType::BoxShadowRight => {
380                CssProperty::BoxShadowRight(CssPropertyValue::$content_type)
381            }
382            CssPropertyType::BoxShadowTop => {
383                CssProperty::BoxShadowTop(CssPropertyValue::$content_type)
384            }
385            CssPropertyType::BoxShadowBottom => {
386                CssProperty::BoxShadowBottom(CssPropertyValue::$content_type)
387            }
388            CssPropertyType::ScrollbarTrack => {
389                CssProperty::ScrollbarTrack(CssPropertyValue::$content_type)
390            }
391            CssPropertyType::ScrollbarThumb => {
392                CssProperty::ScrollbarThumb(CssPropertyValue::$content_type)
393            }
394            CssPropertyType::ScrollbarButton => {
395                CssProperty::ScrollbarButton(CssPropertyValue::$content_type)
396            }
397            CssPropertyType::ScrollbarCorner => {
398                CssProperty::ScrollbarCorner(CssPropertyValue::$content_type)
399            }
400            CssPropertyType::ScrollbarResizer => {
401                CssProperty::ScrollbarResizer(CssPropertyValue::$content_type)
402            }
403            CssPropertyType::ScrollbarWidth => {
404                CssProperty::ScrollbarWidth(CssPropertyValue::$content_type)
405            }
406            CssPropertyType::ScrollbarColor => {
407                CssProperty::ScrollbarColor(CssPropertyValue::$content_type)
408            }
409            CssPropertyType::ScrollbarVisibility => {
410                CssProperty::ScrollbarVisibility(CssPropertyValue::$content_type)
411            }
412            CssPropertyType::ScrollbarFadeDelay => {
413                CssProperty::ScrollbarFadeDelay(CssPropertyValue::$content_type)
414            }
415            CssPropertyType::ScrollbarFadeDuration => {
416                CssProperty::ScrollbarFadeDuration(CssPropertyValue::$content_type)
417            }
418            CssPropertyType::Opacity => CssProperty::Opacity(CssPropertyValue::$content_type),
419            CssPropertyType::Visibility => CssProperty::Visibility(CssPropertyValue::$content_type),
420            CssPropertyType::Transform => CssProperty::Transform(CssPropertyValue::$content_type),
421            CssPropertyType::PerspectiveOrigin => {
422                CssProperty::PerspectiveOrigin(CssPropertyValue::$content_type)
423            }
424            CssPropertyType::TransformOrigin => {
425                CssProperty::TransformOrigin(CssPropertyValue::$content_type)
426            }
427            CssPropertyType::BackfaceVisibility => {
428                CssProperty::BackfaceVisibility(CssPropertyValue::$content_type)
429            }
430            CssPropertyType::MixBlendMode => {
431                CssProperty::MixBlendMode(CssPropertyValue::$content_type)
432            }
433            CssPropertyType::Filter => CssProperty::Filter(CssPropertyValue::$content_type),
434            CssPropertyType::BackdropFilter => {
435                CssProperty::BackdropFilter(CssPropertyValue::$content_type)
436            }
437            CssPropertyType::TextShadow => CssProperty::TextShadow(CssPropertyValue::$content_type),
438            CssPropertyType::Direction => CssProperty::Direction(CssPropertyValue::$content_type),
439            CssPropertyType::Hyphens => CssProperty::Hyphens(CssPropertyValue::$content_type),
440            CssPropertyType::WordBreak => CssProperty::WordBreak(CssPropertyValue::$content_type),
441            CssPropertyType::OverflowWrap => CssProperty::OverflowWrap(CssPropertyValue::$content_type),
442            CssPropertyType::LineBreak => CssProperty::LineBreak(CssPropertyValue::$content_type),
443            CssPropertyType::ObjectFit => CssProperty::ObjectFit(CssPropertyValue::$content_type),
444            CssPropertyType::ObjectPosition => CssProperty::ObjectPosition(CssPropertyValue::$content_type),
445            CssPropertyType::AspectRatio => CssProperty::AspectRatio(CssPropertyValue::$content_type),
446            CssPropertyType::TextOrientation => CssProperty::TextOrientation(CssPropertyValue::$content_type),
447            CssPropertyType::TextAlignLast => CssProperty::TextAlignLast(CssPropertyValue::$content_type),
448            CssPropertyType::WhiteSpace => CssProperty::WhiteSpace(CssPropertyValue::$content_type),
449            CssPropertyType::UserSelect => CssProperty::UserSelect(CssPropertyValue::$content_type),
450            CssPropertyType::TextDecoration => {
451                CssProperty::TextDecoration(CssPropertyValue::$content_type)
452            }
453            // Fragmentation / Columns / Flow / Shape / Content
454            CssPropertyType::TextJustify => {
455                CssProperty::TextJustify(CssPropertyValue::$content_type)
456            }
457            CssPropertyType::BreakBefore => {
458                CssProperty::BreakBefore(CssPropertyValue::$content_type)
459            }
460            CssPropertyType::BreakAfter => CssProperty::BreakAfter(CssPropertyValue::$content_type),
461            CssPropertyType::BreakInside => {
462                CssProperty::BreakInside(CssPropertyValue::$content_type)
463            }
464            CssPropertyType::Widows => CssProperty::Widows(CssPropertyValue::$content_type),
465            CssPropertyType::Orphans => CssProperty::Orphans(CssPropertyValue::$content_type),
466            CssPropertyType::BoxDecorationBreak => {
467                CssProperty::BoxDecorationBreak(CssPropertyValue::$content_type)
468            }
469            CssPropertyType::ColumnCount => {
470                CssProperty::ColumnCount(CssPropertyValue::$content_type)
471            }
472            CssPropertyType::ColumnWidth => {
473                CssProperty::ColumnWidth(CssPropertyValue::$content_type)
474            }
475            CssPropertyType::ColumnSpan => CssProperty::ColumnSpan(CssPropertyValue::$content_type),
476            CssPropertyType::ColumnFill => CssProperty::ColumnFill(CssPropertyValue::$content_type),
477            CssPropertyType::ColumnRuleWidth => {
478                CssProperty::ColumnRuleWidth(CssPropertyValue::$content_type)
479            }
480            CssPropertyType::ColumnRuleStyle => {
481                CssProperty::ColumnRuleStyle(CssPropertyValue::$content_type)
482            }
483            CssPropertyType::ColumnRuleColor => {
484                CssProperty::ColumnRuleColor(CssPropertyValue::$content_type)
485            }
486            CssPropertyType::FlowInto => CssProperty::FlowInto(CssPropertyValue::$content_type),
487            CssPropertyType::FlowFrom => CssProperty::FlowFrom(CssPropertyValue::$content_type),
488            CssPropertyType::ShapeOutside => {
489                CssProperty::ShapeOutside(CssPropertyValue::$content_type)
490            }
491            CssPropertyType::ShapeInside => {
492                CssProperty::ShapeInside(CssPropertyValue::$content_type)
493            }
494            CssPropertyType::ClipPath => CssProperty::ClipPath(CssPropertyValue::$content_type),
495            CssPropertyType::ShapeMargin => {
496                CssProperty::ShapeMargin(CssPropertyValue::$content_type)
497            }
498            CssPropertyType::ShapeImageThreshold => {
499                CssProperty::ShapeImageThreshold(CssPropertyValue::$content_type)
500            }
501            CssPropertyType::Content => CssProperty::Content(CssPropertyValue::$content_type),
502            CssPropertyType::CounterReset => {
503                CssProperty::CounterReset(CssPropertyValue::$content_type)
504            }
505            CssPropertyType::CounterIncrement => {
506                CssProperty::CounterIncrement(CssPropertyValue::$content_type)
507            }
508            CssPropertyType::ListStyleType => {
509                CssProperty::ListStyleType(CssPropertyValue::$content_type)
510            }
511            CssPropertyType::ListStylePosition => {
512                CssProperty::ListStylePosition(CssPropertyValue::$content_type)
513            }
514            CssPropertyType::StringSet => CssProperty::StringSet(CssPropertyValue::$content_type),
515            CssPropertyType::TableLayout => {
516                CssProperty::TableLayout(CssPropertyValue::$content_type)
517            }
518            CssPropertyType::BorderCollapse => {
519                CssProperty::BorderCollapse(CssPropertyValue::$content_type)
520            }
521            CssPropertyType::BorderSpacing => {
522                CssProperty::BorderSpacing(CssPropertyValue::$content_type)
523            }
524            CssPropertyType::CaptionSide => {
525                CssProperty::CaptionSide(CssPropertyValue::$content_type)
526            }
527            CssPropertyType::EmptyCells => CssProperty::EmptyCells(CssPropertyValue::$content_type),
528            CssPropertyType::FontWeight => CssProperty::FontWeight(CssPropertyValue::$content_type),
529            CssPropertyType::FontStyle => CssProperty::FontStyle(CssPropertyValue::$content_type),
530            CssPropertyType::UnicodeBidi => CssProperty::UnicodeBidi(CssPropertyValue::$content_type),
531            CssPropertyType::TextBoxTrim => CssProperty::TextBoxTrim(CssPropertyValue::$content_type),
532            CssPropertyType::TextBoxEdge => CssProperty::TextBoxEdge(CssPropertyValue::$content_type),
533            CssPropertyType::DominantBaseline => CssProperty::DominantBaseline(CssPropertyValue::$content_type),
534            CssPropertyType::AlignmentBaseline => CssProperty::AlignmentBaseline(CssPropertyValue::$content_type),
535            CssPropertyType::InitialLetterAlign => CssProperty::InitialLetterAlign(CssPropertyValue::$content_type),
536            CssPropertyType::InitialLetterWrap => CssProperty::InitialLetterWrap(CssPropertyValue::$content_type),
537            CssPropertyType::ScrollbarGutter => CssProperty::ScrollbarGutter(CssPropertyValue::$content_type),
538            CssPropertyType::OverflowClipMargin => CssProperty::OverflowClipMargin(CssPropertyValue::$content_type),
539            CssPropertyType::Clip => CssProperty::Clip(CssPropertyValue::$content_type),
540        }
541    }};
542}