AYNiMacさんで、プレーンテキストエディタのCotEditor 0.7.0が公開されていた。前のバージョン(0.6.5)からKEdit.appに代わって私のDockのFinderの右隣に鎮座しているのだが、実は前バージョンでAppleScript上の不具合を発見、報告したつもりでいたが、どうも報告してなかったらしい&直ってないので報告と回避策をば。
で、以下検証。CotEditorで新しい書類を作って、適当に何か入力。この時必ず改行を入れる事。で、適当に複数の行を選択しておいて、以下のAppleScriptを実行。
tell application "CotEditor"
tell document 1
set line ending to CRLF
set a to contents of selection
set line ending to LF
set b to contents of selection
end tell
return {a, b}
end tell
line ending
は書類の改行コードだ。さて、aとbの違いがわかるだろうか。CRLFの時は、選択範囲より前に存在する改行コードの個数と同じ数だけ、選択範囲の開始位置が前にずれているはずだ(だから選択範囲が1行目までの時は同じ)。これは上記スクリプトと同じ様にしてrange of selection
を取得すると理由が判る。rangeの示す数字自体は変わらないのだ。しかしながら改行コードが変わると、contents of selecton
の内容は改行コードの変更を反映したものになる。改行コードの部分で1バイト増えるわけだ。そしてその分range of selection
が指す範囲とcontents of selecton
が示す範囲がずれてしまうようだ。ちなみに、contents of document x
で取得した場合の改行コードは常にLFになっているようだ。書類全体を処理したいのであればこっちを処理した方が楽だろう。
回避策だが、AppleScriptで処理する場合はcontents of selecton
を取得する前にline ending
を取得して保持。line ending
をLFにして処理をした後、line ending
を元に戻すというのが月並だけど確実だと思う。