public function generateCode(PHPTAL_Php_CodeWriter $codewriter) { if ($codewriter->getOutputMode() === PHPTAL::HTML5) { $codewriter->setDocType('<!DOCTYPE html>'); } else { $codewriter->setDocType($this->getValueEscaped()); } $codewriter->doDoctype(); }
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()))); } }
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; } } }