Utils: Fix UsageInformation still outputting a dash when no short name is specified. Same for long name.

This commit is contained in:
Jan 2019-12-30 23:51:13 +01:00
parent af55c202cf
commit 5f833969f9

View File

@ -50,7 +50,7 @@ void UsageInformation::Print()
for (auto commandLineOption : m_command_line_options) for (auto commandLineOption : m_command_line_options)
{ {
if(categories.find(commandLineOption->m_category) == categories.end()) if (categories.find(commandLineOption->m_category) == categories.end())
categories[commandLineOption->m_category] = std::vector<const CommandLineOption*>(); categories[commandLineOption->m_category] = std::vector<const CommandLineOption*>();
categories[commandLineOption->m_category].push_back(commandLineOption); categories[commandLineOption->m_category].push_back(commandLineOption);
@ -62,40 +62,44 @@ void UsageInformation::Print()
for (auto option : m_command_line_options) for (auto option : m_command_line_options)
{ {
if(option->m_short_name.length() > longestShortName) if (option->m_short_name.length() > longestShortName)
longestShortName = option->m_short_name.length(); longestShortName = option->m_short_name.length();
if(option->m_long_name.length() > longestLongName) if (option->m_long_name.length() > longestLongName)
longestLongName = option->m_long_name.length(); longestLongName = option->m_long_name.length();
const size_t argumentLength = GetOptionArgumentLength(option); const size_t argumentLength = GetOptionArgumentLength(option);
if(argumentLength > longestArgumentLength) if (argumentLength > longestArgumentLength)
longestArgumentLength = argumentLength; longestArgumentLength = argumentLength;
} }
bool firstCategory = true; bool firstCategory = true;
for (auto& category : categories) for (auto& category : categories)
{ {
if(!firstCategory) if (!firstCategory)
str << std::endl; str << std::endl;
else else
firstCategory = false; firstCategory = false;
if(!category.first.empty()) if (!category.first.empty())
{ {
str << "== " << category.first << " ==" << std::endl; str << "== " << category.first << " ==" << std::endl;
} }
for (auto option : category.second) for (auto option : category.second)
{ {
str << std::setw(longestShortName + 1) << "-" + option->m_short_name; str << std::setw(static_cast<std::streamsize>(longestShortName) + 1) << (!option->m_short_name.empty()
? "-" + option->m_short_name
: "");
if(!option->m_short_name.empty() && !option->m_long_name.empty()) if (!option->m_short_name.empty() && !option->m_long_name.empty())
str << ", "; str << ", ";
else else
str << " "; str << " ";
str << std::setw(longestLongName + 2) << "--" + option->m_long_name; str << std::setw(static_cast<std::streamsize>(longestLongName) + 2) << (!option->m_long_name.empty()
? "--" + option->m_long_name
: "");
str << " "; str << " ";
str << std::setw(longestArgumentLength) << GetOptionArgument(option); str << std::setw(longestArgumentLength) << GetOptionArgument(option);
@ -112,7 +116,7 @@ void UsageInformation::PrintUsageOverview(std::stringstream& str)
str << m_application_name << " [options]"; str << m_application_name << " [options]";
for (ArgumentUsage& argument : m_arguments) for (ArgumentUsage& argument : m_arguments)
{ {
if(argument.m_optional) if (argument.m_optional)
{ {
str << " [" << argument.m_name << "]"; str << " [" << argument.m_name << "]";
} }
@ -121,7 +125,7 @@ void UsageInformation::PrintUsageOverview(std::stringstream& str)
str << " <" << argument.m_name << ">"; str << " <" << argument.m_name << ">";
} }
} }
if(m_var_args) if (m_var_args)
{ {
str << "..."; str << "...";
} }
@ -135,7 +139,7 @@ std::string UsageInformation::GetOptionArgument(const CommandLineOption* option)
bool firstParam = true; bool firstParam = true;
for (const std::string& param : option->m_parameters) for (const std::string& param : option->m_parameters)
{ {
if(!firstParam) if (!firstParam)
str << " "; str << " ";
else else
firstParam = false; firstParam = false;
@ -157,6 +161,6 @@ size_t UsageInformation::GetOptionArgumentLength(const CommandLineOption* option
} }
return parameterCount * 2 // < and > return parameterCount * 2 // < and >
+ parameterCombinedStringLength + parameterCombinedStringLength
+ (parameterCount > 1 ? parameterCount - 1 : 0); // One space between each argument + (parameterCount > 1 ? parameterCount - 1 : 0); // One space between each argument
} }