svnno****@sourc*****
svnno****@sourc*****
2009年 10月 28日 (水) 20:53:27 JST
Revision: 1375 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1375 Author: dhrname Date: 2009-10-28 20:53:27 +0900 (Wed, 28 Oct 2009) Log Message: ----------- _ie_svgfont()を実装 _ie_font()を実装 Modified Paths: -------------- branches/05x/053/sie.js Modified: branches/05x/053/sie.js =================================================================== --- branches/05x/053/sie.js 2009-10-26 14:31:00 UTC (rev 1374) +++ branches/05x/053/sie.js 2009-10-28 11:53:27 UTC (rev 1375) @@ -1737,7 +1737,7 @@ d = wort = f = v = tani = ut = null; //解放 } catch(e) {stlog.add(e,1133); this.value = 1000;} return this; -} +}; STLength.prototype._dR = /\D+$/; //RegExpオブジェクトをあらかじめ生成 STLength.prototype._n = [1, 0.01, 1, 1, 1, 35.43307, 3.543307, 90, 1.25, 15]; //利用単位への変換値 STLength.prototype._tani = { //単位に番号を振る @@ -1832,6 +1832,30 @@ } } catch(e) {stlog.add(e,17155);} }; +function _ie_svgfont() { + 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); + } +}; +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"); + 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) { + NAIBU._ie_createFont(ti, font); + } + } + } + } +}; NAIBU._ie_createFont = function(/*Element*/ ti, /*Element*/ font) { var node = ti.firstChild, data, glyphs = font.getElementsByTagName("GLYPH"); var dx = parseFloat(ti.style.left), dy = parseFloat(ti.style.top), fontSize = parseFloat(ti.style.fontSize); @@ -1843,8 +1867,8 @@ /*カーニング処理について(To DO) *カーニングに該当する文字を検索して、ずらしたい長さだけ、以降のxとyから引く必要がある */ - var x = dx * fontSize * index, y = dy * fontSize * index; - ti.inserBefore(path); + var x = dx * fontSize * index, y = dy * fontSize * index; + ti.insertBefore(path); NAIBU.pathData(glyphs[i].getAttribute("d"), path, true, x, y); } } else { @@ -1852,7 +1876,7 @@ } node = node.nextSibling; } -} +}; NAIBU.pathData = function(/*string*/ data, /*Element*/ p, /*boolean*/ t, /*float*/x, y, w, h, fontSize, em) { //CTMでフォントを移動させておく var fe = fontSize / em, matrix = new STMatrix(fe, 0, 0, -fe, x*fe, -y*fe);