2012年2月27日月曜日

ESウェブブラウザ通信 - Acid2テスト #2

前々回に続いて今回はAcid2テストの2回目です。今回は、データURLなし版のAcid2テスト(002-no-data)を表示できるようにするところまで進めていきます。

z方向の描画順

r2418
前回の#17のr2418では、z方向の描画順を修正しました。Acid2では、未対応のobject要素の中の'ERROR'というテキストが前面にくるようになりました。崩れてはいますが、これはこれでより正しい動作に近づいて来ています。

右寄せした、実効的な横幅がゼロのフローティング ボックス

r2419
#17のr2419では、フローティング ボックスの有効な横幅の計算を正しく行うように修正しました。ところがAcid2に関しては、口の部分が以前よりも崩れる結果となってしまいました(この崩れ方は、Firefox 2のAcid 2の画面(下図)とほとんど同じだったりします)。

Firefox 2のAcid2 (出典: Firefoxacid2.png)
崩れている口の部分は、高さが0のフローティング ボックスがあります。したがって、ラインボックスの横幅を狭める、実効的な横幅は0pxになります。しかし、floatプロパティーの値は'right'なので、その位置にくるのはフローティング ボックスの右辺でないといけないところが、左辺が来てしまってr2419のような状態になってしまっていました。

r2420
r2420で、この点を修正しています。なお、フローティング ボックスの包含ボックスの幅がautoの場合、フローティング ボックスの横幅は実効的な横幅ではなくて、本当の外側の幅で計算するようにしています。実効的な横幅が影響するのはラインボックスの幅だけだと考えておけば大丈夫そうです。

14行目

最下行の14行目はCSSテーブル モデルをテストしている部分です。CSSテーブル モデルには、前回#17r2432で対応しました。

r2432
4-5行目

ここは、object要素を使って目を描いている部分で、以下のような階層構造になっています。

<object data="data006">
  <object data="http://www.damowmow.com/404/" type="text/html">
    <object data="data007">ERROR</object>
  </object>
</object>

このうち、"data006"と"http://www.damowmow.com/404/"はそれぞれobject要素として処理できない内容なので、それぞれ子の要素を替わりに表示するような動作になります(オブジェクト フォールバック)。そして最後の"data007"は有効なpng画像になっていて最終的にはこれが目の画像として表示されないといけません。

まず、r2443でオブジェクト フォールバックにひとまず対応させています。

r2443
入れ子になっている2つ目のインラインのobject要素にはwidthとheightが設定されているのですが、r2443ではその設定をそのまま使用したために赤い部分が出てくるようになってしまいました。オブジェクト フォールバックが働いた場合には、通常のインライン要素と同様にwidthheightの設定は無視するのが正しい処理のようです(参考)。r2445では、その実装に加えて、インライン ブロックのようにshrink-to-fitアルゴリズムを使って幅と高さを計算するようにしています。

r2445
オブジェクト フォールバックの対策ができてきたので、r2446でひとまずはイメージ用に特化させてobject要素の処理を実装しています(object要素の詳細実装はCSSモジュールの実装が一段落してから進めていきます)。CSSモジュールの処理としては、この段階でAcid2に対応できるようになっているはずだったのですが、r2446ではHTTPモジュールなどにバグがあって、目の背後に設定されている黄色の背景画像を取得できなかったために下図のような鷹の爪団状態になってしまっていました。

r2446
r2447からはr2452までURLモジュールやHTTPモジュールの修正を行って、r2452でデータURLなし版のAcid2テストを表示できるようになりました。CSSモジュールが落ち着いてきたら、それ以外のモジュールもきちんとテストしながら開発を進めていかないといけません。

r2452
まとめ

ここまで来ると、あとはデータURLに対応すれば通常のAcid2テストにも成功できそうです。データURLも一気に実装してしまいたい気もしなくもないのですが、次回以降はまだしばらくCSSモジュールの開発をテストスイートを使って進めていく予定です。

2012年2月23日木曜日

ESウェブブラウザ通信 - CSS 2.1 Test Suite #17

前回はAcid2テストの途中経過を報告しましたが、今回はまたCSS 2.1のテストスイートに戻ります。今回テストするのはAcid2で問題が見つかっていた以下の3箇所です。
  • インライン要素の描画順(9.9)
  • 背景画像の描画(14.2)
  • CSSテーブルモデル(17.2)

階層表現

z-indexなどの階層表現については、昨年10月の#3で割合と実装を進めていますが、インラインレベルの要素の描画順については宿題にしてありました。

