<?php /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ /** * HTML renderer * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category Text * @package Text_Highlighter * @author Andrey Demenev <demenev@gmail.com> * @copyright 2004-2006 Andrey Demenev * @license http://www.php.net/license/3_0.txt PHP License * @version CVS: $Id: Html.php 48 2006-02-11 03:01:37Z andrey $ * @link http://pear.php.net/package/Text_Highlighter */ /** * @ignore */ require_once 'Text/Highlighter/Renderer.php'; /** * HTML renderer * * Elements of $options argument of constructor (each being optional): * * - 'numbers' - Line numbering style 0 or {@link HL_NUMBERS_LI} or {@link HL_NUMBERS_TABLE} * - 'tabsize' - Tab size * * @author Andrey Demenev <demenev@gmail.com> * @category Text * @package Text_Highlighter * @copyright 2004-2006 Andrey Demenev * @license http://www.php.net/license/3_0.txt PHP License * @version Release: @package_version@ * @link http://pear.php.net/package/Text_Highlighter */ class Text_Highlighter_Renderer_Array_dez extends Text_Highlighter_Renderer { /**#@+ * @access private */ /** * CSS class of last outputted text chunk * * @var string */ var $_lastClass; /** * Tab size * * @var integer */ var $_tabsize = 4; /** * Highlighted code * * @var string */ var $_output = ''; /**#@-*/ /** * Preprocesses code * * @access public * * @param string $str Code to preprocess * @return string Preprocessed code */ function preprocess($str) { // normalize whitespace and tabs $str = str_replace("\r\n","\n", $str); // some browsers refuse to display mepty lines $str = preg_replace('~^$~m'," ", $str); $str = str_replace("\t",str_repeat(' ', $this->_tabsize), $str); return rtrim($str); } /** * Resets renderer state * * @access protected * * * Descendents of Text_Highlighter call this method from the constructor, * passing $options they get as parameter. */ function reset() { $this->_output = ''; $this->_lastClass = ''; if (isset($this->_options['tabsize'])) { $this->_tabsize = $this->_options['tabsize']; } } /** * Accepts next token * * @access public * * @param string $class Token class * @param string $content Token content */ function acceptToken($class, $content) { $theClass = $this->_getFullClassName($class); $content = htmlspecialchars($content); if (!$this->_output || $class != $this->_lastClass) { $tag = ''; if ($this->_output) { $tag .= '</span>'; } $tag .= '<span class="hl-' . $theClass . '">'; $this->_output .= $tag; } else { $class = $this->_lastClass; $theClass = $this->_getFullClassName($class); } // Make coloring tags not pass newlines $tag = "</span>\n<span class=\"hl-" . $theClass . '">'; $content = str_replace(" ", ' ', $content); $content = str_replace("\n", $tag, $content); $this->_output .= $content; $this->_lastClass = $class; } /** * Given a CSS class name, returns the class name * with language name prepended, if necessary * * @access private * * @param string $class Token class */ function _getFullClassName($class) { if (!empty($this->_options['use_language'])) { $theClass = $this->_language . '-' . $class; } else { $theClass = $class; } return $theClass; } /** * Signals that no more tokens are available * * @access public * */ function finalize() { if ($this->_output) { $this->_output .= '</span>'; } } /** * Get generated output * * @return string Highlighted code * @access public * */ function getOutput() { /* Convert this output to an array */ $resultLines = explode("\n", $this->_output); return $resultLines; } } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * c-hanging-comment-ender-p: nil * End: */ ?>