Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / build / scripts / css_properties.py
1 #!/usr/bin/env python
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
4 # found in the LICENSE file.
5
6 import in_generator
7 from name_utilities import lower_first
8
9
10 class CSSProperties(in_generator.Writer):
11     defaults = {
12         'alias_for': None,
13         'runtime_flag': None,
14         'longhands': '',
15         'animatable': False,
16         'inherited': False,
17         'font': False,
18         'svg': False,
19         'name_for_methods': None,
20         'use_handlers_for': None,
21         'getter': None,
22         'setter': None,
23         'initial': None,
24         'type_name': None,
25         'converter': None,
26         'custom_all': False,
27         'custom_initial': False,
28         'custom_inherit': False,
29         'custom_value': False,
30         'builder_skip': False,
31         'direction_aware': False,
32     }
33
34     valid_values = {
35         'animatable': (True, False),
36         'inherited': (True, False),
37         'font': (True, False),
38         'svg': (True, False),
39         'custom_all': (True, False),
40         'custom_initial': (True, False),
41         'custom_inherit': (True, False),
42         'custom_value': (True, False),
43         'builder_skip': (True, False),
44         'direction_aware': (True, False),
45     }
46
47     def __init__(self, file_paths):
48         in_generator.Writer.__init__(self, file_paths)
49
50         properties = self.in_file.name_dictionaries
51
52         self._aliases = {property['name']: property['alias_for'] for property in properties if property['alias_for']}
53         properties = [property for property in properties if not property['alias_for']]
54
55         assert len(properties) <= 1024, 'There are more than 1024 CSS Properties, you need to update CSSProperty.h/StylePropertyMetadata m_propertyID accordingly.'
56         # We currently assign 0 to CSSPropertyInvalid
57         self._first_enum_value = 1
58         for offset, property in enumerate(properties):
59             property['property_id'] = css_name_to_enum(property['name'])
60             property['upper_camel_name'] = camelcase_css_name(property['name'])
61             property['lower_camel_name'] = lower_first(property['upper_camel_name'])
62             property['enum_value'] = self._first_enum_value + offset
63             property['is_internal'] = property['name'].startswith('-internal-')
64
65         self._properties_list = properties
66         self._properties = {property['property_id']: property for property in properties}
67
68
69 def camelcase_css_name(css_name):
70     """Convert hyphen-separated-name to UpperCamelCase.
71
72     E.g., '-foo-bar' becomes 'FooBar'.
73     """
74     return ''.join(word.capitalize() for word in css_name.split('-'))
75
76
77 def css_name_to_enum(css_name):
78     return 'CSSProperty' + camelcase_css_name(css_name)