webTemplate/renderMD.py
2022-08-27 11:44:11 +02:00

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