| #!/usr/bin/python |
| # generate man config documentation from mcelog.conf example |
| # genconfig.py mcelog.conf intro.html |
| import sys |
| import re |
| import string |
| import argparse |
| |
| ap = argparse.ArgumentParser(description="generate man config documentation from mcelog.conf example") |
| ap.add_argument('config', type=argparse.FileType('r'), help="mcelog example config file") |
| ap.add_argument('intro', type=argparse.FileType('r'), help="intro file") |
| args = ap.parse_args() |
| |
| def parse(f): |
| lineno = 1 |
| explanation = 0 |
| header = 1 |
| for line in f: |
| lineno += 1 |
| |
| # skip first comment |
| if header: |
| if not re.match('^#', line): |
| header = 0 |
| continue |
| |
| # explanation |
| m = re.match('^#\s(.*)', line) |
| if m: |
| explanation += 1 |
| s = m.group(1) |
| if explanation == 1: |
| s = string.capitalize(s) |
| print s |
| continue |
| |
| if explanation: |
| print ".PP" |
| explanation = 0 |
| |
| # empty line: new option |
| if re.match('\s+', line): |
| new_option() |
| continue |
| # group |
| m = re.match('\[(.*)\]', line) |
| if m: |
| start_group(m.group(1)) |
| continue |
| # config option |
| m = re.match('^(#?)([a-z-]+) = (.*)', line) |
| if m: |
| config_option(m.group(1), m.group(2), m.group(3)) |
| continue |
| print >>sys.stderr, "Unparseable line %d" % (lineno-1) |
| |
| def config_option(enabled, name, value): |
| print ".B %s = %s" % (name, value) |
| print ".PP" |
| |
| def start_group(name): |
| print ".SS \"The %s config section\"" % (name) |
| |
| def new_option(): |
| print ".PP" |
| |
| |
| print """ |
| .\\" Auto generated mcelog.conf manpage. Do not edit. |
| .TH "mcelog.conf" 5 "mcelog" |
| """ |
| |
| print args.intro.read() |
| parse(args.config) |
| print """ |
| .SH SEE ALSO |
| .BR mcelog (8), |
| .BR mcelog.triggers (5) |
| .B http://www.mcelog.org |
| """ |