[Sie-announce] SIEコード [2391] 0. 70統合完了

アーカイブの一覧に戻る

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




Sie-announce メーリングリストの案内
アーカイブの一覧に戻る