| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // Filename: sedScript.cxx
- // Created by: drose (24Oct00)
- //
- ////////////////////////////////////////////////////////////////////
- #include "sedScript.h"
- #include "sedCommand.h"
- #include "sedContext.h"
- ////////////////////////////////////////////////////////////////////
- // Function: SedScript::Constructor
- // Access: Public
- // Description:
- ////////////////////////////////////////////////////////////////////
- SedScript::
- SedScript() {
- _quit = false;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SedScript::Destructor
- // Access: Public
- // Description:
- ////////////////////////////////////////////////////////////////////
- SedScript::
- ~SedScript() {
- Commands::iterator ci;
- for (ci = _commands.begin(); ci != _commands.end(); ++ci) {
- delete (*ci);
- }
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SedScript::add_line
- // Access: Public
- // Description: Adds the indicated script line to the script.
- // Returns true if it is a valid line, false if there is
- // an error.
- ////////////////////////////////////////////////////////////////////
- bool SedScript::
- add_line(const string &line) {
- size_t p = 0;
- SedCommand *command = new SedCommand;
- if (!command->parse_command(line, p)) {
- // That's an invalid command.
- delete command;
- return false;
- }
- _commands.push_back(command);
- while (p < line.length()) {
- // There's more to the line.
- if (line[p] != ';') {
- // But it's an error.
- cerr << "Invalid character at: " << line.substr(p) << "\n";
- return false;
- }
- p++;
- command = new SedCommand;
- if (!command->parse_command(line, p)) {
- // That's an invalid command.
- delete command;
- return false;
- }
- _commands.push_back(command);
- }
- // Everything parsed ok.
- return true;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SedScript::run
- // Access: Public
- // Description: Runs the script, modifying the context as
- // appropriate. Returns true if the process should
- // continue with the next line, or false if we have quit
- // and we should terminate.
- ////////////////////////////////////////////////////////////////////
- bool SedScript::
- run(SedContext &context) {
- context._deleted = false;
- _next_command = _commands.begin();
- while (!_quit && _next_command != _commands.end()) {
- SedCommand *command = (*_next_command);
- ++_next_command;
- command->run(*this, context);
- }
- if (!context._deleted) {
- context._out << context._pattern_space << "\n";
- }
- return !_quit;
- }
|