To implement character properties, the line structure is augmented with a charprops-changes slot. If all the characters on the line have default properties, this slot will contain NIL. Otherwise, it will be an adjustable vector with a fill pointer which contains one or more charprops-change structures.

A charprops-change structure contains an index, which is the character position at which the change takes effect, and a plist, which represents the properties of the run of characters following the index. The properties are in effect until the index of the next charprops-change, or to the end of the line.

The properties of the other lines do not affect a given line at all.

A line always starts with the default character properties. This means that the first change in a line's charprops-changes vector may not have an index of 0. For instance, if the first 5 characters of a line had default properties, and the rest of the line was in bold, the charprops change vector would look like


Note that the run of characters is implicit at the beginning. This makes for some added complexity in the code that searches and manages the charprops-changes vector.