#!/usr/bin/python2 import os import os.path import sys from jinja2 import Environment, PackageLoader, Template, FileSystemLoader import mistune class TocMixin(): """TOC mixin for Renderer, mix this with Renderer:: class TocRenderer(TocMixin, Renderer): pass toc = TocRenderer() md = mistune.Markdown(renderer=toc) # required in this order toc.reset_toc() # initial the status md.parse(text) # parse for headers toc.render_toc(level=3) # render TOC HTML """ def reset_toc(self): self.toc_tree = [] self.toc_count = 0 self.title = None def header(self, text, level, raw=None): rv = "" if level != 1: rv = '%s\n' % ( level, self.toc_count, text, level ) else: self.title = text self.toc_tree.append((self.toc_count, text, level, raw)) self.toc_count += 1 return rv def render_toc(self, level=3): """Render TOC to HTML. :param level: render toc to the given level """ return ''.join(self._iter_toc(level)) def _iter_toc(self, level): first_level = None last_level = None cnt = 0 if (self.title != None): yield '

%s

\n' % (self.title) yield '\n\n' last_level -= 1 yield '\n' self.toc_count = 0 class TocRenderer(TocMixin, mistune.Renderer): pass ################################################################################ #check if there is input file if len(sys.argv) < 2: print "Need more arguments" sys.exit(0) md_fn = sys.argv[1] #template loader loader = FileSystemLoader( "/home/fam/downloads/source/repos/md-site/src/templ" ) templ_env = Environment( loader = loader ) t = templ_env.get_template("main.thtml") #get md file f = open( md_fn, "r" ) data = f.read() toc = TocRenderer() md = mistune.Markdown(rule=True,renderer=toc) toc.reset_toc() md.parse(data) md_rend_toc = toc.render_toc(level=3) md_rend = md_rend_toc + md.render( data ) print t.render( block = md_rend )