朝顔日記

rNote に Markdown を導入

2008-12-30

このサイトは、rNote を使って構築しているんですが、他にもいくつか管理しているサイトでも rNote を使っていたりします。このサイトの場合は自分で記事を書いて、それを自分でマークアップしているのでいいのですが、ほかのサイトの場合はお客さん(誰)が書くのでいわゆる wiki 的な記法が使えると便利です。で、自作のオンライン更新用のエディタはそれなりの記法を装備していて、それを保存する際に xml に変換して保存しています。が、再編集する場合には再度、wiki 的な記法に逆変換しているので、あまり凝った記法は使えません。

rNote は記事を xml で記述しておいて、それを見せる段になると (x)html に整形する仕組みになっているのです。メリットとしては、ひとつのエントリーがひとつの xml ファイルになっているので、それなりに汎用性が高い言えます。しかし、xml やら html やら知らない人にしてみれば、記事を xml としてマークアップするのが大変だというでもメリットもあります。そこで考えたのが、rNote 本体を改造して、wiki 的な記法で記事本文を書いておいてもそれを整形する際に自動でよしなにする方法です。記事本文を xml にするのをあきらめて、head 的な部分のみ xml という形に甘んじれば(?)、かなり扱いは簡単になるはずです。

ということで、rNote 本体を改造して、PHP Markdown Extra というライブラリを使えるようにしてみました。以下改造箇所。

rnote.php の16行目辺りで、markdown を使うようにします。


require("rnote_config.php");
include_once("markdown.php");

rnote.php の255行目付近の get_XMLTag 関数をちょっといじって、以下のように。


function get_XMLTag($tag,&$str){
  if(preg_match("/<$tag.*?>[[:space:]]*(.*)[[:space:]]*<\/$tag>/s",$str,$buf)) {
    if($tag == TAG_TEXT) {                 // 本文用要素であれば
      $buf[1] = markdown($buf[1]);         // markdown の処理
    }
    return $buf[1];
  }
  return '';
}

これで、本文を Markdown 記法で書いても表示する際には、なんとかなっているはずです。

さて、あとは使いやすいオンラインエディタを作るだけです。(それが問題

「rNote に Markdown を導入」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2008/12/diary_081230a.html