svnno****@sourc*****
svnno****@sourc*****
2010年 4月 26日 (月) 23:47:16 JST
Revision: 1804 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1804 Author: dhrname Date: 2010-04-26 23:47:16 +0900 (Mon, 26 Apr 2010) Log Message: ----------- Modified Paths: -------------- branches/ufltima/dom/svg.js Modified: branches/ufltima/dom/svg.js =================================================================== --- branches/ufltima/dom/svg.js 2010-04-26 14:46:44 UTC (rev 1803) +++ branches/ufltima/dom/svg.js 2010-04-26 14:47:16 UTC (rev 1804) @@ -2720,66 +2720,6 @@ *charnum番目の文字からnchars+charnum-1番目までの文字列の長さを求めて返す */ /*float*/ SVGTextContentElement.prototype.getSubStringLength = function(/*unsigned long*/ charnum, /*unsigned long*/ nchars ) { - var style = this.ownerDocument.defaultView.getComputedStyle(this, null); - var isYokogaki = ((style.getPropertyValue("writing-mode")) === "lr-tb") ? true : false; - /*変数fontSizeはCTM処理後の、fontの実際の大きさを算出するための変数。 - *つまり、CTMの行列式の2乗を掛け合わせることにより、fontの大きさにCTMを組み入れる - */ - var fontSize = parseFloat(style.getPropertyValue("font-size")); - /*変数startとendはそのノードの始まりと終わりの文字におけるポジション番号。 - *たとえば、<text>ab<tspan>cd</tspan>e</text>のtspan要素ノードにおいて、文字cのポジション番号は - *2であり、startに2という数値が格納される。endは3。 - * - *また、isStartは開始されたかどうかのBooleanで、fはカーニング用文字に一致させるための正規表現オブジェクト - */ - var s = 0, start = end = 0, t = this.firstChild, isStart = false, f = /[fijlt.,:;1]/g; - while (t) { - if (t.nodeName === "#text") { - var n = t.length, echar = charnum + nchars - 1, data; - end = start + n - 1; - if (((charnum<start) && (echar<start)) || ((charnum>end) && (echar>end))) { - isStart = false; - } else { //もし、ノードの中に該当する文字番号があれば - isStart = true; - s += n * fontSize; - var ec = echar >= end ? end : echar, cha = charnum <= start ? start : charnum; - s -= (cha-start) * fontSize; - s -= (end-ec) * fontSize; - data = t.substringData(cha, ec); - /*j,iなどは通常のアルファベットの半分(半角)に相当するため、 - *カーニングとしてその差分を文字の長さsから引いておく - */ - if (isYokogaki) { - var kerning = data.match(f).length; - } else { - var kerinig = 0; - } - s -= kerning; - } - start = end + 1; - n = data = kerning = null; - } else if (t.localName === "tspan") { - var n = t.getNumberOfChars(), echar = charnum + nchars - 1, data; - end = start + n - 1; - if (((charnum<start) && (echar<start)) || ((charnum>end) && (echar>end))) { - isStart = false; - } else { - var ec = echar > end ? end : echar, cha = charnum < start ? start : charnum; - s += t.getSubStringLength(cha, ec-cha); - } - if (isStart) { - if (isYokogaki) { - var td = t.dx; - } else { - var td = t.dy; - } - s += td.baseVal.getItem(0).value; //dx(dy)属性の分だけ増やす - } - start = end + 1; - } - t = t.nextSibling; - } - return s; } /*SVGPoint*/ SVGTextContentElement.prototype.getStartPositionOfChar = function (/*unsigned long*/ charnum ) { if (charnum > this.getNumberOfChars() || charnum < 0) {