[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1549) Re: [JS_InDesign CS2]section_add.jsx
- To: minicar2jp.yahoo.co.jp
- Subject: (DTPtechNote:1549) Re: [JS_InDesign CS2]section_add.jsx
- From: ミニカー <minicar2jp.yahoo.co.jp>
- Date: Thu, 31 May 2007 15:43:19 JST
- In-reply-to: <DTPtechNote.1548@tp>
- Reply-to: minicar2jp.yahoo.co.jp
はじめて書き込みさせていただきます。
お聞きしたいのですが、このscriptたちはFreeで使ってもよろしいのでしょうか?
よければ、少し内容を変えて使用したいのですが・・・
>なんだかまだ自信がないんですが^^
>
>
>/*
>section_add.jsx
>(c)2005-2007 www.seuzo.jp
>特定の段落スタイルからセクションを設定します。
>2006.12.10 ver.0.4 JavaScriptで書き直し。
>2007.05.28 ver.0.5 1階層だけグループ化されたインライン中の文字列も対象にできるようにした。いろんなケースに対応できるかどうか、いまだ自信ない。
>
>*/
>
>// 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 ]+$/, "");
> myContents = myContents.replace("", "");//この?には[OBJ]が入る。これってasciiで記述できないのか?よくわからない
> if (myContents.length == 0) {continue;}//空行のみなら次へ
> var myPage = hit_obj_list[i].parentTextFrames[0].parent;
> if (myPage.reflect.name == "Group") {myPage = myPage.parent.parentTextFrames[0].parent}//グループ化されているものは1階だけさかのぼる。これでいいのかな?よくわからない2...
> 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 + "箇所にセクションを設定しました");