diff --git a/IPython/nbconvert/utils/pandoc.py b/IPython/nbconvert/utils/pandoc.py new file mode 100644 index 0000000..c914cee --- /dev/null +++ b/IPython/nbconvert/utils/pandoc.py @@ -0,0 +1,53 @@ +"""Utility for calling pandoc""" +#----------------------------------------------------------------------------- +# Copyright (c) 2013 the IPython Development Team. +# +# Distributed under the terms of the Modified BSD License. +# +# The full license is in the file COPYING.txt, distributed with this software. +#----------------------------------------------------------------------------- + +#----------------------------------------------------------------------------- +# Imports +#----------------------------------------------------------------------------- + +from __future__ import print_function + +# Stdlib imports +import sys +import subprocess + +# IPython imports +from IPython.utils.py3compat import cast_bytes + +#----------------------------------------------------------------------------- +# Classes and functions +#----------------------------------------------------------------------------- + +def pandoc(source, fmt, to, encoding='utf-8'): + """Convert an input string in format `from` to format `to` via pandoc. + + This function will raise an error if pandoc is not installed. + Any error messages generated by pandoc are printed to stderr. + + Parameters + ---------- + source : string + Input string, assumed to be valid format `from`. + fmt : string + The name of the input format (markdown, etc.) + to : string + The name of the output format (html, etc.) + + Returns + ------- + out : unicode + Output as returned by pandoc. + """ + p = subprocess.Popen(['pandoc', '-f', fmt, '-t', to], + stdin=subprocess.PIPE, stdout=subprocess.PIPE + ) + out, _ = p.communicate(cast_bytes(source, encoding)) + out = out.decode(encoding, 'replace') + return out[:-1] +