[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1498) [JS_InDesign CS2]section_add.jsx
まだちょっと完成とは言い難いんだけど、とりあえず版。
なんでかっていうと、どうやらCS2から
var myPage = hit_obj_list[i].parentTextFrames[0].parent;
でページが返るとは限らない。
グループ化されていたりするとグループが返る。その親はドキュメント。
うまい方法をご存知の方は教えてくださいませ。
だーっと平で書いたんで、参照のやりとりがなくて割と早いです。
/*
section_add.jsx
(c)2005-2006 www.seuzo.jp
特定の段落スタイルからセクションを設定します。
2006.12.10 ver.0.4 JavaScriptで書き直し。
*/
// ExtendScript Toolkit用ディレクティブ
#target indesign
$.level = 1; // デバッガ有効に
////////////////////////////////////////////エラー処理
function myerror(mess) {
if (arguments.length > 0) { alert(mess); }
exit();
}
////////////////////////////////////////////リストダイアログ
/*
myTitle ダイアログ(バー)のタイトル
myPrompt メッセージ
myList ポップアップに展開するリスト
result 選択したリスト番号
*/
function listDialog(myTitle, myPrompt, myList){
var myTitle, myPrompt, myList;
var myDialog = app.dialogs.add({name:myTitle,canCancel:true});
with(myDialog){
with(dialogColumns.add()){
// プロンプト
staticTexts.add({staticLabel:myPrompt});
}
with(dialogColumns.add()){
// ポップアップメニュー
var mySelecteditem = dropdowns.add({stringList:myList, selectedIndex:0});
}
}
// ダイアログボックスを表示
if(myDialog.show() == true){
var ans = mySelecteditem.selectedIndex;
//正常にダイアログを片付ける
myDialog.destroy();
//選択したアイテムの番号を返す
return ans
} else {
// ユーザが「キャンセル」をクリックしたので、メモリからダイアログボックスを削除
myDialog.destroy();
exit();
}
}
if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")}
var mydocument = app.activeDocument;
var myparagraph_style = mydocument.paragraphStyles;
var myparagraph_style_name = [];
//段落スタイルが1つも設定されていなければ中止
if (myparagraph_style.length == 2) { myerror("段落スタイルがひとつもありません")}
//段落スタイル名のリストを作成
for (var i = 2; i < myparagraph_style.length; i++) {
myparagraph_style_name.push(myparagraph_style[i].name);
}
var ans_int = listDialog("セクションを追加", "段落スタイルを選択してください", myparagraph_style_name);
//検索処理
var myFindStyle = myparagraph_style_name[ans_int];
app.findPreferences = null;
app.changePreferences = null;
app.findPreferences.appliedParagraphStyle = myFindStyle;
var hit_obj_list = mydocument.search('', false, false, false, false);
if (hit_obj_list.length == 0) {myerror(myFindStyle + "が適用されたテキストはありませんでした")}
//セクション作成
var myCunt = 0;
for (var i = 0; i < hit_obj_list.length; i++) {
var myContents = hit_obj_list[i].contents.replace(/[\r\n ]+$/, "");
if (myContents.length == 0) {continue;}//空行のみなら次へ
var myPage = hit_obj_list[i].parentTextFrames[0].parent;
if (myPage.reflect.name != "Page") {continue;}//pageでないものが引っかかっているなら次へ
//1ページ目だけはcontinueNumberingを変更しない
if (myPage.documentOffset == 1) {
mydocument.sections.add({
pageStart:myPage,
continueNumbering:false,
sectionPrefix:"",
marker:myContents,
includeSectionPrefix:false,
});
} else {
mydocument.sections.add({
pageStart:myPage,
continueNumbering:true,
sectionPrefix:"",
marker:myContents,
includeSectionPrefix:false,
});
}
myCunt++;
}
myerror(myCunt + "箇所にセクションを設定しました");