はじまりは、TranslatePDFの紹介ページのAppleScriptコードのシンタックスハイライトカラーがまともに機能しておらず、どうにかならんのかいなと考えたところからのスタートでした。
スクリプトエディタに表示されているままの体裁で表示ができれば良いんですが、スクリプトエディタのコードをコピーし、テキストエディットにペーストするとそのままで映し出されます。
以前にターミナルでRTF形式のテキストをHTMLに変換できるといった記事を思い出し調べてみました。
1 |
$ textutil -convert html RTFファイルのパス -output HTMLファイルのパス |
たったこれだけで出来てしまうのだからすごい!
しかもあっという間です。
こんな感じで出来上がり。
見た目はほぼ完璧なんですが、このままコピーしてスクリプトエディタにペーストしても正しく動きません。
on open drop_RTF
repeat with obj in drop_RTF — ドロップされたファイルの数だけ繰り返し
tell application “Finder”
— ファイルの拡張子を取得
set defaultDelimiters to AppleScript’s text item delimiters
set AppleScript’s text item delimiters to “.”
set kakutyoushi to last text item of ((name of obj) as string)
set AppleScript’s text item delimiters to defaultDelimiters
— 拡張子がrtfのものだけ処理する
if kakutyoushi is “rtf” then
set myPath to POSIX path of obj — rtfファイルのパス
set textCount to (length of myPath) – 3
set myHTML to ((characters 1 thru textCount of myPath) as string) & “html” — htmlファイルのパス
set Wquote to ASCII character 34
— shellコマンド
set sh to “textutil -convert html ” & Wquote & myPath & Wquote & ” -output ” & Wquote & myHTML & Wquote
— shell実行
tell application “Terminal”
do script with command sh
end tell
end if
end tell
end repeat
delay 1 — 処理完了を1秒待つ
if application “Terminal” is running then — ターミナルが起動している確認
tell application “Terminal”
quit saving no — 画面を保存せずに終了する
end tell
end if
end open
さてこれからなんですが、これをもっと簡単に量産できるようにとAppleScriptでドロップレットにしてみました。
まずは、全文を掲示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
on open drop_RTF repeat with obj in drop_RTF -- ドロップされたファイルの数だけ繰り返し tell application "Finder" -- ファイルの拡張子を取得 set defaultDelimiters to AppleScript's text item delimiters set AppleScript's text item delimiters to "." set kakutyoushi to last text item of ((name of obj) as string) set AppleScript's text item delimiters to defaultDelimiters -- 拡張子がrtfのものだけ処理する if kakutyoushi is "rtf" then set myPath to POSIX path of obj -- rtfファイルのパス set textCount to (length of myPath) - 3 set myHTML to ((characters 1 thru textCount of myPath) as string) & "html" -- htmlファイルのパス set Wquote to ASCII character 34 -- shellコマンド set sh to "textutil -convert html " & Wquote & myPath & Wquote & " -output " & Wquote & myHTML & Wquote -- shell実行 tell application "Terminal" do script with command sh end tell end if end tell end repeat delay 1 -- 処理完了を1秒待つ if application "Terminal" is running then -- ターミナルが起動している確認 tell application "Terminal" quit saving no -- 画面を保存せずに終了する end tell end if end open |
これをスクリプトエディタに写してアプリケーション形式で保存すれば出来上がりです。とりあえず名称をRTF2HTMLとしました。
こいつにRTF形式のテキストをドロップするだけで、同名のHTMLファイルが出来上がります。
複数のファイルにも対応しますが、拡張子がrtfのものだけを変換します。
ターミナルでコマンドを実行するには、
18 19 20 |
tell application "Terminal" do script with command sh end tell |
変数shにコマンドを代入して実行します。
全体の流れは、ドロップされたファイルの数だけ処理を繰り返すのですが、
ドロップされたオブジェクトdrop_RTFを一つずつ繰り返し作業を行います。
- on open drop_RTF (オブジェクト変数)でドロップされた複数のファイルをオブジェクトに代入する
- repeat with obj in drop_RTFでobjに一つずつ渡しながら数量分繰り返す
- ドロップされたファイルがRTFテキストファイルなのか検証するために、ファイルの拡張子を取得する。
ファイルの拡張子を得るために、AppleScript’s text item delimitersを使います。これはテキストを区切る時に使う文字を指定したりするのですが今回は拡張子ということなので、ピリオドを使います。
(name of obj) as stringでファイルの名前を取得し、ピリオドで区切った時の最後の文字列が拡張子となります。 - 拡張子がrtfのものだけ作業を実行し、それ以外のファイルがあれば次へと作業を飛ばします。
- 次に出来上がったHTMLファイルの保存場所を取得します。
今回は元のRTFファイルの保存場所と同じ場所に拡張子だけ.htmlに変更して保存します。
元RTFテキストファイルの保存場所はPOSIX path of obj で得ます。
ここから拡張子だけをhtmlに変更したものが保存ファイルとなります。
そこで元保存場所の文字列の先頭から全文字数からrtfの3文字分引いた数分にhtmlを繋げれば保存場所となります。
set textCount to (length of myPath) – 3
set myHTML to ((characters 1 thru textCount of myPath) as string) & “html“ - これでshellスクリプトを作成し、コマンドを実行
- すべてのファイルが終われば、不要なターミナルを終了