[Sie-announce] SIEコード [1421] 縦書きのときの句読点を、自動で位置合わせするように改良した

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 11月 19日 (木) 22:49:08 JST


Revision: 1421
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1421
Author:   dhrname
Date:     2009-11-19 22:49:08 +0900 (Thu, 19 Nov 2009)

Log Message:
-----------
縦書きのときの句読点を、自動で位置合わせするように改良した

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

Modified: branches/05x/054/sie.js
===================================================================
--- branches/05x/054/sie.js	2009-11-19 10:59:21 UTC (rev 1420)
+++ branches/05x/054/sie.js	2009-11-19 13:49:08 UTC (rev 1421)
@@ -2002,7 +2002,19 @@
           }
           ti.parentNode.insertBefore(path, ti);
           path.style.cssText = ti.style.cssText;
-          NAIBU.pathData(glyphData[i], path, true, ti.w, ti.h, (new Matrix(fe, 0, 0, -fe, x, y)));
+          if ("、。".indexOf(data.charAt(i)) > -1) { //句読点の場合
+            x += fontSize / Math.SQRT2;
+            y -= fontSize / Math.SQRT2;
+          }
+          var matrix = new Matrix(fe, 0, 0, -fe, x, y);
+          if ("「」--==<><>~[]{}{}()()".indexOf(data.charAt(i)) > -1) { //カッコの場合
+            /*以下では、フォント平方の真ん中を中心として、
+             *90度回転させることにより、縦書きでのカッコをうまく表示させる(要日本語の知識)
+             */
+            var a = Math.cos(Math.PI/2), b = Math.sin(Math.PI/2), c = -b, d = a, e = (1-a-c) * fontSize / 2, f = (1-b-d) * fontSize / 2;
+              matrix = (new Matrix(a, b, c, d, e, f)).multiply(matrix);
+          }
+          NAIBU.pathData(glyphData[i], path, true, ti.w, ti.h, matrix);
           adv += advanceX[i];
         }
       }
@@ -2099,7 +2111,19 @@
             }
             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)));
+            if ("、。".indexOf(data.charAt(i)) > -1) { //句読点の場合
+              x += fontSize / Math.SQRT2;
+              y -= fontSize / Math.SQRT2;
+            }
+            var matrix = new Matrix(fe, 0, 0, -fe, x, y);
+            if ("「」--==<><>~[]{}{}()()".indexOf(data.charAt(i)) > -1) { //カッコなど記号の場合
+              /*以下では、フォント平方の真ん中を中心として、
+               *90度回転させることにより、縦書きでの記号をうまく表示させる(要日本語の知識)
+               */
+              var a = Math.cos(Math.PI/2), b = Math.sin(Math.PI/2), c = -b, d = a, e = (1-a-c) * fontSize / 2, f = (1-b-d) * fontSize / 2;
+              matrix = (new Matrix(a, b, c, d, e, f)).multiply(matrix);
+            }
+            NAIBU.pathData(glyphData[i], path, false, 0, 0, matrix);
             adv += advanceX[i];
           }
         }




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