svnno****@sourc*****
svnno****@sourc*****
2011年 1月 3日 (月) 23:08:51 JST
Revision: 2273 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2273 Author: dhrname Date: 2011-01-03 23:08:50 +0900 (Mon, 03 Jan 2011) Log Message: ----------- チケット #23598「text要素の中のa要素が表示されない」バグを修正 Ticket Links: :----------- http://sourceforge.jp/projects/sie/tracker/detail/23598 Modified Paths: -------------- branches/06x/067/org/w3c/dom/svg.js Modified: branches/06x/067/org/w3c/dom/svg.js =================================================================== --- branches/06x/067/org/w3c/dom/svg.js 2011-01-03 09:49:59 UTC (rev 2272) +++ branches/06x/067/org/w3c/dom/svg.js 2011-01-03 14:08:50 UTC (rev 2273) @@ -3811,7 +3811,7 @@ var n = parseFloat(style.getPropertyValue("font-size")) * Math.sqrt(Math.abs(tar.getScreenCTM()._determinant())); ttp.style.fontSize = n + "px"; ttp.style.fontFamily = style.getPropertyValue("font-family"); - var tod = tar.ownerDocument.documentElement; + var tod = tar.ownerDocument.documentElement, ttpc = ttp; //ttpcはttpのキャッシュ var tlen = tar.getComputedTextLength(), anchor = style.getPropertyValue("text-anchor"); /*ここでの変数jは前回ノードまでの総文字数*/ for (var i=0, j=0, tli=tar.getNumberOfChars();i<tli;++i) { @@ -3843,8 +3843,12 @@ sty = p = null; } if (ti.nodeName === "#text") { - if ((ti.data.length+j) <= i+1) { + if ((ti.data.length+j) <= i+1) { //テキストノード内の文字をすべて処理し終えれば j = j + ti.data.length; + if (ti.parentNode.localName === "a") { + ti = ti.parentNode; + ttp = ttpc; + } ti = ti.nextSibling; } } else if (!!ti.getNumberOfChars) { @@ -3853,9 +3857,9 @@ ti = ti.nextSibling; } } else if ((ti.localName === "a") && (ti.namespaceURI === "http://www.w3.org/2000/svg") && ti.firstChild) { + ttp = ti._tar; ti = ti.firstChild; - } else if (ti.parentNode.localName === "a") { - ti = ti.parentNode.nextSibling; + --i; } } } @@ -3895,7 +3899,7 @@ ttp.appendChild(backr); } delete tar._cacheMatrix, tar._currentStyle; - isRect = evt = tar = style = null; + isRect = evt = tar = style = tpp = ttpc = null; }, false); evt = tar = null; },false);