svnno****@sourc*****
svnno****@sourc*****
2011年 9月 12日 (月) 20:29:50 JST
Revision: 2937
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2937
Author: dhrname
Date: 2011-09-12 20:29:49 +0900 (Mon, 12 Sep 2011)
Log Message:
-----------
getStartPositionOfCharメソッドの変数を軽量化のため整理
Modified Paths:
--------------
branches/08x/085/org/w3c/dom/svg.js
Modified: branches/08x/085/org/w3c/dom/svg.js
===================================================================
--- branches/08x/085/org/w3c/dom/svg.js 2011-09-12 11:02:22 UTC (rev 2936)
+++ branches/08x/085/org/w3c/dom/svg.js 2011-09-12 11:29:49 UTC (rev 2937)
@@ -3929,22 +3929,29 @@
if (charnum > this.getNumberOfChars() || charnum < 0) {
throw (new DOMException(DOMException.INDEX_SIZE_ERR));
} else {
- var tar = this, ti = tar.firstChild, tp = tar.parentNode;
+ var tar = this,
+ ti = tar.firstChild,
+ tp = tar.parentNode;
if (!!!tar._list) {
tar._list = [];
- var chars = tar._chars; //現在、何文字目にあるのか
- var x = tar._stx, y = tar._sty, n = 0; //現在のテキスト位置と順番
- var style = tar.ownerDocument.defaultView.getComputedStyle(tar, null);
- var isYokogaki = ((style.getPropertyValue("writing-mode")) === "lr-tb") ? true : false;
- var fontSize = parseFloat(style.getPropertyValue("font-size"));
- var tx = tar.x.baseVal, ty = tar.y.baseVal, tdx = tar.dx.baseVal, tdy = tar.dy.baseVal;
+ var chars = tar._chars, //現在、何文字目にあるのか
+ x = tar._stx, y = tar._sty, n = 0, //現在のテキスト位置と順番
+ style = tar.ownerDocument.defaultView.getComputedStyle(tar, null),
+ isYokogaki = ((style.getPropertyValue("writing-mode")) === "lr-tb") ? true : false,
+ fontSize = parseFloat(style.getPropertyValue("font-size")),
+ tx = tar.x.baseVal, ty = tar.y.baseVal, tdx = tar.dx.baseVal, tdy = tar.dy.baseVal;
/*親要素の属性も参照しておく*/
if (tp && ((tp.localName === "text") ||(tp.localName === "tspan"))) {
- var ptx = tp.x.baseVal, pty = tp.y.baseVal, ptdx = tp.dx.baseVal, ptdy = tp.dy.baseVal;
+ var ptx = tp.x.baseVal,
+ pty = tp.y.baseVal,
+ ptdx = tp.dx.baseVal,
+ ptdy = tp.dy.baseVal;
} else {
var ptx = pty = ptdx = ptdy = {numberOfItems : 0};
}
- var kern = "f ijltIr.,:;'-\"()", akern = "1234567890abcdeghknopquvxyz";
+ var kern = "f ijltIr.,:;'-\"()",
+ akern = "1234567890abcdeghknopquvxyz",
+ tt, alm, tdc, tcca, p, almx, almy, tlist, tg;
if (isYokogaki && (tar.localName === "text")) {
y += fontSize * 0.2;
} else if (tar.localName === "text"){
@@ -3952,7 +3959,7 @@
}
while (ti) {
if (ti.nodeType === Node.TEXT_NODE) {
- var tt = ti._tars;
+ tt = ti._tars;
/*tspan要素のx属性で指定された座標の個数よりも、文字数が多い場合は、祖先(親)のx属性を
*使う。また、属性が指定されていないときも同様に祖先や親を使う。
*もし、仮に祖先や親がx属性を指定されていなければ、現在のテキスト位置(変数xに格納している)を使う。
@@ -3995,10 +4002,10 @@
} else if (n < tdy.numberOfItems) {
y += tdy.getItem(n).value;
}
- var alm = 0;
+ alm = 0;
if (isYokogaki) {
//カーニングを求めて、字の幅を文字ごとに調整する
- var tdc = ti.data.charAt(i);
+ tdc = ti.data.charAt(i);
if (kern.indexOf(tdc) > -1) {
alm = fontSize * 0.68;
} else if (tdc === "s"){
@@ -4010,18 +4017,18 @@
} else {
alm = fontSize * 0.3;
}
- var tcca = tdc.charCodeAt(0);
+ tcca = tdc.charCodeAt(0);
if ((12288 <= tcca) && (tcca <= 65533)) {
alm = -fontSize * 0.01;
if ((tdc === "う") || (tdc === "く") || (tdc === "し") || (tdc === "ち")) {
alm += fontSize * 0.2;
}
}
- tcca = null;
}
- tar._list[tar._list.length] = x;
- tar._list[tar._list.length] = y;
- tar._list[tar._list.length] = fontSize - alm;
+ tlist = tar._list;
+ tlist[tlist.length] = x;
+ tlist[tlist.length] = y;
+ tlist[tlist.length] = fontSize - alm;
if (isYokogaki) {
x += fontSize;
x -= alm;
@@ -4042,8 +4049,9 @@
ti._stx = x;
ti._sty = y;
ti._chars = chars;
- var p = ti.getStartPositionOfChar(ti.getNumberOfChars());
- var almx = 0, almy = 0;
+ p = ti.getStartPositionOfChar(ti.getNumberOfChars());
+ almx = 0;
+ almy = 0;
if (isYokogaki) {
almx = ti._list[ti._list.length-1];
} else {
@@ -4052,10 +4060,9 @@
x = ti._list[ti._list.length-3] + almx;
y = ti._list[ti._list.length-2] + almy;
tar._list = tar._list.concat(ti._list);
- var tg = ti.getNumberOfChars();
+ tg = ti.getNumberOfChars();
n += tg;
chars += tg;
- p = tg = null;
ti = ti.nextSibling;
} else if ((ti.localName === "a") && (ti.namespaceURI === "http://www.w3.org/2000/svg") && ti.firstChild) {
/*a要素のテキストノードも処理する*/
@@ -4065,8 +4072,8 @@
}
}
tar._isYokogaki = isYokogaki //getEndPositionOfCharメソッドなどで使う
- tar = ti = tp = ptx = pty = tx = ty = chars = style = x = y = isYokogaki = null;
}
+ tar = ti = tp = ptx = pty = tx = ty = chars = style = x = y = isYokogaki = kern = akern = tt = alm = tdc = tcca = p = almx = almy = tlist = tg = null;
var s = this.ownerDocument.documentElement.createSVGPoint();
s.x = this._list[charnum*3];
s.y = this._list[charnum*3 + 1];