mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-21 11:25:08 +03:00
cam: options: Move key string left in usage() for key-value parser
When printing usage information for a key-value parser, the documentation of the keys and values is printed in the second column of the usage text: -s, --stream key=value[,key=value,...] ... Set configuration of a camera stream height=integer Height in pixels pixelformat=string Pixel format name role=string Role for the stream (viewfinder, video, still, raw) width=integer Width in pixels -h, --help Display this help message This results in long lines. Improve this by moving the key description to the first column, and aligning the value description as other option description text: -s, --stream key=value[,key=value,...] ... Set configuration of a camera stream height=integer Height in pixels pixelformat=string Pixel format name role=string Role for the stream (viewfinder, video, still, raw) width=integer Width in pixels -h, --help Display this help message Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
c71691e66c
commit
b53f68e66c
2 changed files with 19 additions and 10 deletions
|
@ -410,27 +410,30 @@ KeyValueParser::Options KeyValueParser::parse(const char *arguments)
|
|||
return options;
|
||||
}
|
||||
|
||||
void KeyValueParser::usage(int indent)
|
||||
unsigned int KeyValueParser::maxOptionLength() const
|
||||
{
|
||||
unsigned int space = 0;
|
||||
unsigned int maxLength = 0;
|
||||
|
||||
for (auto const &iter : optionsMap_) {
|
||||
const Option &option = iter.second;
|
||||
unsigned int length = 14;
|
||||
unsigned int length = 10 + strlen(option.name);
|
||||
if (option.argument != ArgumentNone)
|
||||
length += 1 + strlen(option.typeName());
|
||||
if (option.argument == ArgumentOptional)
|
||||
length += 2;
|
||||
|
||||
if (length > space)
|
||||
space = length;
|
||||
if (length > maxLength)
|
||||
maxLength = length;
|
||||
}
|
||||
|
||||
space = (space + 7) / 8 * 8;
|
||||
return maxLength;
|
||||
}
|
||||
|
||||
void KeyValueParser::usage(int indent)
|
||||
{
|
||||
for (auto const &iter : optionsMap_) {
|
||||
const Option &option = iter.second;
|
||||
std::string argument = option.name;
|
||||
std::string argument = std::string(" ") + option.name;
|
||||
|
||||
if (option.argument != ArgumentNone) {
|
||||
if (option.argument == ArgumentOptional)
|
||||
|
@ -442,14 +445,13 @@ void KeyValueParser::usage(int indent)
|
|||
argument += "]";
|
||||
}
|
||||
|
||||
std::cerr << std::setw(indent) << std::right << " "
|
||||
<< std::setw(space) << std::left << argument;
|
||||
std::cerr << std::setw(indent) << std::left << argument;
|
||||
|
||||
for (const char *help = option.help, *end = help; end;) {
|
||||
end = strchr(help, '\n');
|
||||
if (end) {
|
||||
std::cerr << std::string(help, end - help + 1);
|
||||
std::cerr << std::setw(indent + space) << " ";
|
||||
std::cerr << std::setw(indent) << " ";
|
||||
help = end + 1;
|
||||
} else {
|
||||
std::cerr << help << std::endl;
|
||||
|
@ -917,6 +919,12 @@ void OptionsParser::usage()
|
|||
|
||||
if (length > indent)
|
||||
indent = length;
|
||||
|
||||
if (option->keyValueParser) {
|
||||
length = option->keyValueParser->maxOptionLength();
|
||||
if (length > indent)
|
||||
indent = length;
|
||||
}
|
||||
}
|
||||
|
||||
indent = (indent + 7) / 8 * 8;
|
||||
|
|
|
@ -72,6 +72,7 @@ private:
|
|||
KeyValueParser &operator=(const KeyValueParser &) = delete;
|
||||
|
||||
friend class OptionsParser;
|
||||
unsigned int maxOptionLength() const;
|
||||
void usage(int indent);
|
||||
|
||||
std::map<std::string, Option> optionsMap_;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue