public static StringRebuilder Create(string text)
        {
            if (text == null)
            {
                throw new ArgumentNullException("text");
            }
#if DEBUG
            Interlocked.Add(ref _totalCharactersScanned, text.Length);
#endif

            return((text.Length == 0)
                   ? StringRebuilder.Empty
                   : StringRebuilderForString.Create(text, text.Length, LineBreakManager.CreateLineBreaks(text)));
        }
        public override StringRebuilder GetSubText(Span span)
        {
            if (span.End > this.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(span));
            }

            if (span.Length == 0)
            {
                return(StringRebuilder.Empty);
            }
            else if (span.Length == this.Length)
            {
                return(this);
            }
            else
            {
                int firstLineNumber;
                int lastLineNumber;
                this.FindFirstAndLastLines(span, out firstLineNumber, out lastLineNumber);
                return(StringRebuilderForString.Create(_content, _lineBreaks, span.Start + _textSpanStart, span.Length, firstLineNumber, lastLineNumber - firstLineNumber));
            }
        }
 internal static StringRebuilder Create(string source, int length, ILineBreaks lineBreaks)
 {
     return(StringRebuilderForString.Create(source, lineBreaks, 0, length, 0, lineBreaks.Length));
 }