flash on 2012-5-1

by tepe
♥0 | Line 129 | Modified 2012-05-14 12:41:20 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.*;
    import flash.text.*;
    import flash.events.*;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            var str:String = new String();
            str =  '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z"/>'
            var str2:String = new String();
            str2 =  "<?xml version='1.0' encoding='UTF-8'?>\n"+ 
                    '<node id="275452090" lat="51.5075933" lon="-0.1076186" version="3" changeset="2980587" user="nickb" uid="1697" visible="true" timestamp="2009-10-29T12:14:35Z">\n'+
                    '\t<tag k="name" v="Jam\'s Sandwich Bar"/>\n' +
                    '\t<tag k="amenity" v="cafe"/>\n' +
                    '</node>\n' +
                    '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z">\n'+
                    '\t<tag k="name" v="tepe"/>\n' +
                    '\t<tag k="amenity" v="cafe"/>\n' +
                    '</node>\n' +
                    '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z"/>\n'+
                    '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z">\n'+
                    '\t<tag k="name" v="tepe"/>\n' +
                    '\t<tag k="amenity" v="cafe"/>\n' +
                    '\t<tag k="amenity" v="cagfe"/>\n' + 
                    //'</node>\n' +
                    '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" us';
            var tf:TextField = new TextField();
            addChild(tf);
            tf.width =400;
            tf.height = 400;
            tf.text = "aaa";
            tf.multiline = true;
                    
            var n:int = str2.lastIndexOf("\n");
            
            var str3:String = str2.substring(n+1,str2.length);
            str2 = str2.substring(0,n);

            str2 = "<osm>"+str2+"</osm>";
            tf.text = getNodeString(str2);
            //tf.appendText("\n@@@@\n"+str2);
            //if(list3 == null)tf.text = "null";
            //else  tf.text = list3.length().toString();
            //tf.text = parse(str2);

            

            
            //tf.text = str3;
            //tf.text = str2;
/*
            var xml:XMLList = new XMLList(str2);
            //var list:XMLList = xml[2].attribute("@id"); 
            
            //tf.text = xml.contains(<tag k="name" v="Jam\'s Sandwich Bar"/>);
            tf.appendText("\n"+xml[0].@id);
            //tf.appendText("\n"+xml[1].@id);
            //tf.appendText("\n"+xml.hasOwnProperty("@lat"));
            tf.appendText("\n"+xml.length());
            //tf.appendText("\nlist"+list.length());
            tf.appendText("\nadd:"+addDB(str2));
            
            var ar:Array = getXmlTag(str2);
            tf.text = "";
            tf.text = ar.length.toString()+"\n";
            for(var i:int=0;i<ar.length;i++){
                var xm:XML = new XML(ar[i]);
                //tf.appendText(ar[i]);//+"\n\n");
                tf.appendText(xm.tag[0].attributes()+"\n")
                tf.appendText("tag:"+xm.tag.length().toString()+"\n\n");
            }
*/            
            
        }
        
        private function getNodeString(str:String):String{
            var st:int = str.indexOf("<node ");//先頭カット位置
            //終了カット位置を探す
            var last:int = str.lastIndexOf(">");
            while (last != -1) {
                var n1:int = str.lastIndexOf(">", last-1);
                var n2:int;
                //タグ無しを検討
                n2 = str.indexOf("<node ", n1);
                if (n2 != -1 && n2 < last) {
                    var n3:int = str.lastIndexOf("/>", last);
                    if (n3 != -1 && n3 > n2) {
                        var strA:String = str.substring(st, n3+2);
                        str = str.substring(0,n3+2);
                        return strA;
                    }
                }
                //タグあり
                n2 = str.indexOf("</node>",n1);
                if(n2 != -1 && n2 < last) {
                    var strB:String = str.substring(st,n2+7);
                    str = str.substring(0,n2+7);
                    return strB;
                }

                last = str.lastIndexOf(">", last-1);
            }
 
            return "";
        }
        
         private function parse(src:String):String {
            var xml:XML = new XML(src);
            var str:String = "";
            for each (var element:XML in xml.elements()) {
                var id:String = element.@id;
                var name:String = element.name();
                var lat:String = element.@lat;
                var lon:String = element.@lon;
                var tag:String = element.elements();
                var attribute:XMLList = element.attributes();
                var str2:String="";
                for each(var e:XML in attribute){
                    str2 += e.name()+ ":"+e + "\n";
                }

                str += name + " id="+ id + " lat=" + lat + " lon=" + lon + "\n"+ str2 + "\n"+tag+"\n\n";
            }
            return str;
        }

        
        //xmlを受け取りDBに渡す
        private function addDB(str:String):String{
            //<node> <way> <relation> で分類
            var ar:Array = str.match(/<.*>/gm);
            var result:String = new String();
            for(var i:int=0;i<ar.length;i++){
                result += ar[i]+"\n";
            }
            return result;

            return ar.length.toString();
        }
        
        
        //Stringから<>単位で切り出す。
        public function getXmlTag(source:String):Array{
            var ar:Array = source.match(/<[^\?].*>/gm);//書式、制御をスルー
            ar = xmlTags(ar);
            return ar;
        }
        //要素単位
        public function xmlTags(ar:Array):Array{
            var ar2:Array = new Array();
            var str:String = new String();
            var stac:int=0;
            var j:int;
            for(var i:int=0;i<ar.length;i++){
                if(ar[i].search(/\/>/gm) > 0){//単タグ
                    if(stac==0)ar2.push(ar[i]);      
                    else{
                        for(j=0;j<stac;j++)str += "\t";//インデント
                        str += ar[i]+"\n";
                    }
                }
                else{//複タグ
                    if(ar[i].search(/<\//gm) > -1){//タグ終わり
                        stac--;
                        for(j=0;j<stac;j++)str += "\t";//インデント
                        str += ar[i];
                    }
                    else{//タグ開始
                        for(j=0;j<stac;j++)str += "\t";//インデント
                        str += ar[i]+"\n";
                        stac++;
                    }
                    if(stac==0){
                        if(0 < str.length){
                            ar2.push(str); 
                            str = "";
                        }
                    }
                }
            }//for
            return ar2;
        }


 
    }
}