[Sie-announce] SIEコード [1396]

Back to archive index

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でフォントを移動させておく




Sie-announce メーリングリストの案内
Back to archive index