OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 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 sys | 6 import sys |
7 import string | 7 import string |
8 import json | 8 import json |
9 | 9 |
| 10 package = sys.argv[1] |
| 11 output_cc_path = sys.argv[2] |
| 12 output_h_path = sys.argv[3] |
| 13 blink_protocol_path = sys.argv[4] |
| 14 browser_protocol_path = sys.argv[5] if len(sys.argv) > 5 else None |
| 15 |
10 template_h = string.Template("""\ | 16 template_h = string.Template("""\ |
11 // Copyright 2013 The Chromium Authors. All rights reserved. | 17 // Copyright 2013 The Chromium Authors. All rights reserved. |
12 // Use of this source code is governed by a BSD-style license that can be | 18 // Use of this source code is governed by a BSD-style license that can be |
13 // found in the LICENSE file. | 19 // found in the LICENSE file. |
14 | 20 |
15 #ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_ | 21 #ifndef ${PACKAGE}_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_ |
16 #define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_ | 22 #define ${PACKAGE}_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_ |
17 | 23 |
18 // THIS FILE IS AUTOGENERATED. DO NOT EDIT. | 24 // THIS FILE IS AUTOGENERATED. DO NOT EDIT. |
19 // Generated by | 25 // Generated by |
20 // content/browser/devtools/devtools_protocol_constants_generator.py from | 26 // content/public/browser/devtools_protocol_constants_generator.py from |
21 // third_party/WebKit/Source/devtools/protocol.json and | 27 // third_party/WebKit/Source/devtools/protocol.json and |
22 // content/browser/devtools/browser_protocol.json). | 28 // content/browser/devtools/browser_protocol.json |
23 | 29 |
24 #include <string> | 30 #include <string> |
25 | 31 |
26 namespace content { | 32 namespace $package { |
27 namespace devtools { | 33 namespace devtools { |
28 | 34 |
29 extern const char kProtocolVersion[]; | 35 extern const char kProtocolVersion[]; |
30 | 36 |
31 bool IsSupportedProtocolVersion(const std::string& version); | 37 bool IsSupportedProtocolVersion(const std::string& version); |
32 | 38 |
33 extern const char kResult[]; | 39 extern const char kResult[]; |
34 $contents | 40 $contents |
35 | 41 |
36 } // devtools | 42 } // devtools |
37 } // content | 43 } // $package |
38 | 44 |
39 #endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_ | 45 #endif // ${PACKAGE}_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_ |
40 """) | 46 """) |
41 | 47 |
42 template_cc = string.Template("""\ | 48 template_cc = string.Template("""\ |
43 // Copyright 2013 The Chromium Authors. All rights reserved. | 49 // Copyright 2013 The Chromium Authors. All rights reserved. |
44 // Use of this source code is governed by a BSD-style license that can be | 50 // Use of this source code is governed by a BSD-style license that can be |
45 // found in the LICENSE file. | 51 // found in the LICENSE file. |
46 | 52 |
47 // THIS FILE IS AUTOGENERATED. DO NOT EDIT. | 53 // THIS FILE IS AUTOGENERATED. DO NOT EDIT. |
48 // Generated by | 54 // Generated by |
49 // content/browser/devtools/devtools_protocol_constants_generator.py from | 55 // content/public/browser/devtools_protocol_constants_generator.py from |
50 // third_party/WebKit/Source/devtools/protocol.json and | 56 // third_party/WebKit/Source/devtools/protocol.json and |
51 // content/browser/devtools/browser_protocol.json). | 57 // content/browser/devtools/browser_protocol.json |
52 | 58 |
53 #include "base/strings/string_number_conversions.h" | 59 #include "base/strings/string_number_conversions.h" |
54 #include "base/strings/string_util.h" | 60 #include "base/strings/string_util.h" |
55 #include "content/browser/devtools/devtools_protocol_constants.h" | 61 #include "$package/browser/devtools/devtools_protocol_constants.h" |
56 | 62 |
57 namespace content { | 63 namespace $package { |
58 namespace devtools { | 64 namespace devtools { |
59 | 65 |
60 const char kProtocolVersion[] = "$major.$minor"; | 66 const char kProtocolVersion[] = "$major.$minor"; |
61 | 67 |
62 bool IsSupportedProtocolVersion(const std::string& version) { | 68 bool IsSupportedProtocolVersion(const std::string& version) { |
63 std::vector<std::string> tokens; | 69 std::vector<std::string> tokens; |
64 Tokenize(version, ".", &tokens); | 70 Tokenize(version, ".", &tokens); |
65 int major, minor; | 71 int major, minor; |
66 return tokens.size() == 2 && | 72 return tokens.size() == 2 && |
67 base::StringToInt(tokens[0], &major) && major == $major && | 73 base::StringToInt(tokens[0], &major) && major == $major && |
68 base::StringToInt(tokens[1], &minor) && minor <= $minor; | 74 base::StringToInt(tokens[1], &minor) && minor <= $minor; |
69 } | 75 } |
70 | 76 |
71 const char kResult[] = "result"; | 77 const char kResult[] = "result"; |
72 $contents | 78 $contents |
73 | 79 |
74 } // devtools | 80 } // devtools |
75 } // content | 81 } // $package |
76 """) | 82 """) |
77 | 83 |
78 def Capitalize(s): | 84 def Capitalize(s): |
79 return s[:1].capitalize() + s[1:] | 85 return s[:1].capitalize() + s[1:] |
80 | 86 |
81 references = [] | 87 references = [] |
82 | 88 |
83 def CreateNamespace(domain_name, data, keys, prefixes, name = None): | 89 def CreateNamespace(domain_name, data, keys, prefixes, name = None): |
84 result = {} | 90 result = {} |
85 if name: | 91 if name: |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 def FormatNamespace(title, tree, indent, format_string): | 129 def FormatNamespace(title, tree, indent, format_string): |
124 if (not tree): | 130 if (not tree): |
125 return "" | 131 return "" |
126 body = '\n' + indent + "namespace " + title + " {\n" | 132 body = '\n' + indent + "namespace " + title + " {\n" |
127 body += FormatContents(tree, indent + " ", format_string) | 133 body += FormatContents(tree, indent + " ", format_string) |
128 body += indent + "} // " + title + "\n" | 134 body += indent + "} // " + title + "\n" |
129 return body | 135 return body |
130 | 136 |
131 def CreateHeader(tree, output_file): | 137 def CreateHeader(tree, output_file): |
132 contents = FormatContents(tree, "", "extern const char {0}[];\n") | 138 contents = FormatContents(tree, "", "extern const char {0}[];\n") |
133 output_file.write(template_h.substitute({"contents": contents})) | 139 output_file.write(template_h.substitute({ |
| 140 "contents": contents, |
| 141 "package": package, |
| 142 "PACKAGE": package.upper() |
| 143 })) |
134 | 144 |
135 def CreateBody(tree, version, output_file): | 145 def CreateBody(tree, version, output_file): |
136 contents = FormatContents(tree, "", "const char {0}[] = \"{1}\";\n") | 146 contents = FormatContents(tree, "", "const char {0}[] = \"{1}\";\n") |
137 output_file.write(template_cc.substitute({ | 147 output_file.write(template_cc.substitute({ |
138 "major": version["major"], | 148 "major": version["major"], |
139 "minor": version["minor"], | 149 "minor": version["minor"], |
140 "contents": contents | 150 "contents": contents, |
| 151 "package": package |
141 })) | 152 })) |
142 | 153 |
143 blink_protocol_data = open(sys.argv[1]).read() | 154 blink_protocol_data = open(blink_protocol_path).read() |
144 browser_protocol_data = open(sys.argv[2]).read() | |
145 | |
146 blink_protocol = json.loads(blink_protocol_data) | 155 blink_protocol = json.loads(blink_protocol_data) |
147 browser_protocol = json.loads(browser_protocol_data) | |
148 | |
149 blink_version = blink_protocol["version"] | 156 blink_version = blink_protocol["version"] |
150 | 157 |
151 domains = blink_protocol["domains"] + browser_protocol["domains"] | 158 domains = blink_protocol["domains"] |
| 159 |
| 160 if browser_protocol_path: |
| 161 browser_protocol_data = open(browser_protocol_path).read() |
| 162 browser_protocol = json.loads(browser_protocol_data) |
| 163 domains = domains + browser_protocol["domains"] |
152 | 164 |
153 namespace_tree = {} | 165 namespace_tree = {} |
154 | 166 |
155 for domain in domains: | 167 for domain in domains: |
156 domain_value = {} | 168 domain_value = {} |
157 domain_namespace_name = Capitalize(domain["domain"]) | 169 domain_namespace_name = Capitalize(domain["domain"]) |
158 if "commands" in domain: | 170 if "commands" in domain: |
159 for command in domain["commands"]: | 171 for command in domain["commands"]: |
160 if (IsHandledInBrowser(command)): | 172 if (IsHandledInBrowser(command)): |
161 domain_value[command["name"]] = CreateNamespace(domain["domain"], | 173 domain_value[command["name"]] = CreateNamespace(domain["domain"], |
(...skipping 23 matching lines...) Expand all Loading... |
185 ref_type = [t for t in domain["types"] if t["id"] == path[1]][0] | 197 ref_type = [t for t in domain["types"] if t["id"] == path[1]][0] |
186 parent_namespace[ref_type["id"]] = CreateNamespace(path[0], | 198 parent_namespace[ref_type["id"]] = CreateNamespace(path[0], |
187 ref_type, ["properties"], ["kParam"]) | 199 ref_type, ["properties"], ["kParam"]) |
188 except IndexError: | 200 except IndexError: |
189 sys.stderr.write("Failed to resolve type [{0}].\n".format(reference)) | 201 sys.stderr.write("Failed to resolve type [{0}].\n".format(reference)) |
190 sys.exit(1) | 202 sys.exit(1) |
191 | 203 |
192 for (namespace_name, namespace) in namespace_tree.items(): | 204 for (namespace_name, namespace) in namespace_tree.items(): |
193 namespace["kName"] = namespace_name | 205 namespace["kName"] = namespace_name |
194 | 206 |
195 with open(sys.argv[3], "w") as f: | 207 with open(output_cc_path, "w") as f: |
196 CreateBody(namespace_tree, blink_version, f) | 208 CreateBody(namespace_tree, blink_version, f) |
197 | 209 |
198 with open(sys.argv[4], "w") as f: | 210 with open(output_h_path, "w") as f: |
199 CreateHeader(namespace_tree, f) | 211 CreateHeader(namespace_tree, f) |
OLD | NEW |