[Sie-announce] SIEコード [1814] 日本語やアルファベットの調整

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2010年 5月 7日 (金) 22:25:02 JST


Revision: 1814
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1814
Author:   dhrname
Date:     2010-05-07 22:25:00 +0900 (Fri, 07 May 2010)

Log Message:
-----------
日本語やアルファベットの調整

Modified Paths:
--------------
    branches/ufltima/dom/svg.js

Modified: branches/ufltima/dom/svg.js
===================================================================
--- branches/ufltima/dom/svg.js	2010-05-04 13:33:14 UTC (rev 1813)
+++ branches/ufltima/dom/svg.js	2010-05-07 13:25:00 UTC (rev 1814)
@@ -2622,7 +2622,6 @@
 
 function SVGTextContentElement() { 
   SVGElement.apply(this, arguments);
-  this._list = [];   //文字の位置を格納しておくリスト
   /*readonly SVGAnimatedLength*/      this.textLength = new SVGAnimatedLength();
   /*readonly SVGAnimatedEnumeration*/ this.lengthAdjust = new SVGAnimatedEnumeration(SVGTextContentElement.LENGTHADJUST_UNKNOWN);
   this.addEventListener("DOMNodeInserted", function(evt){
@@ -2652,6 +2651,7 @@
     var tar = evt.target;
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
       var tar = evt.target, ti = tar.firstChild, tp = tar.parentNode;
+      tar._list = [];   //文字の位置を格納しておくリスト
       var x = y = n = 0; //現在のテキスト位置と順番
       var style = tar.ownerDocument.defaultView.getComputedStyle(tar, null);
       var isYokogaki = ((style.getPropertyValue("writing-mode")) === "lr-tb") ? true : false;
@@ -2663,8 +2663,12 @@
       } else {
         var ptx = pty = ptdx = ptdy = {numberOfItems : 0};
       }
-      var kern = "fijlt.,IJ:;1'-", akern = "a bcdeghknopqsuvxyz";
-;
+      var kern = "fijlt.,I:;1'-", akern = "a bcdeghknopqsuvxyz";
+      if (isYokogaki) {
+        y += fontSize * 0.25;
+      } else {
+        x += fontSize * 0.5;
+      }
       while (ti) {
         if (ti.nodeType === Node.TEXT_NODE) {
           var tt = ti._tar;
@@ -2691,18 +2695,27 @@
             }
             var alm = 0;
             if (isYokogaki) {
+              //カーニングを求めて、字の幅を文字ごとに調整する
               var tdc = ti.data.charAt(i);
-              if (kern.indexOf(tdc) > -1) { //カーニングを求める
-                alm = fontSize * 0.75;
+              if (kern.indexOf(tdc) > -1) {
+                alm = fontSize * 0.7;
               } else if ((tdc === "r") || (tdc === "s")){
                 alm = fontSize * 0.65;
-              } else if ((tdc === "m") || (tdc === "w")){
-                alm = fontSize * 0.3;
+              } else if ((tdc === "C") || (tdc === "D") || (tdc === "M") || (tdc === "W") || (tdc === "G")){
+                alm = fontSize * 0.2;
               } else if (akern.indexOf(tdc) > -1){
                 alm = fontSize * 0.55;
               } else {
-                alm = fontSize * 0.17;
+                alm = fontSize * 0.35;
               }
+              var tcca = tdc.charCodeAt(0);
+              if ((12288 <= tcca) && (tcca <= 65533)) {
+                alm = -fontSize * 0.01;
+                if ((tdc === "う") || (tdc === "く") || (tdc === "し") || (tdc === "ち")) {
+                  alm += fontSize * 0.2;
+                }
+              }
+              tcca = null;
             }
             tar._list[tar._list.length] = x;
             tar._list[tar._list.length] = y;
@@ -2873,8 +2886,8 @@
           var p = tar.getStartPositionOfChar(i-j);
           if (!!ti._tar) {
             var style = ti._tar[i].style;
-            style.left = p.x;
-            style.top = p.y;
+            style.left = parseInt(p.x, 10);
+            style.top = parseInt(p.y, 10);
             style.width = "0px";
             style.height = "0px";
             tar._tar.appendChild(ti._tar[i]);




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