40 std::vector<std::string> lines{};
41 lines.push_back(format.
format(
42 "'{}' is '{}' due to configuration:",
45 lines.emplace_back(
"");
46 lines.append_range(config.
prettify(format));
62[[nodiscard]] std::vector<std::string>
65 std::vector<std::string> lines{};
66 lines.emplace_back(
"");
68 lines.emplace_back(
"");
91 std::vector<std::string> lines;
92 lines.push_back(format.
format(
"Global unique color limit is '{}'.",
FormatParam{color_count_limit, Style::bold}));
93 lines.emplace_back(
"");
94 lines.emplace_back(
"Color limit definition:");
95 lines.push_back(format.
format(
97 FormatParam{num_palettes.canonical_name(), Style::bold | Style::yellow},
98 FormatParam{
"nontransparent_colors_per_palette", Style::bold}));
99 lines.push_back(format.
format(
101 FormatParam{num_palettes.value(), Style::bold | Style::yellow},
104 lines.emplace_back(
"");
125 std::string_view label,
126 std::size_t computed_limit,
130 std::vector<std::string> lines;
133 lines.emplace_back(
"");
134 lines.push_back(format.
format(
"{} definition:",
FormatParam{label, Style::bold}));
135 lines.push_back(format.
format(
137 FormatParam{total_cfg.canonical_name(), Style::bold | Style::yellow},
138 FormatParam{primary_cfg.canonical_name(), Style::bold | Style::yellow}));
139 lines.push_back(format.
format(
144 lines.emplace_back(
"");
169template <std::
size_t N>
173 const std::string &message,
175 const std::string &palette_label,
176 const std::vector<std::size_t> &violating_slots)
178 std::vector<std::string> lines;
181 lines.emplace_back();
205template <std::
size_t N>
209 const std::string &message,
211 const std::string &palette_label,
212 const std::vector<std::size_t> &violating_slots)
214 std::vector<std::string> lines;
217 lines.emplace_back();
243 const std::string &message,
245 const std::string &palette_label,
246 const std::vector<std::size_t> &violating_slots)
248 std::vector<std::string> lines;
251 lines.emplace_back();
272 const Rgba32 &extrinsic_transparency,
273 const std::vector<std::size_t> &color_version_tile_indices)
275 std::vector<std::string> lines;
276 for (std::size_t v = 0; v < color_version_tile_indices.size(); ++v) {
277 const auto tile_index = color_version_tile_indices.at(v);
279 lines.emplace_back(format.
format(
280 "Color version {} (secondary {}):",
282 FormatParam{metatile::message_header(format, mt_index, layer, subtile), Style::bold}));
283 lines.append_range(tile_printer.
print_tile(pixel_tiles.at(tile_index), extrinsic_transparency));
306 const std::vector<PackingParams::PrimaryTileRef> &primary_tiles,
307 const Rgba32 &extrinsic_transparency,
308 const std::vector<std::pair<std::size_t, std::size_t>> &primary_color_version_entries,
309 std::size_t version_offset)
311 std::vector<std::string> lines;
312 for (std::size_t v = 0; v < primary_color_version_entries.size(); ++v) {
313 const auto &[tile_index, palette_index] = primary_color_version_entries.at(v);
314 const auto &primary_ref = primary_tiles.at(tile_index);
315 lines.emplace_back(format.
format(
316 "Color version {} (primary {}, palette '{}'):",
319 metatile::message_header(format, primary_ref.metatile_index, primary_ref.layer, primary_ref.subtile),
321 FormatParam{palette_filename(palette_index), Style::bold}));
322 lines.append_range(tile_printer.
print_tile(primary_ref.tile, extrinsic_transparency));
338[[nodiscard]]
inline std::vector<std::string>
341 constexpr std::size_t max_displayed_refs = 8;
343 std::vector<std::string> lines;
344 const std::size_t display_count = std::min(tile_indices.size(), max_displayed_refs);
346 for (std::size_t i = 0; i < display_count; i++) {
353 if (!joined.empty()) {
354 lines.emplace_back(joined);
356 if (tile_indices.size() > max_displayed_refs) {
358 format.
format(
"... and {} more.",
FormatParam{tile_indices.size() - max_displayed_refs, Style::bold}));
374 const TextFormatter &format,
const std::map<std::size_t, std::vector<std::size_t>> &members_by_palette)
376 std::vector<std::string> lines;
377 for (
const auto &[palette_index, tile_indices] : members_by_palette) {
378 lines.emplace_back(format.
format(
379 "Palette '{}': '{}' tilemap entries:",
380 FormatParam{palette_filename(palette_index), Style::bold},
403 const Rgba32 &extrinsic_transparency,
404 const std::map<std::size_t, std::vector<std::size_t>> &members_by_palette)
406 std::vector<std::string> lines;
407 for (
const auto &[palette_index, tile_indices] : members_by_palette) {
408 const auto representative_tile_index = tile_indices.front();
410 lines.emplace_back(format.
format(
411 "Representative shape for palette '{}' (secondary {}):",
412 FormatParam{palette_filename(palette_index), Style::bold},
413 FormatParam{metatile::message_header(format, mt_index, layer, subtile), Style::bold}));
414 lines.append_range(tile_printer.
print_tile(pixel_tiles.at(representative_tile_index), extrinsic_transparency));
436 const std::vector<PackingParams::PrimaryTileRef> &primary_tiles,
437 const Rgba32 &extrinsic_transparency,
438 const std::map<std::size_t, std::vector<std::size_t>> &primary_members_by_palette)
440 std::vector<std::string> lines;
441 for (
const auto &[palette_index, tile_indices] : primary_members_by_palette) {
442 const auto representative_tile_index = tile_indices.front();
443 const auto &primary_ref = primary_tiles.at(representative_tile_index);
444 lines.emplace_back(format.
format(
445 "Representative shape for palette '{}' (primary {}):",
446 FormatParam{palette_filename(palette_index), Style::bold},
448 metatile::message_header(format, primary_ref.metatile_index, primary_ref.layer, primary_ref.subtile),
450 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_rgba_palette_with_highlights(const Palette< Rgba32 > &palette, const std::vector< std::size_t > &slots) const =0
virtual std::vector< std::string > print_palette_hint_with_highlights(const PaletteHint &hint, 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_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_palette)
Builds note lines showing one representative tile (ASCII art) per palette.
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_palette)
Builds note lines showing one representative primary 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, listing up to 8 entries comma-joined with ellipsis.
std::vector< std::string > build_global_color_limit_lines(const TextFormatter &format, std::size_t color_count_limit, const ConfigValue< std::size_t > &num_palettes)
Builds note lines explaining the global color count limit for primary tileset compilation.
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 > build_per_palette_tile_ref_lines(const TextFormatter &format, const std::map< std::size_t, std::vector< std::size_t > > &members_by_palette)
Builds per-palette tile reference lines with a header and truncated listing for each palette.
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_palette_highlight_lines(const TextFormatter &format, const PalettePrinter &palette_printer, const std::string &message, const Palette< Rgba32, N > &palette, const std::string &palette_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_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.
constexpr std::string_view diagnostic_separator
std::vector< std::string > build_palette_hint_highlight_lines(const TextFormatter &format, const PalettePrinter &palette_printer, const std::string &message, const PaletteHint &hint, const std::string &palette_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_palette_highlight_lines(const TextFormatter &format, const PalettePrinter &palette_printer, const std::string &message, const Palette< Rgba32, N > &palette, const std::string &palette_label, const std::vector< std::size_t > &violating_slots)
Builds note lines displaying a Porytiles palette with highlighted violating slots.
Utility functions for string manipulation and formatting.