Refactor to abstract platform-specific colorcodes away from the higher-level API
This commit is contained in:
@@ -4,37 +4,6 @@
|
||||
#include <cstdint>
|
||||
#include <format>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
namespace jlog::ansi_escape_codes
|
||||
{
|
||||
const WORD FG_BLACK = 0;
|
||||
const WORD FG_RED = FOREGROUND_RED;
|
||||
const WORD FG_GREEN = FOREGROUND_GREEN;
|
||||
const WORD FG_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN;
|
||||
const WORD FG_BLUE = FOREGROUND_BLUE;
|
||||
const WORD FG_MAGENTA = FOREGROUND_RED | FOREGROUND_BLUE;
|
||||
const WORD FG_CYAN = FOREGROUND_GREEN | FOREGROUND_BLUE;
|
||||
const WORD FG_WHITE = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
|
||||
const WORD FG_DEFAULT = FG_WHITE;
|
||||
|
||||
const WORD FG_BRIGHT_BLACK = 0 | FOREGROUND_INTENSITY;
|
||||
const WORD FG_BRIGHT_RED = FOREGROUND_RED | FOREGROUND_INTENSITY;
|
||||
const WORD FG_BRIGHT_GREEN = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
||||
const WORD FG_BRIGHT_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
|
||||
const WORD FG_BRIGHT_BLUE = FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
||||
const WORD FG_BRIGHT_MAGENTA = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
||||
const WORD FG_BRIGHT_CYAN = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
||||
const WORD FG_BRIGHT_WHITE = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
|
||||
|
||||
inline void SetConsoleTextColor(WORD color) {
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
|
||||
}
|
||||
}
|
||||
#else
|
||||
namespace jlog::ansi_escape_codes
|
||||
{
|
||||
inline static const std::string CURSOR_HOME = "\033[H";
|
||||
@@ -136,4 +105,4 @@ namespace jlog::ansi_escape_codes
|
||||
return "";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
52
include/jlog/color_codes.hpp
Normal file
52
include/jlog/color_codes.hpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
|
||||
#include <jlog/ansi_escape_codes.hpp>
|
||||
#include <jlog/nt_color_codes.hpp>
|
||||
|
||||
// Platform independent color code mapping
|
||||
struct colorcode
|
||||
{
|
||||
std::string ansi_code;
|
||||
WORD nt_code;
|
||||
};
|
||||
|
||||
namespace jlog::color_codes
|
||||
{
|
||||
static const colorcode FG_BLACK {ansi_escape_codes::FG_BLACK, nt_color_codes::FG_BLACK };
|
||||
static const colorcode FG_RED {ansi_escape_codes::FG_RED, nt_color_codes::FG_RED };
|
||||
static const colorcode FG_GREEN {ansi_escape_codes::FG_GREEN, nt_color_codes::FG_GREEN };
|
||||
static const colorcode FG_YELLOW {ansi_escape_codes::FG_YELLOW, nt_color_codes::FG_YELLOW };
|
||||
static const colorcode FG_BLUE {ansi_escape_codes::FG_BLUE, nt_color_codes::FG_BLUE };
|
||||
static const colorcode FG_MAGENTA {ansi_escape_codes::FG_MAGENTA, nt_color_codes::FG_MAGENTA };
|
||||
static const colorcode FG_CYAN {ansi_escape_codes::FG_CYAN, nt_color_codes::FG_CYAN };
|
||||
static const colorcode FG_WHITE {ansi_escape_codes::FG_WHITE, nt_color_codes::FG_WHITE };
|
||||
static const colorcode FG_DEFAULT {ansi_escape_codes::FG_DEFAULT, nt_color_codes::FG_DEFAULT };
|
||||
|
||||
static const colorcode FG_BRIGHT_BLACK {ansi_escape_codes::FG_BRIGHT_BLACK, nt_color_codes::FG_BRIGHT_BLACK};
|
||||
static const colorcode FG_BRIGHT_RED {ansi_escape_codes::FG_BRIGHT_RED, nt_color_codes::FG_BRIGHT_RED};
|
||||
static const colorcode FG_BRIGHT_GREEN {ansi_escape_codes::FG_BRIGHT_GREEN, nt_color_codes::FG_BRIGHT_GREEN};
|
||||
static const colorcode FG_BRIGHT_YELLOW {ansi_escape_codes::FG_BRIGHT_YELLOW, nt_color_codes::FG_BRIGHT_YELLOW};
|
||||
static const colorcode FG_BRIGHT_BLUE {ansi_escape_codes::FG_BRIGHT_MAGENTA, nt_color_codes::FG_BRIGHT_MAGENTA};
|
||||
static const colorcode FG_BRIGHT_MAGENTA {ansi_escape_codes::FG_BRIGHT_MAGENTA, nt_color_codes::FG_BRIGHT_MAGENTA};
|
||||
static const colorcode FG_BRIGHT_CYAN {ansi_escape_codes::FG_BRIGHT_CYAN, nt_color_codes::FG_BRIGHT_CYAN};
|
||||
static const colorcode FG_BRIGHT_WHITE {ansi_escape_codes::FG_BRIGHT_WHITE, nt_color_codes::FG_BRIGHT_WHITE};
|
||||
|
||||
static const colorcode BG_BLACK {ansi_escape_codes::BG_BLACK, nt_color_codes::BG_BLACK};
|
||||
static const colorcode BG_RED {ansi_escape_codes::BG_RED, nt_color_codes::BG_RED};
|
||||
static const colorcode BG_GREEN {ansi_escape_codes::BG_GREEN, nt_color_codes::BG_GREEN};
|
||||
static const colorcode BG_YELLOW {ansi_escape_codes::BG_YELLOW, nt_color_codes::BG_YELLOW};
|
||||
static const colorcode BG_BLUE {ansi_escape_codes::BG_BLUE, nt_color_codes::BG_BLUE};
|
||||
static const colorcode BG_MAGENTA {ansi_escape_codes::BG_MAGENTA, nt_color_codes::BG_MAGENTA};
|
||||
static const colorcode BG_CYAN {ansi_escape_codes::BG_CYAN, nt_color_codes::BG_CYAN};
|
||||
static const colorcode BG_WHITE {ansi_escape_codes::BG_WHITE, nt_color_codes::BG_WHITE};
|
||||
static const colorcode BG_DEFAULT {ansi_escape_codes::BG_DEFAULT, nt_color_codes::BG_DEFAULT};
|
||||
|
||||
static const colorcode BG_BRIGHT_BLACK {ansi_escape_codes::BG_BRIGHT_BLACK, nt_color_codes::BG_BRIGHT_BLACK};
|
||||
static const colorcode BG_BRIGHT_RED {ansi_escape_codes::BG_BRIGHT_RED, nt_color_codes::BG_BRIGHT_RED};
|
||||
static const colorcode BG_BRIGHT_GREEN {ansi_escape_codes::BG_BRIGHT_GREEN, nt_color_codes::BG_BRIGHT_GREEN};
|
||||
static const colorcode BG_BRIGHT_YELLOW {ansi_escape_codes::BG_BRIGHT_YELLOW, nt_color_codes::BG_BRIGHT_YELLOW};
|
||||
static const colorcode BG_BRIGHT_BLUE {ansi_escape_codes::BG_BRIGHT_BLUE, nt_color_codes::BG_BRIGHT_BLUE};
|
||||
static const colorcode BG_BRIGHT_MAGENTA {ansi_escape_codes::BG_BRIGHT_MAGENTA, nt_color_codes::BG_BRIGHT_MAGENTA};
|
||||
static const colorcode BG_BRIGHT_CYAN {ansi_escape_codes::BG_BRIGHT_CYAN, nt_color_codes::BG_BRIGHT_CYAN};
|
||||
static const colorcode BG_BRIGHT_WHITE {ansi_escape_codes::BG_BRIGHT_WHITE, nt_color_codes::BG_BRIGHT_WHITE};
|
||||
}
|
@@ -8,12 +8,8 @@
|
||||
|
||||
#include <format>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <Event.h>
|
||||
#include <jlog/ansi_escape_codes.hpp>
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include <jlog/color_codes.hpp>
|
||||
|
||||
#ifdef __linux__
|
||||
#define FUNCTION __PRETTY_FUNCTION__
|
||||
@@ -50,11 +46,7 @@ namespace jlog
|
||||
|
||||
struct token
|
||||
{
|
||||
#ifdef _WIN32
|
||||
WORD colorCode = ansi_escape_codes::FG_DEFAULT;
|
||||
#else
|
||||
std::string colorCode = ansi_escape_codes::RESET;
|
||||
#endif
|
||||
colorcode colorCode = color_codes::FG_DEFAULT;
|
||||
std::string content = "";
|
||||
std::string delimiter = "[]";
|
||||
};
|
||||
@@ -74,7 +66,7 @@ namespace jlog
|
||||
std::vector<token> log_format(
|
||||
const std::string& severity_name,
|
||||
const std::string& message,
|
||||
const std::string& severity_colorCode = ansi_escape_codes::FG_WHITE);
|
||||
const colorcode& severity_cc = color_codes::FG_WHITE);
|
||||
|
||||
std::vector<token> log_detailed_format(
|
||||
const std::string& severity_name,
|
||||
@@ -82,7 +74,7 @@ namespace jlog
|
||||
const std::string& func,
|
||||
const std::string& file,
|
||||
int line,
|
||||
const std::string& severity_colorCode = ansi_escape_codes::FG_WHITE);
|
||||
const colorcode& severity_cc = color_codes::FG_WHITE);
|
||||
|
||||
// Predefined generic loggers for jlog.
|
||||
std::vector<token> info_format(const std::string& message);
|
||||
@@ -134,16 +126,17 @@ namespace jlog
|
||||
int line);
|
||||
}
|
||||
|
||||
#define INFO(i) if (jlog::loglevel >= jlog::severity::none) { jlog::log(jlog::info_detailed_format(i, FUNCTION, __FILE__, __LINE__)); };
|
||||
#define INFO(i) if (jlog::loglevel >= jlog::severity::none) { jlog::log(jlog::info_detailed_format(i, FUNCTION, __FILE__, __LINE__)); }
|
||||
|
||||
#define VERBOSE(i) if (jlog::loglevel >= jlog::severity::verbose) { jlog::log(jlog::verbose_detailed_format(i, FUNCTION, __FILE__, __LINE__)); };
|
||||
#define VERBOSE(i) if (jlog::loglevel >= jlog::severity::verbose) { jlog::log(jlog::verbose_detailed_format(i, FUNCTION, __FILE__, __LINE__)); }
|
||||
|
||||
#define DEBUG(i) if (jlog::loglevel >= jlog::severity::debug) { jlog::log(jlog::debug_detailed_format(i, FUNCTION, __FILE__, __LINE__)); };
|
||||
#define DEBUG(i) if (jlog::loglevel >= jlog::severity::debug) { jlog::log(jlog::debug_detailed_format(i, FUNCTION, __FILE__, __LINE__)); }
|
||||
|
||||
#define WARNING(i) if (jlog::loglevel >= jlog::severity::warning) { jlog::log(jlog::warning_detailed_format(i, FUNCTION, __FILE__, __LINE__)); };
|
||||
#define WARNING(i) if (jlog::loglevel >= jlog::severity::warning) { jlog::log(jlog::warning_detailed_format(i, FUNCTION, __FILE__, __LINE__)); }
|
||||
|
||||
#define ERROR(i) if (jlog::loglevel >= jlog::severity::error) { jlog::log(jlog::error_detailed_format(i, FUNCTION, __FILE__, __LINE__)); };
|
||||
#define ERROR(i) if (jlog::loglevel >= jlog::severity::error) { jlog::log(jlog::error_detailed_format(i, FUNCTION, __FILE__, __LINE__)); }
|
||||
|
||||
#define FATAL(i) if (jlog::loglevel >= jlog::severity::fatal) { jlog::log(jlog::fatal_detailed_format(i, FUNCTION, __FILE__, __LINE__)); };
|
||||
#define FATAL(i) if (jlog::loglevel >= jlog::severity::fatal) { jlog::log(jlog::fatal_detailed_format(i, FUNCTION, __FILE__, __LINE__)); }
|
||||
|
||||
#define LOGLEVEL(i) jlog::loglevel = i;
|
||||
|
||||
#define LOGLEVEL(i) jlog::loglevel = i;
|
55
include/jlog/nt_color_codes.hpp
Normal file
55
include/jlog/nt_color_codes.hpp
Normal file
@@ -0,0 +1,55 @@
|
||||
#pragma once
|
||||
|
||||
// NT color codes taken from windows.h / consoleapi2.h
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
namespace jlog::nt_color_codes
|
||||
{
|
||||
const WORD FG_BLACK = 0x0000;
|
||||
const WORD FG_BLUE = 0x0001;
|
||||
const WORD FG_GREEN = 0x0002;
|
||||
const WORD FG_RED = 0x0004;
|
||||
|
||||
const WORD FG_YELLOW = FG_RED | FG_GREEN;
|
||||
|
||||
const WORD FG_MAGENTA = FG_RED | FG_BLUE;
|
||||
const WORD FG_CYAN = FG_GREEN | FG_BLUE;
|
||||
const WORD FG_WHITE = FG_RED | FG_GREEN | FG_BLUE;
|
||||
const WORD FG_DEFAULT = FG_WHITE;
|
||||
|
||||
const WORD FG_BRIGHT_BLACK = 0 | 0x0008;
|
||||
const WORD FG_BRIGHT_RED = FG_RED | 0x0008;
|
||||
const WORD FG_BRIGHT_GREEN = FG_GREEN | 0x0008;
|
||||
const WORD FG_BRIGHT_YELLOW = FG_RED | FG_GREEN | 0x0008;
|
||||
const WORD FG_BRIGHT_BLUE = FG_BLUE | 0x0008;
|
||||
const WORD FG_BRIGHT_MAGENTA = FG_RED | FG_BLUE | 0x0008;
|
||||
const WORD FG_BRIGHT_CYAN = FG_GREEN | FG_BLUE | 0x0008;
|
||||
const WORD FG_BRIGHT_WHITE = FG_RED | FG_GREEN | FG_BLUE | 0x0008;
|
||||
|
||||
|
||||
const WORD BG_BLACK = 0x0000;
|
||||
const WORD BG_BLUE = 0x0010;
|
||||
const WORD BG_GREEN = 0x0020;
|
||||
const WORD BG_RED = 0x0040;
|
||||
const WORD BG_YELLOW = BG_RED | BG_GREEN;
|
||||
const WORD BG_MAGENTA = BG_RED | BG_BLUE;
|
||||
const WORD BG_CYAN = BG_GREEN | BG_BLUE;
|
||||
const WORD BG_WHITE = BG_RED | BG_GREEN | BG_BLUE;
|
||||
const WORD BG_BRIGHT_BLACK = 0 | 0x0080;
|
||||
const WORD BG_BRIGHT_RED = BG_RED | 0x0080;
|
||||
const WORD BG_BRIGHT_GREEN = BG_GREEN | 0x0080;
|
||||
const WORD BG_BRIGHT_YELLOW = BG_YELLOW | 0x0080;
|
||||
const WORD BG_BRIGHT_BLUE = BG_BLUE | 0x0080;
|
||||
const WORD BG_BRIGHT_MAGENTA = BG_RED | BG_BLUE | 0x0080;
|
||||
const WORD BG_BRIGHT_CYAN = BG_GREEN | BG_BLUE | 0x0080;
|
||||
const WORD BG_BRIGHT_WHITE = BG_RED | BG_GREEN | BG_BLUE | 0x0080;
|
||||
|
||||
const WORD BG_DEFAULT = BG_WHITE;
|
||||
|
||||
inline void SetConsoleTextColor(WORD color) {
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user