Beispiel #1
0
 private bool IsPunctuation(UChar letter)
 {
     return
         (CC.Cl01(letter) || CC.Cl02(letter) || CC.Cl03(letter) ||
          CC.Cl04(letter) || CC.Cl05(letter) || CC.Cl06(letter) ||
          CC.Cl07(letter));
 }
 private bool IsPunctuation(string letter)
 {
     return(letter.Length == 1 &&
            (CC.Cl01(letter[0]) || CC.Cl02(letter[0]) || CC.Cl03(letter[0]) ||
             CC.Cl04(letter[0]) || CC.Cl05(letter[0]) || CC.Cl06(letter[0]) ||
             CC.Cl07(letter[0])));
 }
Beispiel #3
0
        private void SetAppropriateTextMatrix(UChar letter, float voffset, PdfContentByte cb)
        {
            var ytlm = MyYTLM;

            if (_isPsuedoVertical)
            {
                if (CC.Cl06(letter) ||
                    CC.Cl07(letter))
                {
                    //句読点を平行移動。
                    cb.SetTextMatrix(_xtlm + _fontSize * (1F / 2 + 1F / 8), ytlm + _fontSize * (1F / 2 + 1F / 8) + voffset);
                }
                else if (CC.Cl11(letter))
                {
                    //小書きの仮名を平行移動。
                    cb.SetTextMatrix(_xtlm + _fontSize / 8, ytlm + _fontSize / 8 + voffset);
                }
                else if (CC.Cl01(letter))
                {
                    //始め括弧を回転、平行移動
                    cb.SetTextMatrix(0F, -1F, 1F, 0F, _xtlm + _fontSize / 2, ytlm);
                }
                else if (letter.CodePoint == char.ConvertToUtf32("ー", 0))
                {
                    //音引きを回転、かつ左右反転
                    cb.SetTextMatrix(0F, -1F, -1F, 0F, _xtlm - _fontSize / 2, ytlm - _fontSize / 2);
                }
                else if (letter.CodePoint == char.ConvertToUtf32("—", 0)) //part of Cl08)
                {
                    //エムダッシュを回転
                    cb.SetTextMatrix(0F, -1F, 1F, 0F, _xtlm + _fontSize * (1F / 2F + 1 / 8F), ytlm - _fontSize / 2);
                }
                //TODO: 毎回 UString 作らない UChar[] で持つ。
                else if (
                    CC.Cl02(letter) ||
                    (new UString("―…‥").Contains(letter)) ||                     //part of Cl08
                    CC.Cl10(letter) ||
                    (new UString("~+±=-÷≠:;‘’“”<>≦≧_|→↓←↑⇒⇔").Contains(letter))) //その他転置すべき記号。よく使いそうなものだけ
                {
                    //それ以外の記号を回転
                    cb.SetTextMatrix(0F, -1F, 1F, 0F, _xtlm + _fontSize / 2, ytlm - _fontSize / 2);
                }
                else
                {
                    cb.SetTextMatrix(_xtlm, ytlm + voffset);
                }
            }
            else
            {
                cb.SetTextMatrix(_xtlm, ytlm + voffset);
            }
        }
Beispiel #4
0
 public GlueProperty LineTailGlueJP(UChar letter, float zwSize)
 {
     if (CC.Cl07(letter) || CC.Cl06(letter) || CC.Cl02(letter))
     {
         var toCancel = LengthJPByZw(letter, zwSize);
         return(new GlueProperty(-toCancel, toCancel + 0.5F * zwSize, 0F));
         //TODO: 行末は指定のアキかベタ組かどちらか。またほかのアキより優先的に詰める。データ型と UnjustfiedLine のデータ構造変更。
         //TODO: 前項目の修正はぶら下げも実現できるように
     }
     else if (CC.Cl05(letter))
     {
         var length = 0.25F * zwSize;
         return(new GlueProperty(length, 0, length));
     }
     else
     {
         return(new GlueProperty());
     }
 }
Beispiel #5
0
 public static SpaceType GetSpaceType(this UChar letter)
 {
     if (CC.Cl07(letter) || CC.Cl06(letter) || CC.Cl02(letter))
     {
         return(SpaceType.Closing);
     }
     else if (CC.Cl01(letter))
     {
         return(SpaceType.Opening);
     }
     else if (CC.Cl04(letter))
     {
         return(SpaceType.DividingPunctuation);
     }
     else if (CC.Cl05(letter))
     {
         return(SpaceType.MiddleDots);
     }
     else
     {
         return(SpaceType.Normal);
     }
 }
Beispiel #6
0
 /// <summary>
 /// 行頭禁則
 /// </summary>
 private static bool DoViolateLineStartProhibitionRule(UChar following)
 {
     return(CC.Cl02(following) || CC.Cl04(following) || CC.Cl06(following) || CC.Cl07(following) || CC.Cl09(following));
 }