レ点腫瘍学ノート

pukiwikiカスタマイズ箇所/2022/Pukiwiki 1.5.3も無理やりMarkdown記法とPukiwiki記法に両対応させた の履歴ソース(No.1)

#author("2022-01-02T09:04:47+09:00;1970-01-01T18:00:00+09:00","default:tgoto","tgoto")
先週Pukiwiki 1.5.3を無理やりMarkdownに対応させたという記事を公開していました。Pukiwiki ではどうしても書き方が馴染めないと言う人が少なくない上にMarkdownエディターはいろいろな優れたアプリがどんどん増えていて自分に合った使いやすいものがかなり選べる状態になっています。そこでPukiwikiもやはりMarkdownを取り込んでいかないといけないと考えていたのでした。

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

しかし、先日公開した無理やりMarkdown対応した[[Pukiwiki-md>https://github.com/m0370/pukiwiki153_md/releases/tag/pukiwiki1.5.3md]]は全てのページがMarkdownでしか書けないために不便を感じることもありました。 従来型の書き方を使いたいと言うこともあるからです。 そこで、ページ282種類の書き方を使い分けることができるような改造しました。さらに、チェックボックスで編集からそのいずれかを採用するかを選ぶことができます。

## 前回からの改良点

- ページ毎にPukiwiki記法かMarkdown記法を選択することができるようになっています。
- 編集画面のチェックボックスでどちらの記法を使うかを選べます。
- Markdown記法を使っているときでもプラグインが使用可能です。
- Pukiwiki記法の場合はMarkdownエディタ「[[SimpleMDE>https://simplemde.com/]]」を使用可能にする予定です。

### 編集画面

チェックボックスでMarkdownにチェックを入れると、Markdown記法で書くことができるようになります。チェックボックスを外していると従来のPukiwiki記法になります。

いずれの記法を選んでいるかは内部的にはテキストファイルに#notemdという偽装プラグインを書くことで区別しています。ページ毎に使い分けが可能になっています。ただし、プレビュー機能はこの使い分けに対応していないため、プレビューボタンを非表示にしています。

### Markdown記法でもプラグインが使用可能

従来のPukiwiki記法ではブロックプラグインを使用する場合は行頭に#(シャープ)の記号を付けていました。しかし、Markdownでは行頭の#は見出し記号になりますのでプラグインに使用できません。そこで、!を使っています。インラインプラグインは従来通り&plugin();で記載します。

- #plugin
- !plugin
- &plugin();

なお、Markdown parserに本文を投入する関係で複数行プラグインには未対応です。

## 前回からの改装箇所

- #notemdというキーワード(偽装プラグイン)が本文にある場合はMarkdown記法で、ない場合はPukiwiki記法でパースします。このため、convert_html.phpを2つのParser(Pukiwiki用とerusev/Parsedown)を本文中に#notemdが含まれているかどうかで区別しています。
- さらに#notemdそのものを消してしまったり書き間違えたりするリスクを減らすため、編集画面などにはこの#notemdは非表示になるようにconvert_html.phpに改装を行いました。
- #notemdが編集画面で非表示になるということは、手動で#notemdと書いてMarkdown記法に切り替えることができなくなることでもあるので、lib/file.phpの1093-1105行目付近およびlib/html.phpの409行目付近および430行目付近に手を入れてチェックボックスでMarkdownかどうかを選択できるようにしました。なお、新規ページ作成での初期設定はMarkdownになるようにしました。
- 本文中に#notemdがあるかどうかでMarkdownのチェックボックスのデフォルト値を振り分けるようにしました。これを行うためにlib/file.phpに内部functionとして(#authorプラグインを参考に)remove_notemd、get_notemdなどのfunctionを新設しました。
- 本家のPukiwikiに比べて無効化している機能
  - 複数行プラグインは現在動作させることができません。
  - プレビューはPukiwiki記法とMarkdown記法が正しく両方を反映させることができないので、プレビューボタンを便宜上非表示にしています。
  - プラグインによっては動作確認が不十分なことがあります。