wiki-creole.js をリファクタリング

wiki-creole.js を、v0.0.3 から v0.1.0 へ。ユニットテストができるようになったので、リファクタリングをおこないました。行数が 200 行増えていますが、気にしないことに……。

https://gist.github.com/1496276/6c8ad26f2ddcc299974afdb9f9231696fd5fdb0f
https://tociyuki.sakura.ne.jp/archive/Text-Creolize/js/test_wiki_creole.html (ユニット・テスト)

この版では、StrScanner を導入しました。これは、Ruby の strscan.rb に似たふるまいをするメソッドをもっているオブジェクトです。strscan.rb が正規表現を適用するのに対して、文字列を比較したり探したりするという違いはありますが、ポインタの進め方の挙動は似ています。これを使うことで、Perl の非欲張りマッチを Javascript で実現するために文字列比較へ展開するのがわかりやすく記述できるようになりました。
ブロック処理ループを2重ループ内で continue と break をおこなっていたのに対して、リファクタリング後はトランポリン1重ループに変更しました。有限オートマトンの裸の実装に戻したという意味では、Perl 版の Text-Creolize の以前のバージョンに先祖帰りしたことになります。
前の版用のユニットテストを記述していて、エスケープとヘディングとテーブルの行末の省略可能マークをチルダ記号でエスケープしようとしたときのふるまいが、偏執狂的な場合に直感に反する挙動をしていたので、この部分のふるまいは直感通りになるようにユニットテストを変更しました。それに合わせて、コードもロジックを変更しています。具体的には、これまでのブロックのキャプチャ部分で行末の省略可能記号を読み飛ばす方式を止めて、ブロックのキャプチャ部では行末マークまで読み込んでからインライン処理に渡す方式へ変更しました。省略可能なマークを無視するのはインライン部がおこなうようにしています。