XText Reference

Managements of AppleScript's text item delimiters

AppleScript では、「AppleScript's text item delimiters」を変更して text と list 間の変換を行うことにより、さまざまなテキスト処理が可能です。しかし、AppleScript's text item delimiters をカチャカチャ切り替えたスクリプトは煩雑になりがちです。そもそも「AppleScript's text item delimiters」と書くのさえめんどくさいものです。

AppleScript's text item delimiters は AppleScript runtime のインスタンスのグローバル変数です。多くの場合、スクリプトを実行しているプロセスの中で共有されて、プロセスが終了するまでデフォルト値 {""}にもどりません。もし AppleScript's text item delimiters がデフォルト値であることを仮定したスクリプトを書いた場合、AppleScript's text item delimiters が変更されているとそのスクリプトはまともに動かないことになります。たとえば、スクリプトメニューで、あるスクリプトが AppleScript's text item delimiters を変更すると、次に実行するスクリプトに影響を与える可能性があります。

ですから、

ということをする必要があります。XText ではこのような負担を最小限にするために、store_delimiters() と restore_delimiters() というハンドラを用意しています。

store_delimiters() が呼ばれる度に、global 変数 "_pre_delims" にその時の AppleScript 's text item delimiters を付け足します。restore_delimiters() を呼ぶことで、AppelScript's text item delimiters を元の値に戻します。store_delimiters() 〜 restore_delimiters() の間では、AppelScript's text item delimiters を自由に替えることができます。

XText のインスタンスメソッドは、処理中に AppleScript's text item delimiters を変更しても必ず元に戻します。

一方、次のクラスメソッドは、AppleScript's text item delimiters を変更します。つまり、store_delimiters() 〜 restore_delimiters() の間で実行されることを仮定しています。

store_delimiters() 〜 restore_delimiters() はネストすることができます。「store_delimiters()」と「restore_delimiters()」が呼ばれる回数が同じなら最終的に AppleScript's text item delimiters の値はもとに戻ります。途中で「restore_delimiters()」を呼んだ回数が、「store_delimiters()」を呼んだ回数をこえてはいけません。

「_pre_delims」は、global 変数ですから、XText のコピーがスクリプト中に複数あっても値は共有されます。何らかの都合によって、XText が複数存在してもかまいません。