mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 05:45:37 +00:00
48dc9dc70a
I manually diffed the generated lists and the original ones from in nsCSSProps.cpp. All generated lists seem to contain the same set of subproperties as their old correspondents. There are still some differences: Order of subproperties of many shorthands is changed. There are many comments in the old lists stating that the order is important, but they are mostly for serialization. I auditted all users of the subproperty lists, and it doesn't seem to me any of them relies on the order. gOutlineRadiusSubpropTable is renamed to gMozOutlineRadiusSubpropTable which I don't think is a problem at all, but maybe worth mentioning. MozReview-Commit-ID: 190SBZfxVOW --HG-- extra : rebase_source : cd5e8b1667a4550542c361d31361e45456c6b6a3
113 lines
3.4 KiB
Python
113 lines
3.4 KiB
Python
# 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", "flags", "pref"]
|
|
|
|
def __init__(self, *args):
|
|
_assign_slots(self, args)
|
|
|
|
@staticmethod
|
|
def type():
|
|
return "longhand"
|
|
|
|
|
|
class Shorthand(object):
|
|
__slots__ = ["name", "method", "id", "flags", "pref", "subprops"]
|
|
|
|
def __init__(self, *args):
|
|
_assign_slots(self, args)
|
|
|
|
@staticmethod
|
|
def type():
|
|
return "shorthand"
|
|
|
|
|
|
class Alias(object):
|
|
__slots__ = ["name", "method", "alias_id", "prop_id", "flags", "pref"]
|
|
|
|
def __init__(self, *args):
|
|
_assign_slots(self, args)
|
|
|
|
@staticmethod
|
|
def type():
|
|
return "alias"
|
|
|
|
<%!
|
|
# nsCSSPropertyID of longhands and shorthands is ordered alphabetically
|
|
# with vendor prefixes removed. Note that aliases use their alias name
|
|
# as order key directly because they may be duplicate without prefix.
|
|
def order_key(prop):
|
|
if prop.name.startswith("-"):
|
|
return prop.name[prop.name.find("-", 1) + 1:]
|
|
return prop.name
|
|
|
|
# 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.
|
|
if not prop.gecko_pref and not prop.enabled_in_content():
|
|
return True
|
|
# There are some special cases we may want to remove eventually.
|
|
OTHER_INTERNALS = [
|
|
"-moz-context-properties",
|
|
"-moz-control-character-visibility",
|
|
"-moz-window-opacity",
|
|
"-moz-window-transform",
|
|
"-moz-window-transform-origin",
|
|
]
|
|
return prop.name in OTHER_INTERNALS
|
|
|
|
def method(prop):
|
|
if prop.name == "float":
|
|
return "CssFloat"
|
|
if prop.name.startswith("-x-"):
|
|
return prop.camel_case[1:]
|
|
return prop.camel_case
|
|
|
|
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")
|
|
if "GETCS_NEEDS_LAYOUT_FLUSH" in prop.flags:
|
|
result.append("GetCSNeedsLayoutFlush")
|
|
if "CAN_ANIMATE_ON_COMPOSITOR" in prop.flags:
|
|
result.append("CanAnimateOnCompositor")
|
|
return ", ".join('"CSSPropFlags::{}"'.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)
|
|
%>
|
|
|
|
data = [
|
|
% for prop in sorted(data.longhands, key=order_key):
|
|
Longhand("${prop.name}", "${method(prop)}", "${prop.ident}", [${flags(prop)}], ${pref(prop)}),
|
|
% endfor
|
|
|
|
% for prop in sorted(data.shorthands, key=order_key):
|
|
Shorthand("${prop.name}", "${prop.camel_case}", "${prop.ident}", [${flags(prop)}], ${pref(prop)},
|
|
[${sub_properties(prop)}]),
|
|
% endfor
|
|
|
|
% for prop in sorted(data.all_aliases(), key=lambda x: x.name):
|
|
Alias("${prop.name}", "${prop.camel_case}", "${prop.ident}", "${prop.original.ident}", [], ${pref(prop)}),
|
|
% endfor
|
|
]
|