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

(DTPtechNote:1558) [AS_InDesign CS3]check_fonts



InDesign CS3発売記念

(*
check_fonts
(c)2007 www.seuzo.jp

ドラッグ&ドロップで使用フォント一覧を書き出します。

ver.0.1	2007.06.22	InDesign CS3発売記念

*)

on open of theFiles
	set return to ASCII character 10 --LF改行
	set my_fonts to "" as Unicode text --使用フォントテキスト
	set ind_ver to (("▼InDesignバージョン" & return) as Unicode text) & my ver() & return & return
	set my_docs to (("▼検査ドキュメント" & return) as Unicode text) & return
	set h to ("▼使用フォント一覧" & return & "フォント名	PS名	タイプ	バージョン" & return) as Unicode text
	
	--ファイルのフィルタリング
	set my_files to my file_kind({"ind", "indd"}, {"IDd5"}, theFiles)
	
	--ファイル保存ダイアログ
	if length of my_files > 0 then
		set my_file to (choose file name with prompt "出力ファイルを保存します" default name "font_report.txt")
	end if
	
	--ファイルを開いて処理の開始
	repeat with i in my_files
		tell application "Adobe InDesign CS3"
			set user interaction level of script preferences to never interact --ユーザー操作を禁止します
			try
				open i
				set my_docs to (my_docs & (full name of document 1) as Unicode text) & return
			on error errMsg number errNum
				set user interaction level of script preferences to interact with all --ユーザー操作の再開
				my my_error("ファイルを開く際に誤りが起きました;" & i & return & "処理を中断しますか?" & return & errMsg & return & errNum, false)
			end try
			set my_fonts to my_fonts & my use_fonts() --使用フォントの収集
			close document 1 saving no --ファイルを閉じる
			set user interaction level of script preferences to interact with all --ユーザー操作の再開
		end tell
	end repeat
	
	--書き出しテキストの整形	
	set my_fonts to do shell script "echo " & quoted form of my_fonts & "| sort -u" --ソートして重複行を削除
	set my_fonts to ((current date) as Unicode text) & return & return & ind_ver & return & my_docs & return & h & my_fonts
	my write_file(my_fonts, my_file) --ファイルの書き出し
	
	--終了の合図
	say "Work was finished. " & (length of my_files) & " files were processed."
end open

on run
	my doc_exists()
	set return to ASCII character 10 --LF改行
	set my_fonts to "" as Unicode text --使用フォントテキスト
	set ind_ver to (("▼InDesignバージョン" & return) as Unicode text) & my ver() & return & return
	set my_docs to (("▼検査ドキュメント" & return) as Unicode text) & return
	set h to ("▼使用フォント一覧" & return & "フォント名	PS名	タイプ	バージョン" & return) as Unicode text
	
	set my_file to (choose file name with prompt "出力ファイルを保存します" default name "font_report.txt")
	
	--処理の開始
	tell application "Adobe InDesign CS3"
		set my_docs to (my_docs & (full name of document 1) as Unicode text) & return
		set my_fonts to my_fonts & my use_fonts() --使用フォントの収集
	end tell
	
	--書き出しテキストの整形	
	set my_fonts to do shell script "echo " & quoted form of my_fonts & "| sort -u" --ソートして重複行を削除
	set my_fonts to ((current date) as Unicode text) & return & return & ind_ver & return & my_docs & return & h & my_fonts
	my write_file(my_fonts, my_file) --ファイルの書き出し
	
end run

--------------------------------------------------------●InDesignバージョン確認ルーチン
to ver()
	tell application "Adobe InDesign CS3"
		set my_version to (version of script preferences) as real
		if my_version < 5 or my_version > 5.9 then
			activate
			my my_error("このプログラムはInDesign CS3以外では動作しません", true)
		end if
		return version --アプリケーションバージョンを返す
	end tell
end ver

--------------------------------------------------------●ドキュメントが開かれているかどうか
to doc_exists()
	tell application "Adobe InDesign CS3"
		if not (exists document 1) then
			activate
			my my_error("ドキュメントが開かれていません", true)
		end if
	end tell
end doc_exists

----------------------------------------------●必要なファイルだけをフィルタして返します
to file_kind(extention_list, type_list, theFiles)
	set my_files to {}
	set extention_list to my conv_unicode(extention_list)
	set type_list to my conv_unicode(type_list)
	
	ignoring case
		tell application "Finder"
			repeat with i in theFiles
				if extention_list contains ((name extension of i) as Unicode text) then
					set end of my_files to contents of i
				else if (kind of i) is "フォルダ" as Unicode text then
					activate
					display dialog "フォルダ「" & (name of i) & "」の中の全ファイルを処理します" buttons {"キャンセル", "OK"} default button 2 with icon 0
					set my_files to my_files & my file_kind(extention_list, type_list, every file in folder i)
				else if type_list contains ((file type of i) as Unicode text) then
					set end of my_files to contents of i
				else
					activate
					display dialog "ファイル「" & (name of i) & "」は処理ファイルとして不適当です" buttons {"キャンセル", "OK"} default button 2 with icon 0
				end if
			end repeat
		end tell
	end ignoring
	return my_files
end file_kind

----------------------------------●リストの項目をunicode textにする
to conv_unicode(tmp_list)
	repeat with i in tmp_list
		set contents of i to (contents of i) as Unicode text
	end repeat
	return tmp_list
end conv_unicode

--------------------------------------------------------●使用フォント一覧を返す
to use_fonts()
	set tmp_str to "" as Unicode text
	tell application "Adobe InDesign CS3"
		tell document 1
			repeat with i in every font
				set i to object reference of i
				set full_name to (full name native of i) as Unicode text
				set ps_name to (PostScript name of i) as Unicode text
				set font_type to font type of i
				if font_type = OpenType CID then --フォントタイプがテキストに変換できないことがある(バグくさい)
					set font_type to "OpenType CID"
				else if font_type = TrueType then
					set font_type to "TrueType"
				else if font_type = type 1 then
					set font_type to "type 1"
				else if font_type = CID then
					set font_type to "CID"
				else if font_type = ATC then
					set font_type to "ATC"
				else if font_type = bitmap then
					set font_type to "bitmap"
				else if font_type = OCF then
					set font_type to "OCF"
				else if font_type = OpenType CFF then
					set font_type to "OpenType CFF"
				else if font_type = OpenType TT then
					set font_type to "OpenType TT"
				else
					set font_type to font_type as Unicode text
				end if
				
				set v to (version of i) as Unicode text
				set tmp_str to tmp_str & full_name & tab & ps_name & tab & font_type & tab & v & return
			end repeat
		end tell
	end tell
	return tmp_str
end use_fonts



------------------------------------------★ファイル書き出し
to write_file(str, my_file)
	tell application "Finder"
		set FH to open for access my_file with write permission
		try
			set eof FH to 0
			write ((ASCII character 254) & (ASCII character 255)) to FH --BOMを書き込む
			write str to FH as Unicode text
			--write str to FH
		on error errMsg number errNo
			close access FH
			my my_error("書き込み時のエラーです" & return & errMsg & errNo, true)
		end try
		close access FH
		--update my_file
	end tell
end write_file


----------------------------------●エラー処理
to 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 "Adobe InDesign CS3"
		activate
		beep
		set ANS to button returned of (display dialog err_str buttons my_stop) --警告ダイアログ出してストップ
		if ANS is "中止" then error number -128
	end tell
end my_error