From 2693c6c3855afc8d12ccf28ab8322c9527700668 Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Wed, 7 May 2025 11:19:06 +0200 Subject: [PATCH] avoid using `impl` in error_printer example (#268) --- examples/error_printer.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/examples/error_printer.cpp b/examples/error_printer.cpp index 1f44517..c73ea75 100644 --- a/examples/error_printer.cpp +++ b/examples/error_printer.cpp @@ -8,6 +8,9 @@ #include "examples.hpp" #include +#include // For iscntrl. +#include // For setfill, hex, etc. +#include using namespace std::string_view_literals; @@ -110,23 +113,29 @@ namespace { for (char c : str) { - if (c >= 0 && static_cast(c) < std::size(toml::impl::control_char_escapes)) + if (std::optional escape_sequence = (c == '\\') ? "\\\\"sv + : (c == '\a') ? "\\a"sv + : (c == '\b') ? "\\b"sv + : (c == '\f') ? "\\f"sv + : (c == '\n') ? "\\n"sv + : (c == '\r') ? "\\r"sv + : (c == '\t') ? "\\t"sv + : (c == '\v') ? "\\v"sv + : std::optional{}) { - std::cout << toml::impl::control_char_escapes[static_cast(c)]; + std::cout << *escape_sequence; } else { - if (c == '\x7F') + if (c >= 0 && std::iscntrl(c)) { - // DEL character. - std::cout << "\\u007F"sv; + // Print a string, just like `toml::impl::control_char_escapes[c]`. + std::ostringstream stream; + stream << "\\u00"sv << std::setfill('0') << std::setw(2) << std::hex << std::uppercase << int{ c }; + std::cout << stream.str(); } else { - if (c == '\\') - { - std::cout << '\\'; - } std::cout << c; } }