#!/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))