Пример #1
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();
 }
Пример #2
0
 /**
  * Parse variable name: $a, $a.b, $a.b['c'], $a:index
  * @param Tokenizer $tokens
  * @param $var
  * @return string
  * @throws Error\UnexpectedTokenException
  */
 public function parseVariable(Tokenizer $tokens, $var = null)
 {
     if (!$var) {
         if ($tokens->isNext('@')) {
             //                $v = $tokens->get(T_VARIABLE);
             $prop = $tokens->next()->next()->get(T_STRING);
             if ($tag = $this->getParentScope("foreach")) {
                 $tokens->next();
                 return Compiler::foreachProp($tag, $prop);
             } else {
                 throw new UnexpectedTokenException($tokens);
             }
         } else {
             $var = '$var["' . substr($tokens->get(T_VARIABLE), 1) . '"]';
             $tokens->next();
         }
     }
     while ($t = $tokens->key()) {
         if ($t === ".") {
             $tokens->next();
             if ($tokens->is(T_VARIABLE)) {
                 $key = '[ $var["' . substr($tokens->getAndNext(), 1) . '"] ]';
             } elseif ($tokens->is(Tokenizer::MACRO_STRING)) {
                 $key = '["' . $tokens->getAndNext() . '"]';
             } elseif ($tokens->is(Tokenizer::MACRO_SCALAR)) {
                 $key = "[" . $tokens->getAndNext() . "]";
             } elseif ($tokens->is('"')) {
                 $key = "[" . $this->parseQuote($tokens) . "]";
             } elseif ($tokens->is('.')) {
                 $tokens->back();
                 break;
             } else {
                 throw new UnexpectedTokenException($tokens);
             }
             $var .= $key;
         } elseif ($t === "[") {
             if ($tokens->isNext(']')) {
                 break;
             }
             $tokens->next();
             if ($tokens->is(Tokenizer::MACRO_STRING)) {
                 if ($tokens->isNext("(")) {
                     $key = "[" . $this->parseExpr($tokens) . "]";
                 } else {
                     $key = '["' . $tokens->current() . '"]';
                     $tokens->next();
                 }
             } else {
                 $key = "[" . $this->parseExpr($tokens) . "]";
             }
             $tokens->get("]");
             $tokens->next();
             $var .= $key;
         } elseif ($t === T_DNUMBER) {
             $var .= '[' . substr($tokens->getAndNext(), 1) . ']';
         } elseif ($t === T_OBJECT_OPERATOR) {
             $var .= "->" . $tokens->getNext(T_STRING);
             $tokens->next();
         } else {
             break;
         }
     }
     return $var;
 }
Пример #3
0
 /**
  * @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);
 }
Пример #4
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 "";
     }
 }
Пример #5
0
 /**
  * Parse variable name: $a, $a.b, $a.b[c]
  * @param Tokenizer $tokens
  * @param $var
  * @return string
  * @throws Error\UnexpectedTokenException
  */
 public function parseVariable(Tokenizer $tokens, $var = null)
 {
     if (!$var) {
         $var = '$tpl["' . substr($tokens->get(T_VARIABLE), 1) . '"]';
         $tokens->next();
     }
     while ($t = $tokens->key()) {
         if ($t === ".") {
             $tokens->next();
             if ($tokens->is(T_VARIABLE)) {
                 $key = '[ $tpl["' . substr($tokens->getAndNext(), 1) . '"] ]';
             } elseif ($tokens->is(Tokenizer::MACRO_STRING)) {
                 $key = '["' . $tokens->getAndNext() . '"]';
             } elseif ($tokens->is(Tokenizer::MACRO_SCALAR)) {
                 $key = "[" . $tokens->getAndNext() . "]";
             } elseif ($tokens->is('"')) {
                 $key = "[" . $this->parseQuote($tokens) . "]";
             } else {
                 throw new UnexpectedTokenException($tokens);
             }
             $var .= $key;
         } elseif ($t === "[") {
             $tokens->next();
             if ($tokens->is(Tokenizer::MACRO_STRING)) {
                 if ($tokens->isNext("(")) {
                     $key = "[" . $this->parseExpr($tokens) . "]";
                 } else {
                     $key = '["' . $tokens->current() . '"]';
                     $tokens->next();
                 }
             } else {
                 $key = "[" . $this->parseExpr($tokens) . "]";
             }
             $tokens->get("]");
             $tokens->next();
             $var .= $key;
         } elseif ($t === T_DNUMBER) {
             $var .= '[' . substr($tokens->getAndNext(), 1) . ']';
         } elseif ($t === T_OBJECT_OPERATOR) {
             $var .= "->" . $tokens->getNext(T_STRING);
             $tokens->next();
         } else {
             break;
         }
     }
     return $var;
 }