[Sie-announce] SIEコード [1398] 1, Firefoxでの_noie_createFontの実装を進めた

アーカイブの一覧に戻る

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);




Sie-announce メーリングリストの案内
アーカイブの一覧に戻る