--- title: dokuwiki と markdown を相互に変換する tags: DokuWiki Pandoc author: showmeear slide: false --- dokuwiki と markdown を相互に変換する ===================================== ## TL;DR ` $ curl https://www.dokuwiki.org/wiki:syntax\?do=export_xhtmlbody | pandoc -f html -t markdown_github -o test.md ` モチベーション -------------- 自分用のドキュメントを dokuwiki で書いているが、Qiita などで外部に公開したいときには dokuwiki 記法ではなくデファクトな markdown 記法の文書を手に入れる必要がある。 dokuwiki を使いつつ markdown 記法の文書を手に入れる手段としては以下のものが考えられる。 1. そもそも dokuwiki で markdown を使う。 2. dokuwiki 記法を markdown 記法に変換する。 1つめについては、 DokuWiki+Markdowkuの感想 - Qiita にある通り、Markdowku というプラグインを使えば可能だが、dokuwiki と markdown の混合になってしまうことや、dokuwiki 独特のリンク記法はそのまま(っぽい)という問題がある。これでは外部で markdown として利用はできない。 そこで、2つめの手法を採用したい。 文書の記法変換は Pandoc が主流なので、これを用いる。 Pandoc ------ Pandoc については 多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう - Qiita が詳しい。 以下は Pandoc の導入と、dokuwiki の導入が済んでいるものとする。 ### markdown → dokuwiki Pandoc ではデフォルトで markdown 記法を dokuwiki 記法に変換できるので、これを用いれば良い。楽ちん。 ``` code $ pandoc -f markdown(_github) -t dokuwiki ``` 出力されるものをコピペすれば dokuwiki に転載が簡単。 (ファイルとして保存したかったら `-o output.txt` などのオプションを付ければOK。) ### dokuwiki → markdown 残念ながら、Pandoc では input として dokuwiki 記法はサポートされていない。(僕は Haskell 不得手なので誰か作ってください。) そこで、やや遠回りなようだが、 **dokuwikiからhtmlを取得 → htmlをmarkdownに変換** という手段を取る。 dokuwikiからhtmlを取得する方法だが、ほしいのは body の内容だけで、 `` タグの中身とかはいらない。そんな時向けに dokuwiki はオプションを用意している。 export [DokuWiki] にある通り、ページのURLの末尾に `?do=export_xhtmlbody` をつければ良い。 なので、これを curl で取得して pandoc に通せば、html として入力できる。 具体的に言うと、変換したいページの URL が http://dokuwiki.example.com/doku.php/wiki/example であるとき ``` code $ curl -u : http://dokuwiki.example.com/doku.php/wiki/example\?do\=export_xhtmlbody | pandoc -f html -t markdown_github ``` とすれば github markdown 形式で出力される。形式をただの markdown にしていないのは、単純にこのほうが求める形に近かったからであり、raw markdown が欲しい人は `-t markdown` とすれば良い。 なお、`-u :` をつけているのは認証のためである。 ファイルに保存したい場合は先程同様 `-o output.md` オプションを付ける。 これで markdown 形式で取得できたので、あとは好きにしてください。 実例 ---- この記事も dokuwiki で書いて markdown にして qiita に投稿しているので、この記事の上までの部分を実例として、どう変換されるのか記しておく。 dokuwiki 版 ``` file ====== dokuwiki と markdown を相互に変換する ====== ===== モチベーション ===== 自分用のドキュメントを dokuwiki で書いているが、Qiita などで外部に公開したいときには dokuwiki 記法ではなくデファクトな markdown 記法の文書を手に入れる必要がある。 dokuwiki を使いつつ markdown 記法の文書を手に入れる手段としては以下のものが考えられる。 - そもそも dokuwiki で markdown を使う。 - dokuwiki 記法を markdown 記法に変換する。 1つめについては、 [[http://qiita.com/kuwa72/items/9193d91775a0b535a58a | DokuWiki+Markdowkuの感想 - Qiita]] にある通り、Markdowku というプラグインを使えば可能だが、dokuwiki と markdown の混合になってしまうことや、dokuwiki 独特のリンク記法はそのまま(っぽい)という問題がある。これでは外部で markdown として利用はできない。 そこで、2つめの手法を採用したい。 文書の記法変換は Pandoc が主流なので、これを用いる。 ===== Pandoc ===== Pandoc については [[http://qiita.com/sky_y/items/80bcd0f353ef5b8980ee | 多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう - Qiita ]] が詳しい。 以下は Pandoc の導入と、dokuwiki の導入が済んでいるものとする。 ==== markdown → dokuwiki ==== Pandoc ではデフォルトで markdown 記法を dokuwiki 記法に変換できるので、これを用いれば良い。楽ちん。 $ pandoc -f markdown(_github) -t pandoc 出力されるものをコピペすれば dokuwiki に転載が簡単。 (ファイルとして保存したかったら ''-o output.txt'' などのオプションを付ければOK。) ==== dokuwiki → markdown ==== 残念ながら、Pandoc では input として dokuwiki 記法はサポートされていない。(僕は Haskell 不得手なので誰か作ってください。) そこで、やや遠回りなようだが、 **dokuwikiからhtmlを取得 → htmlをmarkdownに変換 ** という手段を取る。 dokuwikiからhtmlを取得する方法だが、ほしいのは body の内容だけで、 '''' タグの中身とかはいらない。そんな時向けに dokuwiki はオプションを用意している。 [[https://www.dokuwiki.org/export | export [DokuWiki] ]] にある通り、ページのURLの末尾に ''?do=export_xhtmlbody'' をつければ良い。 なので、これを curl で取得して pandoc に通せば、html として入力できる。 具体的に言うと、変換したいページの URL が http://dokuwiki.example.com/doku.php/wiki/example であるとき $ curl -u : http://dokuwiki.example.com/doku.php/wiki/example\?do\=export_xhtmlbody | pandoc -f html -t markdown_github とすれば github markdown 形式で出力される。形式をただの markdown にしていないのは、単純にこのほうが求める形に近かったからであり、raw markdown が欲しい人は ''-t markdown'' とすれば良い。 なお、''-u :'' をつけているのは認証のためである。 ファイルに保存したい場合は先程同様 ''-o output.md'' オプションを付ける。 これで markdown 形式で取得できたので、あとは好きにしてください。 ``` markdown 版 (ただし、```` ``` ```` がqiitaでは閉じタグと判断されてしまうため、 ```` \``` ```` と筆者が手動でエスケープしている。) ```` file dokuwiki と markdown を相互に変換する ===================================== モチベーション -------------- 自分用のドキュメントを dokuwiki で書いているが、Qiita などで外部に公開したいときには dokuwiki 記法ではなくデファクトな markdown 記法の文書を手に入れる必要がある。 dokuwiki を使いつつ markdown 記法の文書を手に入れる手段としては以下のものが考えられる。 1. そもそも dokuwiki で markdown を使う。 2. dokuwiki 記法を markdown 記法に変換する。 1つめについては、 DokuWiki+Markdowkuの感想 - Qiita にある通り、Markdowku というプラグインを使えば可能だが、dokuwiki と markdown の混合になってしまうことや、dokuwiki 独特のリンク記法はそのまま(っぽい)という問題がある。これでは外部で markdown として利用はできない。 そこで、2つめの手法を採用したい。 文書の記法変換は Pandoc が主流なので、これを用いる。 Pandoc ------ Pandoc については 多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう - Qiita が詳しい。 以下は Pandoc の導入と、dokuwiki の導入が済んでいるものとする。 ### markdown → dokuwiki Pandoc ではデフォルトで markdown 記法を dokuwiki 記法に変換できるので、これを用いれば良い。楽ちん。 ``` code $ pandoc -f markdown(_github) -t pandoc \``` 出力されるものをコピペすれば dokuwiki に転載が簡単。 (ファイルとして保存したかったら `-o output.txt` などのオプションを付ければOK。) ### dokuwiki → markdown 残念ながら、Pandoc では input として dokuwiki 記法はサポートされていない。(僕は Haskell 不得手なので誰か作ってください。) そこで、やや遠回りなようだが、 **dokuwikiからhtmlを取得 → htmlをmarkdownに変換** という手段を取る。 dokuwikiからhtmlを取得する方法だが、ほしいのは body の内容だけで、 `` タグの中身とかはいらない。そんな時向けに dokuwiki はオプションを用意している。 export [DokuWiki] にある通り、ページのURLの末尾に `?do=export_xhtmlbody` をつければ良い。 なので、これを curl で取得して pandoc に通せば、html として入力できる。 具体的に言うと、変換したいページの URL が http://dokuwiki.example.com/doku.php/wiki/example であるとき ``` code $ curl -u : http://dokuwiki.example.com/doku.php/wiki/example\?do\=export_xhtmlbody | pandoc -f html -t markdown_github \``` とすれば github markdown 形式で出力される。形式をただの markdown にしていないのは、単純にこのほうが求める形に近かったからであり、raw markdown が欲しい人は `-t markdown` とすれば良い。 なお、`-u :` をつけているのは認証のためである。 ファイルに保存したい場合は先程同様 `-o output.md` オプションを付ける。 これで markdown 形式で取得できたので、あとは好きにしてください。 ```` a タグや code などがやや気になるが、およそ求める形ではないだろうか。 種々の記法に対して確認したいという人には、 ``` code $ curl https://www.dokuwiki.org/wiki:syntax\?do=export_xhtmlbody | pandoc -f html -t markdown_github -o test.md ``` としてみることをおすすめする。