GNU Emacs Lisp Reference Manual
Each character position in a buffer or a string can have a text property list, much like the property list of a symbol (see Property Lists). The properties belong to a particular character at a
particular place, such as, the letter T at the beginning of this
sentence or the first o in foo---if the same character
occurs in two different places, the two occurrences generally have
different properties.
Each property has a name and a value. Both of these can be any Lisp object, but the name is normally a symbol. The usual way to access the property list is to specify a name and ask what value corresponds to it.
If a character has a category property, we call it the
category of the character. It should be a symbol. The properties
of the symbol serve as defaults for the properties of the character.
Copying text between strings and buffers preserves the properties
along with the characters; this includes such diverse functions as
substring, insert, and buffer-substring.