0sra%Ң6 [h@ V.ِ;ϫÜIšxFg=);x#䳕-T~1Tx9$е[G q&!a##8sԙ} CbYEe(8JUj*A/:[۸`{7Va uH Ӈ,(c@u{dA޴^t60q3ժѦE~Xc:Nm{?˨C_~[j*(n}@#џD奠vp]y$$FD?m¥S-#`%R&KE/Zr J T.gD}-vz{Ho!SβHPz ,0NN0Eg'5TGwg=3@t=gP-Ʉ!B  5gOdhg~=F&UT'!:Sv5p`GV히wU:Z  :8FJƮl4C81a"\дF#݌#kIBhu(˝鯛cOa@~d7&lQ1D:TM8EuQAhN! ~=KX9~[vyn=Z/9Nt0UШһe5PފfLb;CCK8HO>#IJOȻ^&D+0bNGyKtSt0!qF^wϞ!:jUGD+/K0< ԹYV J03Rn-B!Ego2CGF^:2KWk oͥ 0wz/A"D_ &4YMA۝6 LG@Z'Zz:kٱ9 js9ڼ<wyloM^N?硏b_%KEF<ﶩĀE ␍& )c{\5؂LM;:B l1[SRf`R(^(KV9qCe/c~*YZecr3ГwQk]u6c)dA6l! 85--ӄ߽xqFi\JX,"p$h@ͯsqGG/AHq*׭1tE"MX-5\8J'?LJВ(L}KA[kxA{?v%% 86 5J>b*\tlj1C|ō-Q.}7,%:eP.-yvzej6by3:we0lqQp̗@3ZbɉAQ`ϫeod1]xQp_z;D# v.^OTMM dHӬă lq]{l|3̃͝R=i2+쓿rC u>4C7>{>4d_iC7:-5H71Λ璔 QZp5zt./+k]ٱg$'v?>GQlZ}`!( ƕ%fƵ $'5je:,q Jȑ ȣ |F.m~et+ ۸q&^?P'c8J| Aۙ'RZ\L\Ϫ߼QeE̼z+c+{ -hƒ^?vcpy'IQ<9,9 )_\|O{~Cﰨ3fF|HjT-*tFEUOcH;q:/W`24K:#wnPex!+ )T[G>PC/|r2F vM:b&0>怖J[5Y>ʑƜ^1a6w0~<=J&]3Q( tkd?ŸF("& wF&Zۃ'B oR7EߏN[z|kc.䬽~}=2hS/:TGΛ^ h)qlŌ$xًtD! XY_t pͺi2hS/:TGΛ^ h)q *J^-n4g.cБԗ wlCxEZ:ۨkv?R:#e VXqGr$4%?UZ~"ѻ n{|W[>=o\8^d'CF?pѫ$_??j*ՃEXXu%ި1ܛsM6/_3l'BI7LcNU- =e#]& Nﴱ\ֈDOxor[Cb#vDXvf=PJqI-C=I ef<|t bho.Ӿ-'1ST zmeȑ ȣ ROEB[! )};14bL疚}X zK0힃п!2R~.QP 2E]4Tғl +73p6+OuEp BJ(f i5>3ѥ-=dн6س[$]TcX*P "N8[Hi!m9۰#vk8a-)!-<MzD x=@ 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; } // }}} // _parseOptionNode() {{{ /** * Parses an option node and returns the constructed * Console_CommandLine_Option instance. * * @param DomDocumentNode $node The node to parse * * @return Console_CommandLine_Option The built option */ private static function _parseOptionNode($node) { include_once 'Console/CommandLine/Option.php'; $obj = new Console_CommandLine_Option($node->getAttribute('name')); foreach ($node->childNodes as $cNode) { $cNodeName = $cNode->nodeName; switch ($cNodeName) { case 'choices': foreach ($cNode->childNodes as $subChildNode) { if ($subChildNode->nodeName == 'choice') { $obj->choices[] = trim($subChildNode->nodeValue); } } break; case 'messages': $obj->messages = self::_messages($cNode); break; default: if (property_exists($obj, $cNodeName)) { $obj->$cNodeName = trim($cNode->nodeValue); } break; } } if ($obj->action == 'Password') { $obj->argument_optional = true; } return $obj; } // }}} // _parseArgumentNode() {{{ /** * Parses an argument node and returns the constructed * Console_CommandLine_Argument instance. * * @param DomDocumentNode $node The node to parse * * @return Console_CommandLine_Argument The built argument */ private static function _parseArgumentNode($node) { include_once 'Console/CommandLine/Argument.php'; $obj = new Console_CommandLine_Argument($node->getAttribute('name')); foreach ($node->childNodes as $cNode) { $cNodeName = $cNode->nodeName; switch ($cNodeName) { case 'description': case 'help_name': case 'default': $obj->$cNodeName = trim($cNode->nodeValue); break; case 'multiple': $obj->multiple = self::_bool(trim($cNode->nodeValue)); break; case 'optional': $obj->optional = self::_bool(trim($cNode->nodeValue)); break; case 'choices': foreach ($cNode->childNodes as $subChildNode) { if ($subChildNode->nodeName == 'choice') { $obj->choices[] = trim($subChildNode->nodeValue); } } break; case 'messages': $obj->messages = self::_messages($cNode); break; default: break; } } return $obj; } // }}} // _bool() {{{ /** * Returns a boolean according to true/false possible strings. * * @param string $str The string to process * * @return boolean */ private static function _bool($str) { return in_array(strtolower((string)$str), array('true', '1', 'on', 'yes')); } // }}} // _messages() {{{ /** * Returns an array of custom messages for the element * * @param DOMNode $node The messages node to process * * @return array an array of messages * * @see Console_CommandLine::$messages * @see Console_CommandLine_Element::$messages */ private static function _messages(DOMNode $node) { $messages = array(); foreach ($node->childNodes as $cNode) { if ($cNode->nodeType == XML_ELEMENT_NODE) { $name = $cNode->getAttribute('name'); $value = trim($cNode->nodeValue); $messages[$name] = $value; } } return $messages; } // }}} }