-
-
Save mpontillo/a53b1dd2cad972261267d05dcb251922 to your computer and use it in GitHub Desktop.
This script turns Markdown into HTML using the Python markdown library and wraps the result in a complete HTML document with default Bootstrap styling so that it's immediately printable. Requires the python libraries jinja2, markdown, and mdx_smartypants.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import argparse | |
import sys | |
import jinja2 | |
import markdown | |
# To install dependencies in a virtualenv: | |
# $ virtualenv ~/venv-markdown/ | |
# $ source ~/venv-markdown/bin/activate | |
# $ pip install jinja2 | |
# $ pip install markdown | |
# | |
# To install dependencies on Ubuntu: | |
# $ sudo apt-get install python-jinja2 python-markdown | |
TEMPLATE = """<!DOCTYPE html> | |
<html> | |
<head> | |
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap-combined.min.css" rel="stylesheet"> | |
<style> | |
body { | |
font-family: sans-serif; | |
} | |
code, pre { | |
font-family: monospace; | |
} | |
h1 code, | |
h2 code, | |
h3 code, | |
h4 code, | |
h5 code, | |
h6 code { | |
font-size: inherit; | |
} | |
</style> | |
</head> | |
<body> | |
<div class="container"> | |
{{content}} | |
</div> | |
</body> | |
</html> | |
""" | |
def parse_args(args=None): | |
d = 'Make a complete, styled HTML document from a Markdown file.' | |
parser = argparse.ArgumentParser(description=d) | |
parser.add_argument('mdfile', type=argparse.FileType('r'), nargs='?', | |
default=sys.stdin, | |
help='File to convert. Defaults to stdin.') | |
parser.add_argument('-o', '--out', type=argparse.FileType('w'), | |
default=sys.stdout, | |
help='Output file name. Defaults to stdout.') | |
return parser.parse_args(args) | |
def main(args=None): | |
args = parse_args(args) | |
md = args.mdfile.read() | |
extensions = ['extra', 'smarty'] | |
html = markdown.markdown(md, extensions=extensions, output_format='html5') | |
doc = jinja2.Template(TEMPLATE).render(content=html) | |
args.out.write(doc) | |
if __name__ == '__main__': | |
sys.exit(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment