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); } }