Skip to content

Commit

Permalink
implements column-aligned multi-line help message for arguments (issue
Browse files Browse the repository at this point in the history
  • Loading branch information
heshiming committed Jan 30, 2023
1 parent 15d745f commit 3d75967
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion include/argparse/argparse.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,7 @@ class Argument {

friend std::ostream &operator<<(std::ostream &stream,
const Argument &argument) {
auto stream_width = stream.width();
std::stringstream name_stream;
name_stream << " "; // indent
if (argument.is_positional(argument.m_names.front(),
Expand All @@ -668,7 +669,31 @@ class Argument {
name_stream << " " << argument.m_metavar;
}
}
stream << name_stream.str() << "\t" << argument.m_help;
auto spacing = name_stream.str().size();
auto pos = 0;
auto prev = 0;
auto first_line = true;
stream << name_stream.str();
while ((pos = argument.m_help.find('\n', prev)) != std::string::npos) {
auto line = argument.m_help.substr(prev, pos - prev + 1);
if (first_line) {
stream << "\t" << line;
first_line = false;
} else {
stream.width(stream_width);
stream << std::string(spacing, ' ') << "\t" << line;
}
prev += pos - prev + 1;
}
if (first_line)
stream << "\t" << argument.m_help;
else {
auto leftover = argument.m_help.substr(prev, argument.m_help.size() - prev);
if (leftover.size() > 0) {
stream.width(stream_width);
stream << std::string(spacing, ' ') << "\t" << leftover;
}
}

// print nargs spec
if (!argument.m_help.empty()) {
Expand Down

0 comments on commit 3d75967

Please sign in to comment.