* @license http://www.gnu.org/copyleft/gpl.html GNU GPL * @copyright (C) 2005 Nigel McNie * @version 1.1.0 * */ /** * The GeSHiStyler class * * @package core * @author Nigel McNie * @since 1.1.0 * @version 1.1.0 */ class GeSHiStyler { /** * @var string */ var $charset; /** * @var string */ var $fileExtension; /** * @var array */ var $_styleData = array(); /** * @var array */ var $_parseData; /** * @var int */ var $_parseDataPointer = 0; /** * @var array */ var $_contextCacheData = array(); function setStyle ($context_name, $style, $start_name = 'start', $end_name = 'end') { // @todo [blocking 1.1.1] Why is this called sometimes with blank data? geshi_dbg('GeSHiStyler::setStyle(' . $context_name . ', ' . $style . ')', GESHI_DBG_PARSE); $this->_styleData[$context_name] = $style; /*if (!isset($this->_styleData["$context_name/$start_name"])) { $this->_styleData["$context_name/$start_name"] = $style; } if (!isset($this->_styleData["$context_name/$end_name"])) { $this->_styleData["$context_name/$end_name"] = $style; }*/ } /*function setStartStyle ($context_name, $style) { $this->_styleData["$context_name/$this->_startName"] = $style; } function setStartName ($name) { $this->_startName = $name; }*/ function removeStyleData ($context_name, $context_start_name = 'start', $context_end_name = 'end') { unset($this->_styleData[$context_name]); unset($this->_styleData["$context_name/$context_start_name"]); unset($this->_styleData["$context_name/$context_end_name"]); geshi_dbg(' removed style data for ' . $context_name, GESHI_DBG_PARSE); } /*function setEndStyle ($context_name, $style) { $this->_styleData["$context_name/$this->_endName"] = $style; } function setEndName ($name) { $this->_endName = $name; }*/ function getStyle ($context_name) { if (isset($this->_styleData[$context_name])) { return $this->_styleData[$context_name]; } // If style for starter/ender requested and we got here, use the default if ('/end' == substr($context_name, -4)) { $this->_styleData[$context_name] = $this->_styleData[substr($context_name, 0, -4)]; return $this->_styleData[$context_name]; } if ('/start' == substr($context_name, -6)) { $this->_styleData[$context_name] = $this->_styleData[substr($context_name, 0, -6)]; return $this->_styleData[$context_name]; } //@todo [blocking 1.1.5] Make the default style for otherwise unstyled elements configurable $this->_styleData[$context_name] = 'color:#000;'; return 'color:#000;'; } /* function getStyleStart ($context_name) { if (isset($this->_styleData["$context_name/$this->_startName"])) { return $this->_styleData["$context_name/$this->_startName"]; } $this->_styleData["$context_name/$this->_startName"] = $this->getStyle($context_name); return $this->_styleData["$context_name/$this->_startName"]; } function getStyleEnd ($context_name) { if (isset($this->_styleData["$context_name/$this->_endName"])) { return $this->_styleData["$context_name/$this->_endName"]; } $this->_styleData["$context_name/$this->_endName"] = $this->getStyle($context_name); return $this->_styleData["$context_name/$this->_endName"]; }*/ /* function startIsUnique ($context_name) { return (isset($this->_styleData["$context_name/$this->_startName"]) && '' != $this->_styleData["$context_name/$this->_startName"] && $this->_styleData["$context_name/$this->_startName"] != $this->_styleData[$context_name]); } function endIsUnique ($context_name) { $r = (isset($this->_styleData["$context_name/$this->_endName"]) && '' != $this->_styleData["$context_name/$this->_endName"] && $this->_styleData["$context_name/$this->_endName"] != $this->_styleData[$context_name]); geshi_dbg('GeSHiStyler::endIsUnique(' . $context_name . ') = ' . $r, GESHI_DBG_PARSE); return $r; } */ function resetParseData () { $this->_parseData = null; $this->_parseDataPointer = 0; } /** * This method adds parse data. It tries to merge it also if two * consecutive contexts with the same name add parse data (which is * very possible). */ function addParseData ($code, $context_name, $url = '') { if ($context_name == $this->_parseData[$this->_parseDataPointer][1]) { // same context, same URL $this->_parseData[$this->_parseDataPointer][0] .= $code; } else { $this->_parseData[++$this->_parseDataPointer] = array($code, $context_name, $url); } } function addParseDataStart ($code, $context_name, $start_name = 'start') { $this->addParseData($code, "$context_name/$start_name"); } function addParseDataEnd ($code, $context_name, $end_name = 'end') { $this->addParseData($code, "$context_name/$end_name"); } function getParseData () { return $this->_parseData; } /** * Sets cache data */ function setCacheData ($cached_file_name, $cache_str) { $this->_contextCacheData[$cached_file_name] = $cache_str; } /** * Gets cache data */ function getCacheData ($cached_file_name) { return isset($this->_contextCacheData[$cached_file_name]) ? $this->_contextCacheData[$cached_file_name] : null; } } ?>