Home | History | Annotate | Download | only in build
      1 #!/usr/bin/env python
      2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 import optparse
      6 import calcdeps
      7 import sys
      8 import StringIO
      9 
     10 def flatten_module_contents(filenames):
     11   out = StringIO.StringIO()
     12   load_sequence = calcdeps.calc_load_sequence(filenames)
     13 
     14   flattened_module_names = ["'%s'" % module.name for module in load_sequence]
     15   out.write("    if (!window.FLATTENED) window.FLATTENED = {};\n")
     16   for module in load_sequence:
     17     out.write("    window.FLATTENED['%s'] = true;\n" % module.name);
     18 
     19   for module in load_sequence:
     20     out.write(module.contents)
     21     if module.contents[-1] != '\n':
     22       out.write('\n')
     23   return out.getvalue()
     24 
     25 def flatten_style_sheet_contents(filenames):
     26   out = StringIO.StringIO()
     27   load_sequence = calcdeps.calc_load_sequence(filenames)
     28 
     29   # Stylesheets should be sourced from topmsot in, not inner-out.
     30   load_sequence.reverse()
     31 
     32   for module in load_sequence:
     33     for style_sheet in module.style_sheets:
     34       out.write(style_sheet.contents)
     35       if style_sheet.contents[-1] != '\n':
     36         out.write('\n')
     37   return out.getvalue()
     38 
     39 def main(argv):
     40   parser = optparse.OptionParser(usage="flatten filename1.js [filename2.js ...]")
     41   parser.add_option("--css", dest="flatten_css", action="store_true", help="Outputs a flattened stylesheet.")
     42   options, args = parser.parse_args(argv)
     43 
     44   if options.flatten_css:
     45     sys.stdout.write(flatten_style_sheet_contents(args))
     46   else:
     47     sys.stdout.write(flatten_module_contents(args))
     48   return 255
     49 
     50 if __name__ == "__main__":
     51   sys.exit(main(sys.argv))
     52