A representation of a contiguous range of characters in a TextBuffer. The TextRange uses OffsetMarks to track changes in the buffer so the range continues to cover the expected text as edits are made to the buffer. It is for this reason that dispose() must be called on the range when it is no longer needed, otherwise the OffsetMarks will remain (leaked) in the TextBuffer. The smallest range is one character long, having the same start and end offsets. The behaviour of the TextRange after dispose() has been called is undefined