stack-floats-003

このテストでは各ボックスのx, y座標は合っているのですが、インライン要素の'XXXXX'という部分をツリー順に描画してしまっているので、あとからフローティング ボックスの赤い背景で上書きされてしまっていました。

r2417
r2418で、仕様通りに非インラインレベルボックスをインラインレベルボックスより先に描画するという処理を実装しました。

r2418
 ・ stack-floats-001

このテストは、#4でclear-float-002に対応したときの誤った修正が原因で崩れていました。このテストの中のフローティング ボックスの外側の高さは0なので有効な幅は0として計算しなくてはいけません。

r2418
r2419で修正しています。clear-float-002のための再修正については、#4に追記しています。

r2419

以上で9.9のテストについては、階層の表示順序そのものについてはすべてテストに合格するようになりました。未対応のプロパティーなどで表示が崩れているものがありますが、それらはまた改めてテストしていきます。

背景画像

 ・ z-index-abspos-009

このテストは9.9のテストですが、 絶対配置されたボックスの背景イメージの描画に未対応で崩れていました。

r2420
r2421で、絶対配置されたボックスの背景イメージも描画できるようにしています。(なお、四角形の外側の細い赤い線はテスト自体のバグでしょうか?)

r2421
background-alpha-004

このテストではbackgroundプロパティーに'fixed'が指定されているので、ウィンドウをスクロールさせてもルート要素の背景画像は一緒に移動してはいけません。r2421では一緒にスクロールしてしまっていました。

r2421
r2422でルート要素の背景画像の固定配置に対応しています。

r2422
 ・ ackground-attachment-006

このテストではいくつかの実装の問題点が見つかりました。

r2423
まず、r2424で背景画像をパディング領域内で描画していたのを、ボーダー領域内で描画するように修正しています。背景画像の位置を指定する際の基準はパディング エッジの左上隅なので、少しややこしいですね。

r2424
r2424では、autoの高さの計算が間違っています。これはr2127background-bg-pos-205のためにスクロール可能範囲に高さを合わせるようにしてしまっていたためです。しかしそういう実装はダメで、下マージンの値がマイナスの場合にはスクロール範囲とボックスの高さは別に考えないといけないということがわかります。r2425でr2127の誤った修正箇所を元に戻しました。スクロール可能範囲の対応については改めて実装していくことにします。

r2425
さらにr2426で要素内のパン操作ができるように修正しています。(ウィンドウのスクロールにマウスの左ボタンを使ったパン操作を使うようにした際に、要素のスクロールができなくなっていたのでした)。

r2426
background-012

すこし気付きにくいのですが、このテストではマージンのつぶし処理にバグがあってoverflowに'scroll'が指定されているdiv要素の中のdiv要素に、親と同じ大きさの不要な上マージンが設定されてしまっていました。

r2426
r2427でひとまず修正していますが、今後もう少しテストが必要な部分でTODOをひとつ追加しています。

r2427
background-027

要素のbackground-attachmentプロパティーが'fixed'に設定されている場合、背景画像は、その要素の位置に対してではなくて、ビューポートに対して固定される、という点をテストしています。

r2427
r2427では、overflowに'scroll'が指定されているdiv要素の中にある子のdiv要素に設定されている背景画像が親のdiv要素と一緒に一緒に動いてしまっていました。r2428で修正しています。

r2428
背景のテストではまだ失敗しているものがわりと残っています。ただ未対応の仕様に依存しているものなどが多いので、実装がさらに進んでから改めてテストを進めていきます。

CSSテーブル モデル

Acid2テストでも必要になることもあって、続いてCSSテーブル モデルの実装とテストを進めていきます。これまでサポートしてきたHTMLテーブル モデルでは、HTMLファイル中で表の記述に省略や多少の誤りがあっても、HTMLパーサーによってDOMツリー中ではきれいなオブジェクトのツリーとしてあらかじめ表が構築されています。そのため表のレイアウトの処理は表に直接関連した要素の処理だけに集中することができました。

一方、CSSテーブル モデルでは、 div要素やspan要素といった要素のdisplayプロパティーに'table'や'table-cell'といった値を指定して表を構築していきます。HTMLパーサーはそれらを表の要素として特別に扱うことはできないので、CSSテーブル モデルのDOMツリー中では表を構成する要素の子に表の要素でないものがあったり、逆に表内部を構成する要素の親要素が表でなかったり、ということがおきます。CSSテーブル モデルでは、そういった場合に不要な要素を非表示にしたり、逆に表の要素に相当する匿名のボックスを生成したりといった処理を行います。

