33 bool in_escape =
false;
39 }
else if (c ==
'\033') {
61 std::string spaces(
static_cast<std::size_t
>(gap),
' ');
77 using Row = std::vector<std::string>;
84 inline std::string
format_row(std::vector<Column>
const& columns,
Row const& cells, std::string
const& sep =
" ") {
88 for (std::size_t i = 0; i < columns.size() && i < cells.size(); ++i) {
89 if (!columns[i].enabled) {
98 line +=
pad(cells[i], columns[i].width, columns[i].align);
107 inline std::string
format_separator(std::vector<Column>
const& columns, std::string
const& sep =
" ") {
111 for (std::size_t i = 0; i < columns.size(); ++i) {
112 if (!columns[i].enabled) {
117 total +=
static_cast<int>(sep.size());
121 total += columns[i].width;
124 return std::string(
static_cast<std::size_t
>(total),
'-');
132 labels.reserve(columns.size());
134 for (
auto const& col : columns) {
135 labels.push_back(col.label);
147 inline std::string
format_md_row(
Row const& cells, std::vector<Column>
const& columns = {}) {
148 std::string line =
"|";
150 for (std::size_t i = 0; i < cells.size(); ++i) {
151 if (!columns.empty() && i < columns.size() && !columns[i].enabled) {
155 line +=
" " + cells[i] +
" |";
165 std::string line =
"|";
167 for (
auto const& col : columns) {
172 line += (col.align ==
Align::right) ?
"---:|" :
":---|";
Column-driven table formatting with ANSI-safe alignment.
Definition Table.hpp:23
std::string format_separator(std::vector< Column > const &columns, std::string const &sep=" ")
Generate a separator line spanning the full table width.
Definition Table.hpp:107
Align
Definition Table.hpp:24
@ right
Definition Table.hpp:24
@ left
Definition Table.hpp:24
std::string pad(std::string const &s, int width, Align align=Align::right)
Pad a string to a target visual width, handling ANSI codes.
Definition Table.hpp:55
int visual_width(std::string const &s)
Compute the visual width of a string, ignoring ANSI escape codes.
Definition Table.hpp:31
std::string format_row(std::vector< Column > const &columns, Row const &cells, std::string const &sep=" ")
Format a row of cells according to column definitions.
Definition Table.hpp:84
std::vector< std::string > Row
A row of pre-formatted cell strings.
Definition Table.hpp:77
std::string format_md_row(Row const &cells, std::vector< Column > const &columns={})
Format a row as a markdown table row.
Definition Table.hpp:147
Row header_labels(std::vector< Column > const &columns)
Extract header labels from column definitions as a Row.
Definition Table.hpp:130
std::string format_md_separator(std::vector< Column > const &columns)
Generate a markdown alignment row.
Definition Table.hpp:164
Column definition for table formatting.
Definition Table.hpp:69
Align align
Definition Table.hpp:72
bool enabled
Definition Table.hpp:73
int width
Definition Table.hpp:71
std::string label
Definition Table.hpp:70