42 std::vector<std::string> lines{};
43 lines.push_back(format.
format(
44 "'{}' is '{}' due to configuration:",
47 lines.emplace_back(
"");
48 lines.append_range(config.
prettify(format));
66[[nodiscard]] std::vector<std::string>
69 std::vector<std::string> lines{};
70 lines.emplace_back(
"");
72 lines.emplace_back(
"");
97 std::vector<std::string> lines;
98 lines.push_back(format.
format(
"Global unique color limit is '{}'.",
FormatParam{color_count_limit, Style::bold}));
99 lines.emplace_back(
"");
100 lines.emplace_back(
"Color limit definition:");
101 lines.push_back(format.
format(
103 FormatParam{num_pals.canonical_name(), Style::bold | Style::yellow},
104 FormatParam{
"nontransparent_colors_per_pal", Style::bold}));
105 lines.push_back(format.
format(
107 FormatParam{num_pals.value(), Style::bold | Style::yellow},
110 lines.emplace_back(
"");
133 std::string_view label,
134 std::size_t computed_limit,
138 std::vector<std::string> lines;
141 lines.emplace_back(
"");
142 lines.push_back(format.
format(
"{} definition:",
FormatParam{label, Style::bold}));
143 lines.push_back(format.
format(
145 FormatParam{total_cfg.canonical_name(), Style::bold | Style::yellow},
146 FormatParam{primary_cfg.canonical_name(), Style::bold | Style::yellow}));
147 lines.push_back(format.
format(
152 lines.emplace_back(
"");
179template <std::
size_t N>
183 const std::string &message,
185 const std::string &pal_label,
186 const std::vector<std::size_t> &violating_slots)
188 std::vector<std::string> lines;
191 lines.emplace_back();
217template <std::
size_t N>
221 const std::string &message,
223 const std::string &pal_label,
224 const std::vector<std::size_t> &violating_slots)
226 std::vector<std::string> lines;
229 lines.emplace_back();
257 const std::string &message,
259 const std::string &pal_label,
260 const std::vector<std::size_t> &violating_slots)
262 std::vector<std::string> lines;
265 lines.emplace_back();
288 const Rgba32 &extrinsic_transparency,
289 const std::vector<std::size_t> &color_version_tile_indices)
291 std::vector<std::string> lines;
292 for (std::size_t v = 0; v < color_version_tile_indices.size(); ++v) {
293 const auto tile_index = color_version_tile_indices.at(v);
295 lines.emplace_back(format.
format(
296 "Color version {} (secondary {}):",
298 FormatParam{metatile::message_header(format, mt_index, layer, subtile), Style::bold}));
299 lines.append_range(tile_printer.
print_tile(pixel_tiles.at(tile_index), extrinsic_transparency));
324 const std::vector<PackingParams::PrimaryTileRef> &primary_tiles,
325 const Rgba32 &extrinsic_transparency,
326 const std::vector<std::pair<std::size_t, std::size_t>> &primary_color_version_entries,
327 std::size_t version_offset)
329 std::vector<std::string> lines;
330 for (std::size_t v = 0; v < primary_color_version_entries.size(); ++v) {
331 const auto &[tile_index, pal_index] = primary_color_version_entries.at(v);
332 const auto &primary_ref = primary_tiles.at(tile_index);
333 lines.emplace_back(format.
format(
334 "Color version {} (primary {}, palette '{}'):",
337 metatile::message_header(format, primary_ref.metatile_index, primary_ref.layer, primary_ref.subtile),
339 FormatParam{pal_filename(pal_index), Style::bold}));
340 lines.append_range(tile_printer.
print_tile(primary_ref.tile, extrinsic_transparency));
357[[nodiscard]]
inline std::vector<std::string>
360 constexpr std::size_t max_displayed_refs = 8;
361 constexpr std::size_t refs_per_line = 2;
363 std::vector<std::string> lines;
364 const std::size_t display_count = std::min(tile_indices.size(), max_displayed_refs);
365 std::string current_line;
366 std::size_t count_on_line = 0;
367 for (std::size_t i = 0; i < display_count; i++) {
368 if (count_on_line > 0) {
369 current_line +=
", ";
374 if (count_on_line == refs_per_line) {
375 lines.emplace_back(current_line);
376 current_line.clear();
380 if (tile_indices.size() > max_displayed_refs) {
381 if (!current_line.empty()) {
382 lines.emplace_back(current_line);
383 current_line.clear();
386 format.
format(
"... and {} more.",
FormatParam{tile_indices.size() - max_displayed_refs, Style::bold}));
388 else if (!current_line.empty()) {
389 lines.emplace_back(current_line);
407 const TextFormatter &format,
const std::map<std::size_t, std::vector<std::size_t>> &members_by_pal)
409 std::vector<std::string> lines;
410 for (
const auto &[pal_index, tile_indices] : members_by_pal) {
411 lines.emplace_back(format.
format(
412 "Palette '{}': '{}' tilemap entries:",
438 const Rgba32 &extrinsic_transparency,
439 const std::map<std::size_t, std::vector<std::size_t>> &members_by_pal)
441 std::vector<std::string> lines;
442 for (
const auto &[pal_index, tile_indices] : members_by_pal) {
443 const auto representative_tile_index = tile_indices.front();
445 lines.emplace_back(format.
format(
446 "Representative shape for palette '{}' (secondary {}):",
448 FormatParam{metatile::message_header(format, mt_index, layer, subtile), Style::bold}));
449 lines.append_range(tile_printer.
print_tile(pixel_tiles.at(representative_tile_index), extrinsic_transparency));
473 const std::vector<PackingParams::PrimaryTileRef> &primary_tiles,
474 const Rgba32 &extrinsic_transparency,
475 const std::map<std::size_t, std::vector<std::size_t>> &primary_members_by_pal)
477 std::vector<std::string> lines;
478 for (
const auto &[pal_index, tile_indices] : primary_members_by_pal) {
479 const auto representative_tile_index = tile_indices.front();
480 const auto &primary_ref = primary_tiles.at(representative_tile_index);
481 lines.emplace_back(format.
format(
482 "Representative shape for palette '{}' (primary {}):",
485 metatile::message_header(format, primary_ref.metatile_index, primary_ref.layer, primary_ref.subtile),
487 lines.append_range(tile_printer.
print_tile(primary_ref.tile, extrinsic_transparency));
A container that wraps a configuration value with its name and source information.
std::vector< std::string > prettify(const TextFormatter &formatter) const
Generates a prettified, styled readout of this configuration value.
Represents a palette hint for the palette packing algorithm.
A collection of printer functions for the Palette and related types.
virtual std::vector< std::string > print_pal_hint_with_highlights(const PaletteHint &hint, const std::vector< std::size_t > &slots) const =0
virtual std::vector< std::string > print_rgba_pal_with_highlights(const Palette< Rgba32 > &pal, const std::vector< std::size_t > &slots) const =0
A generic palette container for colors that support transparency checking.
An 8x8 tile backed by literal-array-based per-pixel storage of an arbitrary pixel type.
Represents a 32-bit RGBA color.
Abstract base class for applying text styling with context-aware formatting.
virtual std::string format(const std::string &format_str, const std::vector< FormatParam > ¶ms) const
Formats a string with styled parameters using fmtlib syntax.
A collection of printer functions for various tile types.
virtual std::vector< std::string > print_tile(const PixelTile< Rgba32 > &tile, const Rgba32 &extrinsic_transparency) const =0
std::vector< std::string > build_pal_hint_highlight_lines(const TextFormatter &format, const PalettePrinter &pal_printer, const std::string &message, const PaletteHint &hint, const std::string &pal_label, const std::vector< std::size_t > &violating_slots)
Builds note lines displaying a palette hint with highlighted violating slots.
std::vector< std::string > build_porytiles_pal_highlight_lines(const TextFormatter &format, const PalettePrinter &pal_printer, const std::string &message, const Palette< Rgba32, N > &pal, const std::string &pal_label, const std::vector< std::size_t > &violating_slots)
Builds note lines displaying a Porytiles palette with highlighted violating slots.
std::vector< std::string > build_representative_tile_per_palette_lines(const TextFormatter &format, const TilePrinter &tile_printer, const std::vector< PixelTile< Rgba32 > > &pixel_tiles, const Rgba32 &extrinsic_transparency, const std::map< std::size_t, std::vector< std::size_t > > &members_by_pal)
Builds note lines showing one representative tile (ASCII art) per palette.
std::vector< std::string > build_subtraction_limit_lines(const TextFormatter &format, std::string_view label, std::size_t computed_limit, const ConfigValue< std::size_t > &total_cfg, const ConfigValue< std::size_t > &primary_cfg)
Builds note lines explaining a derived limit computed as total minus primary.
std::vector< std::string > build_truncated_tile_ref_lines(const TextFormatter &format, const std::vector< std::size_t > &tile_indices)
Builds truncated tile reference lines, displaying up to 8 entries 2-per-line with ellipsis.
std::vector< std::string > build_per_palette_tile_ref_lines(const TextFormatter &format, const std::map< std::size_t, std::vector< std::size_t > > &members_by_pal)
Builds per-palette tile reference lines with a header and truncated listing for each palette.
std::vector< std::string > format_config_note(const TextFormatter &format, const ConfigValue< T > &config)
Format a ConfigValue into diagnostic note lines.
std::vector< std::string > format_config_note_with_separator(const TextFormatter &format, const ConfigValue< T > &config)
Format a ConfigValue into diagnostic note lines with a separator.
std::vector< std::string > build_primary_tile_color_version_lines(const TextFormatter &format, const TilePrinter &tile_printer, const std::vector< PackingParams::PrimaryTileRef > &primary_tiles, const Rgba32 &extrinsic_transparency, const std::vector< std::pair< std::size_t, std::size_t > > &primary_color_version_entries, std::size_t version_offset)
Builds note lines showing ASCII art for each primary tile color version in a sharing group.
std::vector< std::string > build_porymap_pal_highlight_lines(const TextFormatter &format, const PalettePrinter &pal_printer, const std::string &message, const Palette< Rgba32, N > &pal, const std::string &pal_label, const std::vector< std::size_t > &violating_slots)
Builds note lines displaying a Porymap palette with highlighted violating slots.
std::vector< std::string > build_primary_representative_tile_per_palette_lines(const TextFormatter &format, const TilePrinter &tile_printer, const std::vector< PackingParams::PrimaryTileRef > &primary_tiles, const Rgba32 &extrinsic_transparency, const std::map< std::size_t, std::vector< std::size_t > > &primary_members_by_pal)
Builds note lines showing one representative primary tile (ASCII art) per palette.
std::vector< std::string > build_tile_sharing_color_version_tile_lines(const TextFormatter &format, const TilePrinter &tile_printer, const std::vector< PixelTile< Rgba32 > > &pixel_tiles, const Rgba32 &extrinsic_transparency, const std::vector< std::size_t > &color_version_tile_indices)
Builds note lines showing ASCII art for each color version tile in a sharing group.
std::vector< std::string > build_global_color_limit_lines(const TextFormatter &format, std::size_t color_count_limit, const ConfigValue< std::size_t > &num_pals)
Builds note lines explaining the global color count limit for primary tileset compilation.
constexpr std::string_view diagnostic_separator
Utility functions for string manipulation and formatting.