blob: f7faa9291fb5abd267df596108be83fe0dba943f [file] [log] [blame]
#!/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
"""