First draft at autogenerating the table in the README.

This commit is contained in:
dg
2023-05-07 21:28:42 +00:00
parent 76450d00bf
commit 8e918706dc
3 changed files with 117 additions and 52 deletions

55
scripts/mkdocindex.cc Normal file
View File

@@ -0,0 +1,55 @@
#include "lib/globals.h"
#include "lib/proto.h"
#include "lib/flags.h"
#include <fmt/format.h>
extern const std::map<std::string, const ConfigProto*> formats;
int main(int argc, const char* argv[])
{
fmt::print("<!-- FORMATSSTART -->\n");
fmt::print("<!-- This section is automatically generated. Do not edit. -->\n");
fmt::print("| Profile | Format | Read? | Write? | Filesystem? |\n");
fmt::print("|:--------|:------:|:-----:|:------:|-------------|\n");
for (auto [name, config] : formats)
{
if (config->is_extension())
continue;
std::set<std::string> filesystems;
auto addFilesystem = [&](const FilesystemProto& fs) {
if (fs.type() != FilesystemProto::NOT_SET)
{
const auto *descriptor = FilesystemProto::FilesystemType_descriptor();
auto name = descriptor->FindValueByNumber(fs.type())->name();
filesystems.insert(name);
}
};
addFilesystem(config->filesystem());
for (const auto& group : config->option_group())
{
for (const auto& option : group.option())
addFilesystem(option.config().filesystem());
}
for (const auto& option : config->option())
addFilesystem(option.config().filesystem());
std::stringstream ss;
for (auto& fs : filesystems)
ss << fs << " ";
fmt::print("| {} | {} | {} | {} | {} |\n",
name, config->comment(),
config->has_decoder() ? "YES" : "",
config->has_encoder() ? "YES" : "",
ss.str());
}
std::cout << "{: .datatable }\n";
fmt::print("<!-- FORMATSEND -->\n");
return 0;
}