svnno****@sourc*****
svnno****@sourc*****
2009年 11月 7日 (土) 20:27:32 JST
Revision: 1396
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1396
Author: dhrname
Date: 2009-11-07 20:27:32 +0900 (Sat, 07 Nov 2009)
Log Message:
-----------
Modified Paths:
--------------
branches/05x/053/sie.js
Modified: branches/05x/053/sie.js
===================================================================
--- branches/05x/053/sie.js 2009-11-05 14:50:47 UTC (rev 1395)
+++ branches/05x/053/sie.js 2009-11-07 11:27:32 UTC (rev 1396)
@@ -1911,14 +1911,14 @@
var obj = document.getElementsByTagName("object");
for (var i=0;i<obj.length;++i) {
var s, obji = obj[i];
- if (obji.getSVGDocument === void 0) { //void 0はundefinedのこと
+ if (obji.getSVGDocument !== void 0 && window.opera === void 0) { //Operaでなければ、かつ、void 0はundefinedのこと
if (obji.contentDocument !== void 0) { //Firefoxの場合
s = obji.contentDocument;
} else {
s = obji.getSVGDocument();
}
+ NAIBU._fontSearchURI(s);
}
- NAIBU._fontSearchURI(s);
NAIBU._fontSearchURI(document);
}
};
@@ -1947,25 +1947,38 @@
}
};
NAIBU._noie_createFont = function(/*Element*/ ti, /*Element*/ font) {
- var node = ti.firstChild, data, glyphs = font.getElementsByTagNameNS(NAIBU.svgNameSpace, "glyph");
- var advanceX = [], advX = parseFloat(font.getAttribute("horiz-adv-x")), originX = parseFloat(font.getAttribute("horiz-origin-x") || 0), originY = parseFloat(font.getAttribute("horiz-origin-y") || 0); //字幅とフォントの原点の設定
- var dx = parseFloat((ti.getAttributeNS(null, "x") || 0)), dy = parseFloat((ti.getAttributeNS(null, "y") || 0)), fontSize = parseFloat((ti.getProperty("font-size") || 12));
- while(node) {
+ var node = ti.firstChild, data, glyphs = font.getElementsByTagNameNS(NAIBU.svgNameSpace, "glyph"), em = parseFloat(font.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face").item(0).getAttribute("units-per-em") || 0);
+ var advX = parseFloat(font.getAttributeNS(null, "horiz-adv-x")), originX = parseFloat(font.getAttributeNS(null, "horiz-origin-x") || 0), originY = parseFloat(font.getAttributeNS(null, "horiz-origin-y") || 0); //字幅とフォントの原点の設定
+ var dx = parseFloat(ti.getAttributeNS(null, "x")), fontSize = parseFloat(ti.getProperty("font-size")), dy = parseFloat(ti.getAttributeNS(null, "y")), fe = fontSize / em;
+ while(node) {
data = node.data;
if (data !== void 0) { //dataがある場合
+ var advanceX = [], glyphData = [];
for (var i=0,gli=glyphs.length;i<gli;++i) {
- var index = data.indexOf(glyphs[i].getAttributeNS(null, "unicode")), path = document.createElementNS(NAIBU.svgNameSpace, "path");
- //fontSizeと文字数をかけた長さ分、ずらしていく
- var x = dx + fontSize * index, y = dy;
- advanceX[index] = parseFloat(glyphs[i].getAttribute("horiz-adv-x") || advX);
- ti.insertBefore(path);
- NAIBU.pathData(glyphs[i].getAttributeNS(null, "d"), path, false, x, y);
+ //indexは該当する文字が何番目にあるかの数字
+ var index = data.indexOf(glyphs[i].getAttributeNS(null, "unicode"));
+ if (index > -1) {
+ advanceX[index] = parseFloat(glyphs[i].getAttributeNS(null, "horiz-adv-x") || advX); //字幅を収納
+ glyphData[index] = glyphs[i].getAttributeNS(null, "d");
+ }
}
+ for (var i=0,adv=0;i<data.length;++i) {
+ if (advanceX[i] !== void 0) { //配列に含まれていれば
+ var path = document.createElementNS(NAIBU.svgNameSpace, "path");
+ //advance、すなわち字幅の長さ分、ずらしていく
+ var x = dx + adv*fe;
+ ti.parentNode.insertBefore(path, ti);
+ NAIBU.pathData(glyphData[i], path, false, 0, 0, (new Matrix(fe, 0, 0, -fe, x, dy)));
+ adv += advanceX[i];
+ }
+ }
+ advanceX = glyphData = null;
} else {
- NAIBU._ie_createFont(node, font);
+ NAIBU._noie_createFont(node, font);
}
node = node.nextSibling;
}
+ ti.style.visibility = "hidden";
};
NAIBU.pathData = function(/*string*/ data, /*Element*/ p, /*boolean*/ t, /*float*/ w, h, /*Matrix*/ matrix) {
//CTMでフォントを移動させておく