diff options
Diffstat (limited to 'src/uscxml/interpreter')
-rw-r--r-- | src/uscxml/interpreter/InterpreterDraft6.cpp | 12 | ||||
-rw-r--r-- | src/uscxml/interpreter/InterpreterRC.cpp | 18 |
2 files changed, 23 insertions, 7 deletions
diff --git a/src/uscxml/interpreter/InterpreterDraft6.cpp b/src/uscxml/interpreter/InterpreterDraft6.cpp index 6bbb7d8..48ba78f 100644 --- a/src/uscxml/interpreter/InterpreterDraft6.cpp +++ b/src/uscxml/interpreter/InterpreterDraft6.cpp @@ -441,7 +441,15 @@ void InterpreterDraft6::enterStates(const Arabica::XPath::NodeSet<std::string>& } #endif if (isFinal(stateElem)) { - internalDoneSend(stateElem); + + Arabica::DOM::Element<std::string> doneData; + Arabica::XPath::NodeSet<std::string> doneDatas = filterChildElements(_nsInfo.xmlNSPrefix + "donedata", stateElem); + if (doneDatas.size() > 0) { + // only process first donedata element + doneData = Element<std::string>(doneDatas[0]); + } + + internalDoneSend(stateElem, doneData); Node<std::string> parent = stateElem.getParentNode(); if (parent.getNodeType() == Node_base::ELEMENT_NODE && @@ -458,7 +466,7 @@ void InterpreterDraft6::enterStates(const Arabica::XPath::NodeSet<std::string>& } } if (inFinalState) { - internalDoneSend(Element<std::string>(parent)); + internalDoneSend(Element<std::string>(parent), Arabica::DOM::Element<std::string>()); } } } diff --git a/src/uscxml/interpreter/InterpreterRC.cpp b/src/uscxml/interpreter/InterpreterRC.cpp index 0237618..b933993 100644 --- a/src/uscxml/interpreter/InterpreterRC.cpp +++ b/src/uscxml/interpreter/InterpreterRC.cpp @@ -295,14 +295,22 @@ void InterpreterRC::enterStates(const Arabica::XPath::NodeSet<std::string>& enab } if (isFinal(s)) { - internalDoneSend(s); - if (parentIsScxmlState(s)) { + Element<std::string> parent = (Element<std::string>)s.getParentNode(); + + Arabica::DOM::Element<std::string> doneData; + Arabica::XPath::NodeSet<std::string> doneDatas = filterChildElements(_nsInfo.xmlNSPrefix + "donedata", s); + if (doneDatas.size() > 0) { + // only process first donedata element + doneData = Element<std::string>(doneDatas[0]); + } + internalDoneSend(parent, doneData); + + if (parentIsScxmlState(s)) { _topLevelFinalReached = true; } else { - Element<std::string> parent = (Element<std::string>)s.getParentNode(); Element<std::string> grandParent = (Element<std::string>)parent.getParentNode(); - internalDoneSend(parent); +// internalDoneSend(parent, Arabica::DOM::Element<std::string>()); if (isParallel(grandParent)) { Arabica::XPath::NodeSet<std::string> childs = getChildStates(grandParent); @@ -314,7 +322,7 @@ void InterpreterRC::enterStates(const Arabica::XPath::NodeSet<std::string>& enab } } if (inFinalState) { - internalDoneSend(grandParent); + internalDoneSend(grandParent, Arabica::DOM::Element<std::string>()); } } } |