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