44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
import html
|
|
from misaka import Markdown, HtmlRenderer
|
|
import latex2mathml.converter
|
|
import re
|
|
|
|
def renderLatex(code):
|
|
code = code.strip()
|
|
code = code.replace("=>", "\\Rightarrow")
|
|
code = code.replace("->", "\\rightarrow")
|
|
code = code.replace("\\(", "\\left(")
|
|
code = code.replace("\\)", "\\right)")
|
|
code = code.replace("*", "\\cdot")
|
|
|
|
a = re.search(r"{[^{}]*} */ *{[^{}]*}", code)
|
|
while a is not None:
|
|
newcode = code[:a.span()[0]]
|
|
newcode += "\\frac"
|
|
newcode += re.sub(r'}[ ]*/[ ]*{', '}{', code[a.span()[0] : a.span()[1]])
|
|
newcode += code[a.span()[1]:]
|
|
code = newcode
|
|
a = re.search(r"{[^{}}]*} */ *{[^{}}]*}", code)
|
|
|
|
return latex2mathml.converter.convert(code)
|
|
|
|
class HighlighterRenderer(HtmlRenderer):
|
|
def codespan(self, code):
|
|
lang = code.split(' ')[0]
|
|
if(lang == 'tex'):
|
|
return '{}\n'.format(renderLatex(' '.join(code.split(' ')[1:]).strip()))
|
|
return '<code>{}</code>\n'.format(code.strip())
|
|
def blockcode(self, code, lang):
|
|
if(lang == 'latex/equetion'):
|
|
return '<p data-latex="{}">{}</p>\n'.format(code.strip(), renderLatex(code))
|
|
return '<pre><code class="{}">{}</code></pre>\n'.format(lang.replace('/', '-'), code)
|
|
|
|
renderer = HighlighterRenderer()
|
|
md = Markdown(renderer, extensions=('fenced-code','tables'))
|
|
|
|
def renderMD(src):
|
|
srcFile = open(src, 'r')
|
|
html = md(srcFile.read())
|
|
srcFile.close()
|
|
return html
|