SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
スクリプト作成のための
スクリプト支援
武藤健志
Twitter: @kmuto
2017.9.9 at DTPerのスクリプトもくもく会#3
こんなのを作ってみた
●
スクリプトを書いていると、UIの検索置換の内容をスク
リプト化したいことがある
● InDesignの検索ダイアログの内容を、JavaScriptコード
で書き出す
– テキスト
– 正規表現
– 字形
– オブジェクト
– (文字種変換は内部的にもテキストの一種っぽい)
デモ...の結果
app.findChangeTextOptions.caseSensitive = false;
app.findChangeTextOptions.ignoreDiacritics = false;
app.findChangeTextOptions.ignoreKashidas = true;
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeLockedLayersForFind = false;
app.findChangeTextOptions.includeLockedStoriesForFind = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.kanaSensitive = true;
app.findChangeTextOptions.wholeWord = false;
app.findChangeTextOptions.widthSensitive = true;
app.findTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = "あああ";
app.findTextPreferences.justification = Justification.RIGHT_ALIGN;
// app.findTextPreferences.numberingRestartPolicies = resolve("/@find-text-preferences/@numbering-restart-policies");
// app.findTextPreferences.bulletChar = resolve("/@find-text-preferences/@bullet-char");
// app.findTextPreferences.parent = resolve("/");
app.changeTextPreferences = NothingEnum.NOTHING;
app.changeTextPreferences.changeTo = "いいい";
// app.changeTextPreferences.numberingRestartPolicies = resolve("/@change-text-preferences/@numbering-restart-policies");
// app.changeTextPreferences.bulletChar = resolve("/@change-text-preferences/@bullet-char");
// app.changeTextPreferences.parent = resolve("/");
// app.activeDocument.changeText();)
ポイント
● コピーバッファに文字列を保存
– 既存ドキュメントを壊したくない→app.documents.add()
で空ドキュメント・空テキストフレームを作ってコンテン
ツ配置、app.copy()してドキュメント破棄
– 本当はウィンドウを一切出したくないが、app.copy()は
ウィンドウが必要
● スタイルグループを深追い
● propertiesの解析
気づき:
スタイルグループの取り扱い
● findのappliedParagraphStyle, appliedCharacterStyle,
appliedObjectStyleは妥当なオブジェクトではなく「文字列」
● appliedParagraphStyle, appliedCharacterStyleの文字列か
らはグループ名が落ちてる…
– Yusukeさんのように検索データをいったんファイル保存(XML形式)し
て解析?
– あまりファイルは作りたくないので、別グループに同じスタイル名を
作る人は「ギルティ」ということで考えない
– 再帰でとりあえず最初に一致したものに
新しい革袋?
● appliedObjectStyle
新しい革袋?
● オブジェクトスタイルは、InDesignにとって比
較的新参。そのオブジェクトスタイル向けの
appliedObjectStyleは uE00B というプライ
ベート領域の文字を使ってスタイル名を区切る
● これはもしかして、内部ロジックがいろいろ改
善されていて、実はほかでも使えたり?
検証
● findText/changeText/findGrep/
changeGrep
– appliedParagraphStyle, appliedCharacterStyle
– ○ "スタイルグループ 1ue00b文字スタイル 1";
● findObject
– appliedObjectStyle
– ○ "スタイルグループ 1ue00bオブジェクトスタイル
1";
● changeObject
– appliedObjectStyle
– × "スタイルグループ 1ue00bオブジェクトスタイル 1";
なんだと…
結論:新しい革袋じゃなくて、
やっぱりつぎはぎだったよ…
ちなみにXMLスタイル名にもダメだった orz
なぜ文字列か
● 検索置換は「app.documents[0].findTextPreferences」
ではなく「app.findTextPreferences」で設定
(範囲は「検索置換範囲.findText()」とはなるが)
– たとえばapp.findText()とすると、単一ドキュメントではなく、
関係のない他ドキュメントも含まれる
– 検索や置換のスタイルを「オブジェクト」として取れない可能性
– じゃぁオブジェクトスタイルのはなんで、と問われるとおそらく
何も考えてなかったのではという印象
● アプリケーション手動操作のほうではたぶん中で例外処理し
てるフシがある(検索保存して実行するときも同様)
設定値の展開
●
取得/設定可能値を全部並べるのはだるいので、オブジェ
クトのpropertiesを利用
● ロジック的に簡単にとれる文字列、数値、論理値
(true/false)のもののみを展開
●
さらに別のオブジェクトの値になっているものはちょっと
追いきれない
– // app.change... = resolve("/@change-object-
preferences/@transparency-settings");
みたいな感じでコメントで保持
●
とはいえEnumerator値くらいはなんとかしたい
– Justification.RIGHT_ALIGNみたいなの
逆引き不能…
● Enumeratorオブジェクトには
まともな情報なし
あとはがんばれ
// Enumerator解釈
function getEnumerator(e) {
switch(e) {
case Justification.AWAY_FROM_BINDING_SIDE: return
"Justification.AWAY_FROM_BINDING_SIDE";
case Justification.CENTER_ALIGN: return "Justification.CENTER_ALIGN";
case Justification.CENTER_JUSTIFIED: return "Justification.JUSTIFIED";
case Justification.FULLY_JUSTIFIED: return "Justification.FULLY_JUSTIFIED";
case Justification.LEFT_ALIGN: return "Justification.LEFT_ALIGN";
case Justification.LEFT_JUSTIFIED: return "Justification.LEFT_JUSTIFIED";
case Justification.RIGHT_ALIGN: return "Justification.RIGHT_ALIGN";
case Justification.RIGHT_JUSTIFIED: return "Justification.RIGHT_JUSTIFIED";
case Justification.TO_BINDING_SIDE: return "Justification.TO_BINDING_SIDE";
……
default: return null;
}
}
補足
● ~/Library/Preferences/ExtendScript
ToolkitにESTKのオブジェクトモデルビューア
の元データXMLがあるよ by おおまちさん
● 取り出し自体は簡単にできた(5分で書いた
Rubyスクリプト)ので、あとはこれを反映し
ていく予定
URL
● Hacking InDesign with JavaScript
– https://kmuto.jp/indesign/
● 今回のスクリプト
https://kmuto.jp/indesign/scripts/
dialogs/dialogExportFindSet.jsx
2017, @kmuto

