Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード Twitter

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2008-12-10

[][][]フォント置換

旧BBSでfourさんのフォント置換を改良したものを公開したことがありました。フォントの置換

わけあって、合成フォント内のフォントも置換できるようにしました。うまく置換しない場合もあるようですので、最後に「フォント検索」で確認してください。

(*
Replace_font.applescript
複数のフォントの置換をします。

http://bbs.ddc.co.jp/mt/indesignbbs/archives/10799_20070214164800.html
にあるfourさん(http://psychocat.net/scriptNote/)のスクリプトの改良。
複数のフォントを一度に置換できるようにした。

2007-07-01	ver.0.1	起こし
2008-12-07	ver0.2	合成フォント内の置換ができるようにした。
*)
--===================================★ここから 書き換えてください
--fonts_oldには置き換えたいフォント名。「ファミリー名(タブ)スタイル」に。空行は無視します。
set fonts_old to "" as Unicode text
set fonts_old to fonts_old & "Century Old Style\tRegular" & return
set fonts_old to fonts_old & "Century Old Style\tBold" & return
set fonts_old to fonts_old & "Times\tRoman" & return
set fonts_old to fonts_old & "Courier\tMedium" & return
set fonts_old to fonts_old & "Helvetica\tMedium" & return
set fonts_old to fonts_old & "Helvetica\tBlack" & return
set fonts_old to fonts_old & "Formata\tMedium" & return
set fonts_old to fonts_old & "O\tCRBBold" & return

--fonts_newには置き換えるフォント名。上のfonts_oldと行で対になるようにしてください。
set fonts_new to "" as Unicode text
set fonts_new to fonts_new & "Century Old Style Std\tRegular" & return
set fonts_new to fonts_new & "Century Old Style Std\tBold" & return
set fonts_new to fonts_new & "Times LT Std\tRoman" & return
set fonts_new to fonts_new & "Courier Std\tMedium" & return
set fonts_new to fonts_new & "Helvetica LT Std\tRoman" & return
set fonts_new to fonts_new & "Helvetica LT Std\tBlack" & return
set fonts_new to fonts_new & "ITC Franklin Gothic Std\tMedium" & return
set fonts_new to fonts_new & "OCR B Std\tRegular" & return

--段落スタイル中のフォントも置き換えたい場合はここを「true」に。そうでない場合は「false」にしてください。
set paragraph_style to true

--===================================★ここまで 書き換えてください

my doc_exists()
tell application "Adobe InDesign CS3"
	set fonts_app to name of every font --現在使用できるフォントリスト
	tell document 1
		set fonts_doc to name of every font --ドキュメントで使用されているフォントリスト
		set fonts_nothing to my cannotuse_fonts(fonts_app, fonts_doc)
		if fonts_nothing is not "" then my my_error("(参考)以下のフォントはシステムにありません。" & return & "置き換えリストに含まれていれば置換します" & return & fonts_nothing, false)
	end tell
end tell

repeat with i from 1 to count paragraph of fonts_old
	set a_font_old to (paragraph i of fonts_old) as Unicode text
	set a_font_new to (paragraph i of fonts_new) as Unicode text
	if a_font_old is not ("" as Unicode text) then --空行でないなら以下を実行
		if a_font_new is not in fonts_app then my my_error("(警告)" & a_font_new & "はシステムにないフォントです。", false)
		my replace_composite_font(a_font_old, a_font_new)
		if paragraph_style then my replace_para_style(a_font_old, a_font_new)
		my replace_font(a_font_old, a_font_new)
	end if
end repeat


----------------------------------●ドキュメントが開かれているかどうか
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 cannotuse_fonts(fonts_app, fonts_doc)
	set tmp_str to "" as Unicode text
	repeat with i in fonts_doc
		if i is not in fonts_app then set tmp_str to tmp_str & i & return
	end repeat
	return tmp_str
end cannotuse_fonts

----------------------------------●合成フォント置換
to replace_composite_font(a_font_old, a_font_new)
	set {a_font_old_family, a_font_old_style} to as_split(tab, a_font_old)
	set {a_font_new_family, a_font_new_style} to as_split(tab, a_font_new)
	
	tell application "Adobe InDesign CS3"
		tell document 1
			repeat with i in every composite font
				if name of i is not "[No composite font]" then
					set i to (object reference of i)
					tell i
						repeat with ii in every composite font entry
							set ii to (object reference of ii)
							if (applied font of ii = a_font_old_family) and (font style of ii = a_font_old_style) then
								set applied font of ii to a_font_new_family
								set font style of ii to a_font_new_style
							end if
						end repeat
					end tell
				end if
			end repeat
		end tell
	end tell
end replace_composite_font


----------------------------------●段落スタイル置換
on replace_para_style(a_font_old, a_font_new)
	tell application "Adobe InDesign CS3"
		tell document 1
			set para_style to every paragraph style
			repeat with i in para_style
				set font_name to name of applied font of i
				if font_name is a_font_old then
					set a_font_new to my as_split(tab, a_font_new)
					set properties of i to {applied font:item 1 of a_font_new, font style:item 2 of a_font_new}
				end if
			end repeat
		end tell
	end tell
end replace_para_style

----------------------------------●フォント置換
to replace_font(a_font_old, a_font_new)
	tell application "Adobe InDesign CS3"
		tell document 1
			try
				set applied font of text style ranges of stories whose name of applied font is a_font_old to a_font_new
			on error errMsg number errNum
				--my my_error("以下のフォント置換でエラー" & return & a_font_old & return & a_font_new & return & errMsg & errNum, false)
			end try
		end tell
	end tell
end replace_font



----------------------------------○エラー処理
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

----------------------------------○文字列をリストに分割する
to as_split(thedelimit, theText)
	set oldDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to thedelimit
	set tmpList to every text item of theText
	set AppleScript's text item delimiters to oldDelim
	if length of tmpList is 1 then set tmpList to tmpList & {""} -------★今回のみの処理
	return tmpList
end as_split

Real World Adobe InDesign CS3を見ていたら、英語版には合成フォントってないみたい。メニューに載っていない。祖父江慎さんは日本の文化ってことだな...

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/seuzo/20081210/1228894540