The structure should be initialized with a default font. Insertion of a new format or deletion of an existing format is a bit more complicated than for a simple BTree or ordered list. If characters that fall within the range of one node have their format changed, two nodes must be inserted. One for the new format and one for the tail end of the old format. Similarly if the formating change covers the beginning of an existing format, the subscript number in the existing node must be changed.
Deletions cause similar problems.
Each document will contain a GlyphFactory, a glyph which contains all of the characters and a FontList for the formats. To display the text, the document glyph calls on an iterator to retrieve each column glyph so it can draw itself. Each column in turn uses an iterator to retrieve row glyphs to display their contents. Finally, each row scrolls through each character glyph which displays itself. Each of the character glyphs must contain a pointer and rows must work in conjunction with columns to maintain a position count.