アットウィキロゴ

ATSUI Programing Guide(Legacy)

ATSUI Programing Guide

Apple Type Services for Unicode Imaging
ユニコードイメージの為のアップルタイプサービス

ベーシックタスク:オブジェクトとテキスト描画で作業する


この章は、ATSUIを使ってあなたが執り行える基本的なタスクのための、ATSUIを使った一般的なガイドラインとステップバイステップのインストラクションを提供します。
これらのタスクは次のようなセクションで記されています。
  • スタイルオブジェクトの作成と属性の設定
  • テキストレイアウトオブジェクトの作成と属性の設定
  • ユニコードテキストブロック内の段落の決定
  • 水平テキストの描画
  • Quartz Context を使ったテキストの描画
  • Equationsの描画
  • 垂直テキストの描画
  • 改行
  • テキストの寸尺測定
  • 行高の計算
  • グラフィックの廻りのテキストの流れ
  • タブルーラーを設定
この章を読む前に、「タイポグラフィコンセプツ」と「ATSUI スタイルとテキスト配置オブジェクト」「ATSUI」の中で議論されているコンセプトについて詳しく知るべきです。
この章はATSUIをどのように使うかイラストでサンプルコードをいくつか提供します。

ATSUIを使うためのガイドライン


スタイルオブジェクトの作成と属性の設定


テキスト配置オブジェクトの作成と属性の設定


ユニコードテキストブロック内での段落の決定

このセクションはユニコードテキストのブロックの中で段落をどのようにして見つけるかをお見せします。
しかしながら、段落の決定はATSUIファンクションを使うタスクではありませんが、ATSUIを効果的に使いたいなら、テキストのブロックを段落という塊に区切るのは重要なことです。
一度、テキストが段落へと分解されたら、各段落のためのテキストレイアウトオブジェクトを作成できます。

 ひとこと:ATSUIの最高パフォーマンスを得るには、テキストの段落とテキストレイアウトオブジェクトを関連付けるとよいでしょう。

段落を見つけるには、次と似たようなステップをとるコードを書くことで可能です。
  1. 段落区切りとしてのユニコードキャラを定義する。
あなたの特定のアプリケーションのニーズを頼りに段落区切りとして定義したいぴったりのものを選びます。
例えば、これらの5つのキャラクタシーケンスは段落を区切るのに使われます。
  • ASCII newline '\n'
  • ASCII return '\r'
  • ASCII return followed by ASCII newline
  • Unicode line separator
  • Unicode paragraph separator
  1. テキストブロックを通じて、段落区切りを見つけるまで繰り返す


 def text.my_find_paragraph(text, pstart, p_end)
   CR, LF, LSEP, PSEP, NL = 0x000D, 0x000A, 0x2028, 0x2029, 0x0085
   c_pos, c_char, end_of_text = 0, 0, true
   
   if (text.empty? or text.nil?) then
     pend = 0
     return true




   end
   text.each_with_index{|char, index|
     if char==PSEP || char==LSEP || char==LF || char==NL then
       c_pos = index
       break
     end
     if char==CR then
       if index < text.length-1 then
         if text[index+1] == LF then pend  = index+1
       end
       c_pos = index
       break
     end
   
   }
   if c_pos == 0 then c_pos = text.length end
   if c_pos == text.length then end_of_text = true end
   [end_of_text, p_end]
 end
Boolean MyFindParagraph (UniChar *theText,
                   UniCharCount theTextLength,
                   UniCharArrayOffset paragraphStart,
                   UniCharArrayOffset *paragraphEnd)
{
   for (currentPosition=paragraphStart; (currentPosition < theTextLength);
                               currentPosition++) // 7
   {
       currentChar = theText[currentPosition];

       if ( (currentChar == PSEP) || (currentChar ==  LSEP) ||
                           (currentChar ==  LF) || (currentChar ==  NL))
       {
           break;
       }
       if ( currentChar == CR )
       {
           if ( currentPosition < (theTextLength - 1) )
           {
               if ( theText[currentPosition + 1] == LF ) // 8
                   currentPosition++;
            }
           break;
       }
   }

   if (currentPosition == theTextLength)
                   currentPosition--;// 9
   if (currentPosition == (theTextLength - 1))
                   endOfText = true;// 10

   *paragraphEnd = currentPosition + 1;// 11

   return endOfText;// 12
}



水平テキストを描画


Quartz Contextを使ったテキスト描画


Equationsを描画


垂直テキストを描画


改行


行高の計算


グラフィックの周りのテキストの流れ


タブルーラーの設定





タグ:

+ タグ編集
  • タグ:
最終更新:2010年06月21日 23:52
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。