RTFからHTMLに変換

はじまりは、TranslatePDFの紹介ページのAppleScriptコードのシンタックスハイライトカラーがまともに機能しておらず、どうにかならんのかいなと考えたところからのスタートでした。

スクリプトエディタに表示されているままの体裁で表示ができれば良いんですが、スクリプトエディタのコードをコピーし、テキストエディットにペーストするとそのままで映し出されます。
以前にターミナルでRTF形式のテキストを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でドロップレットにしてみました。
まずは、全文を掲示します。

これをスクリプトエディタに写してアプリケーション形式で保存すれば出来上がりです。とりあえず名称をRTF2HTMLとしました。
こいつにRTF形式のテキストをドロップするだけで、同名のHTMLファイルが出来上がります。
複数のファイルにも対応しますが、拡張子がrtfのものだけを変換します。

ターミナルでコマンドを実行するには、

変数shにコマンドを代入して実行します。

全体の流れは、ドロップされたファイルの数だけ処理を繰り返すのですが、
ドロップされたオブジェクトdrop_RTFを一つずつ繰り返し作業を行います。

  1. on open drop_RTF (オブジェクト変数)でドロップされた複数のファイルをオブジェクトに代入する
  2. repeat with obj in drop_RTFobjに一つずつ渡しながら数量分繰り返す
  3. ドロップされたファイルがRTFテキストファイルなのか検証するために、ファイルの拡張子を取得する。
    ファイルの拡張子を得るために、AppleScript’s text item delimitersを使います。これはテキストを区切る時に使う文字を指定したりするのですが今回は拡張子ということなので、ピリオドを使います。
    (name of obj) as stringでファイルの名前を取得し、ピリオドで区切った時の最後の文字列が拡張子となります。
  4. 拡張子がrtfのものだけ作業を実行し、それ以外のファイルがあれば次へと作業を飛ばします。
  5. 次に出来上がった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
  6. これでshellスクリプトを作成し、コマンドを実行
  7. すべてのファイルが終われば、不要なターミナルを終了