[Sie-announce] SIEコード [3098] 0.89 merged

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2011年 11月 16日 (水) 22:54:25 JST


Revision: 3098
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=3098
Author:   dhrname
Date:     2011-11-16 22:54:25 +0900 (Wed, 16 Nov 2011)

Log Message:
-----------
0.89 merged

Modified Paths:
--------------
    trunk/sie.js

Property Changed:
----------------
    trunk/sie.js

Modified: trunk/sie.js
===================================================================
--- trunk/sie.js	2011-11-16 13:49:16 UTC (rev 3097)
+++ trunk/sie.js	2011-11-16 13:54:25 UTC (rev 3098)
@@ -449,8 +449,6 @@
  *属性ノード。削除不可。
  */
 function Attr() {
-  Node.apply(this);
-  delete this._capter;
   return this;
 };
 Attr.prototype = new Node();                    //ノードのプロトタイプチェーンを作って、継承
@@ -1793,8 +1791,12 @@
     } else if (propertyName === "opacity") {
       this._list._opacity = +value;
     } else if (propertyName === "font-size") {
-      if (/(%|em)/.test(value)) {
-        this._list.fontSize = parseFloat(value);
+      if (/(%|em|ex)/.test(value)) {
+        tg = "_" +RegExP.$1
+        ti[tg] = parseFloat(value);
+      } else {
+        this._em = this._ex = this["_%"] = null;
+        this._list._fontSize = parseFloat(value);
       }
     }
     cssText = void 0;
@@ -1868,6 +1870,7 @@
   this._value = null;
   this._percent = 0; //単位に%が使われていた場合、このプロパティの数値を1%として使う
   this._empercent = 0;
+  this._em = this._ex = this["_%"] = null; //emが単位の場合、getComputedStyleメソッドなどで使う
   /*void*/ this.setFloatValue = function(/*short*/ unitType, /*float*/ floatValue) {
     if ((/*CSSPrimitiveValue.CSS_UNKNOWN*/ 0 >= unitType) && (unitType >= /*CSSPrimitiveValue.CSS_STRING*/ 19)) { //浮動小数点数単位型をサポートしないCSS単位である場合
       throw new DOMException(DOMException.INVALID_ACCESS_ERR);
@@ -2162,14 +2165,14 @@
 };
 /*CSSStyleDeclaration*/ ViewCSS.prototype.getComputedStyle = function( /*Element*/ elt, /*string*/ pseudoElt) {
   var s = new CSSStyleDeclaration(),
-      ct, p;
-  ct = null
-  p = {length:0, _opacity:1, _fontSize:12};
+      el, es,
+      eso = 1;
   //クロージャを利用して、カスケーディングを実現する
   s.getPropertyCSSValue = (function(elt, td, s){
     return function( /*string*/ propertyName) {
       var el = elt,
-      css = null;
+          css = null,
+          n;
       while (el && (!css || (css.cssValueType === /*CSSValue.CSS_INHERIT*/ 0))) {
         if (el._runtimeStyle && el._runtimeStyle[propertyName]) {
           css = el._runtimeStyle.getPropertyCSSValue(propertyName);
@@ -2190,21 +2193,41 @@
         //デフォルト値を探す
         td && (css = td[propertyName]);
       }
-      if (css && ((css.paintType === /*SVGPaint.SVG_PAINTTYPE_CURRENTCOLOR*/ 102) || (css.colorType === /*SVGColor.SVG_COLORTYPE_CURRENTCOLOR*/ 3))) {
-        css.setRGBColor && css.setRGBColor(s.getPropertyValue("color"));
+      if (css && css.setRGBColor && ((css.paintType === /*SVGPaint.SVG_PAINTTYPE_CURRENTCOLOR*/ 102) || (css.colorType === /*SVGColor.SVG_COLORTYPE_CURRENTCOLOR*/ 3))) {
+        css.setRGBColor(s.getPropertyValue("color"));
+      } else if (css && (css._em || css._ex || css["_%"])) {
+        el = elt;
+        n = 1;
+        while (el) {
+          if (el.style._list._fontSize) {
+            n = el.style._list._fontSize;
+            break;
+          }
+          el = el.parentNode;
+        }
+        if (css._em) {
+          n *= css._em;
+        } else if (css._ex) {
+          n *= css._ex * 0.5;
+        } else if (css["_%"]) {
+          n *= css["_%"] / 100; 
+        }
+        css.cssText = "font-size:" +n+ "px";
       }
       el = void 0;
       return css;
     };
    })(elt, this._defaultCSS, s); //_defaultCSSはデフォルト値の設定
-  if (!!elt.style) {
-    var eso = elt.style._list._opacity || elt._attributeStyle._list._opacity;
-  } else {
-    var eso = 1;
+  el = elt;
+  while (el) {
+    if (el.style) {
+      es = el.style._list._opacity || el._attributeStyle._list._opacity;
+      eso *= es || 1;
+    }
+    el = el.parentNode;
   }
-  s._list._opacity = p._opacity * (eso || 1);
-  s._list._fontSize = p._fontSize;
-  pelt = eso = p = void 0;
+  s._list._opacity = eso;
+  el = pelt = eso = es = void 0;
   s._document = elt.ownerDocument;
   return s;
 };
@@ -2543,7 +2566,8 @@
       if (!!n) {
         n = n[0];
       }
-      if (n === "%") {
+      if (!n) { //軽量化のためにチェックを設ける
+      } else if (n === "%") {
         if (tar._x1width[name]) {
           tea.baseVal._percent = tvw * 0.01;
         } else if (tar._y1height[name]) {
@@ -3032,8 +3056,16 @@
 //                    raises( SVGException );
 /*void*/ this.setColor =function(/*unsigned short*/ colorType, /*DOMString*/ rgbColor, /*DOMString*/ iccColor ){
   this.colorType = colorType;
-  if (rgbColor && ((colorType === /*SVGColor.SVG_COLORTYPE_RGBCOLOR*/ 1) || (colorType === /*SVGColor.SVG_COLORTYPE_CURRENTCOLOR*/ 3))) {
+  if ((colorType === /*SVGColor.SVG_COLORTYPE_RGBCOLOR*/ 1) && iccColor) {
+    throw new SVGException(SVGException.SVG_INVALID_VALUE_ERR);
+  } else if (colorType === /*SVGColor.SVG_COLORTYPE_RGBCOLOR*/ 1) {
     this.setRGBColor(rgbColor);
+  } else if (rgbColor && (colorType === /*SVGColor.SVG_COLORTYPE_CURRENTCOLOR*/ 3)) {
+    this.setRGBColor(rgbColor);
+  } else if ((colorType === /*SVGColor.SVG_COLORTYPE_UNKNOWN*/ 0) && (rgbColor || iccColor)) {
+    throw new SVGException(SVGException.SVG_INVALID_VALUE_ERR);
+  } else if ((colorType === /*SVGColor.SVG_COLORTYPE_RGBCOLOR_ICCCOLOR*/ 2) && (rgbColor || !iccColor)) {
+    throw new SVGException(SVGException.SVG_INVALID_VALUE_ERR);
   }
   colorType = rgbColor = void 0;
 }
@@ -3552,12 +3584,12 @@
             }
           }
           if (((tar.localName === "g") || (tar.localName === "a")) && (tar.namespaceURI === "http://www.w3.org/2000/svg")) {
-            tar._currentStyle = tar._cacheMatrix = null; //キャッシュを消去
+            tar._cacheMatrix = void 0; //キャッシュを消去
             if (tar.firstChild) {
               slist = tar.getElementsByTagNameNS("http://www.w3.org/2000/svg", "*");
               for (var i=0,sli=slist.length;i<sli;++i) {
                 tar = slist[i];
-                tar._currentStyle = tar._cacheMatrix = null;
+                tar._cacheMatrix = void 0;
                 evtt = tar.ownerDocument.createEvent("MutationEvents");
                 evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
                 evtt.target = tar;
@@ -6440,7 +6472,6 @@
     }
     tnext = tpart = isLast = void 0;
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
-      evt.target._currentStyle = void 0; //キャッシュが生成されることがあるので削除
       var tar = evt.target,
           ti = tar.firstChild,
           ttp = tar._tar,
@@ -6451,7 +6482,8 @@
           tlen = tar.getComputedTextLength(),
           anchor = style.getPropertyValue("text-anchor"),
           tedeco = style.getPropertyValue("text-decoration"), //text-decorationは継承しないので、個々に設定する
-          ttps = ttp.style;
+          ttps = ttp.style,
+          ae = [];
       ttps.fontSize = n + "px";
       ttps.fontFamily = style.getPropertyValue("font-family");
       ttps.fontStyle = style.getPropertyValue("font-style");
@@ -6484,7 +6516,7 @@
             sty.marginTop = tar._isYokogaki ? -n-5+ "px" : "-5px";
             sty.lineHeight = n+10+ "px";
             sty.textDecoration = tedeco;
-            sty.display = "block";
+            sty.display = "none"
             ttp.appendChild(ti._tars[ij]);
             sty = p = void 0;
           }
@@ -6505,6 +6537,7 @@
           } else if ((ti.localName === "a") && (ti.namespaceURI === "http://www.w3.org/2000/svg") && ti.firstChild) {
             ttp = ti._tar;
             ti = ti.firstChild;
+            ae[ae.length] = ti;
             i-=2;
           }
         }
@@ -6513,7 +6546,10 @@
           cursor = style.getPropertyCSSValue("cursor"),
           vis = style.getPropertyCSSValue("visibility"),
           disp = style.getPropertyCSSValue("display"),
-          tts = tar._tar.style;
+          tts = tar._tar.style,
+          tft = tar.firstChild._tars,
+          ttt = tft[0].innerText.charAt(0), //あらかじめ初期化しておく
+          tfti;
       if (color === "none"){
         tts.color = "transparent";
       } else if (color.indexOf("url") === -1) {
@@ -6526,29 +6562,22 @@
         tts.cursor = tc.substring(tc.indexOf(":")+1, tc.length);
         tc = void 0;
       }
-      if (vis && !vis._isDefault) {
-        tts.visibility = vis.cssText.substring(vis.cssText.indexOf(":")+1, vis.cssText.length);
-      }
-       if (disp && !disp._isDefault && (disp.cssText.indexOf("none") > -1)) {
-        tts.display = "none";
-            } else if (disp && !disp._isDefault) {
-        tts.display = "block";
-      }
       if ((tar.x.baseVal.numberOfItems === 1) && (tar.y.baseVal.numberOfItems === 1)
           && tar._isYokogaki && (tar.firstChild.nodeName === "#text")) {
         /*xとy属性が一つの値しか取らないとき、字詰めの処理をすべてブラウザに任せておく。
          *以下では、他のdiv要素のテキストをすべて、最初のdiv要素にまとめている
          */
-        var tft = tar.firstChild._tars,
-            ttt = tft[0].innerText.charAt(0); //あらかじめ初期化しておく
         for (var i=1, tli=tft.length;i<tli;++i) {
-          ttt += tft[i].innerText;
-          tft[i].style.display = "none";
+          tfti = tft[i];
+          ttt += tfti.innerText;
+          tfti.parentNode.removeChild(tfti);
         }
+        //以下でinnerTextやinnerHTMLを使うのは、IE6でエラーとなる可能性がある
         tft[0].replaceChild(_doc.createTextNode(ttt), tft[0].firstChild);
-        ttt = tft = void 0;
+        ttt = void 0;
       }
-      var isRect = true;
+      var isRect = true,
+          di = "block";
       if (ttp.lastChild) {
         if (ttp.lastChild.nodeName !== "rect") {
           isRect = false;
@@ -6564,8 +6593,26 @@
         backr.stroked = backr.filled = "false";
         ttp.appendChild(backr);
       }
+      if (vis && !vis._isDefault) {
+        tts.visibility = vis.cssText.substring(vis.cssText.indexOf(":")+1, vis.cssText.length);
+      }
+      /*dipslayプロパティだけは個々に設定しておく必要がある*/
+      if (disp && !disp._isDefault && (disp.cssText.indexOf("none") > -1)) {
+        di = "none";
+            } else if (disp && !disp._isDefault) {
+        di = "block";
+      }
+      for (var i=0, j=0, tli=tft.length;i<tli;++i) {
+        tft[i].style.display = di;
+        while (ae[j]) { //a要素を処理
+          for (var l=0, tli=ae[j]._tars.length;l<tli;++l) {
+            ae[j]._tars[l].style.display = di;
+          }
+          ++j;
+        }
+      }
       delete tar._cacheMatrix;
-      isRect = evt = tar = style = tedeco = tpp = ttpc = style = color = cursor = disp = vis = ttps = backr = backrs = void 0;
+      ae = isRect = evt = tar = style = tedeco = tpp = ttpc = style = color = cursor = disp = vis = ttps = backr = backrs = di = tft = void 0;
     }, false);
     evt = tar = void 0;
   },false);


Property changes on: trunk/sie.js
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/04x/040/sie.js:812-829
/branches/04x/041/sie.js:891-923
/branches/04x/042/sie.js:927-967
/branches/04x/043/sie.js:969-1013
/branches/04x/044/sie.js:1015-1067
/branches/04x/045/sie.js:1069-1078
/branches/04x/046/sie.js:1080-1129
/branches/04x/047/sie.js:1131-1164
/branches/04x/048/sie.js:1166-1180
/branches/04x/sie.js:830-1181
/branches/05x/050/sie.js:1183-1201
/branches/05x/051/sie.js:1207-1323
/branches/05x/052/sie.js:1325-1352
/branches/05x/053/sie.js:1354-1400
/branches/05x/054/sie.js:1403-1422
/branches/05x/055/sie.js:1424-1454
/branches/05x/056/sie.js:1456-1491
/branches/05x/057/sie.js:1496-1523
/branches/05x/058/sie.js:1526-1590
/branches/05x/sie.js:1183-1594
/branches/06x/060/sie.js:1603-1850
/branches/06x/sie.js:1599-2355
/branches/07x/sie.js:2357-2748
/branches/08x/sie.js:2750-3019,3026,3059
   + /branches/04x/040/sie.js:812-829
/branches/04x/041/sie.js:891-923
/branches/04x/042/sie.js:927-967
/branches/04x/043/sie.js:969-1013
/branches/04x/044/sie.js:1015-1067
/branches/04x/045/sie.js:1069-1078
/branches/04x/046/sie.js:1080-1129
/branches/04x/047/sie.js:1131-1164
/branches/04x/048/sie.js:1166-1180
/branches/04x/sie.js:830-1181
/branches/05x/050/sie.js:1183-1201
/branches/05x/051/sie.js:1207-1323
/branches/05x/052/sie.js:1325-1352
/branches/05x/053/sie.js:1354-1400
/branches/05x/054/sie.js:1403-1422
/branches/05x/055/sie.js:1424-1454
/branches/05x/056/sie.js:1456-1491
/branches/05x/057/sie.js:1496-1523
/branches/05x/058/sie.js:1526-1590
/branches/05x/sie.js:1183-1594
/branches/06x/060/sie.js:1603-1850
/branches/06x/sie.js:1599-2355
/branches/07x/sie.js:2357-2748
/branches/08x/sie.js:2750-3097




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