private function loadMessage(Definitions $definitions, DOMElement $node) { $message = new Message($definitions, $node->getAttribute("name")); $message->setDocumentation($this->getDocumentation($node)); $definitions->addMessage($message); $functions = array(); foreach ($this->loop($node) as $childNode) { switch ($childNode->localName) { case 'part': $functions[] = $this->loadMessagePart($message, $childNode); break; } } return function () use($functions, $message, $node) { $this->dispatcher->dispatch('message', new MessageEvent($message, $node)); foreach ($functions as $function) { call_user_func($function); } }; }