diff --git a/mojo/public/BUILD.gn b/mojo/public/BUILD.gn index 1874a6c4068f..b6613839ce06 100644 --- a/mojo/public/BUILD.gn +++ b/mojo/public/BUILD.gn @@ -13,6 +13,7 @@ group("public") { "//mojo/public/cpp/environment:standalone", "//mojo/public/cpp/utility", "//mojo/public/interfaces/bindings/tests:test_interfaces", + "//mojo/public/html", ] if (is_linux) { diff --git a/mojo/public/html/BUILD.gn b/mojo/public/html/BUILD.gn new file mode 100644 index 000000000000..a580437579b7 --- /dev/null +++ b/mojo/public/html/BUILD.gn @@ -0,0 +1,25 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +action_foreach("html") { + script = "convert_amd_modules_to_html.py" + sources = [ + "//mojo/public/js/bindings/buffer.js", + "//mojo/public/js/bindings/codec.js", + "//mojo/public/js/bindings/connection.js", + "//mojo/public/js/bindings/connector.js", + "//mojo/public/js/bindings/router.js", + "//mojo/public/js/bindings/unicode.js", + "//mojo/public/js/bindings/validator.js", + ] + outputs = [ + "$target_gen_dir/{{source_name_part}}.html", + ] + args = [ + "--input", + "{{source}}", + "--output", + rebase_path(target_gen_dir, root_build_dir) + "/{{source_name_part}}.html" + ] +} diff --git a/mojo/public/html/convert_amd_modules_to_html.py b/mojo/public/html/convert_amd_modules_to_html.py new file mode 100755 index 000000000000..043bf8053031 --- /dev/null +++ b/mojo/public/html/convert_amd_modules_to_html.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse +import sys +import re + +IMPORT_TEMPLATE = '' +PREAMBLE_TEMPLATE = '' + +class Import(object): + def __init__(self, path, name): + self.path = path + self.name = name + +class Module(object): + def __init__(self): + self.name = "" + self.imports = [] + self.body = "" + +def Serialize(module): + lines = [] + for i in module.imports: + lines.append(IMPORT_TEMPLATE % (i.path, i.name)) + lines.append(PREAMBLE_TEMPLATE) + lines.append(module.body) + lines.append(POSTAMBLE_TEMPLATE) + return "\n".join(lines) + +name_regex = re.compile(r'define\("([^"]+)"') +import_regex = re.compile(r' +"([^"]+)",') +begin_body_regexp = re.compile(r', function\(([^)]*)\)') +end_body_regexp = re.compile(r'return exports') + +def AddImportNames(module, unparsed_names): + names = [n.strip() for n in unparsed_names.split(',')] + for i in range(len(module.imports)): + module.imports[i].name = names[i] + +def RewritePathNames(path): + return path.replace("mojo/public/js/bindings", "mojo/public/html") + +def Parse(amd_module): + module = Module() + body_lines = [] + state = "name" + for line in amd_module.splitlines(): + if state == "name": + m = name_regex.search(line) + if m: + module.name = m.group(1) + m = begin_body_regexp.search(line) + if m: + AddImportNames(module, m.group(1)) + state = "body" + else: + state = "imports" + continue + if state == "imports": + m = import_regex.search(line) + if m: + module.imports.append(Import(RewritePathNames(m.group(1)), None)) + continue + m = begin_body_regexp.search(line) + if m: + AddImportNames(module, m.group(1)) + state = "body" + continue + raise Exception, "Unknown import declaration" + if state == "body": + if end_body_regexp.search(line): + module.body = "\n".join(body_lines) + return module + body_lines.append(line) + continue + raise Exception, "Unknown parser state" + raise Exception, "End of file reached with finding a module" + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--input") + parser.add_argument("--output") + args = parser.parse_args() + + module = None + with open(args.input, "r") as input_file: + module = Parse(input_file.read()) + + with open(args.output, "w+") as output_file: + output_file.write(Serialize(module)) + + return 0 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/mojo/public/js/bindings/codec.js b/mojo/public/js/bindings/codec.js index 623cca71b66f..b922a821d683 100644 --- a/mojo/public/js/bindings/codec.js +++ b/mojo/public/js/bindings/codec.js @@ -4,8 +4,8 @@ define("mojo/public/js/bindings/codec", [ "mojo/public/js/bindings/unicode", - "mojo/public/js/bindings/buffer" - ], function(unicode, buffer) { + "mojo/public/js/bindings/buffer", +], function(unicode, buffer) { var kErrorUnsigned = "Passing negative value to unsigned"; diff --git a/mojo/public/tools/bindings/generators/js_templates/module.html.tmpl b/mojo/public/tools/bindings/generators/js_templates/module.html.tmpl index d6d82ce9d8c5..f0a223688d3c 100644 --- a/mojo/public/tools/bindings/generators/js_templates/module.html.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/module.html.tmpl @@ -2,10 +2,10 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> - - + + {%- for import in imports %} - + {%- endfor %}