OSDN Git Service

Specとsvgモジュールを編集して、text要素内にある未知の要素に対応させた
authordhrname <dhrname@users.sourceforge.jp>
Thu, 19 Apr 2012 11:03:09 +0000 (20:03 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Thu, 19 Apr 2012 11:03:09 +0000 (20:03 +0900)
org/w3c/dom/svg.js
tool/Spec/spec/SvgDomSpec.js

index d5eb50d..13ad03a 100644 (file)
@@ -3888,18 +3888,22 @@ t.prototype = new SVGElement();
   if (this._length) {
     return (this._length);
   } else {
-    var t = this.firstChild,
-        s = 0;
-    while (t) {
-      if (t.length && (t.nodeType === /*Node.TEXT_NODE*/ 3)) {
-        s += t.length;
-      } else if (t.getNumberOfChars) { //tspan要素などであれば
-        s += t.getNumberOfChars();
-      }
-      t = t.nextSibling;
-    }
+    var s = 0,
+        f = function (ts) {
+              while (ts) {
+                if (ts.length && (ts.nodeType === /*Node.TEXT_NODE*/ 3)) {
+                  s += ts.length;
+                } else if (ts.getNumberOfChars) { //tspan要素などであれば
+                  s += ts.getNumberOfChars();
+                } else if (ts.firstChild && (ts.nodeType === /*Node.ELEMENT_NODE*/ 1)) {
+                  f(ts.firstChild);                          //再帰的に呼び出す
+                }
+                ts = ts.nextSibling;
+              }
+              ts = void 0;
+            };
+    f(this.firstChild);
     this._length = s;
-    t = void 0;
     return s;
   }
 };
index 49fb7ee..d5338ee 100644 (file)
@@ -1312,6 +1312,10 @@ describe("SVG Spec in JavaScript", function() {
         s.appendChild(s.ownerDocument.createTextNode(str));
         expect(s.getNumberOfChars()).toEqual(s.firstChild.length);
         s.removeChild(s.firstChild);
+        s.appendChild(s.ownerDocument.createElementNS("http://sie.sourceforge.jp", "hoge"))
+         .appendChild(s.ownerDocument.createTextNode(str));
+        expect(s.getNumberOfChars()).toEqual(s.firstChild.firstChild.length);
+        s.removeChild(s.firstChild);
         str = "";
       }
     });