public string[] ExtractLines(IFileSource file, int startPosition, int endPosition)
        {
            var data = file.GetData();
            var i    = startPosition;

            while (i > 0 && data[i - 1] != '\n' && data[i - 1] != '\r')
            {
                i--;
            }

            var result = new List <string>();

            while (i <= endPosition && i < data.Length)
            {
                var s = i;
                while (i < data.Length && data[i] != '\n' && data[i] != '\r')
                {
                    i++;
                }

                result.Add(data.Substring(s, i - s));
                if (i < data.Length)
                {
                    var c = data[i];
                    i++;
                    if (i < data.Length && (data[i] == '\n' || data[i] == '\r') && data[i] != c)
                    {
                        i++;
                    }
                }
            }

            return(result.ToArray());
        }
 public List <IToken> GetTokens(IFileSource fileSource, OffsetsStore offsetsStore)
 {
     offsetsStore = offsetsStore ?? new OffsetsStore();
     return(IntGetTokens(fileSource.GetData(), fileSource, offsetsStore));
 }