svnno****@sourc*****
svnno****@sourc*****
2009年 10月 28日 (水) 23:39:41 JST
Revision: 1376
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1376
Author: dhrname
Date: 2009-10-28 23:39:41 +0900 (Wed, 28 Oct 2009)
Log Message:
-----------
Modified Paths:
--------------
branches/05x/053/sie.js
Modified: branches/05x/053/sie.js
===================================================================
--- branches/05x/053/sie.js 2009-10-28 11:53:27 UTC (rev 1375)
+++ branches/05x/053/sie.js 2009-10-28 14:39:41 UTC (rev 1376)
@@ -1832,24 +1832,28 @@
}
} catch(e) {stlog.add(e,17155);}
};
+
function _ie_svgfont() {
- var tsrc = document.getEelmentsByTagName("font-face-uri");
+ var tsrc = document.getEelmentsByTagName("FONT-FACE-URI");
for (var i=0;i<tsrc.length;++i) {
var src = fsrc[i].getAttribute("xlink:href");
getURL(src, _ie_font, [ {id : src.substring(src.indexOf("#"), src.length-1)} ], 1);
}
};
+NAIBU.svgNameSpace = "http://www.w3.org/2000/svg"
function _ie_font(data) {
if (data.sucesse) {
- var s = new DOMParser();
- var doc = s.pareseFromString(data.content);
- font = doc.getElementById(data.obj[0].id);
- familyName = font.getElementsByTagNameNS("http://www.w3.org/2000/svg", "font-face").item(0).getAttribute("font-family");
+ //responsXMLはDTD処理を行う可能性があるため、ここでは使わない
+ var doc = new ActiveXObject("MSXML2.DomDocument");
+ str = data.content.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->");
+ doc.loadXML(str);
+ var font = doc.getElementById(data.obj[0].id);
+ var familyName = font.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face").item(0).getAttribute("font-family");
if (familyName) {
var textElements = document.getElementByTagName("div");
for (var i=0,tli=textElements.length;i<tli;++i) {
- var ti = textElements[i];
- if (ti.style.fontFamily.indexOf(familyName) > -1) {
+ var ti = textElements[i], ts = ti.style, tsff = (!!ts.fontFamily) ? ts.fontFamily : "serif";
+ if (tsff.indexOf(familyName) > -1) {
NAIBU._ie_createFont(ti, font);
}
}
@@ -1864,12 +1868,70 @@
if (data !== void 0) { //dataがある場合
for (var i=0,gli=glyphs.length;i<gli;++i) {
var index = data.indexOf(glyphs[i].getAttribute("unicode")), path = document.createElement("v:shape");
- /*カーニング処理について(To DO)
- *カーニングに該当する文字を検索して、ずらしたい長さだけ、以降のxとyから引く必要がある
- */
- var x = dx * fontSize * index, y = dy * fontSize * index;
+ if (index > -1) {
+ //fontSizeと文字数をかけた長さ分、ずらしていく
+ var x = dx + fontSize * index, y = dy + fontSize * index;
+ ti.insertBefore(path);
+ NAIBU.pathData(glyphs[i].getAttribute("d"), path, true, x, y);
+ }
+ }
+ } else {
+ NAIBU._ie_createFont(node, font);
+ }
+ node = node.nextSibling;
+ }
+};
+//IE以外のブラウザ用
+function _noie_svgfont() {
+ 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.contentDocument !== void 0) { //Firefoxの場合
+ s = obji.contentDocument;
+ } else {
+ s = obji.getSVGDocument();
+ }
+ }
+ NAIBU._fontSearchURI(s);
+ NAIBU._fontSearchURI(document);
+ }
+};
+NAIBU._fontSearchURI = function(doc){
+ var tsrc = doc.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face-uri");
+ for (var i=0;i<tsrc.length;++i) {
+ var src = fsrc[i].getAttributeNS("http://www.w3.org/1999/xlink", "xlink:href");
+ getURL(src, _noie_font, [ {id : src.substring(src.indexOf("#"), src.length-1)} ], 1);
+ }
+};
+function _noie_font(data) {
+ if (data.sucesse) {
+ var doc = (new DOMParser()).parseFromString(data.content);
+ var font = doc.getElementById(data.obj[0].id);
+ var familyName = font.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face").item(0).getAttributeNS(null, "font-family");
+ if (familyName) {
+ var textElements = document.getElementByTagNameNS(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);
+ }
+ }
+ }
+ }
+};
+NAIBU._noie_createFont = function(/*Element*/ ti, /*Element*/ font) {
+ var node = ti.firstChild, data, glyphs = font.getElementsByTagNameNS(NAIBU.svgNameSpace, "glyph");
+ var dx = parseFloat((ti.getAttributeNS(null, "x") || 0)), dy = parseFloat((ti.getAttributeNS(null, "y") || 0)), fontSize = parseFloat((ti.getProperty("font-size") || 12));
+ while(node) {
+ data = node.data;
+ if (data !== void 0) { //dataがある場合
+ 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 + fontSize * index;
ti.insertBefore(path);
- NAIBU.pathData(glyphs[i].getAttribute("d"), path, true, x, y);
+ NAIBU.pathData(glyphs[i].getAttributeNS(null, "d"), path, false, x, y);
}
} else {
NAIBU._ie_createFont(node, font);
@@ -1886,7 +1948,8 @@
s.set(w,h);
} else {
p.setAttributeNS(null, "transform", "matrix(" +matrix.a+ "," +matrix.b+ "," +matrix.c+ "," +matrix.d+ "," +matrix.e+ "," +matrix.f+ ")");
- }
+ p.setAttributeNS(null, "d", data);
+ }
fe = matrix = null;
};