示例#1
0
 /**
  * Parse first unnamed argument
  *
  * @param Tokenizer $tokens
  * @param string $static
  * @return mixed|string
  */
 public function parsePlainArg(Tokenizer $tokens, &$static)
 {
     if ($tokens->is(T_CONSTANT_ENCAPSED_STRING)) {
         if ($tokens->isNext('|')) {
             return $this->parseExpr($tokens);
         } else {
             $str = $tokens->getAndNext();
             $static = stripslashes(substr($str, 1, -1));
             return $str;
         }
     } else {
         return $this->parseExpr($tokens);
     }
 }
示例#2
0
 /**
  * Define macro
  *
  * @param Tokenizer $tokens
  * @param Tag $scope
  * @throws InvalidUsageException
  */
 public static function macroOpen(Tokenizer $tokens, Tag $scope)
 {
     $scope["name"] = $tokens->get(Tokenizer::MACRO_STRING);
     $scope["recursive"] = false;
     $args = array();
     $defaults = array();
     if (!$tokens->valid()) {
         return;
     }
     $tokens->next();
     if ($tokens->is('(') || !$tokens->isNext(')')) {
         $tokens->next();
         while ($tokens->is(Tokenizer::MACRO_STRING, T_VARIABLE)) {
             $param = $tokens->current();
             if ($tokens->is(T_VARIABLE)) {
                 $param = ltrim($param, '$');
             }
             $tokens->next();
             $args[] = $param;
             if ($tokens->is('=')) {
                 $tokens->next();
                 if ($tokens->is(T_CONSTANT_ENCAPSED_STRING, T_LNUMBER, T_DNUMBER) || $tokens->isSpecialVal()) {
                     $defaults[$param] = $tokens->getAndNext();
                 } else {
                     throw new InvalidUsageException("Macro parameters may have only scalar defaults");
                 }
             }
             $tokens->skipIf(',');
         }
         $tokens->skipIf(')');
     }
     $scope["macro"] = array("name" => $scope["name"], "args" => $args, "defaults" => $defaults, "body" => "", "recursive" => false);
     return;
 }