| #!/usr/bin/env python | 
 | # | 
 | # Copyright (C) 2012 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 os | 
 | import re | 
 | import sys | 
 |  | 
 | def break_lines(key, val): | 
 |   # these don't get split | 
 |   if key in ("PRODUCT_MODEL"): | 
 |     return (key,val) | 
 |   return (key, "\n".join(val.split())) | 
 |  | 
 | def split_line(line): | 
 |   words = line.split("=", 1) | 
 |   if len(words) == 1: | 
 |     return (words[0], "") | 
 |   else: | 
 |     return (words[0], words[1]) | 
 |  | 
 | def sort_lines(text): | 
 |   lines = text.split() | 
 |   lines.sort() | 
 |   return "\n".join(lines) | 
 |  | 
 | def parse_variables(lines): | 
 |   return [split_line(line) for line in lines if line.strip()] | 
 |  | 
 | def render_variables(variables): | 
 |   variables = dict(variables) | 
 |   del variables["FILE"] | 
 |   variables = list(variables.iteritems()) | 
 |   variables.sort(lambda a, b: cmp(a[0], b[0])) | 
 |   return ("<table id='variables'>" | 
 |       + "\n".join([ "<tr><th>%(key)s</th><td>%(val)s</td></tr>" % { "key": key, "val": val } | 
 |         for key,val in variables]) | 
 |       +"</table>") | 
 |  | 
 | def linkify_inherit(variables, text, func_name): | 
 |   groups = re.split("(\\$\\(call " + func_name + ",.*\\))", text) | 
 |   result = "" | 
 |   for i in range(0,len(groups)/2): | 
 |     i = i * 2 | 
 |     result = result + groups[i] | 
 |     s = groups[i+1] | 
 |     href = s.split(",", 1)[1].strip()[:-1] | 
 |     href = href.replace("$(SRC_TARGET_DIR)", "build/target") | 
 |     href = ("../" * variables["FILE"].count("/")) + href + ".html" | 
 |     result = result + "<a href=\"%s\">%s</a>" % (href,s) | 
 |   result = result + groups[-1] | 
 |   return result | 
 |  | 
 | def render_original(variables, text): | 
 |   text = linkify_inherit(variables, text, "inherit-product") | 
 |   text = linkify_inherit(variables, text, "inherit-product-if-exists") | 
 |   return text | 
 |  | 
 | def read_file(fn): | 
 |   f = file(fn) | 
 |   text = f.read() | 
 |   f.close() | 
 |   return text | 
 |  | 
 | def main(argv): | 
 |   # read the variables | 
 |   lines = sys.stdin.readlines() | 
 |   variables = parse_variables(lines) | 
 |  | 
 |   # format the variables | 
 |   variables = [break_lines(key,val) for key,val in variables] | 
 |  | 
 |   # now it's a dict | 
 |   variables = dict(variables) | 
 |  | 
 |   sorted_vars = ( | 
 |       "PRODUCT_COPY_FILES", | 
 |       "PRODUCT_PACKAGES", | 
 |       "PRODUCT_LOCALES", | 
 |       "PRODUCT_FACTORY_RAMDISK_MODULES", | 
 |       "PRODUCT_PROPERTY_OVERRIDES", | 
 |     ) | 
 |  | 
 |   for key in sorted_vars: | 
 |     variables[key] = sort_lines(variables[key]) | 
 |  | 
 |   # the original file | 
 |   original = read_file(variables["FILE"]) | 
 |  | 
 |   # formatting | 
 |   values = dict(variables) | 
 |   values.update({ | 
 |     "variables": render_variables(variables), | 
 |     "original": render_original(variables, original), | 
 |   }) | 
 |   print """<html> | 
 |  | 
 |  | 
 | <head> | 
 |   <title>%(FILE)s</title> | 
 |   <style type="text/css"> | 
 |     body { | 
 |       font-family: Helvetica, Arial, sans-serif; | 
 |       padding-bottom: 20px; | 
 |     } | 
 |     #variables { | 
 |       border-collapse: collapse; | 
 |     } | 
 |     #variables th, #variables td { | 
 |       vertical-align: top; | 
 |       text-align: left; | 
 |       border-top: 1px solid #c5cdde; | 
 |       border-bottom: 1px solid #c5cdde; | 
 |       padding: 2px 10px 2px 10px; | 
 |     } | 
 |     #variables th { | 
 |       font-size: 10pt; | 
 |       background-color: #e2ecff | 
 |     } | 
 |     #variables td { | 
 |       background-color: #ebf2ff; | 
 |       white-space: pre; | 
 |       font-size: 10pt; | 
 |     } | 
 |     #original { | 
 |       background-color: #ebf2ff; | 
 |       border-top: 1px solid #c5cdde; | 
 |       border-bottom: 1px solid #c5cdde; | 
 |       padding: 2px 10px 2px 10px; | 
 |       white-space: pre; | 
 |       font-size: 10pt; | 
 |     } | 
 |   </style> | 
 | </head> | 
 | <body> | 
 | <h1>%(FILE)s</h1> | 
 | <a href="#Original">Original</a> | 
 | <a href="#Variables">Variables</a> | 
 | <h2><a name="Original"></a>Original</h2> | 
 | <div id="original">%(original)s</div> | 
 | <h2><a name="Variables"></a>Variables</h2> | 
 | %(variables)s | 
 | </body> | 
 | </html> | 
 | """ % values | 
 |  | 
 | if __name__ == "__main__": | 
 |   main(sys.argv) |