/// <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);
            }
        }