svnno****@sourc*****
svnno****@sourc*****
2009年 11月 7日 (土) 23:23:28 JST
Revision: 1398
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1398
Author: dhrname
Date: 2009-11-07 23:23:28 +0900 (Sat, 07 Nov 2009)
Log Message:
-----------
1, Firefoxでの_noie_createFontの実装を進めた
2, スタイル情報の取得は、動的に取得のできるdefaultView.getComputedStyleを用いることにした
Modified Paths:
--------------
branches/05x/053/sie.js
Modified: branches/05x/053/sie.js
===================================================================
--- branches/05x/053/sie.js 2009-11-07 11:29:39 UTC (rev 1397)
+++ branches/05x/053/sie.js 2009-11-07 14:23:28 UTC (rev 1398)
@@ -1926,30 +1926,32 @@
var tsrc = doc.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face-uri");
for (var i=0;i<tsrc.length;++i) {
var src = tsrc[i].getAttributeNS("http://www.w3.org/1999/xlink", "href"), ids = src.substring(src.indexOf("#")+1, src.length);
- getURL(src.replace(/#.+$/, ""), _noie_font, [ {id : ids, style:{}} ], 1);
+ getURL(src.replace(/#.+$/, ""), _noie_font, [ {id : ids, style : {}, docu : doc} ], 1);
}
};
function _noie_font(data) {
if (data.success) {
- var doc = (new DOMParser()).parseFromString(data.content);
+ var doc = (new DOMParser()).parseFromString(data.content, "text/xml");
//getElementByIdは使えないので注意(DTDでの指定が必要)
var font = doc.getElementsByTagNameNS(NAIBU.svgNameSpace, "font").item(0);
var familyName = font.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face").item(0).getAttributeNS(null, "font-family");
if (familyName && font.getAttributeNS(null, "id") === data.obj[0].id) {
- var textElements = document.getElementByTagNameNS(NAIBU.svgNameSpace, "text");
+ var textElements = data.obj[0].docu.getElementsByTagNameNS(NAIBU.svgNameSpace, "text");
for (var i=0,tli=textElements.length;i<tli;++i) {
- var ti = textElements[i];
- if ((ti.getProperty("font-family") || "serif").indexOf(familyName) > -1) {
- NAIBU._ie_createFont(ti, font);
+ var ti = textElements[i], style = data.obj[0].docu.defaultView.getComputedStyle(ti, '');
+ if (style.fontFamily.indexOf(familyName) > -1) {
+ NAIBU._noie_createFont(ti, font);
}
}
}
+ doc = data = null;
}
};
NAIBU._noie_createFont = function(/*Element*/ ti, /*Element*/ font) {
+ var style = ti.ownerDocument.defaultView.getComputedStyle(ti, '')
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;
+ var dx = parseFloat(ti.getAttributeNS(null, "x")), fontSize = parseFloat(style.fontSize), dy = parseFloat(ti.getAttributeNS(null, "y")), fe = fontSize / em;
while(node) {
data = node.data;
if (data !== void 0) { //dataがある場合
@@ -1964,7 +1966,7 @@
}
for (var i=0,adv=0;i<data.length;++i) {
if (advanceX[i] !== void 0) { //配列に含まれていれば
- var path = document.createElementNS(NAIBU.svgNameSpace, "path");
+ var path = ti.ownerDocument.createElementNS(NAIBU.svgNameSpace, "path");
//advance、すなわち字幅の長さ分、ずらしていく
var x = dx + adv*fe;
ti.parentNode.insertBefore(path, ti);