やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Python3.6.1のvenvにpy-gfmをインストールする

MarkdownGitHub方言GFMを使えるようにする。

前回まで

  1. GitHub Flavored Markdown(GFM) をローカルで書いて閲覧したい
  2. PythonでMarkdownからHTMLを生成するためのパッケージ仮想環境を用意する
  3. Python3.6.1のvenvにMarkdownパッケージをインストールする

py-gfmインストー

py-gfm

インストールしたい仮想環境を有効化する

前回作ったshスクリプトで仮想環境を有効化する。

source venv_markdown.sh
(markdown) {UserName}@{MachineName} /{カレントディレクトリパス} $

先頭に(markdown)と表示されていれば仮想環境が有効化されている。

確認

念のためPythonのバージョンも確認する。

$ pyenv version
3.6.1
$ python -V
Python 3.6.1
$ pip -V
pip 9.0.1 ...  (python 3.6)

pip

pip install py-gfm
$ pip install py-gfm
Collecting py-gfm
  Downloading py_gfm-0.1.3-py2.py3-none-any.whl
Requirement already satisfied: markdown in ./3.6.1/venv/markdown/lib/python3.6/site-packages (from py-gfm)
Requirement already satisfied: setuptools in ./3.6.1/venv/markdown/lib/python3.6/site-packages (from py-gfm)
Installing collected packages: py-gfm
Successfully installed py-gfm-0.1.3

Markdown + py-gfm

import markdown
html = markdown.markdown(GetMarkdownText(), extensions=['gfm']);

これでGitHub方言のMarkdownが使える。前回のmd.convert(self.__GetMarkdown())とは異なるメソッドを使っている。

動作確認

結論

GitHubはてなブログの書式と同じように変換された。

  • コードブロック
  • テーブル

前回できなかったことが解決した。

f:id:ytyaru:20170527101208p:plain

ソースコード

import markdown

class MarkdownTest(object):
    def __init__(self):
        pass
    def Run(self):
        md = markdown.Markdown()
#        html = md.convert(self.__GetMarkdown())
        extensions = ['gfm']
        html = markdown.markdown(self.__GetMarkdown(), extensions=extensions)
        print(html)
        with open('test2.html', mode='w', encoding='utf-8') as f:
            f.write(html)

    def __GetMarkdown(self):
        return """
# 見出し1

## 見出し2

### 見出し3

#### 見出し4

##### 見出し5

##### 見出し6

* 順序なしリスト1
    * 順序なしリスト2
        * 順序なしリスト3
            * 順序なしリスト4
                * 順序なしリスト5
                    * 順序なしリスト6
                        * 順序なしリスト7
                            * 順序なしリスト8
                                * 順序なしリスト9
                                    * 順序なしリスト10

`python`なら自動化に自信が持てます。

!python3

encoding: utf-8

import os.path print(os.path.abspath(os.path.dirname(file)))

* [Pythonドキュメント](https://docs.python.jp/)で学習する
* [![GitHub](http://www.google.com/s2/favicons?domain=github.com "GitHub")](https://github.com/)に成果を残す

abc|def
---|---
123|456
ABC|DEF

"""

if __name__ == "__main__":
    m = MarkdownTest()
    m.Run()

変換結果

<h1>見出し1</h1>
<h2>見出し2</h2>
<h3>見出し3</h3>
<h4>見出し4</h4>
<h5>見出し5</h5>
<h5>見出し6</h5>
<ul>
<li>順序なしリスト1<ul>
<li>順序なしリスト2<ul>
<li>順序なしリスト3<ul>
<li>順序なしリスト4<ul>
<li>順序なしリスト5<ul>
<li>順序なしリスト6<ul>
<li>順序なしリスト7<ul>
<li>順序なしリスト8<ul>
<li>順序なしリスト9<ul>
<li>順序なしリスト10</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><code>python</code>なら自動化に自信が持てます。</p>
<pre class="highlight"><code class="language-python">#!python3
#encoding: utf-8
import os.path
print(os.path.abspath(os.path.dirname(__file__)))</code></pre>


<ul>
<li><a href="https://docs.python.jp/">Pythonドキュメント</a>で学習する</li>
<li><a href="https://github.com/"><img alt="GitHub" src="http://www.google.com/s2/favicons?domain=github.com" title="GitHub" /></a>に成果を残す</li>
</ul>
<table>
<thead>
<tr>
<th>abc</th>
<th>def</th>
</tr>
</thead>
<tbody>
<tr>
<td>123</td>
<td>456</td>
</tr>
<tr>
<td>ABC</td>
<td>DEF</td>
</tr>
</tbody>
</table>

参考

http://blog.muuny-blue.info/234e5dc39dc52740524f9d863bec963c.html

Markdownの拡張が色々使えるらしい。嬉しいけど標準でできるようにして欲しい。設定が面倒くさい。gfmで一発なら少し楽そうだが。

他にも拡張はあるらしい。以下参照。

課題

アンカーリンクのidに日本語が使えないのが残念。

  • アンカーリンクができていない
    • GitHubのReadMeなら自動的に作成されるのに…
      • extensionsの'toc'を使う
        • 目次はいらないのに…
        • <a href="#1">のように番号付けされてしまいタイトル名がわからない
      • extensionsの'headerid'を使う
        • <a href="#1">のように番号付けされてしまいタイトル名がわからない
          • 日本語のせい。英語にすると見出しがid値になる
            • 小文字にされてしまう

自前でアンカーへの参照をするとき、タイトルでなく番号で参照リンクを作らねばならないのが面倒。

所感

ソースコードがハイライトされていない。次回はpygmentsをインストールする。