#include #include #include #include "ansi_parser.hpp" #include #include #include "ftxui/dom/elements.hpp" // for text, bgcolor, color, vbox, hbox, separator, operator|, Elements, Element, Fit, border #include "ftxui/dom/node.hpp" // for Render #include "ftxui/screen/color.hpp" // for Color, Color::Black, Color::Blue, Color::BlueLight, Color::Cyan, Color::CyanLight, Color::Default, Color::GrayDark, Color::GrayLight, Color::Green, Color::GreenLight, Color::Magenta, Color::MagentaLight, Color::Red, Color::RedLight, Color::White, Color::Yellow, Color::YellowLight, Color::Palette256, ftxui #include // for ColorInfo #include // for Full, Screen #include // for ColorSupport, Color, Palette16, Palette256, TrueColor using namespace fmt; using namespace ftxui; std::string generate_colors() { REQUIRE(ftxui::Terminal::ColorSupport() == ftxui::Terminal::Color::TrueColor); const int max_value = 255; const int value_increment = 8; const int hue_increment = 6; int saturation = max_value; Elements array; int count = 0; for (int value = 0; value < max_value; value += 2 * value_increment) { Elements line; for (int hue = 0; hue < max_value; hue += hue_increment) { line.push_back( text("#") // | color(Color::HSV(hue, saturation, value)) // | bgcolor(Color::HSV(hue, saturation, value + value_increment))); count++; } array.push_back(hbox(std::move(line))); } auto true_color_display = vbox({ vbox(std::move(array)), }); auto document = vbox({hbox({ true_color_display, })}); auto screen = Screen::Create(Dimension::Full(), Dimension::Fit(document)); Render(screen, document); return screen.ToString(); } TEST_CASE("test out ragel parser", "[gui]") { sf::Color default_fg(0,0,0); sf::Color default_bg(100,100,100); // this sets the Truecolor so need to do it first ANSIParser ansi(default_fg, default_bg); std::wstring_convert> $converter; std::string colors = generate_colors(); std::wstring colors_utf = $converter.from_bytes(colors); std::cout << colors; bool good = ansi.parse(colors_utf, [&](sf::Color color, sf::Color bgcolor){ // ignore color }, [&](wchar_t ch) { bool correct_char = ch == '#' || ch == ' ' || ch == '\n' || ch == '\r'; REQUIRE(correct_char); }); REQUIRE(good); }