From 746adbd10561e23f47110a362d85390baf90fbdc Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Tue, 11 Nov 2008 21:49:20 -0700 Subject: [PATCH] Update CSS Viewer --- framework/Mime/lib/Horde/Mime/Viewer/css.php | 141 +++++++++++++++------------ 1 file changed, 77 insertions(+), 64 deletions(-) diff --git a/framework/Mime/lib/Horde/Mime/Viewer/css.php b/framework/Mime/lib/Horde/Mime/Viewer/css.php index a8575cb58..72d45bda7 100644 --- a/framework/Mime/lib/Horde/Mime/Viewer/css.php +++ b/framework/Mime/lib/Horde/Mime/Viewer/css.php @@ -17,93 +17,106 @@ require_once dirname(__FILE__) . '/source.php'; class Horde_Mime_Viewer_css extends Horde_Mime_Viewer_source { /** - * Render out the currently set contents. + * Can this driver render various views? * - * @param array $params Any parameters the viewer may need. + * @var boolean + */ + protected $_capability = array( + 'embedded' => false, + 'full' => true, + 'info' => false, + 'inline' => true + ); + + /** + * Attribute preg patterns. + * + * @var array + */ + protected $_attrPatterns = array( + // Attributes + '!([-\w]+\s*):!s' => '\\1:', + // Values + '!:(\s*)(.+?)(\s*;)!s' => ':\\1\\2\\3', + // URLs + '!(url\([\'"]?)(.*?)([\'"]?\))!s' => '\\1\\2\\3', + // Colors + '!(#[[:xdigit:]]{3,6})!s' => '\\1', + // Parentheses + '!({|})!s' => '\\1', + // Unity + '!(em|px|%)\b!s' => '\\1' + ); + + /** + * Handles preg patterns. + * + * @var array + */ + protected $_handlesPatterns = array( + // HTML Tags + '!\b(body|h\d|a|span|div|acronym|small|strong|em|pre|ul|ol|li|p)\b!s' => '\\1\\2', + // IDs + '!(#[-\w]+)!s' => '\\1', + // Class + '!(\.[-\w]+)\b!s' => '\\1', + // METAs + '!(:link|:visited|:hover|:active|:first-letter)!s' => '\\1' + ); + + /** + * Return the full rendered version of the Horde_Mime_Part object. + * + * @return array See Horde_Mime_Viewer_Driver::render(). + */ + protected function _render() + { + $ret = $this->_renderInline(); + + // Need Horde headers for CSS tags. + $ret['data'] = Util::bufferOutput('require', $GLOBALS['registry']->get('templates', 'horde') . '/common-header.inc') . + $ret['data'] . + Util::bufferOutput('require', $GLOBALS['registry']->get('templates', 'horde') . '/common-footer.inc'); + + return $ret; + } + + /** + * Return the rendered inline version of the Horde_Mime_Part object. * - * @return string The rendered text. + * @return array See Horde_Mime_Viewer_Driver::render(). */ - public function render($params = null) + protected function _renderInline() { - $css = htmlspecialchars($this->mime_part->getContents(), ENT_NOQUOTES); - $css = preg_replace_callback('!(}|\*/).*?({|/\*)!s', array($this, '_handles'), $css); + $css = preg_replace_callback('!(}|\*/).*?({|/\*)!s', array($this, '_handles'), htmlspecialchars($this->_mimepart->getContents(), ENT_NOQUOTES)); $css = preg_replace_callback('!{[^}]*}!s', array($this, '_attributes'), $css); $css = preg_replace_callback('!/\*.*?\*/!s', array($this, '_comments'), $css); - $css = trim($css); - - // Educated Guess at whether we are inline or not. - if (headers_sent() || ob_get_length()) { - return $this->lineNumber($css); - } else { - return Util::bufferOutput('require', $GLOBALS['registry']->get('templates', 'horde') . '/common-header.inc') . - $this->lineNumber($css) . - Util::bufferOutput('require', $GLOBALS['registry']->get('templates', 'horde') . '/common-footer.inc'); - } + return $this->_lineNumber(trim($css)); } /** + * TODO */ protected function _comments($matches) { - $patterns[] = '!(http://[/\w-.]+)!s'; - $replaces[] = '\\1'; - - $comments = preg_replace($patterns, $replaces, $matches[0]); - - return '' . $comments . ''; + return '' . + preg_replace('!(http://[/\w-.]+)!s', '\\1', $matches[0]) . + ''; } /** + * TODO */ protected function _attributes($matches) { - // Attributes. - $patterns[] = '!([-\w]+\s*):!s'; - $replaces[] = '\\1:'; - - // Values. - $patterns[] = '!:(\s*)(.+?)(\s*;)!s'; - $replaces[] = ':\\1\\2\\3'; - - // URLs. - $patterns[] = '!(url\([\'"]?)(.*?)([\'"]?\))!s'; - $replaces[] = '\\1\\2\\3'; - - // Colors. - $patterns[] = '!(#[[:xdigit:]]{3,6})!s'; - $replaces[] = '\\1'; - - // Parentheses. - $patterns[] = '!({|})!s'; - $replaces[] = '\\1'; - - // Unity. - $patterns[] = '!(em|px|%)\b!s'; - $replaces[] = '\\1'; - - return preg_replace($patterns, $replaces, $matches[0]); + return preg_replace(array_keys($this->_attrPatterns), array_values($this->_attrPatterns), $matches[0]); } /** + * TODO */ protected function _handles($matches) { - // HTML Tags. - $patterns[] = '!\b(body|h\d|a|span|div|acronym|small|strong|em|pre|ul|ol|li|p)\b!s'; - $replaces[] = '\\1\\2'; - - // IDs. - $patterns[] = '!(#[-\w]+)!s'; - $replaces[] = '\\1'; - - // Class. - $patterns[] = '!(\.[-\w]+)\b!s'; - $replaces[] = '\\1'; - - // METAs. - $patterns[] = '!(:link|:visited|:hover|:active|:first-letter)!s'; - $replaces[] = '\\1'; - - return preg_replace($patterns, $replaces, $matches[0]); + return preg_replace(array_keys($this->_handlesPatterns), array_values($this->_handlesPatterns), $matches[0]); } } -- 2.11.0