Пример #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);
 }
Пример #2
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);
 }
Пример #3
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);
 }