Changeset 1634 for trunk/yat


Ignore:
Timestamp:
Nov 19, 2008, 11:37:11 PM (12 years ago)
Author:
Peter
Message:

Fixed bug in CommandLine? how --no-switches are handled

Location:
trunk/yat/utility
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/yat/utility/CommandLine.cc

    r1487 r1634  
    7474    if (option.long_name().size() || option.short_name())
    7575      options_.push_back(&option);
    76     // allow `no-switch' for option `switch'
    77     OptionSwitch* o = dynamic_cast<OptionSwitch*>(&option);
    78     std::string no_name = std::string("no-")+option.long_name();
    79     if (option.long_name().size() && o &&
    80         !( o->long_name().size()>2 && o->long_name().substr(0,3)=="no-") &&
    81         long_options_.find(no_name)==long_options_.end())
    82       long_options_[no_name] = &option;
    8376  }
    8477
     
    139132          std::map<std::string, Option*>::const_iterator
    140133            iter(long_options_.find(key));
    141           if (iter==long_options_.end()) {
    142             std::stringstream ss;
    143             ss << ": unrecognized option `" << key << "'\n"
    144                << try_help();
     134          if (iter!=long_options_.end())
     135            iter->second->parse(arg, arguments.end());
     136          else if (key.size()>3 && key.substr(0,3)=="no-") {
     137            iter = long_options_.find(key.substr(3));
     138            if (iter!=long_options_.end())
     139              iter->second->parse(arg, arguments.end());
     140          }           
     141          else if (iter==long_options_.end()) {
     142            ss.str("");
     143            ss << ": unrecognized option `" << key << "'\n" << try_help();
    145144            throw cmd_error(ss.str());
    146145          }
    147           else
    148             iter->second->parse(arg, arguments.end());
    149146        }
    150147        else if (is_short_option(*arg)) {
  • trunk/yat/utility/OptionSwitch.cc

    r1487 r1634  
    4040                              const std::vector<std::string>::iterator& last)
    4141  {   
    42     if (long_name().size()>3 && long_name().substr(0,3)=="no-")
     42    if (first->size()>3 && first->substr(0,3)=="no-")
    4343      switch_=false;
    4444    else
Note: See TracChangeset for help on using the changeset viewer.