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