public function generateCode(PHPTAL_Php_CodeWriter $codewriter) { if (preg_match('/^<\\?(?:php|[=\\s])/i', $this->getValueEscaped())) { // block will be executed as PHP $codewriter->pushHTML($this->getValueEscaped()); } else { $codewriter->doEchoRaw("'<'"); $codewriter->pushHTML(substr($codewriter->interpolateHTML($this->getValueEscaped()), 1)); } }
public function generateCode(PHPTAL_Php_CodeWriter $codewriter) { $mode = $codewriter->getOutputMode(); $value = $this->getValueEscaped(); $inCDATAelement = PHPTAL_Dom_Defs::getInstance()->isCDATAElementInHTML($this->parentNode->getNamespaceURI(), $this->parentNode->getLocalName()); // in HTML5 must limit it to <script> and <style> if ($mode === PHPTAL::HTML5 && $inCDATAelement) { $codewriter->pushHTML($codewriter->interpolateCDATA(str_replace('</', '<\\/', $value))); } elseif ($mode === PHPTAL::XHTML && $inCDATAelement || $mode === PHPTAL::XML && preg_match('/[<>&]/', $value) || $mode !== PHPTAL::HTML5 && preg_match('/<\\?|\\${structure/', $value)) { // in text/html "</" is dangerous and the only sensible way to escape is ECMAScript string escapes. if ($mode === PHPTAL::XHTML) { $value = str_replace('</', '<\\/', $value); } $codewriter->pushHTML($codewriter->interpolateCDATA('<![CDATA[' . $value . ']]>')); } else { $codewriter->pushHTML($codewriter->interpolateHTML(htmlspecialchars($value, ENT_QUOTES, $codewriter->getEncoding()))); } }
function testFunctionsGeneration() { $state = new PHPTAL_Php_State($this->newPHPTAL()); $codewriter = new PHPTAL_Php_CodeWriter($state); $codewriter->doFunction('test1', '$tpl'); $codewriter->pushHTML($codewriter->interpolateHTML('test1')); $codewriter->doFunction('test2', '$tpl'); $codewriter->pushHTML('test2'); $codewriter->doEnd(); $codewriter->pushHTML('test1'); $codewriter->doEnd(); $res = $codewriter->getResult(); $exp = <<<EOS <?php function test2(\$tpl) {?>test2<?php}?> <?php function test1(\$tpl) {?>test1test1<?php}?> EOS; $res = normalize_phpsource($res, true); $exp = normalize_phpsource($exp, true); $this->assertEquals($exp, $res); }
public function after(PHPTAL_Php_CodeWriter $codewriter) { $var = $codewriter->createTempVariable(); $codewriter->pushCode('ob_end_flush()'); $codewriter->doCatch('Exception ' . $var); $codewriter->pushCode('$tpl->addError(' . $var . ')'); $codewriter->pushCode('ob_end_clean()'); $expression = $this->extractEchoType($this->expression); $code = $codewriter->evaluateExpression($expression); switch ($code) { case PHPTAL_Php_TalesInternal::NOTHING_KEYWORD: break; case PHPTAL_Php_TalesInternal::DEFAULT_KEYWORD: $codewriter->pushHTML('<pre class="phptalError"'); $codewriter->doEchoRaw($var); $codewriter->pushHTML('</pre>'); break; default: $this->doEchoAttribute($codewriter, $code); break; } $codewriter->doEnd(); $codewriter->recycleTempVariable($var); }
private function generateAttributes(PHPTAL_Php_CodeWriter $codewriter) { $html5mode = $codewriter->getOutputMode() === PHPTAL::HTML5; foreach ($this->getAttributeNodes() as $attr) { // xmlns:foo is not allowed in text/html if ($html5mode && $attr->isNamespaceDeclaration()) { continue; } switch ($attr->getReplacedState()) { case PHPTAL_Dom_Attr::NOT_REPLACED: $codewriter->pushHTML(' ' . $attr->getQualifiedName()); if ($codewriter->getOutputMode() !== PHPTAL::HTML5 || !PHPTAL_Dom_Defs::getInstance()->isBooleanAttribute($attr->getQualifiedName())) { $html = $codewriter->interpolateHTML($attr->getValueEscaped()); $codewriter->pushHTML('=' . $codewriter->quoteAttributeValue($html)); } break; case PHPTAL_Dom_Attr::HIDDEN: break; case PHPTAL_Dom_Attr::FULLY_REPLACED: $codewriter->pushHTML($attr->getValueEscaped()); break; case PHPTAL_Dom_Attr::VALUE_REPLACED: $codewriter->pushHTML(' ' . $attr->getQualifiedName() . '="'); $codewriter->pushHTML($attr->getValueEscaped()); $codewriter->pushHTML('"'); break; } } }
public function generateCode(PHPTAL_Php_CodeWriter $codewriter) { if (!preg_match('/^\\s*!/', $this->getValueEscaped())) { $codewriter->pushHTML('<!--' . $this->getValueEscaped() . '-->'); } }
public function generateCode(PHPTAL_Php_CodeWriter $codewriter) { $codewriter->pushHTML($codewriter->interpolateHTML($this->getValueEscaped())); }