/**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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);
     }
 }