指定のAppleScriptをosadecompileでUTF-8のテキストに変換して、さらにUTF-8(BOMつき)にTextWranglerで変換して、パスを返す
指定のAppleScriptをosadecompileコマンドでUTF-8のテキストに変換し、さらにTextWranglerでBOMつきのUTF-8に変換して返すAppleScriptです。
AppleのXcodeと一緒にインストールされる「FileMerge」は2つのファイルの間の相違点をピックアップするdiff系のツールとしては、Mac OS X上では最高に出来がよく、使いやすいものだと(個人的に)思っています。
これを使ってAppleScriptのプログラムの相違点・変更点をリストアップできると便利ですが、残念ながらFileMergeが扱えるのはテキストファイルであり、AppleScriptのファイルをそのまま渡すことはできません。
そこで、Mac OS X標準装備のosadecompileコマンドを用いてAppleScriptのファイルをテキストファイルに変換し、それをFileMergeに渡せるとよいのではないかと考えました。
FileMergeにはファイルタイプごとに前処理を行うフィルタを設定でき、osadecomileコマンドを呼び出せるとよさそうです。TextWranglerでなくとも、UTF-8をBOMつきのUTF-8に変換するコマンドラインツールがあれば、そちらのほうがよさそうですが……さて、あるものなのか……???
ところが……このAppleScriptの中に日本語の文字列が入っているとうまく行きません。
osadecompileが出力する結果はUTF-8。しかし、そのままではFileMergeが読み込むことはできません。iconvを使ってUTF-8からさまざまな文字コードに変換してFileMergeに渡してもダメ。
さらに調べてみると、UTF-8でもBOMつきのUTF-8に変換すると、FileMergeが処理できることが分かりました。iconvでは役に立たなかったので、BareBones Softwareからフリー配布されているテキストエディタTextWranglerで変換するようにしてみました。
まだ機能を詰め切れていませんが、これで指定のAppleScriptの内容をFileMergeで比較できるように変換できています。
あとは、変換したファイルをいかにFileMergeに渡すかですが…………いっそ、このAppleScriptを/usr/local/binあたりに放り込んでおいて、FileMergeのフィルタから呼び出せばいいのかもしれません。
スクリプト名:指定のAppleScriptをosadecompileでUTF-8のテキストに変換して、さらにUTF-8(BOMつき)にTextWranglerで変換して、パスを返す |
set aFile to choose file set aRes to decompileASandSaveAsUTF8withBOM(aFile) of me –指定のAppleScriptをosadecompileでUTF-8のテキストに変換して、さらにUTF-8(BOMつき)にTextWranglerで変換して、パスを返す on decompileASandSaveAsUTF8withBOM(aFile) set aTmp to ((path to temporary items from system domain) as string) & (do shell script “/usr/bin/uuidgen”) & “.txt” set aTmpFile to POSIX path of aTmp do shell script “/usr/bin/osadecompile “ & quoted form of POSIX path of aFile & ” > “ & quoted form of aTmpFile –TextWranglerを起動して不可視に tell application “TextWrangler” to activate tell application “System Events” tell process “TextWrangler” set visible to false end tell end tell –TextWranglerでUTF8のファイルをUTF8(With BOM)に変換する tell application “TextWrangler” set aDoc to open file aTmp reading as UTF8 file set distEncoding to encoding of aDoc –BOMなしのUTF8だったらBOMつきUTF8に変更する –”Unicode (UTF-8)” –”Unicode (UTF-8, with BOM)” if distEncoding = “Unicode (UTF-8)” then set encoding of aDoc to “Unicode (UTF-8, with BOM)” end if save aDoc add to recent list boolean false –最近使ったファイルの一覧に登録しない close aDoc without saving end tell return aTmp as alias end decompileASandSaveAsUTF8withBOM |