public SniffInfo Sniff(string nativeFilePath, Language suggestedSourceLanguage, Codepage suggestedCodepage,
                               INativeTextLocationMessageReporter messageReporter, ISettingsGroup settingsGroup)
        {
            var lineValidationSession = _lineParser.StartLineValidationSession();

            using (var extendedStreamReader = _fileHelper.GetExtendedStreamReader(nativeFilePath))
            {
                string currentLine;
                while ((currentLine = extendedStreamReader.ReadLineWithEofLine()) != null)
                {
                    var isValidLine = lineValidationSession.IsValid(currentLine);

                    if (isValidLine)
                    {
                        continue;
                    }

                    var message = string.Format(
                        PoFileTypeResources.Sniffer_Unexpected_Line,
                        extendedStreamReader.CurrentLineNumber + ": " + currentLine,
                        lineValidationSession.NextExpectedLineDescription);

                    messageReporter.ReportMessage(this, nativeFilePath,
                                                  ErrorLevel.Error, message,
                                                  extendedStreamReader.CurrentLineNumber + ": " + currentLine);

                    return(new SniffInfo {
                        IsSupported = false
                    });
                }
            }

            return(new SniffInfo {
                IsSupported = true
            });
        }