chore: improve args code for other tools

This commit is contained in:
Jan 2024-09-23 20:00:00 +02:00
parent c37e9984ba
commit da18291c89
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
4 changed files with 104 additions and 76 deletions

View File

@ -7,6 +7,7 @@
#include "Utils/FileUtils.h" #include "Utils/FileUtils.h"
#include <filesystem> #include <filesystem>
#include <format>
#include <iostream> #include <iostream>
#include <regex> #include <regex>
#include <type_traits> #include <type_traits>
@ -155,7 +156,7 @@ void LinkerArgs::PrintUsage()
void LinkerArgs::PrintVersion() void LinkerArgs::PrintVersion()
{ {
std::cout << "OpenAssetTools Linker " << std::string(GIT_VERSION) << "\n"; std::cout << std::format("OpenAssetTools Linker {}\n", GIT_VERSION);
} }
void LinkerArgs::SetBinFolder(const char* argv0) void LinkerArgs::SetBinFolder(const char* argv0)

View File

@ -4,38 +4,55 @@
#include "Utils/Arguments/CommandLineOption.h" #include "Utils/Arguments/CommandLineOption.h"
#include "Utils/Arguments/UsageInformation.h" #include "Utils/Arguments/UsageInformation.h"
#include <format>
#include <iostream> #include <iostream>
#include <type_traits> #include <type_traits>
// clang-format off
const CommandLineOption* const OPTION_HELP = const CommandLineOption* const OPTION_HELP =
CommandLineOption::Builder::Create().WithShortName("?").WithLongName("help").WithDescription("Displays usage information.").Build(); CommandLineOption::Builder::Create()
.WithShortName("?")
.WithLongName("help")
.WithDescription("Displays usage information.")
.Build();
const CommandLineOption* const OPTION_VERSION = const CommandLineOption* const OPTION_VERSION =
CommandLineOption::Builder::Create().WithLongName("version").WithDescription("Prints the application version.").Build(); CommandLineOption::Builder::Create()
.WithLongName("version")
.WithDescription("Prints the application version.")
.Build();
const CommandLineOption* const OPTION_VERBOSE = const CommandLineOption* const OPTION_VERBOSE =
CommandLineOption::Builder::Create().WithShortName("v").WithLongName("verbose").WithDescription("Outputs a lot more and more detailed messages.").Build(); CommandLineOption::Builder::Create()
.WithShortName("v")
.WithLongName("verbose")
.WithDescription("Outputs a lot more and more detailed messages.")
.Build();
const CommandLineOption* const OPTION_OUTPUT_FOLDER = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_OUTPUT_FOLDER =
.WithShortName("o") CommandLineOption::Builder::Create()
.WithLongName("output") .WithShortName("o")
.WithDescription("Specify the folder to save the generated files. Defaults to the current directory.") .WithLongName("output")
.WithParameter("outputPath") .WithDescription("Specify the folder to save the generated files. Defaults to the current directory.")
.Build(); .WithParameter("outputPath")
.Build();
const CommandLineOption* const OPTION_BUILD_LOG = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_BUILD_LOG =
.WithLongName("build-log") CommandLineOption::Builder::Create()
.WithDescription("Specify a file to write a build log to.") .WithLongName("build-log")
.WithParameter("logFilePath") .WithDescription("Specify a file to write a build log to.")
.Build(); .WithParameter("logFilePath")
.Build();
const CommandLineOption* const OPTION_DEFINE = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_DEFINE =
.WithShortName("d") CommandLineOption::Builder::Create()
.WithLongName("define") .WithShortName("d")
.WithDescription("Adds a define for the templating process. Can be of format define or define=value.") .WithLongName("define")
.WithParameter("defineValue") .WithDescription("Adds a define for the templating process. Can be of format define or define=value.")
.Reusable() .WithParameter("defineValue")
.Build(); .Reusable()
.Build();
// clang-format on
const CommandLineOption* const COMMAND_LINE_OPTIONS[]{ const CommandLineOption* const COMMAND_LINE_OPTIONS[]{
OPTION_HELP, OPTION_HELP,
@ -66,7 +83,7 @@ void RawTemplaterArguments::PrintUsage()
void RawTemplaterArguments::PrintVersion() void RawTemplaterArguments::PrintVersion()
{ {
std::cout << "OpenAssetTools RawTemplater " << std::string(GIT_VERSION) << "\n"; std::cout << std::format("OpenAssetTools RawTemplater {}\n", GIT_VERSION);
} }
bool RawTemplaterArguments::ParseArgs(const int argc, const char** argv, bool& shouldContinue) bool RawTemplaterArguments::ParseArgs(const int argc, const char** argv, bool& shouldContinue)
@ -122,9 +139,9 @@ bool RawTemplaterArguments::ParseArgs(const int argc, const char** argv, bool& s
const auto separator = arg.find('='); const auto separator = arg.find('=');
if (separator != std::string::npos) if (separator != std::string::npos)
m_defines.emplace_back(std::make_pair(arg.substr(0, separator), arg.substr(separator + 1))); m_defines.emplace_back(arg.substr(0, separator), arg.substr(separator + 1));
else else
m_defines.emplace_back(std::make_pair(arg, std::string())); m_defines.emplace_back(arg, std::string());
} }
} }

