source: utilib/trunk/src/io/utilib/OptionParser.cpp @ 1488

Revision 1488, 2.3 KB checked in by wehart, 6 years ago (diff)

Segregating OptionParser? code into a *.cpp file.

Misc fixes to the wordwrapper logic. I'm sure there are still bugs...

Line 
1
2#include <utilib/OptionParser.h>
3
4namespace utilib
5{
6
7void OptionParser::write(std::ostream& os) const
8{
9   std::string indent = "                                ";
10   std::string _usage = "Usage: ";
11   _usage += usage;
12   wordwrap_printline(os, _usage,indent);
13   wordwrap_printline(os, description,"");
14   os << std::endl;
15   os << "options:" << std::endl;
16   {
17      std::list<std::string>::const_iterator curr = long_names.begin();
18      std::list<std::string>::const_iterator end  = long_names.end();
19      std::list<char>::const_iterator scurr = short_names.begin();
20      while (curr != end)
21      {
22         const Parameter pinfo = params.get_raw_info(*curr);
23         std::ostringstream tmp;
24         char sname = *scurr;
25         if (sname == (char)0)
26            tmp << "    ";
27         else
28            tmp << "  -" << sname;
29         if ((*curr)[0] != '_') {
30            if (sname == (char)0)
31               tmp << "  --" << *curr;
32            else
33               tmp << ", --" << *curr;
34         }
35         const char* cstr = tmp.str().c_str();
36         int tmplen = strlen(cstr);
37         if (tmplen < 30)
38         {
39            std::string line;
40            line = cstr;
41            for (int i = tmplen; i < 30; i++)
42               line += " ";
43            line += pinfo.description;
44            wordwrap_printline(os,line, indent);
45         }
46         else {
47            os << cstr << std::endl << indent;
48            wordwrap_printline(os,pinfo.description,indent);
49         }
50         curr++;
51         scurr++;
52      }
53   }
54   os << std::endl;
55   os << "arguments:" << std::endl;
56   {
57      std::list<std::pair<std::string, std::string> >::const_iterator curr = arg_definitions.begin();
58      std::list<std::pair<std::string, std::string> >::const_iterator end  = arg_definitions.end();
59      while (curr != end)
60      {
61         std::string tmp;
62         tmp = "  ";
63         tmp += curr->first;
64         tmp += ":  ";
65         tmp += curr->second;
66         wordwrap_printline(os,tmp,"      ");
67         curr++;
68      }
69   }
70}
71
72
73
74OptionParser::arg_t& OptionParser::parse_args(int argc, char** argv)
75{
76   ParameterList plist;
77   plist.process_parameters(argc, argv, 0);
78   plist.write_parameters(std::cout);
79   params.set_parameters(plist);
80   for (int i = 0; i < argc; i++)
81   {
82      processed_args.push_back(argv[i]);
83   }
84
85   return processed_args;
86}
87
88
89}
Note: See TracBrowser for help on using the repository browser.