|
サイズ: 1405
コメント:
|
サイズ: 6511
コメント:
|
| 削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
| 行 3: | 行 3: |
| # MoinMoinでMarkdownを使う | MoinMoin で Markdown を使う =========================== |
| 行 5: | 行 6: |
| [Markdown][1] と、その拡張記法である [Github Flavored Markdown (GFM)][2]、および [Markdown Extra][3] を使いたい。 Python 用の Markdown パーサー (python-markdown) があるのでそれをそのまま使うことにする。 |
[Markdown][] と、拡張記法である [Github Flavored Markdown (GFM)][GFM]、および [Markdown Extra][] を同時に使いたい。また、Markdown では html タグを直接記述することができるが、wiki で許可するには危険なので禁止したい。 また、MoinMoin 独自のリンク記法、埋め込み記法、マクロ、パーサー変更機構を使いたい。 (TODO: マクロとパーサを実装する) |
| 行 8: | 行 10: |
| [1]: http://daringfireball.net/projects/markdown/syntax [2]: https://help.github.com/articles/github-flavored-markdown [3]: http://michelf.ca/projects/php-markdown/extra/ |
プラグイン機構を備えた Python 用 Markdown パーサー ([python-markdown][]) があり、Markdown から html を生成してくれる。MoinMoin からテキストを流し込むプラグインもあり、制限付きながら MoinMoin で Markdown を扱うことができる。 |
| 行 12: | 行 12: |
| ## MoinMoin側プラグイン | [Markdown]: http://daringfireball.net/projects/markdown/syntax [GFM]: https://help.github.com/articles/github-flavored-markdown [Markdown Extra]: http://michelf.ca/projects/php-markdown/extra/ [python-markdown]: http://pythonhosted.org/Markdown/index.html |
| 行 14: | 行 17: |
| 既に MoinMoin 用に、python-markdown に丸投げするパーサープラグインがある。 これを一部改変して使う。 |
|
| 行 17: | 行 18: |
| [Markdown Parser](http://moinmo.in/ParserMarket/Markdown) | MoinMoin 側プラグイン --------------------- |
| 行 19: | 行 21: |
| 改変したものはこちら | 既にテキストを python-markdown に丸投げする MoinMoin 側パーサープラグイン ([Markdown Parser](http://moinmo.in/ParserMarket/Markdown)) がある。これを一部改変して使う。 |
| 行 21: | 行 23: |
| [[Markdown/改変済みパーサー]] | [[attachment:text_markdown.py]] |
| 行 23: | 行 25: |
| ## python-markdown の設定 | オリジナルからの変更点 |
| 行 25: | 行 27: |
| python-markdown はプラグインで機能を拡張/変更することができる。 | * パーサーに渡す[引数](http://pythonhosted.org/Markdown/reference.html)を `wikiconfig.py` 中で指定できるようになった (`markdownargs = {'option': 'value', }`) * html タグを直接記述できなくするため、デフォルトで html タグをエスケープし普通の文字として表示するようにした (`safe_mode='escape'`)。この挙動は `safe_mode` を明示的に定義すればオーバーライドできる。 * python-markdown のエクステンションを格納するためのディレクトリを設け、手軽に記法の拡張を試せるようにした * MoinMoin 独自記法に対応するため、python-markdown 側に独自のエクステンションを追加した python-markdown の設定 ---------------------- python-markdown は [Extension](http://pythonhosted.org/Markdown/extensions/index.html) で機能を拡張/変更することができる。 |
| 行 28: | 行 39: |
| ### 記法の拡張 | |
| 行 30: | 行 40: |
| GFM, Markdown Extra を導入する。 GFM |
### 記法の拡張 ### GFM, Markdown Extra を導入したい。 GFM について |
| 行 33: | 行 47: |
| - [違い 2](https://help.github.com/articles/writing-on-github) | - [Standard Markdown との違い 2](https://help.github.com/articles/writing-on-github) |
| 行 35: | 行 49: |
| Markdown Extra | Markdown Extra について |
| 行 37: | 行 53: |
#### Markdown Extra #### python-markdown にデフォルトで拡張機能が入っているので、有効にするだけでよい。 上記自作パーサーでは `wikiconfig.py` 中でパーサーに渡す引数を設定できるのでそれを利用する。 ```python markdownargs = { 'extension': ['extra'] } ``` もちろん、MoinMoin 側のプラグイン自体をいじって直接に引数を渡してやってもよい。 #### GFM #### [py-gfm](https://github.com/dart-lang/py-gfm) を導入する。python-markdown 用の extension. デフォルトでは入っていないので自前で取得してくる必要がある。 適当な場所にレポジトリを clone する。 ```console $ git clone https://github.com/dart-lang/py-gfm.git ``` clone したレポジトリへのパスを `sys.path` に追加して import できるようにする。 例えば、`wikiconfig.py` にそのように追記する。 ```python sys.path.insert(0, 'path/to/py-gfm') ``` さらに、`wikiconfig.py` 等でパーサーに渡す引数を設定する。 ```python markdownargs = { 'extensions': ['gfm'] } ``` 参考記事 - [MoinMoin で Markdown (Github Flavored Markdown) を使う](http://tototoshi.hatenablog.com/entry/2014/05/14/023149) (tototoshi の日記) - [Python で Github Flavored Markdown をレンダリングする](http://tototoshi.hatenablog.com/entry/2014/05/17/020241) (tototoshi の日記) #### その他の拡張 #### 他にもいくつか[ビルトインの extension](http://pythonhosted.org/Markdown/extensions/index.html) が用意されている。 また、[他のサードパーティー製 extension](https://github.com/waylan/Python-Markdown/wiki/Third-Party-Extensions) もある。 ### html タグの禁止 ### パーサーへの引数 [safe_mode](http://pythonhosted.org/Markdown/reference.html#safe_mode) を適切に設定してやればよい。デフォルトでは許可するようになっている。 上記自作プラグインでは safe_mode='escape' をデフォルトとした。 変更するには wikiconfig.py 中で以下のようにする。 ```python markdownargs = { 'safe_mode': '設定値' } ``` Pygments用CSS ------------- ここまで済めばほぼちゃんとレンダリングされるが、Code Highlighting の色分けがまだうまくいかない。 Code Highlighting に使われている Pygments は MoinMoin 本体でも使われているが、Moin 書式のパーサーから呼ぶ場合と出力される html が異なり、Markdown から使う場合は追加で css が必要となる。 ### cssを書いて配置 ### [pygments 公式にある方法](http://pygments.org/docs/cmdline/)で好みのスタイル用の CSS を出力し、 `./MoinMoin/web/static/htdocs/common/` あたりに入れておく。 ```console $ pygmentize -S default -f html > pygments.css ``` pygments 1.6 では以下のスタイルがデフォルトで使用可能。 ```python ['monokai', 'manni', 'rrt', 'perldoc', 'borland', 'colorful', 'default', 'murphy', 'vs', 'trac', 'tango', 'fruity', 'autumn', 'bw', 'emacs', 'vim', 'pastie', 'friendly', 'native'] ``` ### wikiconfig.py ### 追加した css を全ての場合で読み込むように、`wikiconfig.py` に一行追加する。 ```python stylesheets = [('all', url_prefix_static + '/common/pygments.css'),] ``` これでコードブロックの色分けが動作するようになった。 |
MoinMoin で Markdown を使う
Markdown と、拡張記法である Github Flavored Markdown (GFM)、および Markdown Extra を同時に使いたい。また、Markdown では html タグを直接記述することができるが、wiki で許可するには危険なので禁止したい。
また、MoinMoin 独自のリンク記法、埋め込み記法、マクロ、パーサー変更機構を使いたい。
(TODO: マクロとパーサを実装する)
プラグイン機構を備えた Python 用 Markdown パーサー (python-markdown) があり、Markdown から html を生成してくれる。MoinMoin からテキストを流し込むプラグインもあり、制限付きながら MoinMoin で Markdown を扱うことができる。
MoinMoin 側プラグイン
既にテキストを python-markdown に丸投げする MoinMoin 側パーサープラグイン (Markdown Parser) がある。これを一部改変して使う。
オリジナルからの変更点
- パーサーに渡す引数を
wikiconfig.py中で指定できるようになった (markdownargs = {'option': 'value', }) - html タグを直接記述できなくするため、デフォルトで html タグをエスケープし普通の文字として表示するようにした (
safe_mode='escape')。この挙動はsafe_modeを明示的に定義すればオーバーライドできる。 - python-markdown のエクステンションを格納するためのディレクトリを設け、手軽に記法の拡張を試せるようにした
- MoinMoin 独自記法に対応するため、python-markdown 側に独自のエクステンションを追加した
python-markdown の設定
python-markdown は Extension で機能を拡張/変更することができる。
これを使って GFM 対応等々の拡張を施す。
記法の拡張
GFM, Markdown Extra を導入したい。
GFM について
Markdown Extra について
Markdown Extra
python-markdown にデフォルトで拡張機能が入っているので、有効にするだけでよい。
上記自作パーサーでは wikiconfig.py 中でパーサーに渡す引数を設定できるのでそれを利用する。
markdownargs = {
'extension': ['extra']
}
もちろん、MoinMoin 側のプラグイン自体をいじって直接に引数を渡してやってもよい。
GFM
py-gfm を導入する。python-markdown 用の extension.
デフォルトでは入っていないので自前で取得してくる必要がある。
適当な場所にレポジトリを clone する。
$ git clone https://github.com/dart-lang/py-gfm.git
clone したレポジトリへのパスを sys.path に追加して import できるようにする。
例えば、wikiconfig.py にそのように追記する。
sys.path.insert(0, 'path/to/py-gfm')
さらに、wikiconfig.py 等でパーサーに渡す引数を設定する。
markdownargs = {
'extensions': ['gfm']
}
参考記事
- MoinMoin で Markdown (Github Flavored Markdown) を使う (tototoshi の日記)
- Python で Github Flavored Markdown をレンダリングする (tototoshi の日記)
その他の拡張
他にもいくつかビルトインの extension が用意されている。
また、他のサードパーティー製 extension もある。
html タグの禁止
パーサーへの引数 safe_mode を適切に設定してやればよい。デフォルトでは許可するようになっている。
上記自作プラグインでは safe_mode=’escape’ をデフォルトとした。
変更するには wikiconfig.py 中で以下のようにする。
markdownargs = {
'safe_mode': '設定値'
}
Pygments用CSS
ここまで済めばほぼちゃんとレンダリングされるが、Code Highlighting の色分けがまだうまくいかない。
Code Highlighting に使われている Pygments は MoinMoin 本体でも使われているが、Moin 書式のパーサーから呼ぶ場合と出力される html が異なり、Markdown から使う場合は追加で css が必要となる。
cssを書いて配置
pygments 公式にある方法で好みのスタイル用の CSS を出力し、 ./MoinMoin/web/static/htdocs/common/ あたりに入れておく。
$ pygmentize -S default -f html > pygments.css
pygments 1.6 では以下のスタイルがデフォルトで使用可能。
['monokai', 'manni', 'rrt', 'perldoc', 'borland', 'colorful', 'default', 'murphy', 'vs', 'trac', 'tango', 'fruity', 'autumn', 'bw', 'emacs', 'vim', 'pastie', 'friendly', 'native']
wikiconfig.py
追加した css を全ての場合で読み込むように、wikiconfig.py に一行追加する。
stylesheets = [('all', url_prefix_static + '/common/pygments.css'),]
これでコードブロックの色分けが動作するようになった。