| Index: mojo/public/html/convert_amd_modules_to_html.py
|
| 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 0000000000000000000000000000000000000000..043bf8053031088fc41269fc7f0742fa078b7837
|
| --- /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 = '<link rel="import" href="/%s.html" as="%s" />'
|
| +PREAMBLE_TEMPLATE = '<script>'
|
| +POSTAMBLE_TEMPLATE = ' this.exports = exports;\n</script>'
|
| +
|
| +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())
|
|
|