//>>built define("dojox/gfx/VectorText",["dojo/_base/lang","dojo/_base/declare","dojo/_base/array","dojo/_base/loader","dojo/_base/xhr","./_base","dojox/xml/DomParser","dojox/html/metrics","./matrix"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9){ var _a=function(_b){ var _c; _5.get({url:_b,sync:true,load:function(_d){ _c=_d; }}); return _c; }; _1.getObject("dojox.gfx.VectorText",true); _1.mixin(_6,{vectorFontFitting:{NONE:0,FLOW:1,FIT:2},defaultVectorText:{type:"vectortext",x:0,y:0,width:null,height:null,text:"",align:"start",decoration:"none",fitting:0,leading:1.5},defaultVectorFont:{type:"vectorfont",size:"10pt",family:null},_vectorFontCache:{},_svgFontCache:{},getVectorFont:function(_e){ if(_6._vectorFontCache[_e]){ return _6._vectorFontCache[_e]; } return new _6.VectorFont(_e); }}); return _2("dojox.gfx.VectorFont",null,{_entityRe:/&(quot|apos|lt|gt|amp|#x[^;]+|#\d+);/g,_decodeEntitySequence:function(_f){ if(!_f.match(this._entityRe)){ return; } var _10={amp:"&",apos:"'",quot:"\"",lt:"<",gt:">"}; var r,tmp=""; while((r=this._entityRe.exec(_f))!==null){ if(r[1].charAt(1)=="x"){ tmp+=String.fromCharCode(parseInt(r[1].slice(2),16)); }else{ if(!isNaN(parseInt(r[1].slice(1),10))){ tmp+=String.fromCharCode(parseInt(r[1].slice(1),10)); }else{ tmp+=_10[r[1]]||""; } } } return tmp; },_parse:function(svg,url){ var doc=_6._svgFontCache[url]||_7.parse(svg); var f=doc.documentElement.byName("font")[0],_11=doc.documentElement.byName("font-face")[0]; var _12=parseFloat(_11.getAttribute("units-per-em")||1000,10); var _13={x:parseFloat(f.getAttribute("horiz-adv-x"),10),y:parseFloat(f.getAttribute("vert-adv-y")||0,10)}; if(!_13.y){ _13.y=_12; } var _14={horiz:{x:parseFloat(f.getAttribute("horiz-origin-x")||0,10),y:parseFloat(f.getAttribute("horiz-origin-y")||0,10)},vert:{x:parseFloat(f.getAttribute("vert-origin-x")||0,10),y:parseFloat(f.getAttribute("vert-origin-y")||0,10)}}; var _15=_11.getAttribute("font-family"),_16=_11.getAttribute("font-style")||"all",_17=_11.getAttribute("font-variant")||"normal",_18=_11.getAttribute("font-weight")||"all",_19=_11.getAttribute("font-stretch")||"normal",_1a=_11.getAttribute("unicode-range")||"U+0-10FFFF",_1b=_11.getAttribute("panose-1")||"0 0 0 0 0 0 0 0 0 0",_1c=_11.getAttribute("cap-height"),_1d=parseFloat(_11.getAttribute("ascent")||(_12-_14.vert.y),10),_1e=parseFloat(_11.getAttribute("descent")||_14.vert.y,10),_1f={}; var _20=_15; if(_11.byName("font-face-name")[0]){ _20=_11.byName("font-face-name")[0].getAttribute("name"); } if(_6._vectorFontCache[_20]){ return; } _3.forEach(["alphabetic","ideographic","mathematical","hanging"],function(_21){ var a=_11.getAttribute(_21); if(a!==null){ _1f[_21]=parseFloat(a,10); } }); var _22=parseFloat(doc.documentElement.byName("missing-glyph")[0].getAttribute("horiz-adv-x")||_13.x,10); var _23={},_24={},g=doc.documentElement.byName("glyph"); _3.forEach(g,function(_25){ var _26=_25.getAttribute("unicode"),_20=_25.getAttribute("glyph-name"),_27=parseFloat(_25.getAttribute("horiz-adv-x")||_13.x,10),_28=_25.getAttribute("d"); if(_26.match(this._entityRe)){ _26=this._decodeEntitySequence(_26); } var o={code:_26,name:_20,xAdvance:_27,path:_28}; _23[_26]=o; _24[_20]=o; },this); var _29=doc.documentElement.byName("hkern"); _3.forEach(_29,function(_2a,i){ var k=-parseInt(_2a.getAttribute("k"),10); var u1=_2a.getAttribute("u1"),g1=_2a.getAttribute("g1"),u2=_2a.getAttribute("u2"),g2=_2a.getAttribute("g2"),gl; if(u1){ u1=this._decodeEntitySequence(u1); if(_23[u1]){ gl=_23[u1]; } }else{ if(_24[g1]){ gl=_24[g1]; } } if(gl){ if(!gl.kern){ gl.kern={}; } if(u2){ u2=this._decodeEntitySequence(u2); gl.kern[u2]={x:k}; }else{ if(_24[g2]){ gl.kern[_24[g2].code]={x:k}; } } } },this); _1.mixin(this,{family:_15,name:_20,style:_16,variant:_17,weight:_18,stretch:_19,range:_1a,viewbox:{width:_12,height:_12},origin:_14,advance:_1.mixin(_13,{missing:{x:_22,y:_22}}),ascent:_1d,descent:_1e,baseline:_1f,glyphs:_23}); _6._vectorFontCache[_20]=this; _6._vectorFontCache[url]=this; if(_20!=_15&&!_6._vectorFontCache[_15]){ _6._vectorFontCache[_15]=this; } if(!_6._svgFontCache[url]){ _6._svgFontCache[url]=doc; } },_clean:function(){ var _2b=this.name,_2c=this.family; _3.forEach(["family","name","style","variant","weight","stretch","range","viewbox","origin","advance","ascent","descent","baseline","glyphs"],function(_2d){ try{ delete this[_2d]; } catch(e){ } },this); if(_6._vectorFontCache[_2b]){ delete _6._vectorFontCache[_2b]; } if(_6._vectorFontCache[_2c]){ delete _6._vectorFontCache[_2c]; } return this; },constructor:function(url){ this._defaultLeading=1.5; if(url!==undefined){ this.load(url); } },load:function(url){ this.onLoadBegin(url.toString()); this._parse(_6._svgFontCache[url.toString()]||_a(url.toString()),url.toString()); this.onLoad(this); return this; },initialized:function(){ return (this.glyphs!==null); },_round:function(n){ return Math.round(1000*n)/1000; },_leading:function(_2e){ return this.viewbox.height*(_2e||this._defaultLeading); },_normalize:function(str){ return str.replace(/\s+/g,String.fromCharCode(32)); },_getWidth:function(_2f){ var w=0,_30=0,_31=null; _3.forEach(_2f,function(_32,i){ _30=_32.xAdvance; if(_2f[i]&&_32.kern&&_32.kern[_2f[i].code]){ _30+=_32.kern[_2f[i].code].x; } w+=_30; _31=_32; }); if(_31&&_31.code==" "){ w-=_31.xAdvance; } return this._round(w); },_getLongestLine:function(_33){ var _34=0,idx=0; _3.forEach(_33,function(_35,i){ var max=Math.max(_34,this._getWidth(_35)); if(max>_34){ _34=max; idx=i; } },this); return {width:_34,index:idx,line:_33[idx]}; },_trim:function(_36){ var fn=function(arr){ if(!arr.length){ return; } if(arr[arr.length-1].code==" "){ arr.splice(arr.length-1,1); } if(!arr.length){ return; } if(arr[0].code==" "){ arr.splice(0,1); } }; if(_1.isArray(_36[0])){ _3.forEach(_36,fn); }else{ fn(_36); } return _36; },_split:function(_37,_38){ var w=this._getWidth(_37),_39=Math.floor(w/_38),_3a=[],cw=0,c=[],_3b=false; for(var i=0,l=_37.length;i=_39){ var chr=_37[i]; while(_3b&&chr.code!=" "&&i>=0){ chr=c.pop(); i--; } _3a.push(c); c=[]; cw=0; _3b=false; } c.push(_37[i]); } if(c.length){ _3a.push(c); } return this._trim(_3a); },_getSizeFactor:function(_3c){ _3c+=""; var _3d=_8.getCachedFontMeasurements(),_3e=this.viewbox.height,f=_3d["1em"],_3f=parseFloat(_3c,10); if(_3c.indexOf("em")>-1){ return this._round((_3d["1em"]*_3f)/_3e); }else{ if(_3c.indexOf("ex")>-1){ return this._round((_3d["1ex"]*_3f)/_3e); }else{ if(_3c.indexOf("pt")>-1){ return this._round(((_3d["12pt"]/12)*_3f)/_3e); }else{ if(_3c.indexOf("px")>-1){ return this._round(((_3d["16px"]/16)*_3f)/_3e); }else{ if(_3c.indexOf("%")>-1){ return this._round((_3d["1em"]*(_3f/100))/_3e); }else{ f=_3d[_3c]||_3d.medium; return this._round(f/_3e); } } } } } },_getFitFactor:function(_40,w,h,l){ if(!h){ return this._round(w/this._getWidth(_40)); }else{ var _41=this._getLongestLine(_40).width,_42=(_40.length*(this.viewbox.height*l))-((this.viewbox.height*l)-this.viewbox.height); return this._round(Math.min(w/_41,h/_42)); } },_getBestFit:function(_43,w,h,_44){ var _45=32,_46=0,_47=_45; while(_45>0){ var f=this._getFitFactor(this._split(_43,_45),w,h,_44); if(f>_46){ _46=f; _47=_45; } _45--; } return {scale:_46,lines:this._split(_43,_47)}; },_getBestFlow:function(_48,w,_49){ var _4a=[],cw=0,c=[],_4b=false; for(var i=0,l=_48.length;i=w){ var chr=_48[i]; while(_4b&&chr.code!=" "&&i>=0){ chr=c.pop(); i--; } _4a.push(c); c=[]; cw=0; _4b=false; } c.push(_48[i]); } if(c.length){ _4a.push(c); } return this._trim(_4a); },getWidth:function(_4c,_4d){ return this._getWidth(_3.map(this._normalize(_4c).split(""),function(chr){ return this.glyphs[chr]||{xAdvance:this.advance.missing.x}; },this))*(_4d||1); },getLineHeight:function(_4e){ return this.viewbox.height*(_4e||1); },getCenterline:function(_4f){ return (_4f||1)*(this.viewbox.height/2); },getBaseline:function(_50){ return (_50||1)*(this.viewbox.height+this.descent); },draw:function(_51,_52,_53,_54,_55){ if(!this.initialized()){ throw new Error("dojox.gfx.VectorFont.draw(): we have not been initialized yet."); } var g=_51.createGroup(); if(_52.x||_52.y){ _51.applyTransform({dx:_52.x||0,dy:_52.y||0}); } var _56=_3.map(this._normalize(_52.text).split(""),function(chr){ return this.glyphs[chr]||{path:null,xAdvance:this.advance.missing.x}; },this); var _57=_53.size,_58=_52.fitting,_59=_52.width,_5a=_52.height,_5b=_52.align,_5c=_52.leading||this._defaultLeading; if(_58){ if((_58==_6.vectorFontFitting.FLOW&&!_59)||(_58==_6.vectorFontFitting.FIT&&(!_59||!_5a))){ _58=_6.vectorFontFitting.NONE; } } var _5d,_5e; switch(_58){ case _6.vectorFontFitting.FIT: var o=this._getBestFit(_56,_59,_5a,_5c); _5e=o.scale; _5d=o.lines; break; case _6.vectorFontFitting.FLOW: _5e=this._getSizeFactor(_57); _5d=this._getBestFlow(_56,_59,_5e); break; default: _5e=this._getSizeFactor(_57); _5d=[_56]; } _5d=_3.filter(_5d,function(_5f){ return _5f.length>0; }); var cy=0,_60=this._getLongestLine(_5d).width; for(var i=0,l=_5d.length;i