[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 + "箇所にセクションを設定しました");