r2432でひとまず基本的なCSSテーブル モデルの処理を実装しています。Acid2テストでは14行目のスマイリーの一番下の黒線部分がCSSのテーブル モデルを使っている部分になりますが、下図のように無事に描画されるようになりました。

r2432 (acid2)
ただr2432では、17.2.1のテストスイートにはまだかなりFAILするので、引き続きテストスイートでテストを進めていきます。

table-anonymous-objects-055

このテストではCSSの描画の問題ではなくて、JavaScriptからremoveChildメソッドを呼び出してノードを削除した後に再描画が直ちにかからないというバグがありました。

r2432
r2433r2437DOMNodeRemovedミューテーション イベントに対応させて再描画がかかるようにしています。(ミューテーション イベントはW3Cの仕様から廃止されつつあるので、とりあえずの対応と考えてください。)

r2433
table-anonymous-objects-069

CSSテーブルモデルでは他のテーブルの行に混じってtable-header-groupが表れることがあります。このテストでは、そのような場合でも最初のtable-header-groupを表の最初の表示するかどうかテストしています。

r2433
r2434で対応しています。

r2434
なお、ひとつのテーブル内で有効なtable-header-groupはひとつだけです。2つ目以降のものはtable-row-groupと同じ扱いになります(17.2)。

table-anonymous-objects-073

このテストでは、table-row-groupの中に(table-rowをはさまずに)いきなりtable-cellがあって、匿名の行オブジェクトを作らないといけない、というケースをテストしています。

r2434
未対応の部分でしたので、r2435で実装を行いました。

r2435
table-anonymous-objects-167

仕様書17.2.1の、
If C's parent is an 'inline' box, then T must be an 'inline-table' box; otherwise it must be a 'table' box.
のテストです。 匿名のテーブル オブジェクトを作るとき関連する要素の親要素がインライン レベルだった場合は、テーブルをinline-tableとして生成しないといけません(WebKit系も未対応のようです)。

r2435
r2436で匿名のインライン テーブルの生成に対応しています。(ただし、表のベースラインの計算はセルの垂直方向のアラインメントに対応するまでの暫定的なものになっています。)

r2436
・ table-anonymous-objects-199

このあたりの一連の匿名テーブル オブジェクトのテストは、FirefoxのGeckoのテストからきたテストのようです。このテストでは、匿名のテーブルオブジェクトを生成するときも、空白の扱いに関してはwhite-spaceプロパティが有効になっているかどうかテストしています。CSS 2.1の仕様書には、この点について明確な記載はないように思うのですが、Internet Explorerも8から9にバージョンアップした際に追従しているようです(WebKit系はまだのようです)。

r2437
r2438で対応しています。

r2438
・ table-anonymous-objects-203

このテストも先ほどのtable-anonymous-objects-055と似たような感じで、JavaScriptからノードを挿入した後の再描画が直ちに行われていませんでした。

r2438
r2439DOMNodeInsertedミューテーション イベントを実装して対応しています。こちらも暫定的な対応と考えてください。

r2439
・ table-anonymous-objects-089

このテストでは、テーブルの中でさらに匿名テーブルを生成する場合をテストしています。

r2439
コードがだいぶ冗長な感じになってきていますが、r2440で対応しました。

r2440
・ table-anonymous-objects-007

このテストでは、HTMLのtable要素のborder属性を使っているのですが未対応でした。なおHTML5では15.2で、
Only the empty string and the value "1" may be used as border values for this purpose. Other values are considered obsolete. To regulate the thickness of such borders, authors should instead use CSS.
と、border属性は値に"1"を指定する場合か値をまったく指定しない使い方はCSSのフォールバックとして許されていますが、それ以外はobsoleteになっています。

r2440
r2441で対応しました。

r2441
17.2.1の匿名テーブルオブジェクトのテストでは、まだ未対応のDOM APIなどの関係でFAILしているものが残っています。ただ匿名のテーブル ボックスの生成の処理自体はできていると思いますので、残りのテストについては実装の進展に合わせて改めて見ていくことにします。

まとめ

今回はここまでです。CSS 2.1テストスイート全体での成功率は約81%となりました。まだまだ単純に未実装の箇所が残っていて、もう少し実装を進めていかないといけないところなのですが、次回はAcid2テストをさらに進めてみたいと思います。

2012年2月16日木曜日