View File

@ -7,6 +7,7 @@
#include "Utils/FileUtils.h" #include "Utils/FileUtils.h"
#include "Utils/StringUtils.h" #include "Utils/StringUtils.h"
#include <format>
#include <iostream> #include <iostream>
#include <regex> #include <regex>
#include <type_traits> #include <type_traits>
@ -167,7 +168,7 @@ void UnlinkerArgs::PrintUsage()
void UnlinkerArgs::PrintVersion() void UnlinkerArgs::PrintVersion()
{ {
std::cout << "OpenAssetTools Unlinker " << std::string(GIT_VERSION) << "\n"; std::cout << std::format("OpenAssetTools Unlinker {}\n", GIT_VERSION);
} }
void UnlinkerArgs::SetVerbose(const bool isVerbose) void UnlinkerArgs::SetVerbose(const bool isVerbose)

View File

@ -4,74 +4,83 @@
#include "Utils/Arguments/CommandLineOption.h" #include "Utils/Arguments/CommandLineOption.h"
#include "Utils/Arguments/UsageInformation.h" #include "Utils/Arguments/UsageInformation.h"
#include <format>
#include <iostream> #include <iostream>
#include <type_traits> #include <type_traits>
// clang-format off
const CommandLineOption* const OPTION_HELP = const CommandLineOption* const OPTION_HELP =
CommandLineOption::Builder::Create().WithShortName("?").WithLongName("help").WithDescription("Displays usage information.").Build(); CommandLineOption::Builder::Create()
.WithShortName("?")
.WithLongName("help")
.WithDescription("Displays usage information.")
.Build();
const CommandLineOption* const OPTION_VERSION = const CommandLineOption* const OPTION_VERSION =
CommandLineOption::Builder::Create().WithLongName("version").WithDescription("Prints the application version.").Build(); CommandLineOption::Builder::Create()
.WithLongName("version")
.WithDescription("Prints the application version.")
.Build();
const CommandLineOption* const OPTION_VERBOSE = const CommandLineOption* const OPTION_VERBOSE =
CommandLineOption::Builder::Create().WithShortName("v").WithLongName("verbose").WithDescription("Outputs a lot more and more detailed messages.").Build(); CommandLineOption::Builder::Create()
.WithShortName("v")
.WithLongName("verbose")
.WithDescription("Outputs a lot more and more detailed messages.")
.Build();
// ------ constexpr auto CATEGORY_INPUT = "Input";
// INPUT
// ------
constexpr const char* CATEGORY_INPUT = "Input"; const CommandLineOption* const OPTION_HEADER =
CommandLineOption::Builder::Create()
.WithShortName("h")
.WithLongName("header")
.WithDescription("Reads from the specified header file.")
.WithCategory(CATEGORY_INPUT)
.WithParameter("headerFile")
.Reusable()
.Build();
const CommandLineOption* const OPTION_HEADER = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_COMMANDS_FILE =
.WithShortName("h") CommandLineOption::Builder::Create()
.WithLongName("header") .WithShortName("c")
.WithDescription("Reads from the specified header file.") .WithLongName("commands-file")
.WithCategory(CATEGORY_INPUT) .WithDescription("Specifies the commands file. Defaults to stdin.")
.WithParameter("headerFile") .WithCategory(CATEGORY_INPUT)
.Reusable() .WithParameter("commandFile")
.Build(); .Reusable()
.Build();
const CommandLineOption* const OPTION_COMMANDS_FILE = CommandLineOption::Builder::Create() constexpr auto CATEGORY_OUTPUT = "Output";
.WithShortName("c")
.WithLongName("commands-file")
.WithDescription("Specifies the commands file. Defaults to stdin.")
.WithCategory(CATEGORY_INPUT)
.WithParameter("commandFile")
.Reusable()
.Build();
// ------
// OUTPUT
// ------
constexpr const char* CATEGORY_OUTPUT = "Output";
const CommandLineOption* const OPTION_OUTPUT_FOLDER = const CommandLineOption* const OPTION_OUTPUT_FOLDER =
CommandLineOption::Builder::Create() CommandLineOption::Builder::Create()
.WithShortName("o") .WithShortName("o")
.WithLongName("output") .WithLongName("output")
.WithDescription("Specify the folder to save the generate code files to. Defaults to the current directory.") .WithDescription("Specify the folder to save the generate code files to. Defaults to the current directory.")
.WithCategory(CATEGORY_OUTPUT) .WithCategory(CATEGORY_OUTPUT)
.WithParameter("outputPath") .WithParameter("outputPath")
.Build(); .Build();
const CommandLineOption* const OPTION_PRINT = CommandLineOption::Builder::Create() const CommandLineOption* const OPTION_PRINT =
.WithShortName("p") CommandLineOption::Builder::Create()
.WithLongName("print") .WithShortName("p")
.WithDescription("Print the loaded data.") .WithLongName("print")
.WithCategory(CATEGORY_OUTPUT) .WithDescription("Print the loaded data.")
.Build(); .WithCategory(CATEGORY_OUTPUT)
.Build();
const CommandLineOption* const OPTION_GENERATE = const CommandLineOption* const OPTION_GENERATE =
CommandLineOption::Builder::Create() CommandLineOption::Builder::Create()
.WithShortName("g") .WithShortName("g")
.WithLongName("generate") .WithLongName("generate")
.WithDescription("Generates a specified asset/preset combination. Can be used multiple times. Available presets: " .WithDescription("Generates a specified asset/preset combination. Can be used multiple times. Available presets: ZoneLoad, ZoneWrite, AssetStructTests")
"ZoneLoad, ZoneWrite, AssetStructTests") .WithCategory(CATEGORY_OUTPUT)
.WithCategory(CATEGORY_OUTPUT) .WithParameter("assetName")
.WithParameter("assetName") .WithParameter("preset")
.WithParameter("preset") .Reusable()
.Reusable() .Build();
.Build(); // clang-format on
const CommandLineOption* const COMMAND_LINE_OPTIONS[]{ const CommandLineOption* const COMMAND_LINE_OPTIONS[]{
OPTION_HELP, OPTION_HELP,
@ -123,7 +132,7 @@ void ZoneCodeGeneratorArguments::PrintUsage()
void ZoneCodeGeneratorArguments::PrintVersion() void ZoneCodeGeneratorArguments::PrintVersion()
{ {
std::cout << "OpenAssetTools ZoneCodeGenerator " << std::string(GIT_VERSION) << "\n"; std::cout << std::format("OpenAssetTools ZoneCodeGenerator {}\n", GIT_VERSION);
} }
bool ZoneCodeGeneratorArguments::ParseArgs(const int argc, const char** argv, bool& shouldContinue) bool ZoneCodeGeneratorArguments::ParseArgs(const int argc, const char** argv, bool& shouldContinue)