/** * Parses the root command node or a command node and returns the * constructed Console_CommandLine or Console_CommandLine_Command instance. * * @param DomDocumentNode $node The node to parse * @param bool $isRootNode Whether it is a root node or not * * @return mixed Console_CommandLine or Console_CommandLine_Command */ private static function _parseCommandNode($node, $isRootNode = false) { if ($isRootNode) { $obj = new Console_CommandLine(); } else { include_once 'Console/CommandLine/Command.php'; $obj = new Console_CommandLine_Command(); } foreach ($node->childNodes as $cNode) { $cNodeName = $cNode->nodeName; switch ($cNodeName) { case 'name': case 'description': case 'version': $obj->{$cNodeName} = trim($cNode->nodeValue); break; case 'add_help_option': case 'add_version_option': case 'force_posix': $obj->{$cNodeName} = self::_bool(trim($cNode->nodeValue)); break; case 'option': $obj->addOption(self::_parseOptionNode($cNode)); break; case 'argument': $obj->addArgument(self::_parseArgumentNode($cNode)); break; case 'command': $obj->addCommand(self::_parseCommandNode($cNode)); break; case 'aliases': if (!$isRootNode) { foreach ($cNode->childNodes as $subChildNode) { if ($subChildNode->nodeName == 'alias') { $obj->aliases[] = trim($subChildNode->nodeValue); } } } break; case 'messages': $obj->messages = self::_messages($cNode); break; default: break; } } return $obj; }
/** * Register given command using array of options * * @param string $name Command name * @param array $data Array of command initializing options * @param \Console_CommandLine_Command $parent If sub-command is being added, provide parent * * @return void */ private function registerCommand($name, $data, \Console_CommandLine_Command $parent = null) { $command = isset($data['command']) ? $data['command'] : $data; if (null === $parent) { $cmd = $this->addCommand($name, $command); } else { $cmd = $parent->addCommand($name, $command); } // command arguments $args = isset($command['arguments']) ? $command['arguments'] : array(); foreach ($args as $name => $argument) { $cmd->addArgument($name, $argument); } // command options $opts = isset($command['options']) ? $command['options'] : array(); foreach ($opts as $name => $option) { $cmd->addOption($name, $option); } // commands actions (sub-commands) $subs = isset($command['commands']) ? $command['commands'] : array(); foreach ($subs as $name => $data) { $this->registerCommand($name, $data, $cmd); } }