diff options
Diffstat (limited to 'src/boost/tools/inspect/crlf_check.cpp')
-rw-r--r-- | src/boost/tools/inspect/crlf_check.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/boost/tools/inspect/crlf_check.cpp b/src/boost/tools/inspect/crlf_check.cpp new file mode 100644 index 00000000..c3827114 --- /dev/null +++ b/src/boost/tools/inspect/crlf_check.cpp @@ -0,0 +1,97 @@ +// 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 + + |