aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/util/LogColor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/util/LogColor.h')
-rw-r--r--src/crepe/util/LogColor.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/crepe/util/LogColor.h b/src/crepe/util/LogColor.h
new file mode 100644
index 0000000..132fb94
--- /dev/null
+++ b/src/crepe/util/LogColor.h
@@ -0,0 +1,80 @@
+#pragma once
+
+#include <string>
+
+namespace crepe {
+
+/**
+ * \brief Utility class for coloring text using ANSI escape codes
+ *
+ * \note Most methods in this class return a reference to \c this, which may be
+ * used to chain multiple display attributes.
+ */
+class LogColor {
+public:
+ /**
+ * \brief Get color code as STL string
+ *
+ * \param content If given, color this string and append a color reset escape sequence.
+ *
+ * \returns Color escape sequence
+ */
+ const std::string str(const std::string & content = "") const;
+
+public:
+ //! Reset color to default foreground and background color
+ LogColor & reset();
+
+public:
+ /**
+ * \name Foreground colors
+ *
+ * These functions set the foreground (text) color. The \c bright parameter
+ * makes the color brighter, or bold on some terminals.
+ * \{
+ */
+ LogColor & fg_black(bool bright = false);
+ LogColor & fg_red(bool bright = false);
+ LogColor & fg_green(bool bright = false);
+ LogColor & fg_yellow(bool bright = false);
+ LogColor & fg_blue(bool bright = false);
+ LogColor & fg_magenta(bool bright = false);
+ LogColor & fg_cyan(bool bright = false);
+ LogColor & fg_white(bool bright = false);
+ /// \}
+
+public:
+ /**
+ * \name Background colors
+ *
+ * These functions set the background color. The \c bright parameter makes
+ * the color brighter.
+ * \{
+ */
+ LogColor & bg_black(bool bright = false);
+ LogColor & bg_red(bool bright = false);
+ LogColor & bg_green(bool bright = false);
+ LogColor & bg_yellow(bool bright = false);
+ LogColor & bg_blue(bool bright = false);
+ LogColor & bg_magenta(bool bright = false);
+ LogColor & bg_cyan(bool bright = false);
+ LogColor & bg_white(bool bright = false);
+ /// \}
+
+private:
+ /**
+ * \brief Append SGR escape sequence to \c this->code
+ *
+ * \param code SGR attribute number
+ *
+ * See <https://en.wikipedia.org/wiki/ANSI_escape_code> for magic number
+ * reference.
+ */
+ LogColor & add_code(unsigned int code);
+
+private:
+ //! Color escape sequence
+ std::string code = "";
+};
+
+} // namespace crepe