Adobe InCopy CS6 Референтни водич
PDF
Dokument
Reklama
Reklama
ADOBE INCOPY CS6
スクリプティングガイド:
JAVASCRIPT
Adobe® InCopy® CS6 スクリプティングガイド:JavaScript
ドキュメントの更新ステータス
(ドキュメント全体。各章の更新ステータスについては、それぞれの章を参照してください)
CS6
更新
ドキュメント全体で CS5 から CS6 への変更およびバージョン 7.0 から 8.0 への変更。
目次
1
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
このマニュアルに掲載されているスクリプトの使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
スクリプトの構造について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
詳細情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
InCopy について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
InCopy ファイルと InDesign ファイルの関係 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
ストーリー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
ページの形状 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
メタデータ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
ドキュメントモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
ユーザーインターフェイスの違い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
設計とアーキテクチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2
はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
スクリプトのインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
スクリプトの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
スクリプトパネルの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
JavaScript 言語の詳細 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
その他の JavaScript 開発の選択肢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
このマニュアルに掲載されているスクリプトの使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
最初の InCopy スクリプトの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
スクリプトの動作の説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
スクリプティング用語と InCopy オブジェクトモデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
スクリプティングの用語 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
InDesign および InCopy オブジェクトモデルの理解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
測定値と位置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15
18
21
3
スクリプティング機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
スクリプトの環境設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
現在のスクリプトの取得 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
スクリプトのバージョン対応 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ターゲットの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
コンパイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
インタープリターによる実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
26
26
26
doScript メソッドの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
doScript へのパラメーターの渡し方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
doScript からの戻り値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
起動時におけるスクリプトの自動実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
セッションとメインでのスクリプトの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3
目次
4
4
テキストと組版 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
テキストの入力と読み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ストーリーとテキストフレーム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ストーリーへのテキストの追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テキストの置換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
特殊文字の挿入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
29
29
30
30
テキストの配置とテキスト読み込み環境設定の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
テキストの書き出しとテキスト書き出し環境設定の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
テキストオブジェクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
選択 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テキストの移動とコピー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テキストオブジェクトと反復処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
38
39
40
テキストのフォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テキストデフォルトの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
フォント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
フォントの適用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テキストプロパティの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テキストカラーの変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
スタイルの作成と適用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
スタイルの削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
段落スタイルと文字スタイルの読み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
41
44
44
44
45
45
47
47
テキストの検索と変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
検索/変更の環境設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
テキストの検索と変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
フォーマットの検索と変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
grep の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
字形検索の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
48
48
49
50
52
表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
自動修正 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
脚注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5
ユーザーインターフェイス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
ダイアログボックスの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
最初の InCopy ダイアログボックスの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
「Hello World」へのユーザーインターフェイスの追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
さらに複雑なユーザーインターフェイスの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
ScriptUI の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
ScriptUI を使用したプログレスバーの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
ScriptUI を使用したボタンバーパネルの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6
メニュー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
メニューモデルについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
ローカライゼーションとメニュー名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
スクリプトからのメニューアクションの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
メニューやメニュー項目の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
メニューとイベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
スクリプトメニューアクションの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
目次
5
7
イベント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
イベントスクリプトモデルについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
イベントプロパティとイベントの伝達について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
eventListener の操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
「afterNew」eventListener の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8
注釈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
注釈の入力と読み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
ストーリーへの注釈の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
注釈のテキストの置換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
注釈からテキストへの変換およびテキストから注釈への変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
注釈からテキストへの変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
テキストから注釈への変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
注釈の展開と折りたたみ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
注釈の折りたたみ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
注釈の展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
注釈の削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
注釈間の移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ストーリー内の最初の注釈への移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ストーリー内の次の注釈への移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ストーリー内の前の注釈への移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ストーリー内の最後の注釈への移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
81
81
81
81
81
変更のトラック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
変更のトラック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
トラックされた変更への移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
トラックされた変更の適用と取り消し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
トラックされた変更に関する情報 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
82
83
83
変更のトラックの環境設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
10
アサイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
アサインオブジェクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
アサインファイルを開く . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
アサインのプロパティに対する繰り返し処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
アサインパッケージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
85
85
85
アサインのストーリー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
アサインされたストーリーオブジェクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
アサインされたストーリーのプロパティに対する繰り返し処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
11
XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
InCopy での XML スクリプティングの推奨事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
XML 要素のスクリプティング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 環境設定の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 読み込み環境設定の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML の読み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML タグの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML タグのロード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML タグの保存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
88
88
89
89
89
89
目次
6
XML 要素の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 要素の移動 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 要素の削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 要素の複製 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 構造からのアイテムの削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML コメントの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 処理命令の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 属性の操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML ストーリーの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML の書き出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
90
90
90
90
91
91
91
92
92
ストーリーへの XML 要素の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 要素とテキストとの関連付け . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 要素へのスタイルの適用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XML 表の操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
93
94
96
1
概要
章の更新ステータス
CS6
変更なし
このマニュアルでは、次の作業を行う方法について説明します。
Adobe® InCopy® のスクリプティング環境の操作
高度なスクリプティング機能の使用
InCopy ドキュメントのテキストや書式の操作(テキストの検索と変更など)
ダイアログボックスなどのユーザーインターフェイスアイテムの作成
メニューのカスタマイズや追加と、メニューアクションの作成
ユーザーインターフェイスのイベントに対する応答
XML の操作(XML 要素の作成、XML の読み込み、レイアウトへの XML 要素の追加など)
このマニュアルに掲載されているスクリプトの使用方法
このマニュアルに掲載されているスクリプトのほとんどは、完全なスクリプトではありません。このマニュ
アルの説明内容に関連するスクリプトから特定部分のみを抜粋した、断片的なスクリプトです。このマニュ
アルに掲載されているスクリプトの行をコピーして、スクリプトエディタに貼り付けることができますが、
スクリプトを実行するには、さらに編集が必要になります。また、このマニュアルからコピーしたスクリプ
トには、
(マニュアルのレイアウトにより)改行などの文字が含まれている可能性があることに注意してくだ
さい。このような文字が含まれていると、スクリプトを正常に実行できません。
このマニュアルに掲載されているすべてのスクリプトの Zip アーカイブは、InCopy のスクリプティングホー
ムページ(http://www.adobe.com/jp/products/incopy/scripting/index.html)で入手できます。アーカイブをダ
ウンロードして展開したら、該当するスクリプト言語に対応するフォルダーを InCopy フォルダー内の Scripts
フォルダーの下にある Scripts Panel フォルダーに移動します。これで、InCopy のスクリプトパネルからスクリ
プトを実行できます。
スクリプトの構造について
サンプルスクリプトはすべて、main、mySetup、mySnippet、myTeardown(関数)などの共通のテンプレー
トを使用して記述されています。この記述方式は、自動化テストとパブリケーションを簡略化するためのも
のです。通常はスクリプトをこのように構築する必要はありません。スクリプト作成者の関心を引くと思わ
れるスクリプトの断片は、mySnippet 関数内に記述されています。
詳細情報
InCopy スクリプティングに関するユーザーフォーラム(http://www.adobeforums.com)でも、InCopy スクリ
プティングに関する情報が入手できます。このフォーラムでは、質問をしたり、質問に答えたり、新たに作
成したスクリプトを別のユーザーと共有したりできます。このフォーラムでは、多数のサンプルスクリプト
が提供されています。
7
第 1 章 概要
InCopy について
8
InCopy について
InCopy は、Adobe InDesign® との統合利用を目的に開発された共同作業用のテキスト編集アプリケーションで
す。InCopy では、変更をトラックしたり、編集上の注釈を追加したり、原稿用のスペースに合わせて原稿を
はめ込んだりすることができます。InCopy と InDesign は同じテキスト組版エンジンを使用しているので、レ
イアウトに原稿をはめ込んだときの組版結果はまったく同じになります。
InCopy は、編集環境用のアプリケーションです。InCopy を使用すると、編集ワークフローの関係者は、雑誌
や新聞、企業出版物を共同で制作し、テキストの編集とレイアウトの編集を並行して進めることができます。
対象となるユーザーは、編集者、ライター、校正者、原稿の編集者、原稿の加工業者です。
InCopy は、多くのパネルやパレットを InDesign と共有していますが、独自のユーザーインターフェイス項目
も搭載しています。
InCopy ファイルと InDesign ファイルの関係
InCopy ファイルと InDesign ファイルの関係は重要です。これは、出版ワークフローにおける作業の分担は、
1 つの素材の大部分を両方のアプリケーションで開いて変更する場合に発生するためです。
InCopy からの一般的な書き出し方法は、2 種類あります。
(IDML ベースの)ICML ファイルを書き出すことができます。
(INX ベースの)INCX ファイルを書き出すことができます。
InDesign からの一般的な書き出し方法で、InCopy との連携を伴うものは、2 種類あります。
InCopy ファイルとして InDesign から書き出されたストーリーは、XML ファイルまたは XML ストリームで
す(この機能は、InDesign に読み込まれる InCopyExport と InCopyWorkflow のプラグインによって提供さ
れます)。この方法で書き出した InCopy ファイルには、ファイルが非常に小さい、ネットワーク上で高速
である、ページの形状が一切含まれていない、XML ファイルまたは XML ストリーム内のデータは
InDesign や InCopy だけでなく検索エンジンやデータベースツールなどでも使用できるといった実用的な
特徴があります。
記事内の各グループ(見出し、署名欄、原稿、グラフィック、キャプションなど)を書き出すこともで
きます。InDesign および InCopy では、各グループの作成をアサインファイルでサポートしています。ア
サインファイルは、その他のファイルをトラックする補助ファイルを追加することで、ファイル管理を
行います。実際には、アサインとは、依頼作業(例えば、原稿の編集、レイアウト、原稿の作成など)
のために 1 人の人間に割り当てられる一連のファイルです。アサインに含まれるすべてのストーリーは、
InCopy ファイルとして書き出されます。形状に関する情報やファイルの関係性は、アサインファイルに
保持されます。InDesign では、アサインに書き出すことによって、特定のストーリー一式を書き出すこと
ができます。InCopy で、アサインに含まれているすべてのストーリーを同時に(1 つの単位として)開き
ます。詳しくは、第 10 章「アサイン」を参照してください。
ストーリー
1 つ 1 つの InCopy ファイルは、それぞれ 1 つのストーリーを表します。複数のストーリーが含まれている
InDesign ドキュメントは、書き出し時に、同じ数の InCopy ドキュメントにモジュール化することができま
す。このようにして書き出された InDesign ストーリーにはリンクが含まれます。リンクは、InDesign のリン
クパネル、または InCopy のアサインパレットのアサインファイルで確認できます。
InCopy では、InDesign ドキュメントへのリンクが存在していて関連付けが行われていても、リンクは維持さ
れません。InDesign では、InCopy ファイルとのすべてのリンクは相互リンクとして維持されます。
ストーリーは、XML で構造化することができます。つまり、XML データの中に XML データを含めることがで
きます。この特徴を利用すると、データ構造の設計時に、InCopy 特有のデータ(スタイルなど)が含まれて
いる外部の構造内に、ストーリーの未加工テキストを含めることができます。
第 1 章 概要
InCopy ファイルと InDesign ファイルの関係
9
InCopy 内では、ICML または INCX 形式で内容を保存したり、
(ストーリー内に構造がある場合に)論理構造を
XML で書き出すことができます。
ICML または INCX ファイルには、InCopy データとマークアップテキストの両方を含めることができます。
ファイルを XML データで書き出した場合は、InCopy 特有のデータが取り除かれ、スタイルの設定に関する情
報以外のマークアップ記述が残ります。
ページの形状
InCopy ファイルには、ページの形状は含まれません。形状が必要な場合は、InDesign ドキュメントから取得
する必要があります。InCopy では、必要な場合に InDesign ドキュメントを開いて、デザイン情報や書き出さ
れたストーリーへのリンクを抽出することができます。InCopy 内でページの形状が必要になる場合、アサイ
ンファイルにページの形状を含めて提供することができます。
メタデータ
Adobe Extensible Metadata Platform(XMP)は、メタデータを作成、変換、管理するための実用的な方法を提
供しています。InCopy ファイルでは、XMP がサポートされています。
XMP データを表示するために、InDesign ではファイル/ファイル情報のコマンドが用意されているように、
InCopy ではファイル/コンテンツファイル情報のコマンドが用意されています。システムインテグレーター
は、書き出し時に XMP データをそのまま残しておくことも、取り除くこともできます。
サードパーティーソフトウェア開発者によってストーリーに追加されたメタデータは、InDesign ドキュメン
トに組み込むときにそのまま保持されます。追加されたメタデータは、InDesign 内で表示できるだけでなく
(リンクパネルのメニューにあるファイル情報ダイアログボックス)、InCopy 内でも表示できます。さらに、
サードパーティーソフトウェア開発者は、メタデータをカスタムユーザーインターフェイスで表示する機能
を InDesign に追加することもできます。
サービスプロバイダーがメタデータの内容を InCopy ファイルに追加するための拡張のポイントがあります。
詳しくは、第 11 章「XML」を参照してください。
ドキュメントモデル
InDesign ドキュメントは、InDesign のすべてのコンテンツの基礎となります。InCopy で InDesign ドキュメン
トを使用することもできますが、デフォルトのドキュメントタイプにはなっていません。
InDesign と InCopy のいずれも、基本のドキュメントは常にデータベースです。ただし、InCopy では、このド
キュメントが不完全なドキュメントになることがあります。InDesign では、通常、主なドキュメントは開い
ている InDesign ファイルですが、開いている INX または IDML ファイルになることもあります。通常、INX ま
たは IDML ファイルは、保存されていない InDesign ドキュメントのように見えます。
InCopy では、その他の形式もあります。基本の InDesign ファイル以外にも、新規ドキュメントとそこに読み
込まれている InCopy ストーリー(またはプレーンテキストや RTF テキスト)があります。また、IDML や INX
ベースのアサインファイルもあります。これらのアサインファイルには、XML ファイルに保存されている
InDesign ファイルの一部が含まれています。InDesign および InCopy のドキュメントモデルは、必要な基準モ
デルのプラグインセットに対応しており、時間とともに変更に合わせたバージョンアップが重ねられていま
す。すべての IDML および INX スクリプティングが InDesign と InCopy の両方で動作する点は重要です。これ
により、ドキュメントをアプリケーション間で移動しても、ほとんど同様に表示することが可能になります。
ユーザーインターフェイスの違い
InDesign と InCopy は多くのパネルを共有していますが、InCopy は小型のセットで、画面の上、左、下の境界
に補助的なツールバーが表示されます。また、InCopy の多くのパネルは、このツールバーにドッキングさせ
ることができます。ドッキングさせると、パネルは小型化されますが、常に表示されるようになります。
第 1 章 概要
設計とアーキテクチャ
10
また、InCopy には複数のビューによるカスタムウィンドウレイアウトが用意されており、メインウィンドウ
にゲラビュー、ストーリービュー、レイアウトビューの 3 つのタブがあります。レイアウトビューは InDesign
ウィンドウのビューです。ゲラビューとストーリービューは、単なるストーリーエディターのビューです。
ゲラビューでは正確な行末が適用され、ストーリービューでは適用されません。
設計とアーキテクチャ
ストーリーとファイルの関係
ICML は、InCopy ストーリーを IDML ベースで表したものです。これは、InDesign や InCopy の今後の方向性を
示しており、特に InDesign 以外でファイルの編集が必要な場合に適した選択です。
ICML 形式
各 InCopy ファイルやストリームは、XML 形式で記述されています。この利点は、InCopy ファイルを簡単に解
析できることと、あらゆるテキストエディターで開けることです。
INCX 形式
INCX は、InCopy ストーリーを INX ベースで表したものです。この形式は、ICML ほど読みやすくありません
が、INCX ベースのワークフローを引き続きサポートする場合に使用できます。
ドキュメントの操作
InCopy では、ドキュメントの操作(ファイルの操作)のデフォルト実装が提供されています(例えば、新
規、保存、別名で保存、複製を保存、開く、閉じる、復帰、デザインを更新など)。これらすべての InCopy
ファイルの操作は、1 つのプラグイン(InCopyFileActions)にソースコード形式で含まれています。ソフト
ウェア開発者やシステムインテグレーターが、この部分を独自の実装内容に置き換え、それぞれのワークフ
ローシステムに合わせた相互処理にカスタマイズすることを想定しています。
XMP メタデータの使用
ユーザーは、ファイル/コンテンツファイル情報を選択して、メタデータを入力および編集できます。この
メタデータは、InCopy ファイルに保存されます。ソフトウェア開発者やシステムインテグレーターは、XMP
SDK を使用して、独自のメタデータを作成し保存できます。
はじめに
2
章の更新ステータス
CS6
更新
CS5 に関する言及を削除または変更。
Adobe® InCopy® には、強力なスクリプティング機能が搭載されています。他のどの機能(InCopy のユーザー
インターフェイスに搭載されているツール、パネル、ダイアログボックスなど)と比べても、スクリプティ
ングほど時間と手間とコストを節約してくれるものはありません。
このマニュアルでは、すべての InCopy ユーザーを対象に説明を行います。まず、スクリプトを初めて作成す
る方のために、スクリプトの基本事項について説明します。次に、他のアプリケーション向けにスクリプト
を作成した経験がある方のために、InCopy スクリプティングの特徴について説明します。さらに、スクリプ
トを InCopy にインストールして実行する方法や、InCopy スクリプティングで実現できることと実現できない
こと、スクリプトの作成に必要なソフトウェアについても説明します。
InCopy のユーザーインターフェイスで行える操作のほとんどは、スクリプトを使用して実行することができ
ます。テキストの入力やフォーマット、テキストの検索や変更、注釈の追加、ドキュメントページの印刷や
書き出しなど、ドキュメントやその内容に変更を加えるアクションは、すべてスクリプトで実行できます。ま
た、ユーザーインターフェイスでは行えない高度な処理も実行できます。
スクリプトを使用すれば、メニューの作成、メニュー項目の追加、ダイアログボックスやパネルの作成と表
示、ユーザーインターフェイスで行われた選択への応答などが行えます。また、テキストファイルの読み取
りや書き込み、XML データの解析、他のアプリケーションとの通信なども行えます。スクリプトは、カーソ
ル位置でのタブストップの設定のような単純な処理から、非常に複雑な処理まで、様々な用途に活用できま
す。最初は、1 つの処理を実行する簡単なスクリプトから始めましょう。慣れてくると、パブリッシングワー
クフロー全体を自動化するスクリプトを作成できるようになります。
ワークスペースの設定やキーボードショートカットの定義など、スクリプトで実行できない操作がいくつか
ありますが、その多くはユーザーインターフェイスに関係する操作です。また、InCopy ドキュメントに新し
い種類のオブジェクトを追加したり、InCopy の基本機能を新たに追加する(例えば、新しいテキストコンポ
ジションエンジンを追加する)こともできません。このような拡張を行いたい場合は、InCopy ソフトウェア
開発キット(SDK)を使用して、C++ でコンパイル済みのプラグインを作成する必要があります。
InCopy は、主に Adobe InDesign® ドキュメントの製作工程の一部として使用されます。したがって、このマ
ニュアルでは、InCopy だけでなく InDesign についても触れています。また、InDesign と InCopy のスクリプ
ティングは非常に似ています。InDesign スクリプティングについて詳しくは、『Adobe InDesign スクリプティ
ングチュートリアル』および『Adobe InDesign スクリプティングガイド』を参照してください。
スクリプトのインストール
InCopy にスクリプトをインストールするには、InCopy アプリケーションフォルダー内の Scripts フォルダーに
ある Scripts Panel フォルダーに、スクリプトファイルを保存します。
または、ユーザー環境設定フォルダーの Scripts Panel フォルダーにスクリプトを保存します。ユーザー環境設
定フォルダーは、次の場所にあります。< ユーザー名 > はユーザー名を表し、~(チルド)はシステムボリュー
ムを表します。
Mac OS®:
Windows® XP:
11
第 2 章 はじめに
スクリプトの実行
12
このフォルダーに保存したスクリプトは、InCopy のスクリプトパネルに表示されます(このパネルを表示す
るには、ウィンドウ/スクリプトを選択します)。
Scripts Panel フォルダーには、スクリプトやスクリプトが保存されているフォルダーのエイリアスやショート
カットを保存することもできます。これらのエイリアスやショートカットも、スクリプトパネルに表示され
ます。
スクリプトの実行
スクリプトを実行するには、スクリプトパネルを表示し(ウィンドウ/スクリプトを選択し)、スクリプトパ
ネルに表示されているスクリプト名をダブルクリックします。多くの場合、何らかのユーザーインターフェ
イス(ダイアログボックスやパネルなど)が表示され、必要に応じて警告が表示されます。
スクリプトパネルの使用
スクリプトパネルでは、コンパイル済みまたは未コンパイルの AppleScript(拡張子が .spt、.as、
.applescript のファイル)
、JavaScript(拡張子が .js または .jsx のファイル)、VBScript(拡張子が .vbs の
ファイル)、実行可能ファイルを実行できます。
スクリプトパネルに表示されているスクリプトを編集するには、Option キー(Mac OS)または Alt キー
(Windows)を押しながらスクリプト名をダブルクリックします。スクリプトのファイルタイプに対応するエ
ディターで、そのスクリプトファイルが開かれます。
スクリプトパネルに表示されているスクリプトの保存フォルダーを開くには、Command キー(Mac OS)ま
たは Ctrl キーと Shift キー(Windows)を押しながらスクリプト名をダブルクリックします。または、スクリ
プトパネルのメニューから「Finder で表示」
(Mac OS)または「エクスプローラーで表示」(Windows)を選
択します。そのスクリプトが保存されているフォルダーが、Finder(Mac OS)またはエクスプローラー
(Windows)で表示されます。
スクリプトは一連のアクションとして実行されます。つまり、編集メニューから「取り消し」を選択して、
スクリプトで行った各変更を取り消すことができます。スクリプトのトラブルシューティングを行う場合は、
これによって問題のアクションが見つけやすくなります。
スクリプトにキーボードショートカットを追加するには、編集/キーボードショートカットを選択し、セッ
トメニューから編集可能なショートカットセットを選択し、機能エリアメニューから「スクリプト」を選択
します。スクリプトパネル内のスクリプトが一覧表示されます。スクリプトを選択し、InCopy の通常の機能
と同じようにキーボードショートカットを割り当てます。
JavaScript 言語の詳細
InCopy では、ExtendScript と呼ばれるアドビ システムズ社独自の JavaScript 実装に基づいて JavaScript がサ
ポートされています。ExtendScript インタープリターは、JavaScript の現行の標準である ECMA 262 に準拠して
おり、JavaScript 1.5 の言語機能がすべてサポートされています。Adobe Illustrator® や Adobe Photoshop® などの
Adobe Creative Suite® 製品でも、ExtendScript JavaScript インタープリターが使用されています。
Late Night Software 社の OSA JavaScript(Mac OS)や、Microsoft® JScript(Windows)などの他のバージョンの
JavaScript でもスクリプトを作成できますが、これらの言語と ExtendScript では使用されている用語が異なり
ます。ExtendScript のサンプルは、他のバージョンの JavaScript では動作しません。
注意 : ExtendScript のツールや機能が複数のアドビ製品に搭載されたのに伴って、ExtendScript のマニュアル
はすべて統合されました。ExtendScript Toolkit(オブジェクトモデルを参照できる JavaScript 開発環境)や
ScriptUI ユーザーインターフェイスモジュールなどの JavaScript ユーティリティについて詳しくは、『Creative
Suite 5 JavaScript Tools Guide』を参照してください。
第 2 章 はじめに
このマニュアルに掲載されているスクリプトの使用方法
13
その他の JavaScript 開発の選択肢
ExtendScript Toolkit を使用して明示的に InCopy 用の JavaScript のスクリプトを作成することもできますが、
Creative Suite Extension Builder(CS Extension Builder)を使用すると、ActionScript で CS エクステンションを開
発できます。CS エクステンションは Flash ベース(SWF)であるため、潜在的に Creative Suite の様々なアプリ
ケーションで動作する可能性があります。
CS の各アプリケーションは拡張性に優れたインフラストラクチャで構築されており、開発者がアプリケー
ションの機能を拡張できるようになっています。インフラストラクチャは、Flash および Flex テクノロジーが
基盤になっていて、CS の各エクステンションはコンパイルした Flash(SWF)ファイルで配布します。CS に
用意されている Extension Manager を使用すると、CS エクステンションのインストールを実行できます。
Creative Suite 製品に付属している CS エクステンションの一例として、Adobe Kuler があります。Kuler では、
様々な Creative Suite アプリケーションに対して一貫性のあるユーザーインターフェイスが提供されます。た
だし、ロジックは、各ホストアプリケーションに適応したものがそれぞれ用意されています。
エクステンションのユーザーインターフェイスは、Flex フレームワークを使用して ActionScript で作成されて
います。通常、CS エクステンションには、アプリケーションのエクステンションメニューの専用のメニュー
項目からアクセスします。CS Extension Builder では、Flash Builder のデザインビューを使用して、インタラク
ティブにユーザーインターフェイスを設計できます。また、CS Extension Builder では、CS エクステンション
用のすべてのアプリケーションロジックを ActionScript で開発できます。使い慣れた Flash Builder 環境で、エ
クステンションを開発してデバッグを行うことができます。
アプリケーションロジックの開発には、Creative Suite ActionScript Wrapper Library(CSAWLib)の使用をお勧め
します。CSAWLib は、各ホストアプリケーションのスクリプティング DOM を ActionScript ライブラリとして
公開します。CSAWLib は、CS Extension Builder 環境に緊密に統合されています。CS Extension Builder 環境には、
エクステンションの基本構造を作成したり、Adobe InDesign や Photoshop、Illustrator などの Creative Suite ア
プリケーションに対してコードを実行してデバッグを行ったりする際に役立つウィザードが用意されていま
す。
スクリプティング DOM のメソッド、プロパティ、ビヘイビアーは、ホストアプリケーションの『JavaScript
Scripting Reference』で説明しています。CS Extension Builder および CSAWLib の使用方法について詳しくは、
Creative Suite SDK のマニュアルを参照してください。CS Extension Builder をインストールしている場合は、
Flash Builder または Eclipse のヘルプシステム内からマニュアルにアクセスできます。
このマニュアルに掲載されているスクリプトの使用方法
このマニュアルに記載されているスクリプトを使用するには、チュートリアルスクリプトファイルを開くか
(ファイル名は各スクリプトの前に記載されています)、この章に記載されているコードをコピーします。
スクリプトファイルは、InCopyCS6ScriptingGuideScripts.zip という Zip アーカイブに格納されています。
アーカイブを圧縮解除したら、目的のスクリプト言語(AppleScript、JavaScript または VBScript)で作成され
たスクリプトが保存されているフォルダーを、Scripts Panel フォルダーに移動します。これらのスクリプト
ファイルを利用するほうが、スクリプトを直接入力したり、このマニュアルからスクリプトをコピーして貼
り付けるよりも簡単です。
スクリプトアーカイブを入手できない場合、この章に掲載されているスクリプトコードを入力することもで
きます。次に入力方法を示します。
1.
2.
この Adobe PDF 形式のマニュアルからスクリプトをコピーして、ExtendScript Toolkit に貼り付けます。
Scripts Panel フォルダーに、プレーンテキストファイルとしてスクリプトを保存します(11 ページの
「スクリプトのインストール」を参照)。ファイル拡張子は .jsx を使用します。
3.
ウィンドウ/スクリプトを選択して、スクリプトパネルを表示します。
4.
スクリプトパネルでスクリプト名をダブルクリックして、スクリプトを実行します。
第 2 章 はじめに
最初の InCopy スクリプトの作成
14
手入力でスクリプトを作成する方法は、この章に掲載されているスクリプトに対してのみ有効です。他の章
に掲載されているスクリプトは、断片的なスクリプトです。完全なスクリプトではありません。他の章のス
クリプトを実行するには、スクリプトアーカイブのスクリプトを使用する必要があります。
注意 : スクリプトアーカイブのスクリプトを使用せずに、サンプルスクリプトを直接入力する場合は、掲載
されているとおりに大文字と小文字を使い分けることが重要です。JavaScript では大文字と小文字が区別され
るので、使い分けを誤ると正しく実行されません。
注意 : このマニュアルからスクリプトをコピーして貼り付ける場合は、レイアウトの都合で途中で改行され
ている文があるとエラーになる点に注意してください。このようなエラーを発見するのは難しいことが多い
ので、Zip アーカイブのスクリプトを使用することをお勧めします。
最初の InCopy スクリプトの作成
では、InCopy スクリプトを実際に作成してみましょう。ここでは、新規ドキュメントを作成し、テキストフ
レームを追加し、そのテキストフレームにテキストを入力するスクリプトを作成します。非常に簡単な作業
のように思えますが、このスクリプトでは次の処理を行います。
InCopy との通信を確立する。
新規ドキュメントを作成する。
ストーリーにテキストを追加する。
ExtendScript Toolkit(またはテキストエディター)を起動します。次のスクリプトを入力します(または、
HelloWorld.jsx というチュートリアルスクリプトを開きます)
。
var myDocument = app.documents.add();
var myStory = myDocument.stories.item(0);
myStory.contents = "Hello World!";
Scripts Panel フォルダーに、プレーンテキストファイルとしてスクリプトを保存します(11 ページの「スク
リプトのインストール」を参照)。ファイル拡張子は .jsx を使用します。スクリプトを実行するには、スク
リプトパネルでスクリプト名をダブルクリックします。または、ExtendScript Toolkit で、ターゲットアプリ
ケーションのポップアップメニューから InCopy を選択し、
「実行」をクリックします。
スクリプトの動作の説明
ここでは、Hello World スクリプトの動作について、順を追って説明します。
1.
InCopy アプリケーションオブジェクトとの通信を確立します。
アプリケーションは app で参照できます。
2.
新規ドキュメントを作成して、その参照を取得します。
Var myDocument = app.documents.add();
3.
ドキュメントの最初のストーリーへの参照を取得します(独立したドキュメントには必ずストーリーが
含まれています)。
var myStory = myDocument.stories.item(0);
4.
コンテンツのプロパティに文字列を設定して、ストーリーにテキストを追加します。
myStory.contents = "Hello World!";
第 2 章 はじめに
スクリプティング用語と InCopy オブジェクトモデル
15
スクリプティング用語と InCopy オブジェクトモデル
ここでは、次のスクリプトに進む前に、スクリプト言語に関する一般的な用語と、InCopy スクリプティング
に固有の用語について説明します。
スクリプティングの用語
まず、スクリプティングに関する一般的な用語や概念について説明します。
コメント
コメントを使用して、スクリプトに説明用のテキストを追加することができます。コメントはスクリプトの
実行時には無視され、エラーが発生しないようになっています。スクリプトの処理について、自分や他人の
ために注釈を残しておきたい場合は、コメントを使用すると便利です。このマニュアルのチュートリアルス
クリプトでも、コメントを使用しています。
JavaScript でコメントを入力するには、コメントの左に「//」と入力します。または、「/*」と「*/」でコメ
ントを囲みます。次に例を示します。
// this is a comment
/* and so is this */
値
InCopy スクリプティングで使用される値の例としては、テキストの文字のポイントサイズ、注釈の内容、ド
キュメントのファイル名などがあります。値とは、スクリプトで処理を行う際に使用するデータのことです。
値にどのような種類のデータが含まれるかは、値の型によって定義されます。例えば、単語が格納されてい
る値の型は文字列で、段落の行送りの値の型は数値です。通常、スクリプトで使用される値は数値かテキス
トです。InCopy スクリプティングで最もよく使用される値の型を、次の表に示します。
値の型
説明
例
真(True)か偽(False)かを表す論
理値。
True
Integer
整数(小数点が付かない数)。正の整 14
数と負の整数があります。
Number
精度の高い数値。小数点が含まれる
ことがあります。
13.9972
String
一連のテキスト文字。文字列は引用
符で囲みます。
" これは文字列です "
Array
値のリスト(この値はどの型であっ
てもかまいません)。
["0p0", "0p0", "16p4", "20p6"]
値の型の変換
JavaScript には、変数の値の型を変換するための方法が用意されています。最もよく行われるのは、数値から
文字列への変換(テキストの中に挿入したり、ダイアログボックスに表示したりする場合に行います)と、
文字列から数値への変換(ポイントサイズやページ位置を設定する場合に行います)の 2 つです。
第 2 章 はじめに
スクリプティング用語と InCopy オブジェクトモデル
16
変数
変数は、値を格納する入れ物のようなものです。「変数」という名前が表しているように、この入れ物に格
納する値は変更することができます。変数には数値が格納されることもありますし、テキスト文字列や、
InCopy オブジェクトへの参照が格納されることもあります。それぞれの変数は名前を持っており、変数を参
照するときにはこの名前を使用します。変数に値を格納するには、その変数にデータを割り当てます。
InCopy のすべてのサンプルスクリプトやチュートリアルスクリプトでは、変数名はすべて my で始まってい
ます。このようにすることで、スクリプトで独自に作成した変数と、スクリプト言語の予約語を簡単に区別
できるようにしています。
変数への値の割り当て
変数に値や文字列を割り当てるのは簡単です。その方法を次の例に示します。
var myNumber = 10;
var myString = "Hello, World!";
var myTextFrame = myDocument.pages.item(0).textFrames.add();
注意 : JavaScript では、var が前に付いていない変数はすべて、デフォルトでグローバルと見なされます(つ
まり、特定の関数に関連付けられることはありません)。var は必須ではありませんが、複数の関数を使用し
ているスクリプトでは var を使用することをお勧めします。
変数には、意味のある名前を付けるようにしてください。firstPage や corporateLogo などは良い例です。
x や c などは悪い例です。意味のある名前を使えば、スクリプトが読みやすくなります。長い名前を付けても、
スクリプトの実行速度に悪影響を与えることはありません。
変数は、1 つの単語である必要があります。ただし、読みやすくするために途中で大文字を使用したり
(myFirstPage など)、アンダースコアを使用したり(my_first_page など)することができます。変数名の最
初の文字に数字を使用することはできません。また、変数名に句読点や引用符を含めることもできません。
配列変数
配列オブジェクトには、一連の値を格納することができます。
myArray = [1, 2, 3, 4];
配列に含まれている要素を参照するには、その要素のインデックスを参照します。JavaScript では、配列の最
初の要素は要素 0 です。
var myFirstArrayItem = myArray[0];
次の例のように、配列の中にさらに別の配列を含めることができます。
var myArray = [[0,0], [72,72]];
変数の値の型を調べる
オブジェクトの値の型に基づいて判断を行いたい場合があります。例えば、選択されたテキストに対して処
理を実行するスクリプトでは、何も選択されていない場合には処理を停止する必要があります。
第 2 章 はじめに
スクリプティング用語と InCopy オブジェクトモデル
17
演算子
演算子は、変数や値を使用して計算(加算、減算、乗算、除算)を実行し、値を返します。例えば、
MyWidth/2
では、変数 myWidth に格納されている値の半分の値が返されます。
また、演算子を使用して比較(等しい(=)
、等しくない(<>)、より大きい(>)
、より小さい(<))を行う
こともできます。例えば、
MyWidth > myHeight
では、myWidth が myHeight よりも大きい場合には true(または 1)が、そうでない場合には false(0)が返
されます。
JavaScript では、プラス記号(+)を使用して 2 つの文字列を結合させることができます。
"Pride " + "and Prejudice"
//returns the string: "Pride and Prejudice"
条件文
「もし選択されているテキストのサイズが 12 ポイントなら、そのポイントサイズを 10 ポイントに設定しなさ
い」のような命令のことを、条件文と呼びます。条件文は、何らかの判断を行うときに使用します。ある条件
(選択されているテキストのカラー、ドキュメントのページ数、日付など)を評価して、その結果に従って処
理を行うことができます。条件文は、ほとんどの場合 if で始まります。
制御構造
InCopy に人間の言葉を理解する能力があったら、「今から言う手順を 20 回繰り返しなさい」というような命
令をしていたことでしょう。スクリプティングの用語では、このような命令のことを制御構造と呼びます。制
御構造を使用すると、反復作業、つまりループ処理を行うことができます。ループの考えは、それぞれルー
プ内で変化があったかなかったかに関わらず、特定の条件を満たすまで、ある動作を何度も何度も繰り返す
ことです。制御構造は通常、for で始まります。
関数
関数とは、スクリプトの中から参照することができるスクリプティングモジュールのことです。関数に値
(または一連の値)を渡して、返される値を取得する、というのが一般的な使い方です。関数は、何か特別な
コードで構成されているわけではありません。これらは、スクリプトの中で同じコードを何度も入力する手
間を省くためのものです。関数は function で始まります。
第 2 章 はじめに
スクリプティング用語と InCopy オブジェクトモデル
18
InDesign および InCopy オブジェクトモデルの理解
InCopy と InDesign ドキュメントの関係を考えるとき、おそらくプログラムと、そのコンポーネントの関係を
考えるでしょう。同様に、段落はテキストフレームの中にあり、テキストフレームはページの中にあり、ペー
ジはスプレッドの中にあり、いくつかのスプレッドが集まって 1 つのドキュメントを構成していることもご
存知だと思います。ドキュメントにはカラー、スタイル、レイヤー、マスタースプレッドなども含まれてい
ます。ドキュメントにオブジェクトを作成するユーザーは、それらの間に一定の序列があることを直感的に
理解しています。
InDesign や InCopy も、ドキュメントのコンテンツを同じような考え方で「認識」しています。ドキュメント
の中にはページが含まれており、ページの中にはページアイテム(テキストフレーム、長方形、楕円形など)
が含まれています。テキストフレームの中には文字、単語、段落、アンカーフレームなどが含まれています。
グラフィックフレームの中には画像、EPS、PDF などが含まれています。グループの中には他のページアイテ
ムが含まれています。これらはすべて、InDesign パブリケーションを構成するオブジェクトです。InDesign お
よび InCopy スクリプトでは、このオブジェクトに対して何らかの操作を行います。
パブリケーションの中にあるオブジェクトは、一定の序列に従って編成されています。例えば、段落はス
トーリーの中にあり、ストーリーはドキュメントの中にあり、ドキュメントは InCopy アプリケーションオブ
ジェクトの中にあります。オブジェクトモデルや階層という言葉は、このような構造のことを指しています。
目的のオブジェクトにアクセスするためには、このオブジェクトモデルを理解している必要があります。
InCopy の構造を理解することが、InCopy スクリプティングをマスターする秘訣であると言えます。
オブジェクトにはプロパティ(属性)があります。例えば、テキストオブジェクトには、テキストの書式設
定に使用するフォント、ポイントサイズ、テキストに適用する行送りなどのプロパティがあります。
プロパティには値が設定されます。例えば、テキストのポイントサイズには、ポイント数を表す数値や、自
動行送りを表す「Auto」などの文字列が設定されます。また、テキストの塗りカラーには、1 つのカラー、グ
ラデーション、混合インキ、スウォッチなどが設定されます。
プロパティには、読み書き可能なものと読み取り専用のものがあります。読み書き可能なプロパティは、別
の値に変更することができますが、読み取り専用のプロパティは変更できません。
また、オブジェクトにはメソッドが用意されています。これは、そのオブジェクトが実行できるアクション
を表しており、スクリプトの中で「動詞」として使用されます。例えば、ドキュメントオブジェクトには、
印刷、書き出し、保存などを行うメソッドが用意されています。
メソッドはパラメーターを取ります。パラメーターは、メソッドの動作を定義するための値です。例えば、
open メソッドは、開くファイルを定義するためのパラメーターを取ります。
InCopy オブジェクトモデルの概要を次のブロック図に示します。この図は、各種のオブジェクトの関係を理
解するための概念的なフレームワークなので、InCopy スクリプティングで利用できるオブジェクトを完全に
網羅したものではありません。
第 2 章 はじめに
スクリプティング用語と InCopy オブジェクトモデル
application
documents
a document
libraries
document preferences
books
document defaults
document events
application defaults
document properties
document methods
application menus
document elements
application properties
page
stories
この図に示されている各オブジェクトについて、次の表で説明します。
用語
表しているもの
InCopy。
Application
defaults
アプリケーションのデフォルト設定。カラー、段落スタイル、オブジェクトスタイルな
ど。アプリケーションのデフォルト設定はすべての新規ドキュメントに影響を与えます。
ユーザーやスクリプトがアプリケーションを操作したときに発生します。例えば、ドキュ
メントのオープン、クローズ、保存を行ったときや、メニュー項目を選択したときなどに
イベントが生成されます。イベントに反応してスクリプトを実行させることができます。
InCopy のユーザーインターフェイスに表示されるメニュー、サブメニュー、コンテキスト
メニュー。メニューの選択にスクリプトを関連付けたり、スクリプトからメニューアク
ションを実行したりできます。
アプリケーションが実行できるアクション。テキストの検索と変更、選択項目のコピー、
新規ドキュメントの作成、ライブラリのオープンなど。
テキストの環境設定、PDF 書き出しの環境設定、ドキュメントの環境設定など。環境設定
オブジェクトの多くはドキュメントレベルにも存在しています。ユーザーインターフェイ
スの場合と同じように、アプリケーションの環境設定は新規ドキュメントに適用されま
す。ドキュメントの環境設定は特定のドキュメントの設定を変更します。
アプリケーションのプロパティ。アプリケーションのフルパス、アプリケーションのロ
ケール、ユーザー名など。
Books
開かれているブックのコレクション。
Document
InCopy ドキュメント。
19
第 2 章 はじめに
スクリプティング用語と InCopy オブジェクトモデル
用語
表しているもの
Document
defaults
ドキュメントのデフォルト設定。デフォルトのカラー、段落スタイル、デフォルトのテキ
スト書式など。
Document
elements
ドキュメントのストーリー、読み込んだグラフィック、ページなど。ページやストーリー
もドキュメント要素ですが、これらは他のオブジェクトを格納するコンテナとして特に重
要な要素なので、この表の前にある図では独立して示されています。ドキュメント要素に
は、このほかにも、長方形、楕円形、グループ、XML 要素などの、読み込んだり作成した
りできるあらゆる種類のオブジェクトが含まれます。
Document
events
20
ドキュメントレベルで発生するイベント。テキストの読み込みなど。この表の
「Application events」を参照してください。
Document
methods
ドキュメントが実行できるアクション。ドキュメントのクローズ、印刷、書き出しなど。
Document
preferences
ドキュメントの環境設定。ガイド、表示、ドキュメントの環境設定など。
Document
properties
ドキュメントのファイル名、ページ数、原点の位置など。
Documents
開かれているドキュメントのコレクション。
Libraries
開かれているライブラリのコレクション。
Page
InCopy ドキュメント内の 1 つのページ。
Page item
ページ上に作成または配置できる任意のオブジェクト。ページアイテムには、テキストフ
レーム、長方形、グラフィックの線、グループなど多くの種類があります。
InCopy ドキュメント内のページまたはスプレッド。
Stories
InCopy ドキュメント内のテキスト。
Text objects
InCopy ストーリーには、文字、単語、線、段落、テキスト列などのテキストオブジェクト
が含まれます。
InCopy オブジェクトモデルの参照
InCopy オブジェクトモデルは、スクリプト編集アプリケーションの中で参照することができます。オブジェ
クトとそのプロパティやメソッドに関する参照情報は、すべてモデルに格納されており、スクリプト編集ア
プリケーションで参照することができます。
ExtendScript Toolkit で InCopy オブジェクトモデルを参照するには:
1.
ExtendScript Toolkit を起動します。
2.
ヘルプ/ Adobe InCopy CS6 オブジェクトモデルを選択します。InCopy のオブジェクトモデルが読み込ま
れ、独立したウィンドウに表示されます。
3.
表示するオブジェクトを「クラス」リストから選択し、詳細を表示するプロパティまたはメソッドを
「プロパティとメソッド」リストでクリックします。選択したプロパティまたはメソッドの詳細が表示さ
れます。
第 2 章 はじめに
スクリプティング用語と InCopy オブジェクトモデル
21
ExtendScript Toolkit のオブジェクトモデルビューアの使用方法について詳しくは、『Creative Suite 5 JavaScript
Tools Guide』を参照してください。
測定値と位置
InCopy では、どのアイテムやオブジェクトも、設定されている測定値に従ってページ上に配置されます。
InCopy の座標系の仕組みと、使用される測定単位について理解しておくと、スクリプトを書く際にその知識
が役に立ちます。
座標
他のページレイアウトプログラムやドロープログラムと同じように、InCopy でも、単純な 2 次元座標を使用
してページやスプレッド上のオブジェクトの位置を設定します。座標は 2 つの値の組で表しますが、そのう
ちの水平成分を x と呼び、垂直成分を y と呼びます。選択ツールでオブジェクトを選択すると、変形パネルや
コントロールパネルにこの座標が表示されます。座標は、InCopy のユーザーインターフェイスと同様に、定
規の現在の原点からの相対位置で測定されます。
InCopy が採用している座標と、幾何学の教科書で使われる座標には、1 つだけ違うところがあります。それ
は、InCopy の座標では、垂直軸(y 軸)の原点より下が正の数であり、原点より上が負の数である、という
ことです。
測定単位
InCopy に測定値を渡すときには、数値(14.65 など)と測定文字列(「1p7.1」など)のどちらの形でも渡すこ
とができます。数値を渡したときには、パブリケーションの現在の測定単位が使用されます。測定文字列
(後述の表を参照)を渡したときには、その文字列で指定した測定単位が使用されます。
InCopy から返される測定値には、パブリケーションの現在の測定単位が使用されます。この InCopy から返さ
れる測定値は、変形パネルに表示される測定値と表記の仕方が違うことがあります。例えば、現在の測定単
位系がパイカである場合、端数のある値はパイカとポイントの形(変形パネルでの表記法)ではなく、小数
の形で返されます。例えば、「1p6」は「1.5」と返されます。このようにしている理由は、スクリプティング
システムで測定文字列を使用して算術演算を行おうとすると問題が生じるからです。例えば、
「13p4」に
第 2 章 はじめに
「Hello World」への機能の追加
22
「0p3.5」を足そうとするとスクリプトエラーが発生します。13.333 に .2916(どちらもパイカに換算した値)
を足す場合にはエラーは発生しません。
スクリプトで特定の測定値の加減乗除を行う場合には、スクリプトの始めの部分で測定単位を設定します。
そして、スクリプトの終わりの部分で、スクリプトを実行する前の測定単位に戻します。または、多くのサ
ンプルスクリプトで行っているように、測定単位をオーバーライドすることができます。これを行うには、
特別な文字が含まれた文字列を使用します。次に例を示します。
オーバーライド
意味
例
c
シセロ(必要に応じて c の後にディド値を追加できます)
1.4 c
cm
センチメートル
.635 cm
i(または in)
インチ
.25 i
mm
ミリメートル
6.35 mm
p
パイカ(必要に応じて p の後にポイント値を追加できます)
1p6
pt
ポイント
18 pt
「Hello World」への機能の追加
次に、最初のスクリプトで作成した「Hello World」パブリケーションに変更を加える新しいスクリプトを作
成します。この 2 番目のスクリプトでは、次の処理を行います。
アクティブなドキュメントを取得する。
最初のストーリー内のテキストのフォーマットを変更する。
注釈を追加する。
ImprovedHelloWorld チュートリアルスクリプトを開くか、または次の手順に従ってスクリプトを作成します。
1.
作成したドキュメントが開いていることを確認します。ドキュメントを保存せずに閉じてしまった場合
は、HelloWorld.jsx スクリプトをもう一度実行すればドキュメントが新たに作成されます。
2.
第 2 章 はじめに
23
3.
Scripts Panel フォルダーに、プレーンテキストファイルとしてテキストを保存します(11 ページの「ス
クリプトのインストール」を参照)。ファイル拡張子は .jsx を使用します。
4.
スクリプトパネルでスクリプト名をダブルクリックして、新しいスクリプトを実行します。
スクリプティング機能
3
章の更新ステータス
CS6
編集
25 ページの「スクリプトのバージョン対応」および 3 つの副節を、更新、修正および明確化しました。
この章では、InCopy のスクリプティング環境に関連するスクリプティングテクニックを紹介します。InCopy
のスクリプトモデルを構成するオブジェクトのほとんどは、アプリケーションのデフォルトやドキュメント
を操作するためのオブジェクトですが、この章ではまず、スクリプトそのものを制御する方法について説明
します。
この章の内容は、次のとおりです。
scriptPreferences オブジェクトとそのプロパティ
実行中のスクリプトへの参照の取得
以前のバージョンのスクリプトオブジェクトモデルに基づいたスクリプトの実行
doScript メソッドを使用したスクリプトの実行
InCopy の起動時におけるスクリプトの自動実行
スクリプトを実行する ExtendScript エンジンの制御
ここでは、読者が第 2 章「はじめに」を既に読んでおり、該当するスクリプト言語で InCopy のスクリプトを
作成、インストール、実行する方法を理解しているものとして説明を行います。
スクリプトの環境設定
scriptPreferences オブジェクトには、InCopy でのスクリプトの実行方法に関連するオブジェクトやプロパ
ティが用意されています。次の表に、scriptPreferences オブジェクトの各プロパティの詳細を示します。
プロパティ
説明
EnableRedraw
スクリプトパネルからスクリプトを実行している最中の画面の再描画をオン
またはオフにします。
scriptsFolder
Scripts フォルダーへのパス。
scriptsList
使用可能なスクリプトのリスト。このプロパティは、次に示すような配列の
配列を返します。
[[fileName, filePath], ]
fileName はスクリプトファイルの名前を表し、filePath はスクリプトへの
フルパスを表します。この機能を使用すれば、目的のスクリプトがインス
トールされているどうかを確認できます。
24
第 3 章 スクリプティング機能
プロパティ
userInteractionLevel
version
現在のスクリプトの取得
25
説明
このプロパティは、ユーザーに表示する警告やダイアログボックスを制御し
ます。このプロパティを UserInteractionLevels.neverInteract に設定する
と、警告やダイアログボックスは一切表示されなくなります。
UserInteractionLevels.interactWithAlerts に設定すると、警告は有効に
なりますが、ダイアログボックスは無効になります。
UserInteractionLevels.interactWithAll に設定すると、警告とダイアログ
ボックスは通常どおりに表示されます。警告の表示をオフにする機能は、ス
クリプトでドキュメントを開く場合に便利です。InCopy では、フォントや
リンク先のグラフィックファイルが見つからないと警告が表示されます。こ
のプロパティを UserInteractionLevels.neverInteract に設定してからド
キュメントを開き、スクリプトを終了する直前にプロパティを元に戻せば
(UserInteractionLevels.interactWithAll に設定すれば)、警告が表示され
るのを避けられます。
使用中のスクリプティング環境のバージョン。詳しくは、25 ページの「スク
リプトのバージョン対応」を参照してください。このプロパティは、アプリ
ケーションのバージョンと同じではないことに注意してください。
現在のスクリプトの取得
現在のスクリプトへの参照を取得するには、アプリケーションオブジェクトの activeScript プロパティを使
用します。このプロパティは、現在のスクリプトが保存されている場所を基準にしてファイルやフォルダー
を検索する場合に役立ちます。次のスクリプトにその例を示します(チュートリアルスクリプトの
ActiveScript より)。
var myScript = app.activeScript;
alert("The current script is: " + myScript);
var myParentFolder = File(myScript).parent;
alert("The folder containing the active script is: " + myParentFolder);
スクリプトエディタでスクリプトをデバッグしている場合は、activeScript プロパティを取得しようとする
とエラーが発生します。activeScript プロパティで返されるのは、スクリプトパレットから実行したスクリ
プトのみです。
ExtendScript Toolkit を使用してスクリプトをデバッグしている場合は、activeScript プロパティを取得しよ
うとするとエラーが発生します。このエラーを回避して、activeScript プロパティが使用されているスクリ
プトをデバックするには、次のエラーハンドラーを使用します(チュートリアルスクリプトの GetScriptPath
より)。
function myGetScriptPath() {
try{
return app.activeScript;
}
catch(myError){
return File(myError.fileName);
}
}
スクリプトのバージョン対応
InCopy では、以前のバージョンの InCopy スクリプトオブジェクトモデルに基づいて作成されたスクリプトを
実行できます。新しいバージョンの InCopy で古いスクリプトを実行する場合は、次の点に注意する必要があ
ります。
第 3 章 スクリプティング機能
スクリプトのバージョン対応
26
ターゲットの設定 - スクリプトを実行する InCopy のバージョン(現在のバージョン)をターゲットに設
定する必要があります。26 ページの「ターゲットの設定」に説明するとおり、ターゲットの設定方法は
言語によって異なります。
コンパイル - この段階では、スクリプトで使用されている名前が InCopy で認識できるスクリプト ID に
マッピングされます。26 ページの「コンパイル」に説明するとおり、コンパイルの方法は言語によって
異なります。
インタープリターによる実行 - この段階では、スクリプト ID が InCopy の適切なハンドラーに関連付けら
れます。これにより InCopy は、以前のバージョンのスクリプトオブジェクトモデルに基づいて作成され
たスクリプトも正しく解釈できるようになります。そのためには、スクリプトでアプリケーションのス
クリプト環境設定に古いオブジェクトモデルを明示的に設定するか(26 ページの「インタープリターに
よる実行」に示すとおり)
、次のようにスクリプトパネル用のフォルダーからスクリプトを実行します。
フォルダー
スクリプトの InCopy バージョン
Version 8.0 Scripts
CS6
Version 7.0 Scripts
CS5 および CS5.5
Version 6.0 Scripts
CS4
Version 5.0 Scripts
CS3
Version 2.0 Scripts
CS2
ターゲットの設定
スクリプトを実行する InCopy のバージョン(現在のバージョン)が、スクリプトでターゲットとして明示的
または暗黙的に設定されている必要があります。スクリプトパネルからスクリプトを実行すると暗黙的に
ターゲットが設定されます。
外部(ExtendScript Toolkit)からスクリプトを実行する場合、JavaScript で明示的にターゲットを設定するに
は、target ディレクティブを使用します。
//target CS6
#target "InCopy-8.0"
//target the latest version of InCopy
#target "InCopy"
コンパイル
JavaScript はプリコンパイルされません。インタープリターで使用される DOM のバージョンがコンパイルに
も使用されます。
インタープリターによる実行
インタープリターで使用するスクリプトオブジェクトモデルのバージョンを取得したり設定したりするには、
InCopy アプリケーションオブジェクトの scriptPreferences オブジェクトを使用します。デフォルトでは、
アプリケーションの現在のバージョンに設定されており、変更されるまでそのバージョンが使用されます。
例えば、スクリプトオブジェクトモデルのバージョンを CS5 に変更するには、次のようにします。
//Set to 7.0 scripting object model
app.scriptPreferences.version = 7.0;
第 3 章 スクリプティング機能
doScript メソッドの使用
27
doScript メソッドの使用
doScript メソッドを使用すると、スクリプトの中で別のスクリプトを実行することができます。このメソッ
ドには、有効なスクリプトコードを表す文字列か、ディスク上のスクリプトファイルを指定できます。指定
するスクリプトは、現在のスクリプトと同じ言語であっても、異なる言語であってもかまいません。使用で
きる言語はプラットフォームによって異なります。Mac OS® の場合は AppleScript または JavaScript を実行で
きます。Windows® の場合は VBScript または JavaScript を実行できます。
doScript メソッドは、次の様々な場合に利用できます。
使用したい機能が、メインのスクリプト言語ではサポートされておらず、別の言語でサポートされてい
る場合。例えば、VBScript にはファイルブラウザーやフォルダーブラウザーを表示する機能はありません
が、JavaScript にはこの機能が用意されています。AppleScript では三角関数(サインやコサイン)の計算
に時間がかかる場合がありますが、JavaScript では高速に処理できます。JavaScript では、Microsoft® Excel
スプレッドシートのセルの内容を照会することはできませんが、AppleScript や VBScript を使用すれば行
うことができます。どの場合も、別の言語で断片的なスクリプトコードを作成して doScript メソッドで
実行すれば、メインのスクリプト言語の制約を回避することができます。
スクリプトを動的に生成して実行する場合。実行時にスクリプトの文字列を動的に生成して、doScript
メソッドで実行することができます。この方法は、選択されている内容や作成するオブジェクトの属性
に基づいてダイアログボックスやパネルをカスタマイズしたい場合などに適しています。
オブジェクトにスクリプトを埋め込む場合。doScript メソッドを使用すれば、オブジェクトの label プ
ロパティに文字列として保存されているスクリプトを実行することができます。このテクニックを利用
すると、特定のパラメーターに基づいてレイアウトプロパティを制御したり内容を更新したりするスク
リプトを、オブジェクト自体に埋め込むことができます。また、XML 要素にも、属性またはコンテンツ
としてスクリプトを埋め込むことができます。28 ページの「起動時におけるスクリプトの自動実行」を
参照してください。
doScript へのパラメーターの渡し方
doScript で実行するスクリプトにパラメーターを渡すには、次のようにします(チュートリアルスクリプト
doScript からの戻り値
doScript で実行するスクリプトから値を返すには、アプリケーションの scriptArgs オブジェクトを使用し
ます(この名前は、「script arguments」を縮めたものです)。次のスクリプトにその例を示します(完全なス
クリプトについては、DoScriptReturnValue というチュートリアルスクリプトを参照してください)。
第 3 章 スクリプティング機能
起動時におけるスクリプトの自動実行
28
起動時におけるスクリプトの自動実行
InCopy の起動時にスクリプトを自動実行させるには、Scripts フォルダーの下にあるスタートアップ用のフォ
ルダーである Startup Scripts フォルダーにスクリプトファイルを保存します(詳しくは、11 ページの「スク
リプトのインストール」を参照してください)。
注意 : InCopy の起動時に、そのセッションの ExtendScript エンジンでスクリプトを実行した場合、そこで作
成されたオブジェクトや関数は、そのセッションの間、他のスクリプトからも使用することができます。詳
しくは、28 ページの「セッションとメインでのスクリプトの実行」を参照してください。
セッションとメインでのスクリプトの実行
InCopy で JavaScript を実行する方法には、session と main の 2 つがあります。この名前は、スクリプトの実行
時に使用する ExtendScript エンジンの名前に対応しています。
デフォルトでは、InCopy の JavaScript を実行すると、メイン(main)の ExtendScript エンジンでスクリプト
が解釈されて実行されます。このエンジンは、スクリプトの実行が終了すると破棄されます。このスクリプ
トで作成されたスクリプトオブジェクトは保持されません。
セッション(session)のエンジンでスクリプトを実行した場合、そこで作成されたオブジェクトは、InCopy
を終了するまで保持されます。このオブジェクトは、session エンジンで実行される他のスクリプトからも参
照できます。InCopy JavaScript のターゲットとして session エンジンを設定するには、スクリプトの先頭に次
の行を追加します。
#targetengine "session"
また、ExtendScript のパーシスタント(永続的)な解釈および実行環境を独自に作成することもできます。こ
れを行うには、#targetenging 文を使用して、独自の ExtendScript エンジンの名前を設定します。次のスクリ
プトにその例を示します。
#targetengine "adobe"
4
テキストと組版
章の更新ステータス
CS6
変更なし
テキストの入力、編集、フォーマットといった作業は、InCopy ドキュメントの製作工程の中でも、最も時間
のかかる作業の 1 つです。したがって、テキストや書式に関する作業を自動化できれば、生産性の大幅な向
上が期待できます。
このチュートリアルでは、テキストや書式に関する一般的な操作をスクリプトで実行する方法について説明
します。最初は簡単なサンプルスクリプトから始めて、徐々に複雑なスクリプトへと進んでいきます。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。また、InCopy でテキストを操作する方法や、組版に関する基本
的な用語を理解しているものとしています。
テキストの入力と読み込み
ここでは、InCopy ドキュメントにテキストを配置する方法について説明します。InCopy のユーザーインター
フェイスを使用してテキストフレームにテキストを入力したり、テキストファイルを配置したりするのと同
じように、スクリプトを使用してテキストフレームを作成し、ストーリーにテキストを挿入し、テキスト
ファイルを配置することができます。
ストーリーとテキストフレーム
InCopy レイアウトの中にあるテキストは、すべてストーリーの中に含まれています。どのストーリーにも 1
つ以上のテキストフレームを含めることができます。独立した InCopy ドキュメントには 1 つのストーリーが
含まれています。テキストフレームは、ストーリーのテキストを表示する必要がある場合にのみ追加されま
す。これは、InCopy ストーリー(.icml ファイル)として InDesign から書き出されたストーリーにも当ては
まります。
InDesign ドキュメントから生成された InCopy ドキュメントには、複数のストーリーが含まれていることがあ
ります。また、InDesign レイアウトで作成されたテキストフレームが必ず含まれています。InCopy では、
InDesign と異なり、スクリプトを使用して新しいテキストフレームを追加することはできません。
InCopy ドキュメントの中にあるテキストオブジェクトの関係について詳しくは、37 ページの「テキストオブ
ジェクト」を参照してください。
ストーリーへのテキストの追加
ストーリーにテキストを追加するには、contents プロパティを使用します。次のサンプルスクリプトでは、
この方法を使用して、ストーリーの末尾にテキストを追加しています(完全なスクリプトについては、
AddText を参照してください)。
29
第 4 章 テキストと組版
テキストの入力と読み込み
30
このスクリプトでは、itemByRange メソッドを使用して段落 2 の改行文字を除外しています。改行を削除して
しまうと、段落に適用されている段落スタイルが変更される可能性があるからです。したがって、
itemByRange メソッドのパラメーターに 2 つの文字(段落の先頭の文字と、末尾の文字(改行文字)の直前
にある文字)を指定しています。
特殊文字の挿入
ExtendScript Toolkit では Unicode がサポートされているので、InCopy に渡すテキスト文字列に Unicode 文字を
簡単に入力できます。また、JavaScript では、Unicode 文字の字形の識別番号を指定する ¥unnnn という表記
法(nnnn は、目的の文字の Unicode コード)を使用することもできます。次のスクリプトでは、特殊文字を
いくつかの方法で入力しています(完全なスクリプトについては、SpecialCharacters を参照してください)。
第 4 章 テキストと組版
テキストの配置とテキスト読み込み環境設定の指定
31
特定の文字の Unicode ID を調べたい場合は、InCopy の字形パレットを使用するのが最も簡単です(このパ
レットを表示するには、書式/字形を選択します)。パレット内で文字の上にカーソルを移動すると、その文
字の Unicode 値が表示されます。Unicode について詳しくは、http://www.unicode.org を参照してください。
テキストの配置とテキスト読み込み環境設定の指定
テキスト文字列の入力だけでなく、ワードプロセッサーやテキストエディターで作成したテキストファイル
を配置することもできます。新規ドキュメントのデフォルトストーリーにテキストファイルを配置する方法
を、次のスクリプトに示します(完全なスクリプトについては、PlaceTextFile を参照してください)。
//Places a text file in the default story of a new document.
var myDocument = app.documents.add();
//Parameters for InsertionPoint.place():
//File as File object,
//[ShowingOptions as Boolean = False]
//You'll have to fill in your own file path.
myDocument.stories.item(0).insertionPoints.item(0).place(File("/c/test.txt"), false);
第 4 章 テキストと組版
テキストの配置とテキスト読み込み環境設定の指定
32
第 4 章 テキストと組版
テキストの配置とテキスト読み込み環境設定の指定
33
第 4 章 テキストと組版
テキストの書き出しとテキスト書き出し環境設定の指定
34
書き出すテキストファイルの種類に応じた書き出しオプションを指定するには、対応する書き出し環境設定
オブジェクトを使用します。テキスト書き出し環境設定を指定する方法を、次のスクリプトに示します(完
全なスクリプトについては、TextExportPreferences を参照してください)。
第 4 章 テキストと組版
テキストの書き出しとテキスト書き出し環境設定の指定
35
第 4 章 テキストと組版
テキストの書き出しとテキスト書き出し環境設定の指定
36
第 4 章 テキストと組版
テキストオブジェクト
37
テキストオブジェクト
次の図は、InCopy のテキストオブジェクトモデルを図式化したものです。テキストオブジェクトにはレイア
ウトオブジェクト(テキストフレーム)とテキストストリームオブジェクト(ストーリー、挿入点、文字、
単語など)の 2 つの種類があります。この図では、各オブジェクトの一般的な呼び名を記載しています。ス
クリプトを作成する際は、使用するスクリプト言語で定義されている対応する用語を使用してください。
第 4 章 テキストと組版
テキストオブジェクト
38
document
story
insertion points
characters
text containers
text frame
words
insertion points
lines
paragraphs
words
text columns
lines
text style ranges
paragraphs
texts
text columns
notes
テキストストリームオブジェクトの parent は、そのオブジェクトが含まれているストーリーです。テキスト
オブジェクトが含まれているテキストフレーム(またはテキストフレームのコレクション)への参照を取得
するには、parentTextFrames プロパティを使用します。
テキストフレームの parent は、通常、そのテキストフレームが含まれているページまたはスプレッドです。
グループ内にあるテキストフレームや、別のページアイテム内にペーストされたテキストフレームの parent
は、そのテキストフレームが含まれているページアイテムです。アンカー付きフレームに変換されたテキス
トフレームの parent は、そのアンカー付きフレームが含まれている文字です。
第 4 章 テキストと組版
テキストオブジェクト
39
テキストの移動とコピー
move メソッドを使用して、テキスト内の別の場所にテキストオブジェクトを移動することができます。テキ
ストをコピーするには、duplicate メソッドを使用します(パラメーターは move メソッドと同じです)。次の
第 4 章 テキストと組版
テキストオブジェクト
40
この例では、フォーマットされない段落がいくつか発生することになります。その理由は次のとおりです。こ
のスクリプトのループは、ストーリー内の最初の段落から最後の段落まで、段落に対して繰り返し処理を行
います。そうすると、「Delete」という単語で始まる段落があれば削除されます。このスクリプトで第 2 段落
が削除されると、第 3 段落がその場所に移動します。次にループカウンターが 2 になると、先ほどまで第 4 段
落であった段落が処理されます。第 3 段落であった段落はこの時点で第 2 段落になっているので、処理は行
われません。
この問題を回避するには、次のスクリプトのように、テキストオブジェクトを逆順で処理します(チュート
リアルスクリプトの TextIterationRight より)
。
第 4 章 テキストと組版
テキストのフォーマット
41
テキストのフォーマット
前の節では、ドキュメントにテキストを追加し、ストーリーやテキストオブジェクトを操作しました。この
節では、テキストにフォーマットを適用します。InCopy のすべてのフォーマット機能は、スクリプティング
で操作することができます。
第 4 章 テキストと組版
テキストのフォーマット
42
第 4 章 テキストと組版
テキストのフォーマット
43
第 4 章 テキストと組版
テキストのフォーマット
44
フォント
InCopy アプリケーションオブジェクトのフォントコレクションには、InCopy で利用できるすべてのフォント
が含まれています。これとは対照的に、ドキュメントのフォントコレクションには、そのドキュメントで使
用されているフォントのみが含まれています。ドキュメントのフォントコレクションには、環境に無いフォ
ント(ドキュメントで使用されているが InCopy では利用できないフォント)も含まれます。アプリケーショ
ンフォントとドキュメントフォントの違いを調べる方法を、次のスクリプトに示します(完全なスクリプト
については、FontCollections を参照してください)。
//Shows the difference between the fonts collection of the application
//and the fonts collection of a document.
var myApplicationFonts = app.fonts;
var myDocument = app.documents.add();
var myStory = myDocument.stories.item(0);
var myDocumentFonts = myDocument.fonts;
var myFontNames = myApplicationFonts.everyItem().name;
if(myDocumentFonts.length > 0){
var myDocumentFontNames = myDocumentFonts.everyItem().name;
var myString = "Document Fonts:¥r";
for(var myCounter = 0;myCounter<myDocumentFontNames.length; myCounter++){
myString += myDocumentFontNames[myCounter] + "¥r";
}
}
myString += "¥rApplication Fonts:¥r";
for(var myCounter = 0;myCounter<myFontNames.length; myCounter++){
myString += myFontNames[myCounter] + "¥r";
}
myStory.contents = myString;
注意 : フォント名は通常、familyName<tab>fontStyle という形式で示されます。familyName はフォントファ
ミリー名、<tab> はタブ文字、fontStyle はフォントスタイル名です。次に例を示します。
"Adobe Caslon Pro<tab>Semibold Italic"
フォントの適用
テキストのある範囲にローカルフォントを適用するには、appliedFont プロパティを使用します。次のスク
リプトにその例を示します(チュートリアルスクリプトの ApplyFont より)。
//Given a font name "myFontName" and a text object "myText"
myText.appliedFont = app.fonts.item(myFontName);
また、次のスクリプトのように、フォントファミリー名とフォントスタイルを指定してフォントを適用する
こともできます。
myText.appliedFont = app.fonts.item("Adobe Caslon Pro");
myText.fontStyle = "Semibold Italic";
テキストプロパティの変更
InCopy のテキストオブジェクトには、そのフォーマット属性に対応する多数のプロパティが用意されていま
す。単なる挿入点にも、テキストのフォーマットに影響を与える多数のプロパティ(その挿入点が含まれて
いる段落とほぼ同じプロパティ)が用意されています。SetTextProperties というチュートリアルスクリプトに
は、テキストオブジェクトのすべてのプロパティを設定する方法が示されています。次のスクリプトにその
例を示します。
第 4 章 テキストと組版
テキストのフォーマット
45
スタイルの作成と適用
前述のいくつかの例でローカルフォーマットを適用する方法を示しましたが、ここでは、文字スタイルや段
落スタイルを使用してテキストをフォーマットする方法について説明します。スタイルを使用すると、
フォーマットされたテキストとスタイルの間にリンクが作成されます。そのため、スタイルの再定義、特定
のスタイルでフォーマットされたテキストの収集、テキストの検索や変更などが簡単に行えます。段落スタ
イルや文字スタイルは、テキストのフォーマット作業を効率化する上で重要な役割を果たします。段落と文
字スタイルはテキストにフォーマットを設定する場合に生産性の鍵となるものであり、テキストにフォー
マットを適用するどんなスクリプトにとっても中心的な存在になるはずです。
第 4 章 テキストと組版
テキストのフォーマット
46
テキストオブジェクトの appliedParagraphStyle プロパティを使用せずに applyParagraphStyle メソッドを
使用する利点は、既存のフォーマットをオーバーライドできる点にあります。スタイルにプロパティを設定
しても、ローカルフォーマットは変更されずに保持されます。
新規ドキュメントの作成時に、スタイルが存在するかどうかを確認しているのは、アプリケーションのデ
フォルトスタイルとして同じ名前のスタイルが存在している可能性があるからです。その場合、同じ名前で
新しいスタイルを作成しようとするとエラーが発生します。
第 4 章 テキストと組版
テキストの検索と変更
47
スタイルの削除
ユーザーインターフェイスでスタイルを削除する際には、タグ付けされたスタイルでテキストのフォーマッ
ト方法を選択することができますが、InCopy スクリプティングでもこれと同じことが行えます。次のスクリ
プトにその例を示します(チュートリアルスクリプトの RemoveStyle より)。
//Remove the paragraph style myParagraphStyleA and replace with myParagraphStyleB.
myParagraphStyleA.remove(myDocument.paragraphStyles.item("myParagraphStyleB"));
テキストの検索と変更
検索/変更機能は、テキストを操作するための最も強力なツールの 1 つであり、スクリプティングに完全に
対応しています。スクリプトを使用すれば、ユーザーインターフェイスでは利用できない様々なオプション
が指定できます。InCopy では、次の 3 つの方法でテキストを検索できます。
テキストやテキストフォーマットを検索して、別のテキストやテキストフォーマットに変更できます。
この場合は、findTextPreferences オブジェクトや changeTextPreferences オブジェクトを使用して、
findText メソッドや changeText メソッドのパラメーターを指定します。
正規表現を使用したテキスト検索(grep)を実行できます。この場合は、findGrepPreferences オブジェ
クトや changeGrepPreferences オブジェクトを使用して、findGrep メソッドや changeGrep メソッドのパ
ラメーターを指定します。
第 4 章 テキストと組版
テキストの検索と変更
48
指定された字形(とそのフォーマット)を検索して、別の字形やフォーマットに置換できます。この場
合は、findGlyphPreferences オブジェクトや changeGlyphPreferences オブジェクトを使用して、
findGlyph メソッドや changeGlyph メソッドのパラメーターを指定します。
どの検索/変更メソッドにも、reverseOrder という 1 つのオプションパラメーターがあります。このパラ
メーターで、検索結果を返す順序を指定できます。検索/変更操作の結果に基づいて、ストーリーのテキス
トを追加したり削除したりする場合は、40 ページの「テキストオブジェクトと反復処理」で説明したテキス
ト参照の問題に注意する必要があります。この問題が発生する場合は、返されたテキストオブジェクトのコ
レクションを逆順で処理するようにループを設定するか、または、検索結果を逆順で返すように設定して、
そのコレクションを通常の順序で処理します。
検索/変更の環境設定
テキストを検索する前に、検索/変更の環境設定を消去することで、前回の設定を引き継がないようにする
ことができます。また、必要に応じていくつかの検索/変更環境設定を指定して、対象となるテキスト、
フォーマット、正規表現、字形などを指定することができます。検索/変更操作を行う一般的な手順を次に
示します。
1.
2.
検索/変更のパラメーターを設定します。
3.
検索/変更操作を実行します。
4.
検索/変更の環境設定を再び消去します。
指定したテキスト文字列を検索して別の文字列に置換する方法を、次のスクリプトに示します(完全なスク
リプトについては、ChangeText を参照してください)。
第 4 章 テキストと組版
テキストの検索と変更
49
テキスト文字列を検索してフォーマットを適用することもできます。次のスクリプトにその例を示します
(チュートリアルスクリプトの FindChangeStringFormatting より)
。
第 4 章 テキストと組版
テキストの検索と変更
50
注意 : findChangeTextOptions オブジェクトで使用できる wholeWord と caseSensitive の 2 つのプロパティ
は、findChangeGrepOptions オブジェクトでは使用できません。これは、正規表現の文字列で同等のオプショ
ンを表現できるからです。大文字と小文字を区別しない場合は (?i) を使用し、区別する場合は (?-i) を使用
します。単語の先頭に一致するには ¥> を使用し、単語の末尾に一致するには ¥< を使用し、単語の境界に一致
するには ¥b を使用します。
grep 検索/変更の利用例として、マークアップテキスト(タグでフォーマットが指定されているプレーンテ
キスト)を InCopy 形式のテキストに変換する処理があります。簡単なテキストマークアップスキームとして
は、PageMaker の段落タグがあります(これは、PageMaker のタグ付きテキスト形式のファイルとは異なり
ます)。このスキームでマークアップされたテキストファイルでは、次の例のように、段落スタイルの名前が
段落の先頭に示されます。
第 4 章 テキストと組版
テキストの検索と変更
51
第 4 章 テキストと組版
表
52
表
convertTextToTable メソッドを使用して、既存のテキストから表を作成したり、ストーリー内の任意の挿入
点に空の表を作成することができます。次のスクリプトでは、3 つの異なる方法で表を作成しています(完全
なスクリプトについては、MakeTable を参照してください)。
第 4 章 テキストと組版
表
53
表にヘッダー行とフッター行を作成する方法を、次のスクリプトに示します(完全なスクリプトについては、
HeaderAndFooterRows を参照してください)。
第 4 章 テキストと組版
表
54
第 4 章 テキストと組版
自動修正
55
脚注
ストーリーに脚注を追加する方法を、次のスクリプトに示します(完全なスクリプトについては、Footnotes
を参照してください)。
第 4 章 テキストと組版
脚注
56
5
ユーザーインターフェイス
章の更新ステータス
CS6
変更なし
JavaScript で作成できるダイアログボックスは、「はい」か「いいえ」で答えられる単純な質問をするための
ダイアログボックスか、テキストを入力するためのダイアログボックスに限られていますが、より複雑なダ
イアログボックスを使用したいこともあります。InCopy スクリプティングを使用すれば、ポップアップリス
ト、テキスト入力フィールド、数値入力フィールドなどの一般的なユーザーインターフェイスコントロール
を備えたダイアログボックスを作成できます。ユーザー(または自分)から情報を受け取って、それに基づ
いて処理を実行したい場合は、dialog オブジェクトが役に立ちます。
この章では、InCopy のダイアログボックスを使用したスクリプトについて説明します。最初は簡単なサンプ
ルスクリプトから始めて、徐々に複雑なスクリプトへと進んでいきます。
注意 : JavaScript で InCopy スクリプトを作成する場合は、Adobe ScriptUI コンポーネントを使用してユーザー
インターフェイスを作成することもできます。この章には、ScriptUI スクリプティングのチュートリアルも含
まれています。詳しくは、『Adobe Creative Suite® 5 JavaScript Tools Guide』を参照してください。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。
ダイアログボックスの概要
InCopy のダイアログボックスは、InCopy の他のスクリプティングオブジェクトと同じく、1 つのオブジェク
トです。次の図に示すように、ダイアログボックスには様々な要素(「ウィジェット」と呼ばれます)を含め
ることができます。
dialog
dialog column
static text
border panel
checkbox control
radiobutton group
radiobutton control
measurement editbox
dropdown
57
第 5 章 ユーザーインターフェイス
最初の InCopy ダイアログボックスの作成
58
この図に示されている各アイテムについて、次の表で説明します。
ダイアログボックスの要素
InCopy での名前
テキスト編集フィールド
Text editbox control
数値入力フィールド
ポップアップメニュー
テキスト編集フィールドとポップアップメニューを
組み合わせたコントロール
Combo-box control
チェックボックス
ラジオボタン
Radio-button control
これらのコントロールは、dialog オブジェクトに直接格納されるのではなく、dialogColumn というオブジェ
クトに格納されます。dialogColumn を使用することで、ダイアログボックス内のコントロールの位置を制御
することができます。dialogColumn の中に、別の dialogColumn や borderPanel を含めて、ダイアログボック
スをさらに細かく分割することができます(必要に応じて、dialogColumn や borderPanel の中に別の
dialogColumn や borderPanel を順次含めていくことができます)
。
InCopy の他のスクリプティングオブジェクトと同じように、ダイアログボックスの各パーツにも固有のプロ
パティがあります。例えば、checkboxControl には、表示されるテキストを表すプロパティ(staticLabel)
や、コントロールの状態を表すプロパティ(checkedState)があります。また、dropdown コントロールには、
メニューに表示されるオプションのリストを表すプロパティ(stringList)があります。
スクリプトの中でダイアログボックスを使用するには、まず dialog オブジェクトを作成し、そこに様々なコ
ントロールを配置して、ダイアログボックスを表示します。そして、スクリプトの処理に必要な値をそれら
のコントロールから収集します。ダイアログボックスは、破棄されるまで InCopy のメモリ内に維持されま
す。したがって、ダイアログボックスをメモリ内に保持しておき、そのプロパティに保存されているデータ
を複数のスクリプトで使用することが可能です。ただし、ダイアログボックスを保持するためにメモリが消
費されるので、必要がなくなったら破棄するようにしてください。一般的には、スクリプトが処理を終了す
る前にダイアログボックスオブジェクトを破棄します。
第 5 章 ユーザーインターフェイス
「Hello World」へのユーザーインターフェイスの追加
59
さらに複雑なユーザーインターフェイスの作成
次の例では、様々なコントロールをサンプルダイアログボックスに追加します。この例では、次のようなダ
イアログボックスが作成されます。
完全なスクリプトについては、ComplexUI を参照してください。
第 5 章 ユーザーインターフェイス
さらに複雑なユーザーインターフェイスの作成
60
第 5 章 ユーザーインターフェイス
ScriptUI の使用
61
ScriptUI の使用
JavaScript では、ScriptUI というアドビ システムズ社独自のスクリプティングコンポーネントを使用して、
ユーザーインターフェイス要素の作成や定義が行えます。ScriptUI を使用すれば、InCopy の組み込みの
dialog オブジェクトよりも格段に複雑なインタラクティブダイアログボックスを作成できます。また、フ
ローティングパレットやプログレスバーも作成できます。
AppleScript や VBScript でも、ScriptUI を使用して定義されたユーザーインターフェイス要素にアクセスするこ
とができます。do script メソッド(AppleScript の場合)や DoScript メソッド(VBScript の場合)を使用すれ
ば、他のスクリプト言語で書かれたスクリプトを実行できます。
ScriptUI を使用したプログレスバーの作成
JavaScript で ScriptUI を使用してプログレスバーを作成する方法を、次のスクリプトに示します(完全なスク
リプトについては、ProgressBar を参照してください)。このスクリプトで作成したプログレスバーは、
AppleScript や VBScript でも使用することが可能です。
第 5 章 ユーザーインターフェイス
ScriptUI の使用
62
ScriptUI を使用したボタンバーパネルの作成
スクリプトを実行するボタンが並んだフローティングパレットも、JavaScript と ScriptUI を使用して作成する
ことができます。実行するスクリプトはどの言語であってもかまいません。
簡単なフローティングパネルの作成方法を、次のチュートリアルスクリプトに示します。パネルには一連の
ボタンが配置され、各ボタンはディスク上のスクリプトに関連付けられています。ボタンをクリックすると
スクリプトが実行されます(このスクリプトで、ダイアログボックスや他のユーザーインターフェイス要素
を表示することができます)。パネル内のボタンには、テキストやグラフィックを表示することができます
(完全なスクリプトについては、ButtonBar を参照してください)。
このチュートリアルスクリプトは、次の形式の XML ファイルを読み込みます。
<buttons>
<button>
<buttonType></buttonType>
<buttonName></buttonName>
<buttonFileName></buttonFileName>
<buttonIconFile></buttonIconFile>
</button>
...
</buttons>
次に例を示します。
第 5 章 ユーザーインターフェイス
ScriptUI の使用
63
第 5 章 ユーザーインターフェイス
ScriptUI の使用
64
6
メニュー
章の更新ステータス
CS6
変更なし
InCopy スクリプティングでは、メニュー項目の追加と削除、任意のメニューコマンドの実行、メニュー項目
へのスクリプトの割り当てを行うことができます。
この章では、InCopy のメニューをスクリプトで操作する方法について説明します。最初は簡単なサンプルス
クリプトから始めて、徐々に複雑なスクリプトへと進んでいきます。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。
メニューモデルについて
InCopy のメニュースクリプトモデルは、アプリケーションのユーザーインターフェイスに表示されるメ
ニューに対応する一連のオブジェクトによって構成されています(メインのメニューバーに表示されるメ
ニューだけでなく、パネルに用意されているメニューも含みます)。menu オブジェクトには、次のオブジェク
トが含まれています。
menuItems — メニューに表示されるメニューオプション (サブメニューは含まれません)
menuSeparators — メニュー内のメニューオプションを区切るために使用される線
submenus — 更なるメニュー選択が含まれているメニューオプション
menuElements — メニューに表示されるすべての menuItems、menuSeparators、submenus
eventListeners — メニューに対するユーザーアクションやスクリプトアクションに応答するためのリス
ナー
events — メニューによって発生した events
どの menuItem にも、associatedMenuAction というプロパティによって menuAction が割り当てられていま
す。そのメニュー項目が選択されたときの処理は、menuAction のプロパティによって定義されています。
ユーザーインターフェイスで定義されている menuAction に加えて、独自の scriptMenuAction を作成して、
メニュー項目にスクリプトを割り当てることができます。
1 つの menuAction や scriptMenuAction は、0 個以上の menuItem に関連付けることができます。
次の図に、様々なメニューオブジェクトの関係を示します。
65
第 6 章 メニュー
メニューモデルについて
66
eventListener
id
eventListener
...
index
label
name
events
event
parent
event
title
...
利用可能なメニューのリスト(テキストファイル)を作成するには、次のスクリプトを実行します(完全な
スクリプトについては、GetMenuNames というチュートリアルスクリプトを参照してください)。InCopy には
多数のメニューがあるので、このスクリプトの実行には時間がかかる場合があります。
第 6 章 メニュー
メニューモデルについて
67
ローカライゼーションとメニュー名
InCopy スクリプティングでは、menuItem、menu、menuAction、submenu はすべて名前で参照されます。した
がって、アプリケーションがインストールされているロケールに依存せずにオブジェクトを指定する方法が
必要になります。これを行うには、ロケールに依存せずに特定の項目を参照するための文字列が格納されて
いる内部データベースを使用します。例えば、次のスクリプトを使用すれば、ロケールに依存しないメ
ニューアクション名を取得することができます(完全なスクリプトについては、GetKeyStrings を参照してく
ださい)。
第 6 章 メニュー
スクリプトからのメニューアクションの実行
68
注意 : ロケールに依存しない名前を取得する場合は、menu、menuItem、submenu の名前を取得するよりも、
menuAction の名前を取得するほうが便利です。menuAction のタイトルは、単一の文字列である場合が多いか
らです。その他のメニューオブジェクトの多くからは、getKeyStrings メソッドで複数の文字列が返されま
す。
ロケールに依存しない名前を取得したら、スクリプトで使用することができます。この文字列を使用したス
クリプトは、現在使用している InCopy と異なるロケールにインストールされている InCopy でも正常に機能
します。
ロケールに依存しない文字列を現在のロケールに変換するには、次のスクリプトを使用します(チュートリ
アルスクリプトの TranslateKeyString より)。
var myString = app.translateKeyString("$ID/Convert to Note");
alert(myString);
スクリプトからのメニューアクションの実行
InCopy に組み込まれている menuAction は、いずれもスクリプトから実行することができます。すべての
menuAction が menuItem に割り当てられているとは限りませんが、その点を除けば、スクリプトから
menuAction を実行することは、ユーザーインターフェイスでメニューオプションを選択することとまったく
同じです。例えば、あるメニューオプションを選択するとダイアログボックスが表示される場合、それに対
応する menuAction をスクリプトから実行すると同じダイアログボックスが表示されます。
スクリプトから menuAction を実行する方法を、次のスクリプトに示します(完全なスクリプトについては、
InvokeMenuAction を参照してください)。
//Get a reference to a menu action.
var myMenuAction = app.menuActions.item("$ID/Convert to Note");
//Run the menu action. This example action will fail if you do not
//have text selected.
myMenuAction.invoke();
注意 : 一般的に、InCopy のプロセスをスクリプトで自動化する場合、メニューアクションやユーザーイン
ターフェイスを選択することで必要な処理を実行するのは、あまりよい方法とは言えません。InCopy のスク
リプトオブジェクトモデルを操作するほうが、はるかに確実で強力な処理を実現できます。メニューアク
ションは、選択やウィンドウの状態など、ユーザーインターフェイスの様々な条件に依存しています。オブ
ジェクトモデルを使用すれば、InCopy ドキュメント内のオブジェクトを直接操作できるので、ユーザーイン
ターフェイスに依存することなく、一貫性のある高速な処理を実現できます。
メニューやメニュー項目の追加
InCopy のユーザーインターフェイスと同じように、スクリプトでもメニューやメニュー項目の作成や削除が
行えます。新しい場所に新しいメニューを作成して、あるサブメニューの内容をそのメニューに複製する方
法を、次のサンプルスクリプトに示します(完全なスクリプトについては、CustomizeMenu を参照してくだ
さい)。
第 6 章 メニュー
メニューとイベント
69
このスクリプトで追加したカスタムメニューを削除するには、RemoveSpecialFontMenu スクリプトを実行し
ます。
var myMainMenu = app.menus.item("Main");
var mySpecialFontMenu = myMainMenu.submenus.item("Kozuka Mincho Pro");
mySpecialFontMenu.remove();
メニューとイベント
ユーザーインターフェイスでメニューやサブメニューを選択すると、イベントが生成されます。これと同じ
ように、menuAction や scriptMenuAction を実行した場合にも、イベントが生成されます。スクリプトを使
用すれば、これらのイベントに応答するために eventListener を登録することができます。様々なメニュー
スクリプティングコンポーネントのイベントを次の表に示します。
オブジェクト
イベント
説明
menu
メニューの内容が表示される前に、登録したスクリプトが実
行されます。
afterInvoke
関連付けられている menuItem が選択されて、onInvoke イベン
トが発生した後に、登録したスクリプトが実行されます。
beforeInvoke
関連付けられている menuItem が選択されて、onInvoke イベン
トが発生する前に、登録したスクリプトが実行されます。
afterInvoke
関連付けられている menuItem が選択されて、onInvoke イベン
トが発生した後に、登録したスクリプトが実行されます。
beforeInvoke
関連付けられている menuItem が選択されて、onInvoke イベン
トが発生する前に、登録したスクリプトが実行されます。
scriptMenuAction の有効/チェックのステータスに対する内
scriptMenuAction
部要求が行われる前に、登録したスクリプトが実行されます。
onInvoke
scriptMenuAction が呼び出されたときに、登録したスクリプ
トが実行されます。
submenu
submenu の内容が表示される前に、登録したスクリプトが実行
されます。
event や eventListener について詳しくは、第 7 章「イベント」を参照してください。
メニューに表示する項目を変更するには、beforeDisplay event に対する eventListener を追加します。メ
ニューが選択されると、登録したスクリプト(メニュー項目の有効化/無効化や名前の変更などの、メ
ニューに関連するタスクを実行するスクリプト)が eventListener によって実行されます。この仕組みは、
利用可能なフォント、最近使用したドキュメント、開いているウィンドウなどをメニューに表示するために、
内部的に使用されています。
第 6 章 メニュー
スクリプトメニューアクションの操作
70
スクリプトメニューアクションの操作
scriptMenuAction を使用すると、menuAction を新しく作成して、onInvoke event の発生時に指定のスクリプ
トを実行することができます。
scriptMenuAction を作成してメニュー項目に割り当てる方法を、次のスクリプトに示します(完全なスクリ
すべての scriptMenuAction を削除することもできます。次のスクリプトにその例を示します(チュートリア
ルスクリプトの RemoveAllScriptMenuActions より)
。このスクリプトでは、scriptMenuAction のメニューリス
トも削除されますが、作成したメニューやサブメニューは削除されません。
#targetengine "session"
app.scriptMenuActions.everyItem().remove();
現在のすべての scriptMenuAction のリストを作成することができます。次のスクリプトにその例を示します
(チュートリアルスクリプトの GetScriptMenuActions より)
。
var myScriptMenuActionNames = app.scriptMenuActions.everyItem().name;
//Open a new text file.
var myTextFile = File.saveDialog("Save Script Menu Action Names As", undefined);
//If the user clicked the Cancel button, the result is null.
if(myTextFile != null){
//Open the file with write access.
myTextFile.open("w");
for(var myCounter = 0; myCounter < myScriptMenuActionNames.length; myCounter++){
myTextFile.writeln(myScriptMenuActionNames[myCounter]);
}
myTextFile.close();
}
scriptMenuAction を使用して、beforeDisplay event の発生時にスクリプトを実行することもできます。こ
の場合は、scriptMenuAction の状態に対する内部要求が行われる前に(メニュー項目が表示される直前に)
スクリプトが実行されます。これは、スクリプトでメニュー名を変更したり、有効/チェックのステータス
を設定したりする場合に特に役立ちます。
次のサンプルスクリプトでは、beforeDisplay event に対する eventListener を追加して、現在の選択を確認
するようにしています。何も選択されていない場合は、eventListener のスクリプトによってメニュー項目が
第 6 章 メニュー
スクリプトメニューアクションの操作
71
7
イベント
章の更新ステータス
CS6
変更なし
InCopy スクリプティングでは、アプリケーションやドキュメントの一般的なイベント(ファイルのオープ
ン、新規ファイルの作成、印刷、ディスク上のテキストファイルやグラフィックファイルの読み込みなど)
に応答することができます。アプリケーションで発生するイベントは、event オブジェクトによって表されま
す。イベントにスクリプトを割り当てるには、eventListener というスクリプトオブジェクトを使用します。
イベントに割り当てるスクリプトは、通常のスクリプトとほとんど同じですが、通常のスクリプトはユー
ザーが(スクリプトパネルから)実行するのに対して、イベントに割り当てるスクリプトは自動的に(目的
のイベントが発生したときに)実行される点が異なります。
この章では、InCopy のイベントを使用したスクリプトについて説明します。最初は簡単なサンプルスクリプ
トから始めて、徐々に複雑なスクリプトへと進んでいきます。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。
この章では、アプリケーションやドキュメントに関連するイベントについて説明します。メニューに関連す
るイベントについては、第 6 章「メニュー」を参照してください。
InCopy のイベントスクリプトモデルは、Worldwide Web Consortium(W3C)勧告のドキュメントオブジェク
トモデルイベントに似ています。詳しくは、http://www.w3c.org を参照してください。
イベントスクリプトモデルについて
InCopy のイベントスクリプトモデルは、アプリケーションで発生する各種のイベントに相当する一連のオブ
ジェクトによって構成されています。その中心となるのが event オブジェクトです。これは、InCopy のユー
ザーインターフェイスで行われる特定のアクション(またはスクリプトの処理に相当するアクション)を表
します。
イベントに応答するには、そのイベントを受け取るオブジェクトに eventListener を登録します。そのオブ
ジェクトが指定のイベントを受け取ると、eventListener のハンドラー関数に定義されているスクリプト関
数(スクリプト関数か、ディスク上のスクリプトファイルへの参照)が実行されます。
次の表に、eventListener で応答できるイベントを示します。これらのイベントは、メニュー選択、キーボー
ドショートカット、スクリプトアクションなどの任意の方法で発生させることができます。
72
第 7 章 イベント
イベントスクリプトモデルについて
ユーザー
インターフェイス
イベント
任意のメニューア
クション
閉じる
書き出し
読み込み
新規
イベント名
説明
オブジェクトタイプ
メニューやサブメニューが表示される
前に発生。
Event
スクリプトメニューアクションが表示
または変更される前に発生。
Event
beforeInvoke
メニュー項目が選択された後、メ
ニューアクションの内容が実行される
前に発生。
Event
afterInvoke
メニューアクションが実行された後に
発生。
Event
onInvoke
メニューアクションやスクリプトメ
ニューアクションの実行時に発生。
Event
「ドキュメントを閉じる」要求が発行
された後、ドキュメントが閉じられる
前に発生。
DocumentEvent
afterClose
ドキュメントが閉じられた後に発生。
DocumentEvent
beforeExport
書き出し要求が発行された後、ドキュ
メントまたはページアイテムが書き出
される前に発生。
ImportExportEvent
afterExport
ドキュメントまたはページアイテムが
書き出された後に発生。
ImportExportEvent
beforeImport
ファイルが読み込まれる前、ファイル
がドキュメントに読み込まれる前(配
置される前)に発生。
ImportExportEvent
afterImport
ファイルが読み込まれた後、ファイル
がページに配置される前に発生。
ImportExportEvent
beforeClose
beforeNew
afterNew
開く
beforeOpen
afterOpen
プリント
beforePrint
afterPrint
「新規ドキュメント」要求が発行され
た後、ドキュメントが作成される前に
発生。
DocumentEvent
新規ドキュメントが作成された後に発
生。
DocumentEvent
「ドキュメントを開く」要求が発行さ
れた後、ドキュメントが開かれる前に
発生。
DocumentEvent
ドキュメントが開かれた後に発生。
DocumentEvent
「ドキュメントのプリント」要求が発
行された後、ドキュメントがプリント
される前に発生。
DocumentEvent
ドキュメントがプリントされた後に発
生。
DocumentEvent
73
第 7 章 イベント
イベントスクリプトモデルについて
ユーザー
インターフェイス
イベント
イベント名
復帰
beforeRevert
afterRevert
保存
beforeSave
afterSave
複製を保存
beforeSaveACopy
afterSaveACopy
別名で保存
beforeSaveAs
afterSaveAs
説明
74
オブジェクトタイプ
「ドキュメント復帰」要求が発行され
た後、保存されている以前の状態にド
キュメントが戻される前に発生。
DocumentEvent
保存されている以前の状態にドキュメ
ントが戻された後に発生。
DocumentEvent
「ドキュメントの保存」要求が発行さ
れた後、ドキュメントが保存される前
に発生。
DocumentEvent
ドキュメントが保存された後に発生。
DocumentEvent
「ドキュメントの複製保存」要求が発
行された後、ドキュメントが保存され
る前に発生。
DocumentEvent
ドキュメントが保存された後に発生。
DocumentEvent
「ドキュメントの別名保存」要求が発
行された後、ドキュメントが保存され
る前に発生。
DocumentEvent
ドキュメントが保存された後に発生。
DocumentEvent
イベントプロパティとイベントの伝達について
ユーザーやスクリプトによってアクションが実行されてイベントが発生すると、そのイベントに応答可能な
スクリプティングオブジェクトにイベントが伝達されます。特定のイベントに対する eventListener が登録
されているオブジェクトにそのイベントが伝達されると、その eventListener が呼び出されます。1 つのイベ
ントが複数のオブジェクトに伝達されて、複数のオブジェクトで処理が行われる場合もあります。
イベントの伝達には、次の 3 種類があります。
伝達しない — イベントターゲットに登録されている eventListener のみが呼び出されます。伝達しない
イベントの例としては、beforeDisplay イベントがあります。
キャプチャ — スクリプトオブジェクトモデルの最上位(アプリケーション)から始まって、イベント
ターゲットまで伝達されます。target の上位にあるオブジェクトに登録されている、そのイベントに応
答可能なすべての eventListener でイベントが処理されます。
バブル — target から伝達が開始されます。まず、target に登録されている応答可能な eventListener
が呼び出されます。次に、スクリプトオブジェクトモデルの上方向にイベントが伝達されます。スクリ
プトオブジェクトモデルで target の上位にあるオブジェクトに登録されている、そのイベントに応答可
能な eventListener が呼び出されます。
次の表に、event のプロパティの詳細と、スクリプトオブジェクトモデルでのイベント伝達に与える影響を
示します。
第 7 章 イベント
eventListener の操作
75
プロパティ
説明
Bubbles
true の場合、event が発生したオブジェクトの上位にあるスクリプティングオブ
ジェクトにその event が伝達されます。
Cancelable
true の場合、target における event のデフォルトの動作をキャンセルできます。
これを行うには、PreventDefault メソッドを使用します。
Captures
true の場合、イベント伝達のキャプチャフェーズで、イベントのターゲットオブ
ジェクトの上位にあるスクリプティングオブジェクトに登録されている
eventListener でイベントが処理できるようになります。例えば、他の
eventListener が呼び出される前に、アプリケーションの eventListener でド
キュメントイベントに応答することができます。
CurrentTarget
event を処理している現在のスクリプティングオブジェクト。この表の Target を
参照してください。
DefaultPrevented
true の場合、現在の target(この表の Target を参照)における event のデフォ
ルト動作が実行されず、アクションがキャンセルされます。
event の伝達プロセスの現在のステージ。
EventType
event のタイプを表す文字列(
「beforeNew」など)
。
PropagationStopped
true の場合、current target 以降への伝達が中止されます(この表の Target を
参照してください)。イベントの伝達を中止するには、stopPropagation メソッド
を使用します。
Target
event を発生させたオブジェクト。例えば、beforeImport イベントの Target はド
キュメントであり、beforeNew イベントの Target はアプリケーションです。
TimeStamp
event が発生した日時。
eventListener の操作
eventListener を作成するときには、イベントのタイプ(文字列)
、イベントハンドラー(JavaScript 関数ま
たはファイル参照)、イベントのキャプチャフェーズで eventListener を呼び出すかどうかを指定します。特
定のイベントに対して eventListener を追加する方法を、次のスクリプトに示します(完全なスクリプトに
ついては、AddEventListener を参照してください)。
#targetengine "session"
main();
function main(){
var myEventListener = app.addEventListener("afterNew", myDisplayEventType,
false);
}
function myDisplayEventType(myEvent){
alert("This event is the " + myEvent.eventType + " event.");
}
このスクリプトで作成した eventListener を削除するには、次のスクリプトを実行します(チュートリアル
スクリプトの RemoveEventListener より)。
app.removeEventListener("afterNew", myDisplayEventType, false);
1 つの eventListener でイベントが処理されても、そのイベントを監視している他の eventListener があれ
ば、そこでも処理が行われる場合があります(イベントの伝達方法によって異なります)。例えば、
afterOpen イベントは、アプリケーションとドキュメントの両方の eventListener で監視されている可能性
があります。
第 7 章 イベント
eventListener の操作
76
eventListener は、現在の InCopy セッションを超えて保持されることはありません。すべての InCopy セッ
ションで eventListener を利用できるようにしたい場合は、スタートアップスクリプト用のフォルダーであ
る Startup Scripts にスクリプトを追加します(スクリプトのインストールについて詳しくは、第 2 章「はじめ
に」を参照してください)。ドキュメントに eventListener スクリプトを追加しても、ドキュメントとともに
保存されたり、INX に書き出されたりすることはありません。
注意 : eventListener を定義するスクリプトで問題が発生した場合は、その eventListener を削除するスクリ
プトを実行するか、InCopy を終了して再起動します。
(外部ファイルではなく)スクリプトの中で定義されているハンドラー関数を使用する eventListener では、
#targetengine "session" を使用する必要があります。このスクリプトを #targetengine "main"(デフォル
トの設定)で実行すると、イベントの発生時に関数が使用できず、エラーが発生します。
スクリプトオブジェクトモデルの中で 1 つのイベントが伝達されて、複数の eventListener が呼び出される
場合があります。次のサンプルスクリプトでは、様々なオブジェクトに登録されている eventListener が 1
つのイベントによって呼び出されます(完全なスクリプトについては、MultipleEventListeners を参照してく
ださい)。
#targetengine "session"
main();
function main(){
var myApplicationEventListener = app.eventListeners.add("beforeImport",
myEventInfo, false);
var myDocumentEventListener = app.documents.item(0).eventListeners.add
("beforeImport", myEventInfo, false);
}
function myEventInfo(myEvent){
var myString = "Current Target: " + myEvent.currentTarget.name;
alert(myString);
}
このスクリプトを実行してファイルを配置すると、ドキュメントの名前を示す警告と、アプリケーションの
名前を示す警告が順に表示されます。
次のサンプルスクリプトでは、サポートされている各イベントの eventListener を作成して、簡単なダイア
ログボックスにイベントに関する情報を表示しています。完全なスクリプトについては、EventListenersOn を
参照してください。
main()
function main(){
app.scriptPreferences.version = 5.0;
var myEventNames = [
"beforeQuit", "afterQuit",
"beforeNew", "afterNew",
"beforeOpen", "afterOpen",
"beforeClose", "afterClose",
"beforeSave", "afterSave",
"beforeSaveAs", "afterSaveAs",
"beforeSaveACopy", "afterSaveACopy",
"beforeRevert", "afterRevert",
"beforePrint", "afterPrint",
"beforeExport", "afterExport",
"beforeImport", "afterImport"
] ;
for (var myCounter = 0; myCounter < myEventNames.length; myCounter ++){
app.addEventListener(myEventNames[myCounter], myEventInfo, false);
}
}
function myEventInfo(myEvent){
var myString = "Handling Event: " +myEvent.eventType;
myString += "¥r¥rTarget: " + myEvent.target + " " +myEvent.target.name;
myString += "¥rCurrent: " +myEvent.currentTarget + " "
myStirng += myEvent.currentTarget.name;
myString += "¥r¥rPhase: " + myGetPhaseName(myEvent.eventPhase );
第 7 章 イベント
「afterNew」eventListener の例
77
アプリケーションオブジェクトのすべての eventListener をオフにする方法を、次のサンプルスクリプトに
示します。完全なスクリプトについては、EventListenersOff を参照してください。
//EventListenersOff.jsx
//An InCopy CS6 JavaScript
#targetengine "session"
app.eventListeners.everyItem().remove();
「afterNew」eventListener の例
afterNew イベントは、ユーザー名、ドキュメントの作成日、著作権情報、その他の作業に関する情報などを
ドキュメントに追加したい場合に便利です。ドキュメントのメタデータ(ファイル情報または XMP 情報とも
呼ばれます)にこのような情報を追加する方法を、次のサンプルスクリプトに示します。完全なスクリプト
リストについては、AfterNew というチュートリアルスクリプトを参照してください。
第 7 章 イベント
「afterNew」eventListener の例
78
8
注釈
章の更新ステータス
CS6
変更なし
InDesign および InCopy では、インライン式の編集上の注釈機能を使用して、ストーリーのフローに影響を与
えることなく、注釈としてコメントを直接テキストに追加できます。注釈機能は、ワークグループ環境で使
用する目的で設計されています。特定の条件に基づいて、注釈に色を付けたり、オン / オフを切り替えたりす
ることもできます。
注釈を作成するには、ツールボックスの注釈ツール、注釈/新規注釈のコマンド、または注釈パレットの新
規注釈アイコンを使用します。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。また、InCopy で注釈を操作する方法を理解しているものとして
います。
注釈の入力と読み込み
ここでは、InCopy ドキュメントに注釈を配置する方法について説明します。InCopy のユーザーインターフェ
イスを使用して注釈を作成したり、注釈のテキストを置換したりするのと同じように、スクリプトを使用し
て注釈を作成したり、注釈にテキストを挿入したりすることができます。
79
第 8 章 注釈
注釈からテキストへの変換およびテキストから注釈への変換
80
注釈からテキストへの変換およびテキストから注釈への変換
注釈からテキストへの変換
注釈をテキストに変換するには、convertToText メソッドを使用します。次のサンプルにその例を示します。
完全なスクリプトについては、ConvertToText を参照してください。
var myDocument = app.documents.item(0);
var myStory = myDocument.stories.item(0);
//Convert the note to text
myStory.notes.item(0).convertToText();
テキストから注釈への変換
テキストを注釈に変換するには、convertToNote メソッドを使用します。次のサンプルにその例を示します。
完全なスクリプトについては、ConvertToNote を参照してください。
var myDocument = app.documents.item(0);
myStory = myDocument.stories.item(0);
//Convert text to note
myStory.words.item(0).convertToNote();
第 8 章 注釈
注釈間の移動
81
9
変更のトラック
章の更新ステータス
CS6
変更なし
原稿作成や編集作業の進行中に、ドキュメントの変更のトラック、表示/非表示、適用、取り消しを実行で
きます。すべての変更は記録されていて画面で確認できるので、ドキュメントの見直しが簡単に行えます。
この章では、変更のトラックに関する一般的な操作をスクリプトで実行する方法について説明します。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。また、InCopy でテキストを操作する方法や、組版に関する基本
的な用語を理解しているものとしています。
変更のトラック
ここでは、スクリプトを使用して、トラックされた変更に移動したり、変更を適用および取り消しする方法
について説明します。
既存のストーリーに含まれているテキストの追加や削除、移動が行われると、その変更がゲラビューおよび
ストーリービューに示されます。
次のスクリプトでは、previousItem メソッドを使用して、挿入点の前の変更に移動します。
82
第 9 章 変更のトラック
変更のトラック
83
トラックされた変更の適用と取り消し
ストーリーに対する変更が行われた場合、変更のトラック機能を使用してすべての変更を見直したり、ス
トーリーにすべての変更を組み込むかどうかを決定できます。ユーザーは、すべてのユーザーが行った変更
(テキストの追加や削除、移動)を適用および取り消しすることができます。
次のスクリプトでは、変更を適用します。
var myDocument = app.documents.item(0);
var myStory = myDocument.stories.item(0);
var myChange = myStory.changes.item(0);
myChange.accept () ;
次のスクリプトでは、変更を取り消します。
var myDocument = app.documents.item(0);
var myStory = myDocument.stories.item(0);
var myChange = myStory.changes.item(0);
myChange.reject() ;
第 9 章 変更のトラック
変更のトラックの環境設定
84
10
アサイン
章の更新ステータス
CS6
変更なし
アサインは、InDesign ファイルに含まれるテキストやグラフィック用のコンテナで、InCopy で表示および編
集できます。一般的に、アサインには、関連するテキストやグラフィックが含まれます(雑誌の記事を構成
する本文、キャプション、イラストなど)。InDesign でのみ、アサインとアサインファイルを作成できます。
このチュートリアルでは、アサインに関する一般的な操作をスクリプトで実行する方法について説明します。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。
アサインオブジェクト
この節では、アサインとアサインファイルを操作する方法について説明します。スクリプトを使用して、ア
サインファイルを開いてアサインのプロパティを取得できます。
アサインファイルを開く
既存のアサインファイルを開く方法を、次のスクリプトに示します。
//Open an exist assignment file
var myDocument = app.open(File("/c/a.icma"));
var myAssignement = myDocument.assignments.item(0);
アサインのプロパティに対する繰り返し処理
アサインのプロパティ(アサイン名、ユーザー名、アサインファイルの場所、アサインの書き出しオプショ
ンなど)を取得する方法を、次のスクリプトに示します。
var myName = myAssignement.name;
var myUserName = myAssignement.userName;
var myDocument = app.documents.item(0);
var myAssignement = myDocument.assignments.item(0);
var myFilePath = myAssignement.filePath;
var myFramecolor = myAssignement.frameColor;
// exportOptions property can be:
// AssignmentExportOptions.ASSIGNED_SPREADS
// AssignmentExportOptions.EMPTY_FRAMES
// AssignmentExportOptions.EVERYTHING
var myExportOptions = myAssignement.exportOptions;
アサインパッケージ
アサインパッケージ(InCopy で作成した .incp ファイル)は、アサインファイルが含まれた圧縮フォルダー
です。createPackage メソッドを使用すると、アサインをパッケージ化することができます。次のサンプルス
クリプトでは、この方法でパッケージファイルを作成しています。
85
第 10 章 アサイン
アサインのストーリー
86
アサインのストーリー
次の図に、InCopy のアサインオブジェクトモデルを示します。アサインドキュメントには、1 つ以上のアサ
インが含まれます。アサインには、アサインされたストーリーが含まれないか、または 1 つ以上のアサイン
されたストーリーが含まれます。アサインされた各ストーリーは、テキストストーリーまたは画像ストー
リーを参照します。
document
1
1…*
assignment
1
0…*
この節では、アサインされたストーリーとアサインストーリーのプロパティを取得する方法について説明し
ます。
アサインされたストーリーオブジェクト
アサインオブジェクトから、アサインされたストーリーを取得する方法を、次のスクリプトに示します。
var myDocument = app.documents.item(0);
var myAssignement = myDocument.assignments.item(0);
var myAssignmentStory = myAssignement.assignedStories.item(0);
11
XML
章の更新ステータス
CS6
変更なし
XML(Extensible Markup Language)は、World Wide Web Consortium(www.w3.org)で作成と管理が行われて
いる、テキストベースのマークアップシステムです。XML では、HTML(Hypertext Markup Language)と同じ
ように、不等号記号で囲まれたマークアップタグ(<article> や <para> など)が使用されます。HTML では、
使用できるタグが事前に定義されていますが、XML では独自のタグを作成して、ドキュメントの構造をより
詳細に記述することができます。
高い柔軟性を備えている XML は、データの保存形式として広く利用されています。InCopy には、XML データ
をページレイアウトに読み込むための様々な機能が用意されていますが、それらはスクリプトを使用して制
御できます。
ここでは、読者が第 2 章「はじめに」を既に読んでおり、スクリプトを作成、インストール、実行する方法
を理解しているものとして説明を行います。また、XML、DTD、XSLT に関する基礎知識を持っていることを前
提としています。
概要
XML はフォーマットを行うためのものではなく、ドキュメントの構造を記述するためのものです。したがっ
て、ページレイアウト作業で XML を活用するには、やや複雑な手順が必要になります。InCopy は、XML に完
全かつ柔軟に対応できますが、次のような制約があります。
InCopy ドキュメントに読み込んだ XML 要素は、XML 構造に対応する InCopy 要素に変換されます。InCopy
によって表現された XML 要素は、元の XML 要素とは異なります。
1 つの XML 要素は、レイアウト上で 1 つのみ使用できます。レイアウト上の XML 要素の情報を複製した
い場合は、XML 要素そのものを複製する必要があります。
XML 要素のレイアウト上での出現順序は、XML 構造での出現順序とほぼ同じになります。
XML 要素に関連付けられているストーリー内のテキストは、その要素のデータになります。
InCopy での XML スクリプティングの推奨事項
XML ファイルの処理は、InCopy の外部で(InCopy のレイアウトに XML ファイルを読み込む前に)そのほと
んどを行うのが一般的です。InCopy の外部では、XML エディターや XML パーサーなどの様々な便利なツール
が利用できます。
大規模な XML データ構造に含まれている要素を再配置したり複製したりする場合は、XSLT を使用して XML
を変換することを推奨します。これは、XML ファイルを読み込むときに実行できます。
XML 要素のスクリプティング
ここでは、XML 環境設定や XML 読み込み環境設定の指定、XML の読み込み、XML 要素の作成、XML 属性の追
加を行う方法について説明します。ここでは、XML コンテンツ自体を操作するスクリプトについて説明しま
87
第 11 章 XML
XML 要素のスクリプティング
88
す。XML 要素にフォーマットを適用するスクリプトについては、92 ページの「ストーリーへの XML 要素の追
加」を参照してください。
第 11 章 XML
XML 要素のスクリプティング
89
XML の読み込み
XML 読み込み環境設定を指定したら、XML ファイルを読み込みます。次のスクリプトにその例を示します
(チュートリアルスクリプトの ImportXML より)。
myDocument.importXML(File("/c/completeDocument.xml"));
XML ファイルの内容を特定の XML 要素に読み込む必要がある場合は、ドキュメントではなく XML 要素の
importXML メソッドを使用します。次のスクリプトにその例を示します(チュートリアルスクリプトの
ImportXMLIntoElement より)。
var myXMLTag = myDocument.xmlTags.add("xml_element");
var myXMLElement = myDocument.xmlElements.item(0).xmlElements.add(myXMLTag);
//Import into the new XML element.
myXMLElement.importXML(File("/c/completeDocument.xml"));
XML タグのロード
XML ファイルの XML コンテンツを読み込まずに、XML タグだけを読み込むことができます。この機能は、
XML データを読み込む前にタグとスタイルのマッピングを行いたい場合に便利です。次のスクリプトにその
例を示します(チュートリアルスクリプトの LoadXMLTags より)
。
myDocument.loadXMLTags(File("/c/test.xml"));
XML タグの保存
ファイルから XML タグをロードするのとは逆に、XML タグをファイルに保存することもできます。これを行
うと、タグだけが XML ファイルに保存されます。ドキュメントデータは保存されません。この処理は、XML
を書き出すより高速で、生成されるファイルも小さくなります。XML タグを保存する方法を、次のサンプル
スクリプトに示します(完全なスクリプトについては、SaveXMLTags を参照してください)。
myDocument.saveXMLTags(File("/c/xml_tags.xml"), "Tag set created October 5, 2006");
第 11 章 XML
XML 要素のスクリプティング
90
XML 要素の作成
通常、XML 要素は XML ファイルを読み込んで作成しますが、InCopy スクリプティングを使用して XML 要素
を作成することもできます。次のスクリプトにその例を示します(チュートリアルスクリプトの
CreateXMLElement より)。
var myXMLTag = myDocument.xmlTags.add("myXMLTag");
var myRootElement = myDocument.xmlElements.item(0);
var myXMLElment = myRootElement.xmlElements.add(myXMLTag);
myXMLElement.contnets = "This is an XML element containing text."
XML 要素の移動
move メソッドを使用して、XML 構造内の XML 要素を移動できます。次のスクリプトにその例を示します
(チュートリアルスクリプトの MoveXMLElement より)
。
var myDocument = app.documents.add();
var myRootXMLElement = myDocument.xmlElements.item(0);
var myXMLTag = myDocument.xmlTags.add("xml_element");
var myXMLElementA = myRootXMLElement.xmlElements.add(myXMLTag);
myXMLElementA.contents = "A";
var myXMLElementB = myRootXMLElement.xmlElements.add(myXMLTag);
myXMLElementB.contents = "B";
var myXMLElementC = myRootXMLElement.xmlElements.add(myXMLTag);
myXMLElementC.contents = "C";
var myXMLElementD = myRootXMLElement.xmlElements.add(myXMLTag);
myXMLElementD.contents = "D";
//Move the XML element containing "A" to after
//the XML element containing "C"
myXMLElementA.move(LocationOptions.after, myRootXMLElement.xmlElements.item(2));
//Move the XML element containing "D" to the beginning of its parent.
myRootXMLElement.xmlElements.item(-1).move(LocationOptions.atBeginning);
//Place the XML structure so that you can see the result.
myDocument.stories.item(0).placeXML(myRootXMLElement);
XML 要素の削除
XML 要素を削除すると、レイアウトと XML 構造の両方から XML 要素が削除されます。次のスクリプトにその
例を示します(チュートリアルスクリプトの DeleteXMLElement より)
。
myRootXMLElement.xmlElements.item(0).remove();
XML 要素の複製
XML 要素を複製すると、新しい XML 要素が、XML 構造内の元の XML 要素の直後に追加されます。次のスク
リプトにその例を示します(チュートリアルスクリプトの DuplicateXMLElement より)
。
var myDocument = app.documents.item(0);
var myRootXMLElement = myDocument.xmlElements.item(0);
//Duplicate the XML element containing "A"
var myNewXMLElement = myRootXMLElement.xmlElements.item(0).duplicate();
//Change the content of the duplicated XML element.
myNewXMLElement.contents = myNewXMLElement.contents + " duplicate";
XML 構造からのアイテムの削除
XML 要素とテキストオブジェクトとの関連付けを削除するには、untag メソッドを使用します。次のスクリ
プトにその例を示します。このメソッドを使用すると、XML 要素との関連付けは削除されますが、オブジェ
第 11 章 XML
XML 要素のスクリプティング
91
クトそのものは削除されません。XML 要素が削除されたコンテンツは、親の XML 要素に関連付けられます。
XML 要素がルート XML 要素の場合、その XML 要素に関連付けられているレイアウトオブジェクト(テキスト
またはページアイテム)は、ドキュメントに保持されます (完全なスクリプトについては、UntagElement を
参照してください)。
var myXMLElement = myDocument.xmlElements.item(0).xmlElements.item(-2);
myXMLElement.untag();
XML コメントの作成
XML コメントは、XML データ構造に注釈を作成する場合に使用します。XML コメントを追加する方法を、次
のスクリプトに示します(チュートリアルスクリプトの MakeXMLComment より)。
var myRootXMLElement = myDocument.xmlElements.item(0);
var myXMLElement = myRootXMLElement.xmlElements.item(1);
myXMLElement.xmlComments.add("This is an XML comment.");
XML 処理命令の作成
処理命令(PI:Processing Instruction)とは、XML ドキュメントを読み込むアプリケーションに対する命令が
含まれている XML 要素のことです。XML 処理命令は、InCopy では無視されますが、他のアプリケーションで
使用するために InCopy の XML 構造に挿入することができます。XML ドキュメントには複数の処理命令を含め
ることができます。
XML 処理命令は、ターゲットと値の 2 つの要素によって構成されます。XML 処理命令の例を次に示します。
<?xml-stylesheet type="text/css" href="generic.css"?>
XML 属性の操作
XML 属性とは、XML 要素に関連付けられている「メタデータ」のことです。要素に属性を追加する方法を、
次のスクリプトに示します。XML 要素には任意の数の XML 属性を追加できますが、各属性の名前はその要素
内で固有のものであることが必要です(例えば、「id」という名前の属性を 2 つ使用することはできません)。
XML 要素に XML 属性を追加する方法を、次のスクリプトに示します(完全なスクリプトについては、
MakeXMLAttribute を参照してください)。
var myDocument = app.documents.item(0);
var myRootXMLElement = myDocument.xmlElements.item(0);
var myXMLElementB = myRootXMLElement.xmlElements.item(1);
myXMLElementB.xmlAttributes.add("example_attribute", "This is an XML attribute. It will not
appear in the layout!");
スクリプトを使用して属性を直接作成する以外に、XML 要素を変換して属性を作成することもできます。こ
れを行うと、XML 要素のテキスト内容が XML 属性の値として使用され、XML 要素の親に追加されます。XML
要素の名前が属性の名前になるので、同じ名前を持つ属性が XML 要素の親に既に存在している場合は、作成
に失敗します。XML 要素にページアイテムが含まれている場合、それらのページアイテムはレイアウトから
削除されます。
XML 属性を XML 要素に変換する際には、新しい XML 要素を追加する場所を指定できます。新しい XML 要素
は、XML 属性の親の先頭または末尾に追加できます。デフォルトでは、親要素の先頭に追加されます。
第 11 章 XML
ストーリーへの XML 要素の追加
92
新しい XML 要素に XML マークアップタグを指定することもできます。このパラメーターを省略すると、その
XML 属性が含まれている XML 要素と同じ XML タグを使用して新しい XML 要素が作成されます。
XML 要素を XML 属性に変換する方法を、次のスクリプトに示します(完全なスクリプトについては、
ConvertElementToAttribute というチュートリアルスクリプトを参照してください)。
var myDocument = app.documents.add();
var myRootXMLElement = myDocument.xmlElements.item(0);
var myXMLTag = myDocument.xmlTags.add("myXMLElement");
var myXMLElement = myRootXMLElement.xmlElements.add(myXMLTag);
myXMLElement.contents = "This is content in an XML element.";
myXMLElement.convertToAttribute();
//Place the XML content so that you can see the result of the change.
var myStory = myDocument.stories.item(0);
myStory.placeXML(myRootXMLElement);
XML の書き出し
InCopy ドキュメントから XML を書き出す方法としては、ドキュメント内の XML 構造全体を書き出す方法と、
1 つの XML 要素(とその要素に含まれているすべての子 XML 要素)を書き出す方法があります。次のスクリ
プトにその例を示します(完全なスクリプトについては、ExportXML を参照してください)。
myDocument.exportFile("XML", File("/c/test.xml")
ストーリーへの XML 要素の追加
これまでの節では、XML データを InCopy ドキュメントに読み込んで、ドキュメント内の XML 構造を操作す
る方法について説明しました。この節では、XML 情報をストーリーに読み込んでフォーマットを行う方法に
ついて説明します。
第 11 章 XML
ストーリーへの XML 要素の追加
93
XML 要素とテキストとの関連付け
テキストに既存の XML 要素を関連付けるには、placeXML メソッドを使用します。このメソッドを使用する
と、ページアイテムの内容が XML 要素の内容に置き換わります。次のスクリプトにその例を示します
(チュートリアルスクリプトの PlaceXML より)。
myDocument.stories.item(0).placeXML(xmlElements.item(0);
スタイルへのタグのマッピング
XML テキスト要素にフォーマットを適用する最も簡単な方法の 1 つが、xmlImportMaps を使用してタグをス
タイルにマッピングする方法です。この方法では、特定の XML タグを段落スタイルや文字スタイルに関連付
けることができます。ドキュメントの mapTagsToStyles メソッドを使用すると、テキストにスタイルが適用
されます。次のスクリプトにその例を示します(チュートリアルスクリプトの MapTagsToStyles より)
。
第 11 章 XML
ストーリーへの XML 要素の追加
94
タグへのスタイルのマッピング
XML 要素が関連付けられていないフォーマットされたテキストを XML 構造に移動したい場合は、スタイルを
タグにマッピングします。これによって、段落スタイルや文字スタイルを XML タグに関連付けることができ
ます。これを行うには、xmlExportMaps オブジェクトを使用して、XML タグとスタイルの間にリンクを作成
し、mapStylesToTags メソッドを使用して該当する XML 要素を作成します。次のスクリプトにその例を示し
ます(チュートリアルスクリプトの MapStylesToTags より)。
var myDocument = app.documents.item(0);
//Create a style to tag mapping.
myDocument.xmlExportMaps.add(myDocument.paragraphStyles.item("heading 1"),
myDocument.xmlTags.item("heading_1"));
myDocument.xmlExportMaps.add(myDocument.paragraphStyles.item("heading 2"),
myDocument.xmlTags.item("heading_2"));
myDocument.xmlExportMaps.add(myDocument.paragraphStyles.item("para 1"),
myDocument.xmlTags.item("para_1"));
myDocument.xmlExportMaps.add(myDocument.paragraphStyles.item("body text"),
myDocument.xmlTags.item("body_text"));
//Apply the style to tag mapping.
myDocument.mapStylesToXMLTags();
XML 要素へのスタイルの適用
タグとスタイルをマッピングしたり、XML 要素が関連付けられているテキストやページアイテムにスタイル
を適用したりする以外に、XML 要素にスタイルを直接適用することもできます。applyParagraphStyle およ
び applyCharacterStyle メソッドを使用する方法を、次のスクリプトに示します (完全なスクリプトについ
ては、ApplyStylesToXMLElements を参照してください)。
第 11 章 XML
ストーリーへの XML 要素の追加
95
第 11 章 XML
ストーリーへの XML 要素の追加
96
XML 表の操作
HTML 標準の表タグでデータがマークアップされている場合、InCopy はその XML データを自動的に表セルに
読み込みます。デフォルトの表マークアップを使用できないか、使用を避けたい場合は、
convertElementToTable メソッドを使用して XML 要素を表に変換できます。
このメソッドを使用するには、表に変換する XML 要素が特定の構造になっている必要があります。表の各行
が特定の XML 要素に対応しており、その要素の中に、行内の各セルに対応する一連の XML 要素が含まれてい
る必要があります。このメソッドを使用する方法を、次のスクリプトに示します(完全なスクリプトについ
ては、ConvertXMLElementToTable を参照してください)。テーブル行を表すために使用されている XML 要素
は、このプロセスによって変換されます。
var myDocument = app.documents.add();
//Create a series of XML tags.
var myRowTag = myDocument.xmlTags.add("row");
var myCellTag = myDocument.xmlTags.add("cell");
var myTableTag = myDocument.xmlTags.add("table");
//Add XML elements.
var myRootXMLElement = myDocument.xmlElements.item(0);
with(myRootXMLElement){
var myTableXMLElement = xmlElements.add(myTableTag);
with(myTableXMLElement){
for(var myRowCounter = 1;myRowCounter < 7;myRowCounter++){
with(xmlElements.add(myRowTag)){
myString = "Row " + myRowCounter;
for(var myCellCounter = 1; myCellCounter < 5; myCellCounter++){
with(xmlElements.add(myCellTag)){
contents = myString + ":Cell " + myCellCounter;
}
}
}
}
}
}
var myTable = myTableXMLElement.convertElementToTable(myRowTag, myCellTag);
var myStory = myDocument.stories.item(0);
myStory.placeXML(myDocument.xmlElements.item(0));
第 11 章 XML
ストーリーへの XML 要素の追加
myString = "Row " + myRowCounter;
for(var myCellCounter = 1; myCellCounter < 5; myCellCounter++){
with(xmlElements.add(myCellTag)){
contents = myString + ":Cell " + myCellCounter;
}
}
}
}
}
}
var myTable = myTableXMLElement.convertElementToTable(myRowTag, myCellTag);
var myTableXMLElement = myDocument.xmlElements.item(0).xmlElements.item(0);
myTableXMLElement.applyTableStyle(myTableStyle);
myTableXMLElement.xmlElements.item(0).applyCellStyle(myCellStyle);
myTableXMLElement.xmlElements.item(5).applyCellStyle(myCellStyle);
myTableXMLElement.xmlElements.item(10).applyCellStyle(myCellStyle);
myTableXMLElement.xmlElements.item(15).applyCellStyle(myCellStyle);
myTableXMLElement.xmlElements.item(16).applyCellStyle(myCellStyle);
myTableXMLElement.xmlElements.item(21).applyCellStyle(myCellStyle);
myDocument.stories.item(0).placeXML(myDocument.xmlElements.item(0));
myTable.alternatingFills = AlternatingFillsTypes.alternatingRows;
97">
/
Preuzimanje
Samo prijateljski podsetnik. Dokument možete pogledati ovde. Ali što je najvažnije, naš AI ga je već pročitao. Može da objasni složene stvari jednostavnim rečima, odgovori na vaša pitanja na bilo kom jeziku i pomogne vam da brzo navigirate čak i najdužim ili najkomplikovanijim dokumentima.
Reklama