Title: [93587] trunk/Source/WebCore
Revision
93587
Author
pfeld...@chromium.org
Date
2011-08-23 02:47:50 -0700 (Tue, 23 Aug 2011)

Log Message

2011-08-23  Pavel Feldman  <pfeld...@google.com>

        Not reviewed. Adding a file that slipped from r93586.

        * inspector/generate-protocol-externs: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (93586 => 93587)


--- trunk/Source/WebCore/ChangeLog	2011-08-23 09:33:54 UTC (rev 93586)
+++ trunk/Source/WebCore/ChangeLog	2011-08-23 09:47:50 UTC (rev 93587)
@@ -1,3 +1,9 @@
+2011-08-23  Pavel Feldman  <pfeld...@google.com>
+
+        Not reviewed. Adding a file that slipped from r93586.
+
+        * inspector/generate-protocol-externs: Added.
+
 2011-08-22  Pavel Feldman  <pfeld...@google.com>
 
         Web Inspector: generate protocol externs API for the front-end compilation.

Added: trunk/Source/WebCore/inspector/generate-protocol-externs (0 => 93587)


--- trunk/Source/WebCore/inspector/generate-protocol-externs	                        (rev 0)
+++ trunk/Source/WebCore/inspector/generate-protocol-externs	2011-08-23 09:47:50 UTC (rev 93587)
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+# Copyright (c) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os.path
+import sys
+
+program_name = os.path.basename(__file__)
+if len(sys.argv) < 4 or sys.argv[1] != "-o":
+    sys.stderr.write("Usage: %s -o OUTPUT_FILE INPUT_FILE\n" % program_name)
+    exit(1)
+
+output_path = sys.argv[2]
+input_path = sys.argv[3]
+
+input_file = open(input_path, "r")
+json_string = input_file.read()
+json_string = json_string.replace(": true", ": True")
+json_string = json_string.replace(": false", ": false")
+json_api = eval(json_string)
+
+output_file = open(output_path, "w")
+
+type_traits = {
+    "string": "string",
+    "integer": "number",
+    "number": "number",
+    "boolean": "boolean",
+    "array": "Array.<*>",
+    "object": "Object"
+}
+
+ref_types = {}
+
+def full_qualified_type_id(domain_name, type_id):
+    if type_id.find(".") == -1:
+       return "%s.%s" % (domain_name, type_id)
+    return type_id
+    
+
+def param_type(domain_name, param):
+    if "type" in param:
+        return type_traits[param["type"]]
+    if "$ref" in param:
+        type_id = full_qualified_type_id(domain_name, param["$ref"])
+        if type_id in ref_types:
+            ref_type = ref_types[type_id]
+            return type_traits[ref_type["type"]]
+        else:
+            print "Type not found: " + type_id
+            return "!! Type not found: " + type_id
+
+for domain in json_api:
+    domain_name = domain["domain"]
+    if "types" in domain:
+        for type in domain["types"]:
+            type_id = full_qualified_type_id(domain_name, type["id"])
+            ref_types[type_id] = type;
+
+for domain in json_api:
+    domain_name = domain["domain"]
+    output_file.write("\n\n\nvar %sAgent = {};\n" % domain_name)
+    if "commands" in domain:
+        for command in domain["commands"]:
+            output_file.write("\n/**\n")
+            params = []
+            if ("parameters" in command):
+                for in_param in command["parameters"]:
+                    if ("optional" in in_param):
+                        params.append("opt_%s" % in_param["name"])
+                        output_file.write(" * @param {%s=} opt_%s\n" % (param_type(domain_name, in_param), in_param["name"]))
+                    else:
+                        params.append(in_param["name"])
+                        output_file.write(" * @param {%s} %s\n" % (param_type(domain_name, in_param), in_param["name"]))
+            returns = []
+            if ("returns" in command):
+                for out_param in command["returns"]:
+                    if ("optional" in out_param):
+                        returns.append("%s=" % param_type(domain_name, out_param))
+                    else:
+                        returns.append("%s" % param_type(domain_name, out_param))
+            output_file.write(" * @param {function(%s):void=} opt_callback\n" % ", ".join(returns))
+            output_file.write(" */\n")
+            params.append("opt_callback");
+            output_file.write("%sAgent.%s = function(%s) {}\n" % (domain_name, command["name"], ", ".join(params)))
+
+    output_file.write("\n\n\n/**\n * @interface\n */\n")
+    output_file.write("%sAgent.Dispatcher = function() {};\n" % domain_name)
+    if "events" in domain:
+        for event in domain["events"]:
+            output_file.write("\n/**\n")
+            params = []
+            if ("parameters" in event):
+                for param in event["parameters"]:
+                    if ("optional" in param):
+                        params.append("opt_%s" % param["name"])
+                        output_file.write(" * @param {%s=} opt_%s\n" % (param_type(domain_name, param), param["name"]))
+                    else:
+                        params.append(param["name"])
+                        output_file.write(" * @param {%s} %s\n" % (param_type(domain_name, param), param["name"]))
+            output_file.write(" */\n")
+            output_file.write("%sAgent.Dispatcher.prototype.%s = function(%s) {};\n" % (domain_name, event["name"], ", ".join(params)));
+output_file.close()
Property changes on: trunk/Source/WebCore/inspector/generate-protocol-externs
___________________________________________________________________

Added: svn:executable

_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to