Commit a66d0e1714813918ed2d58bcec74c46062502f4f

Authored by Miguel Barão
1 parent c6da5826
Exists in master and in 1 other branch dev

- changes in markdown rendering in tools.py

Showing 1 changed file with 89 additions and 41 deletions   Show diff stats
tools.py
... ... @@ -2,10 +2,11 @@
2 2 from os import path
3 3 import subprocess
4 4 import logging
  5 +import re
5 6  
6 7 import yaml
7   -# import markdown
8   -import mistune
  8 +from markdown import markdown
  9 +# import mistune
9 10 from pygments import highlight
10 11 from pygments.lexers import get_lexer_by_name
11 12 from pygments.formatters import html
... ... @@ -15,21 +16,94 @@ logger = logging.getLogger(__name__)
15 16  
16 17  
17 18 # ---------------------------------------------------------------------------
18   -class HighlightRenderer(mistune.Renderer):
19   - def block_code(self, code, lang=None):
20   - if lang is None:
21   - return f'\n<pre><code>{mistune.escape(code)}</code></pre>\n'
22   - else:
23   - lexer = get_lexer_by_name(lang, stripall=True)
24   - formatter = html.HtmlFormatter()
25   - return highlight(code, lexer, formatter)
  19 +# Setup markdown renderer with support for math in LaTeX notation.
  20 +# ---------------------------------------------------------------------------
  21 +# class MathBlockGrammar(mistune.BlockGrammar):
  22 +# block_math = re.compile(r"^\$\$(.*?)\$\$", re.DOTALL)
  23 +# latex_environment = re.compile(r"^\\begin\{([a-z]*\*?)\}(.*?)\\end\{\1\}", re.DOTALL)
  24 +
  25 +
  26 +# class MathBlockLexer(mistune.BlockLexer):
  27 +# default_rules = ['block_math', 'latex_environment'] + mistune.BlockLexer.default_rules
  28 +
  29 +# def __init__(self, rules=None, **kwargs):
  30 +# if rules is None:
  31 +# rules = MathBlockGrammar()
  32 +# super(MathBlockLexer, self).__init__(rules, **kwargs)
  33 +
  34 +# def parse_block_math(self, m):
  35 +# """Parse a $$math$$ block"""
  36 +# self.tokens.append({
  37 +# 'type': 'block_math',
  38 +# 'text': m.group(1)
  39 +# })
  40 +
  41 +# def parse_latex_environment(self, m):
  42 +# self.tokens.append({
  43 +# 'type': 'latex_environment',
  44 +# 'name': m.group(1),
  45 +# 'text': m.group(2)
  46 +# })
  47 +
  48 +
  49 +# class MathInlineGrammar(mistune.InlineGrammar):
  50 +# math = re.compile(r"^\$(.+?)\$", re.DOTALL)
  51 +# block_math = re.compile(r"^\$\$(.+?)\$\$", re.DOTALL)
  52 +# text = re.compile(r'^[\s\S]+?(?=[\\<!\[_*`~$]|https?://| {2,}\n|$)')
  53 +
  54 +
  55 +# class MathInlineLexer(mistune.InlineLexer):
  56 +# default_rules = ['block_math', 'math'] + mistune.InlineLexer.default_rules
  57 +
  58 +# def __init__(self, renderer, rules=None, **kwargs):
  59 +# if rules is None:
  60 +# rules = MathInlineGrammar()
  61 +# super(MathInlineLexer, self).__init__(renderer, rules, **kwargs)
  62 +
  63 +# def output_math(self, m):
  64 +# return self.renderer.inline_math(m.group(1))
26 65  
27   - def image(self, src, title, text):
28   - src = 'FIXME' # FIXME
29   - return super().image(src, title, text)
  66 +# def output_block_math(self, m):
  67 +# return self.renderer.block_math(m.group(1))
30 68  
31   -renderer = HighlightRenderer(hard_wrap=True)
32   -markdown = mistune.Markdown(renderer=renderer)
  69 +
  70 +# class MarkdownWithMath(mistune.Markdown):
  71 +# def __init__(self, renderer, **kwargs):
  72 +# if 'inline' not in kwargs:
  73 +# kwargs['inline'] = MathInlineLexer
  74 +# if 'block' not in kwargs:
  75 +# kwargs['block'] = MathBlockLexer
  76 +# super().__init__(renderer, **kwargs)
  77 +
  78 +# def output_block_math(self):
  79 +# return self.renderer.block_math(self.token['text'])
  80 +
  81 +# def output_latex_environment(self):
  82 +# return self.renderer.latex_environment(self.token['name'], self.token['text'])
  83 +
  84 +
  85 +# class HighlightRenderer(mistune.Renderer):
  86 +# def block_code(self, code, lang=None):
  87 +# if lang is None:
  88 +# return f'\n<pre><code>{mistune.escape(code)}</code></pre>\n'
  89 +# else:
  90 +# lexer = get_lexer_by_name(lang, stripall=True)
  91 +# formatter = html.HtmlFormatter()
  92 +# return highlight(code, lexer, formatter)
  93 +
  94 +# def image(self, src, title, text):
  95 +# src = 'FIXME' # FIXME
  96 +# return super().image(src, title, text)
  97 +
  98 +# def block_math(self, text):
  99 +# return r'\[ %s \]' % text
  100 +
  101 +# def inline_math(self, text):
  102 +# return r'\( %s \)' % text
  103 +
  104 +
  105 +# renderer = HighlightRenderer(hard_wrap=True)
  106 +# markdown = mistune.Markdown(renderer=renderer)
33 107  
34 108  
35 109 # ---------------------------------------------------------------------------
... ... @@ -83,29 +157,3 @@ def run_script(script, stdin=&#39;&#39;, timeout=5):
83 157 # ---------------------------------------------------------------------------
84 158 def md_to_html(text, q=None):
85 159 return markdown(text)
86   -
87   -# def md_to_html(text, ref=None, files={}):
88   -# if ref is not None:
89   -# # given q['ref'] and q['files'] replaces references to files by a
90   -# # GET to /file?ref=???;name=???
91   -# for k in files:
92   -# text = text.replace(k, '/file?ref={};name={}'.format(ref, k))
93   -# return markdown.markdown(text, extensions=[
94   -# 'markdown.extensions.tables',
95   -# 'markdown.extensions.fenced_code',
96   -# 'markdown.extensions.codehilite',
97   -# 'markdown.extensions.def_list',
98   -# 'markdown.extensions.sane_lists'
99   -# ])
100   -
101   -# ---------------------------------------------------------------------------
102   -# def md_to_html_review(text, q):
103   -# for k,f in q['files'].items():
104   -# text = text.replace(k, '/absfile?name={}'.format(q['files'][k]))
105   -# return markdown.markdown(text, extensions=[
106   -# 'markdown.extensions.tables',
107   -# 'markdown.extensions.fenced_code',
108   -# 'markdown.extensions.codehilite',
109   -# 'markdown.extensions.def_list',
110   -# 'markdown.extensions.sane_lists'
111   -# ])
... ...