A lightweight FCGI blog written in python
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
pylog/md2tex/md2tex.py

99 lines
2.4 KiB

#!/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")