swfmillでのFlashLite1.1の動的生成時に、もうパッチはいらない

2011年12月13日

本当にちょっとした小ネタ。
いまさらながらFlashLite1.1を動的生成するという作業があった。本当にいまさらなんだけど、さてさて…とネットをざっと見た感じ、swfmill0.2系にパッチをあてるインストールの記事が上位にあったので最新情報を書いてみることにした。
情報は常にアップデートされるべきだとは思うけど、追い続けられるわけでも無いから、気づいた誰かが新しい記事を書いていけばいいんじゃないかな。

現時点の最新バージョンは、0.3.2です

swfmillというのは、swfファイルからXMLファイルを作成したり、逆にXMLファイルからswfファイルを作成してくれるツール。

基本的な流れは、AdobeFlashなりで元になるswfファイルを作成。それをswfmillを使ってXMLファイルに変換。そのXMLの中身を変更して再度swfを作成という風。
XML中に、画像はbase64のエンコード文字列で、テキストはそのままテキストで記述出来る。最新版のドキュメントを見ると外部の画像やフォント、swfファイルも指定できるみたい。

0.2系ではパッチがあった

ざっと検索して出てくる日本語の記事は、まだ0.2系だった頃の内容のようだ。FlashLite1.1の内部文字コードはCP932なのだけど、swfmillではUTF-8がデフォルトで文字コードを変更できないので対応パッチをあてましょうという事が書いてある。
最新版の0.3.2でも

#swfmill swf2xml test.swf test.xml
error : xmlEncodeEntitiesReentrant : input not UTF-8

とエラーが出た。これはパッチの登場か?と思いきや

#swfmill -help

swfmill 0.3.2
    XML-based SWF processing tool

usage: swfmill [<options>] <command>

<command> is one of:
    swf2xml <in> [<out>]
        convert from SWF to XML.
        <in> is a single SWF file, or 'stdin'
        <out> is a single XML file, or (by default) 'stdout'

    xml2swf <in> [<out>]
        convert from XML to SWF.
        <in> is a single XML file, or 'stdin'
        <out> is a single SWF file, or (by default) 'stdout'

    simple <in> [<out>]
        convert from a movie definition file to SWF.
        <in> is a single XML file, or 'stdin'
        <out> is a single SWF file, or (by default) 'stdout'
        (for details, see README)

    xslt <xsl> <in> [<out>]
        transform <in> to <out> as described by <xsl>.
        <xsl> is the XSLT stylesheet,
            and can use the swft: extension.
        <in>  must be some XML (depends on <xsl>)
        <out> is either SWF (when it ends in .swf)
            or XML, by default on 'stdout'

<option>s are:
    -h print this help and quit
    --version print the version number and quit
    -v verbose output
    -V extra-verbose debugging output
    -d dump SWF data when loaded (for debugging)
    -e specify text encoding in SWF (for SWF 5 and earlier only;
           default: UTF-8).
    -n deactivate libxml network access

Please report bugs at https://github.com/djcsdy/swfmill/issues

と、ありがたいことにエンコーディングのオプションが実装されていた。

ということで

#swfmill -e cp932 swf2xml test.swf test.xml

で、無事にXMLファイルが作成された。めでたしめでたし。ちなみにXMLファイルのエンコードはUTF-8になる。

まぁこれだけの話です

以上、最新版ではパッチあてなくても平気ですよ、というお話でした。
正直、現時点でFlashLiteやFlashの動的生成に需要がそんなにあるのか?という部分はあるけれど、だからこそ気づいたことを書いて公開しておこうかなと思った次第。ちょっとでも役に立てば嬉しいです。