Beispiel #1
0
 public static function getNode($cmd, $args, $parser, $origin)
 {
     if (empty($args)) {
         throw new TemplateSyntaxException('Tag "set" in template ' . $origin . ' requires a variable name argument.');
     }
     $args = preg_split('/\\s/', $args, 2, PREG_SPLIT_NO_EMPTY);
     $token = Lexer::getVariableToken($origin, $args[0]);
     if ($token->filters) {
         throw new TemplateSyntaxException('Target variable in the "set" tag in template ' . $origin . 'cannot have filters applied to it.');
     }
     $var = new VariableNode($token->varLevels, false, false, $origin);
     $toNative = false;
     $toVar = false;
     $toNodes = false;
     if (count($args) === 2) {
         if (($isString = Lexer::surroundedBy($args[1], '"', '"')) || is_numeric($args[1]) || $args[1] === 'true' || $args[1] === 'false') {
             if ($isString) {
                 $toNative = str_replace('$', '\\$', $args[1]);
             } else {
                 $toNative = $args[1];
             }
         } else {
             $token = Lexer::getVariableToken($origin, $args[1]);
             $toVar = new VariableNode($token->varLevels, $token->filters, false, $origin);
         }
     } else {
         $toNodes = $parser->parse('endset');
         $parser->skipNextToken();
     }
     return new SetNode($var, $toNative, $toVar, $toNodes);
 }
Beispiel #2
0
 public static function getNode($cmd, $args, $parser, $origin)
 {
     $var = 'filter' . Lexer::VARIABLE_FILTER_SEPARATOR . $args;
     $token = Lexer::getVariableToken($origin, $var);
     $nodes = $parser->parse("endfilter");
     $parser->skipNextToken();
     return new FilterNode($nodes, $token->filters, $origin);
 }
Beispiel #3
0
 public static function getNode($cmd, $args, $parser, $origin)
 {
     if (empty($args) || strpos($args, ' ') !== false) {
         throw new TemplateSyntaxException('Tag "include" in template "' . $origin . '" requires a single template name as an argument.');
     }
     if (Lexer::surroundedBy($args, '"', '"')) {
         $parser->prependPage(substr($args, 1, -1));
         return false;
     }
     $token = Lexer::getVariableToken($origin, $args);
     $node = new VariableNode($token->varLevels, $token->filters, false, $origin);
     return new IncludeNode($node);
 }
Beispiel #4
0
 public static function getNode($cmd, $args, $parser, $origin)
 {
     $folders = array();
     $kvPairs = array();
     $relative = true;
     $tokens = preg_split('/\\s/', $args, 2, PREG_SPLIT_NO_EMPTY);
     if (isset($tokens[0])) {
         if (strpos(strtolower($tokens[0]), 'http') === 0) {
             $relative = false;
             while ($tokens[0][strlen($tokens[0]) - 1] === '/') {
                 $tokens[0] = substr($tokens[0], 0, -1);
             }
             $folders[] = $tokens[0];
         } else {
             $folders = preg_split('/\\//', $tokens[0], null, PREG_SPLIT_NO_EMPTY);
         }
         if (isset($tokens[1])) {
             $tokens = preg_split('/[\\s\\/]/', $tokens[1], null, PREG_SPLIT_NO_EMPTY);
             foreach ($tokens as $token) {
                 if (strpos($token, '=') !== false) {
                     $keyVal = explode('=', $token);
                     if (count($keyVal) !== 2 || !$keyVal[0] | !$keyVal[1]) {
                         throw new TemplateSyntaxException('URL tag parameter in template "' . $origin . '" contains invalid key=value pair: ' . $token);
                     }
                     if (Lexer::surroundedBy($keyVal[1], '"', '"')) {
                         $kvPairs[$keyVal[0]] = substr($keyVal[1], 1, -1);
                     } else {
                         $vToken = Lexer::getVariableToken($origin, $keyVal[1]);
                         $vNode = new VariableNode($vToken->varLevels, $vToken->filters, false, $origin);
                         $kvPairs[$keyVal[0]] = $vNode;
                     }
                 } else {
                     if (Lexer::surroundedBy($token, '"', '"')) {
                         $folders[] = substr($token, 1, -1);
                     } else {
                         $vToken = Lexer::getVariableToken($origin, $token);
                         $vNode = new VariableNode($vToken->varLevels, $vToken->filters, false, $origin);
                         $folders[] = $vNode;
                     }
                 }
             }
         }
     }
     return new UrlNode($folders, $kvPairs, $relative);
 }
Beispiel #5
0
 public static function createFromString($varString, $escape = null, $origin = 'VariableNode')
 {
     $token = Lexer::getVariableToken($origin, $varString);
     return new VariableNode($token->varLevels, $token->filters, $escape, $origin);
 }
Beispiel #6
0
 protected static function toVarNode($var, $origin, $limitLevels = false)
 {
     $token = Lexer::getVariableToken($origin, $var);
     if ($token->filters) {
         throw new TemplateSyntaxException('Variables in the "for" tag cannot contain filters in template "' . $origin . '".');
     }
     if ($limitLevels && count($token->varLevels) > 1) {
         throw new TemplateSyntaxException('Target variables in the "for" tag in template "' . $origin . '" cannot have more than one level.');
     }
     return new VariableNode($token->varLevels, false, false, $origin);
 }
Beispiel #7
0
 /**
  * Gets the tokens for any given template name.
  *
  * @param string $pageName The name of the template for which tokens should
  * 		be retrieved.
  * @return array An array of {@link Token} objects representing the
  * 		specified template.
  * @throws \hydrogen\view\exceptions\NoSuchViewException if the specified
  * 		template is not found.
  */
 protected function getTokensForPage($pageName)
 {
     $page = $this->loader->load($pageName);
     return Lexer::tokenize($pageName, $page);
 }
Beispiel #8
0
 /**
  * Turns a variable string (similar to what might be found in a variable
  * tag within a template) into pure PHP.
  *
  * @param string $varString The variable string to be parsed into PHP.
  * @param \hydrogen\view\engines\hydrogen\PHPFile $phpFile The instance
  * 		of PHPFile being used to render this template.
  * @param string $origin The name of the template from which this variable
  * 		string was taken.
  * @param boolean $nullIfNotFound true if a variable should evaluate to
  * 		NULL if it's not found, false if it should throw an exception in
  * 		that case.
  * @return string the pure PHP code that will evaluate the provided
  * 		variable string.
  */
 protected static function parseVariableString($varString, $phpFile, $origin, $nullIfNotFound = false)
 {
     $token = Lexer::getVariableToken($origin, $varString);
     $vNode = new VariableNode($token->varLevels, $token->filters, false, $origin);
     return $vNode->getVariablePHP($phpFile, false, $nullIfNotFound);
 }