この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2009年7月)

2009年7月2日

Bug-org 486778 Spell checker's wavy line is sometimes drawn through misspelled words
初回投稿日時: 2009年07月02日05時46分44秒
カテゴリ: Mozilla Core バグ修正
SNS: (list)

波線を引くときに、波線の中央を基準に上下方向の位置を決めていたのですが、それだと欧文のフォントでは重なりすぎて見にくい場合がある、というバグです。

波線の上端を通常の下線の上端に揃えることでこの重なってしまう問題はほぼ修正されるはずですが、それでは日本語フォントの場合にinput要素からはみ出してしまうことが多くなります(波線はTSFで多用されるので日本語にとっても重要)。

そこで、nsTextFrameThebesから選択範囲用の下線を描画する時には利用できるベースラインから、行の下端までの高さをヒントとして渡すことにしました。もし、フォントの下線指定位置に波線を描画しようとしてはみ出す場合は、最高で、ベースライン位置まで持ち上げるようにするためです。

しかし、ここにはひとつ問題があり、nsTextFrameThebesからは行の情報が正確には分かりません。行の詳しい情報はレイアウト中にのみ構築され、描画時には不要になっているのでデータは破棄されているためです。

ですが、それで正確な行の高さが分からないのは、vertical-alignが絡む、複雑なレイアウトをしている場合の話であって、多くの場合に問題となるinput要素やtextarea内では発生しない問題です。また、複雑なレイアウトを行っている場合、input要素に比べて余裕があるはずなので、HTMLエディタで問題が発生する状況は無いのではないか、という前提において、シンプルな行高推測を行って、ヒントとすることにしました。

line-height値を含めて行高を計算して、それが文字サイズに対して1倍以上ならそこから求められた高さをヒントとして利用します。それ以外の場合はどのみちはみ出してしまうので、1倍時の高さをヒントとして渡すように修正しています。

もしこの修正によってTSFモードで波線がはみ出してしまう場合を見つけたら、bugzilla-jpに報告をお願いします。

関連するかもしれないエントリ

bug-org 486778を含むエントリ