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 as e: raise PandocMissing("The command '%s' returned an error: %s.\n" % (" ".join(command), e) + "Please check that pandoc package is installed.") out, _ = p.communicate(cast_bytes(source, encoding)) out = TextIOWrapper(BytesIO(out), encoding, 'replace').read() return out.rstrip('\n')
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 as e: raise PandocMissing( "The command '%s' returned an error: %s.\n" % (" ".join(command), e) + "Please check that pandoc is installed:\n" + "http://johnmacfarlane.net/pandoc/installing.html" ) out, _ = p.communicate(cast_bytes(source, encoding)) out = TextIOWrapper(BytesIO(out), encoding, "replace").read() return out.rstrip("\n")
def pandoc(source, fmt, to, extra_args=None, encoding='utf-8'): """Convert an input string in format `from` to format `to` via pandoc. 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. Exceptions ---------- This function will raise PandocMissing if pandoc is not installed. Any error messages generated by pandoc are printed to stderr. """ cmd = ['pandoc', '-f', fmt, '-t', to] if extra_args: cmd.extend(extra_args) # this will raise an exception that will pop us out of here check_pandoc_version() # we can safely continue p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) out, _ = p.communicate(cast_bytes(source, encoding)) out = TextIOWrapper(BytesIO(out), encoding, 'replace').read() return out.rstrip('\n')
def pandoc(source, fmt, to, extra_args=None, encoding='utf-8'): """Convert an input string using pandoc. Pandoc converts an input string `from` a format `to` a target format. 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. Raises ------ PandocMissing If pandoc is not installed. Any error messages generated by pandoc are printed to stderr. """ cmd = ['pandoc', '-f', fmt, '-t', to] if extra_args: cmd.extend(extra_args) # iOS: we cannot call pandoc, so we just don't convert markdown cells. # This is not perfect (...) but it lets the conversion machine work. # iOS: we replaced pandoc with a mistune plugin. It's not as good but it works # iOS, TODO: tables in LaTeX, html in LaTeX if (sys.platform == 'darwin' and platform.machine().startswith('iP')): if (fmt.startswith('markdown') and to.startswith('latex')): markdown_to_latex = mistune.Markdown(renderer=LatexRenderer()) return markdown_to_latex(source) elif (fmt.startswith('markdown') and to.startswith('rst')): return convert(source) # m2r markdown to rst conversion elif (fmt.startswith('markdown') and to.startswith('asciidoc')): markdown_to_asciidoc = mistune.Markdown(renderer=AsciidocRenderer()) return markdown_to_asciidoc(source) else: return source # this will raise an exception that will pop us out of here check_pandoc_version() # we can safely continue p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) out, _ = p.communicate(cast_bytes(source, encoding)) out = TextIOWrapper(BytesIO(out), encoding, 'replace').read() return out.rstrip('\n')
def markdown2html_marked(source, encoding="utf-8"): """Convert a markdown string to HTML via marked""" command = [_find_nodejs(), marked] try: p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE) except OSError as e: raise NodeJSMissing( "The command '%s' returned an error: %s.\n" % (" ".join(command), e) + "Please check that Node.js is installed." ) out, _ = p.communicate(cast_bytes(source, encoding)) out = TextIOWrapper(BytesIO(out), encoding, "replace").read() return out.rstrip("\n")
def markdown2html_marked(source, encoding='utf-8'): """Convert a markdown string to HTML via marked""" command = [_find_nodejs(), marked] try: p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE) except OSError as e: raise NodeJSMissing("The command '%s' returned an error: %s.\n" % (" ".join(command), e) + "Please check that Node.js is installed.") out, _ = p.communicate(cast_bytes(source, encoding)) out = TextIOWrapper(BytesIO(out), encoding, 'replace').read() return out.rstrip('\n')
def pandoc(source, fmt, to, extra_args=None, encoding='utf-8'): """Convert an input string using pandoc. Pandoc converts an input string `from` a format `to` a target format. 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. Raises ------ PandocMissing If pandoc is not installed. Any error messages generated by pandoc are printed to stderr. """ cmd = ['pandoc', '-f', fmt, '-t', to] if extra_args: cmd.extend(extra_args) # this will raise an exception that will pop us out of here check_pandoc_version() # we can safely continue p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) out, _ = p.communicate(cast_bytes(source, encoding)) out = TextIOWrapper(BytesIO(out), encoding, 'replace').read() return out.rstrip('\n')