#!/usr/bin/python import webbrowser from ms.html_utils import makelink, TableList import os, sys, re INCLUDE = re.compile(r"\n.. include::\s+([\w\./]+)") BGCOLOR = "lightblue" CSS = """ """ class HTMLDocument(list): def __init__(self, ls = []): super(HTMLDocument, self).__init__(ls) self.reorder() def reorder(self): """Generates circular 'prev' and 'next' tabs.""" self.npages = len(self) self.pageindex = [] for i, page in enumerate(self): page.prev = self[i-1].namext if i == self.npages-1: i = -1 page.next = self[i+1].namext page.first = self[0].namext page.last = self[-1].namext page.document = self self.pageindex.append(page) class HTMLPage(object): def __init__(self, id_txt): self.BGCOLOR = BGCOLOR id, txt = id_txt if isinstance(id, int): self.name = "P%02d" % (id + 1) else: self.name = id self.namext = self.name + ".html" lines = txt.splitlines() if lines: # empty page self.title = lines[0] self.txt = "\n".join(lines[2:]) else: self.title = "" self.txt = "" self.txt = "

%s


\n" % self.title + \ INCLUDE.sub(lambda m: "
%s
" % file(m.group(1)).read(), self.txt) self.head = """ %s %s """ % (self.name, CSS) def html(self): self.body = """\n\n %(txt)s """ % vars(self) return """ %s\n""" % (self.head + self.body) def __str__(self): box = TableList.make( makelink(self.next, "Next"), makelink(self.prev, "Prev"), makelink(self.first, "First"), makelink(self.last, "Last"), makelink(self.namext, self.name), '', border = 0, color = BGCOLOR) logo = TableList.col( 'logo', border = 0, color = BGCOLOR) links = [makelink(page.namext, page.name) for page in self.document.pageindex] opts = dict(border = 0, color = BGCOLOR, ncols=2) index = TableList.make(*links, **opts) self.txt = str( TableList.row("%s" % TableList.col(logo, box, index, border = 0, color = BGCOLOR), self.txt, border = 0, color = BGCOLOR)) return self.html() def main(fname): BLANK = re.compile(r"\n\n\n\s*") chunks = BLANK.split(file(fname).read()) pages = HTMLDocument(map(HTMLPage, enumerate(chunks))) for page in pages: print >> file(page.namext, "w"), page #os.system("xterm -e elinks P01.html&") webbrowser.open("file:%s/P01.html" % os.getcwd()) if __name__ == "__main__": main(sys.argv[1])