stray test

by yukifuruyoru
♥0 | Line 128 | Modified 2010-06-20 08:59:39 | MIT License
play

ActionScript3 source code

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

// forked from yukifuruyoru's stray()
// forked from yukifuruyoru's vector matrix
package {
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            inittrace(stage);
			var samplestr:String="[[16,16],[0xFFeeeeee,0xFF000000],[[1,1,1],[1,0,1],[1,1,1]]]";
           //	trace(samplestr);
           	trace("---extract test---");
           	var str:String;
str="[[\"]]def\",[5,3,1]],[255,12,345],[3,9,12]]";
           	           	
           	trace(str);      	
			trace("---start---");
           	var mayoi:Array=stray(str);
           	trace("---solution---");
           	//mayoi.forEach(function(elem:*,...args):void{trace(elem);});
			trace("[",mayoi,"]");
			trace("has elements:",mayoi.length);
			trace("EOF!");
function stray(str:String):Array{
	str=str.slice(1,str.length-1);
	
	var sol:Array=[];
	var nex:uint=0;
	reactor();
	return sol;
//stray internal functions
	function reactor():void{
		nex=str.search(new RegExp(",|\"|\\[|\\]"));
		//trace(str.charAt(nex),"at index",nex);
		switch(str.charAt(nex)){
			case ",":{commaf();}break;
			case "\"":{wordf();}break;
			case "[":{openf();}break;
			case "]":{}break;
		}
	}
	function commaf():void{
		var end:uint=str.search(new RegExp("(,\\[)|(,\")|$"));
		var element:String=str.slice(0,end);
		//trace("elements",element);
		sol=sol.concat(element.split(","));
		str=str.slice(end+1);
		//trace(str);
		reactor();
	}
	function wordf():void{
		var end:uint=str.search(new RegExp(".\""))+1;
		var element:String=str.slice(1,end);
		//trace("word",element);
		sol.push(element);
		str=str.slice(end+2);
		//trace(str);
		reactor();
	}
	function openf():void{
		var end:uint=elemend(str);
		var element:String=str.slice(0,end+1);
		sol.push(element);
		str=str.slice(end+2);
		
		reactor();
		function elemend(s:String):uint{
			var op:uint=1;
			var ed:uint=0;
			var co:uint=0;
			var wo:uint=0;
			var index:int=0;
			var sample:String;
			do{
				index=s.indexOf("]",index+1);
				if(index<0){break}
				sample=s.slice(0,index+1);
				co=sample.match(new RegExp("\"","g")).length;
				if(co&0x1){continue}
				else{sample=sample.replace(new RegExp("\".+?\"","g"),"@");}
				op=sample.match(new RegExp("\\[","g")).length;
				ed=sample.match(new RegExp("\\]","g")).length;
				//trace(sample,op,ed);
			}while(op!=ed)
			//trace("done",sample);
			return index
		}
	}//openf()
//stray internal functions 
}//stray()
        }
    }
}
/////  WONDERFL TRACE /////

import flash.display.Sprite;
import flash.display.Stage;
import flash.text.TextField;
import flash.text.TextFormat;


function inittrace(s:Stage):void
{
    WTrace.initTrace(s);
}

//global trace function
var trace:Function;

//wtreace class
class WTrace
{
        private static var FONT:String = "Fixedsys";
        private static var SIZE:Number = 12;
        private static var TextFields:Array = [];
        private static var trace_stage:Stage;
        
        public static function initTrace(stg:Stage):void
        {
            trace_stage = stg;
            trace = wtrace;
        }
        
        private static function scrollup():void
        {
            // maximum number of lines: 100
            if (TextFields.length > 100) 
            {
                var removeme:TextField = TextFields.shift();
                trace_stage.removeChild(removeme);
                removeme = null;
            }
            for(var x:Number=0;x<TextFields.length;x++)
            {
                (TextFields[x] as TextField).y -= SIZE*1.2;
            }
        }
    
        public static function wtrace(... args):void
        {
        
            var s:String="";
            var tracefield:TextField;
            
            for (var i:int;i < args.length;i++)
            {
                // imitating flash:
                // putting a space between the parameters
                if (i != 0) s+=" ";
                s+=args[i].toString();
            }
            

            tracefield= new TextField();
            tracefield.autoSize = "left";
            tracefield.text = s;
            tracefield.y = trace_stage.stageHeight - 20;

            var tf:TextFormat = new TextFormat(FONT, SIZE);
            tracefield.setTextFormat(tf);
            trace_stage.addChild(tracefield);
            scrollup();                      
            TextFields.push(tracefield);
            
        }
}

Forked