svnno****@sourc*****
svnno****@sourc*****
2011年 2月 12日 (土) 23:44:57 JST
Revision: 2391 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2391 Author: dhrname Date: 2011-02-12 23:44:57 +0900 (Sat, 12 Feb 2011) Log Message: ----------- 0.70統合完了 Modified Paths: -------------- trunk/sie.js Property Changed: ---------------- trunk/sie.js Modified: trunk/sie.js =================================================================== --- trunk/sie.js 2011-02-12 14:43:15 UTC (rev 2390) +++ trunk/sie.js 2011-02-12 14:44:57 UTC (rev 2391) @@ -1,4 +1,4 @@ -/*SIE-SVG without Plugin under LGPL2.1 & GPL2.0 & Mozilla Public Lisence +/*SIE-SVG without Plugin under LGPL2.1 & GPL2.0 & Mozilla Public Lisence *公式ページは http://sie.sourceforge.jp/ *利用方法は <script defer="defer" type="text/javascript" src="sie.js"></script> *http://sie.sourceforge.jp/ @@ -238,48 +238,6 @@ prefix : null, ownerDocument : null, parentNode : null, -/*insertBeforeメソッド - *指定したrefノードの前に、新たなnノードを入れる。貼り付け(ペースト)機能。 - */ -/*Node*/ insertBefore : function( /*Node*/ n, ref) { - var tp = this.parentNode; - if (tp) { - while (!tp) { //先祖をたどっていく - if (tp === n) { //先祖要素が追加ノードならばエラー - throw (new DOMException(DOMException.HIERARCHY_REQUEST_ERR)); - } - tp = tp.parentNode; - } - } - if (this.ownerDocument !== n.ownerDocument) { //所属Documentの生成元が違うならば - throw (new DOMException(DOMException.WRONG_DOCUMENT_ERR)); - } - if (n.parentNode === this) { //入力した要素が子要素ならば - this.removeChild(n); - } - if (!ref) { //参照要素がNULLの場合、要素を追加する(appendChildと同じ効果) - this.childNodes[this.childNodes.length] = n; - if (this.lastChild) { - n.previousSibling = this.lastChild; - this.lastChild.nextSibling = n; - } - } else { - if (ref.parentNode !== this) { //参照ノードが子要素でない場合 - throw (new DOMException(DOMException.NOT_FOUND_ERR)); - } - this.childNodes.splice(ref._num,1,n,ref); //Arrayのspliceを利用して、リストにnノードを追加 - var rp = ref.previousSibling; - if (rp) { - rp.nextSibling = n; - } - ref.previousSibling = n; - } - n.nextSibling = ref; - this.firstChild = this.childNodes[0]; - this.lastChild = this.childNodes[this.childNodes.length-1]; - n.parentNode = this; - return n; -}, /*replaceChildメソッド *指定したoldChildノードの代わりに、新たなnewChildノードを入れる。切り替え機能。 */ @@ -288,23 +246,6 @@ var s = this.removeChild(oldChild); return s; }, -/*removeChildメソッド - *eleノードをリストから取り除く。eleノードそのものは削除されない。切り取り(カット)機能。 - */ -/*Node*/ removeChild : function( /*Node*/ ele) { - if (!(ele instanceof Node)) { //Nodeでなければ - throw (new Error()); - } - if (ele.parentNode === this) { - this.childNodes.splice(ele._num,1); //Arrayのspliceを利用して、リストからeleノードを排除 - } else { //親が違う場合 - throw (new DOMException(DOMException.NOT_FOUND_ERR)); - } - if (ele.ownerDocument !== this.ownerDocument) { //所属ドキュメントが違う場合 - throw (new Error()); - } - return ele; -}, /*appendChildメソッド *eleノードをリストの最後尾に追加する */ @@ -484,25 +425,6 @@ var s = this.data.substr(offset, count); return s; }; -/*void*/ CharacterData.prototype.appendData = function( /*string*/ arg) { - this.data += arg; - this.length = this.data.length; -}; -/*void*/ CharacterData.prototype.insertData = function( /*long*/ offset, /*string*/ arg) { - var pre = this.substring(0, offset - 1); //文字列を二つに分けた、前半部分 - var next = this.substring(offset, this.length - offset); //後半部分 - this.data = pre + this.data + next; - this.length = this.data.length; -}; -/*void*/ CharacterData.prototype.deleteData = function( /*long*/ offset, /*long*/ count) { - var pre = this.substring(0, offset - 1); //残すべき前半部分 - var next = this.substring(offset + count, this.length - 1); //後半部分 - if (offset + count > this.length) { //offsetとcountの和が文字全体の長さを超える場合、offsetから最後までのを削除 - next = ""; - } - this.data = pre + next; - this.length = this.data.length; -}; /*void*/ CharacterData.prototype.replaceData = function( /*long*/ offset, /*long*/ count, /*string*/ arg) { if (offset < 0 || count < 0 || offset > this.length) { //値が負か、データの長さよりoffsetが長いとき、サイズエラーを起こす throw (new DOMException(INDEX_SIZE_ERR)); @@ -579,17 +501,6 @@ var s = this.attributes.getNamedItemNS(namespaceURI,localName); return s; }; -/*Attr*/ Element.prototype.setAttributeNodeNS = function( /*Attr*/ newAttr){ - if (newAttr.ownerDocument !== this.ownerDocument) { //所属ドキュメントが違う場合 - throw (new DOMException(DOMException.WRONG_DOCUMENT_ERR)); - } - var s = this.attributes.setNamedItemNS(newAttr); - newAttr.ownerElement = this; - if (newAttr.localName === "id") { //id属性であったならば - this.ownerDocument._id[newAttr.nodeValue] = this; //ドキュメントに登録しておく - } - return s; -}; /*NodeList(Array)*/ Element.prototype.getElementsByTagNameNS = function( /*string*/ namespaceURI, /*string*/ localName) { var s = [], n = 0; var tno = this.childNodes; @@ -1076,6 +987,9 @@ throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR); } if (!this.ownerDocument._isLoaded) { + /*以下では、画像の処理に時間がかかりそうな場合、処理落ちとして、遅延処理 + *を行い、バッファリングにイベント送付処理をためていく作業となる + */ if (evt.type === "SVGLoad") { this.ownerDocument._isLoaded = 1; } @@ -1125,7 +1039,7 @@ evt.eventPhase = type; var tce = td._capter; //tceは登録しておいたリスナーのリスト for (var j=0,tcli=tce.length;j<tcli;++j){ - if (tce[j]) { + if (tce[j] && (evt.type === tce[j]._type)) { tce[j].handleEvent(evt); } } @@ -1174,7 +1088,6 @@ *イベントの雛形となる。プロパティもすべて含めて、必須 */ function Event() { - /*DOMTimeStamp*/ this.timeStamp = +(new Date()); return this; }; // PhaseType @@ -1182,6 +1095,7 @@ /*unsigned short*/ Event.AT_TARGET = 2; /*unsigned short*/ Event.BUBBLING_PHASE = 3; Event.prototype = { + /*DOMTimeStamp*/ timeStamp : 0, /*DOMString*/ type : null, /*EventTarget*/ target : null, /*EventTarget*/ currentTarget : null, @@ -1208,6 +1122,10 @@ function DocumentEvent() { return this; }*/ +/*_date_プロパティは、createEventメソッドで使われるために、 + *あらかじめ、Dateオブジェクトを作成しておいて、それを入れるプロパティ + */ +Document.prototype._date_ = new Date(); /*Event*/ Document.prototype.createEvent = function( /*string*/ eventType) { var evt; if (eventType === "MutationEvents") { @@ -1224,6 +1142,7 @@ evt = new Event(); } evt.type = eventType; + evt.timeStamp = this._date_.getTime(); return evt; }; @@ -1402,7 +1321,6 @@ } var descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得 if (descend) { - evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null); for (var i=0,dli=descend.length;i<dli;++i) { var di = descend[i]; di.dispatchEvent(evt); @@ -2796,11 +2714,11 @@ }; function SVGStringList() { - /*readonly unsigned long*/ this.numberOfItems = 0; this._list = []; //リストの本体 return this; }; SVGStringList.prototype = { + /*readonly unsigned long*/ numberOfItems : 0, /*void*/ clear : function(){ this._list = []; this.numberOfItems = 0; @@ -2874,7 +2792,6 @@ }; function SVGNumberList() { - /*readonly unsigned long*/ this.numberOfItems = 0; this._list = []; //リストの本体 return this; }; @@ -2969,7 +2886,6 @@ return this; }; function SVGLengthList() { - /*readonly unsigned long*/ this.numberOfItems = 0; this._list = []; //リストの本体 return this; }; @@ -4105,6 +4021,7 @@ } else { /*全要素の読み込みが終了した場合*/ if (s.implementation._buffer_) { + screen.updateInterval = 0; /*以下はバッファリングにためておいた要素とイベントを、後から実行する*/ NAIBU._buff = setInterval(function(){ if (DOMImplementation._buffer_.length === 0) { @@ -4117,13 +4034,16 @@ if (!DOMImplementation._buffer_[1]) { clearInterval(NAIBU._buff); DOMImplementation._buffer_ = null; + NAIBU.Time.start(); return; } } }, 1); + s = null; + } else { + s = null; + NAIBU.Time.start(); } - s = null; - NAIBU.Time.start(); delete NAIBU.doc; } } @@ -4170,7 +4090,6 @@ }; function SVGPointList() { - /*readonly unsigned long*/ this.numberOfItems = 0; this._list = []; return this; }; @@ -4311,9 +4230,7 @@ }; function SVGTransform() { - /*readonly unsigned short*/ this.type = SVGTransform.SVG_TRANSFORM_UNKNOWN; /*readonly SVGMatrix*/ this.matrix = new SVGMatrix(); - /*readonly float*/ this.angle = 0; return this; }; // Transform Types @@ -4325,39 +4242,42 @@ /*unsigned short*/ SVGTransform.SVG_TRANSFORM_SKEWX = 5; /*unsigned short*/ SVGTransform.SVG_TRANSFORM_SKEWY = 6; SVGTransform.prototype = { + /*ダミーの単位行列。各メソッドで使う*/ + _matrix : (new SVGMatrix()), + /*readonly unsigned short*/ type : SVGTransform.SVG_TRANSFORM_UNKNOWN, + /*readonly float*/ angle : 0, /*void*/ setMatrix : function(/*SVGMatrix*/ matrix ) { this.type = SVGTransform.SVG_TRANSFORM_MATRIX; - this.matrix = this.matrix.multiply(matrix); + this.matrix = this._matrix.multiply(matrix); }, /*void*/ setTranslate : function(/*float*/ tx, /*float*/ ty ) { this.type = SVGTransform.SVG_TRANSFORM_TRANSLATE; - this.matrix = this.matrix.translate(tx, ty); + this.matrix = this._matrix.translate(tx, ty); }, /*void*/ setScale : function(/*float*/ sx, /*float*/ sy ) { this.type = SVGTransform.SVG_TRANSFORM_SCALE; - this.matrix = this.matrix.scaleNonUniform(sx, sy); + this.matrix = this._matrix.scaleNonUniform(sx, sy); }, /*void*/ setRotate : function(/*float*/ angle, /*float*/ cx, /*float*/ cy ) { this.angle = angle; this.type = SVGTransform.SVG_TRANSFORM_ROTATE; - this.matrix = this.matrix.rotate(angle); + this.matrix = this._matrix.rotate(angle); this.matrix.e = (1-this.matrix.a)*cx - this.matrix.c*cy; this.matrix.f = -this.matrix.b*cx + (1-this.matrix.d)*cy; }, /*void*/ setSkewX : function(/*float*/ angle ) { this.angle = angle; this.type = SVGTransform.SVG_TRANSFORM_SKEWX; - this.matrix = this.matrix.skewX(angle); + this.matrix = this._matrix.skewX(angle); }, /*void*/ setSkewY : function(/*float*/ angle ) { this.angle = angle; this.type = SVGTransform.SVG_TRANSFORM_SKEWY; - this.matrix = this.matrix.skewY(angle); + this.matrix = this._matrix.skewY(angle); } }; function SVGTransformList() { - /*readonly unsigned long*/ this.numberOfItems = 0; this._list = []; return this; }; @@ -4373,10 +4293,11 @@ if(this.numberOfItems === 0) { return null; } else { - var s = this.getItem(0); + var s = this.getItem(0), m = s.matrix; for (var i=1,nli=this.numberOfItems;i<nli;++i) { - s.setMatrix(this.getItem(i).matrix) + m = m.multiply(this.getItem(i).matrix); } + s.setMatrix(m); this.initialize(s); return s; } @@ -4615,7 +4536,6 @@ return this; }; function SVGPathSegList() { - /*readonly unsigned long*/ this.numberOfItems = 0; this._list = []; //リストの本体 return this; }; @@ -4780,7 +4700,7 @@ * *SVG1.1 「8.3.9 The grammar for path data」の項目にある最後の文章を参照 */ - var tnl = tar.normalizedPathSegList, tlist = tar.pathSegList, D = [], _parseFloat = parseFloat; + var tnl = tar.normalizedPathSegList, tlist = tar.pathSegList, D = []; if (tnl.numberOfItems > 0) { tnl.clear(); tlist.clear(); @@ -4800,7 +4720,7 @@ for (var i=0, dli=dd.length;i<dli;++i) { D[i] = dd[i].match(sgs); for (var j=1, dili=D[i].length;j<dili;++j) { - D[i][j] = _parseFloat(D[i][j]); //_parseFloatは高速化のためのAlias + D[i][j] = (D[i][j]) | 0; } } sgs = dd = null; @@ -4870,14 +4790,14 @@ /*以下の処理は、pathSegListからnormalizedPathSegListへの *変換をする処理。相対座標を絶対座標に変換して、M、L、Cコマンドに正規化していく */ - var cx = 0, cy = 0; //現在セグメントの終了点の絶対座標を示す (相対座標を絶対座標に変換するときに使用) - var xn = 0, yn = 0; //T,tコマンドで仮想的な座標を算出するのに用いる。第一コントロール点 + var cx = 0, cy = 0; //現在セグメントの終了点の絶対座標を示す (相対座標を絶対座標に変換するときに使用) + var xn = 0, yn = 0; //T,tコマンドで仮想的な座標を算出するのに用いる。第一コントロール点 var startx = 0, starty = 0; //M,mコマンドにおける始点座標(Z,zコマンドで用いる) for (var j=0, tli=tlist.numberOfItems;j<tli;++j) { var ti = tlist.getItem(j), ts = ti.pathSegType, dii = ti.pathSegTypeAsLetter; if (ts === SVGPathSeg.PATHSEG_UNKNOWN) { } else { - var rx = cx, ry = cy; //rx, ryは前のセグメントの終了点 + var rx = cx, ry = cy; //rx, ryは前のセグメントの終了点 if (ts % 2 === 1) { //相対座標ならば cx += ti.x; cy += ti.y; @@ -4935,7 +4855,7 @@ tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*x1) / 3, (ry + 2*y1) / 3, (2*x1 + cx) / 3, (2*y1 + cy) / 3)); x1 = y1 = null; } else if (dii === "A" || dii === "a") { - (function(ti, cx, cy, rx, ry, tar, tnl) { //変数を隠蔽するためのfunction + (function(ti, cx, cy, rx, ry, tar, tnl) { //変数を隠蔽するためのfunction /*以下は、Arctoを複数のCuvetoに変換する処理 *SVG 1.1 「F.6 Elliptical arc implementation notes」の章を参照 *http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes @@ -5688,33 +5608,26 @@ tnext = tpar = null; tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target; - var list = ["m", tar.x1.baseVal.value, tar.y1.baseVal.value, "l", tar.x2.baseVal.value, tar.y2.baseVal.value]; //以下は、配列listそのものをCTMで座標変換していく処理 - var par = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM(); - for (var i=0, lili=list.length;i<lili;) { - if (isNaN(list[i])) { //コマンド文字は読み飛ばす - ++i; - continue; - } - var p = par.createSVGPoint(); - p.x = list[i]; - p.y = list[i+1]; - var pmt = p.matrixTransform(ctm); - list[i] = pmt.x; - ++i; - list[i] = pmt.y; - ++i; - p = pmt = null; - } - var dat = list.join(" "); + var vi = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM(); + var dat = "m "; + var p = vi.createSVGPoint(); + p.x = tar.x1.baseVal.value; + p.y = tar.y1.baseVal.value; + var pmt = p.matrixTransform(ctm); + dat += pmt.x+ " " +pmt.y+ " l "; + p.x = tar.x2.baseVal.value; + p.y = tar.y2.baseVal.value; + pmt = p.matrixTransform(ctm); + dat += pmt.x+ " " +pmt.y; + p = pmt = null; //VMLに結び付けていく - var ele = tar._tar, vi = tar.ownerDocument.documentElement; - var w = vi.width.baseVal.value, h = vi.height.baseVal.value; + var ele = tar._tar, w = vi.width.baseVal.value, h = vi.height.baseVal.value; ele.path = dat; ele.coordsize = w + " " + h; NAIBU._setPaint(tar, ctm); delete tar._cacheMatrix, tar._currentStyle; - evt = ele = tar = dat = list = ctm = w = h = null; + evt = ele = tar = dat = list = ctm = vi = w = h = null; }, false); evt = tar = null; }, false); @@ -6309,7 +6222,7 @@ } else if ((ti.localName === "a") && (ti.namespaceURI === "http://www.w3.org/2000/svg") && ti.firstChild) { ttp = ti._tar; ti = ti.firstChild; - --i; + i-=2; } } } @@ -8242,4 +8155,4 @@ }; NAIBU.addEvent("unload", unsvgtovml); //IEならばtrue -NAIBU.isMSIE = /*@cc_on!@*/false; +NAIBU.isMSIE = /*@cc_on!@*/false; \ No newline at end of file Property changes on: trunk/sie.js ___________________________________________________________________ Modified: svn:mergeinfo - /branches/04x/040/sie.js:812-829 /branches/04x/041/sie.js:891-923 /branches/04x/042/sie.js:927-967 /branches/04x/043/sie.js:969-1013 /branches/04x/044/sie.js:1015-1067 /branches/04x/045/sie.js:1069-1078 /branches/04x/046/sie.js:1080-1129 /branches/04x/047/sie.js:1131-1164 /branches/04x/048/sie.js:1166-1180 /branches/04x/sie.js:830-1181 /branches/05x/050/sie.js:1183-1201 /branches/05x/051/sie.js:1207-1323 /branches/05x/052/sie.js:1325-1352 /branches/05x/053/sie.js:1354-1400 /branches/05x/054/sie.js:1403-1422 /branches/05x/055/sie.js:1424-1454 /branches/05x/056/sie.js:1456-1491 /branches/05x/057/sie.js:1496-1523 /branches/05x/058/sie.js:1526-1590 /branches/05x/sie.js:1183-1594 /branches/06x/060/sie.js:1603-1850 /branches/06x/sie.js:1599-2355 + /branches/04x/040/sie.js:812-829 /branches/04x/041/sie.js:891-923 /branches/04x/042/sie.js:927-967 /branches/04x/043/sie.js:969-1013 /branches/04x/044/sie.js:1015-1067 /branches/04x/045/sie.js:1069-1078 /branches/04x/046/sie.js:1080-1129 /branches/04x/047/sie.js:1131-1164 /branches/04x/048/sie.js:1166-1180 /branches/04x/sie.js:830-1181 /branches/05x/050/sie.js:1183-1201 /branches/05x/051/sie.js:1207-1323 /branches/05x/052/sie.js:1325-1352 /branches/05x/053/sie.js:1354-1400 /branches/05x/054/sie.js:1403-1422 /branches/05x/055/sie.js:1424-1454 /branches/05x/056/sie.js:1456-1491 /branches/05x/057/sie.js:1496-1523 /branches/05x/058/sie.js:1526-1590 /branches/05x/sie.js:1183-1594 /branches/06x/060/sie.js:1603-1850 /branches/06x/sie.js:1599-2355 /branches/07x/sie.js:2357-2390