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