/// <summary>
        /// Create a new text document with the specified initial text.
        /// </summary>
        public TextDocument(IEnumerable <char> initialText)
        {
            if (initialText == null)
            {
                throw new ArgumentNullException("initialText");
            }
            rope        = new Rope <char>(initialText);
            lineTree    = new DocumentLineTree(this);
            lineManager = new LineManager(rope, lineTree, this);
            lineTrackers.CollectionChanged += delegate {
                lineManager.UpdateListOfLineTrackers();
            };

            anchorTree = new TextAnchorTree(this);
            undoStack  = new UndoStack();
            undoStack.AttachToDocument(this);
            FireChangeEvents();
        }