0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonでマークダウンをパースして、快適なプログラミング記事作成環境を作る

Last updated at Posted at 2022-07-16

先日、社内のホームページで、プログラミング活用の事例紹介をしてほしいとの依頼がありました。
いくつかの記事をHTMLで直接書いてみたのですが、これじゃ続かないと思い、マークダウンで書くことにしました。

PythonでマークダウンファイルをHTMLに変換することにし、シンタックスハイライトできるように工夫しました。

使用するPythonライブラリは

シンタックスハイライトはPrism.jsを使用します。Prism.jsはあらかじめダウンロードページで、必要なオプションをチェックし、cssファイルとjsファイルをダウンロードしておきます。(今回はPythonとLine Numbersを追加でチェックしました。)

マークダウンファイルは次のように用意し、contents.mdというファイル名で保存しておきます。

# Hello World!

lorem ipsum

lorem ipsum
lorem ipsum
{ style='font-size: 2rem; color: red;' }

``` { .python .line-numbers }
import os
```

ここでポイントは、{...}の中の記述です。通常のマークダウン記法ではないのですが、このようにするとpython-markdownの拡張機能で、シンタックスハイライト用のclassをつけることができます。
styleも記述できるので、画像の大きさなど細かく記事を調整できるのではないでしょうか。
その他の拡張機能はこちらです。

マークダウンファイルをHTMLに変換するPythonのコードは次にように記述します。extensionsで、上記拡張機能を追加します。
HTMLはJinja2を使ってテンプレートに記事を流し込むようにしました。

from jinja2 import Template
from markdown import markdown

with open('contents.md') as f:
    text = f.read()

extensions = [
        'attr_list',  # HTMLにクラスなどを付与できる
        'fenced_code',  # コードのシンタックスハイライト用
        ]
contents = markdown(text, extensions=extensions)

template = Template("""
<!DOCTYPE html>
<html>
<head>
  <meta charst="UTF-8">
  <title>Markdown</title>
  <link rel="stylesheet" href="prism.css">
</head>
<body>
  {{ contents }}
</body>
</html>
""")

html = template.render(contents=contents)

with open('output.html', mode='w') as f:
    f.write(html)

Screenshot 2022-07-16 12.44.10.png

できました!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?