[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1152) Re: replace-words-with-selection β
なんていうか,まだβなんだけど^^;;
CS用に書き換えてみました。
おうち使い用。。。かな。
(*
replace-words-with-selection 0.2
(c)2003-2005 www.seuzo.jp
特定の文字列を、InDesign上で選択しているインライングラフィックス(またはテキスト)に置換する
●ToDo;
問題点:大きなドキュメントまたはストーリーに対して実行すると,極端に速度が下がる。selectする時の描画のせいだと思う。
●history
2003.05.02 ver.0.1 とりあえず版
2005.06.04 ver.0.2 InDesign CSバージョン。あまりに遅いのでプログレスバーを出してみた
*)
property find_text : ""
--------------------------------------------------------●コントロールルーチン
--★警告
my my_error("このスクリプトはInDesignドキュメント上のテキストの連続置換をします。そのために組み版が変わるかもしれません。それでも続行しますか?", false)
--★起動チェック
my ver()
my doc_exists()
my copy_selection()
--★実行
tell application "InDesign CS_J"
activate
set ANS to (display dialog "現在選択中のオブジェクトを検索文字列と置き換えます" & return & "検索文字列:" default answer find_text buttons {"キャンセル", "ストーリー", "ドキュメント"} default button 3 with icon 1)
set find_text to text returned of ANS
set find_range to button returned of ANS
end tell
set count_hit to my do_it(find_text, find_range)
--★終了ダイアログ
tell application "ShowProgressBar" to quit
tell application "InDesign CS_J"
activate
if count_hit > 0 then
display dialog "とりあえず" & count_hit & "箇所の置換を実行しました"
else
display dialog "とりあえず、置換すべき箇所は見あたりませんでした。"
end if
end tell
--------------------------------------------------------●置換実行ルーチン
to do_it(find_text, find_range)
tell application "InDesign CS_J"
set find preferences to nothing -- 既存の検索環境設定を初期化します。
--検索してオブジェクトを拾う
try
if find_range is "ストーリー" then
set hit_object to search (parent story of selection) with find attributes {find text:find_text, kana sensitive:true}
else
set hit_object to search document 1 with find attributes {find text:find_text, kana sensitive:true}
end if
set count_hit to length of hit_object
on error
my my_error("検索中にエラーが発生しました。", false)
end try
---hit_objectを選択してpaste
set cnt_obj to count hit_object
try
repeat with i from cnt_obj to 1 by -1 --必ずおしりから
my ShowProgressBar("replace-words-with-selection 実行中", find_text & "を置換中... " & (cnt_obj - i) & "/" & cnt_obj, 0, cnt_obj, (cnt_obj - i))
select (item i of hit_object)--ここが遅い
paste
end repeat
on error
my my_error("置換中にエラーが発生しました。", false)
end try
end tell
return count_hit
end do_it
--------------------------------------------------------●InDesignバージョン確認ルーチン
to ver()
tell application "InDesign CS_J"
set my_version to version
if my_version < 3 and my_version > 3.9 then
my my_error("このプログラムはInDesign CS以外では動作しません", true)
end if
end tell
end ver
--------------------------------------------------------●ドキュメントが開かれているかどうか
to doc_exists()
tell application "InDesign CS_J"
if not (exists document 1) then
activate
beep
display dialog "ドキュメントが開かれていません" buttons "キャンセル" default button 1
end if
end tell
end doc_exists
--------------------------------------------------------●選択範囲がテキスト(インライングラフィックス)かどうか? 成功したらコピーされる
to copy_selection()
tell application "InDesign CS_J"
activate
if (exists selection) and (class of selection is text) then
try
copy
on error errMsg number errNum
my my_error("オブジェクトコピー中のエラーです" & return & errMsg & return & errNum, true)
end try
else
my my_error("テキスト(文字列)かインライングラフィックスを選択してください", true)
end if
end tell
end copy_selection
------------------------------------------★エラー処理
on my_error(err_str, my_stop)
set err_str to err_str as Unicode text
if my_stop then
set my_stop to {"中止"}
else
set my_stop to {"中止", "続行"}
end if
tell application "InDesign CS_J"
--set user interaction level to interact with all --ユーザー操作の禁止を解除します
activate
beep
set ANS to button returned of (display dialog err_str buttons my_stop default button 1 with icon stop) --警告ダイアログ出してストップ
if ANS is "中止" then
tell application "ShowProgressBar" to quit
error number -128
end if
end tell
end my_error
--------------------------------------------------------●以下プログレスバー用
to ShowProgressBar(title_str, status_str, mini_value, max_value, my_value)
tell application "ShowProgressBar"
activate
tell window 1
set title to title_str as Unicode text
set string value of text field 1 to status_str as Unicode text
set properties of progress indicator 1 to {minimum value:mini_value, maximum value:max_value, contents:my_value}
end tell
end tell
end ShowProgressBar