#author("2022-04-29T23:20:35+09:00","","")
* Markdown対応 [#k69c8ccb]

- ページ: [[BugTrack]]
- 投稿者: [[umorigu]]
- 優先順位: 低
- 状態: 提案
- カテゴリー: 本体新機能
- 投稿日: 2017-01-06 (金) 03:10:07
- バージョン: 1.5.1

** メッセージ [#oae216ad]
技術系の簡易マークアップ記法としてはMarkdownがデファクトスタンダードになっている。

PukiWikiの他の機能は維持したまま、Wiki記法としてMarkdownを使いたい。

*** 課題・懸念点 [#p270df9c]

- 1. PukiWiki文法とMarkdownを選択する必要がある。ユーザーから見た複雑さの増加
- 2. 実装の複雑化、これによるバグの増加
- 3. PukiWiki文法を前提としているプラグインとの整合性
- 4. プラグイン書式(インライン要素/ブロック要素)

*** 考察 by umorigu (2022/1-) [#h6d20d6b]

- PukiWiki文法 - Markdown のサイト単位の切り替えだと、他に比べてPukiWikiを選ぶ理由が弱い。少なくともページ単位での切り替えは必要 (既存のPukiWikiサイトでMarkdownが使える、という形)
- PukiWiki文法を使うユースケースに影響がないようにしたい
- JavaScriptが使えるのは前提でよい
- 外部ライブラリ (Markdownパーサー) にどの程度依存するか?
- HTMLタグの扱いをどうするか
-- Wikiを書きたい人が積極的にHTML直接入力を求めているとは思えない。自由入力はなしでいいのでは?
- CommonMarkでサポートしていない表組みをどうするか?
-- GFM (GitHub Flavored Markdown) 風にするのが良いか?
- そもそも複雑なことは求められていなく、 見出し、リスト、単一行文字修飾、程度が動作すればよいかもしれない
-- 「プラグインを一切サポートしない」はPukiWiki標準機能としてありか?なしか?

大きな課題はプラグイン

- 他のMarkdown採用のWikiやそれに類するソフトウェアがMarkdown中で「プラグイン」や「マクロ」をどのような文法で実現しているか?
-- "#" は見出しと重なるので使いにくそう。
- Calendar のように、別のページを取り込むプラグインに対してどう対処するか
-- PukiWiki文法しか解釈しないユーザープラグインをどうするか (プラグインの文法依存があるか?)


実現方法の選択肢をいくつか

- 1 PukiWiki文法のようにMarkdownを解釈する
-- 1.1. 自力でパーサーを作る
-- 1.2. 外部ライブラリを利用する
- 2 すべてテキストとして扱い、HTML出力までそのまま。パースと修飾をすべてJavaScriptで行う
- 3 Markdownテキスト を PukiWikiテキストに直接変換し、パースと修飾はPukiWikiテキストに対して行う
-- Markdown では意味がなく PukiWikiでのみ意味がある書き方を検出してエスケープする必要がある
-- プラグインが読み込むときはPukiWikiテキストになっているとプラグイン側での対応が不要になる


*** Markdown として認識されるために必要な要素 [#fa084e25]

- 見出し (# 始まり) 1,2,3,4
-- ( ==== や ---- は無くても許されるのでは・・・ )
-- CommonMark では見出しは # の後にスペースが必要
- 強調: * または _ で囲む
- リスト: 行頭に * または -
-- サブリスト (インデント): スペース2つ + -
- 番号付きリスト: 行頭に 数字. 1. 2. 3.
- 引用: 行頭に >
- ソースコード: ` バッククォートで囲む
- 区切り線 *** または ___ または ---
- 表組み・テーブル ( GitHub Flavored Markdown )
- 画像: 行頭に !
-- img タグ? (size 指定などは imgタグでないとできない)
- リンク [タイトル](リンク先URL)

*** MarkdownであってもPukiWikiとして組み込みたい機能 [#neb0a4aa]

- プラグイン
-- ブロックプラグイン
-- インラインプラグイン
- ページリンク BracketName

*** PukiWiki機能のうち、Markdownでは不要/あるいは動いては困る機能 [#mfc273c2]

Markdownとして書いているのに、PukiWiki的な文字修飾が動作するとマズイ

- PukiWikiの文字修飾機能: 太字・協調
- 見出し: *始まり
- リスト: -始まり

*** プラグインの対応 [#aa49339c]

- 理想的には、各プラグインがMarkdownのことを知らなくても、それなりに動作すること
-- そんなことが可能?
--- Markdown → PukiWiki, PukiWiki → Markdown が情報欠損なく変換できれば理論的にはできる
--- 一般的には無理なので、ある一定の文法範囲だけMarkdownは動作する、ということにする?
- 次点で、Markdownのことを知っているプラグインは、Markdownページで使える、ということにする
- 一番簡単なのは、「ページをMarkdownで書く際には自己書き換え型プラグインは一切動作しない」ということにする
-- どうやってそのルールを適用するか? (Markdown非対応のxxcommentプラグインがMarkdownページを書き換えないようにするか?) または 「AS-IS で動くように動く」「使わないでください」 という依頼のみにする
-- 自己書き換え型プラグインとは? (comment, pcomment →使用頻度が高いので厳しい)

** 参照 [#xcf01376]

- [[official:Plugins/markdown.inc.php]]
- [[BugTrack/2084]] [EXPERIMENTAL] 複数行のプラグイン引数を可能に

--------
- 書式のコンフリクトが深刻です。「Markdownの場合はプラグインの利用不可」としてもある程度は有用なのではないかと思っています。calendarの日単位の記事がMarkdownになるイメージ -- [[umorigu]] &new{2017-01-06 (金) 03:25:53};
- 記法をさらに一段抽象化して、「情報の構造/階層」と「そのデザイン」に分離する様に取り組まないと、プラグインインジェクションないしwiki text injection とでも言うべき脆弱性を作りこんでしまうかもしれませんね (^^; -- [[henoheno]] &new{2017-01-07 (土) 01:25:39};
- devneko: Pukiwikiを無理やりMarkdown記法に変えてみた ://qiita.com/devneko/items/fafac4ade37c9cb3d2f4 ://github.com/dotneet/pukiwiki-md --  &new{2017-01-09 (月) 13:55:18};
- 拡張子を見てrendererを切り替えるような実装が望ましいかなあと -- [[n1x]] &new{2017-01-09 (月) 18:48:24};
- ブログ書くなら Pukiwiki記法 か Markdown記法 か (WordPressの場合) ://tande.jp/lab/2012/07/1838 --  &new{2017-01-11 (水) 01:31:50};
- PukiwikiでMarkdown記法を使う (PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACKで、部分的に) ://blankrune.hateblo.jp/entry/2014/01/27/233945 --  &new{2017-01-11 (水) 01:33:38};
-- pukiwiki-plugin/plugin/markdown.inc.php ://github.com/sonots/pukiwiki-plugin/blob/master/plugin/markdown.inc.php --  &new{2017-01-11 (水) 01:35:33};
-- [[official:自作プラグイン/markdown.inc.php]] --  &new{2017-01-11 (水) 01:36:44};
-- markdown.inc.phpは現状でPHP 8.0未対応で、これを使っているページはPHPエラーで真っ白になって表示できません。 -- [[-]] &new{2021-11-28 (日) 10:23:04};
- Markdown文法の「改行」末尾に空白2つは、見た目もわからないし生理的に受け付けない -- [[kintok]]  &new{2017-01-20 (金) 21:24:50};
-- 「改行」末尾に空白2つ、は最近のMarkdownの『方言』では不要になってきています。 -- [[m0370]] &new{2021-04-27 (火) 17:03:57};
- markdown.inc.phpを入れた時に動かなくなるプラグインのリストはあるのでしょうか?なんとなくレンダリングに関係するプラグインはダメで、そうでないものは大丈夫なことが多い気はしていますが。。 -- [[medst]] &new{2018-08-21 (火) 07:31:58};
- 将来も持続的に発展してゆくためには、やはりPukiwiki記法にこだわらずmarkdown記法を取り込んでゆく必要があるように思いますね。markdown記法はユーザー数が圧倒的に多いですからPukiwikiコミュニティも非常に盛り上がるはず。pukiwiki.ini.phpに define('PKWK_SAFE_MODE', 1); のような設定項目を作って記法をスイッチできるようになれば理想ですが。 -- [[-]] &new{2021-11-28 (日) 10:56:26};
-- 全体設定で文法を切り替えることにするというのはPukiWiki文法は使えずにMarkdownだけ使えることになりますかね。そうだとするとMarkdownを採用する他のWikiソフトウェアに比べてPukiWikiを選択する理由があまりないので理想とも言えないんですよね。導入するなら共存しかないのかなと思います -- [[umorigu]] &new{2021-11-28 (日) 11:59:02};
- 全体設定ではなく、ページ毎にPukiwiki記法とMarkdown記法を使い分けられるようにしてみました。https:// oncologynote.com/?ae42d4ca0c [[github.com:m0370/pukiwiki153_md]] -- [[m0370]] &new{2022-01-02 (日) 17:24:44};
-- Pukiwiki記法のページはそのままに、編集画面でMarkdownのチェックボックスをオンにして記事を確定すると本文に#notemdの文字を書き込むようにしています。そして、#notemdがある記事はPukiwiki記法のparserではなくMarkdown parserに記事を渡します。Pukiwiki記法で書いたページには触らないので既に稼働しているPukiwikiからの引越もしやすいかと思います。Markdown記法の場合はフリーのjavascriptを読み込むだけで書式のリアルタイムプレビューも可能です。なお、プレビュー機能、複数行プラグインに未対応です。 -- [[m0370]] &new{2022-01-02 (日) 17:28:10};
-- なお、MarkdownはHTMLをそのまま投入できるので誰でも自由に書き込めるPukiwikiの場合はクロスサイトスクリプティングのような脆弱性の問題があります。今回の改造ではerusev/markdownのMarkdown parserを使っていて、このparserにはセーフモードにする(あるいはHTMLは全てエスケープする)という設定項目もあり、pukiwiki.ini.phpでこれを有効にすることができるようにしていますが、セーフモードにすると表記したもののうちリンクを含む部分はコードが変換されずそのままむき出しになるので見栄えがわるいです。 -- [[m0370]] &new{2022-01-02 (日) 17:33:54};
-- Markdown対応の実装ありがとうございます。非常に興味深いです。ご指摘のようにMarkdownはその特徴としてHTMLタグをそのまま書けるので、[[htmlinsert>official:自作プラグイン/htmlinsert.inc.php]]と同じような対処が必要になりそうです。blogのように第三者に編集をさせない用途があるのはわかってはいるのですが、Wikiとしての利用((限定されていたとしても)複数人から編集され内容は必ずしも安全でない)を優先した仕様であるべきと考えています -- [[umorigu]] &new{2022-01-12 (水) 02:03:42};
-- SimpleMDEでのリアルタイムプレビューはとてもよいですね -- [[umorigu]] &new{2022-01-12 (水) 01:44:16};
-- [[github.com:m0370/pukiwiki153_md/commit/e6a5fd7bc03d1f8fab0cdf9eaed5852505d582e]] ここのコミットからpukiwiki.ini.phpでsafemodeを設定できるようにして、Pukiwiki記法で書いたときと同じmake_link.phpのhtmlsc($string)に渡すようにしたので、pukiwiki.ini.phpでsafemodeを有効にしている場合はHTMLタグのspecialcharactersはおそらくPukiwiki記法で書いた場合と同じ程度には無害化されていると思います。MULTILINEプラグイン対応はいま取り組んでいますが、まだ解決していません。 -- [[m0370]] &new{2022-01-12 (水) 18:12:14};
-- m0370 さんの pukiwiki153_md の変化点がわかりやすいようにまとめなおしました。 [[github.com:umorigu/pukiwiki153_md/pull/2]] 変更は意図通りでしょうか? これを見ると、commentやvote等、自己書き換え型のプラグインはすべて本文がMarkdownで書かれていることを知っている必要がありますね(なにか対策ができるか、そういうものとして全プラグインを対応させるか) -- [[umorigu]] &new{2022-01-23 (日) 19:15:21};
- Pukiwiki 1.5.4のPukiwiki記法とMarkdown記法対応版も作ってみました。例によって複数行プラグインの対応させ方がわからず、複数行プラグインは使用できません。[[github.com:m0370/pukiwiki154_md/releases/tag/v0.1]] https:// oncologynote.com/?baa57eda56 -- [[m0370]] &new{2022-04-25 (月) 16:37:01};
-- Markdown実装ありがとうございます。参考になります。外部ライブラリを使うかどうかと、既存プラグインとの互換性が課題だなと思っています -- [[umorigu]] &new{2022-04-29 (金) 23:20:35};

#comment

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.013 sec.

SourceForge