コード例 #1
0
 public function escape($s)
 {
     switch ($this->compiler->getContentType()) {
         case Compiler::CONTENT_XHTML:
         case Compiler::CONTENT_HTML:
             $context = $this->compiler->getContext();
             switch ($context[0]) {
                 case Compiler::CONTEXT_SINGLE_QUOTED:
                 case Compiler::CONTEXT_DOUBLE_QUOTED:
                     if ($context[1] === Compiler::CONTENT_JS) {
                         $s = "Nette\\Templating\\Helpers::escapeJs({$s})";
                     } elseif ($context[1] === Compiler::CONTENT_CSS) {
                         $s = "Nette\\Templating\\Helpers::escapeCss({$s})";
                     }
                     $quote = $context[0] === Compiler::CONTEXT_DOUBLE_QUOTED ? '' : ', ENT_QUOTES';
                     return "htmlSpecialChars({$s}{$quote})";
                 case Compiler::CONTEXT_COMMENT:
                     return "Nette\\Templating\\Helpers::escapeHtmlComment({$s})";
                 case Compiler::CONTENT_JS:
                 case Compiler::CONTENT_CSS:
                     return 'Nette\\Templating\\Helpers::escape' . ucfirst($context[0]) . "({$s})";
                 default:
                     return "Nette\\Templating\\Helpers::escapeHtml({$s}, ENT_NOQUOTES)";
             }
         case Compiler::CONTENT_XML:
         case Compiler::CONTENT_JS:
         case Compiler::CONTENT_CSS:
         case Compiler::CONTENT_ICAL:
             return 'Nette\\Templating\\Helpers::escape' . ucfirst($this->compiler->getContentType()) . "({$s})";
         case Compiler::CONTENT_TEXT:
             return $s;
         default:
             return "\$template->escape({$s})";
     }
 }
コード例 #2
0
ファイル: MacroSet.php プロジェクト: pdostal/nette-blog
 /**
  * New node is found.
  * @return bool
  */
 public function nodeOpened(MacroNode $node)
 {
     list($begin, $end, $attr) = $this->macros[$node->name];
     $node->isEmpty = !$end;
     if ($attr && $node->prefix === $node::PREFIX_NONE) {
         $node->isEmpty = TRUE;
         $this->compiler->setContext(Latte\Compiler::CONTEXT_DOUBLE_QUOTED_ATTR);
         $res = $this->compile($node, $attr);
         if ($res === FALSE) {
             return FALSE;
         } elseif (!$node->attrCode) {
             $node->attrCode = "<?php {$res} ?>";
         }
         $this->compiler->setContext(NULL);
     } elseif ($begin) {
         $res = $this->compile($node, $begin);
         if ($res === FALSE) {
             return FALSE;
         } elseif (!$node->openingCode) {
             $node->openingCode = "<?php {$res} ?>";
         }
     } elseif (!$end) {
         return FALSE;
     }
 }
コード例 #3
0
 /**
  * New node is found.
  * @return bool
  */
 public function nodeOpened(MacroNode $node)
 {
     if ($this->macros[$node->name][2] && $node->htmlNode) {
         $node->isEmpty = TRUE;
         $this->compiler->setContext(Latte\Compiler::CONTEXT_DOUBLE_QUOTED);
         $res = $this->compile($node, $this->macros[$node->name][2]);
         $this->compiler->setContext(NULL);
         if (!$node->attrCode) {
             $node->attrCode = "<?php {$res} ?>";
         }
     } else {
         $node->isEmpty = !isset($this->macros[$node->name][1]);
         $res = $this->compile($node, $this->macros[$node->name][0]);
         if (!$node->openingCode) {
             $node->openingCode = "<?php {$res} ?>";
         }
     }
     return $res !== FALSE;
 }
コード例 #4
0
ファイル: PhpWriter.php プロジェクト: cujan/atlashornin
 /**
  * Escapes expression in tokens.
  * @return MacroTokens
  */
 public function escapeFilter(MacroTokens $tokens)
 {
     $tokens = clone $tokens;
     switch ($this->compiler->getContentType()) {
         case Compiler::CONTENT_XHTML:
         case Compiler::CONTENT_HTML:
             $context = $this->compiler->getContext();
             switch ($context[0]) {
                 case Compiler::CONTEXT_SINGLE_QUOTED_ATTR:
                 case Compiler::CONTEXT_DOUBLE_QUOTED_ATTR:
                 case Compiler::CONTEXT_UNQUOTED_ATTR:
                     if ($context[1] === Compiler::CONTENT_JS) {
                         $tokens->prepend('Nette\\Templating\\Helpers::escapeJs(')->append(')');
                     } elseif ($context[1] === Compiler::CONTENT_CSS) {
                         $tokens->prepend('Nette\\Templating\\Helpers::escapeCss(')->append(')');
                     }
                     $tokens->prepend('htmlSpecialChars(')->append($context[0] === Compiler::CONTEXT_SINGLE_QUOTED_ATTR ? ', ENT_QUOTES)' : ')');
                     if ($context[0] === Compiler::CONTEXT_UNQUOTED_ATTR) {
                         $tokens->prepend("'\"' . ")->append(" . '\"'");
                     }
                     return $tokens;
                 case Compiler::CONTEXT_COMMENT:
                     return $tokens->prepend('Nette\\Templating\\Helpers::escapeHtmlComment(')->append(')');
                 case Compiler::CONTENT_JS:
                 case Compiler::CONTENT_CSS:
                     return $tokens->prepend('Nette\\Templating\\Helpers::escape' . ucfirst($context[0]) . '(')->append(')');
                 default:
                     return $tokens->prepend('Nette\\Templating\\Helpers::escapeHtml(')->append(', ENT_NOQUOTES)');
             }
         case Compiler::CONTENT_XML:
             $context = $this->compiler->getContext();
             switch ($context[0]) {
                 case Compiler::CONTEXT_COMMENT:
                     return $tokens->prepend('Nette\\Templating\\Helpers::escapeHtmlComment(')->append(')');
                 default:
                     $tokens->prepend('Nette\\Templating\\Helpers::escapeXml(')->append(')');
                     if ($context[0] === Compiler::CONTEXT_UNQUOTED_ATTR) {
                         $tokens->prepend("'\"' . ")->append(" . '\"'");
                     }
                     return $tokens;
             }
         case Compiler::CONTENT_JS:
         case Compiler::CONTENT_CSS:
         case Compiler::CONTENT_ICAL:
             return $tokens->prepend('Nette\\Templating\\Helpers::escape' . ucfirst($this->compiler->getContentType()) . '(')->append(')');
         case Compiler::CONTENT_TEXT:
             return $tokens;
         default:
             return $tokens->prepend('$template->escape(')->append(')');
     }
 }
コード例 #5
0
ファイル: Engine.php プロジェクト: BozzaCoon/SPHERE-Framework
 /**
  * Invokes filter.
  *
  * @param  string
  *
  * @return string
  */
 public function __invoke($s)
 {
     return $this->compiler->compile($this->parser->parse($s));
 }