{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from nbdev.export2html import *\n",
"from fastai2.core.imports import *"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import nbformat, jupyter_contrib_nbextensions\n",
"from nbconvert.preprocessors import Preprocessor"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import FileLink"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"class NBConvertor:\n",
" \n",
" def _exporter():\n",
" exporter = MarkdownExporter(Config())\n",
" exporter.exclude_input_prompt=True\n",
" exporter.exclude_output_prompt=True\n",
" exporter.template_file = 'jekyll.tpl'\n",
" exporter.template_path.append(str((Path()/'local'/'notebook').absolute()))\n",
" return exporter\n",
"\n",
" _re_title = re.compile(r'^\\s*#\\s+([^\\n]*)\\n')\n",
" cell_type,outputs,source,code,text = 'cell_type','outputs','source','code','text'\n",
"\n",
" def process_output(c,s,o):\n",
" if c[cell_type]!=code or o is None: return s,o\n",
" def _f(x):\n",
" if text not in x: return x\n",
" x[text] = re.sub(r'^(.*\\S)',r'> \\1',x[text], flags=re.MULTILINE)\n",
" return x\n",
" return s,[_f(o_) for o_ in o]\n",
"\n",
" def process_title(c,s,o):\n",
" if s.startswith('#hide'): return\n",
" if c[cell_type] == code: return s,o\n",
" if _re_title.search(s):\n",
" s = '---\\n' + _re_title.sub(r'title: \"\\1\"', s) + '\\n---'\n",
" s = re.sub('^- ', '', s, flags=re.MULTILINE)\n",
" return s,o\n",
"\n",
" def apply_all(x, fs, **kwargs):\n",
" for f in fs:\n",
" s,o = f(x, x[source], x.get(outputs,None), **kwargs) or (None,None)\n",
" x[source]=s\n",
" if s is None: x=None; break\n",
" elif o is not None: x[outputs] = o\n",
" return x\n",
"\n",
" def convert(fname, dest=None, cell_procs=None):\n",
" fname = Path(fname)\n",
" (fname.parent/'md_out').mkdir(exist_ok=True)\n",
" if dest is None: dest = (fname.parent/'md_out'/fname.name).with_suffix('.md')\n",
" if cell_procs is None: cell_procs = [process_title,process_output]\n",
" with open(fname,'r') as f: nb = nbformat.reads(f.read(), as_version=4)\n",
" nb['cells'] = [o for o in [apply_all(c, cell_procs) for c in nb['cells']] if o is not None]\n",
" exp = _exporter()\n",
" with open(dest,'w') as f: f.write(exp.from_notebook_node(nb)[0])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"name = 'delegation'\n",
"convert(Path.cwd()/f'{name}.ipynb')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"md_out/delegation.md
"
],
"text/plain": [
"/home/jhoward/git/fastai_dev/dev/md_out/delegation.md"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"FileLink(f'md_out/{name}.html')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}