mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 13:25:37 +00:00
6780acc0ad
Backed out changeset 04f276eb2f0e (bug 1465628) Backed out changeset e9cdff122793 (bug 1465628) Backed out changeset 6832baa28e3f (bug 1465628) Backed out changeset e5ac0c7a9fb4 (bug 1465628)
101 lines
3.5 KiB
Python
101 lines
3.5 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 http://mozilla.org/MPL/2.0/.
|
|
|
|
import runpy
|
|
import sys
|
|
import string
|
|
import argparse
|
|
|
|
class PropertyWrapper(object):
|
|
__slots__ = ["index", "prop", "idlname"]
|
|
|
|
def __init__(self, index, prop):
|
|
self.index = index
|
|
self.prop = prop
|
|
if "CSSPropFlags::Internal" in prop.flags:
|
|
self.idlname = None
|
|
else:
|
|
idl_name = prop.method
|
|
if not idl_name.startswith("Moz"):
|
|
idl_name = idl_name[0].lower() + idl_name[1:]
|
|
self.idlname = idl_name
|
|
|
|
def __getattr__(self, name):
|
|
return getattr(self.prop, name)
|
|
|
|
|
|
def generate(output, dataFile):
|
|
output.write("""/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT */
|
|
|
|
/* processed file that defines CSS property tables that can't be generated
|
|
with the pre-processor, designed to be #included in nsCSSProps.cpp */
|
|
|
|
""")
|
|
|
|
raw_properties = runpy.run_path(dataFile)["data"]
|
|
properties = [PropertyWrapper(i, p)
|
|
for i, p in enumerate(raw_properties)
|
|
if p.type() != "alias"]
|
|
|
|
# Generate kIDLNameTable
|
|
output.write("const char* const nsCSSProps::"
|
|
"kIDLNameTable[eCSSProperty_COUNT] = {\n")
|
|
for p in properties:
|
|
if p.idlname is None:
|
|
output.write(" nullptr, // {}\n".format(p.name))
|
|
else:
|
|
output.write(' "{}",\n'.format(p.idlname))
|
|
output.write("};\n\n")
|
|
|
|
# Generate kIDLNameSortPositionTable
|
|
ps = sorted(properties, key=lambda p: p.idlname)
|
|
ps = [(p, position) for position, p in enumerate(ps)]
|
|
ps.sort(key=lambda (p, position): p.index)
|
|
output.write("const int32_t nsCSSProps::"
|
|
"kIDLNameSortPositionTable[eCSSProperty_COUNT] = {\n")
|
|
for (p, position) in ps:
|
|
output.write(" {},\n".format(position))
|
|
output.write("};\n\n")
|
|
|
|
# Generate preferences table
|
|
output.write("const nsCSSProps::PropertyPref "
|
|
"nsCSSProps::kPropertyPrefTable[] = {\n")
|
|
for p in raw_properties:
|
|
if not p.pref:
|
|
continue
|
|
if p.type() != "alias":
|
|
prop_id = "eCSSProperty_" + p.id
|
|
else:
|
|
prop_id = "eCSSPropertyAlias_" + p.alias_id
|
|
output.write(" {{ {}, \"{}\" }},\n".format(prop_id, p.pref))
|
|
output.write(" { eCSSProperty_UNKNOWN, nullptr },\n")
|
|
output.write("};\n\n")
|
|
|
|
# Generate shorthand subprop tables
|
|
names = []
|
|
for p in properties:
|
|
if p.type() != "shorthand":
|
|
continue
|
|
name = "g{}SubpropTable".format(p.method)
|
|
names.append(name)
|
|
output.write("static const nsCSSPropertyID {}[] = {{\n".format(name))
|
|
for subprop in p.subprops:
|
|
output.write(" eCSSProperty_{},\n".format(subprop))
|
|
output.write(" eCSSProperty_UNKNOWN\n")
|
|
output.write("};\n\n")
|
|
output.write("const nsCSSPropertyID* const\n")
|
|
output.write("nsCSSProps::kSubpropertyTable["
|
|
"eCSSProperty_COUNT - eCSSProperty_COUNT_no_shorthands"
|
|
"] = {\n")
|
|
for name in names:
|
|
output.write(" {},\n".format(name))
|
|
output.write("};\n\n")
|
|
|
|
# Generate assertions
|
|
msg = ("GenerateCSSPropsGenerated.py did not list properties "
|
|
"in nsCSSPropertyID order")
|
|
for p in properties:
|
|
output.write('static_assert(eCSSProperty_{} == {}, "{}");\n'
|
|
.format(p.id, p.index, msg))
|