| #!/usr/bin/env python |
| # Copyright (c) 2012 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 optparse |
| import os |
| import sys |
| import parse_deps |
| import StringIO |
| |
| srcdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../src")) |
| |
| def flatten_module_contents(filenames): |
| out = StringIO.StringIO() |
| load_sequence = parse_deps.calc_load_sequence(filenames, srcdir) |
| |
| flattened_module_names = ["'%s'" % module.name for module in load_sequence] |
| out.write(" if (!window.FLATTENED) window.FLATTENED = {};\n") |
| for module in load_sequence: |
| out.write(" window.FLATTENED['%s'] = true;\n" % module.name); |
| |
| for module in load_sequence: |
| out.write(module.contents) |
| if module.contents[-1] != '\n': |
| out.write('\n') |
| return out.getvalue() |
| |
| def flatten_style_sheet_contents(filenames): |
| out = StringIO.StringIO() |
| load_sequence = parse_deps.calc_load_sequence(filenames, srcdir) |
| |
| # Stylesheets should be sourced from topmsot in, not inner-out. |
| load_sequence.reverse() |
| |
| for module in load_sequence: |
| for style_sheet in module.style_sheets: |
| out.write(style_sheet.contents) |
| if style_sheet.contents[-1] != '\n': |
| out.write('\n') |
| return out.getvalue() |
| |
| def main(argv): |
| parser = optparse.OptionParser(usage="flatten filename1.js [filename2.js ...]", |
| epilog=""" |
| This is a low-level flattening tool. You probably are meaning to run |
| generate_standalone_timeline_view.py |
| """) |
| |
| parser.add_option("--css", dest="flatten_css", action="store_true", help="Outputs a flattened stylesheet.") |
| options, args = parser.parse_args(argv[1:]) |
| |
| if len(args) == 0: |
| sys.stderr.write("Expected: filename or filenames to flatten\n") |
| return 255 |
| |
| if options.flatten_css: |
| sys.stdout.write(flatten_style_sheet_contents(args)) |
| else: |
| sys.stdout.write(flatten_module_contents(args)) |
| return 0 |
| |
| if __name__ == "__main__": |
| sys.exit(main(sys.argv)) |