|
|
@ -191,20 +191,29 @@ bool ArgParser::parseLongOption(std::string_view option, std::string_view next) |
|
|
|
|
|
|
|
|
|
|
|
bool ArgParser::parseArgument(std::string_view argument) |
|
|
|
bool ArgParser::parseArgument(std::string_view argument) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// No handler for argument
|
|
|
|
bool result = true; |
|
|
|
if (m_argumentIndex >= m_arguments.size()) { |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Argument& currentArgument = m_arguments.at(m_argumentIndex); |
|
|
|
for (;;) { |
|
|
|
bool result = currentArgument.acceptValue(argument.data()); |
|
|
|
// Run out of argument handlers
|
|
|
|
|
|
|
|
if (m_argumentIndex >= m_arguments.size()) { |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (result) { |
|
|
|
Argument& currentArgument = m_arguments.at(m_argumentIndex); |
|
|
|
currentArgument.addedValues++; |
|
|
|
result = currentArgument.acceptValue(argument.data()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (result) { |
|
|
|
|
|
|
|
currentArgument.addedValues++; |
|
|
|
|
|
|
|
if (currentArgument.addedValues >= currentArgument.maxValues) { |
|
|
|
|
|
|
|
m_argumentIndex++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (currentArgument.minValues == 0) { |
|
|
|
|
|
|
|
m_argumentIndex++; |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (currentArgument.addedValues >= currentArgument.maxValues) { |
|
|
|
break; |
|
|
|
m_argumentIndex++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
return result; |
|
|
|