| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import json5_generator | 6 import json5_generator |
| 7 import name_utilities | 7 from name_utilities import ( |
| 8 upper_camel_case, lower_camel_case, enum_for_css_property, enum_for_css_prop
erty_alias |
| 9 ) |
| 8 | 10 |
| 9 | 11 |
| 10 class CSSProperties(json5_generator.Writer): | 12 class CSSProperties(json5_generator.Writer): |
| 11 def __init__(self, file_paths): | 13 def __init__(self, file_paths): |
| 12 json5_generator.Writer.__init__(self, file_paths) | 14 json5_generator.Writer.__init__(self, file_paths) |
| 13 | 15 |
| 14 properties = self.json5_file.name_dictionaries | 16 properties = self.json5_file.name_dictionaries |
| 15 | 17 |
| 16 # Sort properties by priority, then alphabetically. | 18 # Sort properties by priority, then alphabetically. |
| 17 for property in properties: | 19 for property in properties: |
| (...skipping 22 matching lines...) Expand all Loading... |
| 40 | 42 |
| 41 # StylePropertyMetadata additionally assumes there are under 1024 proper
ties. | 43 # StylePropertyMetadata additionally assumes there are under 1024 proper
ties. |
| 42 assert self._first_enum_value + len(properties) < 512, 'Property aliasin
g expects there are under 512 properties.' | 44 assert self._first_enum_value + len(properties) < 512, 'Property aliasin
g expects there are under 512 properties.' |
| 43 | 45 |
| 44 for property in properties: | 46 for property in properties: |
| 45 assert property['is_descriptor'] or property['is_property'], \ | 47 assert property['is_descriptor'] or property['is_property'], \ |
| 46 property['name'] + ' must be either a property, a descriptor' +\ | 48 property['name'] + ' must be either a property, a descriptor' +\ |
| 47 ' or both' | 49 ' or both' |
| 48 | 50 |
| 49 for offset, property in enumerate(properties): | 51 for offset, property in enumerate(properties): |
| 50 property['property_id'] = name_utilities.enum_for_css_property(prope
rty['name']) | 52 property['property_id'] = enum_for_css_property(property['name']) |
| 51 property['upper_camel_name'] = name_utilities.camel_case(property['n
ame']) | 53 property['upper_camel_name'] = upper_camel_case(property['name']) |
| 52 property['lower_camel_name'] = name_utilities.lower_first(property['
upper_camel_name']) | 54 property['lower_camel_name'] = lower_camel_case(property['name']) |
| 53 property['enum_value'] = self._first_enum_value + offset | 55 property['enum_value'] = self._first_enum_value + offset |
| 54 property['is_internal'] = property['name'].startswith('-internal-') | 56 property['is_internal'] = property['name'].startswith('-internal-') |
| 55 | 57 |
| 56 self._properties_including_aliases = properties | 58 self._properties_including_aliases = properties |
| 57 self._properties = {property['property_id']: property for property in pr
operties} | 59 self._properties = {property['property_id']: property for property in pr
operties} |
| 58 | 60 |
| 59 # The generated code will only work with at most one alias per property. | 61 # The generated code will only work with at most one alias per property. |
| 60 assert len({property['alias_for'] for property in self._aliases}) == len
(self._aliases) | 62 assert len({property['alias_for'] for property in self._aliases}) == len
(self._aliases) |
| 61 | 63 |
| 62 # Update property aliases to include the fields of the property being al
iased. | 64 # Update property aliases to include the fields of the property being al
iased. |
| 63 for i, alias in enumerate(self._aliases): | 65 for i, alias in enumerate(self._aliases): |
| 64 aliased_property = self._properties[ | 66 aliased_property = self._properties[ |
| 65 name_utilities.enum_for_css_property(alias['alias_for'])] | 67 enum_for_css_property(alias['alias_for'])] |
| 66 updated_alias = aliased_property.copy() | 68 updated_alias = aliased_property.copy() |
| 67 updated_alias['name'] = alias['name'] | 69 updated_alias['name'] = alias['name'] |
| 68 updated_alias['alias_for'] = alias['alias_for'] | 70 updated_alias['alias_for'] = alias['alias_for'] |
| 69 updated_alias['property_id'] = \ | 71 updated_alias['property_id'] = enum_for_css_property_alias(alias['na
me']) |
| 70 name_utilities.enum_for_css_property_alias(alias['name']) | |
| 71 updated_alias['enum_value'] = aliased_property['enum_value'] + 512 | 72 updated_alias['enum_value'] = aliased_property['enum_value'] + 512 |
| 72 updated_alias['upper_camel_name'] = \ | 73 updated_alias['upper_camel_name'] = upper_camel_case(alias['name']) |
| 73 name_utilities.camel_case(alias['name']) | 74 updated_alias['lower_camel_name'] = lower_camel_case(alias['name']) |
| 74 updated_alias['lower_camel_name'] = \ | |
| 75 name_utilities.lower_first(updated_alias['upper_camel_name']) | |
| 76 self._aliases[i] = updated_alias | 75 self._aliases[i] = updated_alias |
| 77 self._properties_including_aliases += self._aliases | 76 self._properties_including_aliases += self._aliases |
| 78 | 77 |
| 79 self.last_unresolved_property_id = max(property["enum_value"] for proper
ty in self._properties_including_aliases) | 78 self.last_unresolved_property_id = max(property["enum_value"] for proper
ty in self._properties_including_aliases) |
| 80 | 79 |
| 81 def properties(self): | 80 def properties(self): |
| 82 return self._properties | 81 return self._properties |
| OLD | NEW |