CodeMirror
Ubiquity 0.1.2を入れてみた。んで、コードエディター内のコードがハイライトされることに驚いた。
興味がわいてソースコードを見てみると、codemirror.jsというのが使われている様だ。
こいつは何だ? ってことで検索するとFirebugの機能を拡張する | OSDN Magazineが引っかかる。どうもRainbow for Firebugにも使われているJavaScriptパーサ & ハイライトをするライブラリらしい。
ちょっと前からこの手のエディタがどうやって実現させているか気になっていたので、中身をもう少し探ってみた。
- HTMLには
textarea
が用意されていれば良い textarea
要素を引数にライブラリを使用すると、textarea
がiframe
に置き換わる- iframe内のドキュメントに対して、
document.designMode = "on"
(IEの場合はdocument.body.contentEditable = "true" ?)をする。- これをすることでドキュメント内にアイビーム(カーソル)が現れ、コンテンツの編集が可能になる。
keydown
,keypress
等のイベントを受け取る- イベントを元にiframe内のドキュメントにコンテンツを継ぎ足していく(Enterが押されたらカーソル位置に<br>を入れるなど)
- 最後にコードをパースしてハイライト
こんな感じのことをしている様だ。
ライセンスもBSDなので扱いやすいし。もう少し研究してみる。最終的には、JShellに組み込めたら良いなと思っている。