class => content pairs. * Based on the HTML renderer by Andrey Demenev. * * 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 Stoyan Stefanov * @copyright 2006 Stoyan Stefanov * @license http://www.php.net/license/3_0.txt PHP License * @version CVS: $Id$ * @link http://pear.php.net/package/Text_Highlighter */ /** * @ignore */ require_once 'Text/Highlighter/Renderer.php'; /** * Array renderer, based on Andrey Demenev's HTML renderer. * * In addition to the options supported by the HTML renderer, * the following options were also introduced: * * * * @author Stoyan Stefanov * @category Text * @package Text_Highlighter * @copyright 2006 Stoyan Stefanov * @license http://www.php.net/license/3_0.txt PHP License * @version Release: 0.5.0 * @link http://pear.php.net/package/Text_Highlighter */ class Text_Highlighter_Renderer_Array extends Text_Highlighter_Renderer { /**#@+ * @access private */ /** * Tab size * * @var integer */ var $_tabsize = 4; /** * Should htmlentities() will be called * * @var boolean */ var $_htmlspecialchars = true; /** * Enumerated or associative array * * @var integer */ var $_enumerated = false; /** * Array containing highlighting rules * * @var array */ var $_output = array(); /**#@-*/ /** * 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); $str = str_replace("\r","\n", $str); // some browsers refuse to display empty lines $str = preg_replace('~^$~m'," ", $str); $str = str_replace("\t",str_repeat(' ', $this->_tabsize), $str); return rtrim($str); } /** * Resets renderer state * * Descendents of Text_Highlighter call this method from the constructor, * passing $options they get as parameter. * * @access protected */ function reset() { $this->_output = array(); $this->_lastClass = 'default'; if (isset($this->_options['tabsize'])) { $this->_tabsize = $this->_options['tabsize']; } if (isset($this->_options['htmlspecialchars'])) { $this->_htmlspecialchars = $this->_options['htmlspecialchars']; } if (isset($this->_options['enumerated'])) { $this->_enumerated = $this->_options['enumerated']; } } /** * Accepts next token * * @abstract * @access public * @param string $class Token class * @param string $content Token content */ function acceptToken($class, $content) { if(! is_array($this->_output)) { $this->_output = array(); } $theClass = $this->_getFullClassName($class); if ($this->_htmlspecialchars) { $content = htmlspecialchars($content); } if ($this->_enumerated) { $this->_output[] = array($class, $content); } else { $this->_output[][$class] = $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; } /** * Get generated output * * @abstract * @return array Highlighted code as an array * @access public */ function getOutput() { return $this->_output; } } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * c-hanging-comment-ender-p: nil * End: */ ?>