public function escape($s) { switch ($this->compiler->getContentType()) { case NLatteCompiler::CONTENT_XHTML: case NLatteCompiler::CONTENT_HTML: $context = $this->compiler->getContext(); switch ($context[0]) { case NLatteCompiler::CONTEXT_SINGLE_QUOTED: case NLatteCompiler::CONTEXT_DOUBLE_QUOTED: if ($context[1] === NLatteCompiler::CONTENT_JS) { $s = "NTemplateHelpers::escapeJs($s)"; } elseif ($context[1] === NLatteCompiler::CONTENT_CSS) { $s = "NTemplateHelpers::escapeCss($s)"; } $quote = $context[0] === NLatteCompiler::CONTEXT_DOUBLE_QUOTED ? '' : ', ENT_QUOTES'; return "htmlSpecialChars($s$quote)"; case NLatteCompiler::CONTEXT_COMMENT: return "NTemplateHelpers::escapeHtmlComment($s)"; case NLatteCompiler::CONTENT_JS: case NLatteCompiler::CONTENT_CSS: return 'NTemplateHelpers::escape' . ucfirst($context[0]) . "($s)"; default: return "NTemplateHelpers::escapeHtml($s, ENT_NOQUOTES)"; } case NLatteCompiler::CONTENT_XML: case NLatteCompiler::CONTENT_JS: case NLatteCompiler::CONTENT_CSS: case NLatteCompiler::CONTENT_ICAL: return 'NTemplateHelpers::escape' . ucfirst($this->compiler->getContentType()) . "($s)"; case NLatteCompiler::CONTENT_TEXT: return $s; default: return "\$template->escape($s)"; } }
/** * New node is found. * @return bool */ public function nodeOpened(NMacroNode $node) { if ($this->macros[$node->name][2] && $node->htmlNode) { $node->isEmpty = TRUE; $this->compiler->setContext(NLatteCompiler::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)); }