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])));
 }
Пример #2
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));
 }
Пример #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);
            }
        }
Пример #4
0
        private bool CanAddEmphasisDots()
        {
            var letterJp = _decoratee as InlineLetterJp;

            if (letterJp == null)
            {
                return(false);
            }

            var letter = letterJp.Letter;

            return(CC.IsHiragana(letter) || CC.IsCJKIdeograph(letter) || CC.IsKatakana(letter));
        }
Пример #5
0
 private static Lang JudgeLang(UChar letter)
 {
     if (CC.IsLatin(letter) || letter.IsAscii) //TODO: 半角空白はここでやるべきか?
     {
         return(Lang.Latin);
     }
     else if (CC.IsCJKIdeograph(letter) || CC.IsHiragana(letter) || CC.IsKatakana(letter))
     {
         return(Lang.Japanese);
     }
     else
     {
         return(Lang.Undef);
     }
 }
Пример #6
0
 public GlueProperty InterletterGlueJP(UChar letterBefore, float zwSizeBefore, UChar letterAfter, float zwSizeAfter)
 {
     //最優先は分離禁止。
     if (CC.Cl08(letterBefore, letterAfter))
     {
         return(new GlueProperty(0, 0, 0));
     }
     else
     {
         //それ以外の場合について検査
         float zwSpaceSize;
         float baseSize;
         InterletterSpaceJP(letterBefore, zwSizeBefore, letterAfter, zwSizeAfter, out zwSpaceSize, out baseSize);
         return(new GlueProperty(zwSpaceSize, _standardStretchJPByZw, zwSpaceSize + _standardShrinkJPByZw) * baseSize);
     }
 }
Пример #7
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());
     }
 }
Пример #8
0
        public static IEnumerable <UChar> Filter(IEnumerable <UChar> xs)
        {
            bool isPrevDividingPunctuation = false;

            foreach (var x in xs)
            {
                if (isPrevDividingPunctuation)
                {
                    if (x != fullWidthSpace)
                    {
                        yield return(x);
                    }
                }
                else
                {
                    yield return(x);
                }
                isPrevDividingPunctuation = CC.Cl04(x);
            }
        }
Пример #9
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);
     }
 }
Пример #10
0
 private bool IsKanji(UChar letter)
 {
     return(CC.IsCJKIdeograph(letter));
 }
Пример #11
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));
 }
Пример #12
0
 /// <summary>
 /// 行末禁則
 /// </summary>
 private static bool DoViolateLineEndProhibitionRule(UChar proceeding)
 {
     return(CC.Cl01(proceeding));
 }
Пример #13
0
 /// <summary>
 /// 分割禁止
 /// </summary>
 private static bool DoViolateUnbreakableCharactersRule(UChar proceeding, UChar following)
 {
     return(CC.Cl08(proceeding, following));
 }