コード例 #1
0
ファイル: Accessor.php プロジェクト: Yogurt933/Made-Easy
 /**
  * @param Tokenizer $tokens
  * @param Template $tpl
  * @return string
  */
 public static function php(Tokenizer $tokens, Template $tpl)
 {
     $callable = array($tokens->skip('.')->need(Tokenizer::MACRO_STRING)->getAndNext());
     while ($tokens->is('.')) {
         $callable[] = $tokens->next()->need(Tokenizer::MACRO_STRING)->getAndNext();
     }
     $callable = implode('\\', $callable);
     if ($tokens->is(T_DOUBLE_COLON)) {
         $callable .= '::' . $tokens->next()->need(Tokenizer::MACRO_STRING)->getAndNext();
     }
     $call_filter = $tpl->getStorage()->call_filters;
     if ($call_filter) {
         foreach ($call_filter as $filter) {
             if (!fnmatch(addslashes($filter), $callable)) {
                 throw new \LogicException("Callback " . str_replace('\\', '.', $callable) . " is not available by settings");
             }
         }
     }
     if (!is_callable($callable)) {
         throw new \RuntimeException("PHP method " . str_replace('\\', '.', $callable) . ' does not exists.');
     }
     if ($tokens->is('(')) {
         $arguments = 'array' . $tpl->parseArgs($tokens) . '';
     } else {
         $arguments = 'array()';
     }
     return 'call_user_func_array(' . var_export($callable, true) . ', ' . $arguments . ')';
 }
コード例 #2
0
ファイル: Compiler.php プロジェクト: carriercomm/Nuance
 /**
  * @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
 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 "";
     }
 }
コード例 #6
0
ファイル: TokenizerTest.php プロジェクト: zhabinka/fenom
 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));
 }
コード例 #7
0
ファイル: Compiler.php プロジェクト: vanderelm/mtt_prsol
 /**
  * @param Tokenizer $tokens
  * @param Tag $tag
  */
 public static function stripOpen(Tokenizer $tokens, Tag $tag)
 {
     $expected = $tokens->get(T_STRING) == "true" ? true : false;
     $tokens->next();
     $tag->setOption(\Fenom::AUTO_STRIP, $expected);
 }