ATSUI Programing Guide
Apple Type Services for Unicode Imaging
ユニコードイメージの為のアップルタイプサービス
ベーシックタスク:オブジェクトとテキスト描画で作業する
この章は、ATSUIを使ってあなたが執り行える基本的なタスクのための、ATSUIを使った一般的なガイドラインとステップバイステップのインストラクションを提供します。
これらのタスクは次のようなセクションで記されています。
- スタイルオブジェクトの作成と属性の設定
- テキストレイアウトオブジェクトの作成と属性の設定
- ユニコードテキストブロック内の段落の決定
- 水平テキストの描画
- Quartz Context を使ったテキストの描画
- Equationsの描画
- 垂直テキストの描画
- 改行
- テキストの寸尺測定
- 行高の計算
- グラフィックの廻りのテキストの流れ
- タブルーラーを設定
この章を読む前に、「タイポグラフィコンセプツ」と「ATSUI スタイルとテキスト配置オブジェクト」「ATSUI」の中で議論されているコンセプトについて詳しく知るべきです。
この章はATSUIをどのように使うかイラストでサンプルコードをいくつか提供します。
ATSUIを使うためのガイドライン
スタイルオブジェクトの作成と属性の設定
テキスト配置オブジェクトの作成と属性の設定
ユニコードテキストブロック内での段落の決定
このセクションはユニコードテキストのブロックの中で段落をどのようにして見つけるかをお見せします。
しかしながら、段落の決定はATSUIファンクションを使うタスクではありませんが、ATSUIを効果的に使いたいなら、テキストのブロックを段落という塊に区切るのは重要なことです。
一度、テキストが段落へと分解されたら、各段落のためのテキストレイアウトオブジェクトを作成できます。
ひとこと:ATSUIの最高パフォーマンスを得るには、テキストの段落とテキストレイアウトオブジェクトを関連付けるとよいでしょう。
段落を見つけるには、次と似たようなステップをとるコードを書くことで可能です。
- 段落区切りとしてのユニコードキャラを定義する。
あなたの特定のアプリケーションのニーズを頼りに段落区切りとして定義したいぴったりのものを選びます。
例えば、これらの5つのキャラクタシーケンスは段落を区切るのに使われます。
- ASCII newline '\n'
- ASCII return '\r'
- ASCII return followed by ASCII newline
- Unicode line separator
- Unicode paragraph separator
- テキストブロックを通じて、段落区切りを見つけるまで繰り返す
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