From fa48de33c2f6cefbac8bfec7cde75b75390d5f39 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Wed, 15 Jun 2016 19:44:15 -0700 Subject: provide syntax based [colour] highlighting on code blocks for popular languages. I'm not happy with the line height on the list elements but couldn't see where this was defaulted. This uses the syntax [code=xxx]some code snippet[/code], where xxx represents a code/language style - with about 18 builtins. --- .../Text/Highlighter/Renderer/Array.php | 200 +++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 library/Text_Highlighter/Text/Highlighter/Renderer/Array.php (limited to 'library/Text_Highlighter/Text/Highlighter/Renderer/Array.php') diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/Array.php b/library/Text_Highlighter/Text/Highlighter/Renderer/Array.php new file mode 100644 index 000000000..fd238a4d1 --- /dev/null +++ b/library/Text_Highlighter/Text/Highlighter/Renderer/Array.php @@ -0,0 +1,200 @@ +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) + { + + + $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: + */ + +?> \ No newline at end of file -- cgit v1.2.3