import re, os class Tree: re_title = re.compile("(.*)") def __init__(self, dir): self.files = [] self.name = None for el in os.listdir(dir): el = os.path.join(dir, el) if os.path.isdir(el): self.addDir(el) elif os.path.splitext(el)[1] == '.html': self.addFile(el) def addFile(self, filename, contents=None): if contents is None: contents = open(filename).read() match = self.re_title.search(contents) if not match: print ("File %s skipped: It does not contain " "a .") % filename return name = match.group(1) if os.path.basename(filename) in ('index.html', 'peg.gen.html'): self.name = name else: self.files.append([filename, name]) def addDir(self, dir): t = Tree(dir) if len(t.files) > 0 or t.name != None: self.files.append([dir, t.name, t]) def prettyprint(self, indent=""): for el in self.files: print "%s%s [%s]" % (indent, el[1], os.path.basename(el[0])) if len(el) > 2: el[2].prettyprint(indent+" ") def getFiles(self): list = [] for el in self.files: if len(el) == 2: list.append(el[0]) else: list.extend(el[3].getFiles()) def simpleNavbar(tree, indent=""): s = "" for el in tree.files: s += '%s<a href="%s">%s</a><br>\n' % (indent, el[0], el[1]) if len(el) > 2: s += simpleNavbar(el[2], indent+"  ") return s def insertNavbars(tree, bar=None): if bar is None: bar = '<hr class="footer"/>' bar += '<div class="left-bar">\n' bar += ('<h1 class="boxhead"><a href="./">%s' '</a></h1>\n') % tree.name bar += '<p class="boxcontent">\n' bar += simpleNavbar(tree) bar += '</p></div>\n' for el in tree.files: if len(el) == 2: s = open(el[0]).read() i = s.find('<hr class="footer"/>') s = s[:i] + bar + s[i:] open(el[0], 'w').write(s) print "Inseted navbar into %s" % el[0] else: insertNavbars(el[2], bar) if __name__ == '__main__': import sys t = Tree(sys.argv[1]) insertNavbars(t)