1桁数字を全角に、2桁以上を半角にする−InDesignとmiでやってみる

タイトル通りなのですが、その時使うフォントがプロポーショナルで、全角数字と半角数字のデザインが歪だったりするとなんだかなあなのですが、この要求は結構な率であるのです。
ワードプロセッサ専用機が全盛の頃、モノスペースフォントで、全角、半角、2倍角などとやっていた頃の名残なのでしょうか?
それにしても、なんだかなあ、なのですが、要求されれば仕方のないことです。
そこで、タイトル通り検索してみたところ、InDesignではこんなところが。
<http://72.way-nifty.com/blog/2011/06/indesignjavascr.html>
公開、有難うございます。

■InDesignでは
上のページから引用すると、

GREP検索置換で…
2桁以上数字では「\d+,*\.*\d+」を検索し、結果を「全角英数字→半角英数字」に
1桁の数字では「(?<!\d|\.)\d(?!\d|,|\.)」を検索し、結果を「半角英数字→全角英数字」に
置換します

となっています。
スクリプトを見ても、InDesignの正規表現検索結果に対して文字種変換をする仕様のようです。
この仕様だと、2桁以上の数字を検索し文字種変換する際に「全角.と全角,」も半角にされてしまうところが、私が要求されている仕様上は困るところです。節、項、目の見出し小見出しで「全角の.」が指定されているので、「.,」の全角/半角処理は別個にやりたいのです。

そこで、数字だけ一旦すべて全角にして、半角の「.,」で桁表記された2桁以上の数字列だけ半角にするという方法をAppleScriptで考えてみました。
InDesignのスクリプトは久しぶりだったので、次のドキュメントを参考にしました。

InDesign_ScriptingGuide_AS_JP.pdf
<http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/scripting/InDesign_ScriptingGuide_AS_JP.pdf>

tell application "Adobe InDesign CC"
	activate
	set SelectedStrngs to the selection
	if SelectedStrngs is not {} then
		set {find text preferences, change text preferences, find grep preferences, change grep preferences} to {nothing, nothing, nothing, nothing}
		set width sensitive of find change grep option 1 to false
		--
		set find what of find grep preference 1 to "\\d+"
		set FoundChar to find grep SelectedStrngs
		set find character type of find transliterate preference 1 to half width roman symbols
		set change character type of change transliterate preference 1 to full width roman symbols
		repeat with i in FoundChar
			if (OpenType features of i) = {} then
				change transliterate i
			end if
		end repeat
		--
		set width sensitive of find change grep option 1 to true

		set find what of find grep preference 1 to "[0-9,\\.]{2,}"
		set FoundChar to find grep SelectedStrngs
		set find character type of find transliterate preference 1 to full width roman symbols
		set change character type of change transliterate preference 1 to half width roman symbols
		repeat with i in FoundChar
			change transliterate i
		end repeat
		display notification "終わりました。" with title "完了" subtitle ""
	else
		display notification "文字列を選択してから実行しましょう。" with title "注意!" subtitle ""
	end if
end tell

やはりJavaScriptよりも処理は遅いようですが、要求仕様は満たしています。

■mi.appでは
InDesignで使った方法では、文字種変換の部分をInDesignの機能に負っています。
文字種変換の部分をAppleScriptで全てやってしまえば、どのエディタなどでも使えることになりますが、その前に、mi.appではどうでしょうか?
mi.appでは組み込みの文字種変換が使えそうです。
そこで、mi.appのツールを使ってやってみることにしました。

<<<REPLACE-TEXT-ALL
1
1
<<<REPLACE-TEXT-ALL
2
2
<<<REPLACE-TEXT-ALL
3
3
<<<REPLACE-TEXT-ALL
4
4
<<<REPLACE-TEXT-ALL
5
5
<<<REPLACE-TEXT-ALL
6
6
<<<REPLACE-TEXT-ALL
7
7
<<<REPLACE-TEXT-ALL
8
8
<<<REPLACE-TEXT-ALL
9
9
<<<REPLACE-TEXT-ALL
0
0
<<<TRANSLITERATE-REGEXP-SELECTED(全角英数(A-z,0-9)→半角英数(A-z,0-9))
[0-9,\.]{2,}

‘TRANSLITERATE-REGEXP-SELECTED’が肝ですね。

本来は、

<<<TRANSLITERATE-REGEXP-SELECTED(半角英数(A-z,0-9)→全角英数(A-z,0-9))
\d+
<<<TRANSLITERATE-REGEXP-SELECTED(全角英数(A-z,0-9)→半角英数(A-z,0-9))
[0-9,\.]{2,}

で動作するはずなのですが、現時点でのmi.app version 3.0b4では、‘TRANSLITERATE-REGEXP-SELECTED’が繰り返されると動作が止まるというか1回目の処理で終わってしまうようですので、無骨に1文字ずつ変換しています。

この次は、AppleScript内で文字種変換をやって、文字種変換機能を持たないエディタでも使えるバージョンを考えてみたいと思うのですが、正規表現での検索結果に文字種変換をかけなければいけないので、もう少し考えないと光明が射してこないかなというところです。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中