blob: a883f69352482ccaa0ad02d76b34bbfe8027fbc9 [file] [log] [blame]
#!/usr/bin/env python3
#
import re
import sys
from optparse import OptionParser
###############################################################################
parser = OptionParser( 'Usage: %prog [OPTIONS]' )
parser.add_option( '--header', action='store', default=None, help='header file' )
parser.add_option( '--footer', action='store', default=None, help='footer file' )
parser.add_option( '--body', action='store', default=None, help='file to extract contents of body from' )
parser.add_option( '-v', '--verbose', action='count', default=False, help='increase verbosity' )
(options, args) = parser.parse_args()
if( len(args) != 0 ):
parser.error( 'incorrect number of arguments' )
if not options.header:
parser.error( '--header must be specified' )
if not options.footer:
parser.error( '--footer must be specified' )
if not options.body:
parser.error( '--body must be specified' )
###############################################################################
title = 'Unknown'
# parse majorheading
with open( options.body, 'r' ) as f:
rx = re.compile( '^.*class="majorheading".*>([^>]+)</.+>' )
for line in f:
m = rx.match( line )
if not m:
continue;
title = m.group( 1 )
break
m = re.compile( '(\S+)\s+(\S+)\s+(.+)' ).match( title )
if m:
shortTitle = m.group(3)
else:
shortTitle = title
menu = ''
if not shortTitle == 'Documentation':
menu += '<li><a href="index.html">Documentation</a></li>\n'
menu += '<li class="active">%s</li>' % (shortTitle)
else:
menu += '<li class="active">Documentation</li>'
with open( options.header, 'r' ) as f:
rxTitle = re.compile( '__TITLE__' )
rxShortTitle = re.compile( '__SHORT_TITLE__' )
rxMenu = re.compile( '__MENU__' )
for line in f:
line = re.sub( rxTitle, title, line )
line = re.sub( rxShortTitle, shortTitle, line )
line = re.sub( rxMenu, menu, line )
sys.stdout.write( line )
# out everything *after* first <body> and *before* </body>
with open( options.body, 'r' ) as f:
rxBegin = re.compile( '<body>' )
rxEnd = re.compile( '</body>' )
inside = False
lstrip = False
for line in f:
if rxBegin.match( line ):
inside = True
continue
if rxEnd.match( line ):
outside = False
continue
if lstrip:
line = line.lstrip()
if inside:
sys.stdout.write( line )
with open( options.footer, 'r' ) as f:
for line in f:
sys.stdout.write( line )