Changeset 1487


Ignore:
Timestamp:
08/10/08 23:56:25 (6 years ago)
Author:
wehart
Message:

Added a word-wrap utility to make formatting of option descriptions less
painful.

Location:
utilib/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • utilib/trunk/src/adt/utilib/string_ops.h

    r1376 r1487  
    2121#include <utilib/CharString.h> 
    2222 
    23 namespace utilib { 
     23namespace utilib 
     24{ 
    2425 
    2526 
     
    2728inline void toUpper(CharString& str) 
    2829{ 
    29 for (size_t i=0; i<str.size(); i++) 
    30   str[i] = toupper(str[i]); 
     30   for (size_t i = 0; i < str.size(); i++) 
     31      str[i] = toupper(str[i]); 
    3132} 
    3233 
     
    3435inline void toLower(CharString& str) 
    3536{ 
    36 for (size_t i=0; i<str.size(); i++) 
    37   str[i] = tolower(str[i]); 
     37   for (size_t i = 0; i < str.size(); i++) 
     38      str[i] = tolower(str[i]); 
    3839} 
    3940 
     
    4142inline BasicArray<CharString> split(const CharString& str, char sep) 
    4243{ 
    43 size_type len = str.size(); 
     44   size_type len = str.size(); 
    4445 
    45 int npart=1; 
    46 CharString tmp = str; 
    47 for (size_type i=0; i<len; i++) { 
    48   if (str[i] == sep) { 
    49      npart++; 
    50      tmp[i] = '\000'; 
    51      } 
    52   } 
     46   int npart = 1; 
     47   CharString tmp = str; 
     48   for (size_type i = 0; i < len; i++) 
     49   { 
     50      if (str[i] == sep) 
     51      { 
     52         npart++; 
     53         tmp[i] = '\000'; 
     54      } 
     55   } 
    5356 
    54 BasicArray<CharString> strs(npart); 
    55 size_type ndx=0; 
    56 for (size_type i=0; i<len; i++) { 
    57   if (ndx < len) 
    58      strs[i] = &(tmp[ndx]); 
    59   while ((ndx < len) && (tmp[ndx] != '\000')) 
    60     ndx++; 
    61   ndx++; 
    62   } 
     57   BasicArray<CharString> strs(npart); 
     58   size_type ndx = 0; 
     59   for (size_type i = 0; i < len; i++) 
     60   { 
     61      if (ndx < len) 
     62         strs[i] = &(tmp[ndx]); 
     63      while ((ndx < len) && (tmp[ndx] != '\000')) 
     64         ndx++; 
     65      ndx++; 
     66   } 
    6367 
    64 return strs; 
     68   return strs; 
    6569} 
    6670 
     
    6973inline CharString join(const BasicArray<CharString>& strs, char sep) 
    7074{ 
    71 CharString str; 
    72 if (strs.size() == 0) return str; 
    73 str += strs[0]; 
     75   CharString str; 
     76   if (strs.size() == 0) return str; 
     77   str += strs[0]; 
    7478 
    75 for (size_type i = 1; i<strs.size(); i++) { 
    76   str += sep; 
    77   str += strs[i]; 
    78   } 
     79   for (size_type i = 1; i < strs.size(); i++) 
     80   { 
     81      str += sep; 
     82      str += strs[i]; 
     83   } 
    7984 
    80 return str; 
     85   return str; 
     86} 
     87 
     88/// NOTE: this treats tabs as simple whitespace! 
     89inline void wordwrap_printline(std::ostream& os, const std::string& line, const std::string& prefix, unsigned int ncols = 79) 
     90{ 
     91   std::string::const_iterator curr = line.begin(); 
     92   std::string::const_iterator end  = line.end(); 
     93   std::string token; 
     94   std::string ws; 
     95   int col = 0; 
     96   while (curr != end) 
     97   { 
     98      if ((*curr == ' ') || (*curr == '\t')) 
     99      { 
     100         if ((col + ws.size() + token.size()) < ncols) 
     101         { 
     102            os << ws << token; 
     103            col = col + ws.size() + token.size(); 
     104         } 
     105         else 
     106         { 
     107            os << std::endl; 
     108            os << prefix; 
     109            os << token; 
     110            col = prefix.size() + token.size(); 
     111         } 
     112         token = ""; 
     113         ws = " "; 
     114         curr++; 
     115         if (curr == end) break; 
     116         while ((curr != end) && ((*curr == ' ') || (*curr == '\t'))) 
     117         { 
     118            ws += " "; 
     119            curr++; 
     120         } 
     121      } 
     122      else if (*curr == '\n') 
     123      { 
     124         curr++; 
     125         if (token == "") 
     126         { 
     127            os << std::endl; 
     128            if (curr != end) 
     129            { 
     130               os << prefix; 
     131               col = prefix.size(); 
     132            } 
     133         } 
     134         else if ((col + ws.size() + token.size()) < ncols) { 
     135            os << ws << token << std::endl; 
     136            col = col + ws.size() + token.size(); 
     137            if (curr != end) 
     138            { 
     139               os << prefix; 
     140               col = prefix.size(); 
     141            } 
     142         } 
     143         else 
     144         { 
     145            os << std::endl; 
     146            os << prefix; 
     147            os << token; 
     148            col = prefix.size() + token.size(); 
     149         } 
     150         token = ""; 
     151         ws = ""; 
     152      } 
     153      else 
     154      { 
     155         token += *curr; 
     156         curr++; 
     157      } 
     158   } 
     159   if ((col + ws.size() + token.size()) < ncols) 
     160   { 
     161      os << ws << token << std::endl; 
     162   } 
     163   else 
     164   { 
     165      os << std::endl << prefix << token << std::endl; 
     166   } 
    81167} 
    82168 
  • utilib/trunk/src/io/utilib/OptionParser.h

    r1486 r1487  
    126126}; 
    127127 
    128  
    129  
    130128inline void OptionParser::write(std::ostream& os) const 
    131129{ 
     130   std::string indent = "                               "; 
    132131   os << "Usage: " << usage << std::endl; 
    133132   os << description << std::endl; 
     
    162161               line += " "; 
    163162            line += pinfo.description; 
    164             wordwrap_printing(os,line, "                              "); 
     163            wordwrap_printline(os,line, indent); 
    165164         } 
    166165         else { 
    167             os << cstr << std::endl; 
    168             wordwrap_printing(os,pinfo.description, "                              "); 
     166            os << cstr << std::endl << indent; 
     167            wordwrap_printline(os,pinfo.description,indent); 
    169168         } 
    170169         curr++; 
  • utilib/trunk/test/option_parser.cpp

    r1485 r1487  
    3232options.usage="command options arguments"; 
    3333options.description="Description here."; 
    34 options.add_long("A",a,"A option"); 
    35 options.add_long("B",b,"B option"); 
    36 options.add_long("C",c,"C option"); 
    37 options.add_long("D",d,"D option"); 
     34options.add("A",a,"A option"); 
     35options.add("B",b,"B option"); 
     36options.add("C",c,"C option"); 
     37options.add("D",d,"D option"); 
     38options.add_argument("arg1","This is an arg description."); 
     39 
     40options.write(std::cout); 
     41 
     42std::cout << a << " " << b << " " << c << " " << d << std::endl; 
     43 
     44int argc = 8; 
     45char* argv[] = { "command", "--A", "--B","0", "--C","2.0", "--D", "2", 0}; 
     46options.parse_args(argc, argv); 
     47 
     48std::cout << a << " " << b << " " << c << " " << d << std::endl; 
     49} 
     50 
     51 
     52 
     53void test2() 
     54{ 
     55bool a=false; 
     56int b=-1; 
     57double c=-1.0; 
     58unsigned int d=1; 
     59 
     60OptionParser options; 
     61options.usage="command options arguments"; 
     62options.description="Description here."; 
     63options.add('A',a,"A option"); 
     64options.add('B',b,"B option"); 
     65options.add('C',c,"C option"); 
     66options.add('D',d,"D option"); 
     67options.add_argument("arg1","This is an arg description."); 
     68 
     69options.write(std::cout); 
     70 
     71std::cout << a << " " << b << " " << c << " " << d << std::endl; 
     72 
     73int argc = 8; 
     74char* argv[] = { "command", "-A", "-B","0", "-C","2.0", "-D", "2", 0}; 
     75options.parse_args(argc, argv); 
     76 
     77std::cout << a << " " << b << " " << c << " " << d << std::endl; 
     78} 
     79 
     80 
     81void test3() 
     82{ 
     83bool a=false; 
     84int b=-1; 
     85double c=-1.0; 
     86unsigned int d=1; 
     87 
     88OptionParser options; 
     89options.usage="command options arguments"; 
     90options.description="Description here."; 
     91options.add('A',a,"A option"); 
     92options.add('B',"my-b",b,"B option"); 
     93options.add("my-c",c,"C option"); 
     94options.add('D',d,"D option"); 
     95options.add_argument("arg1","This is an arg description."); 
     96 
     97options.write(std::cout); 
     98 
     99std::cout << a << " " << b << " " << c << " " << d << std::endl; 
     100 
     101int argc = 8; 
     102char* argv[] = { "command", "-A", "--my-b","0", "--my-c","2.0", "-D", "2", 0}; 
     103options.parse_args(argc, argv); 
     104 
     105std::cout << a << " " << b << " " << c << " " << d << std::endl; 
     106} 
     107 
     108 
     109void test4() 
     110{ 
     111bool a=false; 
     112int b=-1; 
     113double c=-1.0; 
     114unsigned int d=1; 
     115 
     116OptionParser options; 
     117options.usage="command options arguments"; 
     118options.description="Description here."; 
     119options.add('A',a,"A option"); 
     120options.add('B',"my-b",b,"B option"); 
     121options.add("my-ccccccccccccccccccc",c,"C option"); 
     122options.add("my-dddddddddddddddddddd",c,"D option"); 
     123options.add("my-eeeeeeeeeeeeeeeeee",c,"E option"); 
     124options.add("my-feeeeeeeeeeeeeeeee",c,"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"); 
     125options.add("my-geeeeeeeeeeeeeeeee",c,"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae            ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"); 
     126options.add("my-heeeeeeeeeeeeeeeee",c,"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae             \nab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"); 
     127options.add("my-ieeeeeeeeeeeeeeeee",c,"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae             \n - ab illo\n - inventore \n - veritatis et quasi architecto \n - beatae vitae dicta\n sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"); 
     128options.add('D',d,"D option"); 
    38129options.add_argument("arg1","This is an arg description."); 
    39130 
     
    51142 
    52143test1(); 
     144test2(); 
     145test3(); 
     146test4(); 
    53147 
    54148utilib::exception_mngr::set_mode(utilib::exception_mngr::Standard); 
  • utilib/trunk/test/option_parser.qa

    r1485 r1487  
    1 THIS IS NOT VALID YET. 
     1Usage: command options arguments 
     2Description here. 
     3 
     4options: 
     5      --A                     A option 
     6      --B                     B option 
     7      --C                     C option 
     8      --D                     D option 
     9 
     10arguments: 
     11  arg1  This is an arg description. 
     120 -1 -1 1 
     13A true 
     14B 0 
     15C 2.0 
     16D 2 
     171 0 2 2 
     18Usage: command options arguments 
     19Description here. 
     20 
     21options: 
     22  -A                          A option 
     23  -B                          B option 
     24  -C                          C option 
     25  -D                          D option 
     26 
     27arguments: 
     28  arg1  This is an arg description. 
     290 -1 -1 1 
     30A true 
     31B 0 
     32C 2.0 
     33D 2 
     341 0 2 2 
     35Usage: command options arguments 
     36Description here. 
     37 
     38options: 
     39  -A                          A option 
     40  -B, --my-b                  B option 
     41      --my-c                  C option 
     42  -D                          D option 
     43 
     44arguments: 
     45  arg1  This is an arg description. 
     460 -1 -1 1 
     47A true 
     48my-b 0 
     49my-c 2.0 
     50D 2 
     511 0 2 2 
     52Usage: command options arguments 
     53Description here. 
     54 
     55options: 
     56  -A                          A option 
     57  -B, --my-b                  B option 
     58      --my-ccccccccccccccccccc 
     59                               C option 
     60      --my-dddddddddddddddddddd 
     61                               D option 
     62      --my-eeeeeeeeeeeeeeeeee E option 
     63      --my-feeeeeeeeeeeeeeeee Sed ut perspiciatis unde omnis iste natus error 
     64                               sit voluptatem accusantium doloremque 
     65                               laudantium, totam rem aperiam, eaque ipsa quae 
     66                               ab illo inventore veritatis et quasi architecto 
     67                               beatae vitae dicta sunt explicabo. Nemo enim 
     68                               ipsam voluptatem quia voluptas sit aspernatur 
     69                               aut odit aut fugit, sed quia consequuntur magni 
     70                               dolores eos qui ratione voluptatem sequi 
     71                               nesciunt. Neque porro quisquam est, qui dolorem 
     72                               ipsum quia dolor sit amet, consectetur, 
     73                               adipisci velit, sed quia non numquam eius modi 
     74                               tempora incidunt ut labore et dolore magnam 
     75                               aliquam quaerat voluptatem. Ut enim ad minima 
     76                               veniam, quis nostrum exercitationem ullam 
     77                               corporis suscipit laboriosam, nisi ut aliquid 
     78                               ex ea commodi consequatur? Quis autem vel eum 
     79                               iure reprehenderit qui in ea voluptate velit 
     80                               esse quam nihil molestiae consequatur, vel 
     81                               illum qui dolorem eum fugiat quo voluptas nulla 
     82                               pariatur? 
     83      --my-geeeeeeeeeeeeeeeee Sed ut perspiciatis unde omnis iste natus error 
     84                               sit voluptatem accusantium doloremque 
     85                               laudantium, totam rem aperiam, eaque ipsa quae 
     86                               ab illo inventore veritatis et quasi architecto 
     87                               beatae vitae dicta sunt explicabo. Nemo enim 
     88                               ipsam voluptatem quia voluptas sit aspernatur 
     89                               aut odit aut fugit, sed quia consequuntur magni 
     90                               dolores eos qui ratione voluptatem sequi 
     91                               nesciunt. Neque porro quisquam est, qui dolorem 
     92                               ipsum quia dolor sit amet, consectetur, 
     93                               adipisci velit, sed quia non numquam eius modi 
     94                               tempora incidunt ut labore et dolore magnam 
     95                               aliquam quaerat voluptatem. Ut enim ad minima 
     96                               veniam, quis nostrum exercitationem ullam 
     97                               corporis suscipit laboriosam, nisi ut aliquid 
     98                               ex ea commodi consequatur? Quis autem vel eum 
     99                               iure reprehenderit qui in ea voluptate velit 
     100                               esse quam nihil molestiae consequatur, vel 
     101                               illum qui dolorem eum fugiat quo voluptas nulla 
     102                               pariatur? 
     103      --my-heeeeeeeeeeeeeeeee Sed ut perspiciatis unde omnis iste natus error 
     104                               sit voluptatem accusantium doloremque 
     105                               laudantium, totam rem aperiam, eaque ipsa quae 
     106                               ab illo inventore veritatis et quasi architecto 
     107                               beatae vitae dicta sunt explicabo. Nemo enim 
     108                               ipsam voluptatem quia voluptas sit aspernatur 
     109                               aut odit aut fugit, sed quia consequuntur magni 
     110                               dolores eos qui ratione voluptatem sequi 
     111                               nesciunt. Neque porro quisquam est, qui dolorem 
     112                               ipsum quia dolor sit amet, consectetur, 
     113                               adipisci velit, sed quia non numquam eius modi 
     114                               tempora incidunt ut labore et dolore magnam 
     115                               aliquam quaerat voluptatem. Ut enim ad minima 
     116                               veniam, quis nostrum exercitationem ullam 
     117                               corporis suscipit laboriosam, nisi ut aliquid 
     118                               ex ea commodi consequatur? Quis autem vel eum 
     119                               iure reprehenderit qui in ea voluptate velit 
     120                               esse quam nihil molestiae consequatur, vel 
     121                               illum qui dolorem eum fugiat quo voluptas nulla 
     122                               pariatur? 
     123      --my-ieeeeeeeeeeeeeeeee Sed ut perspiciatis unde omnis iste natus error 
     124                               sit voluptatem accusantium doloremque 
     125                               laudantium, totam rem aperiam, eaque ipsa quae 
     126                                - ab illo 
     127                                - inventore 
     128                                - veritatis et quasi architecto 
     129                                - beatae vitae dicta 
     130                                sunt explicabo. Nemo enim ipsam voluptatem 
     131                               quia voluptas sit aspernatur aut odit aut 
     132                               fugit, sed quia consequuntur magni dolores eos 
     133                               qui ratione voluptatem sequi nesciunt. Neque 
     134                               porro quisquam est, qui dolorem ipsum quia 
     135                               dolor sit amet, consectetur, adipisci velit, 
     136                               sed quia non numquam eius modi tempora incidunt 
     137                               ut labore et dolore magnam aliquam quaerat 
     138                               voluptatem. Ut enim ad minima veniam, quis 
     139                               nostrum exercitationem ullam corporis suscipit 
     140                               laboriosam, nisi ut aliquid ex ea commodi 
     141                               consequatur? Quis autem vel eum iure 
     142                               reprehenderit qui in ea voluptate velit esse 
     143                               quam nihil molestiae consequatur, vel illum qui 
     144                               dolorem eum fugiat quo voluptas nulla pariatur? 
     145  -D                          D option 
     146 
     147arguments: 
     148  arg1  This is an arg description. 
  • utilib/trunk/test/utilib.study.xml

    r1445 r1487  
    2828        <level name="multibitarray">./tests multibitarray</level> 
    2929        <level name="olist">./tests olist</level> 
     30        <level name="option_parser">./tests option_parser</level> 
    3031        <level name="pvector">./tests pvector</level> 
    3132        <level name="qlist">./tests qlist</level> 
Note: See TracChangeset for help on using the changeset viewer.