#!/usr/bin/env python
# create a table of contents for pages that need it
import sys
import re
import argparse
TOC_PAGES = ['man/index.html',
'man-4.3/index.html',
'man-3/index.html',
'man-2.0/index.html',
'man-1.2/index.html']
V2_PAGES = ['index.html']
INSERT_AFTER = ''
def read_toc_data(infile, debug):
topics_data = []
commands_data = []
f = open(infile)
for line in f:
if line.startswith('[['):
line = line[2:-3] # strip [[ and ]]\n
info, short_help = line.split(',', 1)
short_help = short_help.strip()
info_split = info.split('_')
if info_split[0] == 'topics':
if len(info_split) == 2:
topics_data.append((1, short_help, info))
elif len(info_split) >= 3:
topics_data.append((2, short_help, info))
elif info_split[0] == 'cmdhelp':
if len(info_split) == 2:
commands_data.append((2, info_split[1], info))
elif len(info_split) >= 3:
commands_data.append((3, '_'.join(info_split[2:]), info))
toc = ''
if len(topics_data) > 0 or len(commands_data) > 0:
toc = '
\n'
for depth, text, link in topics_data:
toc += '
\n' % (
depth, link, text)
for depth, text, link in commands_data:
toc += '
\n' % (
depth, link, text)
toc += '
\n'
return toc
def generate_toc(infile, outfile, debug):
if debug:
print "Infile:", infile
toc = read_toc_data(infile, debug)
'''
toc_data = []
section = re.compile(r"[0-9])( id=\"(?P[^\"]+)\")?>(?P.*)")
for line in f:
m = section.match(line)
if m:
if debug:
print "toc_data: %s" % str(((m.group('depth'), m.group('text'), m.group('id'))))
toc_data.append((m.group('depth'), m.group('text'), m.group('id')))
toc = ''
if len(toc_data) > 0:
toc = '\n'
for depth, text, link in toc_data:
if depth >= 2 and link is not None:
toc += '
\n' % (
int(depth) - 1, link, text)
toc += '
\n'
'''
# Write TOC to outfile
if outfile:
if debug:
print "Writing TOC:"
print "----"
print toc
print "----"
print "Outfile:", outfile
fil = open(outfile)
f = fil.readlines()
fil.close()
f2 = open(outfile, 'w')
for line in f:
f2.write(line)
if toc and line.startswith(INSERT_AFTER):
f2.write(toc)
f2.close()
def generate_v2(page, debug):
f = open(page).readlines()
toc_data = []
section = re.compile(r"[0-9])( id=\"(?P[^\"]+)\")?>(?P.*)")
for line in f:
m = section.match(line)
if m:
if debug:
print "toc_data: %s" % str(((m.group('depth'), m.group('text'), m.group('id'))))
toc_data.append((m.group('depth'), m.group('text'), m.group('id')))
toc = ''
if len(toc_data) > 0:
toc = '\n'
for depth, text, link in toc_data:
if depth >= 2 and link is not None:
toc += '
\n' % (
int(depth) - 1, link, text)
toc += '
\n'
f2 = open(page, 'w')
for line in f:
f2.write(line)
if toc and line.startswith(INSERT_AFTER):
f2.write(toc)
f2.close()
def main():
parser = argparse.ArgumentParser(description="Generate table of contents")
parser.add_argument('-d', '--debug', dest='debug', action='store_true',
help="Enable debug output")
parser.add_argument('-o', '--output', metavar='output', type=str,
help="File to inject TOC into")
parser.add_argument('input', metavar='input', type=str,
help="File to read TOC metadata from")
args = parser.parse_args()
debug = args.debug
outfile = args.output
infile = args.input
print "+ %s -> %s" % (infile, outfile)
gen = False
for tocpage in TOC_PAGES:
if not gen and outfile.endswith(tocpage):
generate_toc(infile, outfile, debug)
gen = True
for tocpage in V2_PAGES:
if not gen and outfile.endswith(tocpage):
generate_v2(outfile, debug)
gen = True
if __name__ == "__main__":
main()