summaryrefslogtreecommitdiff
path: root/server/src/macroparser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/macroparser.cc')
-rw-r--r--server/src/macroparser.cc35
1 files changed, 34 insertions, 1 deletions
diff --git a/server/src/macroparser.cc b/server/src/macroparser.cc
index 7d3f367..be781aa 100644
--- a/server/src/macroparser.cc
+++ b/server/src/macroparser.cc
@@ -116,6 +116,11 @@ void MacroParser::characterData(std::string &data)
assert(current_script); // No script present!
current_script->code.append(data);
}
+
+ if(state == COMMIT_SCRIPT) {
+ assert(current_commit_script); // No script present!
+ current_commit_script->code.append(data);
+ }
}
void MacroParser::startTag(std::string name, attributes_t &attr)
@@ -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;