ESウェブブラウザ通信 - Acid2テスト #1

ESウェブブラウザも前回まででCSS 2.1のテストスイートの成功率が約76%まで向上し、CSSの基本的な処理はできるようになってきました。昨年9月に成功したAcid1テストに続いて、今回はAcid2テストを少し進めてみることにしました。

Acid2テスト

Acid2は、1998年のAcid1に続いて、2005年にウェブ スタンダード プロジェクト(WaSP)から公開されたCSS 2のテストページです。このテストに成功すると、"Hello World!"というお約束のテキストに続いて下図のようなスマイリーフェイスが表示されます。

Acid2のリファレンス画像 (http://www.webstandards.org/files/acid2/reference.png)

Acid2ではデータURLを多用しているのですが、ESウェブブラウザはまだ対応していません。そこで、今回は、Hixieが別個用意したデータURLを使用しないAcid2の別バージョンでテストしていきます。

まずはr2412で、#topのようなフラグメントを含んだURLにジャンプできるようにして、Acid2の画面を実際に確認できるようにしました。

r2412
Internet Explorer 7, Firefox 2, Opera 8といった古いのウェブブラウザでのAcid2の表示画面と見比べてみると、以前のメジャーなブラウザも部品単位で見ると似たような壊れ方をしていて、みんな通ってきた道、といった感じがします。

トークンを2つ以上含んだrel属性

r2412では、スマイリーを含んでいるブロックの背景が赤くなってしまっていました。これは背景を'none'に設定するスタイルシート"data005"が、以下のように、
<link rel="appendix stylesheet" href="data005"> <!-- this stylesheet should be applied by default -->
トークンを2つ以上含んでいるrel属性として参照されてい取得し損ねていたのが原因です。r2414で対応しています。

r2414
このようなrel属性のパターンはCSS 2.1のテストスイートではカバーしていない部分のように思います。

background-attachment プロパティー

r2414では、12行目の口の下の部分に赤い画像が見えてしまっています。この赤い背景画像のbackground-attachmentプロパティーは'fixed'に設定されているのですが、実装が対応していなかったのでした。r2415で対応しています。

r2415
CSS 2.1の14章「色と背景」は、まだテストスイートで詳細にテストしないので、今後テストを進めていかないといけません。

背景色で塗りつぶす領域

r2415では、10行目と11行目の口の部分のうち10行目の2つの黒い四角が描画されていませんでした。その部分はボーダー カラーが透明なボーダーがあるので、本来は背景色の黒色が見えなければいけないのですが、r2415ではパディング領域内しか背景色を塗っていなかったのでした。r2416でボーダー領域の内側をすべて背景色で塗るように修正しています。

r2416
これも先ほどと同様に14章「色と背景」のテストスイートでカバーされている部分です。

マージンのつぶし

r2416をよく見てみると、9行目と10行目の間に3px分の余白があることに気付きます。これはAcidがマージンのつぶし処理をテストしている箇所です。#7では、CSS WG BlogでのAcid2のマージンのつぶし処理は許されている2種類の動作の内1つだけを考慮しているという話題に触れました:
Have CSS2.1 allow two possible margin collapsing behaviors in the margin-collapse-clear case: the hypothetical position before clearance is applied may be calculated either with respect to the parent block, or with respect to the containing block formatting context. (The preferred behavior is the latter, since it doesn’t mysteriously eat margins and make clear to make things move up. But we need to evaluate web compat since Acid2 and therefore all browsers do the former.)
そして、ESウェブブラウザで採用しているのは後者の動作なので、Acid2は成功しないのではないか、という懸念があったのでした。

ところが実際に調べてみると、ESウェブブラウザで崩れている理由はそこではなくて、もともと仕様に記載のないクリアランスを使って先頭の子ブロックのマージンをつぶす処理の実装に問題であることがわかりました。Acid2ではクリアランスは-3pxになるのですが、クリアランスが負の場合の処理をまったく考慮していなかったのです。r24178.3.1のテストスイートでリグレッションが起こらないように注意しながらAcid2でも問題が起きないように修正しています。

r2417
というわけで、CSS 2.1の仕様書9.5.2の、
Alternatively, clearance is set exactly to the amount necessary to place the border edge of the block even with the bottom outer edge of the lowest float that is to be cleared.
Note: Both behaviors are allowed pending evaluation of their compatibility with existing Web content. A future CSS specification will require either one or the other. 
のAlternativeの部分はそういう実装のブラウザがある、という以外に必要な理由がどれくらいあるのか気になって来ました。CSS 2.1のテストスイートでも、この動作だと必ずFAILするものがあるのですよね。

まとめ

今回はここまでです。まだ残っているおかしな箇所や問題点は以下の4つになると思います:
  • 4行目と5行目の目の部分。未対応のobject要素とインライン要素のz-indexの処理。
  • 14行目の顔を閉じる部分。未対応のCSSのテーブルモデルの処理。
  • 画面をスクロールした状態でのホーバー処理。
  • データURLのサポート。
今回は、これまで一番時間をかけてテストスイートでテストしてきたボックスのレイアウトそのものに関するバグは見つからなかった、という点が実は一番大きいように思います。Acid2のようなテストページだけを見て実装を修正していくのは仕様を読み違えたりする危険も大きくなってしまうので、やはりテストスイートでひとつひとつ修正して行く方が確実じゃないかな、と。

そういうわけで、次回からはまたCSS 2.1テストスイートに戻って、今回未テストだったことが露呈した部分などを優先しつつ実装とテストを続けていきます。

2012年2月15日水曜日

ESウェブブラウザ通信 - CSS 2.1 Test Suite #16

今回はCSS 2.1の15章「フォント」の仕様の実装をさらに進めて、CSS 2.1テストスイートを使ってテストしていきます。

フォントにグリフがない場合の処理

CSS 2.1仕様書15.2のフォント マッチング アルゴリズムでは、
4.  If there is a matching font face, but it does not contain a glyph for the current character, and if there is a next alternative 'font-family' in the font sets, then repeat step 2 with the next alternative 'font-family'.
という規程があります。使用中のフォントに表示したい文字のグリフがない場合は、それ以外のフォントで対応するグリフを持っているものがないかどうか探してみて、もしあればそのフォントを使って描画するように指示されているわけです。⊠のようなmissing-glyphを使うのは最後の手段ということになります。

・ first-letter-punctuation-334

このテストは#13で取り上げた5章「セレクタ」のテストですが、エーゲ数字の句読点のグリフがデフォルトで使用しているsans-serifのフォントにはないために⊠印で表示されてしまっていました。

r2325
r2398では、フォント マッチング アルゴリズムの実装を進めて、フォントにグリフがなければ、そのグリフを持っているフォントを使って表示できるようにしました。

r2398
エーゲ数字のフォントは、FedoraではGeorge Dourosさんが作成されたフォントがgdouros-aegean-fontsというパッケージとして用意されていますので、これを利用しています。

r2400 (mf-001.html)
r2400では、上ののように、generic-familyだけを指定している場合に、アルファベットの部分はデフォルトのLiberationフォントで、Liberationフォントにグリフがない日本語の部分はIPAフォントで表示する、といったことができるようになっています。

r2401 (mf-002.html)
r2401では、太字や斜体のフォントがない場合には、TrueTypeのアウトラインから生成して表示できるようにしました。上図の例では、Liberationフォントのように太字や斜体のフォントも用意されている部分はそのフォントの持っているグリフが、IPAフォントのように通常のグリフしかない部分は、アウトラインから生成したグリフが表示されています。FreeTypeを使ってこのような処理を行う方法については、ひがんばなさんのまとめを参考にさせていただきました。

Small-caps

日本語ではあまりなじみのないスモールキャップスですが、小文字部分が小文字と同じ大きさの(もしくは小文字より少しだけ大きめの)大文字で表示されます。CSS 2.1の15.5では、
It is acceptable (but not required) in CSS 2.1 if the small-caps font is a created by taking a normal font and replacing the lower case letters by scaled uppercase characters.
と、単純に大文字をスケーリングして表示してもよい、ということになっています(さらにTTYデバイスのように拡大・縮小不可能な場合は大文字で表示するだけでも可)。ただそれですと、文字の線幅の統一感が失われてしまうといった問題点もあるので、OpenTypeフォントではフォント デザイナーさんが別個スモールキャップス用のフォントを用意しておくこともできるようになっています(参考: LinuxLibertineフォント)。

・ c26-psudo-nest-000

これまで数回取り上げてきたこのテストでは、2段落目の1行目がスモールキャップスで表示できないといけません。

r2401
r2402r2408では、小文字を大文字に変換して、スケールダウンして表示するようにしました。OpenTypeフォントのsmall-cpas用のグリフの表示については、今後機会を見て対応していきます。

r2408
フォントのテストスイートから

まったく実装のなかった仕様についてはr2401までで実装ができたので、続いてテストスイートを使ってより詳しくテストしていきます。

・ c522-font-family-000

このテストでは、7行目の、
font-family: monospace,serif
のようにフォント ファミリーに複数の一般フォント ファミリーが指定されていると、最後のものを優先してしまうというバグが見つかりました。

r2398
r2399で修正しています。

r2399

・ font-matching-rule-010

このテストをはじめ、15章のテストではW3CのCSSテスト用フォントが必要になるものがあります。

r2402
r2403で、実行可能ファイルScript.testに-testfonts オプションを指定するとCSS 2.1のテストフォントが有効になるようにしています。フォントはビルド時に環境変数TEST_FONTSで指定したディレクトリの中にAhemExtra、CSSTestというディレクトリ内にそれぞれ展開しておきます。

r2403
・ font-family-name-010

このテストは、TrueTypeフォントのローカライズされたファミリー名を使ってフォントを指定できるかどうかテストしています。CSS Testフォントのfamilyname.ttfには、"CSSTest FamilyName"というファミリー名の他に、"CSSテスト フォント名"というファミリー名が定義されているので、それでテストしています。

r2403
r2404で、フォントの名前、スタイル等の情報をTrueTypeフォント自体から直接取得するように変更しました。ファミリー名についてはネーミング テーブルから、そのほかの必要な情報はこれまでにもときどき登場しているOS/2テーブルfsSelectionおよびpanoseフィールドから取得しています。(注: r2404ではウェイトもpanoseから取得していますが、これは誤りでこの後font-weight-normal-001のテストで修正しています。)

r2404
r2404の変更で、今後はTrueTypeフォントのパス名さえ分かれば簡単にフォントを利用することができるようになりました。


このテストは仕様書15.3の、
The keywords 'initial' and 'default' are reserved for future use and must also be quoted when used as font names. UAs must not consider these keywords as matching the '<family-name>' type.
という部分のテストです。

r2404
 r2405で対応しています。

r2405
・ font-weight-normal-001

このテストは100から900までのウェイトを指定した場合に、対応するウェイトのTrueTypeフォントがない場合に仕様通りに替わりのフォントを選択して表示しているかどうかテストしています。例えば、3列目のW15の場合は、TrueTypeフォントは100と500のウェイトのフォントしか用意されていません。

r2406
r2407では仕様書15.6の規程、
If the font family already uses a numerical scale with nine values (like e.g., OpenType does), the font weights should be mapped directly.
に合わせて、フォントのウェイトをTrueTypeフォントOS/2テーブルusWeightClassから取得するように変更しましたほか、ウェイトに応じて代替フォントを選択するアルゴリズムのバグを修正しています。

余談: usWeightClassが100から900までの値をとるので、CSSのウェイトも100から900までになっている、ということなのか、もともと活版でそういう文化だったのかは知っていたらトリビアのような気もしますが、知りません。f^_^;;

r2407
また仕様上は明確になっていないと思うのですが、指定されたウェイトが600以上で、フォントのウェイトが400もしくは500の場合に、TrueTypeフォントのアウトラインから太字のグリフを生成するようにしています。CSS 3 Fontsでは、
Although the practice is not well-loved by typographers, bold faces are often synthesized by user agents for faces that lack actual bold faces. For the purposes of style matching, these faces must be treated as if they exist within the family.    
という記述があります。アウトラインを変形させて作った太字は、フォントの作者からするとデザインした意図とは違うのでしょうね。

・ content-counter-009content-counter-010

このテストは12章のリスト スタイル 'georgian'と'armenian'のテストですが、グルシア語アルメニア文字のフォントが必要になるので以前未対応のままでした。今回、既定のフォントにグリフがない場合でも代替フォントで表示することができるようになったので対応しておきます。

まず、r2409でアルメニア文字やグルシア文字のグリフなども保持しているDejaVuフォントを利用できるようにしています。Fedoraではデフォルトでインストールされているフォントです。

r2409
r2410で、armenianとgeorgianのカウンターに対応しました。数値から文字列への変換方法はローマ数字の方法と同様です。

r2410

まとめ

今回で15章「フォント」のテストに関しては、ESウェブ ブラウザが未対応のCSSのテーブル モデルを使用しているfont-size-applies-to-015と、CSSの文法処理に関するfont-045を除いて成功するようになりました。CSS 2.1テストスイート全体の成功率は前回からほとんど変わらず約76%となっています。次回はこれまで取りこぼしてきた部分などを改めて見ていく予定です。