DefineShape => DefineBits 参照

SWF の CID 参照関係をテーブルにまとめる処理を実装していて、1 つの DefineShape から複数の DefineBits を参照するケースを発見。

多分、複数の画像をグラフィックシンボルでまとめたものと思われる。
シンボルなんだけど、Sprite でなく Shape になるケース。

[016]       140 DEFINESHAPE2 defines id 0084
                 | fillstyles(06)        linestyles(00)
                 | 1 ) BITMAPc 65535
                 | 2 ) BITMAPc 83
                 | 3 ) BITMAPc 65535
                 | 4 ) BITMAPc 82
                 | 5 ) BITMAPc 65535
                 | 6 ) BITMAPc 81
                 |
                 | fill: 00/02 line:00 - moveTo -60.75 29.85
                 | fill: 00/02 line:00 - lineTo -115.75 29.85
                 | fill: 00/02 line:00 - lineTo -115.75 14.85
                 | fill: 00/02 line:00 - lineTo -60.75 14.85
                 | fill: 00/02 line:00 - lineTo -60.75 29.85
                 | fill: 00/00 line:00 - moveTo 0.00 0.00
                 | fill: 00/04 line:00 - moveTo -60.75 15.35
                 | fill: 00/04 line:00 - lineTo -115.75 15.35
                 | fill: 00/04 line:00 - lineTo -115.75 0.35
                 | fill: 00/04 line:00 - lineTo -60.75 0.35
                 | fill: 00/04 line:00 - lineTo -60.75 15.35
                 | fill: 02/02 line:00 - moveTo 0.00 0.00
                 | fill: 02/06 line:00 - moveTo -60.75 -14.15
                 | fill: 02/06 line:00 - lineTo -60.75 0.85
                 | fill: 02/06 line:00 - lineTo -115.75 0.85
                 | fill: 02/06 line:00 - lineTo -115.75 -14.15
                 | fill: 02/06 line:00 - lineTo -60.75 -14.15

あれれ。。

                 | fill: 02/02 line:00 - moveTo 0.00 0.00
                 | fill: 02/06 line:00 - moveTo -60.75 -14.15

これは表示間違えてないかな。00/00, 00/06 なら分かるんだけど。

それはともかく、1:n 対応すれば、purgeUselessContents が実装できて、
replaceMovieClip の制限事項付きモードを削除できる。
頑張ろう。