TextLineMirrorRegion Sample

by 9re
♥0 | Line 66 | Modified 2010-10-12 14:08:10 | MIT License
play

ActionScript3 source code

/**
 * Copyright 9re ( http://wonderfl.net/user/9re )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/wRa7
 */

package {
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.EventDispatcher;
    import flash.geom.Rectangle;
    import flash.text.engine.ContentElement;
    import flash.text.engine.ElementFormat;
    import flash.text.engine.GroupElement;
    import flash.text.engine.TextBlock;
    import flash.text.engine.TextElement;
    import flash.text.engine.TextLine;
    import flash.text.engine.TextLineMirrorRegion;
    import flash.text.TextField;
    public class TextLineMirrorRegionTest extends Sprite {
        public function TextLineMirrorRegionTest() {
            var str:String = 'One of the poems attributed to 持統天皇 was selected by 藤原定家 for inclusion in the popular anthology Hyakunin Isshu. The text is visually descriptive: 春過ぎて夏来にけらし白妙の衣ほすてふ天の香具山';
            var regExp:RegExp = /[^a-zA-Z .:]+/g;
            var tf:TextField = new TextField;
            var s:String, match:Object;
            var i:int = 0;
            var elf:ElementFormat = new ElementFormat(null, 30, 0);
            var red:ElementFormat = elf.clone();
            red.color = 0xff0000;
            var textElement:TextElement;
            
            var content:Vector.<ContentElement> = new Vector.<ContentElement>;
            while (match = regExp.exec(str)) {
                content.push(new TextElement(
                    str.substring(i, match.index), elf.clone()
                ));
                textElement = new TextElement(s = match.toString(), red.clone());
                textElement.eventMirror = new EventDispatcher;
                content.push(textElement);
                i = match.index + s.length;
            }
            
            var factory:TextBlock = new TextBlock;
            factory.content = new GroupElement(content);
            var line:TextLine = null;
            i = 0;
            while (line = factory.createTextLine(line, 300)) {
                line.x = 10;
                line.y = (++i) * 30;
                if (line.mirrorRegions)
                    drawRegions(line.mirrorRegions);
                addChild(line);
            }
            
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
        }
        
        private function drawRegions($regions:Vector.<TextLineMirrorRegion>):void {
            var len:int = $regions.length;
            var region:TextLineMirrorRegion;
            var bounds:Rectangle;
            var line:TextLine;
            for (var i:int = 0; i < len; ++i) 
            {
                region = $regions[i];
                line = region.textLine;
                bounds = region.bounds;
                graphics.beginFill(0xff6347);
                graphics.drawRect(bounds.x + line.x, bounds.y + line.y, bounds.width, bounds.height);
                graphics.endFill();
            }
        }
    }
}