2015-09-06 20:19:09 +02:00
|
|
|
#include "./ansiescapecodes.h"
|
2017-09-26 15:23:23 +02:00
|
|
|
|
2017-10-17 00:00:46 +02:00
|
|
|
/*!
|
|
|
|
* \brief Encapsulates functions for formatted terminal output using ANSI escape codes.
|
|
|
|
*/
|
2017-09-26 15:23:23 +02:00
|
|
|
namespace EscapeCodes {
|
|
|
|
|
2017-10-17 00:00:46 +02:00
|
|
|
/*!
|
|
|
|
* \brief Controls whether the functions inside the EscapeCodes namespace actually make use of escape codes.
|
|
|
|
*
|
|
|
|
* This allows to disable use of escape codes when not appropriate.
|
|
|
|
*
|
|
|
|
* The default value can be configured at build time by setting the CMake variable ENABLE_ESCAPE_CODES_BY_DEFAULT.
|
|
|
|
* The "default for the default" is true.
|
|
|
|
* However, the default is overridden with the value of the environment variable ENABLE_ESCAPE_CODES when instantiating
|
|
|
|
* an ApplicationUtilities::NoColorArgument (if ENABLE_ESCAPE_CODES is present).
|
|
|
|
*
|
|
|
|
* \sa ApplicationUtilities::NoColorArgument
|
|
|
|
*/
|
|
|
|
bool enabled =
|
|
|
|
#ifdef CPP_UTILITIES_ESCAPE_CODES_ENABLED_BY_DEFAULT
|
|
|
|
true
|
|
|
|
#else
|
|
|
|
false
|
|
|
|
#endif
|
|
|
|
;
|
|
|
|
|
2017-09-30 19:16:43 +02:00
|
|
|
/*!
|
|
|
|
* \brief Prints the specified \a phrase.
|
|
|
|
*/
|
2017-09-26 15:23:23 +02:00
|
|
|
std::ostream &operator<<(std::ostream &stream, Phrases phrase)
|
|
|
|
{
|
|
|
|
switch (phrase) {
|
|
|
|
case Phrases::Error:
|
|
|
|
setStyle(stream, Color::Red, ColorContext::Foreground, TextAttribute::Bold);
|
|
|
|
stream << "Error: ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
|
|
|
case Phrases::Warning:
|
|
|
|
setStyle(stream, Color::Yellow, ColorContext::Foreground, TextAttribute::Bold);
|
|
|
|
stream << "Warning: ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
|
|
|
case Phrases::End:
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
stream << '\n';
|
|
|
|
break;
|
2017-09-30 19:16:43 +02:00
|
|
|
case Phrases::PlainMessage:
|
|
|
|
stream << " ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
|
|
|
case Phrases::SuccessMessage:
|
|
|
|
setStyle(stream, Color::Green, ColorContext::Foreground, TextAttribute::Bold);
|
|
|
|
stream << "==> ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
|
|
|
case Phrases::SubMessage:
|
|
|
|
setStyle(stream, Color::Green, ColorContext::Foreground, TextAttribute::Bold);
|
|
|
|
stream << " -> ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
|
|
|
case Phrases::ErrorMessage:
|
2018-01-29 16:26:28 +01:00
|
|
|
setStyle(stream, Color::Red, ColorContext::Foreground, TextAttribute::Bold);
|
2017-09-30 19:16:43 +02:00
|
|
|
stream << "==> ERROR: ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
|
|
|
case Phrases::WarningMessage:
|
2018-01-29 16:26:28 +01:00
|
|
|
setStyle(stream, Color::Yellow, ColorContext::Foreground, TextAttribute::Bold);
|
2017-09-30 19:16:43 +02:00
|
|
|
stream << "==> WARNING: ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
2017-10-09 20:36:18 +02:00
|
|
|
case Phrases::EndFlush:
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
stream << std::endl;
|
|
|
|
break;
|
2017-11-27 10:24:44 +01:00
|
|
|
case Phrases::Info:
|
|
|
|
setStyle(stream, Color::Blue, ColorContext::Foreground, TextAttribute::Bold);
|
|
|
|
stream << "Info: ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
2018-04-01 23:08:31 +02:00
|
|
|
case Phrases::Override:
|
|
|
|
eraseLine(stream);
|
|
|
|
stream << '\r';
|
|
|
|
break;
|
2018-11-11 22:34:38 +01:00
|
|
|
case Phrases::SubError:
|
|
|
|
setStyle(stream, Color::Red, ColorContext::Foreground, TextAttribute::Bold);
|
|
|
|
stream << " -> ERROR: ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
|
|
|
case Phrases::SubWarning:
|
|
|
|
setStyle(stream, Color::Yellow, ColorContext::Foreground, TextAttribute::Bold);
|
|
|
|
stream << " -> WARNING: ";
|
|
|
|
setStyle(stream, TextAttribute::Reset);
|
|
|
|
setStyle(stream, TextAttribute::Bold);
|
|
|
|
break;
|
2017-09-26 15:23:23 +02:00
|
|
|
}
|
|
|
|
return stream;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace EscapeCodes
|