レ点腫瘍学ノート

pukiwikiカスタマイズ箇所/自作プラグイン/markdown.inc.php の履歴ソース(No.3)

#author("2021-12-30T09:18:41+09:00;2021-12-30T03:23:07+09:00","default:tgoto","tgoto")
#markdown{{
&tag(pukiwiki,markdown);

!ogp(https://github.com/m0370/pukiwiki_markdown.inc.php)

[PukiwikiでMarkdownを使用可能にするプラグイン](https://pukiwiki.osdn.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3/markdown.inc.php)は[sonotsさんが作成されたもの](http://pukiwiki.sonots.com/?Plugin%2Fmarkdown.inc.php)が有名ですが、これはPHP 8.0に対応していないためにPukiwiki 1.5.4では使用できませんでした。そこではいふんさんがこれをPHPに対応させたver1.21を作成してくれて、それがPHP 8.0で使用できるようになっています。

!ogp(https://osdn.net/downloads/users/37/37376/markdown.inc.php/)

しかし、sonotsさんのMarkdownプラグインは本当に純粋にテキストをMarkdown parser(Michelf/markdown)に投げているので、このMarkdown記法の中ではPukiwikiプラグインは使用できません。

ところで、先日Pukiwiki 1.5.3を無理やりMarkdown対応する改造をしているうちに、Michelf版ではなくerusev版を使っていること、またこの無理やり改造のなかで __#plugin__ という表記法ではなく __!plugin__ という表記法に変えることでMarkdownの見出し表記とPukiwikiプラグインを共存している方法があることに気がつきました。そこで、これを組み合わせればsonotsさんのMarkdownプラグインを使いながら !plugin の表記法にすることでPukiwikiプラグインも使用できるのでは?と考えました。

### 参考記事

!ogp(https://oncologynote.com/?2a74686299)

## Pukiwiki式もMarkdown式もリンクが使える

さらに、Markdown parserにかける前のテキストをhtmlsc() に投げるかどうかでPukiwiki方式のリンクが使えるかMarkdown式のリンクが使えるかが切り替わることがわかったので、強引にMarkdown式のリンクをPukiwiki式のリンクに書き換える一文を挟み込むことでいずれの書式でリンクを書いても使えるようになりました。

- Pukiwiki式リンク表記
    - [[Google>https://google.com]]
→ [[Google>https://google.com]]
- Markdown式リンク表記
    - [Google](https://google.com)
→ [Google](https://google.com)

## Markdown parserはMichelfでもerusevでも使える

Markdown parserはどれをつかっても大差はないのですが、sonotsさんのオリジナルは[Michelf/markdown](https://github.com/michelf/php-markdown)のMarkdown parserを使っていて、今回は[erusev/markdown](https://github.com/erusev/parsedown)も使えるようにしています。erusev/markdownのほうが改行が反映されるオプションを設定しやすく、また(セーフモードをfalseにすれば)RAW HTMLも使いやすくなっているので、個人的にはerusev/markdownのほうが好みです。ただし、個人または限られた人物のみが使用する場合以外はerusev/markdownを使用する場合はMarkdown parserのセーフモードをオンにするほうが良いでしょう。

## 設置方法

!ogp(https://github.com/m0370/pukiwiki_markdown.inc.php/releases/tag/v1.22)

### Michelf版を使用するとき

- Michelf版のmarkdown.inc.phpと、"Michelf"のMarkdown parserフォルダごとを、両方ともPukiwikiのpluginフォルダに設置します。
- 本体内の設定項目でmarkdownを使うかmarkdownExtraを使うのかを選択できます。

### erusev版を使用するとき

- erusev版のmarkdown.inc.phpと、"vendor"と書かれたMarkdown parserフォルダごとを、両方ともPukiwikiのpluginフォルダに設置します。

erusev版不特定多数が使用できるような場合はセーフモードまたはHTMLエスケープモードの設定をしておく方が望ましい。markdown.inc.phpの49行目の $result = $parsedown ->setBreaksEnabled(true) ->text($body); が設定を記載する場所です。詳しくは公式サイトのtutorialをご覧ください。

!ogp(https://github.com/erusev/parsedown)

- 改行が不要な場合は ->setBreaksEnabled(true) を削除します。
- ->setSafeMode(true); を追加すればセーフモード
- ->setMarkupEscaped(true); を追記すればHTMLエスケープモードで、HTMLが全てエンティティ化されて無効になります。

例

    $result = $parsedown ->setSafeMode(true) ->setBreaksEnabled(true) ->text($body);

## 書き方

基本的にsonotsさんのオリジナルと同じです。

ただし、事前にpukiwiki.ini.phpで define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0); の設定が0(つまり複数行プラグインを使用可能)になっていることを確認します。
}}