public override void Write(TextWriter writer, Span span)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (span.End > this.Length)
            {
                throw new ArgumentOutOfRangeException("span");
            }

            if (span.Start >= _left.Length)
            {
                _right.Write(writer, new Span(span.Start - _left.Length, span.Length));
            }
            else if (span.End <= _left.Length)
            {
                _left.Write(writer, span);
            }
            else
            {
                _left.Write(writer, Span.FromBounds(span.Start, _left.Length));
                _right.Write(writer, Span.FromBounds(0, span.End - _left.Length));
            }
        }