チェンジセット 3483

差分発生行の前後
無視リスト:
コミット日時:
2010/03/04 21:49:00 (3 年前)
コミッタ:
seVen
ログメッセージ:

Spec change, refactoring, more support and samples.

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/SvgParser/trunk/src/svgparser/parser/Circle.as

    r3476 r3483  
    88        import flash.display.Graphics; 
    99        import flash.display.GraphicsPathCommand; 
     10        import svgparser.parser.utils.StyleUtil; 
    1011 
    1112        public class Circle extends AbstractPaint implements IParser 
     
    2223                        var target:Shape = new Shape(); 
    2324                        var style:Style = new Style( data.currentXml ); 
    24                          
    25                         _cx = Number ( data.currentXml.@cx.toString() ); 
    26                         _cy = Number ( data.currentXml.@cy.toString() ); 
    27                         _r = Number ( data.currentXml.@r.toString() ); 
     25 
     26                        _cx = StyleUtil.toNumber ( data.currentXml.@cx ); 
     27                        _cy = StyleUtil.toNumber ( data.currentXml.@cy ); 
     28                        _r = StyleUtil.toNumber ( data.currentXml.@r ); 
    2829                         
    2930                        paint( target, style, data ); 
  • as3/SvgParser/trunk/src/svgparser/parser/ClipPath.as

    r3476 r3483  
    44        import svgparser.parser.model.Data; 
    55        import svgparser.parser.style.Style; 
     6        import flash.display.DisplayObject; 
    67        import flash.display.Sprite; 
    78         
     
    910        { 
    1011                public static var LOCALNAME:String = "clipPath"; 
    11                 private var group:Sprite; 
    1212                 
    1313                public function ClipPath() { } 
     
    1616                        var style:Style = new Style( data.currentXml ); 
    1717                        if ( !style.display ) return; 
     18 
     19                        var _xml:XML = data.currentXml; 
     20                        _xml.setLocalName(  "_clipPath" ); 
    1821                         
    19                         group = new Sprite(); 
    20                         group.name = style.id; 
    21                         group.transform.matrix = style.getMatrix(); 
    22                         data.currentCanvas = group; 
    23                          
    24                         var groupXML:XML = data.currentXml;      
    25                         groupXML.setLocalName(  "_clipPath" );   
    26                         SvgFactory.parseData( data  ); 
    27                          
    28                         data.addGraphic( group ); 
    29                         data.initCanvas(); 
     22                        var pathObject:Sprite = new Sprite(); 
     23                        pathObject.name = style.id; 
     24                        SvgFactory.parseData( data.copy( _xml, pathObject )); 
     25                        style.applyStyle( pathObject ); 
     26                        data.addClipPath( pathObject as DisplayObject ); 
    3027                } 
    31                  
    3228        } 
    3329 
  • as3/SvgParser/trunk/src/svgparser/parser/ComplexTree.as

    r3476 r3483  
    1919                        } 
    2020                } 
     21                 
     22                public function get parseAlways():Boolean { return true; } 
    2123        } 
    2224         
  • as3/SvgParser/trunk/src/svgparser/parser/Defs.as

    r3476 r3483  
    1010        { 
    1111                public static var LOCALNAME:String = "defs"; 
    12                 private var group:Sprite; 
    1312                 
    1413                public function Defs() { } 
     
    1615                public function parse( data:Data ):void { 
    1716                        var style:Style = new Style( data.currentXml ); 
    18                         if ( !style.display ) return; 
    19                          
    20                         group = new Sprite(); 
     17                        var group:Sprite = new Sprite(); 
    2118                        group.name = style.id; 
    22                         style.applyStyle( group, data ); 
    23                         data.currentCanvas = group; 
    24                          
    25                         var groupXML:XML = data.currentXml; 
     19                        style.applyStyle( group ); 
     20                        var groupXML:XML = data.currentXml.copy(); 
    2621                        groupXML.setLocalName(  "_defs" );       
    27                         SvgFactory.parseData( data  ); 
    28                          
    29                         var numChildren:int = group.numChildren; 
    30                         for ( var i:int = 0; i < numChildren ; i++ ) { 
    31                                 data.addGraphic(  group.getChildAt( 0 )  ); 
    32                                 group.removeChildAt( 0 ); 
    33                         } 
    34                          
    35                         data.initCanvas(); 
     22                        SvgFactory.parseData( data.copy( groupXML, group ) ); 
     23                        group = null; 
    3624                } 
    37                  
    3825        } 
    3926 
  • as3/SvgParser/trunk/src/svgparser/parser/Ellipse.as

    r3476 r3483  
    77        import svgparser.parser.model.Data; 
    88        import svgparser.parser.abstract.AbstractPaint; 
     9        import svgparser.parser.utils.StyleUtil; 
    910         
    1011        public class Ellipse extends AbstractPaint implements IParser 
     
    2223                { 
    2324                        var target:Shape = new Shape(); 
    24                         data.currentCanvas.addChild( target ); 
    2525                        var style:Style = new Style( data.currentXml ); 
    2626                         
    27                         _cx = Number( data.currentXml.@cx.toString() ); 
    28                         _cy = Number( data.currentXml.@cy.toString() ); 
    29                         _rx = Number( data.currentXml.@rx.toString() ); 
    30                         _ry = Number( data.currentXml.@ry.toString() ); 
     27                        _cx = StyleUtil.toNumber( data.currentXml.@cx ); 
     28                        _cy = StyleUtil.toNumber( data.currentXml.@cy ); 
     29                        _rx = StyleUtil.toNumber( data.currentXml.@rx ); 
     30                        _ry = StyleUtil.toNumber( data.currentXml.@ry ); 
    3131                         
    3232                        paint( target, style, data ); 
     33                        data.currentCanvas.addChild( target ); 
    3334                } 
    3435                 
  • as3/SvgParser/trunk/src/svgparser/parser/FilterSet.as

    r3476 r3483  
    11package svgparser.parser  
    22{ 
     3        import flash.display.DisplayObject; 
    34        import svgparser.parser.IParser; 
    45        import svgparser.parser.model.Data; 
    56        import svgparser.parser.filters.*; 
     7        import svgparser.parser.utils.StyleUtil; 
    68         
    79        public class FilterSet implements IParser 
     
    911                public static var LOCALNAME:String = "filter"; 
    1012                 
    11                 private static const FPARSERS:Array = [ GaussianBlur , ColorMatrix ]; 
     13                private static const FPARSERS:Array = [ GaussianBlur , ColorMatrix, DisplacementMap ]; 
    1214                 
    1315                public var id:String; 
     
    2224                { 
    2325                        id = data.currentXml.@id.toString(); 
    24                         _x = Number( data.currentXml.@x ); 
    25                         _y = Number( data.currentXml.@y ); 
    26                         _width = Number( data.currentXml.@width ); 
    27                         _height = Number( data.currentXml.@height ); 
     26                        _x = StyleUtil.toNumber( data.currentXml.@x ); 
     27                        _y = StyleUtil.toNumber( data.currentXml.@y ); 
     28                        _width = StyleUtil.toNumber( data.currentXml.@width ); 
     29                        _height = StyleUtil.toNumber( data.currentXml.@height ); 
    2830                         
    2931                        var fs:XMLList = data.currentXml.children(); 
     
    3537                } 
    3638                 
     39                public function setSourceGraphic( d:DisplayObject ):void { 
     40                        for each( var f:IFilter in filters ) 
     41                                f.setSourceGraphic( d); 
     42                } 
     43                 
    3744                public function getAllFilters():Array  
    3845                { 
    3946                        var sets:Array = []; 
    40                         for each( var f:IFilter in filters ) { 
     47                        for each( var f:IFilter in filters )  
    4148                                sets.push( f.getFlashFilter() ); 
    42                         } 
    4349                        return sets; 
    4450                } 
     
    5157                public static function getFilter( xml:XML ):IFilter  
    5258                { 
    53                         for each( var Fl:Class in FPARSERS ) { 
     59                        for each( var Fl:Class in FPARSERS )  
    5460                                if ( xml.localName() == Fl["LOCALNAME"] ) return new Fl( xml ); 
    55                         } 
    5661                        return null; 
    5762                } 
    5863        } 
    59  
    6064} 
  • as3/SvgParser/trunk/src/svgparser/parser/FlowRoot.as

    r3476 r3483  
    1212                 
    1313                public function parse( data:Data ):void {} 
    14                  
    1514        } 
    1615 
  • as3/SvgParser/trunk/src/svgparser/parser/Group.as

    r3476 r3483  
    1010                 
    1111                public static var LOCALNAME:String = "g"; 
    12                 private var group:Sprite; 
    1312                 
    1413                public function Group() {} 
     
    1716                        var style:Style = new Style( data.currentXml ); 
    1817                        if ( !style.display ) return; 
    19                          
    20                         group = new Sprite(); 
     18                        var group:Sprite = new Sprite(); 
    2119                        group.name = style.id; 
    22                          
    23                         group.transform.matrix = style.getMatrix(); 
    24                          
    25                         var groupXML:XML = data.currentXml; 
    26                         groupXML.setLocalName(  "_g" );                  
    27                         SvgFactory.parseData( data  ); 
    28                          
     20                        style.applyStyle( group ); 
    2921                        data.currentCanvas.addChild( group ); 
     22                        var groupXML:XML = data.currentXml.copy(); 
     23                        groupXML.setLocalName(  "_g" );  
     24                        SvgFactory.parseData( data.copy( groupXML, group ) ); 
    3025                } 
    3126        } 
  • as3/SvgParser/trunk/src/svgparser/parser/Image.as

    r3477 r3483  
    1212        import svgparser.parser.Constants; 
    1313        import svgparser.parser.style.Style; 
     14        import svgparser.parser.utils.StyleUtil; 
    1415         
    1516        public class Image implements IParser 
     
    3637                public function parse( data:Data ):void  
    3738                { 
    38                         _x = data.currentXml.@x
    39                         _y = data.currentXml.@y
    40                         _width = data.currentXml.@width
    41                         _height = data.currentXml.@height
     39                        _x = StyleUtil.toNumber( data.currentXml.@x )
     40                        _y = StyleUtil.toNumber( data.currentXml.@y )
     41                        _width = StyleUtil.toNumber( data.currentXml.@width )
     42                        _height = StyleUtil.toNumber( data.currentXml.@height )
    4243                         
    4344                        _style = new Style( data.currentXml ); 
  • as3/SvgParser/trunk/src/svgparser/parser/Line.as

    r3476 r3483  
    88        import svgparser.parser.model.Data; 
    99        import svgparser.parser.style.Style; 
     10        import svgparser.parser.utils.StyleUtil; 
    1011         
    1112        public class Line extends AbstractPaint implements IParser 
     
    2930                        var style:Style = new Style( data.currentXml ); 
    3031                         
    31                         _x1 = Number( data.currentXml.@x1.toString() ); 
    32                         _x2 = Number( data.currentXml.@x2.toString() ); 
    33                         _y1 = Number( data.currentXml.@y1.toString() ); 
    34                         _y2 = Number( data.currentXml.@y2.toString() ); 
     32                        _x1 = StyleUtil.toNumber( data.currentXml.@x1 ); 
     33                        _x2 = StyleUtil.toNumber( data.currentXml.@x2 ); 
     34                        _y1 = StyleUtil.toNumber( data.currentXml.@y1 ); 
     35                        _y2 = StyleUtil.toNumber( data.currentXml.@y2 ); 
    3536                         
    3637                        _vertices = Vector.<Number>([ _x1, _y1 , _x2 , _y2 ]); 
  • as3/SvgParser/trunk/src/svgparser/parser/LinearGradient.as

    r3476 r3483  
    1010        import flash.display.GradientType; 
    1111        import flash.display.SpreadMethod; 
     12        import svgparser.parser.utils.StyleUtil; 
     13        import svgparser.parser.utils.GeomUtil; 
    1214         
    1315        public class LinearGradient implements IParser , IGradient 
     
    5153                        _linked = style.href; 
    5254                         
    53                         _x1 = Number( data.currentXml.@x1 ); 
    54                         _x2 = Number( data.currentXml.@x2 ); 
    55                         _y1 = Number( data.currentXml.@y1 ); 
    56                         _y2 = Number( data.currentXml.@y2 ); 
     55                        _x1 = getValue( data.currentXml.@x1 ); 
     56                        _x2 = getValue( data.currentXml.@x2 ); 
     57                        _y1 = getValue( data.currentXml.@y1 ); 
     58                        _y2 = getValue( data.currentXml.@y2 ); 
    5759                         
    5860                        pts = new Vector.<Point>(); 
     
    6062                        pts.push( new Point( _x2, _y2 ) ); 
    6163                         
    62                         var distance:Number = getDistance( pts[0], pts[1] ); 
     64                        var distance:Number = GeomUtil.getDistance( pts[0], pts[1] ); 
    6365                        var boxheight:Number = Math.max( Math.abs(pts[0].x - pts[1].x ), Math.abs(pts[0].y - pts[1].y )); 
    64                         var angle:Number = getAngle(pts[0], pts[1]); 
     66                        var angle:Number = GeomUtil.getAngle(pts[0], pts[1]); 
    6567                        var topleft:Point = new Point( pts[0].x , pts[0].y  ); 
    6668 
     
    7880                        } 
    7981                         
     82                        if ( _linked != null ) setData( data ); 
    8083                        data.addGradient( this ); 
    8184                } 
     
    8487                { 
    8588                        var linkedGrad:IGradient = data.getGradientById( _linked ); 
    86                          
     89                        if ( !linkedGrad ) return; 
    8790                        _colors = linkedGrad.colors.concat(); 
    8891                        _alphas = linkedGrad.alphas.concat(); 
     
    98101                } 
    99102                 
    100                 protected function getAngle(  pt1:Point , pt2:Point ):Number  
    101                 { 
    102                         var dx:Number = pt2.x - pt1.x; 
    103                         var dy:Number = pt2.y - pt1.y; 
    104                         var angleRadian:Number = Math.atan2( dy , dx ); 
    105                         return  angleRadian; 
    106                 } 
    107                  
    108                 protected function getDistance( pt1:Point , pt2:Point ):Number  
    109                 { 
    110                         var dx:Number = pt2.x - pt1.x; 
    111                         var dy:Number = pt2.y - pt1.y; 
    112                         return Math.sqrt( dx * dx + dy * dy ); 
     103                protected function getValue( val:String ):Number { 
     104                        return StyleUtil.toNumber( val ); 
    113105                } 
    114106                 
     
    122114                public function get transform():Transform { return _transform; } 
    123115                public function get unit():String { return _unit; } 
    124                  
    125116        } 
    126  
    127117} 
  • as3/SvgParser/trunk/src/svgparser/parser/Marker.as

    r3476 r3483  
    77                 
    88                public function Marker() {} 
    9                 public function parse( data:Data ):void {
     9                public function parse( data:Data ):void {
    1010        } 
    1111 
  • as3/SvgParser/trunk/src/svgparser/parser/Path.as

    r3476 r3483  
    1212                 
    1313                public static var LOCALNAME:String = "path"; 
    14                 public var BezierDetail:uint = Constants.BEZIER_DETAIL; 
    1514                private var _commands:Vector.<int> = new Vector.<int>; 
    1615                private var _vertices:Vector.<Number> = new Vector.<Number>; 
     
    249248                private function _bezier_curve( x0:Number, y0:Number, cx0:Number, cy0:Number, cx1:Number, cy1:Number, x:Number, y:Number ):void 
    250249                { 
    251                         var k:Number = 1.0/BezierDetail
     250                        var k:Number = 1.0/ Constants.BEZIER_DETAIL
    252251                        var t:Number = 0; 
    253252                        var tp:Number; 
    254                         for ( var i:int = 1; i <= BezierDetail; i++ ) 
     253                        for ( var i:int = 1; i <= Constants.BEZIER_DETAIL; i++ ) 
    255254                        { 
    256255                                t += k; 
  • as3/SvgParser/trunk/src/svgparser/parser/Pattern.as

    r3476 r3483  
    44        public class Pattern implements IParser 
    55        { 
    6                  
    7                 public function Pattern()  
    8                 { 
    9                          
    10                 } 
    11                  
     6                public static var LOCALNAME:String = "pattern"; 
     7                public function Pattern() {} 
    128        } 
    139 
  • as3/SvgParser/trunk/src/svgparser/parser/Polygon.as

    r3476 r3483  
    1111        public class Polygon extends AbstractPaint implements IParser 
    1212        { 
    13                  
    1413                public static var LOCALNAME:String = "polygon"; 
    1514                 
     
    2423                        var style:Style = new Style( data.currentXml ); 
    2524                         
    26                         var points:Array = data.currentXml.@points.toString().replace(/\s+$/,"").replace(/\s+/g , ",").split(","); 
     25                        var points:Array = data.currentXml.@points.toString()   .replace(/\s+$/, "") 
     26                                                                                                                                        .replace(/\s+/g , ",") 
     27                                                                                                                                        .split(","); 
    2728                        _vertices = Vector.<Number>( points ); 
    2829                        _vertices.push( _vertices[0], _vertices[1] ); 
  • as3/SvgParser/trunk/src/svgparser/parser/Polyline.as

    r3476 r3483  
    2323                        var style:Style = new Style( data.currentXml ); 
    2424                         
    25                         var points:Array = data.currentXml.@points.toString().replace(/\s+$/,"").replace(/\s+/g , ",").split(","); 
     25                        var points:Array = data.currentXml.@points.toString()   .replace(/\s+$/, "") 
     26                                                                                                                                        .replace(/\s+/g , ",") 
     27                                                                                                                                        .split(","); 
    2628                        _vertices = Vector.<Number>( points ); 
    2729                         
  • as3/SvgParser/trunk/src/svgparser/parser/RadialGradient.as

    r3476 r3483  
    1010        import flash.display.GradientType; 
    1111        import flash.display.SpreadMethod; 
     12        import svgparser.parser.utils.GeomUtil; 
    1213         
    1314        public class RadialGradient extends LinearGradient implements IParser , IGradient 
     
    3031                        this.id = style.id; 
    3132                         
     33                        _cx = getValue( data.currentXml.@cx ); 
     34                        _cy = getValue( data.currentXml.@cy ); 
     35                        _r =  getValue( data.currentXml.@r  ); 
     36                        _fx = data.currentXml.@fx ? getValue( data.currentXml.@fx ) : _cx ; 
     37                        _fy = data.currentXml.@fy ? getValue( data.currentXml.@fy ) : _cy ; 
    3238                        _linked = style.href; 
    3339                        _transform = style.gradientTransform; 
    3440                        _unit = style.gradientUnits; 
    3541                         
    36                         _cx = Number( data.currentXml.@cx ); 
    37                         _cy = Number( data.currentXml.@cy ); 
    38                         _r = Number( data.currentXml.@r ); 
    39                         _fx = data.currentXml.@fx ?  Number( data.currentXml.@fx ) : _cx ; 
    40                         _fy = data.currentXml.@fy  ? Number( data.currentXml.@fy ) : _cy ; 
    41                          
    42                         _matrix.createGradientBox( _r * 2  , _r * 2  , getAngle( new Point(_cx,_cy ) , new Point(_fx,_fy ) ) , _cx - _r , _cy - _r  ); 
     42                        _matrix.createGradientBox(      _r * 2  , _r * 2  ,  
     43                                                                                GeomUtil.getAngle( new Point(_cx, _cy ) , new Point(_fx, _fy ) ) ,  
     44                                                                                _cx - _r , _cy - _r  ); 
    4345                        if ( _transform ) _matrix.concat( _transform.getMatrix() ); 
    4446                         
     
    4951                        } 
    5052                         
     53                        if ( _linked != null ) setData( data ); 
    5154                        data.addGradient( this ); 
    5255                } 
  • as3/SvgParser/trunk/src/svgparser/parser/Rect.as

    r3476 r3483  
    55        import svgparser.parser.model.Data; 
    66        import svgparser.parser.style.Style; 
     7        import svgparser.parser.utils.StyleUtil; 
    78         
    89        public class Rect extends AbstractPaint implements IParser 
     
    2324                        var style:Style = new Style( xml ); 
    2425                         
    25                         _x = Number( xml.@x.toString() ); 
    26                         _y = Number( xml.@y.toString() ); 
    27                         _width = Number( xml.@width.toString() ); 
    28                         _height = Number( xml.@height.toString() ); 
     26                        _x = StyleUtil.toNumber( xml.@x ); 
     27                        _y = StyleUtil.toNumber( xml.@y ); 
     28                        _width = StyleUtil.toNumber( xml.@width.toString() ); 
     29                        _height = StyleUtil.toNumber( xml.@height.toString() ); 
    2930 
    3031                        paint( target , style, data ); 
  • as3/SvgParser/trunk/src/svgparser/parser/SvgFactory.as

    r3476 r3483  
    77        public class SvgFactory  
    88        { 
    9                 private static const PARSERS:Array = [  Svg , Group , Defs,  FlowRoot , Path , Polyline, Polygon, Symbol, 
     9                private static const PARSERS:Array = [  Svg , Group , Defs,  FlowRoot , Path , Polyline, Polygon, 
    1010                                                                                                Ellipse, Rect, Text, Image, Line, Circle, ClipPath, Use, 
    11                                                                                                 Marker, LinearGradient, RadialGradient , FilterSet ]; 
     11                                                                                                Marker, LinearGradient, RadialGradient , FilterSet ,Symbol ]; 
    1212                 
    1313                public function SvgFactory() { } 
     
    1818                        xml.removeNamespace( Constants.svg ); 
    1919                        xml.removeNamespace( Constants.xlink ); 
     20                         
    2021                        parseData( new Data( xml , target , settings ) ); 
    2122                } 
     
    2324                public static function parseData( data:Data ):void  
    2425                { 
    25                         var _parser:IParser = getParser( data.currentXml  ); 
    26                         _parser.parse( data ); 
     26                        getParser( data.currentXml  ).parse( data ); 
    2727                } 
    2828                 
    2929                private static function getParser( xml:XML  ):IParser  
    3030                { 
    31                         for each( var Ps:Class in PARSERS ) { 
     31                        for each( var Ps:Class in PARSERS )  
    3232                                if ( xml.localName() == Ps["LOCALNAME"] ) return new Ps(); 
    33                         } 
    3433                        return new ComplexTree(); 
    3534                } 
  • as3/SvgParser/trunk/src/svgparser/parser/Symbol.as

    r3478 r3483  
    1010        { 
    1111                public static var LOCALNAME:String = "symbol"; 
    12                 private var symbol:Sprite; 
    1312                 
    1413                public function Symbol() { } 
    15                  
    16                 public function parse( data:Data ):void { 
    17                         var style:Style = new Style( data.currentXml ); 
    18                         if ( !style.display ) return; 
    19                          
    20                         symbol = new Sprite(); 
    21                         symbol.name = style.id; 
    22                         style.applyStyle( symbol, data ); 
    23                         data.currentCanvas = symbol; 
    24                          
    25                         var groupXML:XML = data.currentXml; 
    26                         groupXML.setLocalName(  "_symbol" );     
    27                         SvgFactory.parseData( data  ); 
    28  
    29                         data.addGraphic( symbol ); 
    30                         data.initCanvas(); 
    31                 } 
    32                  
     14                public function parse( data:Data ):void {} 
    3315        } 
    34  
    3516} 
  • as3/SvgParser/trunk/src/svgparser/parser/Text.as

    r3476 r3483  
    77        import svgparser.parser.model.Data; 
    88        import svgparser.parser.style.Style; 
     9        import flash.text.engine.FontLookup; 
    910 
    1011        public class Text implements IParser 
    1112        { 
    12                  
    1313                public static var LOCALNAME:String = "text"; 
    1414                 
     
    7373                private function setText(  txt:String , style:Style ):void  
    7474                { 
    75                         _data.parseStyle( style ); 
     75                        _data.replaceFont( style ); 
    7676                        txt = txt.replace(/[\t|\n|\r]+/g , "" ); 
    7777                        var fd:FontDescription = new FontDescription( style.font_family, style.font_weight ); 
     
    110110                        textLine.alpha = style.opacity; 
    111111                        sprite.addChild( textLine ); 
     112                //      if ( style.hasGradientFill ) setGradient( textLine, style ); 
    112113                } 
    113                  
     114                /* 
     115                private function setGradient( textLine:TextLine , style:Style ):void { 
     116                        var grad:IGradient = _data.getGradientById( style.fill_id ); 
     117                        if ( grad ) { 
     118                                var rect:Rectangle = textLine.getBounds( sprite ); 
     119                                var frame:Sprite = new Sprite(); 
     120                                frame.graphics.beginGradientFill(       grad.type, grad.colors, grad.alphas ,  
     121                                                                                                        grad.ratios , grad.matrix , grad.method  ); 
     122                                frame.graphics.drawRect( rect.x, rect.y, rect.width, rect.height ); 
     123                                frame.graphics.endFill(); 
     124                                sprite.addChild( frame ); 
     125                                //frame.mask = textLine; 
     126                                //frame.blendMode = BlendMode.SCREEN; 
     127                        } 
     128                } 
     129                */ 
    114130        } 
    115131 
  • as3/SvgParser/trunk/src/svgparser/parser/Use.as

    r3478 r3483  
    22{ 
    33        import flash.display.DisplayObject; 
     4        import flash.display.DisplayObjectContainer; 
    45        import svgparser.parser.IParser; 
    56        import svgparser.parser.model.Data; 
    67        import svgparser.parser.style.Style; 
    78        import flash.display.Sprite; 
     9        import svgparser.parser.utils.StyleUtil; 
    810         
    911        public class Use implements IParser 
     
    2325                        var style:Style = new Style( data.currentXml ); 
    2426                        _href = style.href; 
    25                         _x = Number( data.currentXml.@x.toString()); 
    26                         _y = Number( data.currentXml.@y.toString()); 
     27                        _x = StyleUtil.toNumber( data.currentXml.@x ); 
     28                        _y = StyleUtil.toNumber( data.currentXml.@y ); 
     29                        _width = StyleUtil.toNumber( data.currentXml.@width ); 
     30                        _height = StyleUtil.toNumber( data.currentXml.@height ); 
    2731                         
    28                         var item:DisplayObject = data.getGraphicById( _href ); 
    29                         if ( !item ) return; 
    30                         item.x = _x; 
    31                         item.y = _y; 
    32                         item.width = _width; 
    33                         item.height = _height; 
    34                         style.applyStyle( item, data ); 
     32                        var currentXML:XML = data.currentXml.copy(); 
     33                        var appendXML:XML = data.xml..*.(  attribute("id") == _href  )[0].copy(); 
     34                        if( appendXML.localName() == "symbol" ) appendXML.setLocalName( "g" ); 
     35                        currentXML.appendChild( appendXML ); 
     36                        currentXML.setLocalName(  "_use" ); 
    3537                         
    36                         data.currentCanvas.addChild( item ); 
     38                        var symbol:Sprite = new Sprite(); 
     39                        var localData:Data = data.copy( currentXML, symbol ); 
     40                        localData.overrideStyle( currentXML ); 
     41                        SvgFactory.parseData( localData ); 
     42                        symbol.x = _x; 
     43                        symbol.y = _y; 
     44                        if( _width != 0 ) symbol.width = _width; 
     45                        if( _height != 0 ) symbol.height = _height; 
     46                        style.applyStyle( symbol, data ); 
     47                        data.currentCanvas.addChild( symbol ); 
    3748                } 
    38                  
    39                  
    4049        } 
    4150 
  • as3/SvgParser/trunk/src/svgparser/parser/abstract/AbstractPaint.as

    r3476 r3483  
    1515                protected function paint( target:Shape, style:Style , data:Data ):void  
    1616                { 
     17                        if ( data.hasParentStyle ) style.addStyle( data.getStyleXML() ); 
    1718                        if ( style.hasStroke  ) target.graphics.lineStyle(      style.stroke_width, style.stroke, style.stroke_opacity,  
    1819                                                                                                                                Constants.LINE_PIXEL_HINTING, Constants.LINE_SCALE_MODE ,  
     
    2122                        { 
    2223                                var sgrad:IGradient = data.getGradientById( style.stroke_id ); 
    23                                 if ( sgrad.linked != null ) sgrad.setData( data ); 
    24                                 target.graphics.lineGradientStyle( sgrad.type, sgrad.colors, sgrad.alphas, sgrad.ratios, sgrad.matrix, sgrad.method ); 
     24                                if( sgrad ) target.graphics.lineGradientStyle(         sgrad.type, sgrad.colors, sgrad.alphas,  
     25                                                                                                                               sgrad.ratios, sgrad.matrix, sgrad.method ); 
    2526                        } 
    2627                        if ( style.hasFill ) target.graphics.beginFill( style.fill , style.fill_opacity ); 
     
    2829                        { 
    2930                                var grad:IGradient = data.getGradientById( style.fill_id ); 
    30                                 if ( grad ) { 
    31                                         if ( grad.linked != null ) grad.setData( data ); 
    32                                         target.graphics.beginGradientFill( grad.type, grad.colors, grad.alphas , grad.ratios , grad.matrix , grad.method  ); 
    33                                 } 
     31                                if ( grad ) target.graphics.beginGradientFill(  grad.type, grad.colors, grad.alphas ,  
     32                                                                                                                                grad.ratios , grad.matrix , grad.method  ); 
    3433                        } 
    3534                         
     
    4342                { 
    4443                        throw new Error( "AbstractPaint draw method" ); 
    45                 } 
    46                  
     44                }                
    4745        } 
    4846 
  • as3/SvgParser/trunk/src/svgparser/parser/filters/ColorMatrix.as

    r3476 r3483  
    33        import flash.filters.ColorMatrixFilter; 
    44        import flash.filters.BitmapFilter; 
     5        import flash.display.DisplayObject; 
    56        import svgparser.parser.filters.IFilter; 
     7        import svgparser.parser.utils.GeomUtil; 
    68         
    79        public class ColorMatrix implements IFilter 
     
    1012                 
    1113                public var id:String; 
     14                 
    1215                private var _matrix:Array; 
     16                private var _result:String; 
     17                private var _in:String; 
     18                private var _in2:String; 
    1319                 
    1420                public function ColorMatrix( xml:XML)  
     
    2935                        if ( xml.@type ) { 
    3036                                var type:String = xml.@type.toString(); 
    31                                 _matrix = getMatrixByType( type ); 
     37                                _matrix = getMatrixByType( type, xml.@values.toString() ); 
    3238                        } 
    3339                } 
     
    3541                public function getFlashFilter():BitmapFilter  
    3642                { 
    37                         var filter:ColorMatrixFilter = new ColorMatrixFilter( _matrix ); 
    38                         return filter as BitmapFilter; 
     43                        return new ColorMatrixFilter( _matrix ) as BitmapFilter; 
    3944                } 
    4045                 
    41                 private function getMatrixByType( type:String ):Array  
     46                public function setSourceGraphic( d:DisplayObject ):void { } 
     47                 
     48                private function getMatrixByType( type:String, values:String ):Array  
    4249                { 
    4350                        switch( type ) { 
     
    4754                                                                                                        0.2125, 0.7154, 0.0721, 0,0]; 
    4855                                break; 
    49                                 case "saturate" :return []; 
     56                                case "saturate" : 
     57                                        var v:Number  = Number( values ); 
     58                                        var i:Number= 1 - v; 
     59                                        var ir:Number= i * 0.3086; 
     60                                        var ig:Number= i * 0.6094; 
     61                                        var ib:Number= i * 0.0820; 
     62                                        return [ir + v,ig,ib,0,0,ir,ig + v,ib,0,0,ir,ig,ib + v,0,0,0,0,0,1,0]; 
    5063                                break; 
    51                                 case "hueRotate" :return []; 
     64                                case "hueRotate" : 
     65                                        var angle:Number = GeomUtil.degree2radian( Number( values )); 
     66                                        var c:Number=Math.cos(angle); 
     67                                        var s:Number=Math.sin(angle); 
     68                                        var f1:Number=0.213; 
     69                                        var f2:Number=0.715; 
     70                                        var f3:Number=0.072; 
     71                                        return [(f1 + (c * (1 - f1))) + (s * ( -f1)), (f2 + (c * ( -f2))) + (s * ( -f2)), (f3 + (c * ( -f3))) + (s * (1 - f3)), 0, 0, 
     72                                                        (f1 + (c * ( -f1))) + (s * 0.143), (f2 + (c * (1 - f2))) + (s * 0.14), (f3 + (c * ( -f3))) + (s * -0.283), 0, 0,  
     73                                                        (f1 + (c * ( -f1))) + (s * ( -(1 - f1))), (f2 + (c * ( -f2))) + (s * f2), (f3 + (c * (1 - f3))) + (s * f3), 0, 0,  
     74                                                        0, 0, 0, 1, 0, 0, 0, 0, 0, 1]; 
     75                                break; 
     76                                default : 
     77                                        return values.replace(/\s$/ , "" ).split( " " ); 
    5278                                break; 
    5379                        } 
  • as3/SvgParser/trunk/src/svgparser/parser/filters/GaussianBlur.as

    r3476 r3483  
    33        import flash.filters.BlurFilter; 
    44        import flash.filters.BitmapFilter; 
     5        import flash.display.DisplayObject; 
    56        import svgparser.parser.Constants; 
    67         
     
    1011                 
    1112                public var id:String; 
    12                 public var _result:String; 
    13                 public var _in:String; 
    14                 public var _in2:String; 
    1513                public var amount:Number; 
    1614                private var quality:int = Constants.BLUR_QUALITY; 
    17                 private var filter:BlurFilter; 
     15                private var _result:String; 
     16                private var _in:String; 
     17                private var _in2:String; 
    1818                 
    1919                public function GaussianBlur( xml:XML )  
     
    3030                public function getFlashFilter():BitmapFilter  
    3131                { 
    32                         filter = new BlurFilter( amount , amount , quality ); 
    33                         return filter as BitmapFilter; 
     32                        return new BlurFilter( amount , amount , quality ) as BitmapFilter; 
    3433                } 
     34                 
     35                public function setSourceGraphic( d:DisplayObject ):void { } 
     36 
    3537                 
    3638        } 
  • as3/SvgParser/trunk/src/svgparser/parser/filters/IFilter.as

    r3476 r3483  
    11package svgparser.parser.filters  
    22{ 
     3        import flash.display.DisplayObject; 
    34        import flash.filters.BitmapFilter; 
    45        public interface IFilter  
     
    67                function parse( xml:XML ):void; 
    78                function getFlashFilter():BitmapFilter; 
     9                function setSourceGraphic( d:DisplayObject ):void; 
    810        } 
    911         
  • as3/SvgParser/trunk/src/svgparser/parser/model/Data.as

    r3476 r3483  
    44        import flash.display.DisplayObject; 
    55        import svgparser.font.FontConverter; 
     6        import svgparser.parser.style.Style; 
     7        import svgparser.parser.SvgFactory; 
    68        import svgparser.parser.FilterSet; 
    79        import svgparser.parser.IGradient; 
    8         import svgparser.parser.style.Style; 
    910        import svgparser.Settings; 
     11         
    1012        public class Data 
    1113        { 
    12                 private var _xml:XML; 
    13                 private var _canvas:DisplayObjectContainer ; 
    14                 private var _currentXml:XML; 
    15                 private var _currentCanvas:DisplayObjectContainer ; 
    16                 private var _gradients:Array = []; 
    17                 private var _filters:Array = []; 
    18                 private var _graphics:Array = []; 
     14                private var _currentXML:XML; 
     15                private var _currentCanvas:DisplayObjectContainer; 
    1916                private var _settings:Settings; 
     17                private var _persistent:PersistentData; 
     18                private var _styleXML:XML; 
    2019                 
    21                 public function Data( xml:XML, canvas:DisplayObjectContainer , settings:Settings = null )  
     20                public function Data( xml:XML, canvas:DisplayObjectContainer , settings:Settings = null , persistent:PersistentData = null )  
    2221                { 
    23                         this._xml = this._currentXml = xml; 
    24                         this._canvas = this._currentCanvas = canvas; 
     22                        _persistent = ( persistent  ) ?  persistent : new PersistentData(); 
     23                        _currentXML = _persistent.rootXML =  xml; 
     24                        _currentCanvas = _persistent.rootCanvas = canvas; 
    2525                        this._settings = settings; 
    2626                } 
    2727                 
    28                 public function initCanvas():void { 
    29                         _currentCanvas = _canvas; 
     28                //return new Data with persistent data intact 
     29                public function copy( xml:XML = null , canvas:DisplayObjectContainer = null):Data        
     30                {        
     31                        if ( !xml ) xml = _currentXML; 
     32                        if ( !canvas ) canvas = _currentCanvas; 
     33                        return new Data( xml, canvas, _settings, _persistent ); 
    3034                } 
    3135                 
    32                 public function get xml():XML { return _xml; } 
    33                 public function get canvas():DisplayObjectContainer  { return _canvas; } 
    34                  
    35                 public function get currentXml():XML { return _currentXml; } 
    36                 public function set currentXml(value:XML):void  
    37                 { 
    38                         _currentXml = value; 
     36                public function overrideStyle( xml:XML):void { 
     37                        xml.@transform = null; 
     38                        _styleXML = xml; 
    3939                } 
    4040                 
    41                 public function get currentCanvas():DisplayObjectContainer  { return _currentCanvas; } 
    42                 public function set currentCanvas(value:DisplayObjectContainer ):void  
    43                 { 
    44                         _currentCanvas = value; 
     41                public function getStyleXML():XML { 
     42                        return _styleXML; 
     43                } 
     44                 
     45                public function get hasParentStyle():Boolean { 
     46                        return Boolean( _styleXML ); 
     47                } 
     48                 
     49                public function replaceFont ( style:Style ):void { 
     50                        if ( !_settings.hasFontConversion() ) return; 
     51                        var fc:FontConverter = _settings.getSwfFont( style.font_family ); 
     52                        if ( !fc )  return; 
     53                        style.font_family = fc.swfFontName; 
     54                        if ( fc.fontLookUp != null ) style.fontLookup = fc.fontLookUp; 
    4555                } 
    4656                 
    4757                public function getGradientById( id:String ):IGradient {  
    48                         for each( var grad:IGradient in _gradients )  
    49                                 if ( grad.getId() == id ) return grad; 
    50                         return null;  
     58                        return _persistent.getGradientById( id ); 
    5159                } 
    5260                public function addGradient(value:IGradient):void  
    5361                { 
    54                         for each( var grad:IGradient in _gradients )  
    55                                 if ( grad.getId() == value.getId() ) return; 
    56                         _gradients.push( value ); 
     62                        _persistent.addGradient( value ); 
    5763                } 
    5864                 
    5965                public function getFilterById( id:String ):FilterSet { 
    60                         for each( var fl:FilterSet in _filters )  
    61                                 if ( fl.id == id ) return fl; 
    62                         return null;  
     66                        return _persistent.getFilterById( id ); 
    6367                } 
    6468                public function addFilter(value:FilterSet):void  
    6569                { 
    66                         for each( var fl:FilterSet in _filters )  
    67                                 if ( fl.id == value.id ) return; 
    68                         _filters.push( value ); 
     70                        _persistent.addFilter( value ); 
    6971                } 
    7072                 
    71                 public function getGraphicById( id:String ):DisplayObject { 
    72                         for each( var item:DisplayObject in _graphics )  
    73                                 if ( item.name == id ) return item; 
    74                         return null;  
    75                 } 
    76                 public function addGraphic(value:DisplayObject):void  
    77                 { 
    78                         for each( var item:DisplayObject in _graphics )  
    79                                 if ( item.name == value.name ) return; 
    80                         _graphics.push( value ); 
     73                public function getClipPathById( id:String ):DisplayObject { 
     74                        return _persistent.getClipPathById( id ); 
    8175                } 
    8276                 
    83                 public function parseStyle( style:Style ):void { 
    84                         if ( _settings.hasFontConversion() ) { 
    85                                 var fc:FontConverter = _settings.getSwfFont( style.font_family ); 
    86                                 if ( fc ) { 
    87                                         style.font_family = fc.swfFontName; 
    88                                         if ( fc.fontLookUp != null ) style.fontLookup = fc.fontLookUp; 
    89                                 } 
    90                         } 
     77                public function addClipPath(value:DisplayObject):void  
     78                { 
     79                        _persistent.addClipPath( value ); 
    9180                } 
    9281                 
     82                public function get xml():XML { return _persistent.rootXML; } 
     83                public function get canvas():DisplayObjectContainer { return _persistent.rootCanvas; } 
    9384                 
     85                public function get currentCanvas():DisplayObjectContainer  { return _currentCanvas; } 
     86                public function set currentCanvas( value:DisplayObjectContainer ):void { 
     87                        _currentCanvas = value; 
     88                } 
     89                public function get currentXml():XML { return _currentXML; } 
     90                public function set currentXml( value:XML ):void { 
     91                        _currentXML = value; 
     92                } 
     93                public function get settings():Settings { return _settings; } 
    9494        } 
    9595 
  • as3/SvgParser/trunk/src/svgparser/parser/style/Style.as

    r3476 r3483  
    1111        import svgparser.parser.style.Transform; 
    1212        import svgparser.parser.FilterSet; 
     13        import svgparser.parser.utils.StyleUtil; 
    1314        import svgparser.parser.Constants; 
    1415         
     
    115116                        if ( hasFilter && data != null ) { 
    116117                                var fl:FilterSet = data.getFilterById( filter_id ); 
    117                                 if( fl.hasFilter() ) d.filters = fl.getAllFilters(); 
     118                                if ( fl.hasFilter() ) { 
     119                                        fl.setSourceGraphic( d ); 
     120                                        d.filters = fl.getAllFilters(); 
     121                                } 
    118122                        } 
    119123                        if ( hasClipPath && data != null ) { 
    120                                 var maskobj:DisplayObject = data.getGraphicById( clipPath_id ); 
     124                                var maskobj:DisplayObject = data.getClipPathById( clipPath_id ); 
    121125                                if ( maskobj ) { 
    122126                                        var mtx:Matrix = maskobj.transform.matrix.clone(); 
     
    135139                        return new Matrix(); 
    136140                } 
    137                  
    138                 public function getClipPath( data:Data ):DisplayObject  
    139                 { 
    140                         if ( hasClipPath) { 
    141                                 var maskobj:DisplayObject = data.getGraphicById( clipPath_id ); 
    142                                 if ( maskobj ) return maskobj; 
    143                         } 
    144                         return null; 
    145                 } 
    146141 
    147142                private function parseStyles( st:String ):void  
     
    157152                { 
    158153                        key = key.replace( /-/g, "_" ); 
    159                         if ( key.indexOf( "http://") != -1 ) key = key.replace(/http(.+)::(.+)/, "$2");        //remove namespaces 
     154                        if ( key.indexOf( "http://") != -1 ) key = StyleUtil.removeNameSpace( key ); 
    160155                        switch( key ) { 
    161156                                case "stroke" :  
    162157                                        if ( val.indexOf("url") == -1 ) { 
    163                                                 stroke = toColor( val );       
     158                                                stroke = StyleUtil.toColor( val );     
    164159                                        } else { 
    165                                                 stroke_id = val.replace(/url\(#(.+)\)/ , "$1" ); 
     160                                                stroke_id = StyleUtil.toURL( val ); 
    166161                                                _hasGradientStroke = true; 
    167162                                        } 
     
    171166                                        if ( val == "none" ) _hasFill = false; 
    172167                                        else if ( val.indexOf("url") == -1 ) { 
    173                                                 fill = toColor( val ); 
     168                                                fill = StyleUtil.toColor( val ); 
    174169                                                _hasFill = true; 
    175170                                        } else { 
    176                                                 fill_id = val.replace(/url\(#(.+)\)/ , "$1" ); 
     171                                                fill_id = StyleUtil.toURL( val ); 
    177172                                                _hasGradientFill = true; 
    178173                                        } 
    179174                                break; 
    180                                 case "stroke_width": stroke_width = Number( val.replace(/px/, "") ); 
     175                                case "stroke_width": stroke_width = StyleUtil.toNumber( val ); 
    181176                                break; 
    182177                                case "stroke_linecap": stroke_linecap = ( val == CapsStyle.SQUARE || val == CapsStyle.ROUND ) ? val: CapsStyle.NONE; 
     
    184179                                case "font_family" : font_family = val.replace(/\'/g , "" ); 
    185180                                break; 
    186                                 case "font_size" : font_size = Number( val.replace(/px/, "") ); 
     181                                case "font_size" : font_size = StyleUtil.toNumber( val ); 
    187182                                break; 
    188183                                case "font_weight" : 
     
    195190                                case "style" : parseStyles( val ); 
    196191                                break; 
    197                                 case "filter" : filter_id = val.replace(/url\(#(.+)\)/ , "$1" ); 
     192                                case "filter" : filter_id = StyleUtil.toURL( val ); 
    198193                                break; 
    199194                                case "clip_path" :   
    200                                         clipPath_id = val.replace(/url\(#(.+)\)/ , "$1" ); 
     195                                        clipPath_id = StyleUtil.toURL( val ); 
    201196                                        _hasClipPath = true; 
    202197                                break; 
     
    208203                                break; 
    209204                                //Gradients 
    210                                 case "stop_color" : stop_color = toColor( val ); 
     205                                case "stop_color" : stop_color = StyleUtil.toColor( val ); 
    211206                                break; 
    212207                                case "href" : href = val.replace(/^#/ , "" ); 
     
    219214                                                        case "string" : this[key] = val;  
    220215                                                        break; 
    221                                                         case "number" : this[key] = Number( val ); 
     216                                                        case "number" : this[key] = StyleUtil.toNumber( val ); 
    222217                                                        break; 
    223218                                                } 
     
    225220                                break; 
    226221                        } 
    227                 } 
    228                  
    229                 private function toColor( str:String ):uint  
    230                 { 
    231                         return uint( str.replace( /#/, "0x" ) ); 
    232222                } 
    233223                 
  • as3/SvgParser/trunk/src/svgparser/parser/style/Transform.as

    r3476 r3483  
    33        import flash.display.DisplayObject; 
    44        import flash.geom.Matrix; 
     5        import svgparser.parser.utils.GeomUtil; 
    56         
    67        public class Transform 
     
    3536                                break; 
    3637                                case "rotate": 
    37                                         _matrix.rotate( degree2radian( vals[0] ) ); 
     38                                        _matrix.rotate( GeomUtil.degree2radian( vals[0] ) ); 
    3839                                break; 
    3940                                case "skewX": 
    40                                         _matrix.c = Math.tan( degree2radian( vals[0] ) ); 
     41                                        _matrix.c = Math.tan( GeomUtil.degree2radian( vals[0] ) ); 
    4142                                break; 
    4243                                case "skewY": 
    43                                         _matrix.b = Math.tan( degree2radian( vals[0] ) ); 
     44                                        _matrix.b = Math.tan( GeomUtil.degree2radian( vals[0] ) ); 
    4445                                break; 
    4546                        } 
    46                 } 
    47                  
    48                 protected function degree2radian( degree:Number ):Number { 
    49                         return degree * Math.PI / 180; 
    5047                } 
    5148