#!/usr/bin/python import markdown,sys from HTMLParser import HTMLParser class MDHTML2TexParser(HTMLParser): txt='' pre=False def handle_starttag(self, tag, attrs): if tag=='h2': self.txt+='\\section{' if tag=='h3': self.txt+='\\subsection{' if tag=='h4': self.txt+='\\subsubsection{' if tag=='strong': self.txt+='\\textbf{' if tag=='em': self.txt+='\\textit{' if tag=='ul': self.txt+='\\begin{itemize}\n' if tag=='ol': self.txt+='\\begin{enumerate}\n' if tag=='li': self.txt+='\\item ' if tag=='p': self.txt+='\n\n' if tag=='pre': self.txt+='\\begin{verbatim}' self.pre=True if tag=='code' and not self.pre: self.txt+='\\texttt{' def handle_endtag(self, tag): if tag=='h2' or\ tag=='h3' or\ tag=='h4': self.txt+='}\n' if tag=='strong' or\ tag=='em' or\ tag=='code' and not self.pre: self.txt+='}' if tag=='ul': self.txt+='\\end{itemize}\n' if tag=='ol': self.txt+='\\end{enumerate}\n' if tag=='pre': self.txt+='\\end{verbatim}' self.pre=False def handle_data(self, data): self.txt+=data eref = { 'lt':'<', 'gt':'>', 'quot':'"', 'amp':'&' } def handle_entityref(self,ref): if ref in self.eref: self.txt+=self.eref[ref] else: self.txt += '&'+ref+';' def handle_charref(self,ref): self.txt += unichr(ref) if not(len(sys.argv)==3 or len(sys.argv)==2): print "Usage: %s infile [outfile] " % sys.argv[0] sys.exit(1) html=markdown.markdown(open(sys.argv[1]).read(),["math"]) parser = MDHTML2TexParser() parser.feed(html) if len(sys.argv)==2: f=sys.stdout else: f=open(sys.argv[2],'w') f.write(""" \\documentclass{scrartcl} \\usepackage[latin1]{inputenc} \\usepackage[T1]{fontenc} \\usepackage[ngerman]{babel} \\usepackage{amsmath} \\textbf{k-COLORING}\parindent0mm \\title{Ein Testdokument} \\author{Otto Normalverbraucher} \\date{05. Januar 2004} \\begin{document} """) f.write(parser.txt) f.write("\\end{document}\n")