| #!/usr/bin/python |
| # |
| # kconfig2wiki - Kconfig to MediaWiki converter for |
| # http://www.coreboot.org/Coreboot_Options |
| # |
| # Copyright (C) 2010 coresystems GmbH |
| # based on http://landley.net/kdocs/make/menuconfig2html.py |
| # Copyright (C) by Rob Landley |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; version 2 of the License |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| # |
| |
| helplen = 0 |
| extra_chapters = 0 |
| |
| ## |
| ## Remove quotes from Kconfig string options |
| ## |
| def zapquotes(str): |
| if str[0]=='"': str = str[1:str.rfind('"')] |
| return str |
| |
| ## |
| ## Escape HTML special characters |
| ## |
| def htmlescape(str): |
| return str.strip().replace("&","&").replace("<","<").replace(">",">") |
| |
| ## |
| ## Process Kconfig file |
| ## |
| def readfile(filename): |
| import sys |
| global helplen |
| |
| source=filename.replace("src/","").replace("/Kconfig","").replace("Kconfig","toplevel") |
| |
| try: |
| lines = open(filename).read().split("\n") |
| except IOError: |
| sys.stderr.write("File %s missing\n" % filename) |
| return |
| config = None |
| description = None |
| configtype = None |
| for i in lines: |
| if helplen: |
| i = i.expandtabs() |
| if not len(i) or i[:helplen].isspace(): |
| sys.stdout.write("%s\n" % htmlescape(i)) |
| continue |
| else: |
| helplen = 0 |
| sys.stdout.write("||\n") |
| |
| words = i.strip().split(None,1) |
| if not len(words): continue |
| |
| if words[0] in ("config", "menuconfig"): |
| config = words[1] |
| description = "" |
| elif words[0] in ("bool", "boolean", "tristate", "string", "hex", "int"): |
| configtype = htmlescape(zapquotes(words[0])) |
| if len(words)>1: description = htmlescape(zapquotes(words[1])) |
| elif words[0]=="prompt": |
| description = htmlescape(zapquotes(words[1])) |
| elif words[0] in ("help", "---help---"): |
| sys.stdout.write("|- bgcolor=\"#eeeeee\"\n") |
| sys.stdout.write("| %s || %s || %s || %s || \n" % (config,source,configtype,description) ) |
| helplen = len(i[:i.find(words[0])].expandtabs()) |
| elif words[0] == "comment": |
| sys.stdout.write("|- bgcolor=\"#eeeeee\"\n") |
| sys.stdout.write("| || || (comment) || || %s ||\n" % htmlescape(zapquotes(words[1]))) |
| elif words[0]=="menu": |
| if len(words)>1: |
| temp = htmlescape(zapquotes(words[1])) |
| if extra_chapters: |
| sys.stdout.write("== Menu: %s ==\n" % temp) |
| sys.stdout.write("{| border=\"0\" style=\"font-size: smaller\"\n"); |
| sys.stdout.write("|- bgcolor=\"#6699dd\"\n") |
| sys.stdout.write("! align=\"left\" | Option\n") |
| sys.stdout.write("! align=\"left\" | Source\n") |
| sys.stdout.write("! align=\"left\" | Format\n") |
| sys.stdout.write("! align=\"left\" | Short Description\n") |
| sys.stdout.write("! align=\"left\" | Description\n") |
| else: |
| # Don't start an extra chapter for a |
| # new menu |
| sys.stdout.write("|- bgcolor=\"#6699dd\"\n") |
| sys.stdout.write("! align=\"left\" | Menu: %s || || || ||\n" % temp) |
| elif words[0] == "endmenu": |
| if extra_chapters: |
| sys.stdout.write("|}\n") |
| sys.stdout.write("\n") |
| elif words[0] == "source": |
| fn=zapquotes(words[1]) |
| readfile(fn) |
| elif words[0] in ("default","depends", "select", "if", "endif", "#"): pass |
| #else: sys.stderr.write("unknown: %s\n" % i) |
| if helplen: sys.stdout.write("||\n") |
| |
| def main(): |
| import sys, time |
| |
| if len(sys.argv)!=3: |
| sys.stderr.write("Usage: kconfig2wiki kconfigfile version\n") |
| sys.exit(1) |
| |
| sys.stdout.write("This is an automatically generated list of '''coreboot compile-time options'''.\n") |
| sys.stdout.write("\nLast update: %s. (r%s)\n" % (time.strftime('%Y/%m/%d %H:%M:%S'),sys.argv[2])) |
| sys.stdout.write("{| border=\"0\" style=\"font-size: smaller\"\n"); |
| sys.stdout.write("|- bgcolor=\"#6699dd\"\n") |
| sys.stdout.write("! align=\"left\" | Option\n") |
| sys.stdout.write("! align=\"left\" | Source\n") |
| sys.stdout.write("! align=\"left\" | Format\n") |
| sys.stdout.write("! align=\"left\" | Short Description\n") |
| sys.stdout.write("! align=\"left\" | Description\n") |
| readfile(sys.argv[1]) |
| sys.stdout.write("|}\n") |
| |
| if __name__ == "__main__": |
| main() |