package {
    import com.adobe.viewsource.ViewSource;

    import flash.display.DisplayObject;
    import flash.display.Graphics;
    import flash.display.Sprite;

    import flashx.textLayout.container.DisplayObjectContainerController;
    import flashx.textLayout.edit.EditManager;
    import flashx.textLayout.edit.UndoManager;
    import flashx.textLayout.elements.DivElement;
    import flashx.textLayout.elements.ParagraphElement;
    import flashx.textLayout.elements.SpanElement;
    import flashx.textLayout.elements.TextFlow;
    [SWF (backgroundColor='#ffffff', width='800', height='600')]
    public class TLFSample02 extends Sprite {

        public function TLFSample02() {
            super();
            ViewSource.addMenuItem(this, "srcview/index.html");

            var textFlow :TextFlow         = new TextFlow();
            var div      :DivElement       = new DivElement();
            var p1       :ParagraphElement = new ParagraphElement();
            var p2       :ParagraphElement = new ParagraphElement();
            var p3       :ParagraphElement = new ParagraphElement();
            var s1       :SpanElement      = new SpanElement();
            var s2       :SpanElement      = new SpanElement();
            var s3       :SpanElement      = new SpanElement();
            var s4       :SpanElement      = new SpanElement();
            var target   :MySprite         = addChild( new MySprite() ) as MySprite;
            var width_   :int              = 400;
            var height_  :int              = 200;
            var g        :Graphics         = target.graphics;

            textFlow.flowComposer.addController(
                new DisplayObjectContainerController(target, width_, height_)
            );

            s1.text = "Hello, World!!";
            s2.text = "My name is ";
            s3.text = "Taiga.";
            s3.fontSize = 25;
            s4.text = "I'm from Japan.";

            textFlow.addChild(div);
            textFlow.addChild(p2);
            textFlow.addChild(p3);
            div.addChild(p1);
            p1.addChild(s1);
            p2.addChild(s2);
            p2.addChild(s3);
            p3.addChild(s4);

            //編集かつアンドゥできるようにする
            textFlow.interactionManager = new EditManager( new UndoManager() );

            //コントローラの定義
            textFlow.flowComposer.addController(
                new DisplayObjectContainerController(target, width_, height_)
            );
            textFlow.flowComposer.updateAllContainers();

            //土台
            target.x = target.y = 100;
            g.beginFill(0xcccccc);
            g.drawRect(0, 0, width_, height_);
            g.endFill();

        }
    }
}
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.Graphics;
class MySprite extends Sprite {
    public function MySprite() {
        super();
    }
    public override function addChild(child:DisplayObject):DisplayObject {
        trace("MySprite.addChild()");
        return super.addChild(child);
    }
    public override function removeChild(child:DisplayObject):DisplayObject {
        trace("MySprite.removeChild()");
        return super.removeChild(child);
    }
    public override function get graphics():Graphics {
        trace("MySprite.graphics");
        return super.graphics;
    }
}