まだ安定していないのでリリースまではしてないのですが、自分の中で懸案だった幾つかのトラブルが解消したっぽいので、nehan.jsのバージョンを5.0.5から、5.1.0へと上げました。
ちなみに安定していなくても、縦書き文庫では問答無用で最新版を走らせています。
利用者がバグを見つけてくれることが多いからです…
変更点など
1. 複数ページに渡るフロート処理の改善
5.0系列では(主に横書きの時に)バグがあったのですが、5.1系では縦書き横書き共に複数ページに渡るfloatが正しく最後まで表示されるようになりました。
2. last-child系の取得ができるように
IE8を考慮したlexerの処理を刷新したことで、lexing中に取れる情報を利用できるようになり、結果としてlast-child系のpseudo-class(last-child/last-of-type/only-child/only-of-type)を利用できるようになりました。
これまでのLexerは、主にIE8でフリーズさせないために、バッファリングしながら処理させていたのですが、これだと同一階層のDOMにおける先のlexing内容が不定になるため、first-child/nth-child/nth-of-typeなどはとれても、末尾からの情報は取得できていませんでした。
3. 複数のInlineジェネレータをまたぐ禁則処理の対応
これまでは複数のInlineElementをまたぐ構造になる時、行末の禁則処理が正しく動作していなかった場合があったのですが、この不具合の大半(残念ながら全てではない…)を改善することが出来ました。
4. 複数ページに渡るテーブルのborder-collapseを改善
ページの途中で途切れた場合にもborderの最後が表示されてしまっていたのですが、これが消えるように(ただしたまに表示されることもある)なりました。
5. 表示できないエレメントを適切にスキップ
どうやっても指定されたページの中に表示できないレイアウト(深すぎるテーブルとか)はスキップして続きのレイアウトから表示できるようになりました。
6. 処理速度の改善
一部のロールバックが必要だった処理をロールバック不要な処理に改善し、全体のパーススピードが上がりました。
7. セレクタに新しいコールバック関数を追加
onload
/oncreate
に加えて、onblock
/online
/ontext
というコールバックが追加されました。
それぞれブロックレベルの作成タイミング、その中の匿名ラインボックスの作成タイミング、更にその中のテキストブロックの作成タイミングをフック出来ます。
この辺のことについては、いずれチュートリアルと共に別エントリで説明する予定です。