[Sie-announce] SIEコード [1789] ufltimateをテスト用に統合

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 4月 11日 (日) 22:14:43 JST


Revision: 1789
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1789
Author:   dhrname
Date:     2010-04-11 22:14:43 +0900 (Sun, 11 Apr 2010)

Log Message:
-----------
ufltimateをテスト用に統合

Modified Paths:
--------------
    trunk/org/w3c/core.js

Modified: trunk/org/w3c/core.js
===================================================================
--- trunk/org/w3c/core.js	2010-04-11 12:16:53 UTC (rev 1788)
+++ trunk/org/w3c/core.js	2010-04-11 13:14:43 UTC (rev 1789)
@@ -76,35 +76,28 @@
   interface NodeList;
   interface NamedNodeMap;
   interface Element;
-
-  exception DOMException {
-    unsigned short   code;
-  };
-  // ExceptionCode
-  const unsigned short      INDEX_SIZE_ERR                 = 1;
-  const unsigned short      DOMSTRING_SIZE_ERR             = 2;
-  const unsigned short      HIERARCHY_REQUEST_ERR          = 3;
-  const unsigned short      WRONG_DOCUMENT_ERR             = 4;
-  const unsigned short      INVALID_CHARACTER_ERR          = 5;
-  const unsigned short      NO_DATA_ALLOWED_ERR            = 6;
-  const unsigned short      NO_MODIFICATION_ALLOWED_ERR    = 7;
-  const unsigned short      NOT_FOUND_ERR                  = 8;
-  const unsigned short      NOT_SUPPORTED_ERR              = 9;
-  const unsigned short      INUSE_ATTRIBUTE_ERR            = 10;
-  // Introduced in DOM Level 2:
-  const unsigned short      INVALID_STATE_ERR              = 11;
-  // Introduced in DOM Level 2:
-  const unsigned short      SYNTAX_ERR                     = 12;
-  // Introduced in DOM Level 2:
-  const unsigned short      INVALID_MODIFICATION_ERR       = 13;
-  // Introduced in DOM Level 2:
-  const unsigned short      NAMESPACE_ERR                  = 14;
-  // Introduced in DOM Level 2:
-  const unsigned short      INVALID_ACCESS_ERR             = 15;
 */
 function DOMException(n){
  Error.apply(this, arguments);
  this.code = n;
+ var s = [
+   "Index Size Error (入力値が大きすぎるか、マイナスの値ではありませんか)",
+   "DOMString Size Error (テキストの指定範囲が文字数を超えていませんか)",
+   "Hierarchy Request Error (先祖ノードを子ノードとして付け加えることができないようです)",
+   "Wrong Document Error (ノードがどこのドキュメントノードに属しているかお確かめください)",
+   "Invalid Character Error (入力された文字列に認識できない記号を使っているか、文字列が空ではないでしょうか)",
+   "No Data Allowed Error",
+   "No Modification Allowed Error",
+   "Not Found Error (お探しになっているノードが見つかりませんでした)",
+   "Not Supported Error (指定されたノード型とは別の型をご用意ください)",
+   "Inuse Attribute Error (その属性ノードはすでに他の要素へ属していないでしょうか)",
+   "Invalid State Error",
+   "Syntax Error",
+   "Invalid Modification Error",
+   "Namespace Error",
+   "Invalid Access Error"
+ ];
+ this.message = s[n];
  return this;
 /*DOMSTRING_SIZE_ERR
 テキストの指定された範囲がDOMStringに合致しない。 2
@@ -158,78 +151,79 @@
 /*DOMImplementation
  *DOMの基本的な機能をつかさどる
  */
-DOMImplementation = {};
-
-/* hasFeature
- *文字列によって、機能をサポートしているかどうかをチェックする。削除不可。
- */
-/*boolean*/ DOMImplementation.hasFeature = function(/*string*/ feature, version) {
-  switch (feature) {
-    case "CORE" :
-    case "XML" :
-    case "Events" :              //DOM level2 Eventを参照
-    case "StyleSheets" :         //DOM level2 StyleSheetを参照
-    case "org.w3c.svg.static" :  //SVG1.1の仕様を参照
-    case "org.w3c.dom.svg.static" :
-      return true;
-    default :
-      if (version === "2.0") {   //DOM level2 Coreにおいて策定されたバージョン情報
-        return true;
-      } else {
-        return false;
+DOMImplementation = {
+    /* hasFeature
+     *文字列によって、機能をサポートしているかどうかをチェックする。削除不可。
+     */
+    /*boolean*/ hasFeature : function(/*string*/ feature, version) {
+      switch (feature) {
+        case "CORE" :
+        case "XML" :
+        case "Events" :              //DOM level2 Eventを参照
+        case "StyleSheets" :         //DOM level2 StyleSheetを参照
+        case "org.w3c.svg.static" :  //SVG1.1の仕様を参照
+        case "org.w3c.dom.svg.static" :
+          return true;
+        default :
+          if (version === "2.0") {   //DOM level2 Coreにおいて策定されたバージョン情報
+            return true;
+          } else {
+            return false;
+          }
       }
-  }
-};
+    },
 
-/* createDocumentType
- *ドキュメントタイプを作るためのもの。削除可。
- */
-/*DocumentType*/ DOMImplementation.createDocumentType = function(/*string*/ qualifiedName, publicId, systemId) {
-  var s = new Node();
-  s.publicId = publicId;
-  s.systemId = systemId;
-  return s;
-};
+    /* createDocumentType
+     *ドキュメントタイプを作るためのもの。削除可。
+     */
+    /*DocumentType*/ createDocumentType : function(/*string*/ qualifiedName, publicId, systemId) {
+      var s = new Node();
+      s.publicId = publicId;
+      s.systemId = systemId;
+      return s;
+    },
+    /* createDocument
+     * ドキュメントオブジェクトを作るためのもの。削除不可。
+     */
+    /*Document*/ createDocument : function( /*string*/ ns, qname, /*DocumentType*/ doctype) {
+      try {
+        var s;
+        if (ns) {
+          s = new (DOMImplementation[ns].Document);
+        } else {
+          s = new Document();
+        }
+        s.implementation = this;
+        s.doctype = doctype;
+        s.documentElement = s.createElementNS(ns,qname); //ルート要素を作る
+        return s;
+      } catch(e){alert(e.message);}
+    },
+    "http://www.w3.org/2000/xmlns": {}
+}
 
-/* createDocument
- * ドキュメントオブジェクトを作るためのもの。削除不可。
- */
-/*Document*/ DOMImplementation.createDocument = function( /*string*/ ns, qname, /*DocumentType*/ doctype) {
-  try {
-  if (ns === "http://www.w3.org/svg/2000") {                       //名前空間がSVGに属しているのであれば、
-    var s = new SVGDocument();                                     //SVGDocumentを作る(要svg.js)
-  } else {
-    var s =  new Document();
-  }
-  s.documentElement = s.rootElement = s.createElementNS(ns,qname); //ルート要素を作る
-  s.implementation = this;
-  s.doctype = doctype;
-  return s;
-  } catch(e){alert(e.message);}
-};
-
 /* Node
  *ノード(節)はすべての雛形となる重要なものである。削除不可。
- *
-    // NodeType
-    const unsigned short      ELEMENT_NODE                   = 1;
-    const unsigned short      ATTRIBUTE_NODE                 = 2;
-    const unsigned short      TEXT_NODE                      = 3;
-    const unsigned short      CDATA_SECTION_NODE             = 4;
-    const unsigned short      ENTITY_REFERENCE_NODE          = 5;
-    const unsigned short      ENTITY_NODE                    = 6;
-    const unsigned short      PROCESSING_INSTRUCTION_NODE    = 7;
-    const unsigned short      COMMENT_NODE                   = 8;
-    const unsigned short      DOCUMENT_NODE                  = 9;
-    const unsigned short      DOCUMENT_TYPE_NODE             = 10;
-    const unsigned short      DOCUMENT_FRAGMENT_NODE         = 11;
-    const unsigned short      NOTATION_NODE                  = 12;
-*/
+ */
+
 function Node(){
   this.childNodes = [];
   this._capter = []; //eventで利用
   return this;
 }
+// NodeType
+/*const unsigned short*/  Node.ELEMENT_NODE                   = 1;
+/*const unsigned short*/  Node.ATTRIBUTE_NODE                 = 2;
+/*const unsigned short*/  Node.TEXT_NODE                      = 3;
+/*const unsigned short*/  Node.CDATA_SECTION_NODE             = 4;
+/*const unsigned short*/  Node.ENTITY_REFERENCE_NODE          = 5;
+/*const unsigned short*/  Node.ENTITY_NODE                    = 6;
+/*const unsigned short*/  Node.PROCESSING_INSTRUCTION_NODE    = 7;
+/*const unsigned short*/  Node.COMMENT_NODE                   = 8;
+/*const unsigned short*/  Node.DOCUMENT_NODE                  = 9;
+/*const unsigned short*/  Node.DOCUMENT_TYPE_NODE             = 10;
+/*const unsigned short*/  Node.DOCUMENT_FRAGMENT_NODE         = 11;
+/*const unsigned short*/  Node.NOTATION_NODE                  = 12;
 Node.prototype = {
   //以下は初期値として設定
   tar : null,
@@ -276,9 +270,6 @@
   this.firstChild = this.childNodes[0];
   this.lastChild = this.childNodes[this.childNodes.length-1];
   n.parentNode = this;
-  if (n.tar && ref.tar){
-    this.tar.insertBefore(n.tar,ref.tar);
-  }
   return n;
 },
 /*replaceChildメソッド
@@ -304,9 +295,6 @@
   if (ele.ownerDocument !== this.ownerDocument) { //所属ドキュメントが違う場合
     throw (new Error());
   }
-  if (this instanceof SVGElement){                //ノードがSVGElementならば、
-    this.tar.removeChild(ele.tar);
-  }
   return ele;
 },
 /*appendChildメソッド
@@ -314,11 +302,6 @@
  */
 /*Node*/ appendChild : function( /*Node*/ ele) {
   this.insertBefore(ele,null);
-  if (this.namespaceURI === "http://www.w3.org/2000/svg") { //SVG関連要素ならば
-    if (ele.tar){
-      this.tar.appendChild(ele.tar);
-    }
-  }
   return ele;
 },
 /*hasChildNodesメソッド
@@ -337,12 +320,12 @@
 /*Node*/ cloneNode : function( /*boolean*/ deep) {
   var s;
   switch (this.nodeType) {
-  case 1:
+  case Node.ELEMENT_NODE:
     s = new Element();
     s.tagName = this.tagName;
     s.attributes._copyNode(this.attributes,false); //NamedNodeMapのコピーを行う
   break;
-  case 9:
+  case Node.DOCUMENT_NODE:
     s = new Document();
   break;
   default:
@@ -354,9 +337,6 @@
   if (deep) {
     s.childNodes._copyNode(this.childNodes,true);
   }
-  if (this instanceof SVGElement && this.tar){
-    this.tar = this.tar.cloneNode(deep);
-  }
   return s;
 },
 /*normalizeメソッド
@@ -367,11 +347,11 @@
   try {
   for (var i=tcn.length-1;i<0;--i) {
     var tcni = tcn[i], tcnip = tcni.nextSibling;
-    if (tcnip) {                                         //次ノードがnullではなく、かつ、
-      if (tcni.nodeType === 3 && tcnip.nodeType === 3) { //現ノードがテキストノード、かつ、次ノードもテキストノードならば
-        tcni.appendData(tcnip.data);                     //次ノードの文字列データを、現ノード文字列の前に付け加える
+    if (tcnip) {
+      if (tcni.nodeType === Node.TEXT_NODE && tcnip.nodeType === Node.TEXT_NODE) {
+        tcni.appendData(tcnip.data);    //次ノードの文字列データを、現ノード文字列の後に付け加える
         tcni.legnth = tcni.data.length;
-        this.removeChild(tcnip);                         //次ノードを排除
+        this.removeChild(tcnip);        //次ノードを排除
       } else {
         tcni.normalize();
       }
@@ -459,7 +439,7 @@
     var tgans = this.getNamedItemNS(arg.namespaceURI, arg.localName);
     if (tgans) {                          //ノードがすでにあるならば、
       var s = this[this._num];
-      this[this._num] = node;
+      this[this._num] = arg;
       return s;
     } else {
       if ( arg.ownerElement !== void 0) { //ノードがもはや別の要素で使われている
@@ -484,7 +464,7 @@
       return s;
     }
   },
-  _copyNode : __nnmp_c //上記のArrayの_copyNodeを参照
+  _copyNode : Array.prototype._copyNode //上記のArrayの_copyNodeを参照
 };
 
 /*CharacterData
@@ -507,7 +487,7 @@
   if (offset + count > this.length) {                    //offsetとcountの和が文字全体の長さを超える場合、offsetから最後までのを取り出す
     count = this.length - offset;
   }
-  var s = this.data.substr(offset, count);               //Stringのsubstrを用いて、count分の文字列を取り出す
+  var s = this.data.substr(offset, count);
   return s;
 };
 /*void*/ CharacterData.prototype.appendData = function( /*string*/ arg) {
@@ -542,7 +522,7 @@
  */
 function Attr() {
   Node.apply(this, arguments);
-  this.nodeType = 2;
+  this.nodeType = Node.ATTRIBUTE_NODE;
   return this;
 };
 Attr.prototype = new Node();                    //ノードのプロトタイプチェーンを作って、継承
@@ -553,7 +533,7 @@
  */
 function Element() {
   Node.apply(this, arguments);
-  this.nodeType = 1;
+  this.nodeType = Node.ELEMENT_NODE;
   this.nodeValue = null;
   this.attributes = new NamedNodeMap();          //属性を収納
   return this;
@@ -588,64 +568,10 @@
   }
 };
 /*void*/ Element.prototype.setAttributeNS = function( /*string*/ namespaceURI, /*string*/ qualifiedName, /*string*/ value) {
-  var localName = "";
-  if (qualifiedName.indexOf(":") !== -1){ //もし、:が文字内に含まれていれば
-    var p = qualifiedName.split(":");     //:を区分に切り分けて、配列pに
-    localName = p[1];
-  } else {
-    localName = qualifiedName;
-  }
-  var n = this.getAttributeNodeNS(namespaceURI, localName);    //属性ノードを取得する
-  if (n) {                                                     //該当する属性ノードがあれば、
-    n.nodeValue = value;
-    n.value = value;
-    /*注意
-     *ここで接頭語(属性ノードのprefix)も、qualifiedNameの接頭語にあわせて書き換えられるべきであるが、軽量化のため、省略する
-     */
-  } else {
-    var atn = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
-    atn.nodeValue = value;
-    atn.value = value;
-    this.setAttributeNodeNS(atn);
-    atn.ownerElement = this;
-    if (qualifiedName === "id" && !namespaceURI) {              //id属性であったならば
-      this.ownerDocument._id[value] = this;                     //ドキュメントに登録しておく
-    }
-    this.ownerDocument.dispatch = this;
-  }
-  localName = null;
-  if(this.namespaceURI === "http://www.w3.org/svg/2000") {
-    try{                                                        //以下でfill,storke要素のリセットが必要
-    if (this instanceof STGroupElement) {                       //g要素ならば
-      this.paint = NAIBU.PaintColor.prototype.cache[this.tar.uniqueID];
-      this.setProperty(localName, value)
-    } else {
-      var tgebtfill = this.tar.getElementsByTagName("fill"), tgebtstroke = this.tar.getElementsByTagName("stroke");
-      if (tgebtfill.length > 0) {
-        this.tar.removeChild(tgebtfill[0]);
-      }
-      if (tgebtstroke.length > 0) {
-        this.tar.removeChild(tgebtstroke[0]);
-      }
-      this.setProperty(localName, value)
-    }
-    if (localName === "transform") {
-      var tar = {getAttribute : (function(n){return value})};
-      this.transformable = NAIBU.transformToCTM(tar, this.partransformable);
-      tar = null;
-      this.set(this.w, this.h);
-    }
-    var tn = this[localName];
-    if (tn !== void 0) {                   //属性が定義されていれば
-      if (typeof tn === "string"){         //文字列の場合
-        this[tn] = value;
-      } else if (tn instanceof STLength) { //長さの場合
-        this[tn].newValueSpecifiedUnits(this[tn].uniType, parseFloat(value));
-      }
-      this.set(this.w, this.h);
-    }
-    }catch(e){}
-  }
+  var atn = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
+  atn.nodeValue = value;
+  atn.value = value;
+  this.setAttributeNodeNS(atn);
 };
 /*void*/ Element.prototype.removeAttributeNS = function( /*string*/ namespaceURI, /*string*/ localName) {
 };
@@ -654,32 +580,37 @@
   return s;
 };
 /*Attr*/ Element.prototype.setAttributeNodeNS = function( /*Attr*/ newAttr){
-  if (newAttr.ownerElement !== void 0) {
-    if (newAttr.ownerElement.ownerDocument !== this.ownerDocument) { //所属ドキュメントが違う場合
-      throw (new DOMException(DOMException.WRONG_DOCUMENT_ERR));
-    }
+  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;
   for (var i=0,tcli = tno.length;i<tcli;i++) {
-    namespaceURI = (namespaceURI === "*") ? tno[i].namespceURI : namespaceURI;
-    localName = (localName === "*") ? tno[i].localName : localName;
-    if(tno[i].namespaceURI == namespaceURI && tno[i].localName == localName) {
-      s[n] = tno[i];
-      n++;
-    } else {
-      var d = tno[i].getElementsByTagNameNS(namespaceURI, localName);
+    var tnoi = tno[i];
+    if (tnoi.nodeType === Node.ELEMENT_NODE) {
+      var ns = (namespaceURI === "*") ? tnoi.namespceURI : namespaceURI;
+      var ln = (localName === "*") ? tnoi.localName : localName;
+      if(tnoi.namespaceURI == ns && tnoi.localName == ln) {
+        s[n] = tnoi;
+        n++;
+      }
+      var d = tnoi.getElementsByTagNameNS(namespaceURI, localName);
       if (d) {
-        s.concat(d);
+        s = s.concat(d);
         n += d.length;
       }
+      ns = ln = d = null;
     }
   }
-  if (n==0) {
+  if (n === 0) {
     return null; //該当する要素なし
   }
   return s;
@@ -687,30 +618,19 @@
 /*boolean*/ Element.prototype.hasAttribute = function( /*string*/ name) {
 };
 /*boolean*/ Element.prototype.hasAttributeNS = function( /*string*/ namespaceURI, /*string*/ localName) {
-  if (this.getNamedItemNS(namespaceURI, localName)) { //ノードの取得に成功した場合
+  if (this.getAttributeNodeNS(namespaceURI, localName)) { //ノードの取得に成功した場合
    return true;
   } else {
    return false;
   }
 };
 
-Element.prototype.setProperty = function(attr,value) {
-  try{
-  attr = attr.replace(/(fill|stroke)-/, "$1");
-    if (this.paint.defaults[attr] !== void 0) {
-      this.paint[attr] = value;
-      this.paint.set(this.w, this.h, this.transformable);
-    }
-  } catch(e){}
-  attr = value = null;
-}
-
 /*Text
  *テキストノード。削除不可。
  */
 function Text() {
   CharacterData.apply(this, arguments);
-  this.nodeType = 3;
+  this.nodeType = Node.TEXT_NODE;
   this.nodeName = "#text";
   return this;
 };
@@ -726,7 +646,7 @@
   }
   var nnode = this.ownerDocument.createTextNode(next);
   if (this.parentNode) {
-    this.parentNode.insertBefore(nnode, this.nextSibling);  //親要素があれば、このノードの次の兄弟ノードとしてnnodeを入れる
+    this.parentNode.insertBefore(nnode, this.nextSibling);
   }
   return nnode;
 };
@@ -735,7 +655,7 @@
  *コメントノード。<!-- --!>で表現される。削除不可。
  */
 function Comment() {
-  this.nodeType = 8;
+  this.nodeType = Node.COMMENT_NODE;
   this.nodeName = "#comment";
   return this;
 };
@@ -746,7 +666,7 @@
  *CDATA領域を示すノード。<![CDATA[ ]]!>で表現される。削除不可。
  */
 function CDATASection() {
-  this.nodeType = 4;
+  this.nodeType = Node.CDATA_SECTION_NODE;
   this.nodeName = "#cdata-section";
   return this;
 };
@@ -765,7 +685,7 @@
   this.systemId = "";                   //上同のシステム識別子
   this.internalSubset = "";             //内部サブセットの内容(文字列)
   this.nodeValue = null;
-  this.nodeType = 10;
+  this.nodeType = Node.DOCUMENT_TYPE_NODE;
   return this;
 };
 DocumentType.prototype = new Node();   //ノードのプロトタイプチェーンを作って、継承
@@ -778,7 +698,7 @@
   this.publicId = null;
   this.systemId = null;
   this.nodeValue = null;
-  this.nodeType = 12;
+  this.nodeType = Node.NOTATION_NODE;
   return this;
 };
 Notation.prototype = new Node();  //ノードのプロトタイプチェーンを作って、継承
@@ -795,7 +715,7 @@
   this.systemId = null;
   this.notationName = null;      //解析対象外実体のための記法名。解析対象実体ではnull
   this.nodeValue = null;
-  this.nodeType = 6;
+  this.nodeType = Node.ENTITY_NODE;
   return this;
 };
 Entity.prototype = new Node();  //ノードのプロトタイプチェーンを作って、継承
@@ -806,7 +726,7 @@
  */
 function EntityReference() {
   this.nodeValue = null;
-  this.nodeType = 5;
+  this.nodeType = Node.ENTITY_REFERENCE_NODE ;
   return this;
 };
 EntityReference.prototype = new Node();  //ノードのプロトタイプチェーンを作って、継承
@@ -816,7 +736,7 @@
  *処理命令ノード。スタイルシート処理命令で使うので、削除不可
  */
 function ProcessingInstruction() {
-  this.nodeType = 7;
+  this.nodeType = Node.PROCESSING_INSTRUCTION_NODE;
   return this;
 };
 ProcessingInstruction.prototype = new Node();  //ノードのプロトタイプチェーンを作って、継承
@@ -828,7 +748,7 @@
 function DocumentFragment() {
   this.nodeName = "#document-fragment";
   this.nodeValue = null;
-  this.nodeType = 11;
+  this.nodeType = Node.DOCUMENT_FRAGMENT_NODE;
   return this;
 };
 DocumentFragment.prototype = new Node();  //ノードのプロトタイプチェーンを作って、継承
@@ -840,10 +760,8 @@
 function Document() {
   this.nodeName = "#document";
   this.nodeValue = null;
-  this.nodeType = 9;
+  this.nodeType = Node.DOCUMENT_NODE;
   this._id = {};  //getElementByIdで使う
-  this._arr = []; //setAttributeNSで使う
-  var tf = this._fireEvent;
   return this;
 };
 Document.prototype = new Node();  //ノードのプロトタイプチェーンを作って、継承
@@ -870,6 +788,7 @@
 /*Text*/               Document.prototype.createTextNode = function( /*string*/ data) {
   var s = new Text();
   s.data = s.nodeValue = data;
+  s.ownerDocument = this;
   return s;
 };
 /*createCommentメソッド
@@ -878,6 +797,7 @@
 /*Comment*/            Document.prototype.createComment = function( /*string*/ data) {
   var s = new Comment();
   s.nodeValue = data;
+  s.ownerDocument = this;
   return s;
 };
 /*createCDATASectionメソッド
@@ -886,6 +806,7 @@
 /*CDATASection*/       Document.prototype.createCDATASection = function( /*string*/ data) {
   var s = new CDATASection();
   s.nodeValue = data;
+  s.ownerDocument = this;
   return s;
 };
 /*createProcessingInstructionメソッド
@@ -895,6 +816,7 @@
   var s = new ProcessingInstruction();
   s.target = s.nodeName = target;
   s.data = s.nodeValue = data;
+  s.ownerDocument = this;
   return s;
 };
 /*createAttribute
@@ -908,6 +830,7 @@
 /*EntityReference*/    Document.prototype.createEntityReference = function( /*string*/ name) {
   var s = new EntityReference();
   s.nodeName = name;
+  s.ownerDocument = this;
   return s;
 };
 /*getElementsByTagNameメソッド
@@ -920,37 +843,72 @@
  */
 /*Node*/               Document.prototype.importNode = function( /*Node*/ importedNode, /*boolean*/ deep) {
   var s;
+  /*以下の処理は引き渡されたimportedNodeがMSXMLによって解析された
+   *データであることを前提にしている
+   */
   switch (importedNode.nodeType) {
-    case 1:
+    case Node.ELEMENT_NODE:
       s = this.createElementNS(importedNode.namespaceURI, importedNode.nodeName);
       var attr = importedNode.attributes, att;
-      for (var i=0,atli=attr.length;i<atli;i++) { //NamedNodeMapを検索する
+      for (var i=0,atli=attr.length;i<atli;++i) { //NamedNodeMapを検索する
         att = this.importNode(attr[i], false);
-        s.attributes.setNamedItemNS(att);
+        s.setAttributeNodeNS(att);
       }
       if (deep) {
-        var ch = importedNode.childNodes, n;
-        for (var i=0,chli=ch.length;i<chli;i++) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する
-          n = this.importNode(ch[i],true);
+        var fi = importedNode.firstChild, n;
+        while (fi) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する
+          n = this.importNode(fi, true);
           s.appendChild(n);
+          fi = fi.nextSibling;
         }
       }
+      i = attr = att = atli = n = ch = chli = null;
     break;
-    case 2: //attribute_node
+    case Node.ATTRIBUTE_NODE:
       s = this.createAttributeNS(importedNode.namespaceURI, importedNode.nodeName);
       s.nodeValue = importedNode.nodeValue;
     break;
-    case 3: //text_node
-    case 8: //comment_node
-      s = importedNode.cloneNode(false);
-      s.ownerDocument = this;
+    case Node.TEXT_NODE:
+      s = this.createTextNode(importedNode.data);
+    case Node.COMMENT_NODE:
+      s = this.createComment(importedNode.data);
     break;
-    case 11: //document_fragment_node
+    case Node.DOCUMENT_FRAGMENT_NODE:
+      s = this.createDocumentFragment();
+      if (deep) {
+        var ch = importedNode.childNodes, n;
+        for (var i=0,chli=ch.length;i<chli;i++) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する
+          n = this.importNode(ch[i], true);
+          s.appendChild(n);
+        }
+      }
+      i = n = ch = chli = null;
     break;
+    case Node.CDATA_SECTION_NODE:
+      s = this.createCDATASection();
+    break;
+    case Node.ENTITY_REFERENCE_NODE:
+      s = this.createEntityReference(importedNode.nodeName);
+    break;
+    case Node.ENTITY_NODE:
+      s = new Entity();
+      s.publicId = importedNode.publicId;
+      s.systemId = importedNode.systemId;
+      s.notationName = importedNode.notationName;
+    break;
+    case Node.PROCESSING_INSTRUCTION_NODE:
+      s = this.createProcessingInstruction(importedNode.nodeName, importedNode.nodeValue)
+    break;
+    case Node.NOTATION_NODE:
+      s = new Notation();
+      s.publicId = importedNode.publicId;
+      s.systemId = importedNode.systemId;
+      break;
     default:
       throw (new DOMException(DOMException.NOT_SUPPORTED_ERR));
     break;
   }
+  importedNode = deep = null;
   return s;
 };
 /*createElementNSメソッド
@@ -958,101 +916,37 @@
  *例:var s = DOC.createElementNS("http://www.w3.org/2000/svg", "svg:svg");
  */
 /*Element*/            Document.prototype.createElementNS = function( /*string*/ namespaceURI, /*string*/ qualifiedName) {
-  var ele, s;
+  var ele, prefix = null, localName = null;
   if (!qualifiedName) {
     throw (new DOMException(DOMException.INVALID_CHARACTER_ERR));
   }
-  if (namespaceURI === "http://www.w3.org/2000/svg") {
-        switch (qualifiedName) {
-          case "g":
-            s = document.createElement("v:group"); q = false;
-          break;
-          case "linearGradient":
-            s = document.createElement("v:fill"); q = false;
-          break;
-          case "radialGradient":
-            s = document.createElement("v:fill"); q = false;
-          break;
-          case "stop":
-            s = document.createElement("stop"); q = false;
-          break;
-          case "a":
-            s = document.createElement("a");
-          break;
-          case "text":
-            s = document.createElement("div");
-          break;
-          case "tspan":
-            s = document.createElement("span");
-          break;
-          case "image":
-            s = document.createElement("v:image");
-          break;
-          case "path":
-          case "rect":
-          case "circle":
-          case "ellipse":
-          case "polyline":
-          case "polygon":
-          case "line":
-            s = document.createElement("v:shape");
-          break;
-          default:
-            s = null;
-          break;
-        }
-        switch (qualifiedName) {
-          case "path":
-            ele = this.path[this.path.length] = new STPath(s);
-          break;
-          case "rect":
-            ele = this.rect[this.rect.length] = new STRectElement(s);
-          break;
-          case "circle":
-            ele = this.circle[this.circle.length] = new STCircle(s);
-          break;
-          case "ellipse":
-            ele = this.ellipse[this.ellipse.length] = new STEllipse(s);
-          break;
-          case "polyline":
-            ele = this.polyline[this.polyline.length] = new STPolyline(s);
-          break;
-          case "polygon":
-            ele = this.polygon[this.polygon.length] = new STPolygon(s);
-          break;
-          case "line":
-            ele = this.line[this.line.length] = new STLine(s);
-          break;
-          case "a":
-            this.a[this.a.length] = new STAElement(s);
-          break;
-          case "text":
-            ele = this.text[this.text.length] = new STText(s);
-          break;
-          case "image":
-            ele = this.image[this.image.length] = new STImage(s);
-          break;
-          default:
-            ele = new SVGElement(); ele.tar = s;
-          break;
+  if (qualifiedName.indexOf(":") !== -1){
+    var p = qualifiedName.split(":");
+    prefix = p[0];
+    localName = p[1];
+  } else {
+    localName = qualifiedName;
+  }
+  var isSpecified = false;
+  if (namespaceURI) {
+    var ti = this.implementation;
+    if (!!ti[namespaceURI]) {
+      if (!!ti[namespaceURI][localName]) { //もし、名前空間とローカル名によって、オブジェクトがあった場合
+        isSpecified = true;
+      }
     }
-  } else if (namespaceURI === "http://www.w3.org/1999/xhtml") {
-    ele = new Element();
-    ele.tar = document.createElement(qualifiedName);
+  }
+  if (isSpecified) {
+    ele = new (ti[namespaceURI][localName]);
   } else {
     ele = new Element();
   }
   ele.namespaceURI = namespaceURI;
   ele.nodeName = ele.tagName = qualifiedName;
-  if (qualifiedName.indexOf(":") !== -1){
-   var p = qualifiedName.split(":");
-    ele.prefix = p[0];
-    ele.localName = p[1];
-  } else {
-    ele.prefix = null;
-    ele.localName = qualifiedName;
-  }
+  ele.localName = localName;
+  ele.prefix = prefix;
   ele.ownerDocument = this;
+  namespaceURI = qualifiedName = prefix = localName = isSpecified = null;
   return ele;
 };
 /*createAttributeNSメソッド
@@ -1071,6 +965,7 @@
     attr.prefix = null;
     attr.localName = qualifiedName;
   }
+  attr.ownerDocument = this;
   return attr;
 };
 /*getElementsByTagNameNSメソッド
@@ -1084,7 +979,7 @@
  *id属性の値で要素ノードを指定
  */
 /*Element*/            Document.prototype.getElementById = function( /*string*/ elementId) {
-  var s = (typeof(this._id[elementId]) == "undefined") ? null : this._id[elementId];
+  var s = !!this._id[elementId] ? this._id[elementId] : null;
   return s;
 };
 




Sie-announce メーリングリストの案内
Back to archive index