ActorParser *actor = p.actorContainer.add((XMLElement*)p.getCurrentTag());
p.setCurrentActor(actor);
actor->eventContainer.resize(p.eventTypeContainer.size());
+
+ p.unionId = p.unionContainer.NOTFOUND;
+ p.unionContainer.clear();
return XML_TAGRTN_LEVEL;
}
+ LML_TAGFUNC(runion)
+ {
+ LiveMLParser &p = (LiveMLParser&)parser;
+ p.unionId = p.unionContainer.add(param.getString(0));
+
+ return XML_TAGRTN_NULL;
+ }
+
+ LML_TAGFUNC(runion_close)
+ {
+ LiveMLParser &p = (LiveMLParser&)parser;
+ p.unionId = p.unionContainer.NOTFOUND;
+
+ return XML_TAGRTN_NULL;
+ }
+
LML_TAGFUNC(event)
{
LiveMLParser &p = (LiveMLParser&)parser;
TagType *rt = ((XMLElement*)p.getParentTag())->type;
EventContainer *ec = NULL;
- size_t et = p.eventTypeContainer.getId(param.getString(0));
+ size_t et = param.getUInteger(0);
if (!p.eventTypeContainer.has(et))
{
return XML_TAGRTN_SKIP;
}
- DCODE(printf("added event[%s]\n", param.getString(0));)
+ DCODE(printf("added event[%d]\n", param.getUInteger(0));)
ec->get(et)->tag = (XMLElement*)p.getCurrentTag();
return XML_TAGRTN_LEVEL;
}
DCODE(printf("added action[%s]\n", param.getString(0));)
- ac->add((XMLElement*)p.getCurrentTag());
+
+ ActionParser *ap = ac->add((XMLElement*)p.getCurrentTag());
+ ap->unionId = p.unionId;
return XML_TAGRTN_LEVEL;
}
{
size_t id = ((LiveMLParser&)parser).actorTypeContainer.getId(value);
- return new XMLActor(id);
+ return new XMLSizeT(id);
+}
+
+PARAMFUNC(LiveMLParser::paramAction)
+{
+ ActionContainer *ac = &((LiveMLParser&)parser).getCurrentActor()->actionContainer;
+ size_t id = ac->getId(value);
+
+ return new XMLSizeT(id);
+}
+
+PARAMFUNC(LiveMLParser::paramEvent)
+{
+ size_t id = ((LiveMLParser&)parser).eventTypeContainer.getId(value);
+
+ return new XMLSizeT(id);
}
int LiveMLParser::calcuEncode(char **input, char **output, void *work)
PARAM_TEXT(registerParameterType(paramText)),
PARAM_NUMERIC(registerParameterType(paramNumeric)),
PARAM_VAR(registerParameterType(paramVar)),
-PARAM_ACTOR(registerParameterType(paramActor))
+PARAM_ACTOR(registerParameterType(paramActor)),
+PARAM_ACTION(registerParameterType(paramAction)),
+PARAM_EVENT(registerParameterType(paramEvent))
{
TagType *reg = _tagTypeContainer.add("liveml", NULL);
reg->setFunction(lmlTag::liveml);
// event
reg = addTagType("event", "actor");
reg->setFunction(lmlTag::event);
- reg->addParameter(0, PARAM_STRING, "type");
+ reg->addParameter(0, PARAM_EVENT, "type");
+ reg->addParameter(1, PARAM_NUMERIC, "case");
+
+ // union
+ reg = addTagType("union", "actor");
+ reg->setFunction(lmlTag::runion, lmlTag::runion_close);
+ reg->addParameter(0, PARAM_STRING, "name");
// action
reg = addTagType("action", "liveml actor");
reg->setFunction(lmlTag::action);
reg->addParameter(0, PARAM_STRING, "name");
+ // endAction
+ reg = addTagType("endAction");
+ reg->addParameter(0, PARAM_STRING);
+
// print
reg = addTagType("print");
reg->addParameter(0, PARAM_TEXT);
reg->addParameter(0, PARAM_TEXT);
reg->addParameter(1, PARAM_VAR, "var");
+ // activeAction
+ reg = addTagType("activeAction");
+ reg->addParameter(0, PARAM_TEXT);
+
// callAction
reg = addTagType("callAction");
reg->addParameter(0, PARAM_TEXT);
- reg->addParameter(1, PARAM_NUMERIC, "target");
// callEvent
reg = addTagType("callEvent");
- reg->addParameter(0, PARAM_TEXT);
- reg->addParameter(1, PARAM_NUMERIC, "target");
+ reg->addParameter(0, PARAM_EVENT);
// include
reg = addTagType("include");
reg = addTagType("repeat");
reg->addParameter(0, PARAM_NUMERIC, "count");
+ // count
+ reg = addTagType("count");
+
// continue
reg = addTagType("continue");
reg = addTagType("break");
// if
- //reg = addTagType("if");
- //reg->addParameter(0, PARAM_NUMERIC, "case");
+ reg = addTagType("if");
+ reg->addParameter(0, PARAM_NUMERIC, "case");
// wait
reg = addTagType("wait");
reg->addParameter(0, PARAM_VAR, "name");
reg->addParameter(1, PARAM_NUMERIC);
+ // focus
+ reg = addTagType("focus");
+ reg->addParameter(0, PARAM_NUMERIC, "target");
+
// int
reg = addTagType("int");
reg->addParameter(0, PARAM_NUMERIC);