dokuwiki と markdown を相互に変換する

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つめについては、 <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 dokuwiki
```

出力されるものをコピペすれば 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 形式で取得できたので、あとは好きにしてください。

実例
----

この記事も 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 記法に変換できるので、これを用いれば良い。楽ちん。

<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では閉じタグと判断されてしまうため、 ```` \``` ```` と筆者が手動でエスケープしている。)

```` file
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 などがやや気になるが、およそ求める形ではないだろうか。 種々の記法に対して確認したいという人には、

``` code
$ curl https://www.dokuwiki.org/wiki:syntax\?do=export_xhtmlbody | pandoc -f html -t markdown_github -o test.md 
```

としてみることをおすすめする。