Commit 2e4c78805db5c6ac393d2c60c745775162cb3133

Authored by Jarryd Beck
1 parent 96b2e09b

format help description

src/cxxopts.cpp
@@ -79,7 +79,50 @@ namespace cxxopts @@ -79,7 +79,50 @@ namespace cxxopts
79 int width 79 int width
80 ) 80 )
81 { 81 {
82 - return text; 82 + std::string result;
  83 +
  84 + auto current = text.begin();
  85 + auto startLine = current;
  86 + auto lastSpace = current;
  87 +
  88 + int size = 0;
  89 +
  90 + while (current != text.end())
  91 + {
  92 + if (*current == ' ')
  93 + {
  94 + lastSpace = current;
  95 + }
  96 +
  97 + if (size > width)
  98 + {
  99 + if (lastSpace == startLine)
  100 + {
  101 + result.append(startLine, current + 1);
  102 + result.append("\n");
  103 + result.append(start, ' ');
  104 + }
  105 + else
  106 + {
  107 + result.append(startLine, current);
  108 + result.append("\n");
  109 + result.append(start, ' ');
  110 + }
  111 + startLine = lastSpace + 1;
  112 + size = 0;
  113 + }
  114 + else
  115 + {
  116 + ++size;
  117 + }
  118 +
  119 + ++current;
  120 + }
  121 +
  122 + //append whatever is left
  123 + result.append(startLine, current);
  124 +
  125 + return result;
83 } 126 }
84 } 127 }
85 128
@@ -367,7 +410,7 @@ Options::help() const @@ -367,7 +410,7 @@ Options::help() const
367 auto fiter = format.begin(); 410 auto fiter = format.begin();
368 for (const auto& o : group->second) 411 for (const auto& o : group->second)
369 { 412 {
370 - auto d = format_description(o.desc, longest, allowed); 413 + auto d = format_description(o.desc, longest + OPTION_DESC_GAP, allowed);
371 414
372 result += fiter->first; 415 result += fiter->first;
373 if (fiter->first.size() > longest) 416 if (fiter->first.size() > longest)
src/example.cpp
@@ -37,7 +37,9 @@ int main(int argc, char* argv[]) @@ -37,7 +37,9 @@ int main(int argc, char* argv[])
37 ("a,apple", "an apple") 37 ("a,apple", "an apple")
38 ("b,bob", "Bob") 38 ("b,bob", "Bob")
39 ("f,file", "File", cxxopts::value<std::vector<std::string>>()) 39 ("f,file", "File", cxxopts::value<std::vector<std::string>>())
40 - ("positional", "Positional arguments", cxxopts::value<std::string>()) 40 + ("positional",
  41 + "Positional arguments: these are the arguments that are entered "
  42 + "without an option", cxxopts::value<std::string>())
41 ("help", "Print help") 43 ("help", "Print help")
42 ; 44 ;
43 45