diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /layout/style/ServoCSSPropList.mako.py | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'layout/style/ServoCSSPropList.mako.py')
-rw-r--r-- | layout/style/ServoCSSPropList.mako.py | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/layout/style/ServoCSSPropList.mako.py b/layout/style/ServoCSSPropList.mako.py new file mode 100644 index 0000000000..56061288d5 --- /dev/null +++ b/layout/style/ServoCSSPropList.mako.py @@ -0,0 +1,169 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +def _assign_slots(obj, args): + for i, attr in enumerate(obj.__slots__): + setattr(obj, attr, args[i]) + + +class Longhand(object): + __slots__ = ["name", "method", "id", "rules", "flags", "pref", "aliases"] + + def __init__(self, *args): + _assign_slots(self, args) + + @staticmethod + def type(): + return "longhand" + + +class Shorthand(object): + __slots__ = ["name", "method", "id", "rules", "flags", "pref", "subprops", "aliases"] + + def __init__(self, *args): + _assign_slots(self, args) + + @staticmethod + def type(): + return "shorthand" + + +class Alias(object): + __slots__ = ["name", "method", "alias_id", "prop_id", "rules", "flags", "pref"] + + def __init__(self, *args): + _assign_slots(self, args) + + @staticmethod + def type(): + return "alias" + +<%! +# See bug 1454823 for situation of internal flag. +def is_internal(prop): + # A property which is not controlled by pref and not enabled in + # content by default is an internal property. + return not prop.gecko_pref and not prop.enabled_in_content() + +def method(prop): + if prop.name == "float": + return "CssFloat" + if prop.name.startswith("-x-"): + return prop.camel_case[1:] + return prop.camel_case + +# TODO(emilio): Get this to zero. +LONGHANDS_NOT_SERIALIZED_WITH_SERVO = [ + # Servo serializes one value when both are the same, a few tests expect two. + "border-spacing", + + # These resolve auto to zero in a few cases, but not all. + "max-height", + "max-width", + "min-height", + "min-width", + + # resistfingerprinting stuff. + "-moz-osx-font-smoothing", + + # Layout dependent. + "width", + "height", + "grid-template-rows", + "grid-template-columns", + "perspective-origin", + "transform-origin", + "transform", + "top", + "right", + "bottom", + "left", + "border-top-width", + "border-right-width", + "border-bottom-width", + "border-left-width", + "margin-top", + "margin-right", + "margin-bottom", + "margin-left", + "padding-top", + "padding-right", + "padding-bottom", + "padding-left", +] + +def serialized_by_servo(prop): + if prop.type() == "shorthand" or prop.type() == "alias": + return True + # Keywords are all fine, except -moz-osx-font-smoothing, which does + # resistfingerprinting stuff. + if prop.keyword and prop.name != "-moz-osx-font-smoothing": + return True + return prop.name not in LONGHANDS_NOT_SERIALIZED_WITH_SERVO + +def exposed_on_getcs(prop): + if "Style" not in prop.rule_types_allowed_names(): + return False + if is_internal(prop): + return False + return True + +def rules(prop): + return ", ".join('"{}"'.format(rule) for rule in prop.rule_types_allowed_names()) + +RUST_TO_CPP_FLAGS = { + "CAN_ANIMATE_ON_COMPOSITOR": "CanAnimateOnCompositor", + "AFFECTS_LAYOUT": "AffectsLayout", + "AFFECTS_PAINT": "AffectsPaint", + "AFFECTS_OVERFLOW": "AffectsOverflow", +} + +def flags(prop): + result = [] + if prop.explicitly_enabled_in_chrome(): + result.append("EnabledInUASheetsAndChrome") + elif prop.explicitly_enabled_in_ua_sheets(): + result.append("EnabledInUASheets") + if is_internal(prop): + result.append("Internal") + if prop.enabled_in == "": + result.append("Inaccessible") + for (k, v) in RUST_TO_CPP_FLAGS.items(): + if k in prop.flags: + result.append(v) + if exposed_on_getcs(prop): + result.append("ExposedOnGetCS") + if prop.type() == "shorthand" and "SHORTHAND_IN_GETCS" in prop.flags: + result.append("ShorthandUnconditionallyExposedOnGetCS") + if serialized_by_servo(prop): + result.append("SerializedByServo") + if prop.type() == "longhand" and prop.logical: + result.append("IsLogical") + return ", ".join('"{}"'.format(flag) for flag in result) + +def pref(prop): + if prop.gecko_pref: + return '"' + prop.gecko_pref + '"' + return '""' + +def sub_properties(prop): + return ", ".join('"{}"'.format(p.ident) for p in prop.sub_properties) + +def aliases(prop): + return ", ".join('"{}"'.format(p.ident) for p in prop.aliases) +%> + +data = { +% for prop in data.longhands: + "${prop.ident}": Longhand("${prop.name}", "${method(prop)}", "${prop.ident}", [${rules(prop)}], [${flags(prop)}], ${pref(prop)}, [${aliases(prop)}]), +% endfor + +% for prop in data.shorthands: + "${prop.ident}": Shorthand("${prop.name}", "${prop.camel_case}", "${prop.ident}", [${rules(prop)}], [${flags(prop)}], ${pref(prop)}, [${sub_properties(prop)}], [${aliases(prop)}]), +% endfor + +% for prop in data.all_aliases(): + "${prop.ident}": Alias("${prop.name}", "${prop.camel_case}", "${prop.ident}", "${prop.original.ident}", [${rules(prop)}], [${flags(prop)}], ${pref(prop)}), +% endfor +} |