uchan note

プログラミングや電子工作の話題を書きます

Python で Markdown 文書を HTML へ変換する

python-markdown2, py-gfm, pygments というライブラリを使って Markdown 文書を HTML へ変換するメモです。

GitHub Flavored Markdown (GFM) の特徴である Fenced Code Block にも対応しています。

インストール

$ pip3 install --user python-markdown2 py-gfm pygments pygments-style-github

スクリプト

md2html.py

#!/usr/bin/python3

import sys
from textwrap import dedent

from markdown2 import markdown


CHARSET = 'utf-8'


def main():
    if len(sys.argv) < 2:
        print('Usage: md2html path/to/file', file=sys.stderr)
        sys.exit(1)

    with open(sys.argv[1], encoding=CHARSET) as f:
        source = f.read()

    body = markdown(source, extras=['fenced-code-blocks'])
    html = dedent('''\
        <html>
        <head>
            <meta charset="{charset}">
            <link rel="stylesheet" type="text/css" href="github_pygments.css">
        </head>
        <body>{body}</body>
        </html>
        ''').format(charset=CHARSET, body=body)
    print(html)


if __name__ == '__main__':
    main()

CSS の準備

$ ~/.local/bin/pygmentize -S github -f html > github_pygments.css

変換

$ ./md2html.py hoge.md > hoge.html

おまけ:ブラウザから確認

手軽にブラウザから確認するには Python で HTTP サーバを立てると便利です。 この程度の静的 HTML なら直接ブラウザで開いてもいいのですが、HTTP サーバを立てればリモート開発している時も便利です。

$ python3 -m http.server 8000

8000 番ポートで起動します。