1 #!/usr/bin/env python 2 # Copyright (C) 2013 Intel Corporation. All rights reserved. 3 # 4 # Redistribution and use in source and binary forms, with or without 5 # modification, are permitted provided that the following conditions are 6 # met: 7 # 8 # * Redistributions of source code must retain the above copyright 9 # notice, this list of conditions and the following disclaimer. 10 # * Redistributions in binary form must reproduce the above 11 # copyright notice, this list of conditions and the following disclaimer 12 # in the documentation and/or other materials provided with the 13 # distribution. 14 # * Neither the name of Google Inc. nor the names of its 15 # contributors may be used to endorse or promote products derived from 16 # this software without specific prior written permission. 17 # 18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 30 from collections import defaultdict 31 import re 32 import sys 33 34 import in_generator 35 from name_utilities import camelcase_property_name, lower_first 36 import template_expander 37 38 39 def _create_css_property_name_enum_value(property_name): 40 return 'CSSProperty' + property_name 41 42 43 class StylePropertyShorthandWriter(in_generator.Writer): 44 class_name = 'StylePropertyShorthand' 45 46 defaults = { 47 'longhands': '', 48 'runtimeEnabledShorthand': None, 49 } 50 51 def __init__(self, in_files): 52 super(StylePropertyShorthandWriter, self).__init__(in_files) 53 self._outputs = { 54 ('StylePropertyShorthand.cpp'): self.generate_style_property_shorthand_cpp, 55 ('StylePropertyShorthand.h'): self.generate_style_property_shorthand_h} 56 57 self._properties = self.in_file.name_dictionaries 58 self._longhand_dictionary = defaultdict(list) 59 60 for property in self._properties: 61 cc = camelcase_property_name(property['name']) 62 property['property_id'] = _create_css_property_name_enum_value(cc) 63 cc = lower_first(cc) 64 property['camel_case_name'] = cc 65 longhands = property['longhands'].split(';') 66 property['camel_case_longhands'] = list() 67 for longhand in longhands: 68 longhand = camelcase_property_name(longhand) 69 longhand = _create_css_property_name_enum_value(longhand) 70 property['camel_case_longhands'].append(longhand) 71 self._longhand_dictionary[longhand].append(property) 72 if property['runtimeEnabledShorthand'] is not None: 73 lowerFirstConditional = lower_first(property['runtimeEnabledShorthand']) 74 property['runtime_conditional_getter'] = '%sEnabled' % lowerFirstConditional 75 self._properties = dict((property['property_id'], property) for property in self._properties) 76 77 @template_expander.use_jinja('StylePropertyShorthand.cpp.tmpl') 78 def generate_style_property_shorthand_cpp(self): 79 return { 80 'properties': self._properties, 81 'longhands_dictionary': self._longhand_dictionary, 82 } 83 84 @template_expander.use_jinja('StylePropertyShorthand.h.tmpl') 85 def generate_style_property_shorthand_h(self): 86 return { 87 'properties': self._properties, 88 } 89 90 if __name__ == '__main__': 91 in_generator.Maker(StylePropertyShorthandWriter).main(sys.argv) 92