/** * 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); } }
/** * 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; }