Skip to content

Instantly share code, notes, and snippets.

@jiffyclub
Last active August 1, 2023 11:16
Show Gist options
  • Save jiffyclub/5015986 to your computer and use it in GitHub Desktop.
Save jiffyclub/5015986 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.
#!/usr/bin/env python
import argparse
import sys
import jinja2
import 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())
@uribe-convers
Copy link

uribe-convers commented Mar 23, 2018

This is an excellent script and works great with text! Is there a way to embed images to the html file that are linked in the markdown document?

@hugoShaka
Copy link

Well played 👍

@dcoldeira
Copy link

Nicely done!

@uribe-convers
Copy link

Oh wow Matt! I found this script again today and realized that you were one of my instructors at SciPy last summer! We talked and had some drinks at Blue Owl Brewery—they were playing bingo :)

@wlisesrivas
Copy link

Nice, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment