FrameworkはTLFテキストのためだけのフレームワークではない。今回は、フレームワークに含まれるクラスを使ったテキストコンテンツの扱い方について解説しよう。Frameworkは「高度なテキスト編集およびレイアウト機能」を提供する。3.0で記述された独立したコンポーネントライブラリ」だ[1]⁠。ライブラリの各クラスは、テキストの構造とフォーマットやその表示、さらに編集操作などの役割を、それぞれ分けて担っている。Frameworkの特徴」参照。Professional対応)でも基本的に動く。Markup形式のXMLからTextFlowオブジェクトをつくるテキストコンテンツは、TextFlowオブジェクトに構造化して納める。Frameworkは、XHTMLを参考にしてテキストの構造化を定めた。構造化したTextFlowオブジェクトのつくり方はいくつかある。応用しやすいのは、XMLデータをTextFlowオブジェクトに変換することだろう。その場合、静的メソッドTextConverter.importToFlow()を用いる。Markup形式でマークアップしておく。その場合、TextConverter.importToFlow()メソッドの第2引数には定数TextConverter.TEXT_LAYOUT_FORMATを渡す(表1⁠)⁠。Markup」の項に一覧表が掲げられているので、参照してほしい。エレメントは、それぞれ定められた子エレメントがもてる(表2⁠)⁠。単純なテキストは、つぎのようにエレメントを構造化する。各エレメントには、それを扱うクラスが決められている。SpanElementエレメントのタグには、TextLayoutFormatクラスのプロパティでフォーマットをXML属性として記述できる。つぎのフレームアクションにより、段落(p)の位置揃え(textAlign)を中央(center)にし、テキスト範囲(span)にはImpact(fontFamily)の18ポイント(fontSize)でフォントを設定したテキストのTextFlowインスタンスがつくられる。第1に、TextFlowオブジェクトは構造化されたテキストやそのフォーマット指定をデータとしてもつだけで、そのままステージには表示できない。そこで、オブジェクトに設定されたテキストをgetText()メソッドで調べ、TextFlowインスタンスがつくられたことを確かめた(図1⁠)⁠。第2は、TextFlowタグにxmlns属性でXML名前空間を宣言することだ(図1参照⁠)⁠。これがないと、TextConverter.importToFlow()メソッドがTextFlowインスタンスを生成できず、nullを返してしまう(図2⁠)⁠。xmlns属性がないとTextConverter.importToFlow()メソッドはTextFlowインスタンスを生成しないフローコンポーザーでテキストコンテンツを表示するTextFlowオブジェクトがもつ構造化されたテキストやそのフォーマット指定のデータをステージに表示する役割は、フローコンポーザーが担う。フローコンポーザーのオブジェクトは、前回紹介したTextFlow.flowComposerプロパティからその参照が得られる。フローコンポーザーは、インターフェイスIFlowComposerを実装するクラスのオブジェクトだ。テキストコンテンツは、Spriteインスタンスをコンテナとして流し込まれる。そのSpriteインスタンスとTextFlowインスタンスを結びつけ、テキストの表示領域を定めるのがContainerControllerオブジェクトだ。コンストラクタメソッドには、コンテナのSpriteインスタンスおよびテキスト領域の幅と高さを渡す。そのオブジェクトをIFlowComposer.addController()メソッドの引数に渡すと、TextFlowインスタンスのコンテナが加わる(図3⁠)⁠。Frameworkにおけるオブジェクトの関係フローコンポーザーで、前掲フレームアクションのテキストコンテンツを表示してみよう(図4⁠)⁠。前掲フレームアクションにフローコンポーザーの処理を加えたのが、つぎのスクリプト1だ。前回説明したとおり、フローコンポーザーにテキストコンテンツを表示させるには、IFlowComposer.updateAllControllers()メソッドの呼出しが必要になる。Frameworkの説明は終える。Markup形式のデータを読み込んだ後、ユーザーインタラクションを加える。今回解説した次のサンプルファイルがダウンロードできます。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。