##// END OF EJS Templates
Merge pull request #3750 from jdfreder/add_cwd_templ_path...
Merge pull request #3750 from jdfreder/add_cwd_templ_path nbconvert: Add cwd to default templates search path.

File last commit:

r11626:66d4c053
r11662:23c75e87 merge
Show More
pandoc.py
60 lines | 2.0 KiB | text/x-python | PythonLexer
"""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, extra_args=None, 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.
"""
command = ['pandoc', '-f', fmt, '-t', to]
if extra_args:
command.extend(extra_args)
try:
p = subprocess.Popen(command,
stdin=subprocess.PIPE, stdout=subprocess.PIPE
)
except OSError:
sys.exit("ERROR: Unable to launch pandoc. Please install pandoc:\n"
"(http://johnmacfarlane.net/pandoc/installing.html)")
out, _ = p.communicate(cast_bytes(source, encoding))
out = out.decode(encoding, 'replace')
return out[:-1]