def __init__(self, file_paths): assert len(file_paths) >= 3, \ "CSSProperties at least needs both css_properties.json5, \ computed_style_field_aliases.json5 and \ runtime_enabled_features.json5 to function" # computed_style_field_aliases.json5. Used to expand out parameters used # in the various generators for ComputedStyle. self._field_alias_expander = FieldAliasExpander(file_paths[1]) # _alias_offset must be a power of 2. self._alias_offset = 1024 # 0: CSSPropertyID::kInvalid # 1: CSSPropertyID::kVariable self._first_enum_value = 2 self._last_used_enum_value = self._first_enum_value self._last_high_priority_property = None self._properties_by_id = {} self._properties_by_name = {} self._aliases = [] self._longhands = [] self._shorthands = [] self._properties_including_aliases = [] # Add default data in css_properties.json5. This must be consistent # across instantiations of this class. css_properties_file = json5_generator.Json5File.load_from_files( [file_paths[0]]) self._default_parameters = css_properties_file.parameters # Map of feature name -> origin trial feature name origin_trial_features = {} # TODO(crbug/1031309): Refactor OriginTrialsWriter to reuse logic here. origin_trials_writer = OriginTrialsWriter([file_paths[2]], "") for feature in origin_trials_writer.origin_trial_features: origin_trial_features[str(feature['name'])] = True self.add_properties(css_properties_file.name_dictionaries, origin_trial_features) assert self._first_enum_value + len(self._properties_by_id) < \ self._alias_offset, \ 'Property aliasing expects fewer than %d properties.' % \ self._alias_offset self._last_unresolved_property_id = max(property_["enum_value"] for property_ in self._aliases) # Process extra files passed in. self._extra_fields = [] for i in range(3, len(file_paths)): fields = json5_generator.Json5File.load_from_files( [file_paths[i]], default_parameters=self._default_parameters) self._extra_fields.extend(fields.name_dictionaries) for field in self._extra_fields: self.expand_parameters(field) validate_field(field)
def __init__(self, file_paths): assert len(file_paths) >= 2, \ "CSSProperties at least needs both css_properties.json5 and \ computed_style_field_aliases.json5 to function" # computed_style_field_aliases.json5. Used to expand out parameters used # in the various generators for ComputedStyle. self._field_alias_expander = FieldAliasExpander(file_paths[1]) # CSSPropertyValueMetadata assumes that there are at most 1024 # properties + aliases. self._alias_offset = 512 # 0: CSSPropertyID::kInvalid # 1: CSSPropertyID::kVariable self._first_enum_value = 2 self._last_used_enum_value = self._first_enum_value self._properties_by_id = {} self._properties_by_name = {} self._aliases = [] self._longhands = [] self._shorthands = [] self._properties_including_aliases = [] # Add default data in css_properties.json5. This must be consistent # across instantiations of this class. css_properties_file = json5_generator.Json5File.load_from_files( [file_paths[0]]) self._default_parameters = css_properties_file.parameters self.add_properties(css_properties_file.name_dictionaries) assert self._first_enum_value + len(self._properties_by_id) < \ self._alias_offset, \ 'Property aliasing expects fewer than %d properties.' % \ self._alias_offset self._last_unresolved_property_id = max(property_["enum_value"] for property_ in self._aliases) # Process extra files passed in. self._extra_fields = [] for i in range(2, len(file_paths)): fields = json5_generator.Json5File.load_from_files( [file_paths[i]], default_parameters=self._default_parameters) self._extra_fields.extend(fields.name_dictionaries) for field in self._extra_fields: self.expand_parameters(field)