Kelsidavis-WoWee/tools/editor/cli_format_table.hpp
Kelsi 824a6c8cab feat(editor): add --summary-dir bulk content inventory
Recursively walks a directory, identifies every file by 4-byte
magic, and reports per-format file count, total entries, and
bytes. Useful for content audits ("how many cinematics did
this asset bundle ship?") and for tracking migration progress
("what fraction of zones still lack a holiday catalog?").

Also extracts the format-magic table out of cli_info_magic.cpp
into a shared cli_format_table.{hpp,cpp} so --info-magic and
--summary-dir reuse the same source of truth — adding a new
format now updates one row in one file instead of two. Both
flags use the standard catalog header (magic + version + name
+ entryCount) for catalog formats; asset/world formats are
counted but report 0 entries since their headers differ.

Supports --json variant for tooling integration.
2026-05-09 19:27:48 -07:00

37 lines
1.2 KiB
C++

#pragma once
#include <cstddef>
#include <cstdint>
namespace wowee {
namespace editor {
namespace cli {
// Shared table of every novel open format the editor
// recognizes — extracted so --info-magic and --summary-dir
// can both look up files by their 4-byte magic without
// drifting. Adding a new format requires appending one row
// in cli_format_table.cpp.
struct FormatMagicEntry {
char magic[4]; // 4-char binary magic
const char* extension; // file suffix (with dot)
const char* category; // grouping label
const char* infoFlag; // --info-* flag, nullptr if none
const char* description;
};
// Returns a pointer into the static table on match, nullptr
// otherwise. The 4-byte magic argument does NOT need to be
// null-terminated — only the first 4 bytes are inspected.
const FormatMagicEntry* findFormatByMagic(const char magic[4]);
// Iterate the table — used by --summary-dir to pre-allocate
// per-format counters keyed by index, and by tooling that
// wants to enumerate the full set.
const FormatMagicEntry* formatTableBegin();
const FormatMagicEntry* formatTableEnd();
size_t formatTableSize();
} // namespace cli
} // namespace editor
} // namespace wowee