blob: c38271140359ff913d85cc674714909eafa0af11 [file] [log] [blame]
// crlf_check implementation ------------------------------------------------//
// Copyright Beman Dawes 2002.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// Contributed by Joerg Walter
#include "crlf_check.hpp"
namespace boost
{
namespace inspect
{
crlf_check::crlf_check() : m_files_with_errors(0)
{
}
void crlf_check::inspect(
const string & library_name,
const path & full_path, // example: c:/foo/boost/filesystem/path.hpp
const string & contents ) // contents of file to be inspected
{
if (contents.find( "boostinspect:" "nocrlf" ) != string::npos) return;
// this file deliberately contains errors
const char test_file_name[] = "wrong_line_ends_test.cpp";
bool failed = false;
// The understanding on line endings, as I remember it, was that
// either "\n" or "\r\n" is OK, and they can be mixed, but "\r" alone
// is not acceptable. Mixed line endings are allowed because Boost files
// are commonly edited in both Windows and UNIX environments, and editors
// in those environments generally accept either ending. Even Mac people
// agreed with this policy. --Beman
// Joerg's original implementation is saved below,
// in case we change our minds!
for ( std::string::const_iterator itr ( contents.begin() );
itr != contents.end(); ++itr )
{
if ( *itr == '\r' && ((itr+1) == contents.end() || *(itr+1) != '\n') )
{
failed = true;
break;
}
}
if (failed && full_path.leaf() != test_file_name)
{
++m_files_with_errors;
error( library_name, full_path, name() );
}
if (!failed && full_path.leaf() == test_file_name)
{
++m_files_with_errors;
error( library_name, full_path, string(name()) + " should have cr-only line endings" );
}
/*
size_t cr_count = 0;
size_t lf_count = 0;
size_t crlf_count = 0;
bool had_cr = false;
for ( size_t i = 0; i < contents.length(); ++i )
{
switch ( contents[i] )
{
case '\r':
had_cr = true;
++cr_count;
break;
case '\n':
++lf_count;
if ( had_cr )
++crlf_count;
// fallthrough
default:
had_cr = false;
break;
}
}
if ( cr_count > 0 && lf_count != crlf_count )
{
++m_files_with_errors;
error( library_name, full_path, desc() );
}
*/
}
} // namespace inspect
} // namespace boost