OSDN Git Service

モジュールを結合
authordhrname <sie-developers@lists.sourceforge.jp>
Sun, 5 Oct 2014 14:07:30 +0000 (23:07 +0900)
committerdhrname <sie-developers@lists.sourceforge.jp>
Sun, 5 Oct 2014 14:07:30 +0000 (23:07 +0900)
org/sie-uncompressed.js

index eff06ff..9f84cea 100755 (executable)
@@ -1,8 +1,8 @@
-/*!SIE-SVG without Plugin under LGPL2.1 & GPL2.0 & Mozilla Public License\r
+/*SIE-SVG without Plugin under LGPL2.1 & GPL2.0 & Mozilla Public License\r
  *http://sie.sourceforge.jp/\r
  *Usage: <script defer="defer" type="text/javascript" src="sie.js"></script>\r
  */\r
-/*! ***** BEGIN LICENSE BLOCK *****\r
+/* ***** BEGIN LICENSE BLOCK *****\r
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1\r
  *\r
  * The contents of this file are subject to the Mozilla Public License Version\r
@@ -41,7 +41,7 @@
  * the terms of any one of the MPL, the GPL or the LGPL.\r
  *\r
  * ***** END LICENSE BLOCK ***** */\r
-/*!\r
+/*\r
  * Copyright (c) 2000 World Wide Web Consortium,\r
  * (Massachusetts Institute of Technology, Institut National de\r
  * Recherche en Informatique et en Automatique, Keio University). All\r
  * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\r
  * PURPOSE.\r
  * See W3C License http://www.w3.org/Consortium/Legal/ for more details.\r
- */\r
+ */\r
 /*!MIT License\r
 See Also MIT-LICENSE.txt\r
 Copyright (c) 2013 dhrname*/\r
 \r
-base = function (name) {\r
-    if (!arguments[0]) {\r
-      throw new Error("No arguments error");\r
-    } else if (this[name]) {\r
-      /*登録されている場合は、登録されたオブジェクトを返す*/\r
-      return this[name];\r
-    } else {\r
-      return (this[name] = base.obj.up(name));\r
-    }\r
-};\r
-\r
-/*base.Fはbase関数で使うコンストラクタ関数*/\r
-base.F = function() {};\r
 \r
 (function(){\r
-  /*mixメソッドで使うNGハッシュを作成*/\r
-  var hash = {},\r
-      proto = Object.prototype;\r
-  for (var i in proto) {\r
-    hash[i] = true;\r
-  }\r
-  hash.constructor = false; //constructorはNGハッシュに追加しない\r
-  base.__ng_ = hash;\r
-})();\r
 \r
