/// <summary> /// Trims the start of the given string, but makes sure the _charIndex and _lineIndex /// members are adapted suitably. /// </summary> /// <param name="source">String to trim. Must not be null.</param> private void TrimStart(ref string source) { if (source == null) { throw new ArgumentNullException("source"); } var match = Regex.Match(source, @"^(\s+)"); if (match.Captures.Count > 0) { var wsString = match.Captures[0].Value; // correct line count var nlCount = wsString.Count(c => c == '\n'); // TODO win/lin correct? Env.NL is a String... _scannerState.AdvanceLineIndex(nlCount); if (nlCount > 0) { _scannerState.CharIndex = 0; } // correct char count in one line int lioNewLine = wsString.LastIndexOf(Environment.NewLine, StringComparison.Ordinal); if (lioNewLine >= 0) { var lastWS = wsString.Substring(lioNewLine + Environment.NewLine.Length); var count = lastWS.Length; _scannerState.AdvanceCharIndex(count); } else { _scannerState.AdvanceCharIndex(wsString.Length); } source = source.Substring(wsString.Length); } }