OSDN Git Service

0.91 module build
authordhrname <dhrname@users.sourceforge.jp>
Thu, 22 Dec 2011 10:50:11 +0000 (19:50 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Thu, 22 Dec 2011 10:50:11 +0000 (19:50 +0900)
sie.js

diff --git a/sie.js b/sie.js
index d01a18d..c3d4ec4 100644 (file)
--- a/sie.js
+++ b/sie.js
@@ -1152,13 +1152,10 @@ function DocumentEvent() {
   return this;
 }*/
 /*Event*/ Document.prototype.createEvent = function( /*string*/ eventType) {
-  var evt;
-  if (eventType === "MutationEvents") {
-    evt = new MutationEvent();
-  } else if (eventType === "MouseEvents") {
-    evt = new MouseEvent();
-  } else if (eventType === "UIEvents") {
-    evt = new UIEvent();
+  var evt,
+      tc = this._cevent[eventType];
+  if (tc) {
+    evt = new tc();
   } else if (eventType === "SVGEvents") {
     evt = new SVGEvent();
   } else if (eventType === "TimeEvents") {
@@ -1434,6 +1431,14 @@ MutationEvent.constructor = Event;
   /*ここまで追加*/
 };
 
+/*_ceventプロパティはcreateEventメソッドで軽量化のために使う。*/
+Document.prototype._cevent = {
+    "MutationEvents" : MutationEvent,
+    "MouseEvents" : MouseEvent,
+    "UIEvents" : UIEvent
+};
+
+
 // _EVENTS_IDL_
 
 /*
@@ -2560,14 +2565,12 @@ function SVGElement() {
           tvw = tod.viewport.width,
           tvh = tod.viewport.height,
           s,
-          n = evt.newValue.match(tar._NaNReg),
+          n = evt.newValue.slice(-2),
+          m = n.charAt(1),
           type = /*SVGLength.SVG_LENGTHTYPE_NUMBER*/ 1,
           _parseFloat = parseFloat;
-      if (!!n) {
-        n = n[0];
-      }
-      if (!n) { //軽量化のためにチェックを設ける
-      } else if (n === "%") {
+      if (m >= "0" && m <= "9") { //軽量化のためにチェックを設ける
+      } else if (m === "%") {
         if (tar._x1width[name]) {
           tea.baseVal._percent = tvw * 0.01;
         } else if (tar._y1height[name]) {
@@ -2613,7 +2616,6 @@ SVGElement.prototype = new Element();
   this._syouReg = /^[^a-z\-]+/;
   this._conReg = /\:\s+/g;
   this._bouReg = /\s*;[^a-z\-]*/g;
-  this._NaNReg = /\D+$/;
   /*_cacheMatrixプロパティはSVGMatrixのキャッシュとして、
    *getCTMメソッドで使う
    */
@@ -4371,13 +4373,9 @@ function SVGPoint() {
 /*float*/SVGPoint.prototype.x = SVGPoint.prototype.y = 0;
 SVGPoint.prototype.matrixTransform = function(/*SVGMatrix*/ matrix ) {
   /*整数にしているのは、VMLの設計上、小数点を扱えないときがあるため*/
-  var x = parseInt(matrix.a * this.x + matrix.c * this.y + matrix.e);
-  var y = parseInt(matrix.b * this.x + matrix.d * this.y + matrix.f);
-  if ((-1 < x) && (x < 1)) {x=1;}
-  if ((-1 < y) && (y < 1)) {y=1;}
   var s = new SVGPoint();
-  s.x = x;
-  s.y = y;
+  s.x = matrix.a * this.x + matrix.c * this.y + matrix.e;
+  s.y = matrix.b * this.x + matrix.d * this.y + matrix.f;
   return s;
 };
 
@@ -4838,10 +4836,10 @@ for (var prop in SVGStringList.prototype) { //prototypeのコピーで継承を
 };
 
 /*documentは引数の変数として登録しておく*/
-(function(_doc, _pInt, _math) {
+(function(_doc, _math) {
 //freeArg関数はunloadで使う解放処理
 NAIBU.freeArg = function() {
-  SVGPathElement = _doc = _pInt = _math = void 0;
+  SVGPathElement = _doc = _math = void 0;
 };
 //仮のfill属性とstroke属性の処理
 NAIBU._setPaint = function(tar, matrix) {
@@ -5325,11 +5323,11 @@ _sproto._nodeInsertInto = function(evt){
   var tar = evt.target,
       matrix = tar.getScreenCTM(),
       tlist = tar.normalizedPathSegList,
-      _parseInt = _pInt,
       dat = [],
       ma = matrix.a, mb = matrix.b, mc = matrix.c, md = matrix.d, me = matrix.e, mf = matrix.f,
       cname = tar._com._nameCom,
-      isZ = tar._com._isZ, isC = tar._com._isC;
+      isZ = tar._com._isZ, isC = tar._com._isC,
+      mr = _math.round;
   for (var i=0, tli=tlist.numberOfItems;i<tli;++i) {
     var ti = tlist[i],
         tx = ti.x,
@@ -5342,14 +5340,14 @@ _sproto._nodeInsertInto = function(evt){
        *[mb md mf] * [y]
        *[0  0  1 ]   [1]
        */
-      t += [_parseInt(ma*ti.x1 + mc*ti.y1 + me, 10),
-             _parseInt(mb*ti.x1 + md*ti.y1 + mf, 10),
-             _parseInt(ma*ti.x2 + mc*ti.y2 + me, 10),
-             _parseInt(mb*ti.x2 + md*ti.y2 + mf, 10),
-             _parseInt(ma*tx + mc*ty + me, 10),
-             _parseInt(mb*tx + md*ty + mf, 10)].join(" ");
+      t += [mr(ma*ti.x1 + mc*ti.y1 + me),
+             mr(mb*ti.x1 + md*ti.y1 + mf),
+             mr(ma*ti.x2 + mc*ti.y2 + me),
+             mr(mb*ti.x2 + md*ti.y2 + mf),
+             mr(ma*tx + mc*ty + me),
+             mr(mb*tx + md*ty + mf)].join(" ");
     } else if (!isZ[tps]) {
-      t += _parseInt(ma*tx + mc*ty + me, 10)+ " " +_parseInt(mb*tx + md*ty + mf, 10);
+      t += mr(ma*tx + mc*ty + me)+ " " +mr(mb*tx + md*ty + mf);
     }
     dat[i] = t;
   }
@@ -5360,7 +5358,7 @@ _sproto._nodeInsertInto = function(evt){
   tt.coordsize = vi.width.baseVal.value + " " + vi.height.baseVal.value;
   NAIBU._setPaint(tar, matrix);
   delete tar._cacheMatrix;
-  evt = tar = dat = t = tx = ty = matrix = tlist = x = y = _parseInt = ma = mb = mc = md = me = mf = vi = isZ = isC = i = tli = tps = ti = cname = tt = void 0;
+  evt = tar = dat = t = tx = ty = matrix = tlist = x = y = mr = ma = mb = mc = md = me = mf = vi = isZ = isC = i = tli = tps = ti = cname = tt = void 0;
 };
 _sproto._com = {
   _nameCom : {
@@ -5641,7 +5639,7 @@ _sproto._com = {
   };
 })(SVGPathElement.prototype)
   NAIBU.SVGPathElement = SVGPathElement; //IE8では、SVGPathElementはローカル変数
-})(document, parseInt, Math);
+})(document, Math);
 
 function SVGRectElement(_doc) {
   SVGElement.apply(this);
@@ -5732,7 +5730,8 @@ function SVGRectElement(_doc) {
           ele = tar._tar,
           vi = tar.ownerDocument.documentElement,
           w = vi.width.baseVal.value,
-          h = vi.height.baseVal.value;
+          h = vi.height.baseVal.value,
+          mr = Math.round;
       for (var i=0, lili=list.length;i<lili;) {
         if (isNaN(list[i])) { //コマンド文字は読み飛ばす
           ++i;
@@ -5742,9 +5741,9 @@ function SVGRectElement(_doc) {
         p.x = list[i];
         p.y = list[i+1];
         pmt = p.matrixTransform(ctm);
-        list[i] = pmt.x;
+        list[i] = mr(pmt.x);
         ++i;
-        list[i] = pmt.y;
+        list[i] = mr(pmt.y);
         ++i;
         p = pmt = void 0;
       }
@@ -5754,7 +5753,7 @@ function SVGRectElement(_doc) {
       ele.coordsize = w + " " + h;
       NAIBU._setPaint(tar, ctm);
       delete tar._cacheMatrix;
-      evt = tar = style = list = dat = ele = vi = fontSize = void 0;
+      evt = tar = style = list = mr = dat = ele = vi = fontSize = void 0;
     }, false);
     evt = tar = void 0;
   }, false);
@@ -5810,7 +5809,9 @@ function SVGCircleElement(_doc) {
         var rrx = rx * 0.55228, rry = ry * 0.55228;
         var list = ["m", cx,top, "c", cx-rrx,top, left,cy-rry, left,cy, left,cy+rry, cx-rrx,bottom, cx,bottom, cx+rrx,bottom, right,cy+rry, right,cy, right,cy-rry, cx+rrx,top, cx,top, "x e"];
         //以下は、配列listそのものをCTMで座標変換していく処理
-        var par = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
+        var par = tar.ownerDocument.documentElement,
+            ctm = tar.getScreenCTM(),
+            mr = Math.round;
         for (var i=0, lili=list.length;i<lili;) {
           if (isNaN(list[i])) { //コマンド文字は読み飛ばす
             ++i;
@@ -5820,9 +5821,9 @@ function SVGCircleElement(_doc) {
           p.x = list[i];
           p.y = list[i+1];
           var pmt = p.matrixTransform(ctm);
-          list[i] = pmt.x;
+          list[i] = mr(pmt.x);
           ++i;
-          list[i] = pmt.y;
+          list[i] = mr(pmt.y);
           ++i;
           p = pmt = void 0;
         }
@@ -5834,7 +5835,7 @@ function SVGCircleElement(_doc) {
         ele.coordsize = w + " " + h;
         NAIBU._setPaint(tar, ctm);
         delete tar._cacheMatrix;
-        evt = tar = list = style = fontSize = dat = ele = void 0;
+        evt = tar = list = mr = style = fontSize = dat = ele = void 0;
     }, false);
     evt = tar = void 0;
   }, false);
@@ -5892,7 +5893,9 @@ function SVGEllipseElement(_doc) {
       var rrx = rx * 0.55228, rry = ry * 0.55228;
       var list = ["m", cx,top, "c", cx-rrx,top, left,cy-rry, left,cy, left,cy+rry, cx-rrx,bottom, cx,bottom, cx+rrx,bottom, right,cy+rry, right,cy, right,cy-rry, cx+rrx,top, cx,top, "x e"];
       //以下は、配列listそのものをCTMで座標変換していく処理
-      var par = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
+      var par = tar.ownerDocument.documentElement,
+          ctm = tar.getScreenCTM(),
+          mr = Math.round;
       for (var i=0, lili=list.length;i<lili;) {
         if (isNaN(list[i])) { //コマンド文字は読み飛ばす
           ++i;
@@ -5902,9 +5905,9 @@ function SVGEllipseElement(_doc) {
         p.x = list[i];
         p.y = list[i+1];
         var pmt = p.matrixTransform(ctm);
-        list[i] = pmt.x;
+        list[i] = mr(pmt.x);
         ++i;
-        list[i] = pmt.y;
+        list[i] = mr(pmt.y);
         ++i;
         p = pmt = void 0;
       }
@@ -5916,7 +5919,7 @@ function SVGEllipseElement(_doc) {
       ele.coordsize = w + " " + h;
       NAIBU._setPaint(tar, ctm);
       delete tar._cacheMatrix;
-      evt = ele = tar = style = fontSize = dat = list = ctm = w = h = void 0;
+      evt = ele = tar = style = fontSize = dat = list = mr = ctm = w = h = void 0;
     }, false);
     evt = tar = void 0;
   }, false);
@@ -5970,17 +5973,19 @@ function SVGLineElement(_doc) {
       tar.x2.baseVal._emToUnit(fontSize);
       tar.y2.baseVal._emToUnit(fontSize);
       //以下は、配列listそのものをCTMで座標変換していく処理
-      var vi = tar.ownerDocument.documentElement, ctm = tar.getScreenCTM();
-      var dat = "m ";
-      var p = vi.createSVGPoint();
+      var vi = tar.ownerDocument.documentElement,
+          ctm = tar.getScreenCTM(),
+          dat = "m ",
+          mr = Math.round,
+          p = vi.createSVGPoint();
       p.x = tar.x1.baseVal.value;
       p.y = tar.y1.baseVal.value;
       var pmt = p.matrixTransform(ctm);
-      dat += pmt.x+ " " +pmt.y+ " l ";
+      dat += mr(pmt.x)+ " " +mr(pmt.y)+ " l ";
       p.x = tar.x2.baseVal.value;
       p.y = tar.y2.baseVal.value;
       pmt = p.matrixTransform(ctm);
-      dat += pmt.x+ " " +pmt.y;
+      dat += mr(pmt.x)+ " " +mr(pmt.y);
       p = pmt = void 0;
       //VMLに結び付けていく
       var ele = tar._tar, w = vi.width.baseVal.value, h = vi.height.baseVal.value;
@@ -5988,7 +5993,7 @@ function SVGLineElement(_doc) {
       ele.coordsize = w + " " + h;
       NAIBU._setPaint(tar, ctm);
       delete tar._cacheMatrix;
-      evt = ele = tar = style = fontSize = dat = list = ctm = vi = w = h = void 0;
+      evt = ele = tar = style = fontSize = dat = list = mr = ctm = vi = w = h = void 0;
     }, false);
     evt = tar = void 0;
   }, false);
@@ -6056,13 +6061,14 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) {
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
       var tar = evt.target,
           tp = tar.points,
-          ctm = tar.getScreenCTM();
+          ctm = tar.getScreenCTM(),
+          mr = Math.round;
       //以下は、配列listそのものをCTMで座標変換していく処理
       for (var i=0, list = [], lili=tp.numberOfItems;i<lili;++i) {
         var p = tp.getItem(i),
             pmt = p.matrixTransform(ctm);
-        list[2*i] = pmt.x;
-        list[2*i + 1] = pmt.y;
+        list[2*i] = mr(pmt.x);
+        list[2*i + 1] = mr(pmt.y);
         p = pmt = void 0;
       }
       list.splice(2, 0, "l");
@@ -6076,7 +6082,7 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) {
       ele.coordsize = w + " " + h;
       NAIBU._setPaint(tar, ctm);
       delete tar._cacheMatrix;
-      evt = ele = tar = dat = list = ctm = w = h = vi = void 0;
+      evt = ele = tar = dat = list = mr = ctm = w = h = vi = void 0;
     }, false);
     evt = tar = void 0;
   }, false);
@@ -6381,17 +6387,18 @@ function SVGTextPositioningElement(_doc) {
   _doc = sl = void 0;
   /*readonly SVGAnimatedNumberList*/ this.rotate = new SVGAnimatedNumberList();
   this.addEventListener("DOMAttrModified", function(evt){
-    var tar = evt.target, name = evt.attrName, tod = tar.ownerDocument.documentElement;
-    var _parseFloat = parseFloat;
+    var tar = evt.target,
+        name = evt.attrName,
+        tod = tar.ownerDocument.documentElement,
+        _parseFloat = parseFloat;
     if ((name === "x") || (name === "y") || (name === "dx") || (name === "dy")) {
-      var enr = evt.newValue.replace(/^\s+|\s+$/g, "").split(/[\s,]+/), teas = tar[name].baseVal;
+      var enr = evt.newValue.replace(/^\s+|\s+$/g, "").split(/[\s,]+/),
+          teas = tar[name].baseVal;
       for (var i=0, tli=enr.length;i<tli;++i) {
-        var tea = tod.createSVGLength();
-        var n = enr[i].match(/\D+$/), type = 0;
-        if (!!n) {
-          n = n[0];
-        }
-        if (!n) {
+        var tea = tod.createSVGLength(),
+            n = enr[i].slice(-1),
+            type = 0;
+        if (n >= "0" && n <= "9") {
           type = /*SVGLength.SVG_LENGTHTYPE_NUMBER*/ 1;
         } else if (n === "%") {
           if ((name === "x") || (name === "dx")) {
@@ -6400,25 +6407,28 @@ function SVGTextPositioningElement(_doc) {
             tea._percent *= tod.viewport.height;
           }
           type = /*SVGLength.SVG_LENGTHTYPE_PERCENTAGE*/ 2;
-        } else if (n === "em") {
-          var style = tar.ownerDocument.defaultView.getComputedStyle(tar, null);
-          tea._percent *= _parseFloat(style.getPropertyValue("font-size"));
-          style = void 0;
-          type = /*SVGLength.SVG_LENGTHTYPE_EMS*/ 3;
-        } else if (n === "ex") {
-          type = /*SVGLength.SVG_LENGTHTYPE_EXS*/ 4;
-        } else if (n === "px") {
-          type = /*SVGLength.SVG_LENGTHTYPE_PX*/ 5;
-        } else if (n === "cm") {
-          type = /*SVGLength.SVG_LENGTHTYPE_CM*/ 6;
-        } else if (n === "mm") {
-          type = /*SVGLength.SVG_LENGTHTYPE_MM*/ 7;
-        } else if (n === "in") {
-          type = /*SVGLength.SVG_LENGTHTYPE_IN*/ 8;
-        } else if (n === "pt") {
-          type = /*SVGLength.SVG_LENGTHTYPE_PT*/ 9;
-        } else if (n === "pc") {
-          type = /*SVGLength.SVG_LENGTHTYPE_PC*/ 10;
+        } else {
+          n = enr[i].s1ice(-2);
+          if (n === "em") {
+            var style = tar.ownerDocument.defaultView.getComputedStyle(tar, null);
+            tea._percent *= _parseFloat(style.getPropertyValue("font-size"));
+            style = void 0;
+            type = /*SVGLength.SVG_LENGTHTYPE_EMS*/ 3;
+          } else if (n === "ex") {
+            type = /*SVGLength.SVG_LENGTHTYPE_EXS*/ 4;
+          } else if (n === "px") {
+            type = /*SVGLength.SVG_LENGTHTYPE_PX*/ 5;
+          } else if (n === "cm") {
+            type = /*SVGLength.SVG_LENGTHTYPE_CM*/ 6;
+          } else if (n === "mm") {
+            type = /*SVGLength.SVG_LENGTHTYPE_MM*/ 7;
+          } else if (n === "in") {
+            type = /*SVGLength.SVG_LENGTHTYPE_IN*/ 8;
+          } else if (n === "pt") {
+            type = /*SVGLength.SVG_LENGTHTYPE_PT*/ 9;
+          } else if (n === "pc") {
+            type = /*SVGLength.SVG_LENGTHTYPE_PC*/ 10;
+          }
         }
         var s = _parseFloat(enr[i]);
         s = isNaN(s) ? 0 : s;
@@ -6640,7 +6650,7 @@ function SVGTSpanElement() {
 SVGTSpanElement.constructor = SVGTextPositioningElement;
 SVGTSpanElement.prototype = new SVGTextPositioningElement();
 
-function SVGTRefElement() {
+function SVGTRefElement(_doc) {
   SVGTextPositioningElement.apply(this, arguments);
   SVGURIReference.apply(this, arguments);
   return this;
@@ -6916,7 +6926,9 @@ function SVGRadialGradientElement(_doc) {
   sl = void 0;
   this.cx.baseVal.value = this.cy.baseVal.value = this.r.baseVal.value = 0.5;
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
-    var grad = evt.target, ele = evt._tar, tar = evt._ttar; //eleはv:fill要素。tarはターゲットとになる要素
+    var grad = evt.target,
+        ele = evt._tar,
+        tar = evt._ttar; //eleはv:fill要素。tarはターゲットとになる要素
     if (!!!ele) { //まだ、path要素などが設定されていない場合
       return;
     }
@@ -6927,32 +6939,50 @@ function SVGRadialGradientElement(_doc) {
       /*VMLでは、図の形状に沿って、円状のグラデーションを処理するようになっているため、
        *四角だとおかしな模様が出てしまう。以下はそれを避ける処理
        */
-      var style = grad.ownerDocument.defaultView.getComputedStyle(tar, "");
-      var fontSize = parseFloat(style.getPropertyValue("font-size"));
+      var style = grad.ownerDocument.defaultView.getComputedStyle(tar, ""),
+          fontSize = parseFloat(style.getPropertyValue("font-size"));
       grad.cx.baseVal._emToUnit(fontSize);
       grad.cy.baseVal._emToUnit(fontSize);
       grad.r.baseVal._emToUnit(fontSize);
       grad.fx.baseVal._emToUnit(fontSize);
       grad.fy.baseVal._emToUnit(fontSize);
-      var cx = grad.cx.baseVal.value, cy = grad.cy.baseVal.value;
-      var r = grad.r.baseVal.value, rx, ry;
+      var cx = grad.cx.baseVal.value,
+          cy = grad.cy.baseVal.value,
+          r = grad.r.baseVal.value,
+          mr = Math.round,
+          rx, ry;
       rx = ry = r;
-      var tarrect = tar.getBBox();
-      var vi = tar.ownerDocument.documentElement.viewport;
-      var el = vi.width | 0, et = vi.height | 0, er = 0, eb = 0;
-      var units = grad.getAttributeNS(null, "gradientUnits");
+      var tarrect = tar.getBBox(),
+          vi = tar.ownerDocument.documentElement.viewport,
+          el = mr(vi.width),
+          et = mr(vi.height),
+          er = 0,
+          eb = 0,
+          units = grad.getAttributeNS(null, "gradientUnits");
       if (!units || units === "objectBoundingBox") {
         //%の場合は小数点に変換(10% -> 0.1)
-        cx = cx > 1 ? cx/100 : cx; cy = cy > 1 ? cy/100 : cy; r = r > 1 ? r/100 : r;
+        cx = cx > 1 ? cx/100 : cx;
+        cy = cy > 1 ? cy/100 : cy;
+        r = r > 1 ? r/100 : r;
         //要素の境界領域を求める(四隅の座標を求める)
-        var nx = tarrect.x, ny = tarrect.y, wid = tarrect.width, hei = tarrect.height;
-        cx = cx*wid + nx; cy = cy*hei + ny; rx = r*wid; ry = r*hei;
+        var nx = tarrect.x,
+            ny = tarrect.y,
+            wid = tarrect.width,
+            hei = tarrect.height;
+        cx = cx*wid + nx;
+        cy = cy*hei + ny;
+        rx = r*wid;
+        ry = r*hei;
         nx = ny = wid = hei = void 0;
       }
       var matrix = tar.getScreenCTM().multiply(grad.getCTM());
-      el = cx - rx; et = cy - ry; er = cx + rx; eb = cy + ry;
-      var rrx = rx * 0.55228, rry = ry * 0.55228;
-      var list = ["m", cx,et, "c", cx-rrx,et, el,cy-rry, el,cy, el,cy+rry, cx-rrx,eb, cx,eb, cx+rrx,eb, er,cy+rry, er,cy, er,cy-rry, cx+rrx,et, cx,et, "x e"];
+      el = cx - rx;
+      et = cy - ry;
+      er = cx + rx;
+      eb = cy + ry;
+      var rrx = rx * 0.55228,
+          rry = ry * 0.55228,
+          list = ["m", cx,et, "c", cx-rrx,et, el,cy-rry, el,cy, el,cy+rry, cx-rrx,eb, cx,eb, cx+rrx,eb, er,cy+rry, er,cy, er,cy-rry, cx+rrx,et, cx,et, "x e"];
       for (var i = 0, lili = list.length; i < lili;) {
         if (isNaN(list[i])) { //コマンド文字は読み飛ばす
           ++i;
@@ -6962,31 +6992,37 @@ function SVGRadialGradientElement(_doc) {
         p.x = parseFloat(list[i]);
         p.y = parseFloat(list[i+1]);
         var pmt = p.matrixTransform(matrix);
-        list[i] = pmt.x;
+        list[i] = mr(pmt.x);
         i++;
-        list[i] = pmt.y;
+        list[i] = mr(pmt.y);
         i++;
         p = pmt = void 0;
       }
-      var ellipse = list.join(" ");
-      var outline = _doc.getElementById("_NAIBU_outline");
-      var background = _doc.createElement("div"), bstyle = background.style;
+      var ellipse = list.join(" "),
+          outline = _doc.getElementById("_NAIBU_outline"),
+          background = _doc.createElement("div"),
+          bstyle = background.style;
       bstyle.position = "absolute";
       bstyle.display = "inline-block";
-      var w = vi.width, h = vi.height;
-      bstyle.textAlign = "left"; bstyle.top = "0px"; bstyle.left = "0px"; bstyle.width = w+ "px"; bstyle.height = h+ "px";
+      var w = vi.width,
+          h = vi.height;
+      bstyle.textAlign = "left";
+      bstyle.top = "0px";
+      bstyle.left = "0px";
+      bstyle.width = w+ "px";
+      bstyle.height = h+ "px";
       outline.appendChild(background);
       bstyle.filter = "progid:DXImageTransform.Microsoft.Compositor";
       background.filters.item('DXImageTransform.Microsoft.Compositor').Function = 23;
-      var circle = '<v:shape style="display:inline-block; position:relative; antialias:false; top:0px; left:0px;" coordsize="' +w+ ' ' +h+ '" path="' +ellipse+ '" stroked="f">' +ele.outerHTML+ '</v:shape>';
-      var data = tar._tar.path.value;
+      var circle = '<v:shape style="display:inline-block; position:relative; antialias:false; top:0px; left:0px;" coordsize="' +w+ ' ' +h+ '" path="' +ellipse+ '" stroked="f">' +ele.outerHTML+ '</v:shape>',
+          data = tar._tar.path.value;
       background.innerHTML = '<v:shape style="display:inline-block; position:relative; top:0px; left:0px;" coordsize="' +w+ ' ' +h+ '" path="' +data+ '" stroked="f" fillcolor="' +grad._color[grad._color.length-1]+ '" ></v:shape>';
       background.filters[0].apply();
       background.innerHTML = circle;
       background.filters[0].play();
       tar._tar.parentNode.insertBefore(background, tar._tar);
       tar._tar.filled = "false";
-      ellipse = outline = background = style = fontSize = bstyle = circle = data = list = gt = cx = cy = r = w = h = matrix = void 0;
+      ellipse = outline = background = style = fontSize = bstyle = circle = data = list = mr = gt = cx = cy = r = w = h = matrix = void 0;
     } else if (!ele.parentNode){
       tar._tar.appendChild(ele);
     }
@@ -8412,7 +8448,7 @@ NAIBU._noie_createFont = function(/*Element*/ ti, /*Element*/ font, /*boolean*/
       dx = parseFloat(ti.getAttributeNS(null, "x") || 0),
       dy = parseFloat(ti.getAttributeNS(null, "y") || 0),
       fontSize = parseFloat(style.getPropertyValue("font-size")),
-      fe = fontSize / em;
+      fe = fontSize / em,
       ds = false, npdlist = ["fill",
   "fill-opacity",
   "stroke",
@@ -8465,7 +8501,12 @@ NAIBU._noie_createFont = function(/*Element*/ ti, /*Element*/ font, /*boolean*/
             matrix.a = fe;
             matrix.d = -fe;
             for (var j=0;j<npdlist.length;++j){
-              var nj = npdlist[j], tg = ti.getAttributeNS(null, nj);
+              var nj = npdlist[j],
+                  tg = ti.getAttributeNS(null, nj) || style.getPropertyValue(nj);
+              if (nj === "stroke-width") {
+                tg = style.getPropertyCSSValue(nj).getFloatValue(1) / fe;
+                tg += "";
+              }
               if (tg) {
                 path.setAttributeNS(null, nj, tg);
               }