svnno****@sourc*****
svnno****@sourc*****
2011年 3月 21日 (月) 19:44:34 JST
Revision: 2491 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2491 Author: dhrname Date: 2011-03-21 19:44:34 +0900 (Mon, 21 Mar 2011) Log Message: ----------- SVGElementやSVGLengthのvar文を整理 Modified Paths: -------------- branches/07x/073/org/w3c/dom/svg.js Modified: branches/07x/073/org/w3c/dom/svg.js =================================================================== --- branches/07x/073/org/w3c/dom/svg.js 2011-03-20 11:46:51 UTC (rev 2490) +++ branches/07x/073/org/w3c/dom/svg.js 2011-03-21 10:44:34 UTC (rev 2491) @@ -140,25 +140,36 @@ if (evt.eventPhase === Event.BUBBLING_PHASE) { return; } - var name = evt.attrName, tar = evt.target; + var name = evt.attrName, + tar = evt.target; if (!!CSS2Properties[name] || name.indexOf("-") > -1) { //スタイルシートのプロパティならば tar._attributeStyle.setProperty(name, evt.newValue, ""); } if (evt.relatedNode.localName === "id") { //xml:idあるいはid属性ならば tar.id = evt.newValue; } else if (name === "transform" && !!tar.transform) { - var tft = evt.newValue, degR = tar._degReg; - var coma = tft.match(tar._comaReg); //コマンド文字にマッチ translate - var list = tft.match(tar._strReg); //カッコ内のリストにマッチ (10 20 30...) - var a,b,c,d,e,f,lis,deg,rad,degli; + var tft = evt.newValue, + degR = tar._degReg, + coma = tft.match(tar._comaReg), //コマンド文字にマッチ translate + list = tft.match(tar._strReg), //カッコ内のリストにマッチ (10 20 30...) + a,b,c,d,e,f, + lis, + com, + deg, + rad, + degli, + s, + cm, + degz; //transform属性の値を、SVGTransformListであるtransformプロパティに結びつける for (var j=0,cli=coma.length;j<cli;j++) { - var s = evt.target.ownerDocument.documentElement.createSVGTransform(); - lis = list[j], com = coma[j]; + s = evt.target.ownerDocument.documentElement.createSVGTransform(); + lis = list[j], + com = coma[j]; deg = lis.match(degR); degli = deg.length; if (degli === 6) { - var cm = s.matrix; + cm = s.matrix; cm.a = +(deg[0]); cm.b = +(deg[1]); cm.c = +(deg[2]); @@ -167,10 +178,10 @@ cm.f = +(deg[5]); } else { if (degli === 3) { - var degz = +(deg[0]); + degz = +(deg[0]); s.setRotate(degz, +(deg[1]), +(deg[2])) } else if (degli <= 2) { - var degz = +(deg[0]); + degz = +(deg[0]); if (com === "translate") { s.setTranslate(degz, +(deg[1] || 0)); } else if (com === "scale") { @@ -185,27 +196,31 @@ } } tar.transform.baseVal.appendItem(s); - lis = com = deg = rad = null; } - list = coma = mat = null; + tft = degR = coma = list = a = b = c = d = e = f = lis = com = deg = rad = degli = s = cm = degz = null; } else if (name === "style") { - var sc = evt.newValue, style = tar.style; + var sc = evt.newValue, + style = tar.style, + a, + ai, + m; style.cssText = sc; if (sc !== "") { //style属性値の解析 sc = sc.replace(tar._shouReg, "") .replace(tar._conReg, ":") .replace(tar._bouReg, ";"); - var a = sc.split(";"); + a = sc.split(";"); for (var i=0, ali=a.length;i<ali;++i) { - var ai = a[i], m = ai.split(":"); + ai = a[i], + m = ai.split(":"); if (ai !== "") { style.setProperty(m[0], m[1]); } ai = m = null; } - a = sc = null; } + a = sc = style = null; } else if (name === "class") { tar.className = evt.newValue; } else if (name.indexOf("on") === 0) { //event属性ならば @@ -241,9 +256,16 @@ tar.xmlbase = evt.newValue; } else { if (!!tar[name]) { - var tea = tar[name], tod = tar.ownerDocument.documentElement; + var tea = tar[name], + tod = tar.ownerDocument.documentElement, + n, + type, + _parseFloat, + s; if (tea instanceof SVGAnimatedLength) { - var n = evt.newValue.match(tar._NaNReg), type = SVGLength.SVG_LENGTHTYPE_NUMBER, _parseFloat = parseFloat; + n = evt.newValue.match(tar._NaNReg); + type = /*SVGLength.SVG_LENGTHTYPE_NUMBER*/ 1; + _parseFloat = parseFloat; if (!!n) { n = n[0]; } @@ -253,28 +275,29 @@ } else if ((name === "y") || (name === "height")) { tea.baseVal._percent *= tod.viewport.height; } - type = SVGLength.SVG_LENGTHTYPE_PERCENTAGE; + type = /*SVGLength.SVG_LENGTHTYPE_PERCENTAGE*/ 2; } else if (n === "em") { - type = SVGLength.SVG_LENGTHTYPE_EMS; + type = /*SVGLength.SVG_LENGTHTYPE_EMS*/ 3; } else if (n === "ex") { - type = SVGLength.SVG_LENGTHTYPE_EXS; + type = /*SVGLength.SVG_LENGTHTYPE_EXS*/ 4; } else if (n === "px") { - type = SVGLength.SVG_LENGTHTYPE_PX; + type = /*SVGLength.SVG_LENGTHTYPE_PX*/ 5; } else if (n === "cm") { - type = SVGLength.SVG_LENGTHTYPE_CM; + type = /*SVGLength.SVG_LENGTHTYPE_CM*/ 6; } else if (n === "mm") { - type = SVGLength.SVG_LENGTHTYPE_MM; + type = /*SVGLength.SVG_LENGTHTYPE_MM*/ 7; } else if (n === "in") { - type = SVGLength.SVG_LENGTHTYPE_IN; + type = /*SVGLength.SVG_LENGTHTYPE_IN*/ 8; } else if (n === "pt") { - type = SVGLength.SVG_LENGTHTYPE_PT; + type = /*SVGLength.SVG_LENGTHTYPE_PT*/ 9; } else if (n === "pc") { - type = SVGLength.SVG_LENGTHTYPE_PC; + type = /*SVGLength.SVG_LENGTHTYPE_PC*/ 10; } - var s = _parseFloat(evt.newValue); + s = _parseFloat(evt.newValue); s = isNaN(s) ? 0 : s; tea.baseVal.newValueSpecifiedUnits(type, s); } + tea = tod = n = type = _parseFloat = s = null; } } evt = _parseFloat = name = tar = null; @@ -307,28 +330,33 @@ /*interface SVGLocatable*/ /*SVGRect*/ this.getBBox = function(){ - var s = new SVGRect(); - var data = this._tar.path.value, vi = this.ownerDocument.documentElement.viewport; - var el = vi.width, et = vi.height, er = 0, eb = 0; + var s = new SVGRect(), + data = this._tar.path.value, + vi = this.ownerDocument.documentElement.viewport, + el = vi.width, + et = vi.height, + er = 0, + eb = 0, + degis = data.match(/[0-9\-]+/g), + nx, + ny; /*要素の境界領域を求める(四隅の座標を求める) *etは境界領域の上からビューポート(例えばsvg要素)の上端までの距離であり、ebは境界領域の下からビューポートの下端までの距離 *elは境界領域の左からビューポートの左端までの距離であり、erは境界領域の右からビューポートの右端までの距離 */ - var degis = data.match(/[0-9\-]+/g); for (var i=0,degisli=degis.length;i<degisli;i+=2) { - var nx = +(degis[i]), ny = +(degis[i+1]); + nx = +(degis[i]), + ny = +(degis[i+1]); el = el > nx ? nx : el; et = et > ny ? ny : et; er = er > nx ? er : nx; eb = eb > ny ? eb : ny; - nx = ny = null; } - data = degis = null; s.x = el; s.y = et; s.width = er - el; s.height = eb - et; - el = et = er = eb = vi = null; + nx = ny = data = degis =el = et = er = eb = vi = null; return s; }; @@ -339,11 +367,11 @@ *もし、要素の中心座標を取得したい人がいれば、transformプロパティのconsolidateメソッドを使うこと */ /*SVGMatrix*/ this.getCTM = function() { - var s; + var s, m; if (!!this._cacheMatrix) { //キャッシュがあれば s = this._cacheMatrix; } else { - var m = this.transform.baseVal.consolidate(); + m = this.transform.baseVal.consolidate(); if (m) { m = m.matrix; } else { @@ -366,6 +394,7 @@ } var view = this.nearestViewportElement || this.ownerDocument.documentElement; var s = view.getScreenCTM().multiply(this.getCTM()); + view = null; return s; }; @@ -511,32 +540,33 @@ *例:2pxならば、x.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX, 2);となる */ newValueSpecifiedUnits : function (/*unsigned short*/ unitType, /*float*/ valueInSpecifiedUnits) { - var n = 1, _s = ""; //nは各単位から利用単位への変換数値。_sは単位の文字列を表す - if (unitType === SVGLength.SVG_LENGTHTYPE_NUMBER) { - } else if (unitType === SVGLength.SVG_LENGTHTYPE_PX) { + var n = 1, + _s = ""; //nは各単位から利用単位への変換数値。_sは単位の文字列を表す + if (unitType === /*SVGLength.SVG_LENGTHTYPE_NUMBER*/ 1) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_PX*/ 5) { _s = "px"; - } else if (unitType === SVGLength.SVG_LENGTHTYPE_PERCENTAGE) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_PERCENTAGE*/ 2) { n = this._percent; _s = "%" - } else if (unitType === SVGLength.SVG_LENGTHTYPE_EMS) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_EMS*/ 3) { n = this._fontSize; _s = "em"; - } else if (unitType === SVGLength.SVG_LENGTHTYPE_EXS) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_EXS*/ 4) { n = this._fontSize * 0.5; _s = "ex"; - } else if (unitType === SVGLength.SVG_LENGTHTYPE_CM) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_CM*/ 6) { n = 35.43307; _s = "cm"; - } else if (unitType === SVGLength.SVG_LENGTHTYPE_MM) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_MM*/ 7) { n = 3.543307; _s = "mm"; - } else if (unitType === SVGLength.SVG_LENGTHTYPE_IN) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_IN*/ 8) { n = 90; _s = "in"; - } else if (unitType === SVGLength.SVG_LENGTHTYPE_PT) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_PT*/ 9) { n = 1.25; _s = "pt"; - } else if (unitType === SVGLength.SVG_LENGTHTYPE_PC) { + } else if (unitType === /*SVGLength.SVG_LENGTHTYPE_PC*/ 10) { n = 15; _s = "pc"; } else { @@ -546,7 +576,7 @@ this.value = valueInSpecifiedUnits * n; this.valueInSpecifiedUnits = valueInSpecifiedUnits; this.valueAsString = valueInSpecifiedUnits + _s; - n = _s = null; + valueInSpecifiedUnits = unitType = n = _s = null; }, /*convertToSpecifiedUnitsメソッド *valueプロパティを書き換えずに、単位だけを変換する @@ -603,7 +633,8 @@ }; SVGAngle.prototype = { /*void*/ newValueSpecifiedUnits : function (/*in unsigned short*/ unitType, /*in float*/ valueInSpecifiedUnits ) { - var n = 1, _s = ""; //nは各単位から利用単位への変換数値。_sは単位の文字列を表す + var n = 1, + _s = ""; //nは各単位から利用単位への変換数値。_sは単位の文字列を表す if (unitType === SVGAngle.SVG_ANGLETYPE_DEG) { _s = "deg" } else if (unitType === SVGAngle.SVG_ANGLETYPE_RAD) { @@ -638,7 +669,7 @@ }; function SVGColor() { CSSValue.call(this, arguments); - /*readonly unsigned short*/ this.colorType = SVGColor.SVG_COLORTYPE_UNKNOWN; + /*readonly unsigned short*/ this.colorType = /*SVGColor.SVG_COLORTYPE_UNKNOWN*/ 0; /*readonly css::RGBColor*/ this.rgbColor = new RGBColor(); /*readonly SVGICCColor*/ this.iccColor; return this;