| #!/usr/bin/env python | 
 | # | 
 | # Copyright (C) 2009 The Android Open Source Project | 
 | # | 
 | # Licensed under the Apache License, Version 2.0 (the 'License'); | 
 | # you may not use this file except in compliance with the License. | 
 | # You may obtain a copy of the License at | 
 | # | 
 | #      http://www.apache.org/licenses/LICENSE-2.0 | 
 | # | 
 | # Unless required by applicable law or agreed to in writing, software | 
 | # distributed under the License is distributed on an 'AS IS' BASIS, | 
 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | # See the License for the specific language governing permissions and | 
 | # limitations under the License. | 
 | # | 
 |  | 
 | import cgi, os, string, sys | 
 |  | 
 | def IsDifferent(row): | 
 |   val = None | 
 |   for v in row: | 
 |     if v: | 
 |       if not val: | 
 |         val = v | 
 |       else: | 
 |         if val != v: | 
 |           return True | 
 |   return False | 
 |  | 
 | def main(argv): | 
 |   inputs = argv[1:] | 
 |   data = {} | 
 |   index = 0 | 
 |   for input in inputs: | 
 |     f = file(input, "r") | 
 |     lines = f.readlines() | 
 |     f.close() | 
 |     lines = map(string.split, lines) | 
 |     lines = map(lambda (x,y): (y,int(x)), lines) | 
 |     for fn,sz in lines: | 
 |       if not data.has_key(fn): | 
 |         data[fn] = {} | 
 |       data[fn][index] = sz | 
 |     index = index + 1 | 
 |   rows = [] | 
 |   for fn,sizes in data.iteritems(): | 
 |     row = [fn] | 
 |     for i in range(0,index): | 
 |       if sizes.has_key(i): | 
 |         row.append(sizes[i]) | 
 |       else: | 
 |         row.append(None) | 
 |     rows.append(row) | 
 |   rows = sorted(rows, key=lambda x: x[0]) | 
 |   print """<html> | 
 |     <head> | 
 |       <style type="text/css"> | 
 |         .fn, .sz, .z, .d { | 
 |           padding-left: 10px; | 
 |           padding-right: 10px; | 
 |         } | 
 |         .sz, .z, .d { | 
 |           text-align: right; | 
 |         } | 
 |         .fn { | 
 |           background-color: #ffffdd; | 
 |         } | 
 |         .sz { | 
 |           background-color: #ffffcc; | 
 |         } | 
 |         .z { | 
 |           background-color: #ffcccc; | 
 |         } | 
 |         .d { | 
 |           background-color: #99ccff; | 
 |         } | 
 |       </style> | 
 |     </head> | 
 |     <body> | 
 |   """ | 
 |   print "<table>" | 
 |   print "<tr>" | 
 |   for input in inputs: | 
 |     combo = input.split(os.path.sep)[1] | 
 |     print "  <td class='fn'>%s</td>" % cgi.escape(combo) | 
 |   print "</tr>" | 
 |  | 
 |   for row in rows: | 
 |     print "<tr>" | 
 |     for sz in row[1:]: | 
 |       if not sz: | 
 |         print "  <td class='z'> </td>" | 
 |       elif IsDifferent(row[1:]): | 
 |         print "  <td class='d'>%d</td>" % sz | 
 |       else: | 
 |         print "  <td class='sz'>%d</td>" % sz | 
 |     print "  <td class='fn'>%s</td>" % cgi.escape(row[0]) | 
 |     print "</tr>" | 
 |   print "</table>" | 
 |   print "</body></html>" | 
 |  | 
 | if __name__ == '__main__': | 
 |   main(sys.argv) | 
 |  | 
 |  |