pandoc.py
56 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
|
r11267 | """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 | ||||
#----------------------------------------------------------------------------- | ||||
|
r11293 | def pandoc(source, fmt, to, extra_args=None, encoding='utf-8'): | ||
|
r11267 | """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. | ||||
""" | ||||
|
r11293 | command = ['pandoc', '-f', fmt, '-t', to] | ||
if extra_args: | ||||
|
r11430 | command.extend(extra_args) | ||
|
r11293 | p = subprocess.Popen(command, | ||
|
r11267 | stdin=subprocess.PIPE, stdout=subprocess.PIPE | ||
) | ||||
out, _ = p.communicate(cast_bytes(source, encoding)) | ||||
out = out.decode(encoding, 'replace') | ||||
return out[:-1] | ||||