diff options
Diffstat (limited to 'server/src/macroparser.cc')
-rw-r--r-- | server/src/macroparser.cc | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/server/src/macroparser.cc b/server/src/macroparser.cc index d1604b2..be781aa 100644 --- a/server/src/macroparser.cc +++ b/server/src/macroparser.cc @@ -114,7 +114,12 @@ void MacroParser::characterData(std::string &data) if(state == SCRIPT) { assert(current_script); // No script present! - current_script->attributes["code"].append(data); + current_script->code.append(data); + } + + if(state == COMMIT_SCRIPT) { + assert(current_commit_script); // No script present! + current_commit_script->code.append(data); } } @@ -147,6 +152,18 @@ void MacroParser::startTag(std::string name, attributes_t &attr) return; } + // Enable oncommit parsing + if(name == "oncommit") { + if(state != MACRO) error("oncommit found outside macro."); + state = COMMIT_SCRIPTS; + + m->resume.attributes = attr; + + assert(m); // No macro is currently available, cannot create resume! + + return; + } + // Enable Query parsing if(name == "queries") { if(state != MACRO) error("queries found outside macro."); @@ -232,8 +249,18 @@ void MacroParser::startTag(std::string name, attributes_t &attr) current_resume_script = &(m->resume_scripts.back()); } break; + case COMMIT_SCRIPTS: + { + state = COMMIT_SCRIPT; + + Script s; + s.attributes = attr; + m->commit_scripts.push_back(s); + current_commit_script = &(m->commit_scripts.back()); + } + break; default: - error("<script> tag found outside <scripts> or <resume> tags."); + error("<script> tag found outside <scripts>, <commitscripts> or <resume> tags."); break; } return; @@ -290,6 +317,7 @@ void MacroParser::endTag(std::string name) state = UNDEFINED; } if(name == "resume") state = MACRO; + if(name == "oncommit") state = MACRO; if(name == "queries") state = MACRO; if(name == "query") state = QUERIES; if(name == "maps") state = MACRO; @@ -310,6 +338,11 @@ void MacroParser::endTag(std::string name) state = RESUME; break; + case COMMIT_SCRIPT: + current_commit_script = NULL; + state = COMMIT_SCRIPTS; + break; + default: // tag mismatch? break; |