Contenu connexe

Plus de Kenshi Muto

入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実
入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実
入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実Kenshi Muto
 
write once, publish anywhere ……という夢を見た。
write once, publish anywhere ……という夢を見た。write once, publish anywhere ……という夢を見た。
write once, publish anywhere ……という夢を見た。Kenshi Muto
 
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通してKenshi Muto
 
とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法Kenshi Muto
 
スペインExtremadura州Debian i18n会議報告
スペインExtremadura州Debian i18n会議報告スペインExtremadura州Debian i18n会議報告
スペインExtremadura州Debian i18n会議報告Kenshi Muto
 
Rarely Asked Questions
Rarely Asked QuestionsRarely Asked Questions
Rarely Asked QuestionsKenshi Muto
 
オライリー・ジャパンのePUBフォーマットを支える制作システム
オライリー・ジャパンのePUBフォーマットを支える制作システムオライリー・ジャパンのePUBフォーマットを支える制作システム
オライリー・ジャパンのePUBフォーマットを支える制作システムKenshi Muto
 
書籍制作フローを変える「ReVIEW」という解
書籍制作フローを変える「ReVIEW」という解書籍制作フローを変える「ReVIEW」という解
書籍制作フローを変える「ReVIEW」という解Kenshi Muto
 
簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望
簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望
簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望Kenshi Muto
 
商業出版物におけるReVIEW+InDesign組版
商業出版物におけるReVIEW+InDesign組版商業出版物におけるReVIEW+InDesign組版
商業出版物におけるReVIEW+InDesign組版Kenshi Muto
 

Plus de Kenshi Muto (10)

入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実
入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実
入稿ヨシ、ご安全に! CSS組版による商業書籍制作の理想と現実
 
write once, publish anywhere ……という夢を見た。
write once, publish anywhere ……という夢を見た。write once, publish anywhere ……という夢を見た。
write once, publish anywhere ……という夢を見た。
 
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
 
とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法
 
スペインExtremadura州Debian i18n会議報告
スペインExtremadura州Debian i18n会議報告スペインExtremadura州Debian i18n会議報告
スペインExtremadura州Debian i18n会議報告
 
Rarely Asked Questions
Rarely Asked QuestionsRarely Asked Questions
Rarely Asked Questions
 
オライリー・ジャパンのePUBフォーマットを支える制作システム
オライリー・ジャパンのePUBフォーマットを支える制作システムオライリー・ジャパンのePUBフォーマットを支える制作システム
オライリー・ジャパンのePUBフォーマットを支える制作システム
 
書籍制作フローを変える「ReVIEW」という解
書籍制作フローを変える「ReVIEW」という解書籍制作フローを変える「ReVIEW」という解
書籍制作フローを変える「ReVIEW」という解
 
簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望
簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望
簡易マークアップとAH Formatterによる 商業品質を満たした技術書籍制作フローの展望
 
商業出版物におけるReVIEW+InDesign組版
商業出版物におけるReVIEW+InDesign組版商業出版物におけるReVIEW+InDesign組版
商業出版物におけるReVIEW+InDesign組版
 

スクリプト作成のためのスクリプト支援 -検索内容の実行コード書き出し