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.
9
macro_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
4
            pub const fn const_px(value: isize) -> Self {
21
4
                Self {
22
4
                    inner: crate::props::basic::pixel::PixelValue::const_px(value),
23
4
                }
24
4
            }
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
61
            pub fn px(value: f32) -> Self {
80
61
                Self {
81
61
                    inner: crate::props::basic::pixel::PixelValue::px(value),
82
61
                }
83
61
            }
84

            
85
            #[inline]
86
13
            pub fn em(value: f32) -> Self {
87
13
                Self {
88
13
                    inner: crate::props::basic::pixel::PixelValue::em(value),
89
13
                }
90
13
            }
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
3
            pub fn percent(value: f32) -> Self {
101
3
                Self {
102
3
                    inner: crate::props::basic::pixel::PixelValue::percent(value),
103
3
                }
104
3
            }
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

            
126
macro_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
2
            pub const fn const_new(value: isize) -> Self {
145
2
                Self {
146
2
                    inner: PercentageValue::const_new(value),
147
2
                }
148
2
            }
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.
168
pub trait PixelValueTaker {
169
    fn from_pixel_value(inner: crate::props::basic::pixel::PixelValue) -> Self;
170
}
171

            
172
macro_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
}