1#!/usr/bin/env python
2# Copyright (C) 2013 Google Inc. All rights reserved.
3# Copyright (C) 2013 Igalia S.L. All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are
7# met:
8#
9#     * Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11#     * Redistributions in binary form must reproduce the above
12# copyright notice, this list of conditions and the following disclaimer
13# in the documentation and/or other materials provided with the
14# distribution.
15#     * Neither the name of Google Inc. nor the names of its
16# contributors may be used to endorse or promote products derived from
17# this software without specific prior written permission.
18#
19# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31import sys
32import in_generator
33import template_expander
34import name_utilities
35
36
37def to_passing_type(typename):
38    if typename == 'String':
39        return 'const String&'
40    return typename
41
42
43def to_idl_type(typename):
44    if typename == 'int':
45        return 'long'
46    if typename == 'unsigned' or typename == 'size_t':
47        return 'unsigned long'
48    if typename == 'String':
49        return 'DOMString'
50    if typename == 'bool':
51        return 'boolean'
52    if typename == 'double':
53        return 'double'
54    return None
55
56
57class MakeSettingsWriter(in_generator.Writer):
58    defaults = {
59        'type': 'bool',
60        'initial': None,
61        'invalidate': None,
62    }
63    default_parameters = {}
64    filters = {
65        'upper_first': name_utilities.upper_first,
66        'to_passing_type': to_passing_type,
67        'to_idl_type': to_idl_type,
68    }
69
70    def __init__(self, in_file_path):
71        super(MakeSettingsWriter, self).__init__(in_file_path)
72
73        self.in_file.name_dictionaries.sort(key=lambda entry: entry['name'])
74
75        self._outputs = {
76            ('InternalSettingsGenerated.h'): self.generate_header,
77            ('InternalSettingsGenerated.cpp'): self.generate_implementation,
78            ('InternalSettingsGenerated.idl'): self.generate_idl,
79            ('SettingsMacros.h'): self.generate_macros,
80        }
81        self._template_context = {
82            'settings': self.in_file.name_dictionaries,
83        }
84
85    @template_expander.use_jinja('InternalSettingsGenerated.h.tmpl', filters=filters)
86    def generate_header(self):
87        return self._template_context
88
89    @template_expander.use_jinja('InternalSettingsGenerated.cpp.tmpl', filters=filters)
90    def generate_implementation(self):
91        return self._template_context
92
93    @template_expander.use_jinja('InternalSettingsGenerated.idl.tmpl', filters=filters)
94    def generate_idl(self):
95        return self._template_context
96
97    @template_expander.use_jinja('SettingsMacros.h.tmpl', filters=filters)
98    def generate_macros(self):
99        return self._template_context
100
101
102if __name__ == '__main__':
103    in_generator.Maker(MakeSettingsWriter).main(sys.argv)
104