[brlcad-commits] SF.net SVN: brlcad: [31666] rt^3/trunk/src/g3d
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <ma...@us...> - 2008-06-30 15:56:26
|
Revision: 31666 http://brlcad.svn.sourceforge.net/brlcad/?rev=31666&view=rev Author: mafm Date: 2008-06-30 08:55:35 -0700 (Mon, 30 Jun 2008) Log Message: ----------- Several bugfixes and improvements, still WIP Modified Paths: -------------- rt^3/trunk/src/g3d/CommandInterpreter.cxx rt^3/trunk/src/g3d/CommandInterpreter.h Modified: rt^3/trunk/src/g3d/CommandInterpreter.cxx =================================================================== --- rt^3/trunk/src/g3d/CommandInterpreter.cxx 2008-06-30 15:13:35 UTC (rev 31665) +++ rt^3/trunk/src/g3d/CommandInterpreter.cxx 2008-06-30 15:55:35 UTC (rev 31666) @@ -51,7 +51,7 @@ /******************************************************************************* * Command ******************************************************************************/ -Command::Command(const char* name, const char* descr) : +Command::Command(const std::string& name, const std::string& descr) : _name(name), _description(descr) { } @@ -104,42 +104,8 @@ } } -Command* CommandInterpreter::findCommand(const std::string& commandName) const +void CommandInterpreter::execute(const std::string& commandLine, CommandOutput& output) { - std::map<std::string, Command*>::const_iterator it = _commands.find(commandName); - if (it == _commands.end()) { - return 0; - } else { - return (*it).second; - } -} - -void CommandInterpreter::parseCommandLine(const char* cL, std::vector<std::string>& args) -{ - std::string commandLine(cL); - - // tokenize the string into arguments - while (commandLine.length() > 0) { - // remove whitespace around - //StrTrim(commandLine); - Logger::logDEBUG("commandLine: '%s'", commandLine.c_str()); - - std::string::size_type pos = commandLine.find_first_of(' '); - if (pos != std::string::npos) { - const std::string& newArg = commandLine.substr(0, pos); - args.push_back(newArg); - commandLine = commandLine.substr(pos, commandLine.length()-1); - Logger::logDEBUG(" -arg recognized: '%s'", newArg.c_str()); - } else { - // no spaces left, last argument - args.push_back(commandLine); - break; - } - } -} - -void CommandInterpreter::execute(const char* commandLine, CommandOutput& output) -{ // try to parse the command line into arguments std::vector<std::string> args; parseCommandLine(commandLine, args); @@ -184,7 +150,7 @@ showHelp((*it).first, output); } // footer - output.appendLine(std::string("Use /help <command> for more info.")); + output.appendLine(std::string("Use /help <command> for specific info.")); } void CommandInterpreter::showHelp(const std::string& commandName, CommandOutput& output) @@ -192,8 +158,7 @@ // get the command Command* command = findCommand(commandName); if (!command) { - std::string msg = "No help on '" + commandName + "'. Type '/help' for a list."; - output.appendLine(msg); + output.appendLine("No help on '" + commandName + "'. Type '/help' for a list."); return; } @@ -214,7 +179,59 @@ output.appendLine(line); } +Command* CommandInterpreter::findCommand(const std::string& commandName) const +{ + std::map<std::string, Command*>::const_iterator it = _commands.find(commandName); + if (it == _commands.end()) { + return 0; + } else { + return (*it).second; + } +} +void CommandInterpreter::parseCommandLine(const std::string& cL, std::vector<std::string>& args) +{ + std::string commandLine(cL); + // trim tail + { + std::string::size_type pos = commandLine.find_last_not_of(' '); + if (pos != std::string::npos) { + // Logger::logDEBUG("trimming tail of: '%s'", commandLine.c_str()); + commandLine = commandLine.substr(0, pos+1); + // Logger::logDEBUG(" - result: '%s'", commandLine.c_str()); + } + } + + // tokenize the string into arguments + while (commandLine.length() > 0) { + // trim front + if (commandLine[0] == ' ') { + std::string::size_type pos = commandLine.find_first_not_of(' '); + if (pos != std::string::npos) { + // Logger::logDEBUG("trimming front of: '%s'", commandLine.c_str()); + commandLine = commandLine.substr(pos); + // Logger::logDEBUG(" - result: '%s'", commandLine.c_str()); + } + } + // Logger::logDEBUG("commandLine: '%s'", commandLine.c_str()); + + std::string::size_type pos = commandLine.find_first_of(' '); + if (pos != std::string::npos) { + const std::string& newArg = commandLine.substr(0, pos); + args.push_back(newArg); + commandLine = commandLine.substr(pos+1, commandLine.length()-pos); + // Logger::logDEBUG(" -arg recognized: '%s'", newArg.c_str()); + // Logger::logDEBUG(" -rest : '%s'", commandLine.c_str()); + } else { + // no spaces left, last argument + args.push_back(commandLine); + // Logger::logDEBUG(" -LAST arg recognized: '%s'", commandLine.c_str()); + commandLine.clear(); + } + } +} + + // Local Variables: *** // mode: C++ *** // tab-width: 8 *** Modified: rt^3/trunk/src/g3d/CommandInterpreter.h =================================================================== --- rt^3/trunk/src/g3d/CommandInterpreter.h 2008-06-30 15:13:35 UTC (rev 31665) +++ rt^3/trunk/src/g3d/CommandInterpreter.h 2008-06-30 15:55:35 UTC (rev 31666) @@ -69,7 +69,7 @@ public: /** Constructor with some basics needed when creating any * command. */ - Command(const char* name, const char* descr); + Command(const std::string& name, const std::string& descr); /** Default destructor */ virtual ~Command() { } @@ -110,21 +110,8 @@ /** Execute the given command line, and add the result to the given * output. */ - void execute(const char* commandLine, CommandOutput& output); - /** Show global help */ - void showHelp(CommandOutput& output); - /** Show help about the given command */ - void showHelp(const std::string& commandName, CommandOutput& output); + void execute(const std::string& commandLine, CommandOutput& output); -protected: - /** Default constructor */ - CommandInterpreter(); - - /** Register available commands */ - void registerCommands(); - /** Add a command (accesed by the registerCommands method) */ - void addCommand(Command* command); - private: /** Singleton instance */ static CommandInterpreter* INSTANCE; @@ -133,14 +120,24 @@ std::map<std::string, Command*> _commands; + /** Default constructor */ + CommandInterpreter(); + + /** Add a command (accesed by the registerCommands method) */ + void addCommand(Command* command); + + /** Show global help */ + void showHelp(CommandOutput& output); + /** Show help about the given command */ + void showHelp(const std::string& commandName, CommandOutput& output); + /** Find a command by name * * \returns 0 if not found */ Command* findCommand(const std::string& commandName) const; /** Parse command line, putting each piece into the list of * arguments */ - void parseCommandLine(const char* cmdline, - std::vector<std::string>& args); + void parseCommandLine(const std::string& cL, std::vector<std::string>& args); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |