diff --git a/nb2html.py b/nb2html.py
new file mode 100755
index 0000000..8a4b160
--- /dev/null
+++ b/nb2html.py
@@ -0,0 +1,186 @@
+#!/usr/bin/env python
+"""A really simple notebook to rst/html exporter.
+
+Usage
+
+ ./nb2html.py file.ipynb
+
+Produces 'file.rst' and 'file.html', along with auto-generated figure files
+called nb_figure_NN.png.
+
+"""
+
+import os
+import subprocess
+import sys
+
+from IPython.nbformat import current as nbformat
+from IPython.utils.text import wrap_paragraphs, indent
+
+
+# Cell converters
+
+def unknown_cell(cell):
+ """Default converter for cells of unknown type.
+ """
+
+ return [rst_directive('.. warning:: Unknown cell'),
+ repr(cell)]
+
+def markdown_cell(cell):
+ """convert a markdown cell to rst
+
+ Returns list."""
+ return [cell.source]
+
+
+def rst_directive(directive, text):
+ return [directive, '', indent(text), '']
+
+def code_cell(cell):
+ """Convert a code cell to rst
+
+ Returns list."""
+
+ if not cell.input:
+ return []
+
+ lines = ['In[%s]:' % cell.prompt_number, '']
+ lines.extend(rst_directive('.. code:: python', cell.input))
+
+ for output in cell.outputs:
+ conv = converters[output.output_type]
+ lines.extend(conv(output))
+
+ return lines
+
+# Converters for parts of a cell.
+figures_counter = 1
+
+def out_display(output):
+ """convert display data from the output of a code cell to rst.
+
+ Returns list.
+ """
+ global figures_counter
+
+ lines = []
+
+ if 'png' in output:
+ fname = 'nb_figure_%s.png' % figures_counter
+ with open(fname, 'w') as f:
+ f.write(output.png.decode('base64'))
+
+ figures_counter += 1
+ lines.append('.. image:: %s' % fname)
+ lines.append('')
+
+ return lines
+
+
+def out_pyout(output):
+ """convert pyout part of a code cell to rst
+
+ Returns list."""
+
+ lines = ['Out[%s]:' % output.prompt_number, '']
+
+ if 'latex' in output:
+ lines.extend(rst_directive('.. math::', output.latex))
+
+ if 'text' in output:
+ lines.extend(rst_directive('.. parsed-literal::', output.text))
+
+ return lines
+
+
+converters = dict(code = code_cell,
+ markdown = markdown_cell,
+ pyout = out_pyout,
+ display_data = out_display,
+ )
+
+
+
+def convert_notebook(nb):
+ lines = []
+ for cell in nb.worksheets[0].cells:
+ conv = converters.get(cell.cell_type, unknown_cell)
+ lines.extend(conv(cell))
+ lines.append('')
+
+ return '\n'.join(lines)
+
+
+def nb2rst(fname):
+ "Convert notebook to rst"
+
+ with open(fname) as f:
+ nb = nbformat.read(f, 'json')
+
+ rst = convert_notebook(nb)
+
+ newfname = os.path.splitext(fname)[0] + '.rst'
+ with open(newfname, 'w') as f:
+ f.write(rst.encode('utf8'))
+
+ return newfname
+
+
+def rst2simplehtml(fname):
+ """Convert a rst file to simplified html suitable for blogger.
+
+ This just runs rst2html with certain parameters to produce really simple
+ html and strips the document header, so the resulting file can be easily
+ pasted into a blogger edit window.
+ """
+
+ # This is the template for the rst2html call that produces the cleanest,
+ # simplest html I could find. This should help in making it easier to
+ # paste into the blogspot html window, though I'm still having problems
+ # with linebreaks there...
+ cmd_template = ("rst2html --link-stylesheet --no-xml-declaration "
+ "--no-generator --no-datestamp --no-source-link "
+ "--no-toc-backlinks --no-section-numbering "
+ "--strip-comments ")
+
+ cmd = "%s %s" % (cmd_template, fname)
+ proc = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ shell=True)
+ html, stderr = proc.communicate()
+ if stderr:
+ raise IOError(stderr)
+
+ # Make an iterator so breaking out holds state. Our implementation of
+ # searching for the html body below is basically a trivial little state
+ # machine, so we need this.
+ walker = iter(html.splitlines())
+
+ # Find start of main text, break out to then print until we find end /div.
+ # This may only work if there's a real title defined so we get a 'div class'
+ # tag, I haven't really tried.
+ for line in walker:
+ if line.startswith('
'):
+ break
+ f.write(line)
+ f.write('\n')
+
+ return newfname
+
+
+def main(fname):
+ """Convert a notebook to html in one step"""
+ newfname = nb2rst(fname)
+ rst2simplehtml(newfname)
+
+
+if __name__ == '__main__':
+ main(sys.argv[1])
diff --git a/test.ipynb b/test.ipynb
new file mode 100644
index 0000000..f743b5c
--- /dev/null
+++ b/test.ipynb
@@ -0,0 +1,147 @@
+{
+ "metadata": {
+ "name": "test"
+ },
+ "nbformat": 3,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "source": [
+ "H1"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "source": [
+ "H2"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "source": [
+ "H3"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 4,
+ "source": [
+ "H4"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 5,
+ "source": [
+ "H5"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 6,
+ "source": [
+ "H6"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "A section heading",
+ "=================",
+ "",
+ "A bit of text, with *important things*:",
+ "",
+ "* and",
+ "* more",
+ "",
+ "Using reST links to `ipython `_."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "f = figure()",
+ "plot([1])",
+ "display(f)"
+ ],
+ "language": "python",
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "png": "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\n",
+ "text": [
+ ""
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "png": "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\n"
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": true,
+ "input": [
+ "# multiline input",
+ "x = 1",
+ "y = 2"
+ ],
+ "language": "python",
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "1+2"
+ ],
+ "language": "python",
+ "outputs": [
+ {
+ "output_type": "pyout",
+ "prompt_number": 3,
+ "text": [
+ "3"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "print 'hello world'"
+ ],
+ "language": "python",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "hello world"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "code",
+ "collapsed": true,
+ "input": [],
+ "language": "python",
+ "outputs": []
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file