public function escape($s) { switch ($this->compiler->getContentType()) { case LatteCompiler::CONTENT_XHTML: case LatteCompiler::CONTENT_HTML: $context = $this->compiler->getContext(); switch ($context[0]) { case LatteCompiler::CONTEXT_SINGLE_QUOTED: case LatteCompiler::CONTEXT_DOUBLE_QUOTED: if ($context[1] === LatteCompiler::CONTENT_JS) { $s = "TemplateHelpers::escapeJs({$s})"; } elseif ($context[1] === LatteCompiler::CONTENT_CSS) { $s = "TemplateHelpers::escapeCss({$s})"; } $quote = $context[0] === LatteCompiler::CONTEXT_DOUBLE_QUOTED ? '' : ', ENT_QUOTES'; return "htmlSpecialChars({$s}{$quote})"; case LatteCompiler::CONTEXT_COMMENT: return "TemplateHelpers::escapeHtmlComment({$s})"; case LatteCompiler::CONTENT_JS: case LatteCompiler::CONTENT_CSS: return 'TemplateHelpers::escape' . ucfirst($context[0]) . "({$s})"; default: return "TemplateHelpers::escapeHtml({$s}, ENT_NOQUOTES)"; } case LatteCompiler::CONTENT_XML: case LatteCompiler::CONTENT_JS: case LatteCompiler::CONTENT_CSS: case LatteCompiler::CONTENT_ICAL: return 'TemplateHelpers::escape' . ucfirst($this->compiler->getContentType()) . "({$s})"; case LatteCompiler::CONTENT_TEXT: return $s; default: return "\$template->escape({$s})"; } }
/** * 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(LatteCompiler::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; }
/** * Invokes filter. * @param string * @return string */ public function __invoke($s) { return $this->compiler->compile($this->parser->parse($s)); }