| /* |
| * Created by Phil on 18/4/2013. |
| * Copyright 2013 Two Blue Cubes Ltd. All rights reserved. |
| * |
| * 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) |
| */ |
| #ifndef TWOBLUECUBES_CATCH_TEXT_H_INCLUDED |
| #define TWOBLUECUBES_CATCH_TEXT_H_INCLUDED |
| |
| #include "catch_config.hpp" |
| |
| #include <string> |
| #include <vector> |
| |
| namespace Catch { |
| |
| struct TextAttributes { |
| TextAttributes() |
| : initialIndent( std::string::npos ), |
| indent( 0 ), |
| width( CATCH_CONFIG_CONSOLE_WIDTH-1 ), |
| tabChar( '\t' ) |
| {} |
| |
| TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } |
| TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } |
| TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } |
| TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } |
| |
| std::size_t initialIndent; // indent of first line, or npos |
| std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos |
| std::size_t width; // maximum width of text, including indent. Longer text will wrap |
| char tabChar; // If this char is seen the indent is changed to current pos |
| }; |
| |
| class Text { |
| public: |
| Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ); |
| void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ); |
| |
| typedef std::vector<std::string>::const_iterator const_iterator; |
| |
| const_iterator begin() const { return lines.begin(); } |
| const_iterator end() const { return lines.end(); } |
| std::string const& last() const { return lines.back(); } |
| std::size_t size() const { return lines.size(); } |
| std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } |
| std::string toString() const; |
| |
| friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ); |
| |
| private: |
| std::string str; |
| TextAttributes attr; |
| std::vector<std::string> lines; |
| }; |
| |
| } // end namespace Catch |
| |
| #endif // TWOBLUECUBES_CATCH_TEXT_H_INCLUDED |