[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:636) TEXT OUT



ちょっと書き直してみました。
かざりがいっぱいで、ただ意味なく長いだけなんですが(^^;;;;; 
#しかもQXPかよ!
オモテにはQXP4.1を出すつもりはないので、ここで。

property cd : ""

on open Doc
	set para_style to my start_up()
	with timeout of 3600 seconds
		tell application "Finder"
			repeat with thisDoc in Doc
				if file type obsolete of thisDoc is "XDOC" then
					tell application "QuarkXPress? 4.10r2J"
						--activate
						open thisDoc use doc prefs yes remap fonts no do auto picture import no
						my TT(para_style)
						close document 1 saving no
					end tell
				end if
			end repeat
		end tell
	end timeout
end open

on run
	set para_style to my start_up()
	with timeout of 3600 seconds
		tell application "QuarkXPress? 4.10r2J"
			--activate
			if exists document 1 then
				my TT(para_style)
				beep 3
			else
				choose file with prompt "処理するドキュメントを選んでください" of type {"XDOC"}
				set thisDoc to result
				open thisDoc use doc prefs yes remap fonts no do auto picture import no
				my TT(para_style)
				close document 1 saving no
			end if
		end tell
	end timeout
end run


--------------------------------------------------------●起動チェック
to start_up()
	my OpenProgress("起動チェック中", 5, "Starting up ...") --プログレスバー登場
	try
		my DescribeProgress("Find osax ...")
		my UpdateProgress(1)
		my confirm_osax("Dialog Director", "http://www.hylight.demon.co.uk/";) --OSAXの確認1
		
		my DescribeProgress("Serial check ...")
		my UpdateProgress(2)
		my p("Ned-d5q-k3r-Nf3")
		
		my DescribeProgress("Version check ...")
		my UpdateProgress(3)
		my ver() --QXPバージョンのチェック
		
		my DescribeProgress("User interface ...")
		my UpdateProgress(4)
		set para_style to my ui()
		
		my UpdateProgress(5)
	on error
		my CloseProgress()
		error "Eroor : StartUP..." number -6000
	end try
	my CloseProgress() --これが正当な終わり方です
	return para_style
end start_up



--------------------------------------------------------●実行ルーチン
on TT(para_style)
	global txt_path, page_txt
	tell application "QuarkXPress? 4.10r2J"
		--activate
		set doc_name to name of document 1 as text
		set txt_path to choose file name with prompt "どこにテキストファイルを書き出しますか?" default name (doc_name & ".txt")
		set ttl_pages to count every page of document 1
		my OpenProgress("書き出し処理中", ttl_pages, " ... ") --プログレスバー登場
		try
			set page_txt to ""
			repeat with i from 1 to ttl_pages
				tell page i of document 1
					set page_name to name
					set page_txt to page_txt & return & "%%QRKPageBegin: " & page_name & "------------------------------" & return
					set cnt_boxes to (count every text box)
					repeat with j from 1 to cnt_boxes
						if para_style then
							tell text box j
								set cnt_para to (count every paragraph)
								repeat with k from 1 to cnt_para
									tell paragraph k
										set page_txt to page_txt & (name of style sheet) & tab & text 1
									end tell
								end repeat
							end tell
						else
							set tmp_str to text of text box j
							if tmp_str is not "" then
								set page_txt to page_txt & tmp_str & return --テキストボックスが終わったら改行を入れる
							end if
						end if
					end repeat
					set page_txt to page_txt & "%%QRKPageEnd: " & page_name & "------------------------------" & return & return & return
					my text_write(txt_path, page_txt)
				end tell
				
				my DescribeProgress((i as text) & "page")
				my UpdateProgress(i)
				
			end repeat
			
		on error
			my CloseProgress()
			error "Eroor : Writing..." number -6001
		end try
		
	end tell
end TT


--------------------------------------------------------●User interfase	段落スタイルを含めるかどうか?
to ui()
	with timeout of 3600 seconds
		tell application "QuarkXPress? 4.10r2J"
			activate
			set para_style to button returned of (display dialog "書き出すテキストに段落スタイルを含めますか?" & return & "スタイルを含めるとやや時間がかかります。" buttons {"キャンセル", "含めない", "含める"} default button 3 with icon 1)
			if para_style is "含める" then
				set para_style to true
			else
				set para_style to false
			end if
			return para_style
		end tell
	end timeout
end ui

--------------------------------------------------------●テキストの出力(追記型)
to text_write(txt_path, my_text)
	tell application "Finder"
		set fh to open for access txt_path with write permission
		try
			write (my_text as text) to fh starting at (get eof fh) + 1
		on error errText
			close access fh
			display dialog "以下の理由によりスクリプトは中断されました" & return & errText
		end try
		close access fh
	end tell
end text_write


--------------------------------------------------------●QuarkXPress バージョン確認ルーチン
to ver()
	tell application "QuarkXPress? 4.10r2J"
		activate
		set QXP_ver to version
		if (QXP_ver as text) contains "Dongleless" then
			beep 10
			display dialog "Dongleless Version" buttons {"キャンセル"} with icon 2
			--error "Dongleless Version" number -6000
		else if (QXP_ver as text) is not "4.10r2J" then
			beep 10
			display dialog "このプログラムはVer. 4.10r2J以外では動作しません" buttons {"キャンセル"} with icon 2
		end if
	end tell
end ver


--------------------------------------------------------●簡単なパスワード制限
to p(wd)
	tell application "Finder"
		if not cd = (creation date of startup disk) then
			set my_messege to "はじめてお使いになる方はパスワードを入力してください"
			set try_count to 3 --リトライ回数
			repeat
				activate
				set ans to text returned of (display dialog my_messege default answer "" with icon 1)
				if ans = wd then --パスワードが合致
					set cd to creation date of startup disk
					exit repeat
				else if try_count > 1 then
					beep 1
					set try_count to try_count - 1
					set my_messege to "パスワードが有効ではありません。もう一度入力してください"
				else --規定回数以上パスワード入力に失敗した
					beep 3
					display dialog "規定回数以上パスワード入力に失敗しました" & return & "処理を中止します" buttons {"キャンセル"} with icon 2
				end if
			end repeat
		end if
	end tell
end p


--------------------------------------------------------●osaxがインストールされているかどうかの確認。
to confirm_osax(osax_name, osax_URL)
	tell application "Finder"
		if not ((exists file osax_name of (path to scripting additions)) or (exists file osax_name of folder "スクリプティング機能追加" of (path to extensions folder))) then
			activate
			display dialog osax_name & "がインストールされていません" & return & osax_URL & return & " からダウンロードしてください" buttons {"キャンセル"} with icon 0
		end if
	end tell
end confirm_osax

--------------------------------------------------------●以下プログレスバー用
to OpenProgress(theTitle, theMax, aDescription) -----★プログレスバー生成(1個以上開かないようにしましょう。混乱します)
	tell application of me to activate
	dd install with grayscale
	dd make dialog {size:[300, 50], style:movable dialog, name:theTitle, contents:[ツ
		{class:static text, contents:aDescription, bounds:[8, 4, 290, 20]}, ツ
		{class:gauge, bounds:[10, 25, 290, 25 + 12], value:0, max value:theMax} ツ
			]}
end OpenProgress

to UpdateProgress(aValue) -----★プログレスバーのアップデート
	tell application of me to activate
	dd set value of item 2 of dialog 1 to aValue
	dd interact with user for max ticks 0
end UpdateProgress

to DescribeProgress(aDescription) -----★カレントワーク(進捗状況)の表示
	dd set contents of item 1 of dialog 1 to aDescription
end DescribeProgress

to CloseProgress() -----★プログレスバー後かたづけ(どんなときも必ずすること!!!特にエラーで落ちたときとか)
	dd delete dialog 1
	if (dd count dialogs) = 0 then dd uninstall
end CloseProgress