Skip to content

Commit 0fbd953

Browse files
committed
Modular HTML and Pygments rendering
1 parent 5e9ae9d commit 0fbd953

File tree

3 files changed

+22
-14
lines changed

3 files changed

+22
-14
lines changed

execnb/shell.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@
2929
try: from matplotlib_inline.backend_inline import set_matplotlib_formats
3030
except ImportError: set_matplotlib_formats = None
3131

32-
from mistletoe import markdown, HTMLRenderer
33-
from mistletoe.contrib.pygments_renderer import PygmentsRenderer
34-
3532
from .nbio import *
3633
from .nbio import _dict2obj
3734

@@ -167,9 +164,16 @@ def render_outputs(outputs,
167164
ansi_renderer=_strip,
168165
include_imgs=True,
169166
pygments=False,
170-
pygments_renderer=PygmentsRenderer,
171-
html_renderer=HTMLRenderer
167+
markdown_func=None, # If None, defaults to mistletoe.markdown
168+
pygments_renderer=None, # If None, defaults to mistletoe.contrib.pygments.PygmentsRenderer
169+
html_renderer=None # If None, defaults to mistletoe.HTMLRenderer
172170
):
171+
try:
172+
if markdown_func is None: from mistletoe import markdown
173+
if pygments_renderer is None: from mistletoe import HTMLRenderer
174+
if html_renderer is None: from mistletoe.contrib.pygments import PygmentsRenderer
175+
except ImportError:
176+
return 'No renderers supplied for execnb.shell.render_output. Quickfix is to install mistletoe'
173177
renderer = PygmentsRenderer if pygments else HTMLRenderer
174178
def render_output(out):
175179
otype = out['output_type']
@@ -183,7 +187,7 @@ def render_output(out):
183187
_g = lambda t: ''.join(data[t]) if t in data else None
184188
if d := _g('text/html'): return d
185189
if d := _g('application/javascript'): return f'<script>{d}</script>'
186-
if d := _g('text/markdown'): return markdown(d, renderer=renderer)
190+
if d := _g('text/markdown'): return markdown_func(d, renderer=renderer)
187191
if d := _g('text/latex'): return f'<div class="math">${d}$</div>'
188192
if include_imgs:
189193
if d := _g('image/jpeg'): return f'<img src="data:image/jpeg;base64,{d}"/>'

nbs/02_shell.ipynb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@
5252
"try: from matplotlib_inline.backend_inline import set_matplotlib_formats\n",
5353
"except ImportError: set_matplotlib_formats = None\n",
5454
"\n",
55-
"from mistletoe import markdown, HTMLRenderer\n",
56-
"from mistletoe.contrib.pygments_renderer import PygmentsRenderer\n",
57-
"\n",
5855
"from execnb.nbio import *\n",
5956
"from execnb.nbio import _dict2obj"
6057
]
@@ -983,9 +980,16 @@
983980
" ansi_renderer=_strip,\n",
984981
" include_imgs=True,\n",
985982
" pygments=False,\n",
986-
" pygments_renderer=PygmentsRenderer,\n",
987-
" html_renderer=HTMLRenderer\n",
983+
" markdown_func=None, # If None, defaults to mistletoe.markdown\n",
984+
" pygments_renderer=None, # If None, defaults to mistletoe.contrib.pygments.PygmentsRenderer \n",
985+
" html_renderer=None # If None, defaults to mistletoe.HTMLRenderer\n",
988986
" ):\n",
987+
" try:\n",
988+
" if markdown_func is None: from mistletoe import markdown\n",
989+
" if pygments_renderer is None: from mistletoe import HTMLRenderer\n",
990+
" if html_renderer is None: from mistletoe.contrib.pygments import PygmentsRenderer \n",
991+
" except ImportError:\n",
992+
" return 'No renderers supplied for execnb.shell.render_output. Quickfix is to install mistletoe'\n",
989993
" renderer = PygmentsRenderer if pygments else HTMLRenderer\n",
990994
" def render_output(out):\n",
991995
" otype = out['output_type']\n",
@@ -999,7 +1003,7 @@
9991003
" _g = lambda t: ''.join(data[t]) if t in data else None\n",
10001004
" if d := _g('text/html'): return d\n",
10011005
" if d := _g('application/javascript'): return f'<script>{d}</script>'\n",
1002-
" if d := _g('text/markdown'): return markdown(d, renderer=renderer)\n",
1006+
" if d := _g('text/markdown'): return markdown_func(d, renderer=renderer)\n",
10031007
" if d := _g('text/latex'): return f'<div class=\"math\">${d}$</div>'\n",
10041008
" if include_imgs:\n",
10051009
" if d := _g('image/jpeg'): return f'<img src=\"data:image/jpeg;base64,{d}\"/>'\n",

settings.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ author_email = [email protected]
1111
branch = master
1212
version = 0.1.12
1313
min_python = 3.7
14-
requirements = fastcore>=1.5.5 ipython mistletoe
15-
dev_requirements = matplotlib Pillow
14+
requirements = fastcore>=1.5.5 ipython
15+
dev_requirements = matplotlib Pillow mistletoe
1616
console_scripts = exec_nb=execnb.shell:exec_nb
1717
audience = Developers
1818
language = English

0 commit comments

Comments
 (0)