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を元に戻すというのが月並だけど確実だと思う。
