public function __construct(Tokenizer $tokens, $expect = null, $where = null) { if ($expect && count($expect) == 1 && is_string($expect[0])) { $expect = ", expect '" . $expect[0] . "'"; } else { $expect = ""; } if (!$tokens->curr) { $this->message = "Unexpected end of " . ($where ?: "expression") . "{$expect}"; } else { $this->message = "Unexpected token '" . $tokens->current() . "' in " . ($where ?: "expression") . "{$expect}"; } }
/** * @param Tokenizer $tokens * @param Scope $scope */ public static function autoescapeOpen(Tokenizer $tokens, Scope $scope) { $boolean = $tokens->get(T_STRING) == "true" ? true : false; $scope["escape"] = $scope->tpl->escape; $scope->tpl->escape = $boolean; $tokens->next(); }
/** * Accessor {$.block.NAME} * @param Tokenizer $tokens * @param Template $tpl * @return mixed */ public static function block(Tokenizer $tokens, Template $tpl) { if ($tokens->is('.')) { $name = $tokens->next()->get(Tokenizer::MACRO_STRING); $tokens->next(); return isset($tpl->blocks[$name]) ? 'true' : 'false'; } else { return "array(" . implode(",", array_keys($tpl->blocks)) . ")"; } }
/** * Parse parameters as $key=$value * param1=$var param2=3 ... * * @static * @param Tokenizer $tokens * @param array $defaults * @throws \Exception * @return array */ public function parseParams(Tokenizer $tokens, array $defaults = null) { $params = array(); while ($tokens->valid()) { if ($tokens->is(Tokenizer::MACRO_STRING)) { $key = $tokens->getAndNext(); if ($defaults && !isset($defaults[$key])) { throw new InvalidUsageException("Unknown parameter '{$key}'"); } if ($tokens->is("=")) { $tokens->next(); $params[$key] = $this->parseExpr($tokens); } else { throw new InvalidUsageException("Invalid value for parameter '{$key}'"); } } elseif ($tokens->is(Tokenizer::MACRO_SCALAR, '"', T_VARIABLE, "[", '(')) { $params[] = $this->parseExpr($tokens); } else { break; } } if ($defaults) { $params += $defaults; } return $params; }
/** * Accessor {$.fetch(...)} * @param Tokenizer $tokens * @param Template $tpl * @return string */ public static function fetch(Tokenizer $tokens, Template $tpl) { $tokens->skip('('); $name = $tpl->parsePlainArg($tokens, $static); if ($static) { if (!$tpl->getStorage()->templateExists($static)) { throw new \RuntimeException("Template {$static} not found"); } } if ($tokens->is(',')) { $tokens->skip()->need('['); $vars = $tpl->parseArray($tokens) . ' + $var'; } else { $vars = '$var'; } $tokens->skip(')'); return '$tpl->getStorage()->fetch(' . $name . ', ' . $vars . ')'; }
public static function tagPaste(Tokenizer $tokens, Tag $tag) { $name = $tokens->get(T_CONSTANT_ENCAPSED_STRING); $tokens->next(); if (isset($tag->tpl->blocks[$name])) { return "?>" . substr($tag->tpl->blocks[$name]["block"], 1, -1) . "<?php "; } else { return ""; } }
public function testFixFloats() { $text = "1..3"; $tokens = new Tokenizer($text); $this->assertTrue($tokens->is(T_LNUMBER)); $this->assertTrue($tokens->next()->is('.')); $this->assertTrue($tokens->next()->is('.')); $this->assertTrue($tokens->next()->is(T_LNUMBER)); }
/** * Tag {unset ...} * @param Tokenizer $tokens * @param Tag $tag * @return string */ public static function tagUnset(Tokenizer $tokens, Tag $tag) { $unset = array(); while ($tokens->valid()) { $unset[] = $tag->tpl->parseVariable($tokens); } return 'unset(' . implode(", ", $unset) . ')'; }