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