-/*base.objはbase関数やupメソッドで呼び出されるオブジェクトの始祖となるオブジェクト*/\r
-base.obj = {\r
-  /*upメソッド\r
-   * 自身をプロトタイプとして、新たにオブジェクトを生成する\r
-   */\r
-  up: function(name) {\r
-    if (!arguments[0]) {\r
-      throw new Error("No arguments error");\r
-    } else {\r
-      var F = base.F,\r
-          s;\r
-      F.prototype = this;\r
-      s = new F();\r
-      this[name] = s;\r
-      /*自身が値であるようなプロパティを設定する*/\r
-      s[name] = s;\r
-      F = void 0;\r
-      return s;\r
-    }\r
-  },\r
-\r
-  /*mixメソッド\r
-   * 別のオブジェクトと合成ができるメソッド\r
-   */\r
-  mix: function(obj) {\r
-    if (!arguments[0]) {\r
-      throw new Error("No arguments error");\r
-    }\r
-    if (typeof obj !== "function") {\r
-      var alias = base.__ng_;\r
-      for (var i in obj) {\r
-        if (!alias[i]) {\r
-          /*hasOwnPropertyメソッドを使わないのは、プロトタイプチェーンをたどるようにするため\r
-           *なお、Object.prototypeのプロパティなどは外した方がエラーがおきにくい\r
-           */\r
-          this[i] = obj[i];\r
+/*本体オブジェクト。base関数の裏に隠蔽されている*/\r
+var _base = {\r
+    \r
+    /*_base.Fはbase関数で使うコンストラクタ関数*/\r
+    F: function() {},\r
+    \r
+    /*_base.objはbase関数やupメソッドで呼び出されるオブジェクトの始祖となるオブジェクト*/\r
+    obj: {\r
+      /*upメソッド\r
+       * 自身をプロトタイプとして、新たにオブジェクトを生成する\r
+       */\r
+      up: function(name) {\r
+        if (!arguments[0]) {\r
+          throw new Error("No arguments error");\r
+        }\r
+        var F = _base.F,\r
+             s;\r
+        F.prototype = this;\r
+        s = new F();\r
+        this[name] = s;\r
+        /*自身が値であるようなプロパティを設定する*/\r
+        s[name] = s;\r
+        F = void 0;\r
+        return s;\r
+      },\r
+    \r
+      /*mixメソッド\r
+       * 別のオブジェクトと合成ができるメソッド\r
+       */\r
+      mix: function(obj) {\r
+        if (!arguments[0]) {\r
+          throw new Error("No arguments error");\r
+        }\r
+        if (typeof obj !== "function") {\r
+          var alias = _base.__ng_;\r
+          for (var i in obj) {\r
+            if (!alias[i]) {\r
+              /*hasOwnPropertyメソッドを使わないのは、プロトタイプチェーンをたどるようにするため\r
+               *なお、Object.prototypeのプロパティなどは外した方がエラーがおきにくい\r
+               */\r
+              this[i] = obj[i];\r
+            }\r
+          }\r
+          i = alias = void 0;\r
+        } else {\r
+          obj.call(this, this);\r
+        }\r
+        return this;\r
+      },\r
+    \r
+      /*onメソッド\r
+       * メソッドの合成ができるメソッド。\r
+       * 指定した名前nameのメソッドが呼び出された場合、便乗して指定関数funcをメソッドとして実行することができる\r
+       */\r
+      on: function(name, func) {\r
+        if (!arguments[0]) {\r
+          throw new Error("No arguments error");\r
+        } else if (/^(?:up|on|mix)$/.test(name)) {\r
+          throw new Error("Invalid method name error");\r
+        } else if (typeof arguments[1] !== "function") {\r
+          throw new Error("Not support arguments type");\r
+        }\r
+        var tev = this._eventList__,\r
+            tn = this[name];\r
+        if (!this._eventList__) {\r
+          tev = this._eventList__ = [];\r
+        } else if (!this.hasOwnProperty("_eventList__")) { //祖先がすでにonメソッドを呼び出していれば\r
+          var s = [];\r
+          s._parent = tev;\r
+          tev = this._eventList__ = s;\r
+          s = void 0;\r
+        }\r
+        if (!this[name] || !tn.isOn) { //まだ、onメソッドが呼び出されていなければ\r
+          /*nameで指定されたメソッドの初期化*/\r
+          if (typeof tn === "function") {\r
+            /*nameで指定されたメソッドがすでにある場合は、配列tevの親をたどれないようにしておく*/\r
+            tev.push({\r
+                name: name,\r
+                func: tn\r
+              });\r
+            tev._parent = null;\r
+          }\r
+          this[name] = function() {\r
+            var te = this._eventList__,\r
+                 _name = name,    //スコープチェーンのエイリアス\r
+                 ts = null,\r
+                 s = null,\r
+                 isCalled = false;//返り値の制御で使う\r
+            te._child = null;\r
+            while (te._parent) { //親をさかのぼっていく\r
+              te._parent._child = te;\r
+              te = te._parent;\r
+            }\r
+            while (te) {            //子をたどっていく\r
+              /*最初の返り値の結果はsとして記録して、後で返す*/\r
+              for (var i=0, tli=te.length;i<tli;++i) {\r
+                if(te[i].name === _name) {\r
+                  ts = te[i].func.apply(this, arguments);\r
+                  if (!isCalled) {\r
+                    s = ts;\r
+                    isCalled = true;\r
+                  }\r
+                }\r
+              }\r
+              te = te._child;\r
+            }\r
+            te = ts = _name = isCalled = void 0;\r
+            return s;\r
+          };\r
+          this[name].isOn = true;\r
         }\r
+        tev.push({\r
+                name: name,\r
+                func: func\r
+              });\r
+        tev = tn = func= void 0;\r
+        return this;\r
       }\r
-      i = alias = void 0;\r
-    } else {\r
-      obj.call(this, this);\r
     }\r
-    return this;\r
-  },\r
+};\r
 \r
-  /*onメソッド\r
-   * メソッドの合成ができるメソッド。\r
-   * 指定した名前nameのメソッドが呼び出された場合、便乗して指定関数funcをメソッドとして実行することができる\r
-   */\r
-  on: function(name, func) {\r
+/*base関数で型のチェック用に使う*/\r
+_base.FF = function(){};\r
+_base.FF.prototype = _base.obj;\r
+\r
+base = function (name) {\r
     if (!arguments[0]) {\r
       throw new Error("No arguments error");\r
-    } else if (typeof arguments[1] !== "function") {\r
-      throw new Error("Not support arguments type");\r
-    }\r
-    var tev = this._eventList__,\r
-        tn = this[name];\r
-    if (!this._eventList__) {\r
-      tev = this._eventList__ = [];\r
-    } else if (!this.hasOwnProperty("_eventList__")) { //祖先がすでにonメソッドを呼び出していれば\r
-      var s = [];\r
-      s._parent = tev;\r
-      tev = this._eventList__ = s;\r
-      s = void 0;\r
-    }\r
-    if (!this[name] || !tn.isOn) { //まだ、onメソッドが呼び出されていなければ\r
-      /*nameで指定されたメソッドの初期化*/\r
-      if (typeof tn === "function") {\r
-        /*nameで指定されたメソッドがすでにある場合は、配列tevの親をたどれないようにしておく*/\r
-        tev.push({\r
-            name: name,\r
-            func: tn\r
-          });\r
-        tev._parent = null;\r
-      }\r
-      this[name] = function() {\r
-        var te = this._eventList__,\r
-             _name = name,    //スコープチェーンのエイリアス\r
-             ts = s = null,\r
-             isCalled = false;//返り値の制御で使う\r
-        te._child = null;\r
-        while (te._parent) { //親をさかのぼっていく\r
-          te._parent._child = te;\r
-          te = te._parent;\r
-        }\r
-        while (te) {            //子をたどっていく\r
-          /*最初の返り値の結果はsとして記録して、後で返す*/\r
-          for (var i=0, tli=te.length;i<tli;++i) {\r
-            if(te[i].name === _name) {\r
-              ts = te[i].func.apply(this, arguments);\r
-              if (!isCalled) {\r
-                s = ts;\r
-                isCalled = true;\r
-              }\r
-            }\r
-          }\r
-          te = te._child;\r
-        }\r
-        te = ts = _name = isCalled = void 0;\r
-        return s;\r
-      };\r
-      this[name].isOn = true;\r
+    } else if (this[name] && (this[name] instanceof _base.FF)) {\r
+      /*キャッシュに登録されている場合は、登録されたオブジェクトを返す*/\r
+      return this[name];\r
+    } else {\r
+      return (this[name] = _base.obj.up(name));\r
     }\r
-    tev.push({\r
-            name: name,\r
-            func: func\r
-          });\r
-    tev = tn = func= void 0;\r
-    return this;\r
-  }\r
 };\r
+\r
+\r
+/*mixメソッドで使うNGハッシュを作成*/\r
+var hash = {},\r
+    proto = Object.prototype;\r
+for (var i in proto) {\r
+  hash[i] = true;\r
+}\r
+hash.constructor = false; //constructorはNGハッシュに追加しない\r
+_base.__ng_ = hash;\r
+hash = proto = void 0;\r
+\r
+})();\r
+\r
 /*Function Object.create\r
  *関数Object.createはオブジェクトを新規に作り出すときに使う。\r
  *SIEでスーパークラスに引数が指定されているときの対策として使う。\r
@@ -306,7 +322,7 @@ t.prototype = new Error();
 /*DOMImplementation\r
  *DOMの基本的な機能をつかさどる\r
  */\r
-DOMImplementation = {\r
+base("DOMImplementation").mix( {\r
     /* hasFeature\r
      *文字列によって、機能をサポートしているかどうかをチェックする。削除不可。\r
      */\r
@@ -360,7 +376,7 @@ DOMImplementation = {
       } catch(e){}\r
     },\r
     "http://www.w3.org/2000/xmlns": {}\r
-};\r
+} );\r
 \r
 /* Node\r
  *ノード(節)はすべての雛形となる重要なものである。削除不可。\r
@@ -1108,7 +1124,7 @@ base("$namedNodeMap").mix( {
 });\r
 \r
 /*#endif // _DOM_IDL_*/\r
-\r
+\r
 /*\r
 \r
 // File: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.idl\r
@@ -1150,7 +1166,7 @@ EventException.prototype = Object._create(DOMException);
 base("$document").mix(function() {\r
 /*void*/  this.addEventListener = function( /*string*/ type, /*EventListener*/ listener, /*boolean*/ useCapture) {\r
   this.removeEventListener(type, listener, useCapture);  //いったん、(あれば)リスナーを離す。\r
-  var s = new EventListener(useCapture, type, listener), //リスナーを作成\r
+  var s = base("EventListener").up("$1").initialize(useCapture, type, listener), //リスナーを作成\r
       t = type.charAt(0),\r
       that;\r
   this._capter.push(s);                 //このノードにリスナーを登録しておく\r
@@ -1259,14 +1275,18 @@ base("$document").mix(function() {
 };\r
 });\r
 \r
-function EventListener(cap, type, listener) {\r
-  this._cap = cap;\r
-  this._type = type;\r
-  this._listener = listener;\r
-};\r
+/*EventListenerオブジェクト\r
+ * Eventとイベントの型を結びつけるオブジェクト\r
+ */\r
 \r
-EventListener.prototype = {\r
-/*void*/ handleEvent : function( /*Event*/ evt) {\r
+base("EventListener").mix( {\r
+       initialize: function (cap, type, listener) {\r
+      this._cap = cap;\r
+      this._type = type;\r
+      this._listener = listener;\r
+      return this;\r
+    },\r
+/*void*/ handleEvent: function( /*Event*/ evt) {\r
     try {\r
       var ph = evt.eventPhase,\r
           cap = this._cap;\r
@@ -1280,19 +1300,17 @@ EventListener.prototype = {
     } catch (e) {\r
     }\r
   }\r
-};\r
+});\r
 \r
-/*Eventクラス\r
+/*$eventオブジェクト\r
  *イベントの雛形となる。プロパティもすべて含めて、必須\r
  */\r
-function Event() {\r
-};\r
 // PhaseType\r
 /*unsigned short Event.CAPTURING_PHASE   = 1;\r
 /*unsigned short Event.AT_TARGET         = 2;\r
 /*unsigned short Event.BUBBLING_PHASE    = 3;*/\r
 \r
-Event.prototype = {\r
+base("$event").mix( {\r
   /*DOMTimeStamp*/     timeStamp : 0,\r
   /*DOMString*/        type : null,\r
   /*EventTarget*/      target : null,\r
@@ -1318,44 +1336,46 @@ Event.prototype = {
     this.cancelable = cancelableArg;\r
     eventTypeArg = canBubbleArg = cancelableArg = void 0;\r
   }\r
-};\r
+} );\r
 /*Documentノードに直接結びつける\r
 function DocumentEvent() {\r
 }*/\r
 /*Event*/ base("$document").createEvent = function( /*string*/ eventType) {\r
-  var tc = this._cevent[eventType],\r
-      evt = tc ? new tc()\r
-          : (eventType === "SVGEvents") ?  new SVGEvent()\r
-          : (eventType === "TimeEvents") ? new TimeEvent()\r
-          :  new Event();\r
+  var evt = ( base("$event")[eventType] ||  base("$event") ).up("$1");\r
+  evt.initialize && evt.initialize();\r
   evt.type = eventType;\r
   evt.timeStamp = +(new Date());\r
-  tc = eventType = void 0;\r
+  eventType = void 0;\r
   return evt;\r
 };\r
 \r
-function UIEvent() {\r
-/*views::AbstractView*/  this.view;\r
-/*long*/                 this.detail = 0;\r
-};\r
+/*UIEventオブジェクト\r
+ * UIEventsとsがついているのは、createEventで識別するための名前であるため\r
+ */\r
 \r
-UIEvent.prototype = Object._create(Event);\r
-/*void*/ UIEvent.prototype.initUIEvent = function( /*string*/ typeArg, /*boolean*/ canBubbleArg, /*boolean*/ cancelableArg, /*views::AbstractView*/ viewArg, /*long*/ detailArg) {\r
-  this.initEvent(typeArg, canBubbleArg, cancelableArg);\r
-  this.detail = detailArg;\r
-  this.view = viewArg;\r
-};\r
-function MouseEvent(evt) {\r
-  UIEvent.apply(this, arguments);\r
-/*long*/             this.screenX;\r
-/*long*/             this.screenY;\r
-/*long*/             this.clientX = this.clientY = 0;\r
-/*boolean*/          this.ctrlKey = this.shiftKey = this.altKey = this.metaKey = false;\r
-/*unsigned short*/   this.button;\r
-/*EventTarget*/      this.relatedTarget;\r
-};\r
-MouseEvent.prototype = Object._create(UIEvent);\r
-/*void*/ MouseEvent.prototype.initMouseEvent = function( /*string*/ typeArg, /*boolean*/ canBubbleArg, /*boolean*/ cancelableArg, /*views::AbstractView*/ viewArg, /*long*/ detailArg, /*long*/ screenXArg, /*long*/ screenYArg, /*long*/ clientXArg, /*long*/ clientYArg, /*boolean*/ ctrlKeyArg, /*boolean*/ altKeyArg, /*boolean*/ shiftKeyArg, /*boolean*/ metaKeyArg, /*unsigned short*/ buttonArg, /*EventTarget*/ relatedTargetArg) {\r
+base("$event").up("UIEvents").mix( {\r
+  /*views::AbstractView  this.view */\r
+  /*long*/  detail: 0,\r
+  initUIEvent: function( /*string*/ typeArg, /*boolean*/ canBubbleArg, /*boolean*/ cancelableArg, /*views::AbstractView*/ viewArg, /*long*/ detailArg) {\r
+    this.initEvent(typeArg, canBubbleArg, cancelableArg);\r
+    this.detail = detailArg;\r
+    this.view = viewArg;\r
+  }\r
+\r
+/*MouseEventsオブジェクト*/\r
+\r
+} ).up("MouseEvents").mix( {\r
+  /*long*/             screenX: 0,\r
+  /*long*/             screenY: 0,\r
+  /*long*/             clientX: 0,\r
+  /*long*/             clientY: 0,\r
+  /*boolean*/         ctrlKey: false,\r
+                           shiftKey: false,\r
+                           altKey: false,\r
+                           metaKey: false,\r
+  /*unsigned short   this.button;\r
+  /*EventTarget      this.relatedTarget*/\r
+/*void*/ initMouseEvent: function( /*string*/ typeArg, /*boolean*/ canBubbleArg, /*boolean*/ cancelableArg, /*views::AbstractView*/ viewArg, /*long*/ detailArg, /*long*/ screenXArg, /*long*/ screenYArg, /*long*/ clientXArg, /*long*/ clientYArg, /*boolean*/ ctrlKeyArg, /*boolean*/ altKeyArg, /*boolean*/ shiftKeyArg, /*boolean*/ metaKeyArg, /*unsigned short*/ buttonArg, /*EventTarget*/ relatedTargetArg) {\r
   this.initUIEvent(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg);\r
   this.screenX = screenXArg;\r
   this.screenY = screenYArg;\r
@@ -1367,13 +1387,16 @@ MouseEvent.prototype = Object._create(UIEvent);
   this.metaKey  = metaKeyArg;\r
   this.button = buttonArg;\r
   this.relatedTarget = relatedTargetArg;\r
-};\r
+}\r
+} ).mix( function() {\r
+       /*createEventメソッドのため*/\r
+  this.$event.MouseEvents = this;\r
+} );\r
 \r
-function MutationEvent(){\r
-};\r
-MutationEvent.prototype = Object._create(Event);\r
-(function() {\r
-/*void*/  this.initMutationEvent = function(/*string*/ typeArg, /*boolean*/ canBubbleArg,\r
+\r
+\r
+base("$event").up("MutationEvents").mix( {\r
+/*void*/  initMutationEvent: function(/*string*/ typeArg, /*boolean*/ canBubbleArg,\r
     /*boolean*/ cancelableArg, /*Node*/ relatedNodeArg, /*string*/ prevValueArg, /*string*/ newValueArg,\r
     /*string*/ attrNameArg, /*unsigned short*/ attrChangeArg) {\r
     this.initEvent(typeArg, canBubbleArg, cancelableArg);\r
@@ -1383,11 +1406,13 @@ MutationEvent.prototype = Object._create(Event);
     this.attrName = attrNameArg;\r
     this.attrChange = attrChangeArg;\r
     typeArg = canBubbleArg = cancelableArg = relatedNodeArg = prevValueArg = newValueArg = attrNameArg = attrChangeArg = void 0;\r
-  };\r
-  /*Node*/  this.relatedNode = null;\r
-  /*string*/  this.prevValue = this.newValue = this.attrName = null;\r
-  /*unsigned short*/  this.attrChange = 2;\r
-}).apply(MutationEvent.prototype);\r
+  },\r
+  /*Node*/  relatedNode: null,\r
+  /*string*/  prevValue: null,\r
+                  newValue: null,\r
+                  attrName: null,\r
+  /*unsigned short*/  attrChange: 2,\r
+} );\r
     // attrChangeType\r
 /*unsigned short  MutationEvent.MODIFICATION  = 1;\r
 /*unsigned short  MutationEvent.ADDITION      = 2;\r
@@ -1633,16 +1658,9 @@ base("$document").$text.mix(function(_) {
 };\r
 });\r
 \r
-/*_ceventプロパティはcreateEventメソッドで軽量化のために使う。*/\r
-base("$document")._cevent = {\r
-    "MutationEvents" : MutationEvent,\r
-    "MouseEvents" : MouseEvent,\r
-    "UIEvents" : UIEvent\r
-};\r
-\r
 \r
 // _EVENTS_IDL_\r
-\r
+\r
 /*\r
 // File: http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/stylesheets.idl\r
 \r
@@ -1662,15 +1680,22 @@ module stylesheets
 /*StyleSheet\r
  *スタイルシート文書を示す。削除不可。\r
  */\r
-function StyleSheet() {\r
- this.type = "text/css";\r
- this.disabled = false;\r
- /*Node*/ this.ownerNode = null;\r
- /*StyleSheet*/ this.parentStyleSheet = null;\r
- this.href = null;\r
- this.title = "";\r
- /*MediaList*/ this.media = new MediaList();\r
-};\r
+base("$StyleSheet").mix( {\r
+  /*コンストラクタメソッドとして使う*/\r
+  _create: function() {\r
+    return this;\r
+  },\r
+  type:  "text/css",\r
+  disabled:  false,\r
+  /*Node*/ ownerNode:  null,\r
+  /*StyleSheet*/ parentStyleSheet:  null,\r
+  href:  null,\r
+  title:  ""\r
+} )\r
+ .on( "_create", function() {\r
+  /*MediaList*/ this.media = this.$MediaList.up("$1");\r
+} )\r
+ .mix( function(_) {\r
 \r
 /*StyleSheetList\r
  *このインターフェースはArrayで代用する\r
@@ -1680,11 +1705,9 @@ function StyleSheetList() {
   };\r
 */\r
 \r
-function MediaList() {\r
- this.mediaText = "";\r
- this.length = 0;\r
-};\r
-MediaList.prototype = {\r
+_.up("$MediaList").mix( {\r
+  mediaText: "",\r
+  length: 0,\r
 /*string*/ item : function(/*long*/ index) {\r
     return (this[index]);\r
   },\r
@@ -1702,18 +1725,19 @@ MediaList.prototype = {
     this[this.length] = newMedium;\r
     ++this.length;\r
   }\r
-};\r
+} );\r
 \r
-function LinkStyle() {\r
/*StyleSheet*/ this.sheet = new StyleSheet();\r
+_.LinkStyle = function() {\r
 /*StyleSheet*/ this.sheet = _.up("$1");\r
 };\r
 \r
-function DocumentStyle() {\r
- /*StyleSheetList*/ this.styleSheets = [];\r
+_.DocumentStyle = function() {\r
 /*StyleSheetList*/ this.styleSheets = [];\r
 };\r
+} );\r
 /*\r
 #endif // _STYLESHEETS_IDL_\r
-*/\r
+*/\r
 /*\r
 // File: http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/css.idl\r
 \r
@@ -1748,13 +1772,9 @@ function CSSRuleList {
   };\r
 */\r
 /*CSSRule\r
- *CSSのルールを表現する。基底クラスなので削除不可。\r
+ *CSSのルールを表現する。CSSStyleRuleと統合\r
  */\r
-function CSSRule() {\r
-  this.cssText = "";\r
-/*CSSStyleSheet*/ this.parentStyleSheet;\r
-/*CSSRule*/       this.parentRule = null;\r
-};\r
+\r
 /*// RuleType\r
 CSSRule.UNKNOWN_RULE                   = 0;\r
 CSSRule.STYLE_RULE                     = 1;\r
@@ -1764,75 +1784,64 @@ CSSRule.MEDIA_RULE                     = 4;
 CSSRule.FONT_FACE_RULE                 = 5;\r
 CSSRule.PAGE_RULE                      = 6;*/\r
 \r
-function CSSStyleRule() {\r
-  CSSRule.call(this);\r
-  this.type = /*CSSRule.STYLE_RULE*/ 1;\r
-  this.selectorText = "";\r
-/*CSSStyleDeclaration*/ this.style = new CSSStyleDeclaration();\r
-  this.style.parentRule = null;\r
-};\r
-CSSStyleRule.prototype = Object._create(CSSRule);\r
-\r
-function CSSMediaRule() {\r
-  CSSRule.call(this);\r
-  this.type = /*CSSRule.MEDIA_RULE*/ 4;\r
-/*stylesheets::MediaList*/ this.media = new MediaList();\r
-/*CSSRuleList*/ this.cssRules = [];\r
-};\r
-CSSMediaRule.prototype = Object._create(CSSRule);\r
-/*long*/ CSSMediaRule.prototype.insertRule = function( /*string*/ rule, /*long*/ index) {\r
-  this.cssRules.splice(index,rule,1);\r
-  this.media.appendMedium(rule);\r
-  return this;\r
-};\r
-/*void*/ CSSMediaRule.prototype.deleteRule = function( /*long*/ index) {\r
-};\r
-\r
-function CSSFontFaceRule() {\r
-  CSSRule.call(this);\r
-  this.type = /*CSSRule.FONT_FACE_RULE*/ 5;\r
-/*CSSStyleDeclaration*/ this.style;\r
-};\r
-CSSFontFaceRule.prototype = Object._create(CSSRule);\r
-\r
-function CSSPageRule() {\r
-  CSSRule.call(this);\r
-  this.type = /*CSSRule.PAGE_RULE*/ 6;\r
-  this.selectorText = "";\r
-/*CSSStyleDeclaration*/ this.style;\r
-};\r
-CSSPageRule.prototype = Object._create(CSSRule);\r
-\r
-function CSSImportRule() {\r
-  CSSRule.call(this);\r
-  this.type = /*CSSRule.IMPORT_RULE*/ 3;\r
-  this.href = "";\r
-/*stylesheets::MediaList*/ this.media = new MediaList();\r
-/*CSSStyleSheet*/ this.styleSheet = null;\r
-};\r
-CSSImportRule.prototype = Object._create(CSSRule);\r
-\r
-function CSSCharsetRule() {\r
-  CSSRule.call(this);\r
-  this.type = /*CSSRule.CHARSET_RULE*/ 2;\r
-  this.encoding = "";\r
-};\r
-CSSCharsetRule.prototype = Object._create(CSSRule);\r
-\r
-function CSSUnknownRule() {\r
-  CSSRule.call(this);\r
-  this.type = /*CSSRule.UNKNOWN_RULE*/ 0;\r
-};\r
-CSSUnknownRule.prototype = Object._create(CSSRule);\r
+base("$CSSStyleRule").mix( {\r
+  cssText: "",\r
+/*CSSStyleSheet parentStyleSheet;*/\r
+/*CSSRule*/       parentRule: null,\r
+  type: /*CSSRule.STYLE_RULE*/ 1,\r
+  selectorText: "",\r
+/*CSSStyleDeclaration*/ style: (base("$CSSStyleDeclaration")),\r
+} ).mix( function() {\r
+       this.up("$CSSMediaRule").mix( {\r
+         type: /*CSSRule.MEDIA_RULE*/ 4,\r
+         /*stylesheets::MediaList*/ media: (base("$StyleSheet").$MediaList.up("$1")),\r
+         /*CSSRuleList*/ cssRules: [],\r
+       \r
+         /*long*/ insertRule: function( /*string*/ rule, /*long*/ index) {\r
+           this.cssRules.splice(index,rule,1);\r
+           this.media.appendMedium(rule);\r
+           return this;\r
+         },\r
+         /*void*/ deleteRule: function( /*long*/ index) {\r
+         }\r
+       } );\r
+       \r
+       this.up("$CSSFontFaceRule").mix( {\r
+         type: /*CSSRule.FONT_FACE_RULE*/ 5\r
+       /*CSSStyleDeclaration this.style;*/\r
+       } );\r
+       \r
+       this.up("$CSSPageRule").mix( {\r
+         type: /*CSSRule.PAGE_RULE*/ 6,\r
+         selectorText: "",\r
+       /*CSSStyleDeclaration this.style;*/\r
+       } );\r
+       \r
+       this.up("$CSSImportRule").mix( {\r
+         type: /*CSSRule.IMPORT_RULE*/ 3,\r
+         href: "",\r
+       /*stylesheets::MediaList*/ media: base("$StyleSheet").$MediaList.up("$1"),\r
+       /*CSSStyleSheet*/ styleSheet: null\r
+       } );\r
+       \r
+       this.up("$CSSCharsetRule").mix( {\r
+         type: /*CSSRule.CHARSET_RULE*/ 2,\r
+         encoding: ""\r
+       } );\r
+       \r
+       this.up("$CSSUnknownRule").type = /*CSSRule.UNKNOWN_RULE*/ 0;\r
+} );\r
 \r
 /*CSSStyleDeclaration\r
  *CSSの宣言ブロックを表現。削除不可。\r
  */\r
-function CSSStyleDeclaration() {\r
-  this._list = []; //内部のリスト\r
-  this._list._fontSize = this._list._opacity = null;\r
-};\r
-CSSStyleDeclaration.prototype = {\r
+base("$CSSStyleDeclaration").mix( {\r
+  _new$: function() {\r
+       var s = this.up("$1");\r
+    s._list = []; //内部のリスト\r
+    s._list._fontSize = s._list._opacity = null;\r
+    return s;\r
+  },\r
   cssText : "",\r
   /*long*/ length : 0,\r
   /*CSSRule*/ parentRule : null,\r
@@ -1925,7 +1934,7 @@ CSSStyleDeclaration.prototype = {
       /*fill、strokeプロパティは別途、SVGPaintで処理(JavaScriptでは、型キャストを使えないため)\r
        *CSSPrimitiveValueオブジェクトとSVGPaintオブジェクトを最後に置き換える\r
        */\r
-      ti = tg ? tg : new SVGPaint();\r
+      ti = tg ? tg : base("$CSSValue").$SVGColor.$SVGPaint._new$();\r
       paintType =\r
         (this._isRS[value.charAt(0)] || ti._keywords[value]) ?\r
           /*SVGPaint.SVG_PAINTTYPE_RGBCOLOR*/ 1\r
@@ -1944,7 +1953,7 @@ CSSStyleDeclaration.prototype = {
       ti.setPaint(paintType, uri, color, null);\r
       paintType = uri = color = void 0;\r
     } else if (this._isStop[propertyName]) {\r
-      ti = tg ? tg : new SVGColor();\r
+      ti = tg ? tg : base("$CSSValue").$SVGColor._new$();\r
       if (value === "currentColor") {\r
         ti.colorType = /*SVGColor.SVG_COLORTYPE_CURRENTCOLOR*/ 3;\r
       } else {\r
@@ -1952,7 +1961,7 @@ CSSStyleDeclaration.prototype = {
         ti.setRGBColor(value);\r
       }\r
     } else {\r
-      ti = tg ? tg : new CSSPrimitiveValue();\r
+      ti = tg ? tg : base("$CSSValue").$CSSPrimitiveValue.up("$1");\r
     }\r
     ti._priority = priority;\r
     ti.cssText = cssText;\r
@@ -1989,26 +1998,22 @@ CSSStyleDeclaration.prototype = {
     }\r
     return s;\r
   }\r
-};\r
+});\r
 \r
-function CSSValue() {\r
-};\r
+base("$CSSValue").mix( {\r
 /*    // UnitTypes\r
 CSSValue.CSS_INHERIT                    = 0;\r
 CSSValue.CSS_PRIMITIVE_VALUE            = 1;\r
 CSSValue.CSS_VALUE_LIST                 = 2;\r
 CSSValue.CSS_CUSTOM                     = 3;*/\r
-CSSValue.prototype = {\r
   cssText : "",\r
   cssValueType : /*CSSValue.CSS_CUSTOM*/ 3,\r
   _isDefault : 0 //デフォルトであるかどうか(独自のプロパティ)\r
-};\r
-\r
-function CSSPrimitiveValue() {\r
-};\r
+} )\r
+ .up("$CSSPrimitiveValue").mix( {\r
 \r
-(function(t) {\r
-/*t.CSS_UNKNOWN                    = 0;\r
+/* var t = CSSPrimitiveValue;\r
+t.CSS_UNKNOWN                    = 0;\r
 t.CSS_NUMBER                     = 1;\r
 t.CSS_PERCENTAGE                 = 2;\r
 t.CSS_EMS                        = 3;\r
@@ -2034,29 +2039,44 @@ t.CSS_ATTR                       = 22;
 t.CSS_COUNTER                    = 23;\r
 t.CSS_RECT                       = 24;\r
 t.CSS_RGBCOLOR                   = 25;*/\r
-t.prototype = Object._create(CSSValue);\r
-})(CSSPrimitiveValue);\r
 \r
-(function(){\r
-  this._n = [1, 0.01, 1, 1, 1, 35.43307, 3.543307, 90, 1.25, 15, 1, 180 / Math.PI, 90/100, 1, 1000, 1, 1000, 1]; //CSS_PX単位への変換値(なお、CSS_SはCSS_MSに、CSS_RADとCSS_GRADはCSS_DEGに、CSS_KHZはCSS_HZに統一)\r
-  this.cssValueType = /*CSSValue.CSS_PRIMITIVE_VALUE*/ 1;\r
-  this.primitiveType = /*CSSPrimitiveValue.CSS_UNKNOWN*/ 0;\r
-  this._value = null;\r
-  this._percent = 0; //単位に%が使われていた場合、このプロパティの数値を1%として使う\r
-  this._empercent = 0;\r
-  this._em = this._ex = this["_%"] = null; //emが単位の場合、getComputedStyleメソッドなどで使う\r
-  /*void*/ this.setFloatValue = function(/*short*/ unitType, /*float*/ floatValue) {\r
+  _n: [1, \r
+        0.01,\r
+        1,\r
+        1,\r
+        1,\r
+        35.43307,\r
+        3.543307,\r
+        90,\r
+        1.25,\r
+        15,\r
+        1,\r
+        180 / Math.PI, 90/100,\r
+        1,\r
+        1000,\r
+        1,\r
+        1000,\r
+        1], //CSS_PX単位への変換値(なお、CSS_SはCSS_MSに、CSS_RADとCSS_GRADはCSS_DEGに、CSS_KHZはCSS_HZに統一)\r
+  cssValueType: /*CSSValue.CSS_PRIMITIVE_VALUE*/ 1,\r
+  primitiveType: /*CSSPrimitiveValue.CSS_UNKNOWN*/ 0,\r
+  _value: null,\r
+  _percent: 0, //単位に%が使われていた場合、このプロパティの数値を1%として使う\r
+  _empercent: 0,\r
+  _em: null,\r
+  _ex: null,\r
+  "_%": null, //emが単位の場合、getComputedStyleメソッドなどで使う\r
+  /*void*/ setFloatValue: function(/*short*/ unitType, /*float*/ floatValue) {\r
     if ((/*CSSPrimitiveValue.CSS_UNKNOWN*/ 0 >= unitType) && (unitType >= /*CSSPrimitiveValue.CSS_STRING*/ 19)) { //浮動小数点数単位型をサポートしないCSS単位である場合\r
       throw new DOMException(/*DOMException.INVALID_ACCESS_ERR*/ 15);\r
     }\r
     this.primitiveType = unitType;\r
     this._value = floatValue * this._n[unitType-1];  //値はあらかじめ、利用しやすいように変換しておく\r
-  };\r
+  },\r
   /*getFloatValueメソッド\r
    *別の単位に変換可能。\r
    */\r
-  this._regd = /[\d\.]+/;\r
-  /*float*/ this.getFloatValue = function(/*short*/ unitType) {\r
+  _regd: /[\d\.]+/,\r
+  /*float*/ getFloatValue: function(/*short*/ unitType) {\r
     if ((/*CSSPrimitiveValue.CSS_UNKNOWN*/ 0 >= unitType) && (unitType >= /*CSSPrimitiveValue.CSS_STRING*/ 19)) { //浮動小数点数単位型をサポートしないCSS単位である場合\r
       throw new DOMException(/*DOMException.INVALID_ACCESS_ERR*/ 15);\r
     }\r
@@ -2099,38 +2119,38 @@ t.prototype = Object._create(CSSValue);
       tc = n = type = unitType = void 0;\r
       return s;\r
     }\r
-  };\r
-  /*void*/ this.setStringValue = function(/*short*/ stringType, /*string*/ stringValue) {\r
+  },\r
+  /*void*/ setStringValue: function(/*short*/ stringType, /*string*/ stringValue) {\r
     if (/*CSSPrimitiveValue.CSS_DIMENSION*/ 18 >= stringType && stringType >= /*CSSPrimitiveValue.CSS_COUNTER*/ 23) { //文字列型をサポートしないCSS単位である場合\r
       throw new DOMException(/*DOMException.INVALID_ACCESS_ERR*/ 15);\r
     }\r
     this._value = stringValue;\r
-  };\r
-  /*string*/ this.getStringValue = function(/*short*/ stringType) {\r
+  },\r
+  /*string*/ getStringValue: function(/*short*/ stringType) {\r
     if (/*CSSPrimitiveValue.CSS_DIMENSION*/ 18 >= stringType && stringType >= /*CSSPrimitiveValue.CSS_COUNTER*/ 23) { //文字列型をサポートしないCSS単位である場合\r
       throw new DOMException(/*DOMException.INVALID_ACCESS_ERR*/ 15);\r
     }\r
     return (this._value);\r
-  };\r
-  /*Counter*/ this.getCounterValue = function() {\r
+  },\r
+  /*Counter*/ getCounterValue: function() {\r
     if (this.primitiveType !== /*CSSPrimitiveValue.CSS_COUNTER*/ 23) { //Counter型ではないとき\r
       throw new DOMException(/*DOMException.INVALID_ACCESS_ERR*/ 15);\r
     }\r
     return (new Counter());\r
-  };\r
-  /*Rect*/ this.getRectValue = function() {\r
+  },\r
+  /*Rect*/ getRectValue: function() {\r
     if (this.primitiveType !== /*CSSPrimitiveValue.CSS_RECT*/ 24) { //Rect型ではないとき\r
       throw new DOMException(/*DOMException.INVALID_ACCESS_ERR*/ 15);\r
     }\r
     return (new Rect());\r
-  };\r
-  /*RGBColor*/ this.getRGBColorValue = function() {\r
+  },\r
+  /*RGBColor*/ getRGBColorValue: function() {\r
     if (this.primitiveType !== /*CSSPrimitiveValue.CSS_RGBCOLOR*/ 25) { //RGBColor型ではないとき\r
       throw new DOMException(/*DOMException.INVALID_ACCESS_ERR*/ 15);\r
     }\r
     var s = new RGBColor(),\r
         rgbColor = this.cssText,\r
-        n = SVGColor.prototype._keywords[rgbColor];\r
+        n = base("$CSSValue").$SVGColor._keywords[rgbColor];\r
     if (rgbColor.indexOf("%", 5) > 0) {      // %を含むrgb形式の場合\r
       rgbColor = rgbColor.replace(/[\d.]+%/g, function(t) {\r
         return Math.round((2.55 * parseFloat(t)));\r
@@ -2146,35 +2166,34 @@ t.prototype = Object._create(CSSValue);
     s.blue.setFloatValue(/*CSSPrimitiveValue.CSS_NUMBER*/ 1, parseFloat(n[2]));\r
     n = rgbColor = void 0;\r
     return (s);\r
-  };\r
-}).apply(CSSPrimitiveValue.prototype);\r
+  }\r
+ } )\r
 /*CSSValueList\r
  *Arrayで代用する\r
  */\r
-function CSSValueList() {\r
-  this.cssValueType = /*CSSValue.CSS_VALUE_LIST*/ 2;\r
-  this.length = 0;\r
-};\r
-CSSValueList.prototype = Object._create(CSSValue);\r
-/*CSSValue*/ CSSValueList.prototype.item = function( /*long*/ index) {\r
-  return (this[index]);\r
-};\r
+ .up("$CSSValueList").mix( {\r
+  cssValueType: /*CSSValue.CSS_VALUE_LIST*/ 2,\r
+  length: 0,\r
+/*CSSValue*/ item: function( /*long*/ index) {\r
+    return (this[index]);\r
+  }\r
+ } );\r
 \r
 function RGBColor() {\r
-  var cs = CSSPrimitiveValue;\r
-  this.red = new cs();\r
-  this.green = new cs();\r
-  this.blue = new cs();\r
+  var cs = base("$CSSValue").$CSSPrimitiveValue;\r
+  this.red = cs.up("$1");\r
+  this.green = cs.up("$1");\r
+  this.blue = cs.up("$1");\r
   cs = void 0;\r
   this.red.primitiveType = this.green.primitiveType = this.blue.primitiveType = /*CSSPrimitiveValue.CSS_NUMBER*/ 1;\r
 };\r
 \r
 function Rect() {\r
-  var cs = CSSPrimitiveValue;\r
-  this.top = new cs();\r
-  this.right = new cs();\r
-  this.bottom = new cs();\r
-  this.left = new cs();\r
+  var cs = base("$CSSValue").$CSSPrimitiveValue;\r
+  this.top = cs.up("$1");\r
+  this.right = cs.up("$1");\r
+  this.bottom = cs.up("$1");\r
+  this.left = cs.up("$1");\r
   cs = void 0;\r
 };\r
 \r
@@ -2183,9 +2202,9 @@ function Counter() {
 };\r
 \r
 function ElementCSSInlineStyle() {\r
-  var cs = CSSStyleDeclaration;\r
-  this.style = new cs();\r
-  this._attributeStyle = new cs(); //プレゼンテーション属性の値を格納する\r
+  var cs = base("$CSSStyleDeclaration");\r
+  this.style = cs._new$();\r
+  this._attributeStyle = cs._new$(); //プレゼンテーション属性の値を格納する\r
   cs = void 0;\r
 };\r
 \r
@@ -2288,13 +2307,13 @@ var n = "none",
 n = m = a = void 0;\r
 CSS2Properties.visibility._n = 1; //初期値の設定(_setPaintで使う)\r
 \r
-function CSSStyleSheet() {\r
-  StyleSheet.apply(this);\r
-/*CSSRule*/      this.ownerRule = null;\r
+/*$CSSStyleSheetオブジェクト*/\r
+\r
+base("$StyleSheet").up("$CSSStyleSheet").on("_create", function() {\r
 /*CSSRuleList*/  this.cssRules = [];\r
-};\r
-CSSStyleSheet.prototype = Object._create(StyleSheet);\r
-/*long*/  CSSStyleSheet.prototype.insertRule = function( /*string*/ rule, /*long*/ index) {\r
+}).mix( {\r
+/*CSSRule*/ ownerRule: null,\r
+/*long*/     insertRule: function( /*string*/ rule, /*long*/ index) {\r
   var s = new CSSStyleRule(), style = s.style, a, sc = rule.match(/\{[\s\S]+\}/), m;\r
   s.parentStyleSheet = this;\r
   style.cssText = rule;\r
@@ -2313,19 +2332,20 @@ CSSStyleSheet.prototype = Object._create(StyleSheet);
     }\r
   a = sc = style = void 0;\r
   this.cssRules.splice(index,s,1);\r
-};\r
-/*void*/  CSSStyleSheet.prototype.deleteRule = function(/*long*/ index) {\r
+},\r
+/*void*/     deleteRule: function(/*long*/ index) {\r
   this.cssRules.splice(index, 1);\r
-};\r
-\r
+}\r
+} );\r
 \r
 /*getComputedStyle関数\r
  *最近の計算値を取得する。Document.defaultViewはSafariがグローバル(window)にサポートしていないため付ける。\r
  */\r
 /*interface ViewCSS : views::AbstractView {*/\r
 base("$document").defaultView = base("$viewCSS").mix({\r
+  _cssstyle: base("$CSSStyleDeclaration"),\r
 /*CSSStyleDeclaration*/ getComputedStyle: function( /*Element*/ elt, /*string*/ pseudoElt) {\r
-  var s = new CSSStyleDeclaration(),\r
+  var s = this._cssstyle._new$(),\r
       el, es,\r
       eso = 1;\r
   //クロージャを利用して、カスケーディングを実現する\r
@@ -2397,12 +2417,14 @@ base("$document").defaultView = base("$viewCSS").mix({
  *指定した要素の上書きスタイルシートを取得。\r
  */\r
 /*function DocumentCSS : stylesheets::DocumentStyle {*/\r
+base("$document").mix( base("$StyleSheet").DocumentStyle);\r
 /*CSSStyleDeclaration*/ base("$document").getOverrideStyle = function( /*Element*/ elt, /*string*/ pseudoElt) {\r
   var tar = elt;\r
   if (!!tar._runtimeStyle) {\r
     return (tar._runtimeStyle);\r
   } else {\r
-    var s = new CSSStyleDeclaration(), setProp = s.setProperty;\r
+    var s = base("$CSSStyleDeclaration")._new$(),\r
+         setProp = s.setProperty;\r
     tar._runtimeStyle = s;\r
   }\r
   s.setProperty = (function(setProp, s){\r
@@ -2437,10 +2459,10 @@ base("$document").defaultView = base("$viewCSS").mix({
  *文書のスタイルシートを作成\r
  */\r
 /*interface DOMImplementationCSS : DOMImplementation {*/\r
-/*CSSStyleSheet*/ DOMImplementation.createCSSStyleSheet = function( /*string*/ title, /*string*/ media) {\r
-  var s = new CSSStyleSheet();\r
+/*CSSStyleSheet*/ base("DOMImplementation").createCSSStyleSheet = function( /*string*/ title, /*string*/ media) {\r
+  var s = base("$StyleSheet").up("$CSSStyleSheet")._create();\r
   s.title = title;\r
-  var nm = new MediaList();\r
+  var nm = s.$MediaList.up("$1");\r
   nm.mediaText = media;\r
   if (media && (media !== "")) {\r
     var mes = media.split(",");  //文字列をコンマで区切って配列に\r
@@ -2453,7 +2475,7 @@ base("$document").defaultView = base("$viewCSS").mix({
 };\r
 /*\r
 #endif // _CSS_IDL_\r
-*/\r
+*/\r
 // File: smil.idl\r
 /*\r
 #ifndef _SMIL_IDL_\r
@@ -2515,20 +2537,17 @@ ElementTimeControl.prototype = {
   }\r
 };\r
 \r
-function TimeEvent() {\r
-  Event.apply(this);\r
-  /*readonly attribute views::AbstractView*/  this.view;\r
-  /*readonly attribute long*/             this.detail;\r
-};\r
-TimeEvent.counstructor = Event;\r
-TimeEvent.prototype = Object._create(Event);\r
-/*void*/  TimeEvent.prototype.initTimeEvent = function(/*DOMString*/ typeArg,\r
+base("$event").up("TimeEvents").mix( {\r
+  /*readonly attribute views::AbstractView  this.view;*/\r
+  /*readonly attribute long*/   detail: 0,\r
+/*void*/  initTimeEvent: function(/*DOMString*/ typeArg,\r
                                      /*views::AbstractView*/ viewArg,\r
                                      /*long*/ detailArg) {\r
-  this.type = typeArg;\r
-  this.view = viewArg;\r
-  this.detail = detailArg;\r
-};\r
+    this.type = typeArg;\r
+    this.view = viewArg;\r
+    this.detail = detailArg;\r
+  }\r
+} );\r
 //#endif // _SMIL_IDL_\r
 \r
 \r
@@ -2610,7 +2629,6 @@ NAIBU.eval = function(code) {
 /*$svgelement\r
  *すべてのSVG関連要素の雛形となるオブジェクト\r
  */\r
- function SVGElement(){};\r
 base("$document").$element.up("$svgelement").mix( {\r
   initialize: function () {\r
     SVGStylable.call(this);             //ElementCSSInlineStyleのインタフェースを継承\r
@@ -2838,7 +2856,7 @@ base("$document").$element.up("$svgelement").mix( {
 \r
   /*interface SVGLocatable*/\r
   /*SVGRect*/     getBBox: function(){\r
-    var s = new SVGRect(),\r
+    var s = base("$SVGRect").up("$1"),\r
         data = this._tar.path.value,\r
         vi = this.ownerDocument.documentElement.viewport,\r
         el = vi.width,\r
@@ -2914,39 +2932,39 @@ base("$document").$element.up("$svgelement").mix( {
   }\r
 });\r
 \r
-function SVGAnimatedBoolean() {\r
-  /*boolean*/  this.animVal = this.baseVal = true;\r
-};\r
+base("$SVGAnimatedBoolean").mix( {\r
+  /*boolean*/  animVal: true,\r
+                    baseVal: true\r
+} );\r
 \r
-function SVGAnimatedString() {\r
-  /*String*/ this.animVal = this.baseVal = "";\r
-};\r
+base("$SVGAnimatedString").mix( {\r
+  /*String*/ animVal: "",\r
+                 baseVal: ""\r
+} );\r
 \r
-function SVGStringList() {\r
-};\r
-SVGStringList.prototype = Object._create(Array);\r
-(function(){\r
-  /*readonly unsigned long*/ this.numberOfItems = 0;\r
-  /*void*/   this.clear = function(){\r
+base("$SVGStringList").mix(Array.prototype)\r
+ .mix( {\r
+  /*readonly unsigned long*/ numberOfItems: 0,\r
+  /*void*/   clear: function(){\r
     for (var i=0, tli=this.length;i<tli;++i) {\r
       this.pop();\r
     }\r
     this.numberOfItems = 0;\r
-  };\r
-  /*DOMString*/ this.initialize = function(/*DOMString*/ newItem ) {\r
+  },\r
+  /*DOMString*/ initialize: function(/*DOMString*/ newItem ) {\r
     this.clear();\r
     this[0] = newItem;\r
     this.numberOfItems = 1;\r
     return newItem;\r
-  };\r
-  /*DOMString*/ this.getItem = function(/*unsigned long*/ index ) {\r
+  },\r
+  /*DOMString*/ getItem: function(/*unsigned long*/ index ) {\r
     if (index >= this.numberOfItems || index < 0) {\r
       throw (new DOMException(/*DOMException.INDEX_SIZE_ERR*/ 1));\r
     } else {\r
       return (this[index]);\r
     }\r
-  };\r
-  /*DOMString*/ this.insertItemBefore = function(/*DOMString*/ newItem, /*unsigned long*/ index ){\r
+  },\r
+  /*DOMString*/ insertItemBefore: function(/*DOMString*/ newItem, /*unsigned long*/ index ){\r
     if (index >= this.numberOfItems) {\r
       this.appendItem(newItem);\r
     } else {\r
@@ -2954,17 +2972,17 @@ SVGStringList.prototype = Object._create(Array);
       ++this.numberOfItems;\r
     }\r
     return newItem;\r
-  };\r
-  /*DOMString*/ this.replaceItem = function(/*DOMString*/ newItem, /*unsigned long*/ index ){\r
+  },\r
+  /*DOMString*/ replaceItem: function(/*DOMString*/ newItem, /*unsigned long*/ index ){\r
     if (index >= this.numberOfItems || index < 0) {\r
       throw (new DOMException(/*DOMException.INDEX_SIZE_ERR*/ 1));\r
     } else {\r
       this.splice(index, 1, newItem);\r
     }\r
     return newItem;\r
-  };\r
+  },\r
                   //raises( DOMException, SVGException );\r
-  /*DOMString*/ this.removeItem = function(/*unsigned long*/ index ){\r
+  /*DOMString*/ removeItem: function(/*unsigned long*/ index ){\r
     if (index >= this.numberOfItems || index < 0) {\r
       throw (new DOMException(/*DOMException.INDEX_SIZE_ERR*/ 1));\r
     } else {\r
@@ -2972,44 +2990,48 @@ SVGStringList.prototype = Object._create(Array);
       --this.numberOfItems;\r
     }\r
     return newItem;\r
-  };\r
-  /*DOMString*/ this.appendItem = function(/*DOMString*/ newItem ){\r
+  },\r
+  /*DOMString*/ appendItem: function(/*DOMString*/ newItem ){\r
     this[this.numberOfItems] = newItem;\r
     ++this.numberOfItems;\r
-  };\r
-}).apply(SVGStringList.prototype);\r
-\r
-function SVGAnimatedEnumeration() {\r
-  /*unsigned short*/ this.baseVal = 0;\r
+  }\r
+} )\r
+ .mix( function() { \r
+   this.up("$SVGNumberList");\r
+   this.up("$SVGLengthList");\r
+   this.up("$SVGPointList");\r
+   this.up("$SVGTransformList");\r
+   this.up("$SVGPathSegList");\r
+ } );\r
+\r
+base("$SVGAnimatedEnumeration").mix( {\r
+  /*unsigned short*/ baseVal: 0,\r
                          // raises DOMException on setting\r
-  /*readonly unsigned short*/ this.animVal = 0;\r
-};\r
-function SVGAnimatedInteger() {\r
-  /*long*/ this.baseVal = 0;\r
+  /*readonly unsigned short*/ animVal: 0\r
+} );\r
+base("$SVGAnimatedInteger").mix( {\r
+  /*long*/ baseVal: 0,\r
                          // raises DOMException on setting\r
-  /*readonly long*/ this.animVal = 0;\r
-};\r
-function SVGNumber() {\r
-  /*float*/ this.value = 0;\r
+  /*readonly long*/ animVal: 0\r
+} );\r
+base("$SVGNumber") \r
+  /*float*/ .value = 0;\r
                          // raises DOMException on setting\r
-};\r
-function SVGAnimatedNumber() {\r
-  /*float*/ this.baseVal = this.animVal = 0;\r
-};\r
+base("$SVGAnimatedNumber").mix( {\r
+  /*float*/ baseVal: 0,\r
+  /*float*/ animVal: 0\r
+} );\r
 \r
-function SVGNumberList() {\r
-};\r
-/*SVGUnmberListのメソッドはSVGPathSegListを参照*/\r
+/*SVGUnmberListのメソッドはSVGStringListを参照*/\r
 \r
 function SVGAnimatedNumberList() {\r
-  /*readonly SVGNumberList*/ this.animVal = this.baseVal = new SVGNumberList();\r
+  /*readonly SVGNumberList*/ this.animVal = this.baseVal = base("$SVGStringList").$SVGNumberList.up("$1");\r
 };\r
-/*SVGLengthクラス\r
+/*$SVGLengthオブジェクト\r
  *長さを設定する(単位pxに統一する方便として使う)\r
  *valueInSpecifiedUnitsプロパティはpxに統一する前の数値。valueプロパティはpxに統一した後の数値\r
  */\r
-function SVGLength() {\r
-};\r
+base("$SVGLength").mix( {\r
 /*(function(t) {\r
     // Length Unit Types\r
   /*const unsigned short t.SVG_LENGTHTYPE_UNKNOWN    = 0;\r
@@ -3025,7 +3047,7 @@ function SVGLength() {
   /*const unsigned short t.SVG_LENGTHTYPE_PC         = 10;\r
 })(SVGLength);*/\r
 \r
-SVGLength.prototype = {\r
+\r
   /*readonly attribute unsigned short*/ unitType : /*SVGLength.SVG_LENGTHTYPE_UNKNOWN*/ 0,\r
   /*attribute float*/          value : 0,                  //利用単位における値\r
   /*attribute float*/          valueInSpecifiedUnits : /*SVGLength.SVG_LENGTHTYPE_UNKNOWN*/ 0,  //unitTypeにおける値\r
@@ -3102,22 +3124,20 @@ SVGLength.prototype = {
       this.newValueSpecifiedUnits(this.unitType, this.valueInSpecifiedUnits);\r
     }\r
   }\r
-};\r
+} );\r
 function SVGAnimatedLength() {\r
   /*readonly SVGLength*/ this.animVal;\r
-  this.baseVal = new SVGLength();\r
+  this.baseVal = base("$SVGLength").up("$1");\r
   this.baseVal.unitType = 1;\r
 };\r
-function SVGLengthList() {\r
-};\r
-/*SVGLengthListのメソッドはSVGPathSegListを参照*/\r
+\r
+/*SVGLengthListのメソッドはSVGStringListを参照*/\r
 \r
 function SVGAnimatedLengthList() {\r
-  /*readonly SVGNumberList*/ this.animVal = this.baseVal = new SVGLengthList();\r
+  /*readonly SVGLengthList*/ this.animVal = this.baseVal = base("$SVGStringList").$SVGLengthList.up("$1");;\r
 };\r
-function SVGAngle() {\r
-};\r
-SVGAngle.prototype = {\r
+\r
+base("$SVGAngle").mix( {\r
   /*readonly attribute unsigned short*/ unitType : 0,\r
   /*attribute float*/     value : 0,\r
                          // raises DOMException on setting\r
@@ -3158,7 +3178,7 @@ SVGAngle.prototype = {
     this.newValueSpecifiedUnits(unitType, v);\r
     //raises( DOMException );\r
   }\r
-};\r
+} );\r
 // Angle Unit Types\r
 /*const unsigned short SVGAngle.SVG_ANGLETYPE_UNKNOWN     = 0;\r
 /*const unsigned short SVGAngle.SVG_ANGLETYPE_UNSPECIFIED = 1;\r
@@ -3166,28 +3186,26 @@ SVGAngle.prototype = {
 /*const unsigned short SVGAngle.SVG_ANGLETYPE_RAD         = 3;\r
 /*const unsigned short SVGAngle.SVG_ANGLETYPE_GRAD        = 4;*/\r
 function SVGAnimatedAngle() {\r
-  /*readonly attribute SVGAngle*/ this.baseVal = new SVGAngle();\r
-  /*readonly attribute SVGAngle*/ this.animVal = this.baseVal;\r
-};\r
-function SVGColor() {\r
-  CSSValue.apply(this);\r
-  /*readonly css::RGBColor*/  this.rgbColor  = new RGBColor();\r
+  /*readonly attribute SVGAngle*/ this.baseVal = base("$SVGAngle").up("$1");\r
+  /*readonly attribute SVGAngle*/ this.animVal = base("$SVGAngle").up("$1");\r
 };\r
 \r
+base("$CSSValue").up("$SVGColor").mix( {\r
+  _new$: function() {\r
+    /*readonly css::RGBColor*/  this.up("$1").rgbColor  = new RGBColor();\r
+    return this.$1;\r
+  },\r
   // Color Types\r
 /*unsigned short SVGColor.SVG_COLORTYPE_UNKNOWN           = 0;\r
 /*unsigned short SVGColor.SVG_COLORTYPE_RGBCOLOR          = 1;\r
 /*unsigned short SVGColor.SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2;\r
 /*unsigned short SVGColor.SVG_COLORTYPE_CURRENTCOLOR      = 3;*/\r
-SVGColor.prototype = Object._create(CSSValue);  //ノードのプロトタイプチェーンを作って、継承\r
-\r
-(function(){\r
-  /*readonly unsigned short*/ this.colorType = /*SVGColor.SVG_COLORTYPE_UNKNOWN*/ 0;\r
-  /*readonly SVGICCColor*/    this.iccColor = null;\r
-  this._regD = /\d+/g;\r
-  this._regDP = /[\d.]+%/g;\r
-  this._exceptionsvg = /*SVGException.SVG_INVALID_VALUE_ERR*/ 1;\r
-  /*void*/ this.setRGBColor = function(/*DOMString*/ rgbColor ){\r
+  /*readonly unsigned short*/ colorType: /*SVGColor.SVG_COLORTYPE_UNKNOWN*/ 0,\r
+  /*readonly SVGICCColor*/    iccColor: null,\r
+  _regD: /\d+/g,\r
+  _regDP: /[\d.]+%/g,\r
+  _exceptionsvg: /*SVGException.SVG_INVALID_VALUE_ERR*/ 1,\r
+  /*void*/ setRGBColor: function(/*DOMString*/ rgbColor ){\r
   var s,\r
       _parseInt,\r
       r, g, b;\r
@@ -3226,10 +3244,10 @@ SVGColor.prototype = Object._create(CSSValue);  //ノードのプロトタイプ
   rgbColor.green.setFloatValue(1, s[1]);\r
   rgbColor.blue.setFloatValue(1, s[2]);\r
   rgbColor = s = _parseInt = void 0;\r
-};\r
+},\r
 \r
 //                    raises( SVGException );\r
-/*void*/ this.setColor =function(/*unsigned short*/ colorType, /*DOMString*/ rgbColor, /*DOMString*/ iccColor ){\r
+/*void*/ setColor: function(/*unsigned short*/ colorType, /*DOMString*/ rgbColor, /*DOMString*/ iccColor ){\r
   this.colorType = colorType;\r
   if ((colorType === /*SVGColor.SVG_COLORTYPE_RGBCOLOR*/ 1) && iccColor) {\r
     throw new SVGException(this._exceptionsvg);\r
@@ -3243,10 +3261,10 @@ SVGColor.prototype = Object._create(CSSValue);  //ノードのプロトタイプ
     throw new SVGException(this._exceptionsvg);\r
   }\r
   colorType = rgbColor = void 0;\r
-};\r
+},\r
 //                    raises( SVGException );\r
 //色キーワード\r
-this._keywords = {\r
+_keywords: {\r
     aliceblue:    [240,248,255],\r
     antiquewhite: [250,235,215],\r
     aqua:         [0,255,255],\r
@@ -3394,22 +3412,23 @@ this._keywords = {
     whitesmoke:    [245,245,245],\r
     yellow:        [255,255,0],\r
     yellowgreen:   [154,205,50]\r
-};\r
-}).apply(SVGColor.prototype);\r
+}\r
+} );\r
 \r
-function SVGRect() {\r
-  /*float*/ this.x      = 0;\r
+base("$SVGRect").mix( {\r
+  /*float*/ x: 0,\r
                          // raises DOMException on setting\r
-  /*float*/ this.y      = 0;\r
+  /*float*/ y: 0,\r
                          // raises DOMException on setting\r
-  /*float*/ this.width  = 0;\r
+  /*float*/ width: 0,\r
                          // raises DOMException on setting\r
-  /*float*/ this.height = 0;\r
+  /*float*/ height: 0\r
                          // raises DOMException on setting\r
-};\r
+} );\r
 \r
 function SVGAnimatedRect() {\r
-  /*readonly SVGRect*/ this.animVal = this.baseVal = new SVGRect();\r
+  /*readonly SVGRect*/ this.baseVal = base("$SVGRect").up("$1");\r
+/*readonly SVGRect*/ this.animVal  = base("$SVGRect").up("$1");\r
 };\r
 \r
 /*SVGUnitTypes = {\r
@@ -3419,15 +3438,13 @@ function SVGAnimatedRect() {
   /*unsigned short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX : 2\r
 };*/\r
 function SVGStylable() {\r
-  /*readonly attribute SVGAnimatedString*/ this.className = new SVGAnimatedString();\r
-  /*readonly attribute css::CSSStyleDeclaration*/ this.style = new CSSStyleDeclaration();\r
-  this._attributeStyle = new CSSStyleDeclaration(); //プレゼンテーション属性の値を格納する\r
-  //styleのcssTextプロパティを解析するリスナーを登録しておく\r
+  /*readonly attribute SVGAnimatedString*/ this.className = base("$SVGAnimatedString").up("$1");\r
+  ElementCSSInlineStyle.call(this);\r
 };\r
 /*getPresentationAttributeメソッド\r
  *プレゼンテーション属性の値をCSSValueとして得る。これはCSSのスタイルの設定値を定めるときや、内部の動的処理に役立つ\r
  */\r
-/*css::CSSValue*/ SVGElement.prototype.getPresentationAttribute = function( /*DOMString*/ name ){\r
+/*css::CSSValue*/base("$document").$element.$svgelement.getPresentationAttribute = function( /*DOMString*/ name ){\r
   var s = this._attributeStyle.getPropertyCSSValue(name);\r
   if (s) {\r
     return s;\r
@@ -3440,7 +3457,7 @@ function SVGStylable() {
  *SIEでは、もっぱらXLink言語の処理を行う\r
  */\r
 function SVGURIReference() {\r
-  /*readonly SVGAnimatedString*/ this.href = new SVGAnimatedString();\r
+  /*readonly SVGAnimatedString*/ this.href = base("$SVGAnimatedString").up("$1");\r
   this._instance = null; //埋め込みの場合に、読み込んだDOMツリーを結び付けておくプロパティ\r
   this._text = "";\r
   this.addEventListener("DOMAttrModified", function(evt){\r
@@ -3560,19 +3577,21 @@ function SVGURIReference() {
                      *それら以外は、_instanceプロパティにDOMツリーを格納しておく\r
                      */\r
                     if (tar.localName !== "script" && tar.localName !== "style") {\r
-                      doc = new ActiveXObject("MSXML2.DomDocument");\r
-                      str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->");\r
-                      ndoc = NAIBU.doc;\r
-                      ndoc.async = ndoc.validateOnParse = ndoc.resolveExternals = ndoc.preserveWhiteSpace = false;\r
-                      doc.loadXML(str);\r
-                      ele = doc.documentElement;\r
-                      Sfunc = SVGURIReference;\r
-                      SVGURIReference = function(){};\r
-                      tar._instance = tar.ownerDocument.importNode(ele, true);\r
-                      SVGURIReference = Sfunc;\r
-                      if (id) {\r
-                        tar._instance = tar._instance.ownerDocument.getElementById(id);\r
-                      }\r
+                      try {\r
+                        doc = new ActiveXObject("MSXML2.DomDocument");\r
+                        str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->");\r
+                        ndoc = NAIBU.doc;\r
+                        ndoc.async = ndoc.validateOnParse = ndoc.resolveExternals = ndoc.preserveWhiteSpace = false;\r
+                        doc.loadXML(str);\r
+                        ele = doc.documentElement;\r
+                        Sfunc = SVGURIReference;\r
+                        SVGURIReference = function(){};\r
+                        tar._instance = tar.ownerDocument.importNode(ele, true);\r
+                        SVGURIReference = Sfunc;\r
+                        if (id) {\r
+                          tar._instance = tar._instance.ownerDocument.getElementById(id);\r
+                        }\r
+                      } catch (e) {}\r
                     } else {\r
                       tar._text = xmlhttp.responseText;\r
                     }\r
@@ -3610,20 +3629,19 @@ function SVGURIReference() {
     tar = evt = void 0;\r
   }, false);\r
 };\r
-function SVGCSSRule() {\r
-  CSSRule.apply(this);\r
+base("$CSSStyleRule").up("$SVGCSSRule").mix( {\r
   // Additional CSS RuleType to support ICC color specifications\r
-  /*const unsigned short*/ this.COLOR_PROFILE_RULE = 7;\r
-};\r
-SVGCSSRule.prototype = Object._create(CSSRule);  //ノードのプロトタイプチェーンを作って、継承\r
+  /*const unsigned short*/ COLOR_PROFILE_RULE: 7\r
+} );\r
 \r
 /*SVGDocument\r
  *SVGの文書オブジェクトについては、DOMImplementationのcreateDocumentメソッドを上書きすることで実現\r
  */\r
-DOMImplementation._createDocument = DOMImplementation.createDocument;\r
-DOMImplementation.createDocument = function() {\r
+base("DOMImplementation").mix ( function(_) {\r
+_._createDocument = _.createDocument;\r
+_.createDocument = function() {\r
   return this._createDocument.apply(this, arguments).mix(function() {\r
-    DocumentStyle.call(this);\r
+    base("$StyleSheet").DocumentStyle.call(this);\r
     SVGStylable.call(this);\r
     /*readonly DOMString*/     this.title    = "";\r
     /*readonly DOMString*/     this.referrer = document.referrer;\r
@@ -3660,6 +3678,7 @@ DOMImplementation.createDocument = function() {
     tde = void 0;\r
   });\r
 };\r
+} );\r
 \r
 /*$svg\r
  *svg要素をあらわすオブジェクト\r
@@ -3869,30 +3888,27 @@ base("$document").$element.$svgelement.up("http://www.w3.org/2000/svgsvg").on("i
   this._currentTime = seconds;\r
 },\r
 /*SVGNumber*/     createSVGNumber: function(){\r
-  var s = new SVGNumber();\r
-  s.value = 0;\r
-  return s;\r
+  return base("$SVGNumber").up("$1");\r
 },\r
 /*SVGAngle*/     createSVGAngle: function(){\r
-  var s = new SVGAngle();\r
-  s.value = 0;\r
+  var s = base("$SVGAngle").up("$1");\r
   s.unitType = 1;\r
   return s;\r
 },\r
 /*SVGLength*/     createSVGLength: function(){\r
-  var s = new SVGLength();\r
+  var s = base("$SVGLength").up("$1");\r
   s.unitType = /*SVG_LENGTHTYPE_NUMBER*/ 1;\r
   return s;\r
 },\r
 /*SVGPoint*/      createSVGPoint: function(){\r
-  return new SVGPoint();\r
+  return base("$SVGPoint").up("$1");\r
 },\r
 /*SVGMatrix*/     createSVGMatrix: function(){\r
   //単位行列を作成\r
-  return new SVGMatrix();\r
+  return base("$SVGMatrix").up("$1");\r
 },\r
 /*SVGRect*/       createSVGRect: function(){\r
-  return new SVGRect();\r
+  return base("$SVGRect").up("$1");\r
 },\r
 /*SVGTransform*/  createSVGTransform: function(){\r
   var s = this.createSVGTransformFromMatrix(this.createSVGMatrix());\r
@@ -4005,14 +4021,13 @@ function SVGFitToViewBox() {
 };\r
 function SVGViewSpec(ele) {\r
   SVGFitToViewBox.apply(this, arguments);\r
-  /*readonly SVGTransformList*/ this.transform = new SVGTransformList();\r
+  /*readonly SVGTransformList*/ this.transform = base("$SVGStringList").$SVGTransformList.up("$1");\r
   /*readonly SVGElement*/       this.viewTarget = ele;\r
   /*readonly DOMString*/        this.viewBoxString = this.preserveAspectRatioString = this.transformString = this.viewTargetString = "";\r
 };\r
 SVGViewSpec.prototype = Object._create(SVGFitToViewBox);\r
 \r
 function SVGGElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:group");\r
   _doc = void 0;\r
   /*以下の処理は、この子要素ノードがDOMツリーに追加されて初めて、\r
@@ -4046,31 +4061,22 @@ function SVGGElement(_doc) {
     tnext = sar = spar = snext = void 0;\r
   }, false);\r
 };\r
-SVGGElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGDefsElement() {\r
-  SVGElement.apply(this);\r
   this.style.setProperty("display", "none");\r
 };\r
-SVGDefsElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGDescElement() {\r
-  SVGElement.apply(this);\r
 }\r
-SVGDescElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGTitleElement() {\r
-  SVGElement.apply(this);\r
   this.addEventListener("DOMCharacterDataModified", function(evt){\r
     evt.target.ownerDocument.title = evt.target.firstChild.nodeValue;\r
   }, false);\r
-}\r
-SVGTitleElement.prototype = Object._create(SVGElement);\r
+};\r
 \r
 function SVGSymbolElement(_doc) {\r
-  SVGElement.apply(this, arguments);\r
-}\r
-SVGSymbolElement.prototype = Object._create(SVGElement);\r
+};\r
 \r
 function SVGUseElement() {\r
   SVGGElement.apply(this, arguments);\r
@@ -4080,8 +4086,8 @@ function SVGUseElement() {
   /*readonly SVGAnimatedLength*/   this.width = new slen();\r
   /*readonly SVGAnimatedLength*/   this.height = new slen();\r
   slen = void 0;\r
-  /*readonly SVGElementInstance*/ this.instanceRoot = new SVGElement(); //参照先インスタンスのルート\r
-  /*readonly SVGElementInstance*/ this.animatedInstanceRoot = new SVGElement();//アニメの最中のインスタンス。静止中は通常\r
+  /*readonly SVGElementInstance*/ this.instanceRoot = this.up("$1"); //参照先インスタンスのルート\r
+  /*readonly SVGElementInstance*/ this.animatedInstanceRoot = this.up("$1");//アニメの最中のインスタンス。静止中は通常\r
   this.addEventListener("DOMNodeInserted", function(evt){\r
     if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {\r
       return; //強制終了させる\r
@@ -4131,14 +4137,12 @@ function SVGUseElement() {
   }, false);\r
   SVGURIReference.apply(this);\r
 };\r
-SVGUseElement.prototype = Object._create(SVGElement);\r
 \r
 /*function SVGElementInstance\r
   *Nodeオブジェクトを継承させる\r
   *SVGElementInstanceList*/\r
 \r
 function SVGImageElement(_doc) {\r
-  SVGElement.apply(this, arguments);\r
   this._tar = _doc.createElement("v:image");\r
   //以下は、与えられた属性の値に対応する\r
   var slen = SVGAnimatedLength;\r
@@ -4166,7 +4170,6 @@ function SVGImageElement(_doc) {
   }, false);\r
   SVGURIReference.apply(this);\r
 };\r
-SVGImageElement.prototype = Object._create(SVGElement);\r
 /*_imageo関数は、SVGForeignObjectElementで再利用するので、切り離しておく*/\r
 SVGImageElement.prototype._imageo = function(evt) {\r
   var tar = evt.target,\r
@@ -4200,7 +4203,6 @@ SVGImageElement.prototype._imageo = function(evt) {
 };\r
 \r
 function SVGSwitchElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:group");\r
   _doc = void 0;\r
   this.addEventListener("DOMNodeInserted", function(evt){\r
@@ -4212,7 +4214,6 @@ function SVGSwitchElement(_doc) {
     evt = tar = void 0;\r
   }, false);\r
 };\r
-SVGSwitchElement.prototype = Object._create(SVGElement);\r
 \r
 //bookmarkletから呼び出されたらtrue\r
 var sieb_s;\r
@@ -4276,10 +4277,10 @@ function _ca_() {
         + "v\\:shape{width:100%;height:100%;" +vmlUrl;\r
       docn = st = vmlUrl = void 0;\r
     }\r
-    DOMImplementation._doc_ = _doc; //_doc_プロパティはcreateDocumentメソッドで使う\r
+    base("DOMImplementation")._doc_ = _doc; //_doc_プロパティはcreateDocumentメソッドで使う\r
     var str = this.xmlhttp.responseText,\r
         objei = this._tar,\r
-        s = DOMImplementation.createDocument("http://www.w3.org/2000/svg", "svg"),\r
+        s = base("DOMImplementation").createDocument("http://www.w3.org/2000/svg", "svg"),\r
         tar = s.documentElement,\r
         tview = tar.viewport,\r
         objw, objh, fi, attr, w, h,\r
@@ -4449,7 +4450,7 @@ function _ca_() {
         tis.top = _parseFloat(tis.top) - bt + "px";\r
       }\r
     }\r
-    //ビューポートの位置をスクロールで調整 (なお、_txプロパティは$svgsvgelementのSIEコードを参照)\r
+    //ビューポートの位置をスクロールで調整 (なお、_txプロパティはhttp://www.w3.org/2000/svgsvgオブジェクトのSIEコードを参照)\r
     ifcw && ifcw.scroll(-s.documentElement._tx, -s.documentElement._ty);\r
     s._isLoaded = 1;  //_isLoadedプロパティはevents::dispatchEventメソッドで使う\r
     s.defaultView._cache = s.defaultView._cache_ele = null;\r
@@ -4470,7 +4471,7 @@ function _ca_() {
         NAIBU._buff_num = 0;\r
         NAIBU._buff = setInterval(function(){\r
           var n = NAIBU._buff_num,\r
-              dbuf = DOMImplementation._buffer_,\r
+              dbuf = base("DOMImplementation")._buffer_,\r
               dbufli = dbuf ? dbuf.length : 0, //極端な負荷がかかると、dbufはnullになる可能性あり\r
               ts, evt;\r
           if (dbufli === 0) {\r
@@ -4487,7 +4488,7 @@ function _ca_() {
               if (n >= dbufli) {\r
                 clearInterval(NAIBU._buff);\r
                 svgload();\r
-                DOMImplementation._buffer_ = null;\r
+                base("DOMImplementation")._buffer_ = null;\r
                 NAIBU.Time.start();\r
                 svgload = s = dbuf = n = dbufli = void 0;\r
                 return;\r
@@ -4517,8 +4518,7 @@ NAIBU.emptyFunction = function() {};
  *style要素をあらわすオブジェクト\r
  */\r
 function SVGStyleElement(_doc) {\r
-  SVGElement.apply(this);\r
-  LinkStyle.apply(this);\r
+  base("$StyleSheet").LinkStyle.apply(this);\r
   /*LinkStyleに関しては、以下の仕様を参照のこと。なお、これはSVG DOMでは継承されていないので要注意。\r
    *CSS2 1. Document Object Model Style Sheets\r
    * 1.3. Document Extensions\r
@@ -4547,7 +4547,7 @@ function SVGStyleElement(_doc) {
         style = _doc.createElement("style"),\r
         ri, rsc, scri, rsi;\r
     NAIBU._temp_doc = tod;\r
-    sheet = tod.styleSheets[tod.styleSheets.length] = DOMImplementation.createCSSStyleSheet(tar.title, tar.media);\r
+    sheet = tod.styleSheets[tod.styleSheets.length] = base("DOMImplementation").createCSSStyleSheet(tar.title, tar.media);\r
     sheet.ownerNode = tar;\r
     /*以下は、IEのCSSパーサを使って、スタイルシートのルールを実装していく*/\r
     _doc.documentElement.firstChild.appendChild(style);\r
@@ -4606,27 +4606,26 @@ function SVGStyleElement(_doc) {
     }, false);\r
   }, false);\r
 };\r
-SVGStyleElement.prototype = Object._create(SVGElement);\r
 \r
 /*SVGPoint\r
  *2次元座標の点(x,y)を表すオブジェクト\r
  */\r
-function SVGPoint() {\r
-};\r
-/*float*/SVGPoint.prototype.x = SVGPoint.prototype.y = 0;\r
-SVGPoint.prototype.matrixTransform = function(/*SVGMatrix*/ matrix ) {\r
-  if (!isFinite(matrix.a) || !isFinite(matrix.b) || !isFinite(matrix.c) || !isFinite(matrix.d) || !isFinite(matrix.e) || !isFinite(matrix.f)) {\r
-    throw (new Error("Type Error: 引数の値がNumber型ではありません"));\r
+base("$SVGPoint").mix( {\r
+  /*float*/ x: 0,\r
+  /*float*/ y: 0,\r
+  matrixTransform: function(/*SVGMatrix*/ matrix ) {\r
+    if (!isFinite(matrix.a) || !isFinite(matrix.b) || !isFinite(matrix.c) || !isFinite(matrix.d) || !isFinite(matrix.e) || !isFinite(matrix.f)) {\r
+      throw (new Error("Type Error: 引数の値がNumber型ではありません"));\r
+    }\r
+    var s = base("$SVGPoint").up("$1");\r
+    s.x = matrix.a * this.x + matrix.c * this.y + matrix.e;\r
+    s.y = matrix.b * this.x + matrix.d * this.y + matrix.f;\r
+    return s;\r
   }\r
-  var s = new SVGPoint();\r
-  s.x = matrix.a * this.x + matrix.c * this.y + matrix.e;\r
-  s.y = matrix.b * this.x + matrix.d * this.y + matrix.f;\r
-  return s;\r
-};\r
+} );\r
 \r
-function SVGPointList() {\r
-};\r
-/*SVGPointListのメソッドはSVGPathSegListを参照*/\r
+\r
+/*SVGPointListのメソッドはSVGStringListを参照*/\r
 \r
 /*SVGMatrix\r
  *行列をあらわすオブジェクト。写像に用いる。以下のように表現できる\r
@@ -4634,9 +4633,7 @@ function SVGPointList() {
  *[b d f]\r
  *[0 0 1]\r
  */\r
-function SVGMatrix() {\r
-};\r
-SVGMatrix.prototype = {\r
+base("$SVGMatrix").mix( {\r
   /*float*/ a : 1,\r
   /*float*/ b : 0,\r
   /*float*/ c : 0,\r
@@ -4647,7 +4644,7 @@ SVGMatrix.prototype = {
    *行列の積を求めて返す\r
    */\r
   /*SVGMatrix*/ multiply : function(/*SVGMatrix*/ secondMatrix ) {\r
-    var s = new SVGMatrix(),\r
+    var s = base("$SVGMatrix").up("$1"),\r
         m = secondMatrix,\r
         isf = isFinite,\r
         t = this;\r
@@ -4667,7 +4664,8 @@ SVGMatrix.prototype = {
    *逆行列を返す\r
    */\r
   /*SVGMatrix*/ inverse : function() {\r
-    var s = new SVGMatrix(), n = this._determinant();\r
+    var s = base("$SVGMatrix").up("$1"), \r
+        n = this._determinant();\r
     if (n !== 0) {\r
       s.a = this.d / n;\r
       s.b = -this.b / n;\r
@@ -4681,7 +4679,7 @@ SVGMatrix.prototype = {
     }\r
   },\r
   /*SVGMatrix*/ translate : function(/*float*/ x, /*float*/ y ) {\r
-    var m = new SVGMatrix();\r
+    var m = base("$SVGMatrix").up("$1");\r
     m.e = x;\r
     m.f = y;\r
     var s =  this.multiply(m);\r
@@ -4689,7 +4687,7 @@ SVGMatrix.prototype = {
     return s;\r
   },\r
   /*SVGMatrix*/ scale : function(/*float*/ scaleFactor ) {\r
-    var m = new SVGMatrix();\r
+    var m = base("$SVGMatrix").up("$1");\r
     m.a = scaleFactor;\r
     m.d = scaleFactor;\r
     var s =  this.multiply(m);\r
@@ -4697,7 +4695,7 @@ SVGMatrix.prototype = {
     return s;\r
   },\r
   /*SVGMatrix*/ scaleNonUniform : function(/*float*/ scaleFactorX, /*float*/ scaleFactorY ) {\r
-    var m = new SVGMatrix();\r
+    var m = base("$SVGMatrix").up("$1");\r
     m.a = scaleFactorX;\r
     m.d = scaleFactorY;\r
     var s =  this.multiply(m);\r
@@ -4705,7 +4703,7 @@ SVGMatrix.prototype = {
     return s;\r
   },\r
   /*SVGMatrix*/ rotate : function(/*float*/ angle ) {\r
-    var m = new SVGMatrix(), rad = angle / 180 * Math.PI; //ラジアン変換\r
+    var m = base("$SVGMatrix").up("$1"), rad = angle / 180 * Math.PI; //ラジアン変換\r
     m.a = Math.cos(rad);\r
     m.b = Math.sin(rad);\r
     m.c = -m.b;\r
@@ -4719,7 +4717,7 @@ SVGMatrix.prototype = {
     if ((x === 0) || (y === 0) || !isFinite(x) || !isFinite(y)) {\r
       throw (new SVGException(/*SVGException.SVG_INVALID_VALUE_ERR*/ 1));\r
     }\r
-    var m = new SVGMatrix(), rad = Math.atan2(y, x);\r
+    var m = base("$SVGMatrix").up("$1"), rad = Math.atan2(y, x);\r
     m.a = Math.cos(rad);\r
     m.b = Math.sin(rad);\r
     m.c = -m.b;\r
@@ -4729,28 +4727,28 @@ SVGMatrix.prototype = {
     return s;\r
   },\r
   /*SVGMatrix*/ flipX : function() {\r
-    var m = new SVGMatrix();\r
+    var m = base("$SVGMatrix").up("$1");\r
     m.a = -m.a;\r
     var s =  this.multiply(m);\r
     m = void 0;\r
     return s;\r
   },\r
   /*SVGMatrix*/ flipY : function() {\r
-    var m = new SVGMatrix();\r
+    var m = base("$SVGMatrix").up("$1");\r
     m.d = -m.d;\r
     var s =  this.multiply(m);\r
     m = void 0;\r
     return s;\r
   },\r
   /*SVGMatrix*/ skewX : function(/*float*/ angle ){\r
-    var m = new SVGMatrix(), rad = angle / 180 * Math.PI; //ラジアン変換\r
+    var m = base("$SVGMatrix").up("$1"), rad = angle / 180 * Math.PI; //ラジアン変換\r
     m.c = Math.tan(rad);\r
     var s =  this.multiply(m);\r
     m = void 0;\r
     return s;\r
   },\r
   /*SVGMatrix*/ skewY : function(/*float*/ angle ){\r
-    var m = new SVGMatrix(), rad = angle / 180 * Math.PI;\r
+    var m = base("$SVGMatrix").up("$1"), rad = angle / 180 * Math.PI;\r
     m.b = Math.tan(rad);\r
     var s =  this.multiply(m);\r
     m = void 0;\r
@@ -4760,10 +4758,10 @@ SVGMatrix.prototype = {
   /*float*/ _determinant : function() {\r
     return (this.a * this.d - this.b * this.c);\r
   }\r
-};\r
+} );\r
 \r
 function SVGTransform() {\r
-  /*readonly SVGMatrix*/ this.matrix = new SVGMatrix();\r
+  /*readonly SVGMatrix*/ this.matrix = base("$SVGMatrix").up("$1");\r
 };\r
     // Transform Types\r
   /*unsigned short*/ SVGTransform.SVG_TRANSFORM_UNKNOWN   = 0;\r
@@ -4775,12 +4773,20 @@ function SVGTransform() {
   /*unsigned short*/ SVGTransform.SVG_TRANSFORM_SKEWY     = 6;\r
 SVGTransform.prototype = {\r
   /*ダミーの単位行列。各メソッドで使う*/\r
-  _matrix : (new SVGMatrix()),\r
+  _matrix : base("$SVGMatrix"),\r
   /*readonly unsigned short*/ type : /*SVGTransform.SVG_TRANSFORM_UNKNOWN*/ 0,\r
   /*readonly float*/ angle : 0,\r
   /*void*/ setMatrix : function(/*SVGMatrix*/ matrix ) {\r
     this.type = /*SVGTransform.SVG_TRANSFORM_MATRIX*/ 1;\r
-    this.matrix = this._matrix.multiply(matrix);\r
+    var mat = this._matrix.up("$1");\r
+    mat.a = matrix.a;\r
+    mat.b = matrix.b;\r
+    mat.c = matrix.c;\r
+    mat.d = matrix.d;\r
+    mat.e = matrix.e;\r
+    mat.f = matrix.f;\r
+    this.matrix = mat;\r
+    matrix = mat = void 0;\r
   },\r
   /*void*/ setTranslate : function(/*float*/ tx, /*float*/ ty ) {\r
     this.type = /*SVGTransform.SVG_TRANSFORM_TRANSLATE*/ 2;\r
@@ -4809,16 +4815,15 @@ SVGTransform.prototype = {
   }\r
 };\r
 \r
-function SVGTransformList() {\r
-};\r
-/*SVGTransformListのメソッドはSVGPathSegListを参照*/\r
 \r
-/*SVGTransform*/ SVGTransformList.prototype.createSVGTransformFromMatrix = function(/*SVGMatrix*/ matrix ) {\r
+/*SVGTransformListのメソッドはSVGStringListを参照*/\r
+base("$SVGStringList").$SVGTransformList.mix( {\r
+/*SVGTransform*/ createSVGTransformFromMatrix: function(/*SVGMatrix*/ matrix ) {\r
   var t = new SVGTransform();\r
   t.setMatrix(matrix);\r
   return t;\r
-};\r
-/*SVGTransform*/ SVGTransformList.prototype.consolidate = function() {\r
+},\r
+/*SVGTransform*/ consolidate: function() {\r
   if(this.numberOfItems === 0) {\r
     return null;\r
   } else {\r
@@ -4844,15 +4849,17 @@ function SVGTransformList() {
     m = fm = void 0;\r
     return s;\r
   }\r
-};\r
+}\r
+} );\r
 \r
 function SVGAnimatedTransformList() {\r
-  /*readonly SVGTransformList*/ this.animVal = this.baseVal = new SVGTransformList();\r
-};\r
-function SVGPreserveAspectRatio() {\r
-  /*unsigned short*/ this.align = /*SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID*/ 6;\r
-  /*unsigned short*/ this.meetOrSlice = /*SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET*/ 1;\r
+  /*readonly SVGTransformList*/ this.animVal = this.baseVal = base("$SVGStringList").$SVGTransformList.up("$1");\r
 };\r
+\r
+base("SVGPreserveAspectRatio").mix( {\r
+  /*unsigned short*/ align: /*SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID*/ 6,\r
+  /*unsigned short*/ meetOrSlice: /*SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET*/ 1\r
+} );\r
 /*(function(t) {\r
     // Alignment Types\r
   /*unsigned short t.SVG_PRESERVEASPECTRATIO_UNKNOWN  = 0;\r
@@ -4870,10 +4877,10 @@ function SVGPreserveAspectRatio() {
   /*unsigned short t.SVG_MEETORSLICE_UNKNOWN   = 0;\r
   /*unsigned short t.SVG_MEETORSLICE_MEET  = 1;\r
   /*unsigned short t.SVG_MEETORSLICE_SLICE = 2;\r
-})(SVGPreserveAspectRatio);*/\r
+})(base("SVGPreserveAspectRatio"));*/\r
 \r
 function SVGAnimatedPreserveAspectRatio() {\r
-  /*readonly SVGPreserveAspectRatio*/ this.animVal = this.baseVal = new SVGPreserveAspectRatio();\r
+  /*readonly SVGPreserveAspectRatio*/ this.animVal = this.baseVal = base("SVGPreserveAspectRatio").up("$1");\r
 };\r
 \r
 function SVGPathSeg() {\r
@@ -5060,12 +5067,6 @@ function SVGPathSegCurvetoQuadraticSmoothRel() {
   this.pathSegType = /*SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL*/ 19;\r
   this.pathSegTypeAsLetter = "t";\r
 };\r
-function SVGPathSegList() {\r
-};\r
-for (var prop in SVGStringList.prototype) { //prototypeのコピーで継承を行う\r
-  SVGNumberList.prototype[prop] = SVGLengthList.prototype[prop] = SVGPointList.prototype[prop] = SVGTransformList.prototype[prop] = SVGPathSegList.prototype[prop] = SVGStringList.prototype[prop];\r
-};\r
-prop = void 0;\r
 \r
 /*documentは引数の変数として登録しておく*/\r
 (function(_doc, _math) {\r
@@ -5204,16 +5205,15 @@ NAIBU._setPaint = function(tar, matrix) {
 };\r
 \r
 function SVGPathElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:shape");\r
   //interface SVGAnimatedPathData\r
-  var sp = SVGPathSegList;\r
-  /*readonly SVGPathSegList*/ this.pathSegList = new sp();\r
+  var sp = base("$SVGStringList").$SVGPathSegList;\r
+  /*readonly SVGPathSegList*/ this.pathSegList = sp.up("$1");\r
   this.animatedPathSegList = this.pathSegList;\r
-  /*readonly SVGPathSegList*/ this.normalizedPathSegList = new sp();\r
+  /*readonly SVGPathSegList*/ this.normalizedPathSegList = sp.up("$1");\r
   sp = _doc = void 0;\r
   this.animatedNormalizedPathSegList = this.normalizedPathSegList;\r
-  /*readonly SVGAnimatedNumber*/ this.pathLength = new SVGAnimatedNumber();\r
+  /*readonly SVGAnimatedNumber*/ this.pathLength = base("$SVGAnimatedNumber").up("$1");\r
   //以下は、d属性に変更があった場合の処理\r
   this.addEventListener("DOMAttrModified", this._attrModi, false);\r
   /*以下の処理は、このpath要素ノードがDOMツリーに追加されて初めて、\r
@@ -5221,7 +5221,6 @@ function SVGPathElement(_doc) {
    */\r
   this.addEventListener("DOMNodeInserted", this._nodeInsert, false);\r
 };\r
-SVGPathElement.prototype = Object._create(SVGElement);\r
 (function(_sproto) {\r
 _sproto._attrModi = function(evt){\r
   var tar = evt.target;\r
@@ -5891,7 +5890,6 @@ _sproto._com = {
 })(document, Math);\r
 \r
 function SVGRectElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:shape");\r
   var slen = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/ this.x = new slen();\r
@@ -6004,10 +6002,8 @@ function SVGRectElement(_doc) {
     evt = tar = void 0;\r
   }, false);\r
 };\r
-SVGRectElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGCircleElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:shape");\r
   var sl = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/ this.cx = new sl();\r
@@ -6090,10 +6086,8 @@ function SVGCircleElement(_doc) {
     evt = tar = void 0;\r
   }, false);\r
 };\r
-SVGCircleElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGEllipseElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:shape");\r
   var sl = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/ this.cx = new sl();\r
@@ -6179,10 +6173,8 @@ function SVGEllipseElement(_doc) {
     evt = tar = void 0;\r
   }, false);\r
 };\r
-SVGEllipseElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGLineElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:shape");\r
   var sl = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/ this.x1 = new sl();\r
@@ -6251,18 +6243,16 @@ function SVGLineElement(_doc) {
     evt = tar = void 0;\r
   }, false);\r
 };\r
-SVGLineElement.prototype = Object._create(SVGElement);\r
 \r
 /*_GenericSVGPolyElementインターフェース\r
  * このインターフェースはpolygonとpolyline要素共通のインターフェースとして使用。\r
  * ファイルサイズを軽量にすることができる\r
  */\r
 NAIBU._GenericSVGPolyElement = function (_doc, xclose) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("v:shape");\r
   _doc = void 0;\r
   //interface SVGAnimatedPoints\r
-  /*readonly SVGPointList*/   this.animatedPoints = this.points = new SVGPointList();\r
+  /*readonly SVGPointList*/   this.animatedPoints = this.points = base("$SVGStringList").$SVGPointList.up("$1");;\r
   this.addEventListener("DOMAttrModified", function(evt){\r
     var tar = evt.target;\r
     if (evt.attrName === "points") {\r
@@ -6322,18 +6312,15 @@ function SVGPolylineElement(_doc) {
   NAIBU._GenericSVGPolyElement.call(this, _doc, "e");\r
   _doc = void 0;\r
 };\r
-SVGPolylineElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGPolygonElement(_doc) {\r
   NAIBU._GenericSVGPolyElement.call(this, _doc, "x e");\r
   _doc = void 0;\r
 };\r
-SVGPolygonElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGTextContentElement(_doc) {\r
-  SVGElement.apply(this);\r
   /*readonly SVGAnimatedLength*/      this.textLength = new SVGAnimatedLength();\r
-  /*readonly SVGAnimatedEnumeration*/ this.lengthAdjust = new SVGAnimatedEnumeration(/*SVGTextContentElement.LENGTHADJUST_UNKNOWN*/ 0);\r
+  /*readonly SVGAnimatedEnumeration*/ this.lengthAdjust = base("$SVGAnimatedEnumeration").up("$1");\r
   this.addEventListener("DOMNodeInserted", function(evt){\r
     var tar = evt.target,\r
         cur = evt.currentTarget,\r
@@ -6397,8 +6384,7 @@ function SVGTextContentElement(_doc) {
 };\r
 \r
 (function(t) {\r
-  var tproto;\r
-  tproto = t.prototype = Object._create(SVGElement);\r
+  var tproto = t.prototype;\r
     // lengthAdjust Types\r
   /*unsigned short t.LENGTHADJUST_UNKNOWN           = 0;\r
   /*unsigned short t.LENGTHADJUST_SPACING           = 1;\r
@@ -6970,13 +6956,7 @@ SVGTextPathElement.prototype = Object._create(SVGTextContentElement);
 })(SVGTextPathElement);\r
 \r
 \r
-function SVGPaint() {\r
-  SVGColor.apply(this);\r
-};\r
-\r
-(function(t){\r
-  var tproto;\r
-  tproto = t.prototype = Object._create(SVGColor);\r
+base("$CSSValue").$SVGColor.up("$SVGPaint").mix( {\r
     // Paint Types\r
   /*unsigned short t.SVG_PAINTTYPE_UNKNOWN               = 0;\r
   /*unsigned short t.SVG_PAINTTYPE_RGBCOLOR              = 1;\r
@@ -6988,12 +6968,13 @@ function SVGPaint() {
   /*unsigned short t.SVG_PAINTTYPE_URI_RGBCOLOR          = 105;\r
   /*unsigned short t.SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;\r
   /*unsigned short t.SVG_PAINTTYPE_URI                   = 107;*/\r
-  /*readonly unsigned short*/ tproto.paintType = /*t.SVG_PAINTTYPE_UNKNOWN*/ 0;\r
-  /*readonly DOMString*/      tproto.uri = null;\r
-/*void*/ tproto.setUri = function(/*DOMString*/ uri ) {\r
+\r
+  /*readonly unsigned short*/ paintType: /*t.SVG_PAINTTYPE_UNKNOWN*/ 0,\r
+  /*readonly DOMString*/      uri: null,\r
+/*void*/ setUri: function(/*DOMString*/ uri ) {\r
   this.setPaint(/*SVGPaint.SVG_PAINTTYPE_URI_NONE*/ 103, uri, null, null);\r
-};\r
-/*void*/ tproto.setPaint = function(/*unsigned short*/ paintType, /*DOMString*/ uri, /*DOMString*/ rgbColor, /*DOMString*/ iccColor ) {\r
+},\r
+/*void*/ setPaint: function(/*unsigned short*/ paintType, /*DOMString*/ uri, /*DOMString*/ rgbColor, /*DOMString*/ iccColor ) {\r
   if ((paintType < 101 && uri) || (paintType > 102 && !uri)) {\r
     throw new SVGException(/*SVGException.SVG_INVALID_VALUE_ERR*/ 1);\r
   }\r
@@ -7003,17 +6984,17 @@ function SVGPaint() {
     paintType = /*SVGColor.SVG_COLORTYPE_CURRENTCOLOR*/ 3;\r
   }\r
   this.setColor(paintType, rgbColor, iccColor); //SVGColorのsetColorメソッドを用いる\r
-};\r
+}\r
 //                    raises( SVGException );\r
-t = tproto = void 0;\r
-})(SVGPaint);\r
+} ) ;\r
 \r
+/*makerのインタフェースをsvg要素のオブジェクトで補う場合のみ、getScreenCTMメソッドの扱いに注意すること*/\r
 function SVGMarkerElement(_doc) {\r
   _doc = void 0;\r
   var sl = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/      this.refX = new sl();\r
   /*readonly SVGAnimatedLength*/      this.refY = new sl();\r
-  /*readonly SVGAnimatedEnumeration*/ this.markerUnits = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/ this.markerUnits = base("$SVGAnimatedEnumeration").up("$1");\r
   this.markerUnits.baseVal = /*SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH*/ 2;\r
   /*readonly SVGAnimatedLength*/      this.markerWidth = new sl();\r
   /*readonly SVGAnimatedLength*/      this.markerHeight = new sl();\r
@@ -7022,10 +7003,10 @@ function SVGMarkerElement(_doc) {
   this.markerWidth.baseVal.newValueSpecifiedUnits(1, 3);\r
   this.markerHeight.baseVal.newValueSpecifiedUnits(1, 3);\r
   sl = void 0;\r
-  /*readonly SVGAnimatedEnumeration*/ this.orientType = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/ this.orientType = base("$SVGAnimatedEnumeration").up("$1");\r
   this.orientType.baseVal = /*SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE*/ 2;\r
   /*readonly SVGAnimatedAngle*/       this.orientAngle = new SVGAnimatedAngle();\r
-    //SVGFitToViewBoxのインターフェースは$svgsvgelementで代用\r
+    //SVGFitToViewBoxのインターフェースはhttp://www.w3.org/2000/svgsvgオブジェクトで代用\r
   this.addEventListener("DOMAttrModified", function(evt) {\r
     var tar = evt.target,\r
         en = evt.newValue,\r
@@ -7169,7 +7150,6 @@ function SVGMarkerElement(_doc) {
   /*unsigned short t.SVG_MARKER_ORIENT_UNKNOWN      = 0;\r
   /*unsigned short t.SVG_MARKER_ORIENT_AUTO         = 1;\r
   /*unsigned short t.SVG_MARKER_ORIENT_ANGLE        = 2;*/\r
-  t.prototype.getScreenCTM = SVGElement.prototype.getScreenCTM;\r
   /*void*/ t.prototype.setOrientToAuto = function() {\r
   this.orientType.baseVal = /*t.SVG_MARKER_ORIENT_AUTO*/ 1;\r
 };\r
@@ -7180,7 +7160,6 @@ function SVGMarkerElement(_doc) {
 };\r
 })(SVGMarkerElement);\r
 function SVGColorProfileElement() {\r
-  SVGElement.apply(this);\r
   /*DOMString*/      this._local;\r
                          // raises DOMException on setting\r
                        // (NOTE: is prefixed by "_"\r
@@ -7190,22 +7169,18 @@ function SVGColorProfileElement() {
   /*unsigned short*/ this.renderingIntent;\r
   SVGURIReference.apply(this);\r
 };\r
-SVGColorProfileElement.prototype = Object._create(SVGElement);\r
 \r
-function SVGColorProfileRule() {\r
-  SVGCSSRule.apply(this);\r
-  /*DOMString*/      this.src;\r
-  /*DOMString*/      this.name;\r
-  /*unsigned short*/ this.renderingIntent;\r
-};\r
-SVGColorProfileRule.prototype = Object._create(SVGCSSRule);\r
+base("$CSSStyleRule").$SVGCSSRule.up("$SVGColorProfileRule").mix( {\r
+  /*DOMString      this.src;*/\r
+  /*DOMString      this.name;*/\r
+  /*unsigned short this.renderingIntent;*/\r
+} );\r
 \r
 function SVGGradientElement() {\r
-  SVGElement.apply(this);\r
   SVGURIReference.apply(this);\r
-  /*readonly SVGAnimatedEnumeration*/   this.gradientUnits = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/   this.gradientUnits = base("$SVGAnimatedEnumeration").up("$1");\r
   /*readonly SVGAnimatedTransformList*/ this.gradientTransform = new SVGAnimatedTransformList();\r
-  /*readonly SVGAnimatedEnumeration*/   this.spreadMethod = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/   this.spreadMethod = base("$SVGAnimatedEnumeration").up("$1");\r
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {\r
     var grad = evt.target,\r
         ele = evt._tar,\r
@@ -7264,7 +7239,6 @@ function SVGGradientElement() {
     grad = grad2 = ele = stops = length = color = colors = opacity = evt = t = href = stop = sstyle = ci = o1 = o2 = void 0;\r
   }, false);\r
 };\r
-SVGGradientElement.prototype = Object._create(SVGElement);\r
     // Spread Method Types\r
   /*unsigned short SVGGradientElement.SVG_SPREADMETHOD_UNKNOWN = 0;\r
   /*unsigned short SVGGradientElement.SVG_SPREADMETHOD_PAD     = 1;\r
@@ -7416,8 +7390,7 @@ function SVGRadialGradientElement(_doc) {
 SVGRadialGradientElement.prototype = Object._create(SVGGradientElement);\r
 \r
 function SVGStopElement() {\r
-  SVGElement.apply(this);\r
-  /*readonly SVGAnimatedNumber*/ this.offset = new SVGAnimatedNumber();\r
+  /*readonly SVGAnimatedNumber*/ this.offset = base("$SVGAnimatedNumber").up("$1");\r
   this.addEventListener("DOMAttrModified", function(evt) {\r
     if (evt.attrName === "offset") {\r
       var env = evt.newValue;\r
@@ -7430,13 +7403,11 @@ function SVGStopElement() {
     evt = void 0;\r
   }, false);\r
 };\r
-SVGStopElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGPatternElement() {\r
-  SVGElement.apply(this);\r
   var sl = SVGAnimatedLength;\r
-  /*readonly SVGAnimatedEnumeration*/   this.patternUnits = new SVGAnimatedEnumeration();\r
-  /*readonly SVGAnimatedEnumeration*/   this.patternContentUnits = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/   this.patternUnits = base("$SVGAnimatedEnumeration").up("$1");\r
+  /*readonly SVGAnimatedEnumeration*/   this.patternContentUnits = base("$SVGAnimatedEnumeration").up("$1");\r
   /*readonly SVGAnimatedTransformList*/ this.patternTransform = new SVGAnimatedTransformList();\r
   /*readonly SVGAnimatedLength*/        this.x = new sl();\r
   /*readonly SVGAnimatedLength*/        this.y = new sl();\r
@@ -7449,43 +7420,36 @@ function SVGPatternElement() {
   /*readonly SVGAnimatedPreserveAspectRatio*/ this.preserveAspectRatio = new SVGAnimatedPreserveAspectRatio();\r
   /*unsigned short*/             this.zoomAndPan = /*SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE*/ 1;\r
 };\r
-SVGPatternElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGClipPathElement() {\r
-  SVGElement.apply(this);\r
-  /*readonly SVGAnimatedEnumeration*/ this.clipPathUnits = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/ this.clipPathUnits = base("$SVGAnimatedEnumeration").up("$1");\r
 };\r
-SVGClipPathElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGMaskElement() {\r
-  SVGElement.apply(this);\r
   var sl = SVGAnimatedLength;\r
-  /*readonly SVGAnimatedEnumeration*/ this.maskUnits = new SVGAnimatedEnumeration();\r
-  /*readonly SVGAnimatedEnumeration*/ this.maskContentUnits = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/ this.maskUnits = base("$SVGAnimatedEnumeration").up("$1");\r
+  /*readonly SVGAnimatedEnumeration*/ this.maskContentUnits = base("$SVGAnimatedEnumeration").up("$1");\r
   /*readonly SVGAnimatedLength*/      this.x = new sl();\r
   /*readonly SVGAnimatedLength*/      this.y = new sl();\r
   /*readonly SVGAnimatedLength*/      this.width = new sl();\r
   /*readonly SVGAnimatedLength*/      this.height = new sl();\r
   sl = void 0;\r
 };\r
-SVGMaskElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGFilterElement() {\r
-  SVGElement.apply(this);\r
   var sl = SVGAnimatedLength;\r
-  /*readonly SVGAnimatedEnumeration*/ this.filterUnits = new SVGAnimatedEnumeration();\r
-  /*readonly SVGAnimatedEnumeration*/ this.primitiveUnits = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedEnumeration*/ this.filterUnits = base("$SVGAnimatedEnumeration").up("$1");\r
+  /*readonly SVGAnimatedEnumeration*/ this.primitiveUnits = base("$SVGAnimatedEnumeration").up("$1");\r
   /*readonly SVGAnimatedLength*/      this.x = new sl();\r
   /*readonly SVGAnimatedLength*/      this.y = new sl();\r
   /*readonly SVGAnimatedLength*/      this.width = new sl();\r
   /*readonly SVGAnimatedLength*/      this.height = new sl();\r
   sl = void 0;\r
-  /*readonly SVGAnimatedInteger*/     this.filterResX = new SVGAnimatedInteger();\r
-  /*readonly SVGAnimatedInteger*/     this.filterResY = new SVGAnimatedInteger();\r
+  /*readonly SVGAnimatedInteger*/     this.filterResX = base("$SVGAnimatedInteger").up("$1");\r
+  /*readonly SVGAnimatedInteger*/     this.filterResY = base("$SVGAnimatedInteger").up("$1");\r
   SVGURIReference.apply(this);\r
   //setFilterRes (/*unsigned long*/ filterResX,/*unsigned long*/ filterResY );\r
 };\r
-SVGFilterElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGFilterPrimitiveStandardAttributes(ele) {\r
   SVGStylable.apply(this, arguments);\r
@@ -7495,19 +7459,17 @@ function SVGFilterPrimitiveStandardAttributes(ele) {
   /*readonly SVGAnimatedLength*/ this.y = new sl();\r
   /*readonly SVGAnimatedLength*/ this.width = new sl();\r
   /*readonly SVGAnimatedLength*/ this.height = new sl();\r
-  /*readonly SVGAnimatedString*/ this.result = new sl();\r
+  /*readonly SVGAnimatedString*/ this.result = base("$SVGAnimatedString").up("$1");\r
   sl = void 0;\r
   };\r
 SVGFilterPrimitiveStandardAttributes.prototype = Object._create(SVGStylable);\r
 \r
 function SVGFEBlendElement() {\r
-  SVGElement.apply(this);\r
-  /*readonly SVGAnimatedString*/      this.in1 = new SVGAnimatedString();\r
-  /*readonly SVGAnimatedString*/      this.in2 = new SVGAnimatedString();\r
-  /*readonly SVGAnimatedEnumeration*/ this.mode = new SVGAnimatedEnumeration();\r
+  /*readonly SVGAnimatedString*/      this.in1 = base("$SVGAnimatedString").up("$1");\r
+  /*readonly SVGAnimatedString*/      this.in2 = base("$SVGAnimatedString").up("$1");\r
+  /*readonly SVGAnimatedEnumeration*/ this.mode = base("$SVGAnimatedEnumeration").up("$1");\r
   this._fpsa = SVGFilterPrimitiveStandardAttributes(this);\r
 };\r
-SVGFEBlendElement.prototype = Object._create(SVGElement);\r
     // Blend Mode Types\r
   /*unsigned short SVGFEBlendElement.SVG_FEBLEND_MODE_UNKNOWN  = 0;\r
   /*unsigned short SVGFEBlendElement.SVG_FEBLEND_MODE_NORMAL   = 1;\r
@@ -7517,30 +7479,25 @@ SVGFEBlendElement.prototype = Object._create(SVGElement);
   /*unsigned short SVGFEBlendElement.SVG_FEBLEND_MODE_LIGHTEN  = 5;*/\r
 \r
 function SVGFEGaussianBlurElement() {\r
-  SVGElement.apply(this);\r
-  /*readonly SVGAnimatedString*/ this.in1 = new SVGAnimatedString();\r
-  /*readonly SVGAnimatedNumber*/ this.stdDeviationX = new SVGAnimatedNumber();\r
-  /*readonly SVGAnimatedNumber*/ this.stdDeviationY = new SVGAnimatedNumber();\r
+  /*readonly SVGAnimatedString*/ this.in1 = base("$SVGAnimatedString").up("$1");\r
+  /*readonly SVGAnimatedNumber*/ this.stdDeviationX = base("$SVGAnimatedNumber").up("$1");\r
+  /*readonly SVGAnimatedNumber*/ this.stdDeviationY = base("$SVGAnimatedNumber").up("$1");\r
   this._fpsa = SVGFilterPrimitiveStandardAttributes(this);\r
 };\r
-SVGFEGaussianBlurElement.prototype = Object._create(SVGElement);\r
 /*void*/ SVGFEGaussianBlurElement.prototype.setStdDeviation = function(/*float*/ stdDeviationX, /*float*/ stdDeviationY ) {\r
 \r
 };\r
 \r
 function SVGCursorElement() {\r
-  SVGElement.apply(this);\r
   /*readonly SVGAnimatedLength*/ this.x = new SVGAnimatedLength();\r
   /*readonly SVGAnimatedLength*/ this.y = new SVGAnimatedLength();\r
   SVGURIReference.apply(this);\r
 };\r
-SVGCursorElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGAElement(_doc) {\r
-  SVGElement.apply(this);\r
   this._tar = _doc.createElement("a");\r
   _doc = void 0;\r
-  /*readonly SVGAnimatedString*/ this.target = new SVGAnimatedString();\r
+  /*readonly SVGAnimatedString*/ this.target = base("$SVGAnimatedString").up("$1");\r
   this.target.baseVal = "_self";\r
   this.addEventListener("DOMAttrModified", function(evt){\r
     var tar = evt.target;\r
@@ -7633,7 +7590,9 @@ function SVGAElement(_doc) {
             }\r
             ob = NAIBU._search([sd.lastChild]);\r
           }\r
-          NAIBU.doc = new ActiveXObject("MSXML2.DomDocument");\r
+          try{\r
+            NAIBU.doc = new ActiveXObject("MSXML2.DomDocument");\r
+          } catch (e) {}\r
           evt.preventDefault();\r
           ob._next = {\r
             _init: (function (ob) {\r
@@ -7651,20 +7610,16 @@ function SVGAElement(_doc) {
   }, false);\r
   SVGURIReference.apply(this);\r
 };\r
-SVGAElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGViewElement() {\r
-  SVGElement.apply(this);\r
-  /*readonly SVGStringList*/ this.viewTarget = new SVGStringList();\r
+  /*readonly SVGStringList*/ this.viewTarget = base("$SVGStringList").up("$1");\r
       //SVGFitToViewBoxのインターフェースを用いる\r
   /*readonly SVGAnimatedRect*/   this.viewBox = new SVGAnimatedRect();\r
   /*readonly SVGAnimatedPreserveAspectRatio*/ this.preserveAspectRatio = new SVGAnimatedPreserveAspectRatio();\r
   /*unsigned short*/             this.zoomAndPan = /*SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE*/ 1;\r
 };\r
-SVGViewElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGScriptElement() {\r
-  SVGElement.apply(this);\r
   /*DOMString*/ this.type;\r
   SVGURIReference.apply(this);\r
   this.addEventListener("DOMAttrModified", function(evt){\r
@@ -7712,24 +7667,17 @@ function SVGScriptElement() {
     }, false);\r
   }, false);\r
 };\r
-SVGScriptElement.prototype = Object._create(SVGElement);\r
 \r
-function SVGEvent() {\r
-  Event.apply(this);\r
-};\r
-SVGEvent.prototype = Object._create(Event);\r
+base("$event").up("SVGEvents");\r
 \r
-function SVGZoomEvent() {\r
-  UIEvent.apply(this);\r
-  /*readonly SVGRect*/  this.zoomRectScreen = new SVGRect();\r
+base("$event").SVGZoomEvents = base("$event").UIEvents.up("SVGZoomEvents").on("itnitialize", function() {\r
+  /*readonly SVGRect*/  this.zoomRectScreen = base("$SVGRect").up("$1");\r
   /*readonly float*/    this.previousScale =  this.newScale = 1;\r
-  /*readonly SVGPoint*/ this.previousTranslate = new SVGPoint();\r
-  /*readonly SVGPoint*/ this.newTranslate = new SVGPoint();\r
-};\r
-SVGZoomEvent.prototype = Object._create(UIEvent);\r
+  /*readonly SVGPoint*/ this.previousTranslate = base("$SVGPoint").up("$1");\r
+  /*readonly SVGPoint*/ this.newTranslate = base("$SVGPoint").up("$1");\r
+});\r
 \r
 function SVGAnimationElement() {\r
-  SVGElement.apply(this);\r
   /*SIEにおけるSVGElementでは、fill属性とStyleSheetを結びつける機構があるため、\r
    *styleのsetPropertyメソッドを無効化させておく必要がある\r
    */\r
@@ -8012,7 +7960,6 @@ function SVGAnimationElement() {
   }, false);\r
 };\r
 (function(t) {\r
-SVGAnimationElement.prototype = t;\r
 /*以下のメソッド(beginElementなど)については、\r
  *別モジュールであるsmil::ElementTimeControl(smil.js)を参照のこと\r
  */\r
@@ -8148,7 +8095,7 @@ t._getOffset = function(/*string*/ val) {
     return (this._getOffset(this._dur));\r
   }\r
 };\r
-})(Object._create(SVGElement));\r
+})(SVGAnimationElement.prototype);\r
                     //raises( DOMException );\r
 NAIBU.Time = {\r
   currentFrame : 0,\r
@@ -8251,7 +8198,7 @@ function SVGAnimateElement(){
           ttr = tar.targetElement,\r
           tta = ttr[attrName];\r
       /*tar.valuesのリスト:  ["12px", "13px"]\r
-       *tar._valueList:   [(new SVGPoint()), (new SVGPoint())]\r
+       *tar._valueList:   [(base("$SVGPoint").up("$1")), (base("$SVGPoint").up("$1"))]\r
        *  tar.valuesを機械が理解できるように変換したものがtar._valueList\r
        *この_valueListプロパティはアニメの際に使うので、_valuesプロパティはアニメ中に使わないことに注意\r
        */\r
@@ -8285,7 +8232,7 @@ function SVGAnimateElement(){
       } else if (!!CSS2Properties[attrName] || attrName.indexOf("-") > -1) { //スタイルシートのプロパティならば\r
         for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {\r
           if ((attrName === "fill") || (attrName === "stroke") || (attrName === "stop-color")) {\r
-            tar._valueList[i] = new SVGPaint();\r
+            tar._valueList[i] = base("$CSSValue").$SVGColor.$SVGPaint._new$();\r
             tar._valueList[i].setPaint(1, null, tav[i], null);\r
           } else {\r
             tar._valueList[i] = parseFloat(tav[i]);\r
@@ -8520,7 +8467,7 @@ function SVGAnimateMotionElement(){
     /*アニメーション中に変化すべき値をanimValプロパティに入力して、\r
      *baseValと同じような値に設定。\r
      */\r
-    trans.animVal = new SVGTransformList();\r
+    trans.animVal = base("$SVGStringList").$SVGTransformList.up("$1");;\r
     if (trans.baseVal.numberOfItems !== 0) {\r
       trans.animVal.initialize(trans.baseVal.createSVGTransformFromMatrix(trans.baseVal.consolidate().matrix));\r
     } else {\r
@@ -8620,10 +8567,8 @@ function SVGMPathElement() /* :
                 SVGElement,\r
                 SVGURIReference,\r
                 SVGExternalResourcesRequired*/ {\r
-  SVGElement.apply(this);\r
   SVGURIReference.apply(this);\r
 };\r
-SVGMPathElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGAnimateColorElement() {\r
   SVGAnimationElement.apply(this);\r
@@ -8644,7 +8589,7 @@ function SVGAnimateColorElement() {
         tar._values[0] = fstyle.getPropertyValue(attrName);\r
       }\r
       for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) {\r
-        var to = new SVGColor();\r
+        var to = base("$CSSValue").$SVGColor._new$();\r
         if (tar._values[i] === "currentColor") {\r
           to.setRGBColor(fstyle.getPropertyValue("color") || "black");\r
         } else if (tar._values[i] === "inherit") {\r
@@ -8734,7 +8679,7 @@ function SVGAnimateTransformElement() {
     /*アニメーション中に変化すべき値をanimValプロパティに入力して、\r
      *baseValと同じような値に設定。\r
      */\r
-    trans.animVal = new SVGTransformList();\r
+    trans.animVal = base("$SVGStringList").$SVGTransformList.up("$1");\r
     if (trans.baseVal.numberOfItems !== 0) {\r
       trans.animVal.initialize(trans.baseVal.createSVGTransformFromMatrix(trans.baseVal.getItem(0).matrix));\r
     }\r
@@ -8760,7 +8705,6 @@ function SVGFontElement() /*:
                 SVGElement,\r
                 SVGExternalResourcesRequired,\r
                 SVGStylable*/ {\r
-  SVGElement.apply(this);\r
   /*_isExternalは外部から呼び出されたfont要素ならば、真(1)となる*/\r
   /*boolean or number*/ this._isExternal = 0;\r
   this.addEventListener("DOMNodeInserted", function(evt){\r
@@ -8790,34 +8734,24 @@ function SVGFontElement() /*:
     }, false);\r
   }, false);\r
 };\r
-SVGFontElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGGlyphElement() /*:\r
                 SVGElement,\r
                 SVGStylable*/ {\r
-  SVGElement.apply(this);\r
 };\r
-SVGGlyphElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGMissingGlyphElement() /*:\r
                 SVGElement,\r
                 SVGStylable*/ {\r
-  SVGElement.apply(this);\r
 };\r
-SVGMissingGlyphElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGHKernElement() {\r
-  SVGElement.apply(this);\r
 };\r
-SVGHKernElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGVKernElement() {\r
-  SVGElement.apply(this);\r
 };\r
-SVGVKernElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGFontFaceElement() {\r
-  SVGElement.apply(this);\r
   /*boolean(or number)*/ this._isLinked = 0;\r
   this.addEventListener("DOMNodeInserted", function(evt){\r
     if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {\r
@@ -8828,15 +8762,11 @@ function SVGFontFaceElement() {
     }\r
   }, false);\r
 };\r
-SVGFontFaceElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGFontFaceSrcElement() {\r
-  SVGElement.apply(this);\r
 };\r
-SVGFontFaceSrcElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGFontFaceUriElement() {\r
-  SVGElement.apply(this);\r
   this.addEventListener("DOMNodeInserted", function(evt){\r
     if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {\r
       return; //強制終了させる\r
@@ -8855,22 +8785,15 @@ function SVGFontFaceUriElement() {
   }, false);\r
   SVGURIReference.apply(this);\r
 };\r
-SVGFontFaceUriElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGFontFaceFormatElement() {\r
-  SVGElement.apply(this);\r
 };\r
-SVGFontFaceFormatElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGFontFaceNameElement() {\r
-  SVGElement.apply(this);\r
 };\r
-SVGFontFaceNameElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGDefinitionSrcElement() {\r
-  SVGElement.apply(this);\r
 };\r
-SVGDefinitionSrcElement.prototype = Object._create(SVGElement);\r
 \r
 function SVGForeignObjectElement(_doc) /*:\r
                 SVGElement,\r
@@ -8881,7 +8804,6 @@ function SVGForeignObjectElement(_doc) /*:
                 SVGTransformable,\r
                 events::EventTarget*/ {\r
   this._tar = _doc.createElement("v:group");\r
-  SVGElement.apply(this);\r
   var sl = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/ this.x = new sl();\r
   /*readonly SVGAnimatedLength*/ this.y = new sl();\r
@@ -8962,10 +8884,9 @@ function SVGForeignObjectElement(_doc) /*:
     }\r
   }, true);\r
 };\r
-SVGForeignObjectElement.prototype = Object._create(SVGElement);\r
 \r
 //#endif  _SVG_IDL_\r
-DOMImplementation["http://www.w3.org/2000/svg"] = {\r
+base("DOMImplementation")["http://www.w3.org/2000/svg"] = {\r
   g:               SVGGElement,\r
   path:            NAIBU.SVGPathElement,\r
   title:           SVGTitleElement,\r
@@ -9021,8 +8942,9 @@ DOMImplementation["http://www.w3.org/2000/svg"] = {
   pattern:         SVGPatternElement\r
 };\r
 (function(){\r
+  /*大幅な修正をせずに、base関数をsvg.jsのインターフェースに適用させるためのもの*/\r
   var svg = base("$document").$element.$svgelement,\r
-      list = DOMImplementation["http://www.w3.org/2000/svg"];\r
+      list = base("DOMImplementation")["http://www.w3.org/2000/svg"];\r
   for (var i in list) {\r
     list.hasOwnProperty(i) && svg.up("http://www.w3.org/2000/svg" + i)\r
                                  .on("initialize", list[i])\r
@@ -9186,7 +9108,7 @@ NAIBU._noie_createFont = function(/*Element*/ ti, /*Element*/ font, /*boolean*/
  *CSSprimitiveValueのリストを収納している。なお、その際に、writingModeなどはwriting-modeに変更している\r
  */\r
 (function(){\r
-  var s = new CSSStyleDeclaration(),\r
+  var s = base("$CSSStyleDeclaration")._new$(),\r
       slis = s._list,\r
       n = 0,\r
       regAZ = /([A-Z])/,\r
@@ -9237,7 +9159,7 @@ function unsvgtovml() {
     window.onscroll = NAIBU.emptyFunction;\r
     window.detachEvent("onload", NAIBU._main);\r
     NAIBU.freeArg();\r
-    Object._create = Element = SVGElement = Attr = NamedNodeMap = CSS2Properties = CSSValue = CSSPrimitiveValue = NAIBU.xmlhttp = Node = Event = NAIBU = STLog = SVGColor = SVGPaint = void 0;\r
+    base = Object._create = CSS2Properties = NAIBU.xmlhttp = NAIBU = STLog =  void 0;\r
     Array = ActiveXObject = void 0;\r
   } catch(e) {}\r
 }\r