Upload
others
View
17
Download
0
Embed Size (px)
Citation preview
JAPANESE FEATURES INADOBE INDESIGN CS3
© 2007 Adobe Systems Incorporated. All rights reserved. Japanese Features in Adobe InDesign CS3
テクニカルノート #10088Adobe、Adobe ロゴ、Illustrator、InCopy、および InDesign は、Adobe Systems Incorporated(アドビ システムズ社)の米国ならびに他の国における商標または登録商標です。 Microsoft and Windowsare either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Apple, Mac OS, and Macintosh are trademarks of Apple Inc., registered in the United States and other countries.All other trademarks are the property of their respective owners.
本マニュアルに記載される内容は、あくまでも参照用としてのみ使用されること、また、なんら予告なしに変更されることを条件として、提供されるものであり、従って、当該情報が、アドビ システムズ社による確約として解釈されてはなりません。 アドビ システムズ社は、本マニュアルにおけるいかなる誤りまたは不正確な記述に対しても、いかなる義務や責任を負うものではありません。 本マニュアルに記載されているソフトウェアは、エンドユーザ使用許諾契約にもとづいて提供されるものであり、当該エンドユーザ使用許諾契約の契約条件に従ってのみ使用または複製することが可能となるものです。
3
目次
1 はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 機能セット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7機能の区別(ロケール以外の方法) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
アプリケーションのプラグインでの機能セットの使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
機能セットの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8特定の機能セットに限定したプラグインのロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8機能セットを指定できるその他の ODFRez リソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9特定の機能セットに限定した Boss のロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10実行時の機能セットの判別 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10機能セットの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 日本語のレイアウト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11日本語の組版の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
詳細情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
レイアウトグリッド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13ワークフローとレイアウトグリッド設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15ナビゲーションダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18レイアウトグリッドの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
フレームグリッド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23ワークフローとフレームグリッド設定の説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23フレームグリッド設定とテキストモデルの間のやり取り . . . . . . . . . . . . . . . . . . . . . . . . . 25クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25ナビゲーションダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30フレームグリッドの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
InCopy CJK ストーリーグリッド属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39ワークフローと InCopy CJK ストーリーグリッド設定の説明 . . . . . . . . . . . . . . . . . . . . . . 39クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41InCopy CJK ストーリーグリッド属性の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
測定単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42日本独自の測定単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42級/歯/ AP からポイント(およびその逆)への換算 . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4 日本語タイポグラフィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44日本語の文字組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
機能の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44用語 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44サンプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46関連資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
目次 4
日本語テキストコンポーザ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48ナビゲーションダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49日本語テキストコンポーザの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50ワックスの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50よくある質問 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51参考資料およびサンプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
一般的な文字組み機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52文字組みモデルのナビゲーションダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55文字組み機能の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60文字組み、禁則、または詰めテーブルを段落または特定の文字で使用できるようにするための設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61コードサンプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
日本語固有のテキスト属性およびアドーンメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61ナビゲーションダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71テキスト属性およびアドーンメントの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71コードサンプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
合成フォント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73ナビゲーションダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74合成フォントの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82コードサンプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83日本語フォントに関する追加情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5 プラットフォーム固有の文字エンコーディング . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84標準的な日本語エンコーディング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
日本語の文字エンコーディングの詳細情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
標準的な日本語エンコーディングの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86InDesign C++ API で PMString およびユニコードを使用する際の一般的な注意事項 . . . 86異なる日本語文字エンコーディング間での文字の変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . 87OpenType フォント用の特別な機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87フォント内のグリフに関する情報の取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88特定のグリフ ID によるグリフの挿入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
コードサンプルおよび参考資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
SING の詳細情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6 インプットメソッドエディタ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90クラスダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
IME モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92IME の描画 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
ナビゲーションダイアグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
コマンドと通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94kSetIMEPrefsCmdBoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
目次 5
IME 機能の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94IME 環境設定の取得と設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
参考資料およびサンプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6
1 はじめに
このマニュアルでは、Adobe® InDesign® CS3 のアーキテクチャや機能に組み込まれている日本語固有の機能について概説し、 InDesign CS3 アプリケーションプログラミングインターフェイス(API)を使用してそれらの機能を利用する方法を説明します。また、API の様々な参考資料や、InDesign CS3 ソフトウェア開発キット(SDK)に含まれているサンプルコードも紹介します。
InDesign CS3 のコアアーキテクチャでは、欧文と日本語のレイアウトおよびテキストオブジェクトを 1 つのドキュメントに共存させることができます。 つまり、日本語版の InDesign(InDesign CS3-J と呼びます)を使用して組版された、日本語固有のレイアウト設定やテキスト設定が含まれているドキュメントは、欧文版の InDesign(InDesign CS3 と呼びます)でも開くことができます。
このマニュアルでは、日本語版固有の機能を実現している InDesign CS3 アーキテクチャの要素を紹介します。 また、既存のレイアウト/テキストサブシステムに追加されている機能(日本語機能セット)について説明し、API を使用してそれらの機能を操作する方法を詳しく説明します。
このマニュアルは、次の場合を対象としています。
➤ 自分の開発するプラグインが予期しない問題を起こさないように、レイアウト/テキスト機能に関して自分の知らなかった情報がないか確認しておきたい場合。
➤ 開発しているプラグインに、特定の日本語機能に対するサポートを追加したい場合。
このマニュアルを読むと、次のことがわかるようになります。
1. 機能セットとは何か、どのように使用するのか。
2. InDesign CS3 の日本語固有のレイアウト機能とは何か、どのように使用するのか。
3. InDesign CS3 の日本語タイポグラフィ固有の機能とは何か、どのように使用するのか。
4. 日本語の文字エンコーディングおよびフォントについてどのようなことを知っておくべきか。
7
2 機能セット
機能の区別(ロケール以外の方法)InDesign CS3 には、ユーザインターフェイスのロケール設定に基づいて、表示する文字列およびユーザインターフェイス要素のセットを切り替える機能があります。しかし、ユーザインターフェイスのロケールを使用して機能を区別するという方法では対処しきれない場合があります。 例えば、日本語版固有の機能を実装するために、欧文版とはまったく異なるユーザインターフェイスが必要になる場合が考えられます。
「機能セット」は、ユーザインターフェイスのロケールから独立している機能を区別できるようにするものです。 ロケールの場合は、ユーザインターフェイスの文字列を表示する言語が区別されますが、機能セットの場合は、ユーザインターフェイスに表示する文字列、メニュー、およびパレットが決定されます。
アプリケーションのプラグインでの機能セットの使用方法InDesign CS3 では、ユーザインターフェイスのロケール設定のほかに「機能セット」と呼ばれる設定により、特定のユーザ機能に使用されるユーザインターフェイスプラグインが決定されます。 機能セットの設定でユーザインターフェイスが区別されることによって、その機能セット固有の操作を行うためのアプリケーション環境がユーザに提供されます。 ただし、モデルコンポーネントは機能セットによって区別されません。 もし、機能セットでモデルコンポーネントを区別するような仕組みになっていたら、日本語機能セットを使用して作成したドキュメントは、Roman 機能セットでは使用できなくなっていたでしょう。
次の表に、日本語機能セットでのみロードされるユーザインターフェイスプラグインを示します。 この表の「日本語のみ」という記載は「日本語機能セットのみ」を意味します。 これらのプラグインの一部は、アプリケーションの日本語版でのみインストールされます。
プラグイン ID ファイルパス InDesign InCopy
kCJKGridPrefsDialogPluginID Plug-Ins/CJK/CJKGridPrefsDialog.apln 日本語のみ ロードされません
kCompFontDlgPluginID Plug-Ins/CJK/CompFontDlg.apln 日本語のみ ロードされません
kFrameGridPluginID Plug-Ins/CJK/Frame Grid Dialog.apln 日本語のみ 日本語のみ
kIMEPluginID Required/IME.rpln 日本語のみ 日本語のみ
kIMEPrefsDlgPluginID Plug-ins/CJK/IMEPrefsDlg.apln 日本語のみ ロードされません
kKentenDlgPluginID Plug-Ins/CJK/KentenDlg.apln 日本語のみ 日本語のみ
kKinsokuDlgPluginID Plug-Ins/CJK/KinsokuDlg.apln 日本語のみ 日本語のみ
kMojikumiDlgPluginID Plug-Ins/CJK/MojikumiDlg.apln 日本語のみ 日本語のみ
kNamedGridsPanelPluginID Plug-Ins/CJK/NamedGridsPanel.apln 日本語のみ ロードされません(ただし、ドキュメントプリセットに設定があります)
kPageGridPluginID Plug-Ins/CJK/Layout Grid Dialog.apln 日本語のみ ロードされません(Adobe InCopy® 内から InDesign ドキュメントのレイアウトグリッド設定を変更できないため)
第 2 章 機能セット 機能セットの使用 8
機能セットの使用特定の機能セットに限定したプラグインのロード
次のように、プラグインの PluginVersion リソース(*.fr ファイル)で機能セットオプションを指定することによって、どの機能セットでプラグインをロードさせるかを指定することができます。
resource PluginVersion (1){
kTargetVersion,kMyPluginID,kMajorVersionNumber, kMinorVersionNumber,kMajorVersionNumber, kMinorVersionNumber,kCurrentMajorFormatNumber, kMyMinorFormatNumber,{ kInDesignProduct, kInCopyProduct, kInDesignServerProduct},
{ <ここで機能セットを指定してください > },kMyPluginVersion
}
機能セットオプションの一部として使用される値は、SDK¥source¥public¥includes¥FeatureSets.h に定義されています。 このヘッダファイルには、2 つの言語機能セット ID と 3 つの製品機能セット ID として、次の基本的な値が定義されています。
➤ kRomanLanguageFS(言語):Roman 機能セットを示します。
➤ kJapaneseLanguageFS(言語):日本語機能セットを示します。
➤ kInDesignProductFS(製品):デスクトップ版の InDesign を示します。
➤ kInCopyProductFS(製品):InCopy を示します。
➤ kInDesignServerProductFS(製品):InDesign Server を示します。
「ここで機能セットを指定してください」で示されている PluginVersion リソースフィールドに、上記を組み合わせた ID を指定する必要があります。 複数の機能セット ID をプラグインに適用する場合は、コンマ区切りリストの形式で指定するか、ワイルドカード ID を使用します。組み合わせた機能セット ID を次に示します。
➤ kInDesignRomanFS:プラグインは InDesign CS3 の場合のみロードされます。
➤ kInDesignJapaneseFS:プラグインは InDesign CS3-J の場合のみロードされます。
➤ kInCopyRomanFS:プラグインは InCopy CS3 の場合のみロードされます。
➤ kInCopyJapaneseFS:プラグインは InCopy CS3-J の場合のみロードされます。
➤ kInDesignServerRomanFS:プラグインは InDesign CS3 Server の場合のみロードされます。
➤ kInDesignServerJapaneseFS:プラグインは InDesign CS3-J Server の場合のみロードされます。
kRubyDlgPluginID Plug-Ins/CJK/RubyDlg.apln 日本語のみ 日本語のみ
kShataiDlgPluginID Plug-Ins/CJK/ShataiDlg.apln 日本語のみ 日本語のみ
kTateChuYokoDlgPluginID Plug-Ins/CJK/TateChuYokoDlg.pln 日本語のみ 日本語のみ
プラグイン ID ファイルパス InDesign InCopy
第 2 章 機能セット 機能セットの使用 9
➤ kInDesignAllLanguagesFS:プラグインは InDesign CS3 のすべての機能セットでロードされます。
➤ kInCopyAllLanguagesFS:プラグインは InCopy CS3 のすべての機能セットでロードされます。
➤ kInDesignServerAllLanguagesFS:プラグインは InDesign CS3 Server のすべての機能セットでロードされます。
➤ kAllProductsRomanFS:プラグインは InDesign CS3 のすべての Roman 機能セットでロードされます。
➤ kAllProductsJapaneseFS:プラグインは InDesign CS3 のすべての日本語機能セットでロードされます。
➤ kWildFS(ワイルドカード):プラグインは機能セットに関係なくロードされます。
特定の機能セットの場合にのみプラグインをロードさせるという方法のほかに、PluginDependency リソースを指定して機能セットに依存させるという方法もあります。
resource PluginDependency (1){
<ここで機能セットを指定してください >,{
// MyUI は特定の機能セットの場合にのみ必要です。kMyUIPluginID, kMyUIPluginName,kMajorVersionNumber, kMinorVersionNumber,
}};
機能セットを指定できるその他の ODFRez リソースLocaleIndex でロケール固有のエントリを指定している任意のリソースでは、機能セットを指定できます。例えば、次の文字列テーブルがあるとします。
resource LocaleIndex (kSDKDefStringsResourceID){
kStringTableRsrcType,{
kWildFS, k_enUS, kSDKDefStringsResourceID + index_enUSkWildFS, k_enGB,kSDKDefStringsResourceID + index_enUS
// ... その他の機能セットとロケール ...kInDesignJapaneseFS, k_jaJP,kSDKDefStringsResourceID + index_jaJP
}};
この文字列テーブルでは、日本語機能セット(kInDesignJapaneseFS)と日本語ユーザインターフェイスロケール(k_jaJP)の両方に合致する場合にのみ、日本語文字列テーブルがロードされます。 その他の文字列テーブルは、機能セットに関係なく、それぞれ対応するユーザインターフェイスロケールの場合にロードされます。
注意 : 前述の文字列テーブルからも分かるように、kInDesignRomanFS とユーザインターフェイスロケール k_jaJP の組み合わせ(サポートされていません)、または、kInCopyJapaneseFS とユーザインターフェイスロケール k_jaJP の組み合わせ(サポートされています)に対応する文字列テーブルエントリは存在しません。
第 2 章 機能セット 機能セットの使用 10
特定の機能セットに限定した Boss のロード特定の機能セットの場合に Boss クラスを生成するかどうかを指定することはできませんが、そのような Boss クラスを別々のプラグインに組み込んで、PluginVersion リソースの機能セットの設定で区別することができます。
機能セットに依存する Boss クラスが存在すること、そしてこれらが期待した時に生成されないことがある点に注意して、プラグインコードを記述してください(特にユーザインターフェイス関連の Boss クラス)。
実行時の機能セットの判別機能セット値(製品機能セットと言語機能セットの組み合わせまたは個別の値)を取得するには、static クラスである LocaleSetting から PMLocaleId クラスのインスタンスを取得します。
const PMLocaleId locale = LocaleSetting::GetLocale();int16 featureSetID = locale.GetFeatureSetId();int16 productFS = locale.GetProductFS();int16 languageFS = locale.GetLanguageFS();
有効な値については、FeatureSets.h を参照してください。
機能セットの変更機能セットを変更するためには、オブジェクトモデルを完全にリフレッシュしなければならないので、実行時に機能セットを変更する機能はサポートされていません。 (InDesign CS3 では、オブジェクトモデルの動的なリフレッシュはサポートされていません。) 機能セットを変更するには、コマンド(kChangeLocaleCmdBoss)を実行して直ちにアプリケーションを再起動するか、またはアプリケーションセッションの外部からアプリケーションの設定を変更する必要があります。
➤ Windows®:レジストリエディタ(regedit.exe)を使用して、レジストリキー HKEY_LOCAL_MACHINE¥SOFTWARE¥Adobe¥Application¥Version¥Feature Set Locale Setting(Application は、InDesign、InCopy、または InDesign Server です。Version は 4.0 です)を FeatureSets.h に定義されているいずれかの値に変更します。
➤ Macintosh®:ResEdit や Resourcerer などのリソースエディタを使用してアプリケーションのリソースファイルを開き、FEAT リソースの値を FeatureSets.h に定義されているいずれかの値に変更します。
注意 : InDesign CS3 の欧文版のインストール時には、CJK プラグイン集はインストールされません。 したがって、ベースが Roman 機能セットである場合に言語機能セットの切り替えを行っても、アプリケーションを構成するプラグインのセットがすべて揃った状態にはなりません。 言語機能セットを変更するのは、最初にインストールしたのが日本語機能セットで、内部的なテストを行う場合のみに限定してください。 製品版のプラグインでは、言語機能セットを変更しないようにしてください。
11
3 日本語のレイアウト
日本語の組版の概要レイアウトグリッドとフレームグリッドを使用した InDesign CS3-J ドキュメントの例については、次の図を参照してください。
一般に、日本語のパブリケーションは、欧文のパブリケーションとは異なる方法でレイアウトが行われます。 これは、主に文字セットの違いや文字組版ルールの違いによるものです。日本語と欧文とでは、レイアウトを決める方法に次のような違いがあります。
➤ 欧文のレイアウトワークフローでは、空白のページにマージンを設定します(つまり、外側から内側へ向かってコンテンツ領域を決定します)。日本語のレイアウトワークフローでは、文字枠グリッドを使用して、テキストを流し込むボックスを定義します(文字の単位が正方形で示されます)。外側のマージンは、このテキストコンテンツに従って決定されます。 (InDesign CS3 のすべての日本語機能セットバージョンでは、新規ドキュメントを作成する際に欧文と日本語の両方のワークフローが利用できます。)
➤ 日本語の文字の多くは、ほぼ同じサイズと形状を持っています(これを「平均字面」または Ideographic Character Face(ICF)ボックスのサイズと表現します。これは仮想ボディよりも少し小さいサイズになるのが普通です)。 この結果、レイアウト領域を決めて、使用する文字サイズを決めれば、行数と 1 行あたりの文字数を特定することができ、さらに 1 ページまたは 1 段に割り当てられる合計文字数を特定することができます。 欧文の場合は文字幅が様々であり、またハイフネーションとジャスティフィケーションのルール設定によって、与えられた空間にテキストが配置される方法が変わってきます。したがって、欧文のパブリケーションでは、テキスト領域の寸法を指定するほうが簡単です。
第 3 章 日本語のレイアウト 詳細情報 12
➤ 日本語の文字は一般に正方形なので、グリッドを使用することで、それをガイドとしてページレイアウトに文字を配置していくことができます。 レイアウトのガイドとなるこのようなグリッドは、「天/小口」、「地/ノド」、「天地/中央」などのページ上の特定の基準に従って揃えられます。 欧文のページレイアウトは、主にマージンで決定されるのが普通です。
➤ 日本語のページレイアウトでは、基準点から特定の距離だけ離れたところにレイアウトのガイドとなるグリッドが配置されます。したがって、マージン幅のうちのいくつかは、グリッドのサイズとこれらの距離が決められることによって、間接的に決定されます。欧文のページレイアウトでは、マージンサイズによってページ上のテキスト領域のサイズが決定されるのが普通です。
➤ レイアウトのガイドとなるグリッドにおいて、文字のサイズや間隔のサイズを指定する際には、初期の写植機で使用されていた測定単位を用いる伝統があります。
このような相違があるので、ガイドとなるコンポーネントをページレイアウト上にセットアップする際には、異なるパラメータが必要になります。それらは、次に示す固有の日本語レイアウト機能として実現されています。
➤ レイアウトグリッド:レイアウトのガイドとなるグリッド(ページ単位で指定)。レイアウトグリッドにはスナップポイントがあるので、レイアウト上のオブジェクトを文字単位で配置することができます。
➤ フレームグリッド:テキストの配置を確認できるグリッドが付いたテキストフレーム。 フレームグリッドは、ベースライングリッドと同じように、フレーム内のテキスト行の配置に影響を与えます。
➤ InCopy CJK ストーリーグリッド属性(InCopy のみ):テキストの配置を確認できるグリッドが付いた InCopy ストーリー。 フレームグリッドに似ています。
➤ 測定単位:級、歯、およびアメリカ式ポイント(または AP。JIS Z 8305-1962(1995 年確認)で定義)。
ユーザインターフェイスでこれらの機能が使用可能になるのは、アプリケーションの機能セットが kInDesignJapaneseFS または kInCopyJapaneseFS に設定されている場合のみです。ただし、モデルデータは、すべてのユーザインターフェイスロケールおよび機能セットで使用可能です。
これらの機能の詳細は、以降の各節で説明します。
詳細情報次のマニュアルには、このマニュアルの以降の節を完全に理解するために必要な背景情報が記載されています。
➤ 『Adobe InDesign CS3 Solutions』の「Persistent Data and Data Conversion」の章
➤ 『Adobe InDesign CS3 Solutions』の「Commands」の章
➤ 『Adobe InDesign CS3 Programming Guide』の「Layout Fundamentals」の章
➤ 『Adobe InDesign CS3 Programming Guide』の「Text Fundamentals」の章
第 3 章 日本語のレイアウト レイアウトグリッド 13
レイアウトグリッドワークフローとレイアウトグリッド設定
レイアウトグリッドを使用して InDesign ドキュメントを作成できます。レイアウトグリッドは、ページレイアウトの基盤となるもので、ページに配置されるテキストの特性を決定します。 レイアウトグリッド設定は、ページのプロパティと考えることができます。
レイアウトグリッド設定のデフォルトおよび環境設定は、ドキュメントワークスペース(kDocWorkspaceBoss)とグローバルワークスペース(kWorkspaceBoss)の両方に保持されます。 ワークスペースのデフォルトデータは、ドキュメントで特定の操作が発生したときにコピーされます。 例えば、新規ドキュメントを作成すると、グローバルワークスペースのデフォルトがドキュメントワークスペースに適用されます。 新規ページを作成すると、ドキュメントのレイアウトグリッドに保持されているレイアウトグリッドのデフォルトが、ページに適用されます。
レイアウトグリッドの設定は、次のようにして行えます。
➤ 新規ドキュメントを作成し、「レイアウトグリッド」オプションを選択します(日本語機能セットの場合のみ)。 デフォルトマスターページに使用するレイアウトグリッドを設定できます。
➤ 特定のページ(またはマスターページ)を選択して、レイアウト/レイアウトグリッド設定を指定します。
この説明でわかるように、レイアウトグリッド設定は、ページのプロパティ(kPageBoss)です。
次の図に、InDesign CS3-J のレイアウトグリッド設定ダイアログボックスを示します(対応するモデルインターフェイスも示されています)。
このダイアログボックスの一番上のフレームでは、レイアウトグリッドのテキストの特性を指定します。デフォルトの組み方向(縦または横)、フォントファミリおよびスタイル、サイズ、水平比率および垂直比率、字間、行間などが含まれています。
中央のフレームでは、グリッドの特性を指定します。1 行あたりの文字数、行数、段数、段間が含まれています。
第 3 章 日本語のレイアウト レイアウトグリッド 14
一番下のフレームでは、レイアウトグリッドの開始位置とマージンを指定します。 すべてのマージンをユーザが指定するわけではありません。 ユーザインターフェイスでは、いくつかのマージンは、グリッドの特性と開始位置に基づいて自動的に決定されます(SDK¥source¥public¥interfaces¥cjk¥ICJKLayoutGridData.h の enum GridStartingPoint を参照してください)。次の表をご覧ください。
この図には、ユーザインターフェイスウィジェットで設定するデータに対応するモデルインターフェイスも示されています。 ユーザが指定する段組とマージンに関連する設定、一番上のフレームにある ICJKGridData 設定と組み方向の設定、グリッド開始位置の設定が総合されることで、マージンと段組のすべての設定が決定されます。 ユーザインターフェイスでは、一部のマージン値のみを設定します。ほかのマージン値は、このダイアログボックスのほかの値に基づいて自動的に計算されます。 これによって、ユーザが指定したとおりのサイズを持つレイアウトグリッドになります。 レイアウトグリッドのバウンディングボックスの最終的なサイズは、ダイアログボックスの一番下に表示されます(高さ x 幅が mm 単位で示されます)。
グリッド開始位置 図 説明
天/小口 上部および外側のマージンに基づいてレイアウトグリッドが配置されます。
天/ノド 上部および内側のマージンに基づいてレイアウトグリッドが配置されます。
地/小口 下部および外側のマージンに基づいてレイアウトグリッドが配置されます。
地/ノド 下部および内側のマージンに基づいてレイアウトグリッドが配置されます。
天地中央 ページの垂直方向の中央にレイアウトグリッドが配置されます。 ユーザは小口のみを指定します。ノドは自動的に決定されます。
小口ノド中央 ページの水平方向の中央にレイアウトグリッドが配置されます。 ユーザは天のみを指定します。地は自動的に決定されます。
天地/小口ノド中央 ページの水平方向および垂直方向の中央にレイアウトグリッドが配置されます。 ユーザはいずれのマージンも指定しません。
第 3 章 日本語のレイアウト レイアウトグリッド 15
クラスダイアグラムここでは、レイアウトグリッドに関連する Boss クラスおよびインターフェイスについて説明します。
kDocWorkspaceBoss と kWorkspaceBoss
kDocWorkspaceBoss と kWorkspaceBoss には、デフォルトのレイアウトグリッド設定を保持するインターフェイスが集約されています。kWorkspaceBoss にはアプリケーションのデフォルトが保持されます。 新規ドキュメントを作成すると、kWorkspaceBoss のデフォルトのレイアウトグリッド設定が、そのドキュメントの kDocWorkspaceBoss に複製されます。 ユーザがそのドキュメントのデフォルトのレイアウトグリッド設定を変更した場合は、kDocWorkspaceBoss のレイアウトグリッド設定のみが変更されます。
➤ ICJKLayoutGridDefaults:レイアウトグリッドのデフォルト設定(テキストサイズ、フォント、アキ量のデータなど)が保持されます。 このインターフェイスは ICJKGridData のサブクラスです。Get/SetGridStartingPoint など、レイアウトグリッド固有のアクセサメソッドがいくつか追加されています。
➤ ICJKGridPrefs:ドキュメント全体の文字枠グリッドの環境設定(各文字セルの形状や、すべてのレイアウトグリッドを表示するかどうかを示すフラグなど)が保持されます。
➤ ICJKGridPainter:ワークスペースのグリッドぺインター Boss クラスの ID が保持されます。 グリッドぺインター Boss クラス ID を設定するには、「kSetCJKGridPainterCmdBoss」を参照してください。 指定する Boss クラスでは、IDrawCJKGrid インターフェイスの実装を集約する必要があります。 (アプリケーションで提供されている IDrawCJKGrid の実装は、kDefaultCJKGridDrawBoss にあります。)
第 3 章 日本語のレイアウト レイアウトグリッド 16
kDocBoss
kDocBoss には、字送りに関するフラグがいくつか集約されています。
➤ ICJKGridData (IID_ITRACKINGCJKGRIDDATA):CJK グリッドに基づいた字送りデータが保持されます。 このデータは、IBoolData (IID_ITRACKWITHCJKGRID) が kTrue に設定されている場合に使用されます。
➤ IBoolData (IID_ITRACKWITHCJKGRID):CJK グリッドに基づいた字送りを有効または無効にします。
➤ IBoolData (IID_ITRACKWITHVERTICALGRID):字送りのためのグリッドの方向が保持されます。
kPageBoss
kPageBoss には、ページ固有のレイアウトグリッド設定、およびレイアウトグリッドの描画を行う実装への参照が保持されます。 新しく作成したドキュメントには、1 つのマスターページ(「A」)と、マスターページに基づく 1 つの本文ページがあります。 マスターページのレイアウトグリッドには、ユーザが設定を変更していない限り、kDocWorkspaceBoss のレイアウトグリッドのデフォルトが継承されています。 ユーザは、個々のページのレイアウトグリッド設定を変更して、マスターページから適用された設定を上書きすることができます。
➤ ICJKGridData:テキスト関連のグリッド設定が保持されます。
➤ ICJKLayoutGridData:グリッド開始位置、およびマスターページのグリッドデータをページに適用するかどうか(適用する場合は、この Boss の ICJKGridData は無視されます)が保持されます。
➤ ICJKGridPainter:ページのグリッドぺインター Boss クラスの ID が保持されます。 グリッドぺインター Boss クラス ID を設定するには、「kSetCJKGridPainterCmdBoss」を参照してください。 指定する Boss クラスでは、IDrawCJKGrid インターフェイスの実装を集約する必要があります。 (アプリケーションで提供されている IDrawCJKGrid の実装は、kDefaultCJKGridDrawBoss にあります。)
➤ ICJKGridManager:レイアウトグリッドのやり取りの様々な面を管理し、グリッド設定の計算結果を提供します。
第 3 章 日本語のレイアウト レイアウトグリッド 17
kDefaultCJKGridDrawBoss
kDefaultCJKGridDrawBoss は、アプリケーションで提供されているグリッド描画の実装です。これは、レイアウトグリッドとフレームグリッドの両方で共有されます。
➤ IDrawCJKGrid:グリッドを描画するコードが含まれています。 (このインターフェイスのカスタム実装を備えた Boss を指定することで、カスタムのグリッド描画コードを使用することができます。 詳しくは、前述の「ICJKGridPainter」および「kSetCJKGridPainterCmdBoss」を参照してください。)
kUtilsBoss
kUtilsBoss には、グリッド関連の操作を行うためのユーティリティインターフェイスが集約されています。
➤ ICJKGridUtils:レイアウトグリッド用の便利なブリッジメソッドが提供されています。
選択関連の Boss およびスイートインターフェイス
これまでに挙げたモデル関連の Boss での操作に加えて、現在の選択コンテキストにおけるレイアウトグリッド関連の設定を操作することもできます。これには、ICJKGridSuite インターフェイスを使用します。その CSB は、次の Boss に集約されています。
➤ kApplicationDefaultSuiteBoss:アプリケーションのデフォルトワークスペース kWorkspaceBoss のデフォルトのレイアウトグリッドを設定します。
➤ kDocumentDefaultSuiteBoss:ドキュメントワークスペース kDocWorkspaceBoss のデフォルトのレイアウトグリッドを設定します。
選択アーキテクチャについて詳しくは、『Adobe InDesign CS3 Programming Guide』の「Selection Fundamentals」の章、および『Adobe InDesign CS3 Solutions』の「Selection」の章を参照してください。
第 3 章 日本語のレイアウト レイアウトグリッド 18
ナビゲーションダイアグラム次の図に、あるレイアウトグリッド関連の Boss から別の Boss に移動する方法を示します。
コマンドと通知レイアウトグリッドコマンドのリストをこの節の表に示します。
kWorkspaceBoss
kPageBoss
ICJKGridPrefs
ICJKGridPainter
IBoolData (IID_ITRACKWITHCJKGRID)
IBoolData (IID_ITRACKWITHVERTICALGRID)
ICJKGridData
ICJKGridData (IID_ITRACKINGCJKGRIDDATA)
ICJKGridPainter
ICJKGridPrefs
ICJKLayoutGridData
ICJKGridManager
ICJKGridPainter kDefaultCJKGridDrawBoss
IDrawCJKGrid
kUtilsBoss
ICJKGridUtils
ICJKGridPainter::QueryDrawCJKGrid1
1ICJKGridPainter::QueryDrawCJKGrid
ドキュメント
IPageList
1
1..*
IPageList::GetNthPageUID
IMasterPage
0..1
1
IMasterPage::GetMasterPageUID
IDocument
1
1ICJKGridUtils::QueryLayoutGrid
IDocument::GetDocWorkSpace
1
1ICJKGridUtils::QueryLayoutGridManager
ICJKGridUtils::QueryLayoutGrid は、レイアウトグリッドのパラメータを定義する kPageBoss(マスターページか非マスターベージの場合があり得ます)のインターフェースを返します。
ICJKLayoutGridDefaults ICJKLayoutGridDefaults
kDocBoss
kDocWorkspaceBoss
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
通常のページを取得する為に、IPageList(kDocBoss)に由来する kPageBossかドキュメント階層の中の対象のスプレッドを通じてナビゲートしてください。マスターページを取得する為に、通常のページの先頭(kPageBoss)と IMasterPage::GetMasterPageUID コールまたは、ドキュメント階層のマスタースプレッドレイヤーを通じてナビゲートしてください。マスターページは他のマスターページに基づいているかもしれませんので kInvalidUID を得るまで、IMasterPage::GetMasterPageUID をコールする必要があるかもしれません。
第 3 章 日本語のレイアウト レイアウトグリッド 19
kSetCJKGridDataCmdBoss
目的: レイアウトグリッドまたはフレームグリッドのグリッドデータを設定します。
呼び出されるもの:
ストーリーまたはマルチカラムのフレームに対してこのコマンドが呼び出された場合(以下の ItemList 入力を参照してください)は、kApplytoAttributeListCmdBoss および kApplyStoryThreadStyleCmdBoss も呼び出されます。 ストーリーがグリッドフォーマットに基づいている場合、kApplytoAttributeListCmdBoss にはグリッドフォーマットの属性が使用されます。そうでない場合は、ストーリーの ICJKGridData に基づいて kApplytoAttributeListCmdBoss の属性が設定されます。 また、グリッドフォーマットに基づくフレームグリッドを持つストーリーに対してこのコマンドが呼び出された場合は、そのグリッドフォーマットに対して kSetCJKGridDataCmdBoss が呼び出されてオブザーバに通知されることによって、フレームグリッドの文字数が再計算されます。
インターフェイス:
INamedGridUID:(必須)kInvalidUID、またはこのグリッド設定のベースとして使用するグリッドフォーマットの UID を指定できます。 (ソースデータがグリッドフォーマットである場合には、INamedGridUID を使用してデータを指定することもできます。) IID_INAMEDGRIDUID を介して UID を用いてコマンドデータを指定すると、その UID が生成され、有効なインスタンスが取得された場合は IID_IFILTEREDCJKGRIDCMDDATA が無視されます。 UID が有効な場合は、そのグリッドフォーマットが同じデータベース上に存在している必要があります。 コマンドではその UID からの ICJKGridData が使用され、クラスに対して INamedGridUID のクエリが行われ、その UID も設定されます。
IInterfaceIDData:(オプション)ItemList のターゲットアイテムのどの IID を変更するかを指定します。 (一部の Boss では、ICJKGridData は異なる IID で提供されています。例えば、kDocBoss の IID_ITRACKINGCJKGRIDDATA などがそうです。) 指定しなかった場合は、IID_ICJKGRIDDATA がデフォルトとして使用されます。
IFilteredCJKGridCmdData:(必須)ターゲットに対する特定のグリッド設定をフィルタします。 このインターフェイスの特定の Set*** メソッドを呼び出すと、SetFieldValid メソッドが自動的に呼び出されます(つまり、コマンドクライアントが SetFieldValid を呼び出す必要はありません)。
IWhenToRecalcCJKGrid:(オプション)特定のコマンドフェーズ(Do および DoDynamicO。CS3 以降のバージョンでは、取り消しおよびやり直しの実行時には適用されません)に対し CJK グリッドデータを再計算する必要がある場合、このコマンドの特定のオブザーバ(そのコマンド実装そのものでなく)に通知します。 特定の時点でオブザーバにこのコマンドを無視させるには、このインターフェイスの Skip*** メソッドを呼び出します。 これはある操作の最中にコマンドが呼び出された場合に役立ちます。例えば、フレームグリッドダイアログボックスで後からブロードキャストが発生し、再計算や無効化がトリガされた場合などです。
ItemList 入力: ICJKGridData を持つ任意の Boss クラス(kPageBoss、kMultiColumnItemBoss、kTextStoryBoss)の UID のリスト。すべてのアイテムは同じデータベース上に存在している必要があります。
オブザーバへの通知:
Boss アイテムのサブジェクトが通知されます(theChange = kSetCJKGridDataCmdBoss、protocol = IID_ICJKGRIDDATA)。 入力アイテムリストのアイテムが kTextStoryBoss または kNamedGridBoss の場合、ドキュメントのサブジェクトも通知されます(theChange = kSetCJKGridDataCmdBoss、protocol = IID_ICJKGRIDDATA(アイテムが kTextStoryBoss の場合)または protocol = IID_INAMEDGRIDUID(アイテムが kNamedGridBoss の場合))。
ItemList 出力:(なし)
コマンドの使用例:
SnpModifyLayoutGrid.cpp(SnippetRunner プラグイン)
第 3 章 日本語のレイアウト レイアウトグリッド 20
kSetCJKGridPainterCmdBoss
kSetCJKGridPrefsCmdBoss
目的: レイアウトグリッドまたはフレームグリッドの CJKGridPainter の実装を設定します。
呼び出されるもの:
(なし)
インターフェイス:
IClassIDData:(必須)目的の ICJKGridPainter が実装されている ClassID。
ItemList 入力: ICJKGridPainter を集約している Boss クラスの UID のリスト。すべてのアイテムは同じデータベース上に存在している必要があります。
オブザーバへの通知:
theChange = kSetCJKGridPainterCmdBoss、protocol = IID_ICJKGRIDPAINTER。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
(なし)
目的: 環境設定ダイアログボックスのレイアウトグリッド(文字枠グリッド)の環境設定を設定します。 そのレイアウトグリッドに関連付けられているドキュメントがある場合、ドキュメントの表示が新しい設定を使用して更新されます。
呼び出されるもの:
(なし)
インターフェイス:
ICJKGridPrefs:(必須)環境設定の設定。
IUIDData:使用されていません。
ItemList 入力: ICJKGridPrefs を持つ任意の Boss クラス(kWorkspaceBoss か kDocWorkspaceBoss のいずれか)の UID。
オブザーバへの通知:
theChange = kSetCJKGridPrefsCmdBoss、protocol = IID_ICJKGRIDPREFS。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
SnpModifyLayoutGrid.cpp(SnippetRunner プラグイン)
第 3 章 日本語のレイアウト レイアウトグリッド 21
kSetCJKLayoutGridDataCmdBoss
kSetCJKLayoutGridDefaultsCmdBoss
目的: kPageBoss の ICJKLayoutGridData を設定します。
呼び出されるもの:
(なし)
インターフェイス:
ICJKLayoutGridData:(必須)レイアウトグリッドのデータ設定を指定します。 SetUseMaster メソッドを使用して、そのページのレイアウトグリッドにマスターページのレイアウトグリッドを使用するかどうかを指定できます。
ItemList 入力: ページ(kPageBoss。マスターページの場合もありますし、本文ページの場合もあります)の UID のリスト。すべてのアイテムは同じデータベース上に存在している必要があります。
オブザーバへの通知:
theChange = kSetCJKLayoutGridDataCmdBoss、protocol = IID_ICJKLAYOUTGRIDDATA。 ドキュメントの ISubject のみが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
SnpModifyLayoutGrid.cpp(SnippetRunner プラグイン)
目的: ワークスペース Boss(kDocWorkspaceBoss または kWorkspaceBoss)のデフォルトのレイアウトグリッド設定を設定します。
呼び出されるもの:
(なし)
インターフェイス:
ICJKLayoutGridDefaults:(必須)コピー元のレイアウトグリッドのデフォルト設定。コピー先は、ItemList のアイテムの同じインターフェイスになります。
ItemList 入力: kDocWorkspaceBoss または kWorkspaceBoss の UID(どちらも ICJKLayoutGridDefaults があります)。
オブザーバへの通知:
theChange = kSetCJKLayoutGridDefaultsCmdBoss、protocol = IID_ICJKLAYOUTGRIDDEFAULTS。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
SnpModifyLayoutGrid.cpp(SnippetRunner プラグイン)
第 3 章 日本語のレイアウト レイアウトグリッド 22
レイアウトグリッドの操作
kNewDocCmdBoss で新規ドキュメントを作成する際のレイアウトグリッド設定
新規ドキュメントのレイアウトグリッド設定をセットアップする手順は、2 つの段階に分かれています。
まず、マージンと段組のみが設定されたドキュメントを作成する場合と同様、kNewDocCmdBoss コマンドと INewDocCmdData インターフェイスを使用してドキュメントを作成します。 このときに、CJK グリッドプラグインの新規ドキュメントレスポンダサービス(kDuringNewDocSignalResponderService)によって、グローバルワークスペースからドキュメントワークスペースにグリッドのデフォルトがコピーされます。
新規ドキュメントを作成したら、次のコマンドを呼び出して、ドキュメントのデフォルトマスターページに追加のレイアウトグリッドデータをセットアップします(グリッド設定を 1 手順で元に戻せるように、複合シーケンスコマンド kCompoundSequenceCmdBoss を使用してください)。
➤ 「kSetCJKLayoutGridDataCmdBoss」
➤ 「kSetCJKGridDataCmdBoss」
➤ kSetPageMarginsCmdBoss(オプション、ページマージンを変更する場合)
➤ kSetColumnGutterCmdBoss(オプション、段間設定を変更する場合)
➤ kSetPageColumnsCmdBoss(オプション、ページ段組設定を変更する場合)
このコマンドシーケンスの間に、レイアウトグリッド設定に基づいて、ページマージン、段間、ページ段組の設定(1 行あたりの文字数、行数、グリッドの組み方向、グリッド開始位置、段数など)が計算されます。
この処理の例については、SnpModifyLayoutGrid.cpp スニペットコードを参照してください。
本文ページまたはマスターページのレイアウトグリッド設定の変更
特定のページ(マスターページおよびそうでないページ)のレイアウトグリッド設定を変更する手順は、この前の項目の 2 番目の手順と似ています。 グリッドとマージンを設定するには、次のコマンドを(複合コマンドシーケンスで)呼び出します。
➤ 「kSetCJKLayoutGridDataCmdBoss」
➤ 「kSetCJKGridDataCmdBoss」
➤ kSetPageMarginsCmdBoss(オプション、ページマージンを変更する場合)
➤ kSetColumnGutterCmdBoss(オプション、段間設定を変更する場合)
➤ kSetPageColumnsCmdBoss(オプション、ページ段組設定を変更する場合)
この処理の例については、SnpModifyLayoutGrid.cpp スニペットコードを参照してください。
ただし、これらのコマンドを使用する前に、特定のページまたはマスターページのレイアウトグリッド設定を変更するかどうかを決定する必要があります。 マスターを使用している特定のページの設定を変更すると、レイアウトグリッド設定はマスターページの設定と一致しなくなります。 また、マスターページはネストされている(つまり、あるマスターページは別のマスターページに基づいて作成されている)場合があることにも注意してください。
第 3 章 日本語のレイアウト フレームグリッド 23
特定のページでマスターページのレイアウトグリッド設定が使用されているかどうかを調べるには、kPageBoss の ICJKLayoutGridData インターフェイスをクエリして、GetUseMaster メソッドを呼び出します。
➤ kFalse が返された場合は、現在の kPageBoss の ICJKGridData にレイアウトグリッド設定が存在しています。
➤ kTrue が返された場合は、ICJKGridUtils::QueryLayoutGrid を使用して(thePage パラメータについては、現在の kPageBoss の任意のインターフェイスを渡します)、マスターページの Boss(ここでも kPageBoss)のインターフェイスをクエリします。
特定のページの実際のレイアウトグリッド設定を保持しているマスターページをチェックする方法の例については、SnpInspectLayoutGrid.cpp スニペットコードを参照してください。
特定のページ(マスターページまたは本文ページ)のレイアウトグリッド設定の取得
レイアウトグリッド設定には、kPageBoss の ICJKLayoutGridData インターフェイスを使用してアクセスできます。 ページの実際のレイアウトグリッドデータが保持されている kPageBoss に対して、ICJKLayoutGridData および ICJKGridData のクエリを行うことができます。 この操作は、ICJKGridUtils::QueryLayoutGridData メソッド(kUtilsBoss)を使用すると簡単に行えます。レイアウトグリッドデータがマスターページのマスターページのマスターページのものである場合でも、このメソッドを使用すれば、レイアウトグリッドデータが定義されている kPageBoss の特定のインターフェイスが返されます。
// thePage は非マスターページの kPageBoss のインターフェイスです// ICJKLayoutGridData のクエリ --// QueryLayoutGrid のデフォルトの PMIID 値を使用しますInterfacePtr<ICJKLayoutGridData> gridData((ICJKLayoutGridData*)Utils<ICJKGridUtils>()->QueryLayoutGrid(thePage));
// ICJKGridData のクエリ --// 特定の PMIID 値を使用しますInterfacePtr<ICJKGridData> gridData((ICJKGridData*)Utils<ICJKGridUtils>()->QueryLayoutGrid(thePage,IID_ICJKGRIDDATA));
特定のページのレイアウトグリッド設定を取得する方法の例については、SnpInspectLayoutGrid.cpp スニペットコードを参照してください。
フレームグリッドワークフローとフレームグリッド設定の説明
InDesign では、視覚補助のためのグリッドが付いたテキストフレームを作成できます。これによって、文字が正しくテキストフレームに配置されているかどうかを見ることができます。 このようなテキストフレームは、「フレームグリッド」と呼びます。フレームグリッドには、次の 2 種類のアドーンメントが備わっています。
1. 文字ガイドのアドーンメント(グリッド、行、または N/ Z)。
2. 文字数(1 行の文字数 x 行数。フレームの左下隅の外側に表示されます)。
フレームグリッド設定は、テキストフレームのプロパティ(kMultiColumnItemBoss)と考えることができます。 フレームグリッド設定のデフォルトおよび環境設定は、ドキュメントワークスペースとグローバルワークスペースの両方に保持されます。 フレームグリッドはテキスト属性とテキスト行のグリッド揃え(グリッド揃え属性の設定に応じて)にも影響します。
第 3 章 日本語のレイアウト フレームグリッド 24
InDesign では、ユーザは次の方法でフレームグリッドを作成できます。
➤ 横組みグリッドツールまたは縦組みグリッドツールを使用して、フレームグリッドを配置します。この場合、フレームグリッドのサイズは、行数および 1 行あたりの文字数が整数値になるように調整されます。
➤ 選択ツールが選択されている状態で、テキストフレームを右クリックしてコンテキストメニューを表示し、フレームの種類/フレームグリッドを指定します。 または、テキストフレームが「選択されている」状態(選択ツールを使用して選択されているか、テキストフレーム内にテキストキャレットが表示されている状態)で、メニューからオブジェクト/フレームの種類/フレームグリッドを選択します。
グリッドフォーマットパネルで「レイアウトグリッド」が選択されているときに、横組みグリッドツールまたは縦組みグリッドツールを使用して新規フレームグリッドを作成すると、テキスト関連のデフォルトのグリッド設定(ページパネルで選択されているページの対応するレイアウトグリッド設定)が適用されます。
注意 : このアルゴリズムでは、ILayoutUIUtils::GetSelectedPages を使用して、どのページに基づいてレイアウトグリッド設定を行うかを決定します。 ページパネルで複数のページが選択されている場合は、選択されているページのリストの最初のアイテムが使用されます。
グリッドフォーマットパネルで特定のグリッドフォーマットが選択されている場合は、その選択されているグリッドフォーマットの設定が、新しいフレームグリッドに適用されます。それ以外の場合は、ドキュメントワークスペースのデフォルトのフレームグリッド設定が新しいフレームグリッドに適用されます。プログラムの中でフレームグリッドの作成を行う場合は、グリッドの設定方法を自分で決めることができます。
いずれかのフレームグリッドツールのオプションを表示するか、またはフレームグリッドを右クリックしてフレームグリッド設定メニューを選択すると、次の図のようなフレームグリッド設定ダイアログボックスが表示されます(対応するモデルインターフェイスも示されています)。
このダイアログボックスの一番上のウィジェットグループでは、フレームグリッドのテキストの特性を指定します。フォントファミリおよびスタイル、サイズ、水平比率および垂直比率、字間、行間などが含まれています。 これは、レイアウトグリッド設定ダイアログボックスの同じ部分と非常によく似ており、デフォルトのストーリーの組み方向(縦組みまたは横組み)を指定しないことだけが異なります。
第 3 章 日本語のレイアウト フレームグリッド 25
2 つめのウィジェットグループでは、揃えの特性を指定します。グリッド揃え、行揃え、文字揃えが含まれています。
3 つめのウィジェットグループでは、表示オプションを指定します。 文字数の表示場所(なし、左、上、右、下)、文字数表示のフォントサイズ、およびフレームグリッドアドーンメントオプション(文字枠、N/ Z 表示、揃え表示、文字枠と N/ Z)を指定できます。N/ Z とは、中に文字がない場合にフレーム全体に表示される斜めの線のことです。 フレームが縦組みの場合、斜めの線は「N」の字を作る方向(左上から右下)に引かれ、フレームが横組みの場合は「Z」の字を作る方向に引かれます。
一番下のウィジェットグループでは、グリッドの特性を指定します。行文字数、行数、段数、段間が含まれています。
一番下のグループの下にある静的なテキストウィジェットには、前述のすべての設定に基づいて計算されたフレームグリッドの寸法を表すデータが表示されます。
前述の図には、ユーザインターフェイスウィジェットで設定するデータに対応するモデルインターフェイスも示されています。 一番下のフレームの行数と段数の設定と、一番上のフレームにある ICJKGridData 設定が総合されることで、段とフレームのバウンディングボックス設定が決定されます。 これによって、ユーザが指定したとおりのサイズを持つフレームグリッドになります。 フレームグリッドのバウンディングボックスの最終的なサイズは、ダイアログボックスの一番下に表示されます(高さ x 幅が mm 単位で示されます)。
フレームグリッド設定とテキストモデルの間のやり取りテキストモデルはフレームグリッド設定に基づいていくつかのテキスト属性を作成します。その結果、段落コンポーザの動作にその影響が及んでいます。 グリッドフォーマットに基づく設定を持ったフレームグリッドがあるとします。 段落スタイルが設定されていない場合は、ITextAttributes インターフェイス(kNamedGridBoss)に保持されているテキスト属性が、テキスト属性チェインの前のほうに挿入されます。 IGridRelatedStyle の新しいメソッド(kComposeStyleBoss の GetScaleAffectsLineHeight や SetScaleAffectsLineHeight など。「kComposeStyleBoss への日本語固有機能の追加」を参照)は、この新しいアプローチの結果追加されたものです。 フレームグリッドデータが設定されるときに、テキスト属性を設定するために呼び出されるコマンドのリストについては、「kSetCJKGridDataCmdBoss」を参照してください。
クラスダイアグラムここでは、フレームグリッドに関連する Boss クラスおよびインターフェイスについて説明します。
kDocWorkspaceBoss と kWorkspaceBoss
kDocWorkspaceBoss と kWorkspaceBoss には、デフォルトのフレームグリッド設定を保持するインターフェイスが集約されています。kWorkspaceBoss にはアプリケーションのデフォルトが保持されます。 新規ドキュメントを作成すると、kWorkspaceBoss のデフォルトのフレームグリッド設定がそのドキュメントの kDocWorkspaceBoss に継承されます。ユーザがそのドキュメントのデフォルトのフレームグリッド設定を変更した場合は、kDocWorkspaceBoss のフレームグリッド設定のみが変更されます。 いずれかのフレームグリッドツールを使用してフレームグリッドを描画したときに、このデフォルトが使用されます。
第 3 章 日本語のレイアウト フレームグリッド 26
➤ ICJKFrameGridDefaults:フレームグリッドのデフォルト設定(テキストサイズ、フォント、アキ量のデータなど)が保持されます。 このインターフェイスは ICJKGridData のサブクラスです。Get/SetCharacterCountTextSize、Get/SetView、Get/SetCharacterCountLocation など、フレームグリッド固有のアクセサメソッドがいくつか追加されています。
➤ ICJKGridPrefs:ドキュメント全体の文字枠グリッドの環境設定(各文字セルの形状や、すべてのフレームグリッドを表示するかどうかを示すフラグなど)が保持されます。
➤ IStyleNameTable (IID_INAMEDGRIDSNAMETABLE):グリッドフォーマットパネルに追加されたグリッドフォーマットの UID が保持されます。 この UID は、kNamedGridBoss のインスタンスを参照しています。
➤ INamedGridUID:デフォルトのグリッドフォーマットの UID が保持されます。 この UID は、kNamedGridBoss の特定のインスタンスを参照しています。
kNamedGridBoss
kNamedGridBoss は、スタイル名テーブルにあるグリッドフォーマットを表すパーシスタント Boss クラスです。
➤ ICJKGridData:グリッドフォーマットのテキスト関連のグリッド設定が保持されます。
➤ ITextAttributes:テキストコンポジションに影響を与えるテキスト属性が保持されており、このグリッドフォーマットを使用しているテキストストーリーに適用することができます。 (「kSetCJKGridDataCmdBoss」を参照してください。)
➤ INamedGridInfo:グリッドフォーマットの名前とキーボードショートカットが保持されます。
➤ IPMPersist:グリッドフォーマットデータをデータベースに保持します。
第 3 章 日本語のレイアウト フレームグリッド 27
kTextStoryBoss
kTextStoryBoss には、ストーリー固有のフレームグリッド設定が集約されています。 つまり、リンクされた複数のフレームにまたがってテキストストーリーが構成されている場合でも、1 つのテキストストーリーにはフレームグリッド設定は 1 つしか存在しない、ということになります。
➤ ICJKGridData:テキストストーリーの実際のグリッド設定が保管されています。リンクされた複数のフレームグリッドにまたがってテキストが設定されたときに、これらのグリッド設定をストーリー全体に適用することができます。
➤ INamedGridUID:このストーリーに関連付けられているグリッドフォーマットの UID が保持されます。
➤ IObserver(IID_ICJKGRIDSTORYOBSERVER):(内部使用のみ) フレーム内に表示可能文字数を超えてテキストが入力されている場合は、テキストの挿入や削除が行われたときに、このオブザーバによってフレームグリッドの文字数のアドーンメントが更新されます。 (通常、文字数のアドーンメントの更新はフレームの描画時に行われます。)
➤ IStoryOptions:(Text プラグインによって追加されます)GetCJKGridActive によって、ストーリー Boss のグリッドの状態が返されます。 (これを設定するコマンドは 「kActivateCJKGridCmdBoss」 です。)
➤ ITextAttributes:(Text プラグインによって追加されます)このストーリーのデフォルトのテキスト属性が保持されます。 ストーリーに関連付けられているフレームグリッドがグリッドフォーマットに基づいている場合は、このリストに kNamedGridBoss の ITextAttributes が追加されます。 (「kSetCJKGridDataCmdBoss」を参照してください。)
kFrameItemBoss
kFrameItemBoss には、フレームグリッドの描画に関連するインターフェイスが集約されています。
➤ ICJKGridPainter:特定のフレームのグリッドぺインター Boss クラスの ID が保持されます。 グリッドぺインター Boss クラスの ID は、「kSetCJKGridPainterCmdBoss」を使用することで設定できます。 指定する Boss クラスでは、IDrawCJKGrid インターフェイスの実装を集約する必要があります。 (アプリケーションで提供されている IDrawCJKGrid の実装は、kDefaultCJKGridDrawBoss にあります。)
➤ ICJKGridManager:フレームのグリッドマネージャ。 グリッド設定の計算結果を提供します。
第 3 章 日本語のレイアウト フレームグリッド 28
kMultiColumnItemBoss
kMultiColumnItemBoss には、関連するテキストストーリーのフレームグリッド関連の設定のコピーと、幾つかのグリッドアドーンメント表示オプションが保持されます。
➤ ICJKGridData:このテキストフレームに関連付けられているテキストストーリーのグリッド設定のプロキシとして働きます。
➤ INamedGridUID:このテキストフレームに関連付けられているテキストストーリーのグリッドフォーマットのプロキシとして働きます。
➤ IAdornmentVisibility(IID_ICJKGRIDVISIBILITY):グリッドオプションのフレームグリッドアドーンメントを表示するかどうかを設定します。
➤ IAdornmentVisibility(IID_ICJKALIGNVISIBILITY):行(揃え)オプションのフレームグリッドアドーンメントを表示するかどうかを設定します。
➤ IAdornmentVisibility(IID_ICJKZNVISIBILITY):「N/ Z」オプションのフレームグリッドアドーンメントを表示するかどうかを設定します。
➤ ICJKChartCountOptions:フレームグリッドの一番下に表示される文字数アドーンメントの相対的な位置とサイズが保持されます。
➤ IPMUnknown(IID_ICHARCOUNTBOUNDSDATA):フレームグリッドの一番下に表示される文字数アドーンメントの描画境界が保持されます。(これはプライベートインターフェイスを使用しています。)
選択関連の Boss およびスイートインターフェイス
これまでに挙げたモデル関連の Boss での操作に加えて、現在の選択コンテキストにおけるフレームグリッド関連の設定を操作することもできます。これには、ICJKGridSuite インターフェイスを使用します。その CSB は、次の Boss に集約されています。
➤ kApplicationDefaultSuiteBoss:アプリケーションのデフォルトワークスペース kWorkspaceBoss のデフォルトのフレームグリッドを設定します。
➤ kDocumentDefaultSuiteBoss:ドキュメントワークスペース kDocWorkspaceBoss のデフォルトのフレームグリッドを設定します。
➤ kLayoutSuiteBoss:レイアウト選択(選択されているテキストフレーム)に関連付けられているフレームグリッド設定を設定します。
➤ kTextSuiteBoss:テキスト選択(テキストフレーム内の選択されているテキスト)に関連付けられているフレームグリッド設定を設定します。
➤ kGalleyTextSuiteBoss:ゲラビュー(InDesign ストーリーエディタまたは InCopy ゲラビュー)での選択に関連付けられているフレームグリッド設定を設定します。
第 3 章 日本語のレイアウト フレームグリッド 29
注意 : フレームグリッドダイアログボックスを表示するメニュー項目は、使用できない状態になっています。
選択アーキテクチャについて詳しくは、『Adobe InDesign CS3 Programming Guide』の「Selection Fundamentals」の章、および『Adobe InDesign CS3 Solutions』の「Selection」の章を参照してください。
ナビゲーションダイアグラム次の図に、あるフレームグリッド関連の Boss から別の Boss に移動する方法を示します。
ドキュメント
kDocWorkspaceBoss
IStyleNameTable (IID_INAMEDGRIDSNAMETABLE)
kTextStoryBoss
kMultiColumnItemBoss
kFrameItemBoss
kNamedGridBoss
INamedGridInfo
ICJKGridData
1
1..*
IStyleNameTable::GetNthStyle
IStoryList
1
0..*
IStoryList::GetNthUserAccessibleStoryUID
ITextModel
kFrameListBoss1
1ITextModel::QueryFrameList
IFrameList
ITextFrame
1
1..*
IFrameList::QueryNthFrame
IHierarchy
IHierarchy
1
1
IHierarchy::QueryParent
ICJKGridData
ICJKGridData
ICJKGridManager
ICJKGridPainter
INamedGridUID
1
0..1
INamedGridUID::Get
kWorkspaceBoss
IStyleNameTable (IID_INAMEDGRIDSNAMETABLE)
kNamedGridBoss
ICJKGridDataINamedGridInfo
1
1..*.
IStyleNameTable::GetNthStyle
これはユーザにだけアクセス可能なテキストストーリーを参照します。
ITextFrameは、IFrameList::QueryNthFrameの戻り値です。もしかしたら、 kTOPFrameItemBoss(テキストオンパスのアイテム)かもしれません。しかし、テキストオンパスのフレームアイテムは、フレームグリットのプロパティを持っていません。よってそれらはこの図から除かれました。
ICJKFrameGridDefaults
ICJKFrameGridDefaults
ICJKGridPrefs
ICJKGridPrefs
IStoryOptions
ITextAttributes
ITextAttributes
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
第 3 章 日本語のレイアウト フレームグリッド 30
コマンドと通知フレームグリッドの一般的なコマンドを次に示します。
➤ 「kSetCJKGridDataCmdBoss」:このコマンドはレイアウトグリッドとフレームグリッドの両方で使用されます。
➤ 「kActivateCJKGridCmdBoss」
➤ 「kSetAdornmentVisibilityCmdBoss」
➤ 「kSetCJKCharCountOptionsCmdBoss」
➤ 「kApplyCJKGridFormatCmdBoss」
➤ 「kSetCJKFrameGridDefaultsCmdBoss」
➤ 「kSetDefaultFrameGridViewCmdBoss」
グリッドフォーマットのコマンドを次に示します。
➤ 「kCopyOneNamedGridCmdBoss」
➤ 「kCreateNamedGridCmdBoss」
➤ 「kDeleteNamedGridCmdBoss」
➤ 「kEditNamedGridCmdBoss」
➤ 「kLoadNamedGridsCmdBoss」
➤ 「kReplaceNamedGridCmdBoss」
第 3 章 日本語のレイアウト フレームグリッド 31
kActivateCJKGridCmdBoss
目的: IStoryOptions:: SetCJKGridActive を設定することによって、テキストフレームの作成時にフレームグリッドを有効または無効にします(または新しいテキストフレームをフレームグリッドに変えます)。
呼び出されるもの:
「kSetCJKGridDataCmdBoss」、kUserApplyAttrCmdBoss、「kSetAdornmentVisibilityCmdBoss」
インターフェイス:
IBoolData:(必須)グリッドをアクティブにします。kFalse または kTrue。 IStoryOptions::SetCJKGridActive が呼び出されます。
INamedGridUID:(オプション)アイテムリストのアイテムが kTextStoryBoss で、かつそのストーリーで以前グリッドが有効でなかった場合に、ベースとして使用されるグリッドフォーマット。
IFilteredCJKGridCmdData:(オプション)アイテムリストのアイテムが kTextStoryBoss で、かつそのストーリーで以前グリッドが有効でなかった場合に使用される、追加のグリッドデータ設定。 どのデータフィールドを適用するかは、SetFieldValid メソッドを使用して指定します。
ItemList 入力: IStoryOptions を持つ任意の Boss クラス(kTextStoryBoss、kDocWorkspaceBoss、kWorkspaceBoss)の UID。すべてのアイテムは同じデータベースを持っている必要があります。
オブザーバへの通知:
theChange = kActivateCJKGridCmdBoss、protocol = IID_ISTORYOPTIONS。 アイテムが kTextStoryBoss の場合に、アイテムリストおよびドキュメントのアイテムのサブジェクトが通知されます。
ItemList 出力: 該当なし。
コマンドの使用例:
SnpCreateFrameGrid.cpp(SnippetRunner プラグイン)
第 3 章 日本語のレイアウト フレームグリッド 32
kSetAdornmentVisibilityCmdBoss
kSetCJKCharCountOptionsCmdBoss
目的: フレームグリッドに表示されるアドーンメントの種類を設定します。
呼び出されるもの:
(なし)
インターフェイス:
IAdornmentVisibility:(必須)適切な bool16 値を指定して SetVisible を呼び出して、特定のグリッドアドーンメントを表示または非表示にします。 「IInterfaceIDData」も参照してください。
IInterfaceIDData:(必須)表示または非表示にするアドーンメントの種類を指定します。 有効な値は、IID_ICJKALIGNVISIBILITY(テキスト行のアドーンメント)、IID_ICJKGRIDVISIBILITY(グリッド)、および IID_ICJKZNVISIBILITY(「ZN」アドーンメント。斜線のこと)です。
IWhenToRecalcCJKGrid:使用されていません。
ItemList 入力: kMultiColumnItemBoss の UID のリスト(上記の IID はこの Boss に集約されています)。すべてのアイテムは同じデータベース上に存在している必要があります。
オブザーバへの通知:
theChange = kSetAdornmentVisibilityCmdBoss、protocol = IID_IADORNMENTVISIBILITY。 (アイテムリストのアイテムのデータベースに対応する)ドキュメントのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
(なし)
目的: フレームグリッドにアドーンメントとして表示される文字数表示のオプションを設定します。
呼び出されるもの:
(なし)
インターフェイス:
ICJKCharCountOptions:(必須)SetLocation および SetTextSize メソッドを呼び出して、文字数の表示方法を設定します。
ItemList 入力: kMultiColumnItemBoss の UID のリスト。すべてのアイテムは同じデータベース上に存在している必要があります。
オブザーバへの通知:
theChange = kSetCJKCharCountOptionsCmdBoss、protocol = IID_ICJKCHARCOUNTOPTIONS。 (アイテムリストのアイテムのデータベースに対応する)ドキュメントのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
(なし)
第 3 章 日本語のレイアウト フレームグリッド 33
kApplyCJKGridFormatCmdBoss
目的: 現在選択されているテキストフレームにフレームグリッドフォーマットを適用します。
呼び出されるもの:
kUserApplyAttrCmdBoss
インターフェイス:
IBoolData:(必須)kTrue に設定すると、IRangeData が無視され、ストーリー全体にグリッドが適用されます。
IApplyCJKGridDirection:(オプション)アイテムリスト上のアイテムのグリッドの組み方向を指定します。これを使用すれば、ストーリーの組み方向とは異なる方向の属性をグリッドに適用することができます。 詳しくは、「IApplyCJKGridDirection」を参照してください。
IRangeData:(オプション)テキスト関連のグリッド属性のコピー先となるテキスト範囲のデータを指定します。 文字属性には、 kTextAttrFontUIDBoss、kTextAttrFontStyleBoss、kTextAttrPointSizeBoss、kTextAttrXGlyphScaleBoss、kTextAttrYGlyphScaleBoss、kTAScaleAffectsLineHeightBoss、kTACJKGridTrackingBoss、kTextAttrLeadBoss、kTextAttrCharacterHangBoss があります。 段落属性には、 kTextAttrGridAlignmentBoss、kTextAttrAutoLeadBoss、kTextAttrAlignmentBoss があります。
ItemList 入力: ITextModel および ICJKGridData を持つ任意の Boss クラス(kTextStoryBoss など)の UID。
オブザーバへの通知:
(なし)
ItemList 出力: (なし)
コマンドの使用例:
SnpCreateFrameGrid.cpp(SnippetRunner プラグイン)。
第 3 章 日本語のレイアウト フレームグリッド 34
kSetCJKFrameGridDefaultsCmdBoss
kSetDefaultFrameGridViewCmdBoss
目的: ワークスペースの INamedGridUID または ICJKFrameGridDefaults のいずれかを設定します。 INamedGridUID の UID が kInvalidUID である場合は、ICJKFrameGridDefaults を使用してデフォルトが設定され、INamedGridUID は無効に設定されます。 INamedGridUID が有効な場合は、ワークスペースの INamedGridUID が指定の UID に設定されます。
呼び出されるもの:
(なし)
インターフェイス:
INamedGridUID:(必須)デフォルトのグリッドフォーマットを指定します。 kInvalidUID に設定すると、ICJKFrameGridDefaults のデフォルトのフレームグリッド設定が取得されます。
ICJKFrameGridDefaults:(オプション)INamedGridUID が kInvalidUID に設定されている場合に代わりに使用するデフォルト設定を指定します。
ItemList 入力: kWorkspaceBoss または kDocWorkspaceBoss。
オブザーバへの通知:
theClass = kSetCJKFrameGridDefaultsCmdBoss、protocol = IID_INAMEDGRIDUID(INamedGridUID が有効の場合)または IID_ICJKFRAMEGRIDDEFAULTS(INamedGridUID が無効の場合)。ItemList のアイテムのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
(なし)
目的: ICJKFrameGridDefaults::SetView を呼び出すことによって、ワークスペースのデフォルトのフレームグリッドアドーンメントオプションを設定します。
呼び出されるもの:
(なし)
インターフェイス:
IIntData:(必須)フレームグリッドオプション(ICJKFrameGridDefaults::View enum)を指定します。
ItemList 入力: kWorkspaceBoss または kDocWorkspaceBoss。
オブザーバへの通知:
theChange = kSetDefaultFrameGridViewCmdBoss、protocol = IID_ICJKFRAMEGRIDDEFAULTS。ItemList のアイテムのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
(なし)
第 3 章 日本語のレイアウト フレームグリッド 35
kCopyOneNamedGridCmdBoss
kCreateNamedGridCmdBoss
目的: グリッドフォーマットをあるデータベースから別のデータベースにコピーします。
呼び出されるもの:
kNewUIDCmdBoss
インターフェイス:
IUIDData:(必須)コピー元のグリッドフォーマット Boss の UID。
ItemList 入力: ItemList には、グリッドフォーマット Boss のコピー先となるドキュメントの UID が含まれている必要があります。ドキュメントおよびそのワークスペースはデータベースのルートオブジェクトから取得されるので、UID はドキュメント上の任意のものでかまいません。
オブザーバへの通知:
theChange = kCopyOneNamedGridCmdBoss、protocol = IID_INAMEDGRIDSNAMETABLE。コピー先のドキュメントワークスペースが通知されます。
ItemList 出力: 新しくコピーされたグリッドフォーマット Boss の UID。
コマンドの使用例:
(なし)
目的: ワークスペースに新規にグリッドフォーマットを作成します。 同じ名前のものが既に存在している場合は、作成されず、アサートが発生します。
呼び出されるもの:
(なし。データベースに新しい UID が直接作成されます)
インターフェイス:
ICJKGridData:(必須)新しいグリッドフォーマットのグリッド設定。
INamedGridInfo:(必須)新しいグリッドフォーマットのグリッドフォーマット情報。
ItemList 入力: グリッドフォーマットを作成するワークスペース(kDocWorkspace または kWorkspace)の UID。
オブザーバへの通知:
theChange = kCreateNamedGridCmdBoss、protocol = IID_INAMEDGRIDSNAMETABLE。ItemList のアイテムのサブジェクトが通知されます。
ItemList 出力: なし。 新しく作成されたグリッドフォーマットを取得するには、ワークスペースの IID_INAMEDGRIDSNAMETABLE の最新のエントリを取得してください。
コマンドの使用例:
SnpPerformNamedGrid.cpp(SnippetRunner プラグイン)
第 3 章 日本語のレイアウト フレームグリッド 36
kDeleteNamedGridCmdBoss
kEditNamedGridCmdBoss
目的: ワークスペースからグリッドフォーマットを削除し、そのグリッドへの参照をすべて kInvalidUID に設定します。 (詳しくは、「ItemList 入力」を参照してください)。
呼び出されるもの:
kDeleteUIDsCmdBoss
インターフェイス:
IUIDData:(必須)削除するグリッドフォーマットの UID。
ItemList 入力: 1 つのワークスペース(kDocWorkspaceBoss または kWorkspaceBoss)の UID。アイテムリストに指定するワークスペースは 1 つのみにしてください。 ワークスペースが kDocWorkspaceBoss の場合は、同じドキュメントのストーリーおよびデフォルトのフレームグリッド設定(グリッドフォーマットが指定されている場合)から、グリッドフォーマットへの参照が削除されます。 ワークスペースが kWorkspaceBoss の場合は、グローバルワークスペースのデフォルトのフレームグリッド設定から参照が削除されます。
オブザーバへの通知:
theChange = kDeleteNamedGridCmdBoss、protocol = IID_INAMEDGRIDSNAMETABLE。ItemList に渡されたワークスペースのサブジェクトが通知されます。
ItemList 出力:(なし)
コマンドの使用例:
SnpPerformNamedGrid.cpp(SnippetRunner プラグイン)
目的: グリッドフォーマットの名前を変更します。
呼び出されるもの:
(なし)
インターフェイス:
IStringData:(必須)グリッドフォーマットの新しい名前。
ItemList 入力: 変更するグリッドフォーマットの UID。
オブザーバへの通知:
theChange = kEditNamedGridCmdBoss、protocol = IID_INAMEDGRIDINFO。 ドキュメントワークスペース(kDocWorkspaceBoss)上のグリッドフォーマットの場合は、kDocWorkspaceBoss の ISubject が使用されます。 グローバルワークスペース上のグリッドフォーマットの場合は、kWorkspaceBoss の ISubject が使用されます。
ItemList 出力:(なし)
コマンドの使用例:
(なし)
第 3 章 日本語のレイアウト フレームグリッド 37
kLoadNamedGridsCmdBoss
kReplaceNamedGridCmdBoss
フレームグリッドの操作
新規フレームグリッドの作成
まず、kCreateMultiColumnItemBoss を使用して、通常のテキストフレームを作成するのと同じようにして、マルチカラムアイテムを作成します。次に、以下の手順を行います。
➤ kCreateMultiColumnItemBoss のパラメータを設定する際に、ICreateFrameData::SetOrientation を ICreateFrameData::kVertical または ICreateFrameData::kHorizontal のいずれかに設定して、フレームグリッドの組み方向を指定します。
➤ マルチカラムアイテムに関連付けられているテキストストーリーに対して、「kActivateCJKGridCmdBoss」を実行します。
目的: 別の InDesign ドキュメントからグリッドフォーマットを読み込みます。
呼び出されるもの:
kOpenDocCmdBoss、「kCreateNamedGridCmdBoss」、「kReplaceNamedGridCmdBoss」、「kEditNamedGridCmdBoss」
インターフェイス:
ISysFileData:(必須)グリッドフォーマットのデータを取得する IDFile。
IIntData:(必須)ILoadStyleCmdData::kLoadNamedGridsTable に設定します。
ItemList 入力: グリッドフォーマットを追加または変更するターゲットワークスペースの UID。
オブザーバへの通知:
(なし)
ItemList 出力:(なし)
コマンドの使用例:
(なし)
目的: 複数のデータベースのグリッドフォーマットを置き換えます。
呼び出されるもの:
「kSetCJKGridDataCmdBoss」
インターフェイス:
ILoadStyleCmdData:(必須)ソースおよびターゲットの名前テーブルおよびスタイル(グリッドフォーマットの UID)を指定します。 ソースにはコピー元のグリッドフォーマットが存在している必要があります。
ItemList 入力:(不要)
オブザーバへの通知:
(なし)
ItemList 出力:(なし)
コマンドの使用例:
(なし)
第 3 章 日本語のレイアウト フレームグリッド 38
➤ オプションとして、「kApplyCJKGridFormatCmdBoss」を実行して、新しいグリッドフォーマットをテキストフレームのストーリーに適用します。
詳しくは、「kActivateCJKGridCmdBoss」を参照してください。 この処理の例については、SnpCreateFrameGrid.cpp スニペットコード(SnippetRunner プラグイン)を参照してください。
注意 : スニペットコードでは、「kActivateCJKGridCmdBoss」を 2 回使用しています。1 回目はドキュメントワークスペースでグリッドをアクティブ化するために使用し、2 回目はグリッドを非アクティブ化するために使用しています。 kTextStoryBoss の UID を「kActivateCJKGridCmdBoss」コマンドのアイテムリストに渡す場合は、kCreateMultiColumnItemBoss の後で「kActivateCJKGridCmdBoss」を 1 回実行するだけで済みます。
既存のテキストフレームのフレームグリッドへの変更
この処理は、「新規フレームグリッドの作成」と似ています。 フレームの組み方向を設定するために、マルチカラムアイテムのフレームリストの UID を使用して kSetVertFrameCmdBoss を実行する必要があります。 これは、マルチカラムアイテムを新しく作成しているのではないため、フレームの組み方向を設定する ICreateFrameData インターフェイスが存在しないからです。
ワークスペースからのデフォルトのフレームグリッド設定の取得
ワークスペース(kDocWorkspaceBoss または kWorkspaceBoss)から ICJKFrameGridDefaults インターフェイスをクエリします。 ICJKFrameGridDefaults インターフェイスは、グリッドを設定するための汎用インターフェイスである ICJKGridData から継承されています。 (汎用とは、レイアウトグリッドとフレームグリッドの両方に使用されるという意味です。)
ストーリーからのフレームグリッド設定の取得
フレームグリッド設定はテキストストーリー(kTextStoryBoss)に設定されるので、kTextStoryBoss から ICJKGridData をクエリし、ICJKGridData のアクセサメソッドを呼び出すことができます。 ICJKGridData::GridDataMatches または ICJKGridData::NonAlignmentGridDataMatches メソッドを使用して、別の ICJKGridData と比較することができます。
フレームグリッドの組み方向の変更
マルチカラムアイテムのフレームリストの UID を使用して、kSetVertFrameCmdBoss を実行します。
グリッドフォーマットの作成と取得
グリッドフォーマットを作成するには、「kCreateNamedGridCmdBoss」を実行します。 詳しくは、「コマンドと通知」を参照してください。
グリッドフォーマットを取得するには、kDocWorkspaceBoss または kWorkspaceBoss のいずれかで IStyleNameTable(IID_INAMEDGRIDSNAMETABLE に集約されています)をクエリし、名前、インデックス、デフォルト、またはルートを使用して目的のグリッドフォーマットの UID を取得します。 次に、取得した UID が参照している Boss(kNamedGridBoss)を生成します。 この Boss に集約されているインターフェイスについては、「クラスダイアグラム」を参照してください。 この処理の例については、SnpPerformNamedGrid.cpp スニペットコード(SnippetRunner プラグイン)を参照してください。
第 3 章 日本語のレイアウト InCopy CJK ストーリーグリッド属性 39
InCopy CJK ストーリーグリッド属性ワークフローと InCopy CJK ストーリーグリッド設定の説明
InCopy CS3-J では、視覚補助のためのグリッドが付いたストーリーを作成できます。これによって、文字が正しくストーリーに配置されているかどうかを見ることができます。 これらの設定は InCopy CJK ストーリーグリッド属性として設定され、フレームグリッドのように動作します。
InCopy CJK ストーリーグリッド属性は、環境設定の設定グループと考えることができます。 環境設定は、InCopy ドキュメントとグローバルワークスペースの両方、およびドキュメントプリセットに保持されます。 フレームグリッドと同様、InCopy CJK ストーリーグリッド属性はテキスト属性とテキスト行のグリッド揃え(グリッド揃え属性の設定に応じて)にも影響します。
InCopy CS3-J では、ユーザは次のいずれかの方法で CJK ストーリーグリッド属性を指定できます。
➤ ファイル/新規を指定して新しい InCopy ストーリーを作成し、新規ドキュメントダイアログボックスを表示します。 テキスト領域で使用するスタイルとしてフレームグリッド(テキストフレームではなく)を選択した後、グリッド属性を指定します。
➤ ファイル/ドキュメント設定を指定します。 フレームグリッド(テキストフレームではなく)になるようにテキスト領域を指定した後、グリッド属性を設定します。
➤ ファイル/ドキュメントプリセットを指定し、InCopy ドキュメントプリセットを新規作成します。 新しいプリセットで、フレームグリッド(テキストフレームではなく)になるようにテキスト領域を指定した後、グリッド属性を設定します。
次の図に、InCopy CS3-J の新規ドキュメントダイアログボックスを示します(対応するモデルインターフェイスも示されています)。
前述のとおり、CJK ストーリーグリッド属性を設定できるユーザインターフェイスは 3 つありますが、どのダイアログボックスもレイアウトはだいたい同じです。 上の図は、新規ドキュメントダイアログボックスです。 テキスト領域がフレームグリッドに設定されたら、テキスト領域ウィジェットグループでストーリーの幅/高さとテキスト量を指定します(「幅/高さ」は組み方向における距離であり、「テキスト量」は増加行が追加される方向における距離です)。 テキスト領域がフレームグリッドモードに設定されている場合、幅/高さは文字数によって指定されます。 (テキスト領域がテキストフレームモードに設定されている場合、幅/高さはミリメートルなどの測定単位で指定されます。) テキスト領域のモードにかかわらず、テキスト量は様々な方法で指定できます(和文字、欧文単語、行、ページ、列ミリメートル)。
第 3 章 日本語のレイアウト InCopy CJK ストーリーグリッド属性 40
中央のウィジェットグループでは、テキストレイアウトに関係する CJK ストーリーグリッド属性を指定します。水平比率および垂直比率、字間、行間などが含まれています。 これはフレームグリッドモードに固有のウィジェットグループです。 テキスト領域がテキストフレームモードに設定されている場合には表示されません。
一番下のウィジェットグループでは、ページサイズを指定します。 このグループは、テキスト領域モードにかかわらず、ダイアログボックスに表示されます。
この図には、ユーザインターフェイスウィジェットで設定するデータに対応するモデルインターフェイスも示されています。
クラスダイアグラムここでは、InCopy CJK ストーリーグリッド属性に関連する Boss クラスおよびインターフェイスについて説明します。
kDocWorkspaceBoss と kWorkspaceBoss
kDocWorkspaceBoss と kWorkspaceBoss には、デフォルトの CJK ストーリーグリッド属性を保持するインターフェイスが集約されています。kWorkspaceBoss にはアプリケーションのデフォルトが保持されます。 新規ドキュメントを作成すると、kWorkspaceBoss のデフォルトの CJK ストーリーグリッド属性が、そのドキュメントの kDocWorkspaceBoss に複製されます。 ユーザがそのドキュメントのデフォルトの CJK ストーリーグリッド属性を変更した場合は、kDocWorkspaceBoss の属性のみが変更されます。
➤ IGridAttributesPrefs:CJK ストーリーグリッド属性の設定(1 行あたりの文字数、テキストの拡大/縮小、アキ量のデータ、グリッド方向、グリッドの種類など)が保持されます。 これらの Boss の設定は個々の特定のワークスペースのデフォルトになります。
➤ IDocPresetListMgr:ドキュメントプリセットが保持されます。 次の節を参照してください。
kDocPresetDefaultBoss および kDocPresetBoss
kDocPresetDefaultBoss および kDocPresetBoss は、IDocPresetListMgr(kWorkspaceBoss に集約されています)に保持されるドキュメントプリセット設定を表すパーシスタント Boss クラスです。
➤ IGridAttributesPrefs:CJK ストーリーグリッド属性の設定(1 行あたりの文字数、テキストの拡大/縮小、アキ量のデータ、グリッド方向、グリッドの種類など)が保持されます。 これらの Boss の設定は特定のドキュメントプリセット設定に使用されます。
第 3 章 日本語のレイアウト InCopy CJK ストーリーグリッド属性 41
コマンドと通知InCopy ストーリーグリッド属性コマンドは、下記の 1 つだけです。
kSetGridAttributesPrefsCmdBoss
InCopy CJK ストーリーグリッド属性の使用
InCopy CJK ストーリーグリッド属性の設定
kSetGridAttributesPrefsCmdBoss を実行します(「kSetGridAttributesPrefsCmdBoss」)。
InCopy CJK ストーリーグリッド属性の取得
前述のいずれかの Boss(kDocWorkspaceBoss、kWorkspaceBoss、kDocPresetDefaultBoss、または kDocPresetBoss)に対して IGridAttributesPrefs をクエリします。
目的: InCopy CJK ストーリーグリッド属性を設定します。
呼び出されるもの:
このコマンドでは他のコマンドを使用しません。ただし、ITextOptionsSetPrimaryWritingDirection を呼び出してグリッドの組み方向を設定します。
インターフェイス:
IGridAttributesPrefsData:(必須)ターゲットに適用するグリッド属性設定。 kDocWorkspaceBoss をターゲットにする場合は、IGridAttributesPrefsData::SetDocument を呼び出します。 ドキュメントプリセットをターゲットにする場合は、後述の IUIDData を参照してください。 kWorkspaceBoss をターゲットにする場合、kWorkspaceBoss UID をなんらかの方法で指定する必要はありません。
IUIDData:(オプション)変更するドキュメントプリセットの UID。 特定のドキュメントプリセットインスタンスをターゲットにする場合は、これを指定する必要があります。 kDocWorkspaceBoss または kWorkspaceBoss をターゲットにする場合は、kInvalidUID のままにします。
IBoolData:(オプション)使用されていません。IIntData:(オプション)使用されていません。
ItemList 入力: 必要ありません。 ターゲットは、IUIDData インターフェイス、または IGridAttributesPrefsData::SetDocument の呼び出しを通して指定されます。
オブザーバへの通知:
theChange = kSetGridAttributesPrefsCmdBoss。 プロトコルは状況によって異なります。 kDocWorkspaceBoss をターゲットとする場合、protocol = IID_IGRIDPREFSCHANGE(拡大/縮小またはアキが以前の設定から変更された場合)、protocol = IID_IGRIDPREFSDIRECTIONCHANGE(グリッドの組み方向が以前の設定から変更された場合)、protocol = IID_IGRIDPREFSFRAMETYPECHANGE(フレームの種類が以前の設定から変更された場合)、または protocol = IID_IGRIDPREFSCHARPERLINECHANGE(1 行あたりの文字数が以前の設定から変更された場合)です。kWorkspaceBoss をターゲットとする場合、protocol = IID_IGRIDATTRIBUTESPREFERENCES です。 ドキュメントプリセットをターゲットにする場合、通知はありません。
ItemList 出力: なし
コマンドの使用例:
SnpManipulateInCopyCJKGridAttributes.cpp(SnippetRunner プラグイン)
第 3 章 日本語のレイアウト 測定単位 42
測定単位日本独自の測定単位
日本の文字組版には、独自の測定単位が存在しています。 文字サイズを表す測定単位は「級」と呼ばれます。【原文読者のための解説:「級」という文字は「class」を意味します。】 これはアプリケーションでは「Q」という単位記号で表記されます。 1「Q」は 0.25mm です。 (この単位記号は 1Q が 1mm の「Quarter(1/4)」であることに由来しているという説があります。) 字間および行間の測定単位は「歯」と呼ばれています。【原文読者のための解説:「歯」という文字は「teeth」を意味します。】 この単位はもともと、写植機の歯車によって印刷媒体が(主に行送りや字送りのために)移動する距離を表していました。 級や歯のほかに、アメリカ式ポイント(「AP」)という測定単位もよく使用されます。
これらの単位は、今日の日本の DTP の世界にも取り入れられており、テキスト関連の距離の測定に使用されています。 日本工業規格(JIS)では、1H と 1Q はどちらもちょうど 0.25mm、AP は 0.3514mm(1 パイカの 1/12 より若干短い)と定義されています。 AP の定義については、JIS Z 8305-1962 も参照してください(http://www.jsa.or.jp/default.asp で入手できます)。
これらの単位は、次のユーザインターフェイスで、デフォルトとして使用されています。
➤ 級:フォントサイズ。
➤ 歯:テキスト間隔、行送り、その他のテキストレイアウト関連の測定値。
➤ AP:デフォルト設定としては使用されていません。
デフォルトの測定単位は、環境設定ダイアログボックスで変更できます。
次の測定単位変換表の数字は有効数字 4 桁に丸められます。
単位ポイントをその測定単位に換算する場合に乗じる係数
その測定単位をポイントに換算する場合に乗じる係数
歯 4(歯 /mm)* 25.4(mm/インチ)/ 72(ポイント /インチ)=1.4111
72(ポイント /インチ)/ 25.4(mm/インチ)/ 4(歯 /mm)=0.7087
級 4(級 /mm)* 25.4(mm/インチ)/ 72(ポイント /インチ)=1.4111
72(ポイント /インチ)/ 25.4(mm/インチ)/ 4(級 /mm)=0.7087
AP 25.4(mm/インチ)/ 72(AP/インチ)/ 0.3514(mm/AP)=1.0039
0.3514(mm/AP)* 72(AP/インチ)/ 25.4(mm/インチ)=0.9961
第 3 章 日本語のレイアウト 測定単位 43
日本の測定単位に関連する Boss クラスおよびインターフェイスのクラスダイアグラムを次に示します。
これらの測定単位の Boss は日本語機能セットにのみ存在していますが、それらのデフォルトの単位コンバータはアプリケーションのコンテンツマネージャに組み込まれています。
注意 : 測定単位として適切な単位を選び、測定値を指定することができます。 ただし、単位値は内部的にはポイントとして保持されています(API 内およびドキュメントに保存されたとき)。
これらの Boss は関係するプラグインの IgnoreTags リソースとしてマークされています。したがって、これらの単位が含まれているドキュメントを日本語機能セット以外のアプリケーションで開いても、ユーザに「環境に無いプラグイン」警告が出されることはありません。
級/歯/ AP からポイント(およびその逆)への換算上記のいずれかの Boss のインスタンスを取得できる場合(特定の Boss クラスの ID を指定して CreateObject 関数を使用するなどの方法で取得できる場合)は、単純に IUnitOfMeasure::UnitsToPoints や IUnitOfMeasure::PointsToUnits を呼び出して、これらの単位とポイントとの間で換算を行うことができます。
注意 : これらの Boss クラスは、日本語機能セットを備えた InDesign CS3 でアプリケーションを実行している場合にのみ使用できます。
kAPBoss
kQBoss
kHaBoss
IK2ServiceProvider
IUnitOfMeasure
IUnitOfMeasure
IUnitOfMeasure
IK2ServiceProvider
IK2ServiceProvider
この Bossが kService_UnitOfMeasureのサービスプロバイダであることを示します。
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
44
4 日本語タイポグラフィ
日本語の文字組み前の章でも説明したように、日本語のページレイアウトは、1 つのページまたは段に組む文字数を表すグリッドを使用して行われます。この日本独自の方法は、機械による文字組版の方法がこの極東の地で確立されていった歴史にその起源を求めることができます。 日本の文字組版の技術者たちは、表意文字が持つ実用性および効率性を活かすとともに、日本語の文字の対称性が生みだす美を表現できるような、独自のスタイルを開発してきました。 この節では、日本語の「文字組版」(または縮めて「文字組み」とも言います)の複雑なルールを説明し、InDesign CS3 の API を通じてそれらを使用する方法について説明します。
機能の概要InDesign CS3 には、次に示す各領域において、日本語固有のテキスト機能が用意されています。
➤ テキストコンポジション:日本語の単数行コンポーザおよび段落コンポーザがあります。日本語固有のテキストコンポジションルールおよび属性に基づいてテキストコンポジションを行うことができます。これらのコンポーザでは、縦組みもサポートされています。
➤ 文字組版のルール:文字組みテーブルとも呼ばれます。これらのルールには、グローバルワークスペースおよびドキュメントワークスペースのスタイル名テーブルからアクセスできます。 文字組みテーブルでの文字の分類に基づいて、様々な禁則処理(改行のルール)、分離禁止処理(結合のルール)、ぶら下がり(句読点のはみだしルール)、アキ(間隔のルール)、詰め(カーニングのルール)を適用できます。
➤ 日本語固有のテキスト属性:次のものを含みます。
➣ テキスト揃え: 仮想ボディ、平均字面(Ideographic Character Face)、欧文ベースライン、縦中横(縦組みの中の横組みのテキスト)、割注(インラインの注釈)などの基準でテキストを揃えます。
➣ 日本語スタイルのイタリック: 文字の特殊な視覚的ゆがみ(斜体)。
➣ その他のテキスト属性: 縦組みテキストの中での欧文文字の回転、インプットメソッドエディタのコンポジションモード、異体字(別のグリフ)や外字(エンドユーザが定義した文字)の挿入、日本語の文字に固有な様々な OpenType フォント機能などがあります。
➤ 日本語固有のテキストアドーンメント:ルビ(漢字の読み方)や圏点(強調のための傍点)などがあります。
➤ 合成フォント:これは、様々な種類の文字クラスで使用する一連のフォントが含まれているメタフォントです。
用語➤ アキ:2 つの文字または行の間隔。 行中の文字間隔やフレーム内での行の分割に関しては、出版社ごとに独自のルールがあるので、行内のアキに関するルールは文字組みアキルールと呼ばれます。 これらのルールを設定したり、段落単位でルールを適用したりするには、InDesign CS3-J および InCopy CS3-J の文字組みアキ量設定ダイアログボックスを使用します。
➤ 分離禁止文字:改行によって分離できない 1 組の文字(省略記号文字など)。 分離禁止文字とするには、複数の同じ文字が必要です。分離禁止文字は、両端揃えのときに間隔(アキ)が挿入されず、行をまたがって分離されることもありません。
第 4 章 日本語タイポグラフィ 日本語の文字組み 45
➤ ぶら下げ文字:半角の句読点などの、マージンの外側にはみ出させることができる文字(「サンプル」の図の下に記載されている注記 「1」 を参照してください。ぶら下げ文字の例としては、日本語の読点があります)。
➤ 外字:エンドユーザが定義した文字。 詳しくは、「日本語の文字エンコーディングの詳細情報」を参照してください。
➤ 合成フォント:コンポジットフォントの日本語名。特定の文字セットに使用される個々のフォントを組み合わせて 1 つのフォントを構成したもの。 例えば、1 つの合成フォントで、半角の英数字に Arial Regular、全角の英数字には平成角ゴシック、平仮名および漢字には小塚明朝 Std の Heavy を使用することができます。 詳しくは、「合成フォント」を参照してください。
➤ 行末禁則文字:行の最後に配置できない文字(始め括弧など)。
➤ 行頭禁則文字:日本語の句点や終わり括弧類などの、行の先頭に配置できない文字(この一覧の最後の図の、左端の行の句点に注目してください。 日本語の句点は行の先頭に置くことができないので、行の最後に強制的に配置されています。そのため、この行のカーニングは詰まっています)。
➤ 半角文字:半分の幅を持った文字のことを表す日本語固有の用語。この文字は通常、仮想ボディの 1/2 の大きさを占めます。 通常、ASCII 英数字や、シングルバイトのカタカナ文字を指します。
➤ 平均字面:平均字面(Ideographic Character Face)とは、フォントデザイナーが決定した「フォントの文字の平均的な空間」を、デジタルで表現したものです。 これは、従来のペーパーレイアウトのワークフローにおけるグリッドでも使用されます。 平均字面は、OpenType フォントの場合はフォントの中に保持されており、他のフォントの場合は概算されます。
➤ 異体字:同じ文字の別の書き方。ユニコードでは、別の字体を持つ文字に同じコードポイントが使用されている場合もあります。文字によっては、23 個もの異体字を持っているものもあります。 例えば、日本語の「渡辺」という姓の 2 つめの文字「辺」がわかりやすい例です。
➤ 仮想ボディ:embox の日本での名称。 これは文字どおり、「仮にあるものと想定したボディのサイズ」を意味します。 文字のサイズや間隔を計算するとき、およびテキスト揃えを行うときには、必ずといってよいほど仮想ボディが基準になります。 この一覧の最後の図で使用されているグリッドボックスは、グリッド設定と同じポイントサイズの文字の仮想ボディを表します。ほとんどの日本語フォントでは、12 ポイントのフォントの仮想ボディは、1 辺が 12 ポイントの正方形と定義されています。OpenType フォントの場合は、フォントの中に仮想ボディの情報が含まれています。 他のフォントの場合は、そのフォントのテキストが他のフォントの仮想ボディと揃うように、アプリケーションによってその仮想ボディが計算されます。多くのフォントでは、仮想ボディは 1000 単位(上端が -880 単位の位置、下端が 120 単位の位置)の正方形として定義されています。 それ以外のフォントでは、(同じサイズであっても)仮想ボディの相対位置が異なります。そのため、各フォントの仮想ボディを正しく計算することが、日本語タイポグラフィの文字を正しく配置する上で非常に重要になります。
➤ 圏点:単語を強調または区別するために使用されるテキストアドーンメント。 親文字と圏点は、1 対 1 の関係で結ばれます。 圏点サイズは親文字のサイズの半分で、親文字の右側(横組みの場合は上側)に付けられます。 (「サンプル」の図の下に記載されている注記 「6」 を参照してください。)
➤ 禁則処理:改行処理。 例えば、個々の文字と改行との間の関係を定義します。
➤ 文字組み:テキストコンポジション。 具体的には、グリフの配置処理を定義して、コンポジションエンジンによって改行ルールを適用させることをいいます。基本的に、文字組みルールは、異なるクラスの文字の間のアキ(間隔)の量を定義します。例えば、始め括弧類とその次の文字との間隔は、2 つの数字の間隔とは異なる場合があります。
➤ 追い出しのみ:3 種類の改行処理のうちの 1 つ。 文字を追い出して改行を行うことを意味します。 「追い出し優先」および「追い込み優先」も参照してください。
➤ 追い出し優先:3 種類の改行処理のうちの 1 つ。 行末に収まらない文字を追い出すことを意味します。 両端揃えの行で、禁則の適用される文字クラスタが幅にして 5 分の 4 未満の長さでぶら下がっている場合は、追い出しが行われます。それ以外の場合は追い込みが行われます。文字揃えが不揃いの場合は追い出しが適しています。 「追い出しのみ」および「追い込み優先」も参照してください。
第 4 章 日本語タイポグラフィ 日本語の文字組み 46
➤ 追い込み優先:3 種類の改行処理のうちの 1 つ。 まず追い込みを行ってから、次に追い出しを行うことを意味します。 まず行内の文字間隔を詰め、それで適切な改行ができない場合は、文字間隔を空けて次の行に文字を追い出します。 「追い出しのみ」および「追い出し優先」も参照してください。
➤ ルビ:テキストの上または下(縦組みの場合は右または左)に配置するテキストアドーンメント。アドーンメントされるテキストは親文字と呼びます。 ルビ文字のサイズは、親文字に比例させるのが一般的です。 ルビは、難しい漢字の読みを平仮名で示す場合などに使用されます。 ルビ文字は、スペースをまたいで使用されることはふつうありません。ルビの長さは、親文字の長さより短いのが一般的です。 (「サンプル」の図の下に記載されている注記 「5」 を参照してください。)
➤ 斜体:文字を視覚的にゆがめること。 斜体は、文字を傾斜させるイタリックとは異なり、斜体角度と縮小率の組み合わせで設定するのが一般的です。 (「サンプル」の図の下に記載されている注記 「4」 を参照してください。)
➤ 縦中横:縦組みのテキストを横組みにする機能(数字など)。 自動的に縦中横として表示する英数字(組み数字と呼びます)の最大文字数を指定できます。 (「サンプル」の図の下に記載されている注記 「3」 を参照してください。)
➤ 詰め:文字が占めている空間を圧縮すること。 文字の拡大/縮小とは異なり、詰めでは、文字に割り当てられているスペースが、仮想ボディから字面へと削られていきます。 (詰めという言葉は、日本語では様々なものを意味します。 InDesign には、文字組み詰めがあります。これは、文字組みのアキ間隔を条件に応じて追加するために、約物の幅を 1/2 削ることを指します。 また、文字幅の相互カーニングの一種である、詰め%という文字属性もあります)。
➤ 割注:テキストの本文に挿入される注釈。 500 文字以内の 2 ~ 5 行の割注が可能です。割注が本文の改行をまたぐ場合には、複雑なルールに基づいて、読んでいく順番で行が構成されます。
➤ 全角文字:完全な幅を持った文字のことを表す日本語固有の用語。この文字は通常、仮想ボディとほぼ同じ大きさになります。
サンプル次の図に、Adobe 日本語単数行コンポーザでコンポーズしたテキストストーリーの例を示します。
第 4 章 日本語タイポグラフィ 日本語テキストコンポーザ 47
この図の注記: スクリーンショットの中の赤い数字の箇所では、次の機能が使用されています。
1. ぶら下がり
2. 日本語スタイルの下線(特定の線種を使用)
3. 縦中横(縦組みテキストの中の横組みの数字)
4. 斜体
5. ルビ
6. 圏点
関連資料次の関連資料には、このマニュアルの以降の節を完全に理解するために必要な背景情報が記載されています。
➤ 『Adobe InDesign CS3 Programming Guide』の「Text Fundamentals」の章
➤ 『Adobe InDesign CS3 Solutions』の「Text」の章
➤ 『Adobe InDesign CS3 Solutions』の「Layout」の章
日本語テキストコンポーザ日本語の文字組版は複雑であるため、テキストモデルのテキスト属性、アドーンメント、および文字組みルールには、大幅な拡張が施されています。 こうしたテキストコンポジションプロパティの追加に伴って適切なコンポジションを行うために、日本語のテキストコンポーザが用意されています。
InDesign CS3-J および InCopy CS3-J では、段落パネルで次のいずれかのテキストコンポーザを選択できます。
➤ Adobe 欧文単数行コンポーザ
➤ Adobe 欧文段落コンポーザ
➤ Adobe 日本語単数行コンポーザ
➤ Adobe 日本語段落コンポーザ
この 4 つのテキストコンポーザは、機能セットに関係なくいつでも使用することができます。 したがって、日本語機能セットのアプリケーションでコンポーズされたテキストが含まれているドキュメントを、Roman 機能セットバージョンで開くことができます。 また、日本語テキストおよびテキスト属性を含むワークフローを自動化する際は、目的の日本語のコンポーザを使用するために、段落に関連付けるテキストコンポーザをプログラムで切り替えることもできます。
この節では、すべての機能セットで使用できる 2 種類の日本語テキストコンポーザについて、その概要と作業上のヒントを説明します。
第 4 章 日本語タイポグラフィ 日本語テキストコンポーザ 48
クラスダイアグラム2 種類の日本語固有のテキストコンポーザがあります。 (両者の Boss クラスダイアグラムはほとんど同じであるため、省略してあります。)
kJParagraphComposerBoss
➤ IK2ServiceProvider:この Boss をサービスプロバイダ(kTextEngineService)として識別し、サービスプロバイダ名を介してコンポーザの名前を提供します。
➤ IParagraphComposer:この Boss の実際のテキストコンポーザである Adobe 日本語段落コンポーザを提供します。
kJSingleComposerBoss
➤ IK2ServiceProvider:この Boss をサービスプロバイダ(kTextEngineService)として識別し、サービスプロバイダ名を介してコンポーザの名前を提供します。
➤ IParagraphComposer:この Boss の実際のテキストコンポーザである Adobe 日本語単数行コンポーザを提供します。
また、kTextAttrComposerBoss は、テキストストーリーの対応する段落のコンポーザクラス ID を保持するテキスト属性 Boss です。
第 4 章 日本語タイポグラフィ 日本語テキストコンポーザ 49
ナビゲーションダイアグラム次の図は、ナビゲーションダイアグラムの略図です。 この図には、テキスト関連の Boss からコンポーザ Boss にナビゲートするブリッジメソッドが示されています。
コマンドと通知コンポーザ関連のコマンドと通知について詳しくは、『Adobe InDesign CS3 Programming Guide』の「Text Fundamentals」の章、および『Adobe InDesign CS3 Solutions』の「Text」の章を参照してください。
kFrameListBossIWaxStrand
kTextStoryBossITextModel
FrameList
k*ComposerBoss
1
1
(IWaxStrand *)ITextModel:QueryStrand(kFrameListBoss)
1
1
IWaxStrand::QueryComposer
IK2ServiceProvider
IComposeScanner
kTextAttrComposerBoss
IAttrReport
ITextAttrClassID
1
1
IComposeScanner:QueryAttributeAt(kTextAttrComposerBoss)
1
1 ITextAttrClassID::Get
1
1
ITextModel::QueryFrameList kOwnedItemStrandBoss
IItemStrand
1
1
((IItemStrand *)ITextModel:QueryStrand(kOwnedItemStrandBoss)
kInlineBossIOwnedItem
1
1 IOwnedItem::QueryComposer
1
1
IItemStrand::GetNthOwnedUID
IParagraphComposer
ここではインライングラフィックに範囲を制限しています。ITextUtils::CollectOwnedItems()
を使用して、OwnedItemDataListを繰り返すこともできます。
ILGを記述します。
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
第 4 章 日本語タイポグラフィ 日本語テキストコンポーザ 50
日本語テキストコンポーザの使用
段落へのコンポーザの設定
次の方法は、プラグインでテキストを自動的にコンポーズし、日本語のテキスト属性を利用する場合に便利です。 コンポーザは段落属性ですので、テキストモデルの特定の部分のコンポーザを設定する場合は、ITextModelCmds::ApplyCmd を使用して、kParaAttrStrandBoss で属性適用コマンドを生成してください。
ITextModel* textModel = ...; // 事前に取得されているものとしますTextIndex start = ...; // 開始するテキストインデックスを指定しますint32 length = ...; // 長さを指定しますAttributeBossList* list= new AttributeBossList;
ClassID composerClass = kJParagraphComposerBoss; // 例を示しますInterfacePtr<ITextAttrClassID> composerAttr(::CreateObject2<ITextAttrClassID>(kTextAttrComposerBoss));composerAttr->Set(composerClass);list->ApplyAttribute(composerAttr);InterfacePtr<ITextModelCmds> textModelCmds(textModel, UseDefaultIID());InterfacePtr<ICommand> applyCmd(textModelCmds->ApplyCmd(start, length, list, kParaAttrStrandBoss));ErrorCode status = CmdUtils::ProcessCommand(applyCmd);
独自の具象選択 Boss(CSB)実装で ITextAttributeSuite インターフェイスを使用して、現在選択されているテキスト範囲に適用する場合は、上記のように IPMUnknown パラメータを ITextAttrClassID インターフェイスに設定して ITextAttributeSuite::ApplyAttribute を呼び出すだけで十分です。 (選択アーキテクチャについて詳しくは、『Adobe InDesign CS3 Solutions』の「Selection」の章を参照してください。)
特定の段落で使用されているコンポーザの判断
対象のテキストモデル(ITextModel)がわかっている場合は、次のように、その Boss(kTextStoryBoss)の IComposeScanner インターフェイスをクエリし、QueryAttributeAt を呼び出してテキスト属性 Boss を取得します。
TextIndex start = ..., end = ...; // 適切に設定しますInterfacePtr<IAttrReport>
attrReport(composeScanner->QueryAttributeAt(start, end, kTextAttrComposerBoss));
InterfacePtr<ITextAttrClassID> textAttrClassID(attrReport, UseDefaultIID());ClassID composerClass = textAttrClassID->Get();
これで、コンポーザのクラス ID が取得されました。
テキストフォーカス(ITextFocus)がある場合は、アクセスの高速化のために属性をキャッシュしている IFocusCache インターフェイスをクエリし、IFocusCache::QueryAttributeN を呼び出して、kTextAttrComposerBoss の ITextAttrClassID インターフェイスを取得してもかまいません。
ワックスの使用ワックスは、テキストコンポジションの副産物であり、テキストモデルに特定の日本語テキスト機能が含まれる場合に固有のプロパティを持つもう 1 つの領域です。 縦中横機能または割注機能を使用している場合、こうしたワックスラン(IWaxRun で識別)のグリフおよびテキスト属性がワックスライン(IWaxLine で識別)内のワックスコレクション(IWaxCollection で識別)内部にネストされます。 欧文テキストのワックスラインのみを反復処理するプラグインコードでは一般的に、すべてのワックスランがワックスグリフセットを保持すると仮定します(つまり、有効な IWaxRun があれば、IWaxGlyphs をクエリできます)。 前述したように、縦中横および割注のワックスランでは、ワックスコレクション内に入ってからワックスランを検索する必要があります。 この問題を避けるには、ワックスラインからワックスランイテレータを作成した後(IWaxLine::QueryWaxRunIterator を呼び出すと、IWaxRunIterator が返されます)、ワックスランを反復処理します。 あるいは、ワックスで描画されるグリフを反復処理したい場合は、ワックスラインからワックス
第 4 章 日本語タイポグラフィ 日本語テキストコンポーザ 51
グリフイテレータを作成した後(IWaxLine::QueryWaxGlyphIterator を呼び出すと、IWaxGlyphIterator が返されます)、ワックスグリフを反復処理することもできます。 IWaxRunIterator と IWaxGlyphIterator はどちらも参照カウント方式のインターフェイスではないため、反復処理終了後に確実に削除するか、または、K2::scoped_ptr でラップする必要があります。 ワックスラン、ワックスコレクション、ワックスラインの背景情報については、『Adobe InDesign CS3 Programming Guide』の「Text Fundamentals」の章に記載されている「The Wax」に関する節を参照してください。 (また、オンライントレーニングセッションで提供される SnpInspectWax スニペットコードについては、InDesign オンライントレーニング「session 12: Text Layout」を参照してください。)
よくある質問
欧文コンポーザでコンポーズされた段落に日本語のテキスト属性を適用した場合
日本語のテキスト機能が含まれているストーリーを、日本語コンポーザを使用せずにコンポーズした場合について考えてみましょう。 次の図に、Adobe 欧文単数行コンポーザを使用して不適切にコンポーズされたテキストストーリーの例を示します。
「サンプル」の図との明らかな違いは、日本語単数行コンポーザでは縦書きであったストーリーが、欧文単数行コンポーザではまったく縦書きにはなっておらず、文字が時計回りに 90°回転しているということです。(縦組みのテキストフレームは横組みのテキストフレームを時計回りに 90°回転したものであるため、このようになります。つまり、X 座標はページの下方向に増加していき、Y 座標は右方向に増加していきます。) もう 1 つの違いは、ほとんどの日本語テキスト機能(縦中横(「サンプル」の図の下に記載されている注記 「3」)、ルビ(注記 「5」)、圏点(注記 「6」)など)に、特別な処理が施されていないということです。 文字組みルール(最初の文字の字下げ)や禁則ルール(ぶら下がりや行頭禁則文字など)も無視されています(読点のぶら下げ(注記 1)、左端の行の句点など)。 また、点線の下線が文字の反対側に表示されています。日本語単数行コンポーザの場合には文字の右側に表示され、欧文単数行コンポーザの場合には文字の左側(文字の下)に表示されています(前述の図の青い 1)。 また、テキスト選択の強調表示の仕方にもわずかな違いがあります。日本語単数行コンポーザでコンポーズしたストーリーでは、強調表示の領域がグリッドボックス(仮想ボディのサイズ)と正確に一致していました。 しかし、欧文単数行コンポーザでコンポーズしたストーリーでは、強調表示の領域は仮想ボディよりわずかに広くなっています。これはワックスラインのメトリクスに違いがあるためです。 以上、日本語のテキストをコンポーズする際には日本語の段落コンポーザを使用したほうがよい理由を、いくつか説明しました。
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 52
参考資料およびサンプルテキストモデルの特定の部分のコンポーザを設定、取得する例は SDK には含まれていませんが、これについては前述の各項目を参考にしてください。
SDK には、カスタムコンポーザの作成方法を示すサンプルプラグイン(SingleLineComposer)が含まれています。
注意 : コンストラクタを開発するには、テキストレイアウトおよびワックスアーキテクチャに関する詳しい知識が必要となり、慎重な開発作業が求められます。
SDK には、段落コンポーザによって作成されたワックスラインを反復処理する方法を示すサンプルが含まれています。
➤ SnpEstimateTextDepth.cpp:ワックスラインの高さを加算することによってテキストフレームの奥行きがどのように評価されるのかを調べるには、SnpEstimateTextDepth::EstimateTextDepth メソッドを参照してください。
➤ SnpInspectTextModel.cpp:IWaxIterator(参照カウント方式のインターフェイスではありません)と IWaxLine を使用してワックスラインを反復処理するスニペットコードについては、SnpInspectTextModel::ReportLines と SnpInspectTextModel::ReportWaxLineLeading メソッドを参照してください。
一般的な文字組み機能前述のとおり、日本語の文字組版は、日本語固有の一連の段落コンポーザによって行われています。これらのコンポーザは、文字間隔(カーニングや文字幅)を決める複雑な文字組みルールや、改行を決める禁則ルールに基づいて処理を行います。この節では、一連の文字組みルールおよび禁則ルールについて説明します。
クラスダイアグラム文字組みおよび禁則のスタイル名テーブル(IStyleNameTable)は、kDocWorkspaceBoss と kWorkspaceBoss に集約されています。
➤ IID_IMOJIKUMINAMETABLE:非常に複雑な文字組みテーブルが保持されます。このテーブルは、文字のクラスと、それらが特定の文字クラスの前後に配置された場合に占めるスペース(仮想ボディ単位)とを関連付けます。 このテーブルの各エントリは、文字組みの文字クラスリストと詰めリストにも関連付けられます。 (以下を参照してください。)
➤ IID_IKINSOKUNAMETABLE:禁則(改行)ルールのリストが保持されます。このテーブルでは、KinsokuBefore(その前で改行できない文字)、KinsokuAfter(この後で改行できない文字)、KinsokuHanging(行末に来た場合にテキストフレームの外側にぶら下げることができる文字)、KinsokuNotSeparate(行末で分離できない文字)の 4 つのカテゴリのいずれかに、文字(ユニコード値で指定)が分類されます。
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 53
アプリケーションのユーザインターフェイスでは、段落パネルの一番下に、文字組みおよび禁則処理の設定が、名前付きのスタイルとして表示されます。
名前テーブルの各エントリは、以下にリストされているパーシスタント Boss をポイントします。 各タイプのテーブルエントリでは、これらの Boss の IStringData インターフェイスに、テーブルエントリの名前が保持されます。
文字組み名テーブルのエントリは、IMojikumiTable を集約している次の Boss を参照します。
➤ kHardcodedMojikumiStyleBoss:アプリケーションで提供されている一連のデフォルトの文字組みルール。 この Boss のインスタンスが 15 個あり、それぞれが異なる文字組みルールのセットを表しています。 (enum は SDK¥public¥interfaces¥cjk¥IMojikumiTable.h にリストされています。enum kDefaultMojikumiSet_None を探してください。)
➤ kMojikumiStyleBoss:ユーザが作成した文字組みルール用。
文字組みの文字クラスリストテーブルのエントリは、IMojikumiCharClassList を集約している次の Boss を参照します(SDK¥public¥interfaces¥cjk¥IMojikumiCharacterClassList.h を参照してください)。
➤ kDefaultMojikumiCharacterClassListBoss:アプリケーションで提供されている一連のデフォルトの文字組み文字。
➤ kMojikumiClassListStyleBoss:ユーザが作成した文字組みの文字クラス用。 カスタムの文字組みクラスリストを作成するユーザインターフェイスは用意されていないので、コマンドを使用して作成する必要があります。
詰め名テーブルのエントリは、ITsumeTable を集約している次の Boss を参照します(SDK¥public¥interfaces¥cjk¥ITsumeTable.h を参照してください)。
➤ kHardcodedTsumeBoss:ハードコードされている一連の詰めルール用(アプリケーションで提供されているデフォルトの詰め設定の 1 つ)。
➤ kHardcodedTsumeNoneBoss:詰めルール「なし」用(アプリケーションで提供されているデフォルトの詰め設定の 1 つ)。
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 54
➤ kTsumeStyleBoss:ユーザが作成した詰め設定用。 カスタムの詰め設定テーブルを作成するユーザインターフェイスは用意されていないので、コマンドを使用して作成する必要があります。
禁則名テーブルのエントリは、IKinsokuTable を集約している Boss を参照します(SDK¥public¥interfaces¥cjk¥IKinsokuTable.h を参照してください)。
➤ kHardcodedKinsokuHardBoss:「強い」禁則ルール用(アプリケーションで提供されているデフォルトの禁則ルールの 1 つ)。
➤ kHardcodedKinsokuSoftBoss:「弱い」禁則ルール用(アプリケーションで提供されているデフォルトの禁則ルールの 1 つ)。
➤ kHardcodedKinsokuNoneBoss:禁則ルール「なし」用(アプリケーションで提供されているデフォルトの禁則ルールの 1 つ)。
➤ kHardcodedKinsokuKoreanBoss:アプリケーションのユーザインターフェイスのロケールが韓国語(k_koKR)の場合に使用される禁則ルール用。 (これは韓国語のユーザインターフェイスロケールにデフォルトで設定されている禁則ルールです。)
➤ kHardcodedKinsokuSCBoss:アプリケーションのユーザインターフェイスのロケールが簡体字中国語(k_zhCN)の場合に使用される禁則ルール用。 (これは簡体字中国語のユーザインターフェイスロケールにデフォルトで設定されている禁則ルールです。)
➤ kHardcodedKinsokuTCBoss:アプリケーションのユーザインターフェイスのロケールが繁体字中国語(k_zhTW)の場合に使用される禁則ルール用。 (これは繁体字中国語のユーザインターフェイスロケールにデフォルトで設定されている禁則ルールです。)
➤ kKinsokuStyleBoss:ユーザが作成した禁則ルール用。
一部の文字組み設定および禁則設定には、コンポーザを支援する kComposeStyleBoss の IMojikumiStyle インターフェイスから読み取り専用でアクセスできます。 詳しくは、「kComposeStyleBoss への日本語固有機能の追加」を参照してください。
文字組みモデルのナビゲーションダイアグラム
IStyleNameTable (IID_IKINSOKUNAMETABLE)
IStyleNameTable (IID_IMOJIKUMICHARCLASSLISTNAMETABLE)
IStyleNameTable (IID_IMOJIKUMINAMETABLE)IStyleNameTable (IID_ITSUMENAMETABLE)k*WorkspaceBoss
Kinsoku Boss
Mojikumi BossTsume Boss
Mojikumi CharClassList Boss
IMojikumiTable
IMojikumiCharClassList
IKinsokuTable
ITsumeTable
1
1..*
IStyleNameTable::Get...()
11..*
IStyleNameTable::Get...()
1
1..*
IStyleNameTable::Get...()
1..*IStyleNameTable::Get...()
IStringData
IStringData
IStringData
IStringData
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 55
ワークスペース Boss の特定のスタイル名テーブルをクエリするには、特定の IID を使用して指定する必要があります。
InterfacePtr<IWorkspace>workSpace(Utils<ILayoutUIUtils>()->QueryActiveWorkspace());InterfacePtr<IStyleNameTable>kinsokuNameTable(workSpace, IID_IKINSOKUNAMETABLE);
ワークスペース Boss から名前テーブルエントリ Boss にナビゲートするブリッジメソッドについては、IStyleNameTable を参照してください。
コマンドと通知文字組みテーブル関連のコマンドを次に示します。
➤ 「kCreateMojikumiTableCmdBoss」
➤ 「kDeleteMojikumiTableCmdBoss」
➤ 「kLoadMojikumiTableCmdBoss」
➤ 「kReplaceMojikumiTableCmdBoss」
➤ 「kEditMojikumiTableCmdBoss」
➤ 「kCopyMojikumiCmdBoss」
禁則テーブル関連のコマンドを次に示します。
➤ 「kCreateKinsokuTableCmdBoss」
➤ 「kDeleteKinsokuTableCmdBoss」
➤ 「kReplaceKinsokuTableCmdBoss」
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 56
kCreateMojikumiTableCmdBoss
kDeleteMojikumiTableCmdBoss
目的: 新規文字組みテーブルを作成し、それを名前スタイルテーブル(IID_IMOJIKUMINAMETABLE)に追加します。
呼び出されるもの:
なし。
インターフェイス:
IUIDData:(オプション)新規文字組みテーブルを作成する際に元にする既存の文字組みテーブルの UID。これが kInvalidUID 以外の値である場合は、指定された文字組みテーブルが新規テーブルにコピーされます。
IStringData:(オプション)新規文字組みテーブルの名前。 (翻訳が可能な文字列を設定する場合は、最低限、日本語のユーザインターフェイスロケールが必ず利用可能であるようにしてください。)空白にした場合に与えられるデフォルト名は、「Duplicate Mojikumi」です(この名前は翻訳されません)。
ItemList 入力: 文字組み名前スタイルテーブルを保持しているワークスペース Boss の UID。
オブザーバへの通知:
theChange = kCreateMojikumiTableCmdBoss、protocol = IID_IMOJIKUMINAMETABLE。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: 該当なし。 新しい文字組みテーブルを取得するには、このコマンドを実行した直後に、文字組み名テーブルの最後のエントリを検索してください。
コマンドの使用例:
なし。
目的: 既存の文字組みテーブルを削除し、スタイル名テーブル(IID_IMOJIKUMINAMETABLE)からも削除し、すべてのテキストストーリーおよびワークスペースのデフォルトを反復処理して、指定の文字組みテーブルのインスタンスを、標準文字組みテーブルに置き換えます。
呼び出されるもの:
kApplyTextAttrToWorkspaceCmdBoss、kEditTextStyleCmdBoss、kClearTextAttrCmdBoss、kDeleteUIDsCmdBoss。
インターフェイス:
IUIDData:(必須)削除する既存の文字組みテーブルの UID。 アプリケーションによって提供されている標準文字組みテーブルは、削除しないようにしてください。削除した場合、デバッグビルドでアサートが発生します。
ItemList 入力: 文字組み名前スタイルテーブルを保持しているワークスペース Boss の UID。
オブザーバへの通知:
theChange = kDeleteMojikumiTableCmdBoss、protocol = IID_IMOJIKUMINAMETABLE。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: 該当なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 57
kLoadMojikumiTableCmdBoss
kReplaceMojikumiTableCmdBoss
目的: 他の InDesign ドキュメントから文字組みテーブルをロードします。
呼び出されるもの:
指定されたドキュメントが開いていない場合は kOpenDocCmdBoss。 IIntData の設定に応じて、「kReplaceMojikumiTableCmdBoss」または「kReplaceKinsokuTableCmdBoss」も呼び出されます。 (ILoadStyleCmdData の enum を参照してください)
インターフェイス:
ISysFileData:(必須)ロードする文字組みテーブルが保持されている InDesign ドキュメントの IDFile。IIntData:(必須)これは、ILoadStyleCmdData::kLoadTsumeTable または ILoadStyleCmdData::kLoadKinsokuTable に設定します。 ILoadStyleCmdData::kLoadMojikumiTable も可能ですが、この IIntData インターフェイスを ILoadStyleCmdData::kLoadTsumeTable に設定した場合と動作は同じです。
ItemList 入力: ロードする文字組み名前スタイルテーブルを保持しているワークスペース Boss の UID。
オブザーバへの通知:
なし。
ItemList 出力: 該当なし。
コマンドの使用例:
なし。
目的: ワークスペースの文字組みテーブルのエントリを、他のワークスペースのエントリで置き換えます。 (2 つのドキュメントの間で行うのが一般的です。)
呼び出されるもの:
なし。
インターフェイス:
ILoadStyleCmdData:(必須)ソースおよびターゲットのワークスペースのスタイル名テーブルと、ソースおよびターゲットの文字組みテーブルの UID。 どちらの UID も、正しいスタイル名テーブルの IMojikumiTable を集約するパーシスタント Boss を参照する必要があります。
ItemList 入力: 無視されます。
オブザーバへの通知:
なし。
ItemList 出力: 該当なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 58
kEditMojikumiTableCmdBoss
kCopyMojikumiCmdBoss
目的: 既存の文字組みテーブルを編集します。
呼び出されるもの:
なし。
インターフェイス:
IEditMojikumiTableCmdData:(必須)コマンドのための次のデータを指定します。
SetTargetUID:編集する文字組みテーブルの UID。 ターゲットの文字組みテーブルが編集できない場合(IMojikumiTable::GetEditability)は、何も行われません。
AddEditData:文字組みテーブルの中の上書きしたい設定ごとにこれを呼び出します。 詳しくは、SDK¥public¥interfaces¥cjk¥IMojikumiTable.h の MojikumiOverrideSpacing を参照してください。
SetComposeFlag:この編集の後に、ターゲットの文字組みテーブルと同じデータベース上にあるすべてのストーリーの再コンポーズを行う場合は、composeFlag を kTrue に設定します。 (例えば、文字組みテーブルが kDocWorkspaceBoss から参照されている場合は、同じドキュメント上のすべてのストーリーが再構成されます。)
ItemList 入力: 編集する文字組み名前スタイルテーブルを保持しているターゲットワークスペース Boss の UID。
オブザーバへの通知:
なし。
ItemList 出力: 該当なし。
コマンドの使用例:
なし。
目的: 文字組みおよび禁則テーブルをコピーするための汎用コマンド。
呼び出されるもの:
なし。
インターフェイス:
IUIDData:(必須)ソーステーブルの UID。
IIntData:(必須)コピー先のスタイル名テーブルの IID。
ItemList 入力: コピー先のスタイル名テーブルを保持しているターゲットワークスペース Boss の UID。
オブザーバへの通知:
theChange = kCopyMojikumiCmdBoss、protocol = IIntData に渡した IID。アイテムリスト内のワークスペースのサブジェクトが通知に使用されます。
ItemList 出力: ターゲットテーブルの UID。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 59
kCreateKinsokuTableCmdBoss
kDeleteKinsokuTableCmdBoss
目的: 新規禁則テーブルを作成し、それを名前スタイルテーブル(IID_IKINSOKUNAMETABLE)に追加します。
呼び出されるもの:
なし。
インターフェイス:
IUIDData:(オプション)新規禁則テーブルを作成する際に元にする既存の禁則テーブルの UID。 これが kInvalidUID 以外の値である場合は、指定された禁則テーブルが新規テーブルにコピーされます。
IStringData:(オプション)新規禁則テーブルの名前。 (翻訳が可能な文字列を設定する場合は、最低限、日本語のユーザインターフェイスロケールが必ず利用可能であるようにしてください。)空白にした場合に与えられるデフォルト名は、「Duplicate Kinsoku」です(この名前は翻訳されません)。
ItemList 入力: 禁則名前スタイルテーブルを保持しているワークスペース Boss の UID。
オブザーバへの通知:
theChange = kCreateKinsokuTableCmdBoss、protocol = IID_IKINSOKUNAMETABLE。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: 該当なし。 新しい禁則テーブルを取得するには、このコマンドを実行した直後に、禁則名テーブルの最後のエントリを検索してください。
コマンドの使用例:
SnpPerformKinsokuTable.cpp(SnippetRunner サンプルプラグイン)
目的: 既存の禁則テーブルを削除し、スタイル名テーブル(IID_IKINSOKUNAMETABLE)からも削除し、すべてのテキストストーリー、ワークスペースのデフォルト、段落スタイルを反復処理して、指定の禁則テーブルのインスタンスを、デフォルトの禁則テーブルに置き換えます。
呼び出されるもの:
kApplyTextAttrToWorkspaceCmdBoss、kEditTextStyleCmdBoss、kClearTextAttrCmdBoss、kDeleteUIDsCmdBoss。
インターフェイス:
IUIDData:(必須)削除する既存の禁則テーブルの UID。 アプリケーションによって提供されているデフォルトの禁則テーブルは、削除しないようにしてください。削除した場合、デバッグビルドでアサートが発生します。
ItemList 入力: 禁則名前スタイルテーブルを保持しているワークスペース Boss の UID。
オブザーバへの通知:
theChange = kDeleteKinsokuTableCmdBoss、protocol = IID_IKINSOKUNAMETABLE。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: 該当なし。
コマンドの使用例:
SnpPerformKinsokuTable.cpp(SnippetRunner サンプルプラグイン)
第 4 章 日本語タイポグラフィ 一般的な文字組み機能 60
kReplaceKinsokuTableCmdBoss
文字組み機能の使用
文字組みおよび禁則のための名前付きのテーブルエントリの作成
文字組みおよび禁則テーブルのための名前付きのテーブルエントリを作成するには、「kCreateMojikumiTableCmdBoss」および「kCreateKinsokuTableCmdBoss」をそれぞれ参照してください。
名前付きのテーブルエントリと詳細の取得(文字組み、詰め、禁則)
文字組み、詰め、および禁則の名前つきテーブルエントリを取得するには、まず、対象のワークスペース(kDocWorkspaceBoss または kWorkspaceBoss)の IStyleNameTable インターフェイスを、目的の IID(IID_IMOJIKUMINAMETABLE、IID_ITSUMENAMETABLE、IID_IKINSOKUNAMETABLE)でクエリします。次に、目的のエントリの UID を取得して、そのパーシスタント Boss の IMojikumiTable、ITsumeTable、または IKinsokuTable に対してクエリが行えるようにします。 目的のエントリに関するデータを取得するには、IMojikumiTable、ITsumeTable、または IKinsokuTable インターフェイスの Get メソッドを使用します。
例えば、ドキュメントの中の「MyKinsokuTable」という禁則テーブルを取得するには、次のようにします。 (簡潔にするためエラーチェックは省略しています。)
IDocument* doc = ...; // 事前に取得しますUIDRef wsRef = doc-> GetDocWorkSpace (); // IWorkspace を集約しますInterfacePtr<IStyleNameTable> kinsokuNameTable(wsRef, IID_IKINSOKUNAMETABLE);PMString tableName = "MyKinsokuTable";const UID kinsokuTableUID = kinsokuNameTable->FindByName(tableName);InterfacePtr<IKinsokuTable> kinsokuTable(wsRef.GetDataBase(), kinsokuTableUID, UseDefaultIID());
目的: ワークスペースの禁則テーブルのエントリを、他のワークスペースのエントリで置き換えます。 (2 つのドキュメントの間で行うのが一般的です。)
呼び出されるもの:
なし。
インターフェイス:
ILoadStyleCmdData:(必須)ソースおよびターゲットのワークスペースのスタイル名テーブルと、ソースおよびターゲットの禁則テーブルの UID。 どちらの UID も、正しいスタイル名テーブルの IKinsokuTable を集約するパーシスタント Boss を参照する必要があります。
ItemList 入力: 無視されます。
オブザーバへの通知:
なし。
ItemList 出力: 該当なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 61
文字組み、禁則、または詰めテーブルを段落または特定の文字で使用できるようにするための設定
これらのテーブルは、テキストストーリーの一部分で標準のテキスト属性として指定することができます。 文字組みテーブルと禁則テーブルは、段落の属性として指定されます(kTAMojikumiTableBoss および kTAKinsokuTableBoss)。詰めテーブルは、文字の属性として指定されます(kTATsumeTableBoss)。 これらの属性 Boss には、ITextAttrUID(これは、特定の名前付きテーブルエントリの UID に設定できます)が集約されています。 詳しくは、「日本語固有のテキスト属性およびアドーンメント」を参照してください。
注意 : 詰めテーブルは使用されていないので、その属性を適用してもコンポジションには影響を与えません。
コードサンプル禁則テーブルの処理例については、SnpPerformKinsokuTable.cpp スニペットコード(SnippetRunner プラグイン)を参照してください。
日本語固有のテキスト属性およびアドーンメント前述のとおり、日本語の文字組版は、日本語固有の一連の段落コンポーザによって行われています。これらのコンポーザは、文字組版のルールに従うだけでなく、様々なテキスト属性やアドーンメントに基づいて、それぞれの文字をどのように描画したらよいか判断しています。この節では、日本語のテキストコンポーザでのみサポートされている一連のテキスト属性およびアドーンメントについて説明します。
クラスダイアグラム
日本語固有のテキスト属性およびテキストアドーンメント
テキスト属性には、IAttrReport インターフェイスが集約されています。 日本語固有のテキスト属性の Boss 名は、多くの場合「kTA」で始まっていますが、いくつか例外もあります。 テキストアドーンメントには、ITextAdornment インターフェイスが集約されています。また、オプションで ITextAdornmentData が集約されます。 日本語固有のテキスト属性の一覧については、次の節の表を参照してください。
日本語固有のテキスト属性
IME 関連のテキスト属性(文字属性)
圏点関連のテキスト属性(文字属性)
AttributeBoss 説明 ITextAttr* インターフェイス
kTAIMECompModeBoss (なし) ITextAttrCompMode
AttributeBoss 説明 ITextAttr* インターフェイス
kTAKentenAlignmentBoss + 圏点揃え:中央揃え ITextAttrInt16
kTAKentenCharacterBoss + 圏点種類: ITextAttrInt16
kTAKentenCharacterSetBoss (なし) ITextAttrInt16
kTAKentenColorBoss + 圏点カラー:自動 ITextAttrUID
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 62
禁則関連のテキスト属性(段落属性)
その他のテキスト属性(文字属性)
kTAKentenFontFamilyBoss + 圏点フォント: ITextAttrUID
kTAKentenFontStyleBoss (なし) ITextAttrFont
kTAKentenKindBoss + 圏点種類:なし ITextAttrInt16
kTAKentenOutlineBoss + 圏点線:自動 ITextAttrRealNumber
kTAKentenOverprintBoss 圏点オーバープリント:自動 ITextAttrInt16
kTAKentenPositionBoss + 圏点位置:上/右 ITextAttrBoolean
kTAKentenRelatedSizeBoss + 圏点関連サイズ:1 pt ITextAttrRealNumber
kTAKentenSizeBoss + 圏点サイズ:自動 ITextAttrRealNumber
kTAKentenStrokeColorBoss + 圏点線カラー:自動 ITextAttrUID
kTAKentenStrokeOverprintBoss 圏点線オーバープリント:自動 ITextAttrInt16
kTAKentenStrokeTintBoss + 圏点線濃淡:自動 ITextAttrRealNumber
kTAKentenTintBoss + 圏点濃淡:自動 ITextAttrRealNumber
kTAKentenXScaleBoss + 圏点 X 幅: 100% ITextAttrRealNumber
kTAKentenYOffsetBoss + 圏点親文字からの間隔:0 pt ITextAttrRealNumber
kTAKentenYScaleBoss + 圏点 Y 幅: 100% ITextAttrRealNumber
AttributeBoss 説明 ITextAttr* インターフェイス
kTAKinsokuTableBoss + 禁則:禁則を使用しない ITextAttrUID
kTAKinsokuTypeBoss + 禁則調整方式:追い込み優先 ITextAttrKinsokuType
AttributeBoss 説明 ITextAttr* インターフェイス
kTACharRotateAngleReportBoss + 文字回転: 0 ITextAttrRealNumber
kTAScaleAffectsLineHeightBoss - 文字の比率を基準に行の高さを調整
ITextAttrBoolean
kTextAttrGlyphFormBoss + グリフ:標準 ITextAttrGlyphForm
kTextAttrOTFeatureListBoss + OTF 機能: ITextAttrOTFeatureList
AttributeBoss 説明 ITextAttr* インターフェイス
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 63
文字組み関連のテキスト属性
AttributeBoss 説明 段落/文字 ITextAttr* インターフェイス
kTABunriKinshiBoss + 分離禁止処理 段落 ITextAttrBoolean
kTACJKGridTrackingBoss - グリッドの字間を基準に字送りを調整
文字 ITextAttrBoolean
kTACJKHangingBoss + ぶら下がり方法:なし
段落 ITextAttrKinsokuHangType
kTAGridAlignOnlyFirstLineReportBoss
- 1 行目のみグリッドに揃える
段落 ITextAttrBoolean
kTAGridGyoudoriReportBoss + グリッド行取り: 0
段落 ITextAttrInt16
kTAGridJidoriReportBoss + 字取り: 0 文字 ITextAttrInt16
kTAKumiNumberReportBoss + 組み数字: 0 段落 ITextAttrInt16
kTAKumiNumberWithRomanReportBoss - 欧文を含む組み数字
段落 ITextAttrBoolean
kTALeadingModelBoss + 行送りモデル:下部アキ
段落 ITextAttrLeadingModel
kTAMojikumiAdjustPeriodBoss (なし) 段落 ITextAttrBoolean
kTAMojikumiForceAfterSpacingBoss + 文字後のアキ量:自動
文字 ITextAttrRealNumber
kTAMojikumiForceBeforeSpacingBoss + 文字前のアキ量:自動
文字 ITextAttrRealNumber
kTAMojikumiFullAdjustBoss (なし) 段落 ITextAttrBoolean
kTAMojikumiRensuujiBoss + 連数字処理 段落 ITextAttrBoolean
kTAMojikumiRomanWidthBoss (なし) 段落 ITextAttrBoolean
kTAMojikumiTableBoss + 文字組み: 段落 ITextAttrUID
kTAParaGyoudoriBoss - 段落行取り: 段落 ITextAttrBoolean
kTARotateRomanBoss - 欧文の回転 段落 ITextAttrBoolean
kTextAttrGridAlignmentBoss + グリッド揃え:なし
段落 ITextAttrGridAlignment
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 64
OpenType 関連のテキスト属性(文字属性)
ルビ関連のテキスト属性(文字属性)
AttributeBoss 説明 ITextAttr* インターフェイス
kTAOTFHVKanaBoss - OTF 横または縦組み用かな ITextAttrBoolean
kTAOTFProportionalBoss - OTF プロポーショナルメトリクス ITextAttrBoolean
kTAOTFRomanItalicsBoss - OTF イタリック ITextAttrBoolean
kTextAttrGlyphFormBoss + グリフ:標準 ITextAttrGlyphForm
kTextAttrOTFeatureListBoss + OTF 機能: ITextAttrOTFeatureList
AttributeBoss 説明 ITextAttr* インターフェイス
kTAMojiRubyBoss + ルビの種類:モノルビ ITextAttrBoolean
kTARubyAdjustParentBoss + 親文字間の調整:1-2-1 アキ ITextAttrRubyAdjustParent
kTARubyAlignmentBoss + ルビ揃え:1-2-1(JIS) ITextAttrRubyAlign
kTARubyAttrBoss (なし) ITextAttrBoolean
kTARubyAutoScaleMinBoss + ルビ自動幅最小: 66% ITextAttrRealNumber
kTARubyAutoScalingBoss - ルビ自動幅 ITextAttrBoolean
kTARubyAutoTCYAutoScaleBoss ルビ自動縦中横、自動幅 ITextAttrBoolean
kTARubyAutoTCYIncludeRomanBoss ルビ自動縦中横、欧文含む ITextAttrBoolean
kTARubyAutoTCYNumDigitsBoss ルビ自動縦中横、組み数字桁数 ITextAttrInt16
kTARubyColorBoss + ルビカラー:自動 ITextAttrUID
kTARubyEdgeSpaceBoss + ルビ自動揃え ITextAttrBoolean
kTARubyFontStyleBoss (なし) ITextAttrFont
kTARubyFontUIDBoss + ルビフォント: ITextAttrUID
kTARubyOTProBoss + Open Type Pro のルビグリフを使用
ITextAttrBoolean
kTARubyOutlineBoss + ルビ線:自動 ITextAttrRealNumber
kTARubyOverhangBoss + ルビぶら下げ:ルビ 1 文字分 ITextAttrRubyOverhang
kTARubyOverhangFlagBoss - ルビのぶら下がり ITextAttrBoolean
kTARubyOverprintBoss + ルビ塗りオーバープリント:自動 ITextAttrInt16
kTARubyPointSizeBoss + ルビサイズ:自動 ITextAttrRealNumber
kTARubyPositionBoss + ルビ位置:上/右 ITextAttrBoolean
kTARubyRelativeSizeBoss (なし) ITextAttrRealNumber
kTARubyStringBoss (なし) ITextAttrWideString
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 65
斜体関連のテキスト属性(文字属性)
縦中横関連のテキスト属性(文字属性)
詰め関連のテキスト属性(文字属性)
kTARubyStrokeColorBoss + ルビ線カラー:自動 ITextAttrUID
kTARubyStrokeOverprintBoss + ルビ線オーバープリント:自動 ITextAttrInt16
kTARubyStrokeTintBoss + ルビ線濃淡:自動 ITextAttrRealNumber
kTARubyTintBoss + ルビ濃淡:自動 ITextAttrRealNumber
kTARubyXOffsetBoss + ルビ横組み左右/縦組み上下:0 pt
ITextAttrRealNumber
kTARubyXScaleBoss + ルビ水平比率: 100% ITextAttrRealNumber
kTARubyYOffsetBoss + ルビ横組み上下/縦組み左右:0 pt
ITextAttrRealNumber
kTARubyYScaleBoss + ルビ垂直比率: 100% ITextAttrRealNumber
AttributeBoss 説明 ITextAttr* インターフェイス
kTAShataiAdjustRotationBoss - 斜体ライン揃え ITextAttrBoolean
kTAShataiAdjustTsumeBoss + 斜体ツメの調整 ITextAttrBoolean
kTAShataiAngleBoss + 斜体角度: 45 ITextAttrRealNumber
kTAShataiMagnificationBoss + 斜体縮小率: 0% ITextAttrRealNumber
AttributeBoss 説明 ITextAttr* インターフェイス
kTATatechuyokoAttrBoss - 縦中横 ITextAttrBoolean
kTATatechuyokoXOffsetBoss + 縦中横上下位置:0 pt ITextAttrRealNumber
kTATatechuyokoYOffsetBoss + 縦中横左右位置:0 pt ITextAttrRealNumber
AttributeBoss 説明 ITextAttr* インターフェイス
kTATsumeTableBoss (なし) ITextAttrUID
kTATsumeBoss (obsolete) + 詰め: 0% ITextAttrRealNumber
AttributeBoss 説明 ITextAttr* インターフェイス
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 66
割注関連のテキスト属性(文字属性)
日本語固有のテキストアドーンメント
次の図を参照してください。
➤ kTextAdornmentKentenBoss:圏点描画の実装を提供します。
➤ kTextAdornmentKentenDataBoss:圏点アドーンメントの関連データを提供します。
➤ kTextAdornmentRubyBoss:ルビ描画の実装を提供します。
➤ kTextAdornmentRubyDataBoss:ルビアドーンメントの関連データを提供します。
IWaxRun には、ワックスランのアドーンメントを取得したり設定したりするための、ITextAdornment および ITextAdornmentData 関連のメソッドがいくつかあります。
AttributeBoss 説明 ITextAttr* インターフェイス
kTAWarichuAlignmentBoss + 割注:自動揃え ITextAttrAlign
kTAWarichuAttrBoss - 割注 ITextAttrBoolean
kTAWarichuAutoResizeParenBoss (なし) ITextAttrBoolean
kTAWarichuLineSpacingBoss + 割注行間:0 pt ITextAttrRealNumber
kTAWarichuMinCharsAfterBreakBoss + 割注:最終行の最小文字数: 2 ITextAttrInt16
kTAWarichuMinCharsBeforeBreakBoss + 割注:1 行目の最終文字数: 2 ITextAttrInt16
kTAWarichuNumOfLineBoss + 割注行: 2 ITextAttrInt16
kTAWarichuRelativeSizeBoss + 割注サイズ: 50% ITextAttrRealNumber
kTextAdornmentKentenBoss kTextAdornmentKentenDataBoss
kTextAdornmentRubyBoss kTextAdornmentRubyDataBoss
ITextAdornment
ITextAdornment
ITextAdornmentData
ITextAdornmentData
IWaxRun
IWaxRun
IWaxGlyphs
IWaxRenderData
IWaxRenderData
IKentenAdornmentData
IWaxGlyphs
IRubyAdornmentData
<<Bossクラス>> <<Bossクラス>>
<<Bossクラス>><<Bossクラス>>
(プライベート)
(プライベート)
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 67
kComposeStyleBoss への日本語固有機能の追加
テキスト属性によって(IAttrReport::TellComposition メソッドを介して)、テキストのレイアウト方法に関する情報が段落コンポーザに提供されます。 これらの情報は、非パーシスタント Boss である kComposeStyleBoss オブジェクトにまとめられます。 IDrawingStyle はその主要なインターフェイスであり、これらの文字属性情報が保持され、そのほぼすべて(フォント、ポイントサイズ、カラーなど)がリストされています。
注意 : このインターフェイスは、「読み取り専用」のインターフェイスと考えてください。このデータインターフェイスを通じて set 操作を行っても、何も行われません。 IDrawingStyle のインスタンスを取得するには、IComposeScanner::GetCompleteStyleAt または IComposeScanner::GetParagraphStyleAt を使用します。
しかしながら、IDrawingStyle には日本語のテキスト属性は保持されていません。 日本語のテキスト属性は、次に示す、kComposeStyleBoss のその他のインターフェイスに保持されています。 (各テキスト属性 Boss について詳しくは、「日本語固有のテキスト属性およびアドーンメント」を参照してください。)
IGridRelatedStyle
フレームグリッド設定に対応するテキスト属性が保持されています。 (「フレームグリッド設定とテキストモデルの間のやり取り」を参照してください。)このインターフェイスには、次のテキスト属性の設定が保持されています。
IKentenStyle
圏点に関するテキスト属性が保持されています。このインターフェイスには、次のテキスト属性の設定が保持されています。
kTACJKGridTrackingBoss
kTAGridAlignOnlyFirstLineReportBoss
kTAGridGyoudoriReportBoss
kTAGridJidoriReportBoss
kTAParaGyoudoriBoss
kTAScaleAffectsLineHeightBoss
kTextAttrGridAlignmentBoss
kTAKentenAlignmentBoss
kTAKentenCharacterBoss
kTAKentenColorBoss
kTAKentenFontFamilyBoss
kTAKentenFontStyleBoss
kTAKentenKindBoss
kTAKentenOutlineBoss
kTAKentenOverprintBoss
kTAKentenPositionBoss
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 68
IMojikumiStyle
一般的な日本語テキストコンポジションに関するテキスト属性が保持されています。このインターフェイスには、次のテキスト属性の設定が保持されています。
kTAKentenRelatedSizeBoss
kTAKentenSizeBoss
kTAKentenStrokeColorBoss
kTAKentenStrokeOverprintBoss
kTAKentenStrokeTintBoss
kTAKentenTintBoss
kTAKentenXScaleBoss
kTAKentenYOffsetBoss
kTAKentenYScaleBoss
kTABunriKinshiBoss
kTACharRotateAngleReportBoss
kTACJKHangingBoss
kTAKinsokuTableBoss
kTAKinsokuTypeBoss
kTALeadingModelBoss
kTAMojikumiAdjustPeriodBoss
kTAMojikumiForceBeforeSpacingBoss
kTAMojikumiFullAdjustBoss
kTAMojikumiRensuujiBoss
kTAMojikumiRomanWidthBoss
kTAMojikumiTableBoss
kTAOTFHVKanaBoss
kTAOTFProportionalBoss
kTAOTFRomanItalicsBoss
kTAShataiAdjustRotationBoss
kTAShataiAdjustTsumeBoss
kTAShataiAngleBoss
kTAShataiMagnificationBoss
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 69
IRubyStyle
ルビに関するテキスト属性が保持されています。このインターフェイスには、次のテキスト属性の設定が保持されています。
kTATsumeBoss
kTATsumeTableBoss
kTAMojiRubyBoss
kTARubyAdjustParentBoss
kTARubyAlignmentBoss
kTARubyAttrBoss
kTARubyAutoScaleMinBoss
kTARubyAutoScalingBoss
kTARubyColorBoss
kTARubyEdgeSpaceBoss
kTARubyFontStyleBoss
kTARubyFontUIDBoss
kTARubyOTProBoss
kTARubyOutlineBoss
kTARubyOverhangBoss
kTARubyOverhangFlagBoss
kTARubyOverprintBoss
kTARubyPointSizeBoss
kTARubyPositionBoss
kTARubyRelativeSizeBoss
kTARubyStringBoss
kTARubyStrokeColorBoss
kTARubyStrokeOverprintBoss
kTARubyStrokeTintBoss
kTARubyTintBoss
kTARubyXOffsetBoss
kTARubyXScaleBoss
kTARubyYOffsetBoss
kTARubyYScaleBoss
第 4 章 日本語タイポグラフィ 日本語固有のテキスト属性およびアドーンメント 70
IVerticalRelatedStyle
縦組みにおける縦中横および欧文の回転に関するテキスト属性が保持されています。このインターフェイスには、次のテキスト属性の設定が保持されています。
IWarichuStyle
割注に関するテキスト属性が保持されています。このインターフェイスには、次のテキスト属性の設定が保持されています。
ナビゲーションダイアグラムIAttrReport(すべてのテキスト属性 Boss に共通のインターフェイス)を返すテキスト関連 Boss からのブリッジメソッドが、いくつかあります。
➤ IComposeScanner::QueryAttributeAt(kTextStoryBoss から)。
➤ ITextScriptUtils::QueryChildTextAttribute(kUitlsBoss から)。
➤ ITextAttributeSuite::QueryAttributeN(様々な選択スイート Boss から。返される IPMUnknown を IAttrReport に型キャストしてください)。
➤ IFocusCache::QueryAttributeN(様々な選択スイート Boss および kTextFocusBoss から。返される IPMUnknown を IAttrReport に型キャストしてください)。
kTAKumiNumberReportBoss
kTARotateRomanBoss
kTATatechuyokoAttrBoss
kTATatechuyokoXOffsetBoss
kTATatechuyokoYOffsetBoss
kTAWarichuAlignmentBoss
kTAWarichuAttrBoss
kTAWarichuAutoResizeParenBoss
kTAWarichuLineSpacingBoss
kTAWarichuMinCharsAfterBreakBoss
kTAWarichuMinCharsBeforeBreakBoss
kTAWarichuNumOfLineBoss
kTAWarichuRelativeSizeBoss
第 4 章 日本語タイポグラフィ 合成フォント 71
コマンドと通知テキスト属性を変更するコマンドの一覧は、ITextModelCmds インターフェイスを参照してください。 また、現在の選択コンテキストにおけるテキスト属性は、ITextAttributeSuite を使用して変更することができます。
これらの各コマンドの通知は、アイテムリスト内のターゲットストーリーのサブジェクトで行われ、theChange = cmdClassID、protocol = IID_ITEXTMODEL となります。
テキスト属性およびアドーンメントの操作日本語固有のテキスト属性を操作するのは、ふつうの欧文のテキスト属性を操作するのと、何ら変わりはありません。ただし、日本語のテキスト属性のいくつかは、グループで設定する必要があります。 属性の設定(これによって間接的にアドーンメントが有効になります)は、ITextModelCmds および ITextAttributeSuite インターフェイスで行えます。 日本語固有のテキスト属性およびアドーンメントの多くは、日本語のテキストコンポーザを使用した場合にしか組み込まれないことに注意してください。したがって、kTextAttrComposerBoss 属性を、日本語のテキストコンポーザに設定しておく必要があります(「日本語テキストコンポーザ」を参照)。 属性を取得するには、ブリッジメソッドを使用して(「ナビゲーションダイアグラム」を参照)属性 Boss の IAttrReport インターフェイスを取得し、属性固有のインターフェイスをクエリします。
コードサンプルいくつかのスニペットコードで、日本語固有のテキスト属性(および間接的に日本語テキストアドーンメント)を使用する方法が示されています。
➤ SnpPerformTextAttrKenten.cpp(SnippetRunner プラグイン)では、圏点に関する属性を設定および取得する方法が示されています。
➤ SnpPerformTextAttrRuby.cpp(SnippetRunner プラグイン)では、ルビに関する属性を設定および取得する方法が示されています。
➤ SnpPerformTextAttrTateChuYoko.cpp(SnippetRunner プラグイン)では、縦中横に関する属性を設定および取得する方法が示されています。
➤ SnpPerformTextAttrWarichu.cpp(SnippetRunner プラグイン)では、割注に関する属性を設定および取得する方法が示されています。
合成フォント日本語のドキュメントでは、1 つの本文に和文と欧文が混在していることがよくあります。 日本語フォントの全角文字は、半角の英数字よりも幅/高さが大きく作られているのがふつうで、日本語の全角文字が主に使われている本文の中では、半角の英数字が小さく見えてしまうという問題が起こります。 次の図に、小塚ゴシック Pro フォントのいくつかの文字を InDesign CS3-J でコンポーズしたところを示します。
第 4 章 日本語タイポグラフィ 合成フォント 72
最初の行には半角の英数字が、2 番目の行には全角文字(「ゼロ」も全角文字です)が並べられています。 ベースライン(青線)に注目してください。仮想ボディの底辺よりも少し上の位置にあります。 また、最初の行にある大文字の「M」が占めている領域と、2 行目の各グリフが占めている領域とを比較してみてください。 比較しやすいように、グリフのバウンディングボックスがマゼンタで描かれています。 半角英数字のフォントサイズを大きくすれば、先ほどの問題が解決するように思われますが、フォントサイズを大きくするとそれにつれてベースラインもシフトするので、半角英数字と全角文字が互いにずれて見えてしまいます。これを解決するためには、これらの文字のベースラインを調整する必要があります。
これらの文字は、似た性質を持ついくつかのクラスに分類できます。例えば、欧文の半角英字、欧文の数字、日本語の漢字、日本語のかな、全角数字、といった具合です。 これらのクラスごとに属性の調整を加えれば、テキストの見映えの問題は改善されることになります。 これが、合成フォントにおける基本的な考え方です。合成フォントとは、フォント、サイズおよび位置調整を、文字のクラスごとに指定したメタフォントです。 InDesign CS3 では、書式/合成フォントで、新規合成フォントを作成できます。 次の図に示すように、このダイアログボックスのサンプルウィンドウの表示を見ながら、様々な設定を試すことができます。
このダイアログには、次の表のように設定された合成フォントが表示されています。
文字クラス フォント サイズベースラインシフト 垂直比率 水平比率
中心を維持する
漢字 小塚ゴシック Pro、Regular 100% 0% 100% 100% いいえ
かな 小塚ゴシック Std、Regular 100% 0% 100% 100% はい
全角約物 小塚ゴシック Std、Regular 100% 0% 100% 100% いいえ
全角記号 小塚ゴシック Pro、Regular 100% 0% 100% 100% いいえ
半角欧文 Arial Black、Regular 125% -7% 100% 100% いいえ
半角数字 Arial Black、Regular 125% -7% 100% 100% いいえ
第 4 章 日本語タイポグラフィ 合成フォント 73
この表の「中心を維持する」の列は、フォントコンポーネントのグリフを拡大/縮小するとき、このオプションによってグリフだけを拡大/縮小し、文字送りは拡大/縮小しないようにできることを意味します。 グリフは元の文字送りで配置されていたときの中心を維持するようになります。 この設定は、「小さいかな」を含む合成フォントを作成する際に使用します。この設定を使用しないと、かなが拡大/縮小されるにつれて文字幅も拡大/縮小されるので、フォントが使えなくなります。
この設定の意味は、次のとおりです。
➤ 漢字および全角記号には、小塚ゴシック Pro を使用します。
➤ かなおよび全角約物には、小塚ゴシック Std を使用します。
➤ 半角欧文には Arial Black を使用し、サイズの調整とベースラインシフトが行われています。(ベースラインシフトが負の値になっているのは、下方向へのシフトを表します。)
この合成フォントをテキスト本文で使用する方法は、合成フォントでないふつうのフォントと同じです。 つまり、テキスト本文を選択し、文字パレットでそのフォントを選択します。
この節の残りの部分では、合成フォントモデルと使用ケースについて見ていきます。
クラスダイアグラム合成フォントマネージャ ICompositeFontMgr は、kDocWorkspaceBoss と kWorkspaceBoss に集約されます。 この実装では、主に合成フォントダイアログボックスの便利な機能が提供されています。 合成フォントのスタイル名テーブル(IStyleNameTable)も、kDocWorkspaceBoss と kWorkspaceBoss に集約されています。 ここに、特定のワークスペースの合成フォントのリストがあります。
合成フォントのデータは、パーシスタント Boss である kCompositeFontBoss で保持されます。 合成フォントのスペックには、文字のクラスの集合が含まれています。 それぞれの文字クラスは、別のパーシスタント Boss である kCompFontDataSettingsBoss が受け持ちます。
第 4 章 日本語タイポグラフィ 合成フォント 74
ナビゲーションダイアグラム
一般には、合成フォントのリスト(ワークスペース Boss の IStyleNameTable/IID_ICOMPOSITEFONTLIST)から目的の kCompositeFontBoss へとナビゲートしていきます。
ワークスペース Boss の合成フォントリストをクエリするためには、その IID でリストを指定する必要があります。
InterfacePtr<IWorkspace>workSpace(Utils<ILayoutUIUtils>()->QueryActiveWorkspace());InterfacePtr<IStyleNameTable>compositeFontList(workSpace, IID_ICOMPOSITEFONTLIST);
ワークスペース Boss から名前テーブルエントリ Boss にナビゲートするブリッジメソッドについては、IStyleNameTable を参照してください。
次に、ICompositeFont のブリッジメソッド(ICompositeFont::GetCharClass や ICompositeFont::GetCharClassUID)を使用して、kCompositeFontBoss から kCompFontDataSettingsBoss にナビゲートします。
コマンドと通知一般的な合成フォントコマンドは次のとおりです。
➤ 「kAddCompFontClassCmdBoss」
➤ 「kCopyCompositeFontCmdBoss」
➤ 「kDeleteCompositeFontCmdBoss」
➤ 「kEditCompositeFontCmdBoss」
➤ 「kLoadCompositeFontCmdBoss」
➤ 「kNewCompositeFontCmdBoss」
➤ 「kReplaceCompositeFontCmdBoss」
➤ 「kReadCompareCompositeFontCmdBoss」
➤ 「kSaveCompositeFontCmdBoss」
kCompFontDataSettingsBoss
kCompositeFontBoss
ICompositeFontMgr
ICompositeFont
ICompFontDataSettings
IStyleNameTable (IID_ICOMPOSITEFONTLIST)
kDocWorkspaceBosskWorkspaceBoss
ICompositeFontMgr
IStyleNameTable (IID_ICOMPOSITEFONTLIST)
1
1..*IStyleNameTable::GetNthStyle
1IStyleNameTable::GetNthStyle
1
1..*
ICompositeFont::GetCharClass
<<Bossクラス>><<Bossクラス>>
<<Bossクラス>>
<<Bossクラス>>
第 4 章 日本語タイポグラフィ 合成フォント 75
CMap ファイルを操作する合成フォントコマンドは、次のとおりです。
➤ 「kCreateFontCMapCmdBoss」
➤ 「kDeleteFontCMapCmdBoss」
➤ 「kCreateDummyFontCMapCmdBoss」
ブックで使用する合成フォントコマンドは、次のとおりです。
➤ 「kCreateFontInBookCmdBoss」
➤ 「kDeleteFontInBookCmdBoss」
kAddCompFontClassCmdBoss
目的: 合成フォントに、文字クラスを追加します。
呼び出されるもの:
なし。
インターフェイス:
ICompFontDataSettings:(必須)合成フォントに追加する文字クラスのデータが保持されています。
IStringData:(必須)IBoolData を kFalse に設定した場合、新規合成フォントの名前です。
IBoolData:(オプション)文字クラスを追加するには、これを kTrue に設定します(デフォルト)。同時に新規合成フォントを作成する場合は、これを kFalse に設定します。 この新規合成フォントは、ワークスペースのデフォルトの合成フォントに基づいて作成されます。
IUIDData:(オプション)IBoolData を kTrue に設定した場合は、文字クラスを追加する合成フォントを指定します。 IBoolData を kFalse に設定した場合、これは無視されます。
ItemList 入力: 変更する合成フォントの合成フォントリストを保持しているワークスペースの UID。
オブザーバへの通知:
theChange = kAddCompFontClassCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。
コマンドの使用例:
SnpPerformCompFont.cpp(SnippetRunner プラグイン)
第 4 章 日本語タイポグラフィ 合成フォント 76
kCopyCompositeFontCmdBoss
kDeleteCompositeFontCmdBoss
目的: 合成フォントを、あるワークスペースから別のワークスペースにコピーします。
呼び出されるもの:
なし。
インターフェイス:
IUIDData:(必須)コピー元の既存の合成フォントの UID。
ItemList 入力: コピー先の合成フォントリストを保持しているワークスペースの UID。 これはドキュメント上のものである必要があります。そうでない場合は通知でアサートが発生します。
オブザーバへの通知:
theChange = kCopyCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: ターゲットワークスペース上のコピーされた合成フォントの UID。
コマンドの使用例:
なし。
目的: ワークスペースから合成フォントを削除します。 また、ドキュメント内のこの合成フォントの使用と、ワークスペース(ドキュメントまたはグローバル)で定義されているスタイルも削除します。
呼び出されるもの:
kDeleteUIDsCmdBoss
インターフェイス:
IUIDData:(必須)削除する既存の合成フォントの UID。
ItemList 入力: 合成フォントリストを保持しているワークスペースの UID。
オブザーバへの通知:
theChange = kDeleteCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。
コマンドの使用例:
SnpPerformCompFont.cpp(SnippetRunner プラグイン)
第 4 章 日本語タイポグラフィ 合成フォント 77
kEditCompositeFontCmdBoss
kLoadCompositeFontCmdBoss
目的: ワークスペースの合成フォントを編集します。 このコマンドを実行した後は、この合成フォントを使用しているすべてのストーリーの構成をやり直すことをお勧めします。
呼び出されるもの:
kDeleteUIDsCmdBoss
インターフェイス:
IUIDData:(必須)編集する既存の合成フォントの UID。ICompositeFont:(必須)合成フォントデータ。 アイテムがコレクションである場合は、このデータインターフェイスの内容が、IUIDData で指定した合成フォントに追加されます。
ItemList 入力: 編集する合成フォントリストを保持しているワークスペースの UID。
オブザーバへの通知:
theChange = kEditCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。
コマンドの使用例:
なし。
目的: 合成フォントを、特定のワークスペースから別のワークスペースにコピーします。 これは「kCopyCompositeFontCmdBoss」に似ていますが、UID をターゲットワークスペースに変換する処理も行われるので、「kCopyCompositeFontCmdBoss」よりも便利です。
呼び出されるもの:
なし。
インターフェイス:
IUIDData:(必須)コピー元の既存の合成フォントの UID。ICompositeFont:(オプション)無視されます。
ItemList 入力: コピー先の合成フォントリストを保持しているワークスペースの UID。
オブザーバへの通知:
theChange = kLoadCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 合成フォント 78
kNewCompositeFontCmdBoss
kReplaceCompositeFontCmdBoss
目的: 新規合成フォントを作成し、特定のワークスペースの合成フォントリストに追加します。
呼び出されるもの:
なし。
インターフェイス:
ICompositeFont:(必須)新規合成フォントのデータ。
IUIDData:無視されます。
ItemList 入力: 新規合成フォントの追加先となる合成フォントリストを保持しているワークスペースの UID。
オブザーバへの通知:
theChange = kNewCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。 このコマンドで作成した合成フォントを取得するには、作成した直後に、IStyleNameTable(IID_ICOMPOSITEFONTLIST)の最後のエントリを検索してください。
コマンドの使用例:
SnpPerformCompFont.cpp(SnippetRunner プラグイン)
目的: ドキュメントの合成フォントを置換(同期)します。 これは主に、合成フォントダイアログボックスで使用されています。
呼び出されるもの:
kFindChangeFormatCmdBoss、kSetOtherFindChangeOptionCmdBoss。
インターフェイス:
なし。
ItemList 入力: ドキュメントの UID。
オブザーバへの通知:
theChange = kReplaceCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 合成フォント 79
kReadCompareCompositeFontCmdBoss
kSaveCompositeFontCmdBoss
目的: 合成フォントがディスク上のファイルと一致しているかどうかを比較するために使用します。 (内部使用のみ。)
呼び出されるもの:
なし。
インターフェイス:
ICompositeFont:(必須)SetDocument を呼び出して、ワークスペース内にその合成フォントを含んでいるドキュメントを設定します。
IStringData:(必須)比較する合成フォントファイルの完全なパスを指定します。
IBoolData:(ステータスの戻り)コマンドを実行する前に、これを kFalse に設定します。 コマンドを実行したら、Get を呼び出します。 kFalse であれば、合成フォントファイルとワークスペースの合成フォントが一致しています。
IUIDData:無視されます。
ItemList 入力: ドキュメントワークスペースの UID。
オブザーバへの通知:
theChange = kReadCompareCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。
コマンドの使用例:
なし。
目的: 合成フォントをドキュメントおよびディスクに保存します。 (内部使用のみ。)
呼び出されるもの:
「kNewCompositeFontCmdBoss」
インターフェイス:
ICompositeFont:無視されます。
IStringData:(必須)合成フォントのパス。 これは、ICompositeFontMgr::GetCompositeFontPath から取得できます。
IBoolData:(出力)コマンドおよびすべてのサブコマンドが適切に処理されたかどうかを示すフラグが含まれています。kTrue であれば正常に処理されています。
IIntData:(オプション)コマンドの処理元を示す特別なフック。 認識される値は kCompFontSaveACopyDocResponderImpl のみです。その場合、通常とは異なり、直ちに 「kNewCompositeFontCmdBoss」 が実行されます。
ItemList 入力: ドキュメントの UID。
オブザーバへの通知:
theChange = kSaveCompositeFontCmdBoss、protocol = IID_ICOMPOSITEFONT。アイテムリストのアイテムのサブジェクトが通知されます。
ItemList 出力: なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 合成フォント 80
kCreateFontCMapCmdBoss
kDeleteFontCMapCmdBoss
目的: 合成フォントの CMap(文字マップ)を作成します。
呼び出されるもの:
「kNewCompositeFontCmdBoss」 (必要に応じて)、 「kCreateDummyFontCMapCmdBoss」
インターフェイス:
ICompositeFont:(必須)CMap を再生成する合成フォントの詳細を指定します。 一般に、ネイティブフォントファミリ名が必要です(ICompositeFont::GetNativeFontFamilyName)。ただし、ネイティブフォントファミリ名に「<」が含まれている場合は、PostScript 名が必要です(ICompositeFont::GetPostScriptName)。
IUIDData:(必須)CMap を再生成する合成フォントの UID。この UID は、アイテムリストで指定したワークスペース内の合成フォントリストから参照されている必要があります。
ItemList 入力: CMap を生成する合成フォントの合成フォントリスト(IID_ICOMPOSITEFONTLIST)を保持しているワークスペースの UID。
オブザーバへの通知:
なし。
ItemList 出力: なし。
コマンドの使用例:
なし。
目的: 合成フォントの CMap(文字マップ)を削除します。
呼び出されるもの:
「kCreateDummyFontCMapCmdBoss」
インターフェイス:
IStringData:(必須)削除する CMap ファイルのパスを指定します。
IUIDData:無視されます。
ItemList 入力: なし。
オブザーバへの通知:
なし。
ItemList 出力: なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 合成フォント 81
kCreateDummyFontCMapCmdBoss
kCreateFontInBookCmdBoss
目的: 合成フォントの CMap ファイルテンプレートを作成します。 (内部使用のみ。)
呼び出されるもの:
なし。
インターフェイス:
IBoolData:無視されます。
IIntData:(オプション)ゼロ以外の値を指定した場合は、生成された CMap ファイルにこれが追加されます。
ItemList 入力: なし。
オブザーバへの通知:
なし。
ItemList 出力: なし。
コマンドの使用例:
なし。
目的: ブックファイル内のすべてのファイルで合成フォントを使用できるようにします。 非推奨コマンドです。使用しないでください。
呼び出されるもの:
新規合成フォントを作成する必要がある場合は「kCreateFontCMapCmdBoss」。
インターフェイス:
IStringData:(必須)対象ブックファイルのファイルパス。
IBoolData:(出力)最初にインストールされた合成フォントが見つかった場合は、true に設定されます。
ItemList 入力: なし。
オブザーバへの通知:
なし。
ItemList 出力: なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 合成フォント 82
kDeleteFontInBookCmdBoss
合成フォントの操作
合成フォントの作成と合成フォントリストへの追加
新規合成フォントを作成する手順は、いくつかの段階に分かれています。
1. コマンドシーケンスを作成します。
2. 「kNewCompositeFontCmdBoss」を使用して、新規合成フォントを作成します。 このときに、新規合成フォントがワークスペースの合成フォントリストに追加されます。
3. 合成フォントに追加したい文字クラスごとに、「kAddCompFontClassCmdBoss」を使用します。
4. 「kCreateFontCMapCmdBoss」を使用して、合成フォントの CMap ファイルを作成します。
5. シード値が変わるまで IFontMgr::CurrentFontSystemSeed をループで呼び出して、フォントサブシステムを更新します。
6. コマンドシーケンスを終了します。
詳しくは、SnpPerformCompFont.cpp(SnippetRunner プラグイン)の CreateCompFont メソッドを参照してください。
合成フォントの削除
合成フォントを削除するには、「kDeleteCompositeFontCmdBoss」を使用します。
合成フォントの変更
既存の合成フォントを変更するには、「kEditCompositeFontCmdBoss」を使用します。
目的: 現在のブックファイルで使用されていない合成フォントを削除します。これは、最後のブックを閉じるときにのみ呼び出されます。 (内部使用のみ。)
呼び出されるもの:
なし。
インターフェイス:
IStringData:無視されます。
IBoolData:無視されます。
ItemList 入力: なし。
オブザーバへの通知:
なし。
ItemList 出力: なし。
コマンドの使用例:
なし。
第 4 章 日本語タイポグラフィ 合成フォント 83
あるワークスペースから別のワークスペースへの合成フォントのコピー
合成フォントをコピーするには、「kLoadCompositeFontCmdBoss」を使用します。
合成フォントの情報の取得
特定の合成フォントの詳細を取得するには、まず、対象のワークスペース(ドキュメントの kDocWorkspaceBoss、または kWorkspaceBoss)の IStyleNameTable インターフェイスを、目的の IID(IID_ICOMPOSITEFONTLIST)でクエリします。次に、目的のエントリの UID を取得して、そのパーシスタント Boss の ICompositeFont インターフェイスに対してクエリが行えるようにします。 目的のエントリに関するデータを取得するには、ICompositeFont インターフェイスの Get メソッドを使用します。
例えば、次のコードでは「MyCompositeFont」という合成フォントを取得しています。 (簡潔にするためエラーチェックは省略しています。)
IDocument* doc = ...; // 事前に取得しますUIDRef wsRef = doc-> GetDocWorkSpace (); // IWorkspace を集約しますInterfacePtr<IStyleNameTable> compositeFontList(wsRef, IID_ICOMPOSITEFONTLIST);PMString fontName = "MyCompositeFont";const UID compFontUID = compositeFontList->FindByName(fontName);InterfacePtr<ICompositeFont> compositeFont(wsRef.GetDataBase(),compFontUID, UseDefaultIID());
コードサンプル合成フォントの処理例については、SnpPerformCompFont.cpp スニペットコード(SnippetRunner プラグイン)を参照してください。
日本語フォントに関する追加情報InDesign C++ API セットの一般的なフォント API である IPMFont および IFontInstance は、欧文フォントと日本語フォントで同じように機能しますが、これらの API には「ICF」や「EmBox」といった名前を含む特別なメソッドがあることに気付くかもしれません。 日本語フォントのメトリクスを取得する必要がある場合は常に、このようなメソッドから返される平均字面や仮想ボディのサイズを使用します。アセント、ディセント、キャップハイト、X ハイトの値を返すメソッドは使用しません。 一般的に、欧文フォントメトリクスは日本語グリフ(特に、漢字、平仮名、カタカナ、その他の各種記号)に対して意味がありません。 さらに、日本語グリフは(日本語段落コンポーザでコンポーズした場合)通常、欧文ベースラインに揃えられず、仮想ボディの中央に配置されます(フレームグリッドごとの設定)。 個々のテキスト属性の値を変更することにより、文字揃えとフレームグリッド揃えの動作を変更できます。 詳しくは、「日本語固有のテキスト属性およびアドーンメント」を参照してください。
84
5 プラットフォーム固有の文字エンコーディング
世に広く普及しているコンピュータ用の文字エンコーディングのうち、最も早く登場したものの 1 つが、ASCII(American Standard Code for Information Interchange)文字セットです。 ASCII では、7 ビットの範囲(16 進数で 00 から 7F)を使用して、基本的な英数字と制御コードを表しています。 これは、コンピュータシステム同士で英語のテキストをやり取りするのには十分でしたが、日常的によく使用される文字の種類が 3,000 を優に超えるような言語を扱うには、127 文字では不十分でした。 近代的なコンピューティングシステムの登場とともに、固有の目的を持った様々な文字エンコーディング方式が開発されました。 例えば、インターネットでは 7 ビットシステムのルータが数多く使用されていますが、そのようなインターネットでも日本語の電子メールを正常に伝送できるような文字セットが開発されました。
InDesign CS3 でテキストモデルに格納されるのはユニコード文字ですが、読み込み/書き出し機能やその他のアプリケーション間通信メカニズム(スクリプティングやドラッグ&ドロップなど)を使用して他のコンピュータアプリケーションとやり取りを行う場合には、様々なエンコーディング標準を理解する必要があります。 例えば、ある製品のファイルフォーマットで書き出しを行う書き出しフィルタを実装するとしましょう。 この書き出しフィルタで日本語をサポートするためには、どの文字セットが使用されるかを知る必要があります。これによって、目的のアプリケーションでファイル内の日本語文字が正しく認識されるようになります。
標準的な日本語エンコーディング次の表に、InDesign CS3 で使用されている標準的な日本語エンコーディングを示します。
エンコーディング 説明
Adobe-Japan-1-4、1-5、および 1-6
これらはエンコーディング標準ではなく、アドビ システムズ 株式会社が確立したフォントのグリフ ID の仕様です。 名前の最後の数字は、バージョン(1.4、1.5、または 1.6)を示しています。 この標準に準拠した日本語フォントは、グリフ ID と文字コード間の共通のマッピングを持っています。
EUC-JP(UNIX) 主に UNIX システム(UNIX ベースの電子メールを含む)で使用されます。 InDesign CS3 では使用されていません。
JIS または ISO-2022-JP
すべての文字が 7 ビット文字の組み合わせで表現できるので、主に電子メールシステムで使用されています。 JIS 文字エンコーディング標準では、バイトストリームの現在のセクションを通常の ASCII として解釈したらよいのかダブルバイトの日本語文字として解釈したらよいのかなどを示すエンコーディングモードを使用しています。このモードは、ESC(16 進数で 1B)で始まるエスケープシーケンスによって切り替えが行われます。 これはステートマシンで JIS エンコードの文字を解釈するときに役立ちます。InDesign CS3 では、文字組みダイアログボックス、圏点ダイアログボックス、禁則ダイアログボックス、および合成フォントの編集ダイアログボックスで文字を指定するためにのみ使用されます。
区点コード 日本のメインフレーム情報システムのキーボードで使用されている文字セットです。文字は、セクション番号(区)と識別子(点)で指定されます。 JIS 文字コードと同じように、文字組みダイアログボックス、圏点ダイアログボックス、禁則ダイアログボックス、および合成フォントの編集ダイアログボックスで文字を指定するためにのみ使用されます。
第 5 章 プラットフォーム固有の文字エンコーディング 標準的な日本語エンコーディング 85
日本では他にも独自のエンコーディング方式が使用されていますが、 InDesign CS3 では認識されないので、このマニュアルでは説明を省略することにします。
Shift-JIS(SJIS) パソコンユーザの間で最も広く使用されている標準的な日本語エンコーディングの 1 つです。MS-DOS/Windows ベースのパソコンや Macintosh パソコンと(また ASCII ベースのシステムとも)互換性があることが、その理由です。 InDesign CS3 では、ユーザインターフェイスロケールが k_jaJP である場合のデフォルトの PlatformChar および PMString エンコーディングとしてこの標準を使用しています。 その理由としては、Mac OS® 用および Windows 用のほとんどの日本語対応テキスト/ソースエディタで Shift-JIS がデフォルトの文字セットとして使用されていることなどがあります。 また、これは様々な読み込み/書き出しフィルタ(テキスト、InDesign タグ付きテキスト、XML、Microsoft® Office フォーマットファイル(非ユニコードのみ)、および RTF(クリップボードスクラップ)など)で使用されています。 Microsoft Word などのアプリケーションからユニコードのみのテキストをコピーする操作はうまくいかないことがあります。この文字エンコーディング方式は、Microsoft で開発されたものです。 Shift-JIS では、リードバイト(16 進数で 80 から 9F、および E0 から FD の範囲を取ります)とトレールバイト(16 進数で 40 から 7F の範囲を取ります)を使用することによって、ASCII 文字とダブルバイトの日本語文字を区別しています。 バイトストリームのリードバイトを調べることによって、その後に続くバイトと一緒に解釈する(ダブルバイトの日本語文字として解釈する)べきかどうかが判断できるようになっています。リードバイトがない場合、その文字はシングルバイト文字ということになります(ASCII 文字か、またはシングルバイトのカタカナ文字(16 進数で A0 から DF の範囲)になります)。 Macintosh 上で日本語文字を使用できるようにする Mac OS 6 の機能拡張である漢字 Talk でも、Shift-JIS が採用されていました。 (Shift-JIS は厳密なバイトオーダールールに則っているので、Mac OS や Windows システムとの互換性を有しています。 k_jaJPユーザインターフェイスロケールの StringTable リソースを定義する際にエンコーディングコンバータを指定する必要がないのは、この互換性のおかげです。) Shift-JIS 文字セットに対応していないアプリケーションで Shift-JIS を処理した場合に起こる問題として、ダブルバイト文字が正しく解釈されないという問題があります。場合によっては、改行部分で分断されてしまうことさえあります。 また、トレールバイトが円記号(「¥」、16 進数で 5C)と同じになっている文字が原因となって、別の問題が発生することがあります。円記号は、C プログラムの文字列リテラルではエスケープシーケンスとして使用されているからです。 こうした問題から生まれたのが「文字化け」という言葉です。【原文読者のための解説:「文字化け」とは、読んで字のごとく、「文字が別の文字に変わってしまう」現象のことです。】 PMString に関する注意: 以前のバージョンの InDesign でサポートされていたオペレーティングシステムでは、ユーザユーザインターフェイスの表示にプラットフォーム固有のエンコーディングが必要とされました。 つまり、ユーザインターフェイスコードでは、文字列の表示のために WideString (UTF-16)ではなく PMString を使用していました。 現在のコードページ/スクリプトに存在していない文字を表示するときには、PMString で 16 進数表記に変換することができました。 しかし、現在のオペレーティングシステムではユーザインターフェイスにユニコードを表示できるので、テキストデータを扱うときは、プラットフォーム固有のエンコード文字列に変換しないようにしてください(WideString を使用してください)。また、PMString でプラットフォームの文字に変換しないようにしてください。変換を行うと、日本語や他の言語でデータが失われる場合があります。
ユニコード(UTF-8、UTF-16、UTF-32)
Unicode Consortium で開発されたもので、テキストモデルで使用されています。また、近年のパソコンのオペレーティングシステムの多くでも使用されています。
エンコーディング 説明
第 5 章 プラットフォーム固有の文字エンコーディング 日本語の文字エンコーディングの詳細情報 86
日本語の文字エンコーディングの詳細情報ユニコード標準には、エンドユーザが定義したグリフ(外字)を追加する機能が用意されています。この目的のために確保されているコード領域は、Private Use Area(PUA)と呼ばれています。多くの日本語フォントのベンダやデザイナーは、この領域を使用して、日本語フォントに独自の記号を定義しています。 日本語フォントでよく利用されるもう 1 つの機能に、別のグリフ(異体字)を含める機能があります。 例えば、小塚明朝 Pro および小塚ゴシック Pro の OpenType フォントには、日本語の「渡辺」という姓の「辺」の字に対する様々な異体字が収録されています。この同じ文字(グリフではなく文字です)に対する様々な異形の中には、Unicode Consortium によって同じ Unicode コードポイントが定義されているものもあれば、別の Unicode コードポイントが定義されているものもあります。
文字とグリフとをマッピングする次のようなシナリオがサポートされています。
➤ 通常のグリフ:1 つの標準の Unicode コードポイントに対して、対応する一意のグリフ ID が 1 つあります(この場合、グリフ ID から Unicode コードポイントへと逆にマッピングすることができます)。
➤ 異体字:1 つの標準の Unicode コードポイントに対して、対応するグリフ ID が複数あります。これらは、OpenType 機能タグなどの、追加の属性で区別されます。 (詳しくは、「OpenType フォント用の特別な機能」を参照してください。)
➤ 外字:標準エンコードの範囲外のグリフ。 外字のグリフの中には、ユニコード PUA(16 進数で E000 ~ F8FF)でエンコーディングされているものもありますし、エンコードされていないものもあります。エンコードされていないものは、OpenType 機能タグを使用する方法でのみアクセスすることができます。 InDesign CS3 では、このようなグリフを 2 種類の特別なコードポイント(1 つは日本語のグリフ用で、もう 1 つは日本語以外のグリフ用)を使用して保管しています。特別なグリフの文字 ID(CID)はテキスト属性を使用してエンコードしており、テキストコンポーザでその測定と描画を行えるようにしています。移植性の問題を避けるために、外字には PUA を使用しないことをお勧めします。
➤ ユニコード以外のグリフ:グリフに対しては、Unicode コードポイントは設定されていません。 Adobe Japan 1-4 グリフセットには少数のグリフが定義されていますが、Unicode コードポイントは設定されていません。
これらのシナリオは、SnpInsertGlyph.cpp スニペットコード(SnippetRunner プラグイン)で示されています。
標準的な日本語エンコーディングの使用InDesign C++ API で PMString およびユニコードを使用する際の一般的な注意事項
前述のとおり、ユーザインターフェイスロケールが k_jaJP に設定されている場合の InDesign CS3 のデフォルトのプラットフォーム文字エンコーディングは Shift-JIS です。 ウムラウト、アクセント、リマソン、逆向きの感嘆符などのヨーロッパ文字は、ASCII 文字セットでは、16 進数で 80 ~ FE のバイト範囲に定義されています。 (Macintosh と Windows で違いがあります。ほとんどの欧文言語の StringTable リソースでエンコーディングコンバータを指定する必要があるのはそのためです。) これらの文字は、Shift-JIS には含まれていません。Shift-JIS の 16 進数 80 ~ FE のバイト範囲には別の意味があるからです。 これらの文字は、PMString クラスでは「埋め込み形式」で表現できます。例えば、「<00A1>」(逆向きの疑問符)のようになります。 埋め込み形式にしないで PMString にこの文字を保管する場合は、PMString コンストラクタのエンコーディング(ユニコードスクリプト)を PMString::kEncodingASCII に設定するか、PMString::SetEncoding(PMString::kEncodingASCII) を呼び出します。さらに、これらのヨーロッパ文字は、適切なグリフが用意されているフォントで描画する必要があります。 OpenType フォントなどの、ほとんどのユニコードベースのフォントでは、問題なくヨーロッパ文字を扱えます。ただし、日本語版の Windows で使用されているデフォルトのユーザインターフェイスフォントには、適切なグリフがない場合があります。
第 5 章 プラットフォーム固有の文字エンコーディング 標準的な日本語エンコーディングの使用 87
異なる日本語文字エンコーディング間での文字の変換あるエンコーディングから別のエンコーディングに日本語文字を変換するには、次の API を使用できます。
➤ IEncodingUtils(kUtilsBoss):このインターフェイスには、様々な文字列ベースタイプを使用して JIS、Shift-JIS、ユニコード、区点コードの間で文字を変換するメソッドが数多く用意されています。 このインターフェイスには、あるバイトが Shift-JIS のリードバイトまたはトレールバイトである可能性があるかどうかをチェックするメソッドも含まれています。
➤ CTUnicodeTranslator:このユーティリティクラスには、ユニコードの文字および文字列をプラットフォームの文字エンコーディングに変換するメソッドが含まれています。 PMString::StringEncoding enum を使用して、script パラメータを指定できます。 詳しくは、SDK¥source¥public¥includes¥CTUnicodeTranslator.h を参照してください。
OpenType フォント用の特別な機能フォント関連のいくつかの機能は、日本語(および中国語、韓国語)フォントに固有のものです。 欧文の「Pro」フォントにも、特別な機能のあるものがあります。 OpenType では、これらの特別な機能は機能タグで識別されています(http://partners.adobe.com/asn/tech/type/opentype/feattags.jsp を参照)。機能タグにアクセスするには、次の InDesign C++ API を使用します。
➤ IPMFont:このインターフェイスには、OpenType の機能タグに関連するメソッドがいくつか用意されています。 HasOTFeature、PeekOTFeatures、および GetOTGlyphAccess を参照してください。 PeekOTFeatures は、OpenType フラグを 4 バイトのセグメントに保持する const char* を返します。 4 バイトごとに long* に型キャストし、逆参照して、 long integer としてタグの値を取得してください(「aalt」など)。 この方法を IGlyphUtils::GetOTFFeatureGlyphSet(次を参照)とともに使用すれば、そのフォントでサポートされているすべての OpenType 機能タグのグリフ ID を取得できます。
➤ GlyphAccessData:OpenType 機能など、特定のグリフに関する情報が保持されています。 この情報は IGlyphUtils::GetGlyphAccessInfo にグリフ ID を指定することで返されます。
➤ CTUnicodeTranslator::GlyphIDToTextChar:フォント(IPMFont)とグリフ ID を指定すると、それに対応する Unicode コードポイントが返されます。 このメソッドで返される Unicode コードポイントは、1 個または 0 個です。
➤ IGlyphUtils::GetOTFFeatureGlyphSet:フォントのグリフのうち、特定の OpenType 機能タグを持っているもののリストを取得します。
➤ OneOTFeature:一連の OpenType 機能タグが保持されています。
➤ OpenTypeFeatureList:OneOTFeature 用のベクトルコンテナ。
次のテキスト属性 Boss が OpenType 固有の機能タグに関係します。
➤ kTextAttrGlyphFormBoss:ターゲットテキストの OpenType グリフを表すテキスト属性 Boss(文字属性)。
➤ kTextAttrOTFeatureListBoss:ターゲットテキストの OpenType 機能のリストを表すテキスト属性 Boss(文字属性)。
➤ kTAOTFHVKanaBoss:ターゲットテキストに OpenType の縦組みまたは横組み用のかなが適用されているかどうかを表すテキスト属性。 このオプションは、文字パレットのフライアウトメニューの「OpenType 機能」を選択することによって、ユーザインターフェイスから使用可能です。
➤ kTAOTFProportionalBoss:ターゲットテキストに OpenType プロポーショナルメトリクスが適用されているかどうかを表すテキスト属性。 このオプションは、文字パレットのフライアウトメニューの「OpenType 機能」を選択することによって、ユーザインターフェイスから使用可能です。
第 5 章 プラットフォーム固有の文字エンコーディング コードサンプルおよび参考資料 88
➤ kTAOTFRomanItalicsBoss:ターゲットテキストに OpenType の欧文スタイルのイタリック(斜体とは異なります)が適用されているかどうかを表すテキスト属性。 このオプションは、文字パレットのフライアウトメニューの「OpenType 機能」を選択することによって、ユーザインターフェイスから使用可能です。
フォント内のグリフに関する情報の取得フォント(IPMFont)内の特定のグリフ(Text::GlyphID で識別)の詳細を調べるには、IGlyphUtils::GetGlyphAccessInfo を使用します。
Text::GlyphID glyph = ...; // 指定しますIPMFont* font = ...; // このコードに先立って取得しますGlyphAccessData glyphAccessData;if(Utils<IGlyphUtils>()->
GetGlyphAccessInfo(glyph, font, &glyphAccessData) == 0 &&glyphAccessData.fFeatureList.Length() && glyphAccessData.fTextChars.Length()){
K2Vector<Text::GlyphID> glyphIDs;font->GetGlyphIDs(glyphAccessData.fTextChars, glyphIDs);
// グリフ ID を反復処理します ...;}
特定のグリフ ID によるグリフの挿入テキストモデルに文字を挿入する際には、Unicode コードポイントを使用するのが理想的です。しかし、「日本語の文字エンコーディングの詳細情報」で説明したように、日本語フォントのグリフには Unicode コードポイントがないものもあるので、いつもそうできるわけではありません。 SnpInsertGlyph スニペットコード(SnippetRunner プラグイン)には、グリフに Unicode コードポイントがあるかどうかを調べる方法が示されています。 Unicode コードポイントがある場合は、コードポイントとオプションの OpenType 機能タグが使用されてグリフが挿入されます。 コードポイントがない場合は、プレースホルダ文字(kTextChar_SpecialGlyph または kTextChar_NonRomanSpecialGlyph)が挿入され、プレースホルダ文字に kTextAttrSpecialGlyphBoss テキスト属性が適用されて、選択したグリフ ID が指定されます。(グリフ ID はフォントごとに異なる可能性があるので、この操作はフォントの設定とともに行う必要があります。)この指定によって、日本語テキストコンポーザは特定のグリフ ID を描画します。
Unicode コードポイントを使用せずにグリフを挿入した場合、アプリケーションのエクスポートフィルタまたは XML エクスポートを使用してこの文字をエクスポートすると、プレースホルダ文字のみがエクスポートされることに注意してください。エクスポートおよびインポートのワークフローでは、追加のグリフ ID 属性がサポートされている必要があります。 追加のグリフ ID 属性がサポートされているインポート/エクスポートフィルタは、InDesign タグ付きテキストフィルタです。このフィルタでは、「cSpecialGlyph」タグ(長い表記)または「pSG」タグ(短い表記)を使用してその処理が行われます。
コードサンプルおよび参考資料SDK には、日本語の文字エンコーディングを扱っているサンプルがいくつか含まれています。
➤ SnpInsertGlyph.cpp(SnippetRunner プラグイン):このサンプルでは、フォントとグリフ ID を使用してグリフを挿入する方法が示されています。
➤ TextImportFilter および TextExportFilter:これらのサンプルプラグインは、それぞれインポートプロバイダおよびエクスポートプロバイダの実装です。 これらのプラグインを Roman 機能セットで実行した場合、拡張子 *.cpp を対象として、ASCII およびユニコードのテキストファイルのインポートおよびエクスポート機能が提供されます。日本語機能セットで実行した場合は、さらに Shift-JIS と JIS のオプションが追加されます。
第 5 章 プラットフォーム固有の文字エンコーディング SING の詳細情報 89
TextImportFilter と TextExportFilter を拡張し、EUC-KR や Big-5 など他の文字エンコーディングをサポートすることもできます。これらのサンプルプラグインを拡張する方法について詳しくは、各サンプルプラグインのドキュメントで「Hints for Extending TextImportFilter for other character encoding formats」および「Hints for Extending TextExportFilter for other character encoding formats」を参照してください(API リファレンスマニュアルに含まれます)。
『CJKV 日中韓越情報処理』(Ken Lunde 著、http://www.oreilly.co.jp/books/4873111080/)は、日本語だけでなく、中国語、韓国語、ベトナム語の文字セットに関する膨大な量の詳細情報が説明された、素晴らしい参考書です。
SING の詳細情報InDesign CS3-J は、ユーザグループが外字文字を管理できる、移植性の高い新しい方法を導入しました。 このソリューションの核心は、Smart Independent Glyphlet または SING と呼ばれるオブジェクトです。 最も基本的な単位であるグリフレットは、わずか 1 つのグリフを持つフォント(基本フォントから派生した)と考えることができます。 ユーザは Adobe Illustrator® CS3(および SING 外字作成ツール)を使用して SING グリフレットを作成し、SING 外字管理ツールで管理できます。 その後、作成した SING グリフレットをシステムにインストールすると、InDesign CS3-J の字形パネルを使用してテキストフレームに直接配置できるようになります。これらのグリフレットはパブリシングワークフロー全体で利用できます(設計から出力まで)。 すべての機能セットで SING を完全にサポートするための API が InDesign CS3 に組み込まれていますが、公開 API として提供されているものはありません。そのため、これらの API は InDesign CS3 SDK に含まれません。
90
6 インプットメソッドエディタ
テキストフレームやユーザインターフェイスウィジェットのフィールドに日本語の文字を入力できなければ、このマニュアルでこれまで説明してきた日本語機能もまったく意味がありません。 前述のとおり、日本語で日常的に使用される文字の種類は 3,000 を超えています(異体字やその他の記号を含めるとさらに多くなります)。そのため、QWERTY キーボードを使用して文字を入力するには、特別なメカニズムが必要になります。 このメカニズムはキーイベントのフロントエンド処理(FEP)と呼ばれており、FEP の処理を行うコンポーネントはインプットメソッドエディタ(IME)と呼ばれています。 FEP で文字セットを入力するための仕組みがアプリケーションで提供されていない場合、インターナショナル版のオペレーティングシステムでは、デフォルトで IME のフローティングウィンドウが表示されます。次のスクリーンショットのように、このウィンドウにはユーザが押したキーストロークが表示され、対話的に目的の文字に変換することができます。
テキストストーリーに入力するときにこのフローティングウィンドウが現れたり消えたりするのをわずらわしく思うユーザもいます。そのため、InDesign CS3-J には、テキストフレームまたはユーザインターフェイスウィジェットに「インライン」でテキストを入力できるようにするユーザインターフェイスオプションがあります。 次のスクリーンショットの赤い四角で囲まれたチェックボックスは、「ラテン文字以外にインライン入力を適用」と書かれています。 このロジックは、値を設定する環境設定インターフェイスとは逆になっています。 このインライン IME 機能は日本語機能セットでのみ使用可能ですが、この環境設定インターフェイスはすべてのロケールおよび機能セットに存在しています。
注意 : InCopy CS3-J には、この環境設定はありません。
第 6 章 インプットメソッドエディタ 91
ユーザは次の手順で日本語を入力します。
1. 日本語が入力できるようにオペレーティングシステムの IME を有効にします。 後述の図では、平仮名/ローマ字入力モードの Windows XP の IME を使用しています。
2. テキストフレーム内にテキスト挿入点を配置して、日本語の文字の発音をローマ字(英語のアルファベットを使用して日本語の発音を表記する方法)で入力します。 後述の図では、ユーザがテキストフレームに「shinnyokohama」と入力しています。
3. 欧文のキーストロークはその場で平仮名に変換されていきます。IME の候補にはグレーの下線が引かれて、変換が必要な文字であることが視覚的に示されます。
4. スペースキーを押すと、「しんよこはま」の変換候補が表示されます。 3 つの変換候補が、すぐ下のポップアップ選択リストに示されています。 次の図を参照してください。
第 6 章 インプットメソッドエディタ クラスダイアグラム 92
5. 最初の候補が目的のものなので、Enter キーを押します。「shinnyokohama」に対応する平仮名が、漢字の固有名詞に変換されます。【原文読者のための解説:「新横浜」は駅の名前です】 テキストカーソルは漢字の右側に進みます。グレーの下線が消えて、以降のテキストが入力できるようになります。 次の図を参照してください。 手順 2 でタイプミスをした場合は、Esc キーを押して、変換する文字を消すことができます。
この節の残りの部分では、IME が他のアプリケーションサブシステム(テキストなど)とやり取りする方法を説明します。
クラスダイアグラムIME モデル
➤ IME の実装は kCJKIMEBoss によって提供されています。 IEventHandler および IIMEEventHandler の実装によって、オペレーティングシステムとキーイベントのやり取りが行われ、IME とのやり取りはその後アプリケーションで行われます。 IME の処理は、IME コンテキストを有効にすることにより開始します(以下を参照)。 オペレーティングシステムから特定のキーイベントを受け取ると、IInputEditor にデリゲートすることによって、IME イベントハンドラがテキストの挿入と kTAIMECompModeBoss テキスト属性を処理します。
➤ グローバル IME 環境設定は、kWorkspaceBoss の IIMEPrefs インターフェイスで表されます。 これには、インライン IME を使用するかフローティングウィンドウを使用するかに関するユーザの環境設定が保持されています。
第 6 章 インプットメソッドエディタ ナビゲーションダイアグラム 93
➤ IME ベースのテキストエディタコンポーネントは、kTextEditorBoss で表されます。 この Boss クラスの IObserver(非標準 IID)実装により、フォーカス(テキストフォーカスとページアイテムフォーカス)に基づいて IME コンテキストが有効にされます。
➤ IME コンポーネントによって、キーストロークを処理するために IME サブシステムが必要かどうかが監視されます。これは、kDocWindowBoss の IIMEContext インターフェイスによって行われます。この処理には、キーストロークイベントハンドラの有効化と無効化だけでなく、IME のアクティブ化と非アクティブ化も含まれています。
IME の描画
これらの Boss クラスは、変換が必要であることや変換の途中であることを視覚的に表す機能にも関係しています。 これらは主に、テキスト編集アーキテクチャで使用されているので、一般的な使用にはあまり適していません。参考までに、その情報を次に示します。
➤ kTAIMECompModeBoss は、編集中に IME で使用されるテキスト属性(文字属性)を表します。このテキスト属性を有効にすると、テキストアドーンメントが描画されます。
➤ kTextAdornmentIMEHintsBoss は、グレーの下線インジケータ(IME インライン編集のアドーンメント)を描画するための実装です。
➤ kTextAdornmentIMEHintsDataBoss は、そのアドーンメントからテキスト属性データにアクセスするのに使用します。
➤ kWritingModeWidgetBoss は、ストーリーエディタウィンドウのテキストアドーンメントコードを表します。
ナビゲーションダイアグラムほとんどの IME コンポーネントはプライベートインターフェイスに依存しています。 サードパーティ開発者が公開 InDesign C++ API を使用して実行できる唯一の使用方法は、IME のエントリセッション中にグレーの下線のテキストアドーンメントが描画されるようにテキスト属性を有効にすることです。
第 6 章 インプットメソッドエディタ コマンドと通知 94
コマンドと通知kSetIMEPrefsCmdBoss
IME 機能の使用IME 環境設定の取得と設定
IME 環境設定(ラテン文字以外にインライン入力を適用)の取得は、WorkspaceBoss の IIMEPrefs (IID_IIMEPREFERENCES) インターフェイスをクエリして行います。
FakeInputWindow のメソッドはこのインターフェイスでは使用されていません。 IME 環境設定を設定するには、「kSetIMEPrefsCmdBoss」を使用します。 このロジックは、テキスト環境設定ダイアログボックス(編集/環境設定/テキスト)のチェックボックスのロジックとは逆になっていることに注意してください。 IIMEPrefs の場合と同様に、IIMEPrefsCmdData::Set メソッドでの useFakeInputWindow の使用は無視されます。
参考資料およびサンプルIME 環境設定の使用方法や IME コンポーネントをカスタマイズする方法のサンプルは、SDK では提供されていません。
プラットフォーム固有の API の参考資料を次に示します。
➤ インプットメソッドエディタの開発に関する Microsoft Developer Network(MSDN)のページ:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/appendix/hh/appendix/imeimes_0h2s.asp または http://msdn.microsoft.com/ で「IME」を検索します。
➤ ATSUI に関する Apple® Developer Association(ADA)のページ:http://developer.apple.com/intl/atsui.html を参照してください。
目的: IME スタイルの環境設定(インラインまたはフローティングウィンドウ)を設定します。
呼び出されるもの:
なし。
インターフェイス:
IIMEPrefsCmdData:(必須)フローティングウィンドウを使用するかどうか、および「別の」入力ウィンドウ(サポートされていません)を使用するかどうかを指定します。
ItemList 入力: なし。
オブザーバへの通知:
theChange = kSetIMEPrefsCmdBoss、protocol = IID_IIMEPREFERENCES。グローバルワークスペース(kWorkspaceBoss)のサブジェクトが通知に使用されます。
ItemList 出力: なし。
コマンドの使用例:
なし。