summaryrefslogtreecommitdiff
path: root/server/src/macroparser.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2012-01-26 12:08:39 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2012-01-26 12:08:39 +0100
commit4edae3f518353bb21a02fcda2dfcff83c5a72fc3 (patch)
tree7902e2b6af1dabdb5c49b906b8592874bfce407d /server/src/macroparser.cc
parente9ff9842e9a8c178f5e17c0cf5dde16db1a0d8fc (diff)
New onCommit scripting system.
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;