127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //  (C) Copyright Gennadiy Rozental 2001.
 | |
| //  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)
 | |
| 
 | |
| //  See http://www.boost.org/libs/test for the library home page.
 | |
| //
 | |
| //  File        : $RCSfile$
 | |
| //
 | |
| //  Version     : $Revision$
 | |
| //
 | |
| //  Description : contains definition for setcolor iostream manipulator
 | |
| // ***************************************************************************
 | |
| 
 | |
| #ifndef BOOST_TEST_UTILS_SETCOLOR_HPP
 | |
| #define BOOST_TEST_UTILS_SETCOLOR_HPP
 | |
| 
 | |
| // Boost.Test
 | |
| #include <boost/test/detail/config.hpp>
 | |
| 
 | |
| // STL
 | |
| #include <iostream>
 | |
| #include <cstdio>
 | |
| 
 | |
| #include <boost/test/detail/suppress_warnings.hpp>
 | |
| 
 | |
| //____________________________________________________________________________//
 | |
| 
 | |
| namespace boost {
 | |
| namespace unit_test {
 | |
| namespace utils {
 | |
| 
 | |
| // ************************************************************************** //
 | |
| // **************                    term_attr                 ************** //
 | |
| // ************************************************************************** //
 | |
| 
 | |
| struct term_attr { enum _ {
 | |
|     NORMAL    = 0,
 | |
|     BRIGHT    = 1,
 | |
|     DIM       = 2,
 | |
|     UNDERLINE = 4,
 | |
|     BLINK     = 5,
 | |
|     REVERSE   = 7,
 | |
|     CROSSOUT  = 9
 | |
| }; };
 | |
| 
 | |
| // ************************************************************************** //
 | |
| // **************                   term_color                 ************** //
 | |
| // ************************************************************************** //
 | |
| 
 | |
| struct term_color { enum _ {
 | |
|     BLACK    = 0,
 | |
|     RED      = 1,
 | |
|     GREEN    = 2,
 | |
|     YELLOW   = 3,
 | |
|     BLUE     = 4,
 | |
|     MAGENTA  = 5,
 | |
|     CYAN     = 6,
 | |
|     WHITE    = 7,
 | |
|     ORIGINAL = 9
 | |
| }; };
 | |
| 
 | |
| // ************************************************************************** //
 | |
| // **************                    setcolor                  ************** //
 | |
| // ************************************************************************** //
 | |
| 
 | |
| class setcolor {
 | |
| public:
 | |
|     // Constructor
 | |
|     explicit    setcolor( term_attr::_  attr = term_attr::NORMAL,
 | |
|                           term_color::_ fg   = term_color::ORIGINAL,
 | |
|                           term_color::_ bg   = term_color::ORIGINAL )
 | |
|     {
 | |
|         m_command_size = std::sprintf( m_control_command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40 );
 | |
|     }
 | |
| 
 | |
|     friend std::ostream&
 | |
|     operator<<( std::ostream& os, setcolor const& sc )
 | |
|     {
 | |
|         return os.write( sc.m_control_command, sc.m_command_size );
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     // Data members
 | |
|     char        m_control_command[13];
 | |
|     int         m_command_size;
 | |
| };
 | |
| 
 | |
| // ************************************************************************** //
 | |
| // **************                 scope_setcolor               ************** //
 | |
| // ************************************************************************** //
 | |
| 
 | |
| struct scope_setcolor {
 | |
|     scope_setcolor() : m_os( 0 ) {}
 | |
|     explicit    scope_setcolor( std::ostream& os,
 | |
|                                 term_attr::_  attr = term_attr::NORMAL,
 | |
|                                 term_color::_ fg   = term_color::ORIGINAL,
 | |
|                                 term_color::_ bg   = term_color::ORIGINAL )
 | |
|     : m_os( &os )
 | |
|     {
 | |
|         os << setcolor( attr, fg, bg );
 | |
|     }
 | |
|     ~scope_setcolor()
 | |
|     {
 | |
|         if( m_os )
 | |
|             *m_os << setcolor();
 | |
|     }
 | |
| private:
 | |
|     // Data members
 | |
|     std::ostream* m_os;
 | |
| };
 | |
| 
 | |
| #define BOOST_TEST_SCOPE_SETCOLOR( is_color_output, os, attr, color )   \
 | |
|     utils::scope_setcolor const& sc = is_color_output                   \
 | |
|            ? utils::scope_setcolor( os, utils::attr, utils::color )     \
 | |
|            : utils::scope_setcolor();                                   \
 | |
|     ut_detail::ignore_unused_variable_warning( sc )                     \
 | |
| /**/
 | |
| 
 | |
| } // namespace utils
 | |
| } // namespace unit_test
 | |
| } // namespace boost
 | |
| 
 | |
| #include <boost/test/detail/enable_warnings.hpp>
 | |
| 
 | |
| #endif // BOOST_TEST_UTILS_SETCOLOR_HPP
 | 
