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

(DTPtechNote:703) Re: do shell script



>ちなみに、やろうとしてることは、Illustratorで現在使えるフォントのうち、RomanとJapaneseでふるいにかけて、別々のリストで持ちたいってことです。

で、こんな感じで。

set {roman_list, japanese_list} to current_fonts()


--Illustratorで使えるフォントのうち、RomanとJapaneseのフォントリストを返す。
to current_fonts()
	set bs to ASCII character 128
	set font_db_path to "~/Library/Application" & bs & " Support/Adobe/TypeSpt/AdobeFnt07.lst"
	set font_db to do shell script "tr " & bs & bs & "r " & bs & bs & "n < " & font_db_path & " | perl -ne 'print if s/^(FontName:|WritingScript:)//;'"
	if font_db is "" then
		my my_error("以下のファイルが見つかりません" & return & font_db_path, true)
	else
		--現在Illustratorが認識しているフォント名一覧
		tell application "Illustrator CS" to set all_fonts to name of text fonts
		
		--AdobeFnt07.lstからRomanとJapaneseをふるいにかけ、かつall_fontsに存在するかどうかを確かめる
		set roman_list to {} --Romanのフォントリスト
		set japanese_list to {} --Japaneseのフォントリスト
		repeat with i from 2 to (count paragraph of font_db) by 2
			set tmp_WritingScript to paragraph i of font_db
			if tmp_WritingScript is "Roman" then
				set tmp_FontName to paragraph (i - 1) of font_db
				if all_fonts contains tmp_FontName then set end of roman_list to tmp_FontName
			else if tmp_WritingScript is "Japanese" then
				set tmp_FontName to paragraph (i - 1) of font_db
				if all_fonts contains tmp_FontName then set end of japanese_list to tmp_FontName
			end if
		end repeat
	end if
	return {roman_list, japanese_list}
end current_fonts

----------------------------------●エラー処理
on my_error(err_str, my_stop)
	if my_stop then
		set my_stop to {"中止"}
	else
		set my_stop to {"中止", "続行"}
	end if
	tell application "Illustrator CS"
		set user interaction level to interact with all
		activate
		beep
		set ANS to button returned of (display dialog err_str buttons my_stop with icon stop) --警告ダイアログ出してストップ
		if ANS is "中止" then error number -128
	end tell
end my_error