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); }
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); }
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); }
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); }
public static function createFromString($varString, $escape = null, $origin = 'VariableNode') { $token = Lexer::getVariableToken($origin, $varString); return new VariableNode($token->varLevels, $token->filters, $escape, $origin); }
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); }
/** * 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); }