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