From f1300bb98b0267b552a3f12e64e30f2f414213a3 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 26 Jul 2019 21:54:42 +0200 Subject: [PATCH 1/3] Auto-generate CSSStyleDeclaration.webidl for CSS properties based on the style crate --- components/script/CMakeLists.txt | 8 +- components/script/build.rs | 9 +- .../script/dom/bindings/codegen/GlobalGen.py | 61 ++- .../dom/bindings/codegen/parser/WebIDL.py | 2 +- .../dom/webidls/CSSStyleDeclaration.webidl | 477 +----------------- components/style/Cargo.toml | 2 +- components/style/properties/build.py | 9 + 7 files changed, 83 insertions(+), 485 deletions(-) diff --git a/components/script/CMakeLists.txt b/components/script/CMakeLists.txt index 5cf4071a144..3bb3f2d5dbb 100644 --- a/components/script/CMakeLists.txt +++ b/components/script/CMakeLists.txt @@ -41,13 +41,11 @@ set(globalgen_deps ${bindings_src}/Configuration.py ${bindings_src}/CodegenRust.py ${bindings_src}/parser/WebIDL.py + ${PROJECT_BINARY_DIR}/css_properties.json ) set(bindinggen_deps + ${globalgen_deps} ${bindings_src}/BindingGen.py - ${bindings_src}/Bindings.conf - ${bindings_src}/Configuration.py - ${bindings_src}/CodegenRust.py - ${bindings_src}/parser/WebIDL.py ) add_custom_command( @@ -71,6 +69,7 @@ add_custom_command( ${bindings_src}/Bindings.conf . ${PROJECT_SOURCE_DIR} + ${PROJECT_BINARY_DIR}/css_properties.json DEPENDS Bindings _cache ${globalgen_deps} ${webidls} VERBATIM ) @@ -85,6 +84,7 @@ add_custom_command( ${bindings_src}/Bindings.conf . ${PROJECT_SOURCE_DIR} + ${PROJECT_BINARY_DIR}/css_properties.json DEPENDS _cache ${globalgen_deps} ${webidls} VERBATIM ) diff --git a/components/script/build.rs b/components/script/build.rs index 1b8ed578387..1af9fbf7648 100644 --- a/components/script/build.rs +++ b/components/script/build.rs @@ -15,6 +15,13 @@ use std::time::Instant; fn main() { let start = Instant::now(); + let style_out_dir = PathBuf::from(env::var_os("DEP_SERVO_STYLE_CRATE_OUT_DIR").unwrap()); + let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap()); + let build_dir = out_dir.join("build"); + let json = "css_properties.json"; + let _ = std::fs::create_dir(&build_dir); // Ignore errors: they most likely indicate it already exists + std::fs::copy(style_out_dir.join(json), build_dir.join(json)).unwrap(); + // This must use the Ninja generator -- it's the only one that // parallelizes cmake's output properly. (Cmake generates // separate makefiles, each of which try to build @@ -35,7 +42,7 @@ fn main() { start.elapsed().as_secs() ); - let json = PathBuf::from(env::var_os("OUT_DIR").unwrap()) + let json = out_dir .join("build") .join("InterfaceObjectMapData.json"); let json: Value = serde_json::from_reader(File::open(&json).unwrap()).unwrap(); diff --git a/components/script/dom/bindings/codegen/GlobalGen.py b/components/script/dom/bindings/codegen/GlobalGen.py index 20dea28a9d1..9fe736e71fd 100644 --- a/components/script/dom/bindings/codegen/GlobalGen.py +++ b/components/script/dom/bindings/codegen/GlobalGen.py @@ -7,6 +7,7 @@ import sys import os +import json sys.path.append(os.path.join(".", "parser")) sys.path.append(os.path.join(".", "ply")) import WebIDL @@ -28,7 +29,7 @@ def generate_file(config, name, filename): def main(): # Parse arguments. from optparse import OptionParser - usageString = "usage: %prog [options] configFile outputdir webidldir [files]" + usageString = "usage: %prog [options] configFile outputdir webidldir cssProperties.json [files]" o = OptionParser(usage=usageString) o.add_option("--cachedir", dest='cachedir', default=None, help="Directory in which to cache lex/parse tables.") @@ -44,8 +45,9 @@ def main(): configFile = args[0] outputdir = args[1] baseDir = args[2] + css_properties_json = args[3] if options.filelist is not None: - fileList = (l.strip() for l in open(options.filelist).xreadlines()) + fileList = [l.strip() for l in open(options.filelist).xreadlines()] else: fileList = args[3:] @@ -56,6 +58,9 @@ def main(): with open(fullPath, 'rb') as f: lines = f.readlines() parser.parse(''.join(lines), fullPath) + + add_css_properties_attributes(fileList, css_properties_json, parser) + parserResults = parser.finish() if not options.only_html: @@ -86,5 +91,57 @@ def main(): for name, filename in to_generate: generate_file(config, name, os.path.join(outputdir, filename)) + +def add_css_properties_attributes(webidl_files, css_properties_json, parser): + for filename in webidl_files: + if os.path.basename(filename) == "CSSStyleDeclaration.webidl": + break + else: + return + + css_properties = json.load(open(css_properties_json, "rb")) + idl = "partial interface CSSStyleDeclaration {\n%s\n};\n" % "\n".join( + " [%sCEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString %s;" % ( + ('Pref="%s", ' % pref if pref else ""), + attribute_name + ) + for (property_name, pref) in css_properties + for attribute_name in attribute_names(property_name) + ) + parser.parse(idl.encode("utf-8"), "CSSStyleDeclaration_generated.webidl") + + +def attribute_names(property_name): + # https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-dashed-attribute + if property_name != "float": + yield property_name + else: + yield "_float" + + # https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-camel-cased-attribute + if "-" in property_name: + yield "".join(camel_case(property_name)) + + # https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-webkit-cased-attribute + if property_name.startswith("-webkit-"): + yield "".join(camel_case(property_name), True) + + +# https://drafts.csswg.org/cssom/#css-property-to-idl-attribute +def camel_case(chars, webkit_prefixed=False): + if webkit_prefixed: + chars = chars[1:] + next_is_uppercase = False + for c in chars: + if c == '-': + next_is_uppercase = True + elif next_is_uppercase: + next_is_uppercase = False + # Should be ASCII-uppercase, but all non-custom CSS property names are within ASCII + yield c.upper() + else: + yield c + + if __name__ == '__main__': main() diff --git a/components/script/dom/bindings/codegen/parser/WebIDL.py b/components/script/dom/bindings/codegen/parser/WebIDL.py index 7ea8423e860..edfdcf9d745 100644 --- a/components/script/dom/bindings/codegen/parser/WebIDL.py +++ b/components/script/dom/bindings/codegen/parser/WebIDL.py @@ -3344,7 +3344,7 @@ class IDLBuiltinType(IDLType): [self.location, attribute.location]) assert not self.nullable() if not attribute.hasValue(): - raise WebIDLError("[TreatNullAs] must take an identifier argument" + raise WebIDLError("[TreatNullAs] must take an identifier argument", [attribute.location]) value = attribute.value() if value != 'EmptyString': diff --git a/components/script/dom/webidls/CSSStyleDeclaration.webidl b/components/script/dom/webidls/CSSStyleDeclaration.webidl index a49d3ec465a..7865195360f 100644 --- a/components/script/dom/webidls/CSSStyleDeclaration.webidl +++ b/components/script/dom/webidls/CSSStyleDeclaration.webidl @@ -26,479 +26,4 @@ interface CSSStyleDeclaration { attribute DOMString cssFloat; }; -partial interface CSSStyleDeclaration { - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString all; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundPosition; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-position; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundPositionX; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-position-x; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundPositionY; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-position-y; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundRepeat; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-repeat; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundImage; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-image; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundAttachment; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-attachment; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundSize; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundOrigin; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-origin; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backgroundClip; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString background-clip; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderSpacing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-spacing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBottom; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-bottom; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBottomColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-bottom-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBottomLeftRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-bottom-left-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBottomRightRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-bottom-right-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBottomStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-bottom-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBottomWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-bottom-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderLeft; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-left; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderLeftColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-left-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderLeftStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-left-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderLeftWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-left-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderRight; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-right; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderRightColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-right-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderRightStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-right-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderRightWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-right-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderTop; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-top; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderTopColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-top-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderTopLeftRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-top-left-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderTopRightRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-top-right-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderTopStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-top-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderTopWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-top-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-image-source; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderImageSource; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-image-slice; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderImageSlice; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-image-repeat; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderImageRepeat; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-image-outset; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderImageOutset; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-image-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderImageWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-image; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderImage; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-start-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockStartColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-start-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockStartWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-start-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockStartStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-end-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockEndColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-end-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockEndWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-end-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockEndStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlockStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-block; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderBlock; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-start-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineStartColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-start-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineStartWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-start-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineStartStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-end-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineEndColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-end-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineEndWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-end-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineEndStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInlineEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-inline; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderInline; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString content; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString color; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString display; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString opacity; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString visibility; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString cursor; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString boxSizing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString box-sizing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString boxShadow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString box-shadow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textShadow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-shadow; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString _float; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString clear; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString clip; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transform; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transformOrigin; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transform-origin; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString perspective; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString perspectiveOrigin; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString perspective-origin; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transformStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transform-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backfaceVisibility; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString backface-visibility; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString rotate; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString scale; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString translate; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString direction; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString unicodeBidi; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString unicode-bidi; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString filter; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inset; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString lineHeight; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString line-height; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString mixBlendMode; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString mix-blend-mode; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString verticalAlign; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString vertical-align; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString listStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString list-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString listStylePosition; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString list-style-position; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString listStyleType; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString list-style-type; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString listStyleImage; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString list-style-image; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString quotes; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString counterIncrement; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString counter-increment; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString counterReset; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString counter-reset; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflow; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflowBlock; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflow-block; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflowInline; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflow-inline; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflowX; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflow-x; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflowY; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflow-y; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflowWrap; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString overflow-wrap; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString tableLayout; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString table-layout; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderCollapse; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-collapse; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString emptyCells; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString empty-cells; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString captionSide; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString caption-side; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString whiteSpace; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString white-space; - - [Pref="layout.writing-mode.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString writingMode; - [Pref="layout.writing-mode.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString writing-mode; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString letterSpacing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString letter-spacing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString wordBreak; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString word-break; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString wordSpacing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString word-spacing; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString wordWrap; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString word-wrap; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textOverflow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-overflow; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textAlign; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-align; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textDecoration; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-decoration; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textDecorationLine; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-decoration-line; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textIndent; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-indent; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textJustify; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-justify; - // [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textOrientation; - // [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-orientation; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textRendering; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-rendering; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString textTransform; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString text-transform; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString fontFamily; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font-family; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString fontSize; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString fontStretch; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font-stretch; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString fontStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString fontVariant; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font-variant; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString fontVariantCaps; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font-variant-caps; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString fontWeight; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString font-weight; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginBottom; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-bottom; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginLeft; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-left; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginRight; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-right; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginTop; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-top; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-block-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginBlockStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-block-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginBlockEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-block; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginBlock; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-inline-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginInlineStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-inline-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginInlineEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString margin-inline; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString marginInline; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingBottom; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-bottom; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingLeft; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-left; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingRight; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-right; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingTop; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-top; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-block-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingBlockStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-block-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingBlockEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-block; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingBlock; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-inline-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingInlineStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-inline-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingInlineEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString padding-inline; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString paddingInline; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outline; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outlineColor; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outline-color; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outlineStyle; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outline-style; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outlineWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outline-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outlineOffset; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString outline-offset; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString position; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString pointerEvents; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString pointer-events; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString top; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString right; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString left; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString bottom; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offset-block-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offsetBlockStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offset-block-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offsetBlockEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offset-inline-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offsetInlineStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offset-inline-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString offsetInlineEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inset-block-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString insetBlockStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inset-block-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString insetBlockEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inset-block; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString insetBlock; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inset-inline-start; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString insetInlineStart; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inset-inline-end; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString insetInlineEnd; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inset-inline; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString insetInline; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString height; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString minHeight; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString min-height; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString maxHeight; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString max-height; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString minWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString min-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString maxWidth; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString max-width; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString block-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString blockSize; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inline-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString inlineSize; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString max-block-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString maxBlockSize; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString max-inline-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString maxInlineSize; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString min-block-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString minBlockSize; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString min-inline-size; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString minInlineSize; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString zIndex; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString z-index; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString imageRendering; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString image-rendering; - - [Pref="layout.columns.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString columnCount; - [Pref="layout.columns.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString column-count; - [Pref="layout.columns.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString columnWidth; - [Pref="layout.columns.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString column-width; - [Pref="layout.columns.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString columns; - [Pref="layout.columns.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString columnGap; - [Pref="layout.columns.enabled", CEReactions, SetterThrows] - attribute [TreatNullAs=EmptyString] DOMString column-gap; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transition; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transitionDuration; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transition-duration; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transitionTimingFunction; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transition-timing-function; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transitionProperty; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transition-property; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transitionDelay; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString transition-delay; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flex; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flexFlow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flex-flow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flexDirection; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flex-direction; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flexWrap; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flex-wrap; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString justifyContent; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString justify-content; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString alignItems; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString align-items; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString alignContent; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString align-content; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString order; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flexBasis; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flex-basis; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flexGrow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flex-grow; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flexShrink; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString flex-shrink; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString alignSelf; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString align-self; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-name; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationName; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-duration; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationDuration; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-timing-function; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationTimingFunction; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-iteration-count; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationIterationCount; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-direction; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationDirection; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-play-state; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationPlayState; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-fill-mode; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationFillMode; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animation-delay; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString animationDelay; - - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-end-end-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderEndEndRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-start-end-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderStartEndRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-start-start-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderStartStartRadius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border-end-start-radius; - [CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString borderEndStartRadius; - -}; +// Auto-generated in GlobalGen.py: accessors for each CSS property diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml index d276c5fbc6c..acce17d243b 100644 --- a/components/style/Cargo.toml +++ b/components/style/Cargo.toml @@ -8,7 +8,7 @@ publish = false build = "build.rs" # https://github.com/rust-lang/cargo/issues/3544 -links = "for some reason the links key is required to pass data around between build scripts" +links = "servo_style_crate" [lib] name = "style" diff --git a/components/style/properties/build.py b/components/style/properties/build.py index 1967ed3238a..6ee5220857c 100644 --- a/components/style/properties/build.py +++ b/components/style/properties/build.py @@ -94,6 +94,15 @@ def main(): template = os.path.join(BASE, "gecko.mako.rs") rust = render(template, data=properties) write(OUT_DIR, "gecko_properties.rs", rust) + + if product == "servo": + names_and_prefs = [ + (prop.name, prop.servo_pref) + for p in properties.longhands + properties.shorthands + if p.enabled_in_content() + for prop in [p] + p.alias + ] + write(OUT_DIR, "css_properties.json", json.dumps(names_and_prefs, indent=4)) elif output == "geckolib": if len(sys.argv) < 4: abort(usage) From ddb4e369ddb8d9bb20142d34e320370cd3be196f Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 25 Jul 2019 19:39:32 +0200 Subject: [PATCH 2/3] Stylo: replace product={gecko,servo} with engine={gecko,servo-2013,servo-2020} Renaming the variable helped make sure I looked at every use. --- components/layout/Cargo.toml | 2 +- components/script/build.rs | 4 +- components/style/Cargo.toml | 3 +- components/style/build.rs | 20 ++- components/style/properties/build.py | 29 ++-- components/style/properties/cascade.rs | 9 +- components/style/properties/data.py | 155 +++++++++++------- components/style/properties/helpers.mako.rs | 71 ++++---- .../helpers/animated_properties.mako.rs | 6 +- .../properties/longhands/background.mako.rs | 15 +- .../style/properties/longhands/border.mako.rs | 23 ++- .../style/properties/longhands/box.mako.rs | 112 +++++++++---- .../style/properties/longhands/column.mako.rs | 18 +- .../properties/longhands/counters.mako.rs | 6 +- .../properties/longhands/effects.mako.rs | 12 +- .../style/properties/longhands/font.mako.rs | 59 ++++--- .../longhands/inherited_box.mako.rs | 22 ++- .../longhands/inherited_svg.mako.rs | 44 ++--- .../longhands/inherited_table.mako.rs | 5 + .../longhands/inherited_text.mako.rs | 61 ++++--- .../properties/longhands/inherited_ui.mako.rs | 13 +- .../style/properties/longhands/list.mako.rs | 26 ++- .../style/properties/longhands/margin.mako.rs | 6 +- .../properties/longhands/outline.mako.rs | 9 +- .../properties/longhands/padding.mako.rs | 6 +- .../properties/longhands/position.mako.rs | 69 ++++++-- .../style/properties/longhands/svg.mako.rs | 46 +++--- .../style/properties/longhands/table.mako.rs | 3 +- .../style/properties/longhands/text.mako.rs | 12 +- .../style/properties/longhands/ui.mako.rs | 18 +- .../style/properties/longhands/xul.mako.rs | 17 +- .../style/properties/properties.mako.rs | 46 ++++-- .../properties/shorthands/background.mako.rs | 2 + .../properties/shorthands/border.mako.rs | 48 ++++-- .../style/properties/shorthands/box.mako.rs | 12 +- .../properties/shorthands/column.mako.rs | 11 +- .../style/properties/shorthands/font.mako.rs | 74 +++++---- .../shorthands/inherited_svg.mako.rs | 7 +- .../shorthands/inherited_text.mako.rs | 9 +- .../style/properties/shorthands/list.mako.rs | 9 +- .../properties/shorthands/margin.mako.rs | 9 +- .../properties/shorthands/outline.mako.rs | 14 +- .../properties/shorthands/padding.mako.rs | 9 +- .../properties/shorthands/position.mako.rs | 83 ++++++---- .../style/properties/shorthands/svg.mako.rs | 6 +- .../style/properties/shorthands/text.mako.rs | 18 +- components/style/style_adjuster.rs | 2 +- components/style/values/computed/text.rs | 11 +- components/style/values/specified/border.rs | 7 + components/style/values/specified/box.rs | 48 +++++- python/servo/post_build_commands.py | 11 +- tests/unit/style/properties/scaffolding.rs | 2 +- 52 files changed, 870 insertions(+), 469 deletions(-) diff --git a/components/layout/Cargo.toml b/components/layout/Cargo.toml index 1f6027eab24..9fd616bd679 100644 --- a/components/layout/Cargo.toml +++ b/components/layout/Cargo.toml @@ -49,7 +49,7 @@ serde_json = "1.0" servo_config = {path = "../config"} servo_url = {path = "../url"} smallvec = { version = "0.6", features = ["std", "union"] } -style = {path = "../style", features = ["servo"]} +style = {path = "../style", features = ["servo", "servo-layout-2013"]} style_traits = {path = "../style_traits"} unicode-bidi = {version = "0.3", features = ["with_serde"]} unicode-script = {version = "0.3", features = ["harfbuzz"]} diff --git a/components/script/build.rs b/components/script/build.rs index 1af9fbf7648..d044b6e4fb4 100644 --- a/components/script/build.rs +++ b/components/script/build.rs @@ -42,9 +42,7 @@ fn main() { start.elapsed().as_secs() ); - let json = out_dir - .join("build") - .join("InterfaceObjectMapData.json"); + let json = out_dir.join("build").join("InterfaceObjectMapData.json"); let json: Value = serde_json::from_reader(File::open(&json).unwrap()).unwrap(); let mut map = phf_codegen::Map::new(); for (key, value) in json.as_object().unwrap() { diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml index acce17d243b..9c39a957796 100644 --- a/components/style/Cargo.toml +++ b/components/style/Cargo.toml @@ -20,7 +20,8 @@ gecko = ["style_traits/gecko", "fallible/known_system_malloc", "bindgen", "regex servo = ["serde", "style_traits/servo", "servo_atoms", "servo_config", "html5ever", "cssparser/serde", "encoding_rs", "malloc_size_of/servo", "arrayvec/use_union", "servo_url", "string_cache", "crossbeam-channel", "to_shmem/servo", "servo_arc/servo"] -"servo-layout-2020" = [] +servo-layout-2013 = [] +servo-layout-2020 = [] gecko_debug = [] gecko_refcount_logging = [] gecko_profiler = [] diff --git a/components/style/build.rs b/components/style/build.rs index 0ff8434fa1d..20b3bf5c79f 100644 --- a/components/style/build.rs +++ b/components/style/build.rs @@ -89,14 +89,19 @@ fn generate_properties() { let script = Path::new(&env::var_os("CARGO_MANIFEST_DIR").unwrap()) .join("properties") .join("build.py"); - let product = if cfg!(feature = "gecko") { - "gecko" - } else { - "servo" - }; + + #[cfg(feature = "gecko")] + let engine = "gecko"; + + #[cfg(feature = "servo-layout-2013")] + let engine = "servo-2013"; + + #[cfg(feature = "servo-layout-2020")] + let engine = "servo-2020"; + let status = Command::new(&*PYTHON) .arg(&script) - .arg(product) + .arg(engine) .arg("style-crate") .status() .unwrap(); @@ -117,6 +122,9 @@ fn main() { feature flags at the same time." ); } + if gecko && (cfg!(feature = "servo-layout-2013") || cfg!(feature = "servo-layout-2020")) { + panic!("The 'servo-layout-*' features can only be enabled together with 'servo'."); + } println!("cargo:rerun-if-changed=build.rs"); println!("cargo:out_dir={}", env::var("OUT_DIR").unwrap()); generate_properties(); diff --git a/components/style/properties/build.py b/components/style/properties/build.py index 6ee5220857c..186018e99a4 100644 --- a/components/style/properties/build.py +++ b/components/style/properties/build.py @@ -30,35 +30,36 @@ STYLE_STRUCT_LIST = [ "effects", "font", "inherited_box", + "inherited_svg", "inherited_table", "inherited_text", "inherited_ui", - "inherited_svg", "list", "margin", "outline", "padding", "position", + "svg", "table", "text", "ui", - "svg", "xul", ] def main(): - usage = ("Usage: %s [ servo | gecko ] [ style-crate | geckolib