Generate CSS property tables via macros
Avoid requirement to manually keep enums in sync.
-- Test that ordering requirements are obeyed.
Change-Id: Icedd93f7dd2d4883edd97531fe4230668a377f52
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/93130
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/css/BUILD.gn b/core/fxcrt/css/BUILD.gn
index 26903f9..9e6dbf2 100644
--- a/core/fxcrt/css/BUILD.gn
+++ b/core/fxcrt/css/BUILD.gn
@@ -64,6 +64,7 @@
pdfium_unittest_source_set("unittests") {
sources = [
+ "cfx_cssdata_unittest.cpp",
"cfx_cssdeclaration_unittest.cpp",
"cfx_cssstylesheet_unittest.cpp",
"cfx_csssyntaxparser_unittest.cpp",
diff --git a/core/fxcrt/css/cfx_css.h b/core/fxcrt/css/cfx_css.h
index a6e3109..243b523 100644
--- a/core/fxcrt/css/cfx_css.h
+++ b/core/fxcrt/css/cfx_css.h
@@ -23,99 +23,19 @@
};
using CFX_CSSValueTypeMask = std::underlying_type<CFX_CSSVALUETYPE>::type;
-// Any entries added/removed here, will need to be mirrored in
-// propertyValueTable, in core/fxcrt/css/cfx_cssdata.cpp.
-enum class CFX_CSSPropertyValue : uint8_t {
- Bolder = 0,
- None,
- Dot,
- Sub,
- Top,
- Right,
- Normal,
- Auto,
- Text,
- XSmall,
- Thin,
- Small,
- Bottom,
- Underline,
- Double,
- Lighter,
- Oblique,
- Super,
- Center,
- XxLarge,
- Smaller,
- Baseline,
- Thick,
- Justify,
- Middle,
- Medium,
- ListItem,
- XxSmall,
- Bold,
- SmallCaps,
- Inline,
- Overline,
- TextBottom,
- Larger,
- InlineTable,
- InlineBlock,
- Blink,
- Block,
- Italic,
- LineThrough,
- XLarge,
- Large,
- Left,
- TextTop,
-};
-
-// Any entries added/removed here, will need to be mirrored in
-// propertyTable, in core/fxcrt/css/cfx_cssdata.cpp.
+#undef CSS_PROP____
+#define CSS_PROP____(a, b, c, d) a,
enum class CFX_CSSProperty : uint8_t {
- BorderLeft = 0,
- Top,
- Margin,
- TextIndent,
- Right,
- PaddingLeft,
- MarginLeft,
- Border,
- BorderTop,
- Bottom,
- PaddingRight,
- BorderBottom,
- FontFamily,
- FontWeight,
- Color,
- LetterSpacing,
- TextAlign,
- BorderRightWidth,
- VerticalAlign,
- PaddingTop,
- FontVariant,
- BorderWidth,
- BorderBottomWidth,
- BorderRight,
- FontSize,
- BorderSpacing,
- FontStyle,
- Font,
- LineHeight,
- MarginRight,
- BorderLeftWidth,
- Display,
- PaddingBottom,
- BorderTopWidth,
- WordSpacing,
- Left,
- TextDecoration,
- Padding,
- MarginBottom,
- MarginTop,
+#include "core/fxcrt/css/properties.inc"
};
+#undef CSS_PROP____
+
+#undef CSS_PROP_VALUE____
+#define CSS_PROP_VALUE____(a, b, c) a,
+enum class CFX_CSSPropertyValue : uint8_t {
+#include "core/fxcrt/css/property_values.inc"
+};
+#undef CSS_PROP_VALUE____
enum class CFX_CSSLengthUnit : uint8_t {
Auto,
diff --git a/core/fxcrt/css/cfx_cssdata.cpp b/core/fxcrt/css/cfx_cssdata.cpp
index dca0719..5789b09 100644
--- a/core/fxcrt/css/cfx_cssdata.cpp
+++ b/core/fxcrt/css/cfx_cssdata.cpp
@@ -16,246 +16,19 @@
namespace {
-#undef PROP
-#define PROP(a, b, c, d) a, c, d
-
+#undef CSS_PROP____
+#define CSS_PROP____(a, b, c, d) {CFX_CSSProperty::a, c, d},
const CFX_CSSData::Property propertyTable[] = {
- {PROP(CFX_CSSProperty::BorderLeft,
- "border-left",
- 0x04080036,
- CFX_CSSVALUETYPE_Shorthand)},
- {PROP(CFX_CSSProperty::Top,
- "top",
- 0x0BEDAF33,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::Margin,
- "margin",
- 0x0CB016BE,
- CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::TextIndent,
- "text-indent",
- 0x169ADB74,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::Right,
- "right",
- 0x193ADE3E,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::PaddingLeft,
- "padding-left",
- 0x228CF02F,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::MarginLeft,
- "margin-left",
- 0x297C5656,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
- CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::Border,
- "border",
- 0x2A23349E,
- CFX_CSSVALUETYPE_Shorthand)},
- {PROP(CFX_CSSProperty::BorderTop,
- "border-top",
- 0x2B866ADE,
- CFX_CSSVALUETYPE_Shorthand)},
- {PROP(CFX_CSSProperty::Bottom,
- "bottom",
- 0x399F02B5,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::PaddingRight,
- "padding-right",
- 0x3F616AC2,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::BorderBottom,
- "border-bottom",
- 0x452CE780,
- CFX_CSSVALUETYPE_Shorthand)},
- {PROP(CFX_CSSProperty::FontFamily,
- "font-family",
- 0x574686E6,
- CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeString)},
- {PROP(CFX_CSSProperty::FontWeight,
- "font-weight",
- 0x6692F60C,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::Color,
- "color",
- 0x6E67921F,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeColor)},
- {PROP(CFX_CSSProperty::LetterSpacing,
- "letter-spacing",
- 0x70536102,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::TextAlign,
- "text-align",
- 0x7553F1BD,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::BorderRightWidth,
- "border-right-width",
- 0x8F5A6036,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::VerticalAlign,
- "vertical-align",
- 0x934A87D2,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::PaddingTop,
- "padding-top",
- 0x959D22B7,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::FontVariant,
- "font-variant",
- 0x9C785779,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::BorderWidth,
- "border-width",
- 0xA8DE4FEB,
- CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::BorderBottomWidth,
- "border-bottom-width",
- 0xAE41204D,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::BorderRight,
- "border-right",
- 0xB78E9EA9,
- CFX_CSSVALUETYPE_Shorthand)},
- {PROP(CFX_CSSProperty::FontSize,
- "font-size",
- 0xB93956DF,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::BorderSpacing,
- "border-spacing",
- 0xC72030F0,
- CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::FontStyle,
- "font-style",
- 0xCB1950F5,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::Font,
- "font",
- 0xCD308B77,
- CFX_CSSVALUETYPE_Shorthand)},
- {PROP(CFX_CSSProperty::LineHeight,
- "line-height",
- 0xCFCACE2E,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::MarginRight,
- "margin-right",
- 0xD13C58C9,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
- CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::BorderLeftWidth,
- "border-left-width",
- 0xD1E93D83,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::Display,
- "display",
- 0xD4224C36,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::PaddingBottom,
- "padding-bottom",
- 0xE555B3B9,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::BorderTopWidth,
- "border-top-width",
- 0xED2CB62B,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::WordSpacing,
- "word-spacing",
- 0xEDA63BAE,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::Left,
- "left",
- 0xF5AD782B,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
- CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::TextDecoration,
- "text-decoration",
- 0xF7C634BA,
- CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::Padding,
- "padding",
- 0xF8C373F7,
- CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeNumber)},
- {PROP(CFX_CSSProperty::MarginBottom,
- "margin-bottom",
- 0xF93485A0,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
- CFX_CSSVALUETYPE_MaybeEnum)},
- {PROP(CFX_CSSProperty::MarginTop,
- "margin-top",
- 0xFE51DCFE,
- CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
- CFX_CSSVALUETYPE_MaybeEnum)},
+#include "core/fxcrt/css/properties.inc"
};
+#undef CSS_PROP____
-#undef PROP
-
-#undef PVAL
-#define PVAL(a, b, c) a, c
-
+#undef CSS_PROP_VALUE____
+#define CSS_PROP_VALUE____(a, b, c) {CFX_CSSPropertyValue::a, c},
const CFX_CSSData::PropertyValue propertyValueTable[] = {
- {PVAL(CFX_CSSPropertyValue::Bolder, "bolder", 0x009F1058)},
- {PVAL(CFX_CSSPropertyValue::None, "none", 0x048B6670)},
- {PVAL(CFX_CSSPropertyValue::Dot, "dot", 0x0A48CB27)},
- {PVAL(CFX_CSSPropertyValue::Sub, "sub", 0x0BD37FAA)},
- {PVAL(CFX_CSSPropertyValue::Top, "top", 0x0BEDAF33)},
- {PVAL(CFX_CSSPropertyValue::Right, "right", 0x193ADE3E)},
- {PVAL(CFX_CSSPropertyValue::Normal, "normal", 0x247CF3E9)},
- {PVAL(CFX_CSSPropertyValue::Auto, "auto", 0x2B35B6D9)},
- {PVAL(CFX_CSSPropertyValue::Text, "text", 0x2D08AF85)},
- {PVAL(CFX_CSSPropertyValue::XSmall, "x-small", 0x2D2FCAFE)},
- {PVAL(CFX_CSSPropertyValue::Thin, "thin", 0x2D574D53)},
- {PVAL(CFX_CSSPropertyValue::Small, "small", 0x316A3739)},
- {PVAL(CFX_CSSPropertyValue::Bottom, "bottom", 0x399F02B5)},
- {PVAL(CFX_CSSPropertyValue::Underline, "underline", 0x3A0273A6)},
- {PVAL(CFX_CSSPropertyValue::Double, "double", 0x3D98515B)},
- {PVAL(CFX_CSSPropertyValue::Lighter, "lighter", 0x45BEB7AF)},
- {PVAL(CFX_CSSPropertyValue::Oblique, "oblique", 0x53EBDDB1)},
- {PVAL(CFX_CSSPropertyValue::Super, "super", 0x6A4F842F)},
- {PVAL(CFX_CSSPropertyValue::Center, "center", 0x6C51AFC1)},
- {PVAL(CFX_CSSPropertyValue::XxLarge, "xx-large", 0x70BB1508)},
- {PVAL(CFX_CSSPropertyValue::Smaller, "smaller", 0x849769F0)},
- {PVAL(CFX_CSSPropertyValue::Baseline, "baseline", 0x87436BA3)},
- {PVAL(CFX_CSSPropertyValue::Thick, "thick", 0x8CC35EB3)},
- {PVAL(CFX_CSSPropertyValue::Justify, "justify", 0x8D269CAE)},
- {PVAL(CFX_CSSPropertyValue::Middle, "middle", 0x947FA00F)},
- {PVAL(CFX_CSSPropertyValue::Medium, "medium", 0xA084A381)},
- {PVAL(CFX_CSSPropertyValue::ListItem, "list-item", 0xA32382B8)},
- {PVAL(CFX_CSSPropertyValue::XxSmall, "xx-small", 0xADE1FC76)},
- {PVAL(CFX_CSSPropertyValue::Bold, "bold", 0xB18313A1)},
- {PVAL(CFX_CSSPropertyValue::SmallCaps, "small-caps", 0xB299428D)},
- {PVAL(CFX_CSSPropertyValue::Inline, "inline", 0xC02D649F)},
- {PVAL(CFX_CSSPropertyValue::Overline, "overline", 0xC0EC9FA4)},
- {PVAL(CFX_CSSPropertyValue::TextBottom, "text-bottom", 0xC7D08D87)},
- {PVAL(CFX_CSSPropertyValue::Larger, "larger", 0xCD3C409D)},
- {PVAL(CFX_CSSPropertyValue::InlineTable, "inline-table", 0xD131F494)},
- {PVAL(CFX_CSSPropertyValue::InlineBlock, "inline-block", 0xD26A8BD7)},
- {PVAL(CFX_CSSPropertyValue::Blink, "blink", 0xDC36E390)},
- {PVAL(CFX_CSSPropertyValue::Block, "block", 0xDCD480AB)},
- {PVAL(CFX_CSSPropertyValue::Italic, "italic", 0xE31D5396)},
- {PVAL(CFX_CSSPropertyValue::LineThrough, "line-through", 0xE4C5A276)},
- {PVAL(CFX_CSSPropertyValue::XLarge, "x-large", 0xF008E390)},
- {PVAL(CFX_CSSPropertyValue::Large, "large", 0xF4434FCB)},
- {PVAL(CFX_CSSPropertyValue::Left, "left", 0xF5AD782B)},
- {PVAL(CFX_CSSPropertyValue::TextTop, "text-top", 0xFCB58D45)},
+#include "core/fxcrt/css/property_values.inc"
};
-
-#undef PVAL
+#undef CSS_PROP_VALUE____
const CFX_CSSData::LengthUnit lengthUnitTable[] = {
{L"cm", CFX_CSSNumberValue::Unit::kCentiMeters},
diff --git a/core/fxcrt/css/cfx_cssdata_unittest.cpp b/core/fxcrt/css/cfx_cssdata_unittest.cpp
new file mode 100644
index 0000000..98a985e
--- /dev/null
+++ b/core/fxcrt/css/cfx_cssdata_unittest.cpp
@@ -0,0 +1,34 @@
+// Copyright 2022 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/fxcrt/css/cfx_cssdata.h"
+
+#include "core/fxcrt/bytestring.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+TEST(CSSDataTest, PropertyHashes) {
+ uint32_t max_hash = 0;
+#undef CSS_PROP____
+#define CSS_PROP____(a, b, c, d) \
+ { \
+ EXPECT_EQ(FX_HashCode_GetAsIfW(b), static_cast<uint32_t>(c)) << b; \
+ EXPECT_GT(static_cast<uint32_t>(c), max_hash) << b; \
+ max_hash = c; \
+ }
+#include "core/fxcrt/css/properties.inc"
+#undef CSS_PROP____
+}
+
+TEST(CSSDataTest, PropertyValueHashes) {
+ uint32_t max_hash = 0;
+#undef CSS_PROP_VALUE____
+#define CSS_PROP_VALUE____(a, b, c) \
+ { \
+ EXPECT_EQ(FX_HashCode_GetAsIfW(b), static_cast<uint32_t>(c)) << b; \
+ EXPECT_GT(static_cast<uint32_t>(c), max_hash) << b; \
+ max_hash = c; \
+ }
+#include "core/fxcrt/css/property_values.inc"
+#undef CSS_PROP_VALUE____
+}
diff --git a/core/fxcrt/css/properties.inc b/core/fxcrt/css/properties.inc
new file mode 100644
index 0000000..03aa6ad
--- /dev/null
+++ b/core/fxcrt/css/properties.inc
@@ -0,0 +1,188 @@
+// Copyright 2022 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+CSS_PROP____(BorderLeft,
+ "border-left",
+ 0x04080036,
+ CFX_CSSVALUETYPE_Shorthand)
+CSS_PROP____(Top,
+ "top",
+ 0x0BEDAF33,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(Margin,
+ "margin",
+ 0x0CB016BE,
+ CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(TextIndent,
+ "text-indent",
+ 0x169ADB74,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(Right,
+ "right",
+ 0x193ADE3E,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(PaddingLeft,
+ "padding-left",
+ 0x228CF02F,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(MarginLeft,
+ "margin-left",
+ 0x297C5656,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
+ CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(Border,
+ "border",
+ 0x2A23349E,
+ CFX_CSSVALUETYPE_Shorthand)
+CSS_PROP____(BorderTop,
+ "border-top",
+ 0x2B866ADE,
+ CFX_CSSVALUETYPE_Shorthand)
+CSS_PROP____(Bottom,
+ "bottom",
+ 0x399F02B5,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(PaddingRight,
+ "padding-right",
+ 0x3F616AC2,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(BorderBottom,
+ "border-bottom",
+ 0x452CE780,
+ CFX_CSSVALUETYPE_Shorthand)
+CSS_PROP____(FontFamily,
+ "font-family",
+ 0x574686E6,
+ CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeString)
+CSS_PROP____(FontWeight,
+ "font-weight",
+ 0x6692F60C,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(Color,
+ "color",
+ 0x6E67921F,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeColor)
+CSS_PROP____(LetterSpacing,
+ "letter-spacing",
+ 0x70536102,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(TextAlign,
+ "text-align",
+ 0x7553F1BD,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(BorderRightWidth,
+ "border-right-width",
+ 0x8F5A6036,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(VerticalAlign,
+ "vertical-align",
+ 0x934A87D2,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(PaddingTop,
+ "padding-top",
+ 0x959D22B7,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(FontVariant,
+ "font-variant",
+ 0x9C785779,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(BorderWidth,
+ "border-width",
+ 0xA8DE4FEB,
+ CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(BorderBottomWidth,
+ "border-bottom-width",
+ 0xAE41204D,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(BorderRight,
+ "border-right",
+ 0xB78E9EA9,
+ CFX_CSSVALUETYPE_Shorthand)
+CSS_PROP____(FontSize,
+ "font-size",
+ 0xB93956DF,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(BorderSpacing,
+ "border-spacing",
+ 0xC72030F0,
+ CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(FontStyle,
+ "font-style",
+ 0xCB1950F5,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(Font,
+ "font",
+ 0xCD308B77,
+ CFX_CSSVALUETYPE_Shorthand)
+CSS_PROP____(LineHeight,
+ "line-height",
+ 0xCFCACE2E,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(MarginRight,
+ "margin-right",
+ 0xD13C58C9,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
+ CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(BorderLeftWidth,
+ "border-left-width",
+ 0xD1E93D83,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(Display,
+ "display",
+ 0xD4224C36,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(PaddingBottom,
+ "padding-bottom",
+ 0xE555B3B9,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(BorderTopWidth,
+ "border-top-width",
+ 0xED2CB62B,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(WordSpacing,
+ "word-spacing",
+ 0xEDA63BAE,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(Left,
+ "left",
+ 0xF5AD782B,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeEnum |
+ CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(TextDecoration,
+ "text-decoration",
+ 0xF7C634BA,
+ CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(Padding,
+ "padding",
+ 0xF8C373F7,
+ CFX_CSSVALUETYPE_List | CFX_CSSVALUETYPE_MaybeNumber)
+CSS_PROP____(MarginBottom,
+ "margin-bottom",
+ 0xF93485A0,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
+ CFX_CSSVALUETYPE_MaybeEnum)
+CSS_PROP____(MarginTop,
+ "margin-top",
+ 0xFE51DCFE,
+ CFX_CSSVALUETYPE_Primitive | CFX_CSSVALUETYPE_MaybeNumber |
+ CFX_CSSVALUETYPE_MaybeEnum)
+
diff --git a/core/fxcrt/css/property_values.inc b/core/fxcrt/css/property_values.inc
new file mode 100644
index 0000000..2a5ad01
--- /dev/null
+++ b/core/fxcrt/css/property_values.inc
@@ -0,0 +1,50 @@
+// Copyright 2022 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+CSS_PROP_VALUE____(Bolder, "bolder", 0x009F1058)
+CSS_PROP_VALUE____(None, "none", 0x048B6670)
+CSS_PROP_VALUE____(Dot, "dot", 0x0A48CB27)
+CSS_PROP_VALUE____(Sub, "sub", 0x0BD37FAA)
+CSS_PROP_VALUE____(Top, "top", 0x0BEDAF33)
+CSS_PROP_VALUE____(Right, "right", 0x193ADE3E)
+CSS_PROP_VALUE____(Normal, "normal", 0x247CF3E9)
+CSS_PROP_VALUE____(Auto, "auto", 0x2B35B6D9)
+CSS_PROP_VALUE____(Text, "text", 0x2D08AF85)
+CSS_PROP_VALUE____(XSmall, "x-small", 0x2D2FCAFE)
+CSS_PROP_VALUE____(Thin, "thin", 0x2D574D53)
+CSS_PROP_VALUE____(Small, "small", 0x316A3739)
+CSS_PROP_VALUE____(Bottom, "bottom", 0x399F02B5)
+CSS_PROP_VALUE____(Underline, "underline", 0x3A0273A6)
+CSS_PROP_VALUE____(Double, "double", 0x3D98515B)
+CSS_PROP_VALUE____(Lighter, "lighter", 0x45BEB7AF)
+CSS_PROP_VALUE____(Oblique, "oblique", 0x53EBDDB1)
+CSS_PROP_VALUE____(Super, "super", 0x6A4F842F)
+CSS_PROP_VALUE____(Center, "center", 0x6C51AFC1)
+CSS_PROP_VALUE____(XxLarge, "xx-large", 0x70BB1508)
+CSS_PROP_VALUE____(Smaller, "smaller", 0x849769F0)
+CSS_PROP_VALUE____(Baseline, "baseline", 0x87436BA3)
+CSS_PROP_VALUE____(Thick, "thick", 0x8CC35EB3)
+CSS_PROP_VALUE____(Justify, "justify", 0x8D269CAE)
+CSS_PROP_VALUE____(Middle, "middle", 0x947FA00F)
+CSS_PROP_VALUE____(Medium, "medium", 0xA084A381)
+CSS_PROP_VALUE____(ListItem, "list-item", 0xA32382B8)
+CSS_PROP_VALUE____(XxSmall, "xx-small", 0xADE1FC76)
+CSS_PROP_VALUE____(Bold, "bold", 0xB18313A1)
+CSS_PROP_VALUE____(SmallCaps, "small-caps", 0xB299428D)
+CSS_PROP_VALUE____(Inline, "inline", 0xC02D649F)
+CSS_PROP_VALUE____(Overline, "overline", 0xC0EC9FA4)
+CSS_PROP_VALUE____(TextBottom, "text-bottom", 0xC7D08D87)
+CSS_PROP_VALUE____(Larger, "larger", 0xCD3C409D)
+CSS_PROP_VALUE____(InlineTable, "inline-table", 0xD131F494)
+CSS_PROP_VALUE____(InlineBlock, "inline-block", 0xD26A8BD7)
+CSS_PROP_VALUE____(Blink, "blink", 0xDC36E390)
+CSS_PROP_VALUE____(Block, "block", 0xDCD480AB)
+CSS_PROP_VALUE____(Italic, "italic", 0xE31D5396)
+CSS_PROP_VALUE____(LineThrough, "line-through", 0xE4C5A276)
+CSS_PROP_VALUE____(XLarge, "x-large", 0xF008E390)
+CSS_PROP_VALUE____(Large, "large", 0xF4434FCB)
+CSS_PROP_VALUE____(Left, "left", 0xF5AD782B)
+CSS_PROP_VALUE____(TextTop, "text-top", 0xFCB58D45)