Blog の Markdown Editor に、mezzanine-pagedown 1.0 : Python Package Index を使っていて、Markdown の記述は SublimeText で作成し、sublimetext-markdown-previewで体裁を確認後、投稿しています。
MarkdownPreview 側の設定と、Blog の Markdown Editor の設定が異なるのか同一レイアウトにならず、崩れて修正するのが手間でしたので、双方の設定を合わせてみました。
前提
以下の環境で実行しています。
-
OS
CentOS release 6.9 (Final) -
Python Version
Python 2.7.8 -
Package (必要そうなものだけ抜粋)
Django (1.10.7) Mezzanine (4.2.3) mezzanine-pagedown (1.0)
どちらに寄せるか?
Sublime の markdown preview の設定に合わせます。
markdown preview plugin も内部で、Markdown を使用しており、sublimetext-markdown-preview/MarkdownPreview.py at master · revolunet/sublimetext-markdown-preview に設定が記載されています。
- MarkdownPreview.py の抜粋
DEFAULT_EXT = [ "extra", "github", "toc", "meta", "sane_lists", "smarty", "wikilinks", "admonition" ]
github
という Markdown の extention にはない extention が含まれています。
github extention について
github extention について検索したところ、facelessuser/pymdown-extensions がヒットします。
markdown preview plugin は、pymdown-extentions の extention を markdown に組み込んで使っているようです。1
[1] markdownのextentionsパッケージ内に、pymdown-extentions のスクリプトが組み込まれています。
この拡張を使うと何が起こるかというと、ネストされた Fenced Code Block が ネストされて表示されるようになります。
Markdown の Fenced Code Blocks のドキュメントを見てみたら、しっかり、「ネストされたコードブロックには対応していない」旨が記載されています。Fenced Code Blocks Extension — Python Markdown
Markdown Editor の設定変更
mezzanine-pagedown の設定を markdown preview の設定に合わせます。
pymdown-extentions が必要になりますので、インストールします。
-
pymdown-extensions のインストール
pip install pymdown-extensions
-
settings.py の編集
PAGEDOWN_MARKDOWN_EXTENSIONS
を markdown preview のDEFAULT_EXT
と合わせます。
github
はパッケージが異なるので、pymdownx.github
となります。
PAGEDOWN_MARKDOWN_EXTENSIONS = ("extra", "pymdownx.github", "toc", "meta", "sane_lists", "smarty", "wikilinks",'codehilite', "admonition")
発生したエラー
上記設定完了後の動作確認時に、以下のエラーが発生しました。
File "/usr/local/lib/python2.7/site-packages/pymdownx/highlight.py", line 148, in get_lexer
lexer = guess_lexer(src)
File "/usr/local/lib/python2.7/site-packages/pygments/lexers/__init__.py", line 252, in guess_lexer
raise ClassNotFound('no lexer matching the text found')
ClassNotFound: no lexer matching the text found
pygments
内でエラーが発生しており、pygments
の upgrade を実施したところエラーは解消されました。 Markdown
と、pymdown-extensions
、 pygments
version を記載しておきます。
% pip list | grep Markdown
Markdown (2.6.8)
% pip list | grep pymdown
pymdown-extensions (4.0)
% pip list | grep Pygments
Pygments (2.2.0)
これで、ローカルと、Blog側のmarkdown設定を一致させることができました。
厳密にはバージョンが異なるのですが、表示体裁での手戻りは少なくなるので、精神衛生上は良いかなと思います。
以上です。
コメント