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}";
     }
 }
예제 #2
0
 /**
  * @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();
 }
예제 #3
0
파일: Accessor.php 프로젝트: simuta/new_rep
 /**
  * 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)) . ")";
     }
 }
예제 #4
0
파일: Template.php 프로젝트: simuta/new_rep
 /**
  * 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;
 }
예제 #5
0
파일: Accessor.php 프로젝트: zhabinka/fenom
 /**
  * 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 . ')';
 }
예제 #6
0
 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 "";
     }
 }
예제 #7
0
 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));
 }
예제 #8
0
 /**
  * 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) . ')';
 }