文字列は、含まれる文字そのものに加えて、それらの文字のプロパティを保持できます。これにより、文字列とバッファ間でテキストをコピーするプログラムが、特別な処理を必要とせずにテキストのプロパティをコピーできるようになります。テキストプロパティの意味については、テキストプロパティを参照してください。テキストプロパティを持つ文字列では、特別な読み取りおよび出力構文が使用されます:
#("characters" property-data...)
ここで、property-dataは、以下のように3つずつのグループに分かれた0個以上の要素で構成される:
beg end plist
要素 beg と end は整数であり、合わせて文字列内のインデックス範囲を指定します。plist はその範囲に対応するプロパティリストです。例えば、
#("foo bar" 0 3 (face bold) 3 4 nil 4 7 (face italic))
テキスト内容が ‘foo bar’
である文字列を表し、そのうち最初の3文字は値 bold の face プロパティを、最後の3文字は値 italic の
face
プロパティを持っています。(4文字目にはテキストプロパティがないため、そのプロパティリストは nil
となります。どの範囲にも含まれない文字はデフォルトでプロパティを持たないため、プロパティリストとして nil を指定する範囲を明示する必要は実際にはありません。)