[Sie-announce] SIEコード [1418] Firefox以外のブラウザでも縦書きを可能にした

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 11月 18日 (水) 20:50:14 JST


Revision: 1418
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1418
Author:   dhrname
Date:     2009-11-18 20:50:14 +0900 (Wed, 18 Nov 2009)

Log Message:
-----------
Firefox以外のブラウザでも縦書きを可能にした

Modified Paths:
--------------
    branches/05x/054/sie.js

Modified: branches/05x/054/sie.js
===================================================================
--- branches/05x/054/sie.js	2009-11-18 09:02:03 UTC (rev 1417)
+++ branches/05x/054/sie.js	2009-11-18 11:50:14 UTC (rev 1418)
@@ -94,8 +94,8 @@
   } else {
     if (/a/[-1] === 'a'){ //Firefoxだったらtrueを返す
       NAIBU.STObject.ffnext();
-      _noie_svgfont();
     }
+    _noie_svgfont();
   }
 }
 //他のページに移動する際に起動
@@ -1938,7 +1938,7 @@
   var em = parseFloat(font.getElementsByTagName("font-face").item(0).getAttribute("units-per-em") || 0);
   var advX = parseFloat( (font.getAttribute(horizOrVert) || em) ); //字幅の設定
   var dx = parseFloat(tistyle.left), fontSize = parseFloat(tistyle.fontSize), dy = parseFloat(tistyle.top) - fontSize * 0.25, fe = fontSize / em; //0.25はディセンダの調整をあらかじめしているため
-   while(node) {
+  while(node) {
     data = node.data;
     if (data !== void 0) { //dataがある場合
       var advanceX = [], glyphData = [];
@@ -1978,7 +1978,7 @@
   var obj = document.getElementsByTagName("object");
   for (var i=0;i<obj.length;++i) {
     var s, obji = obj[i];
-    if (obji.getSVGDocument !== void 0 && window.opera === void 0) { //Operaでなければ、かつ、void 0はundefinedのこと
+    if (obji.getSVGDocument !== void 0) { //Operaでなければ、かつ、void 0はundefinedのこと
       if (obji.contentDocument !== void 0) { //Firefoxの場合
         s = obji.contentDocument;
       } else {
@@ -2024,40 +2024,50 @@
   var em = parseFloat(font.getElementsByTagNameNS(NAIBU.svgNameSpace, "font-face").item(0).getAttribute("units-per-em") || 0);
   var advX = parseFloat( (font.getAttributeNS(null, horizOrVert) || em) ); //字幅の設定
   var dx = parseFloat(ti.getAttributeNS(null, "x") || 0), fontSize = parseFloat(style.fontSize), dy = parseFloat(ti.getAttributeNS(null, "y") || 0), 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) {
-        //indexは該当する文字が何番目にあるかの数字
-        var index = data.indexOf((glyphs[i].getAttributeNS(null, "unicode") || "なし")); //unicode属性に指定がない場合、処理させないようにする
-        if (index > -1) {
-          advanceX[index] = parseFloat(glyphs[i].getAttributeNS(null, horizOrVert) || advX); //字幅を収納
-          glyphData[index] = glyphs[i].getAttributeNS(null, "d");
+  var ds = false;
+  if (/a/[-1] === 'a') { //Firefoxならば
+    ds = true;
+  } else {
+    if (isTategaki) {
+      ds = true;
+    }
+  }
+  if (ds){
+     while(node) {
+      data = node.data;
+      if (data !== void 0) { //dataがある場合
+        var advanceX = [], glyphData = [];
+        for (var i=0,gli=glyphs.length;i<gli;++i) {
+          //indexは該当する文字が何番目にあるかの数字
+          var index = data.indexOf((glyphs[i].getAttributeNS(null, "unicode") || "なし")); //unicode属性に指定がない場合、処理させないようにする
+          if (index > -1) {
+            advanceX[index] = parseFloat(glyphs[i].getAttributeNS(null, horizOrVert) || 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 = ti.ownerDocument.createElementNS(NAIBU.svgNameSpace, "path");
-          //advance、すなわち字幅の長さ分、ずらしていく
-          if (isTategaki) {
-            var y= dy + adv*fe, x = dx;
-          } else {
-            var x = dx + adv*fe, y= dy;
+        for (var i=0,adv=0;i<data.length;++i) {
+          if (advanceX[i] !== void 0) { //配列に含まれていれば
+            var path = ti.ownerDocument.createElementNS(NAIBU.svgNameSpace, "path");
+            //advance、すなわち字幅の長さ分、ずらしていく
+            if (isTategaki) {
+              var y= dy + adv*fe, x = dx;
+            } else {
+              var x = dx + adv*fe, y= dy;
+            }
+            ti.parentNode.insertBefore(path, ti);
+            path.style.cssText = style.cssText;
+            NAIBU.pathData(glyphData[i], path, false, 0, 0, (new Matrix(fe, 0, 0, -fe, x, y)));
+            adv += advanceX[i];
           }
-          ti.parentNode.insertBefore(path, ti);
-          path.style.cssText = style.cssText;
-          NAIBU.pathData(glyphData[i], path, false, 0, 0, (new Matrix(fe, 0, 0, -fe, x, y)));
-          adv += advanceX[i];
         }
+        advanceX = glyphData = null;
+      } else {
+        NAIBU._noie_createFont(node, font);
       }
-      advanceX = glyphData = null;
-    } else {
-      NAIBU._noie_createFont(node, font);
+      node = node.nextSibling;
     }
-    node = node.nextSibling;
+    ti.style.opacity = "0";
   }
-  ti.style.opacity = "0";
 };
 NAIBU.pathData = function(/*string*/ data, /*Element*/ p, /*boolean*/ t, /*float*/ w, h, /*Matrix*/ matrix) {
   //CTMでフォントを移動させておく




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