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