From 823ddf3e3fbeb3cf5b30da257d868af743bf3302 Mon Sep 17 00:00:00 2001 From: xue <> Date: Thu, 12 Jan 2006 13:35:40 +0000 Subject: --- framework/Web/UI/WebControls/TTextHighlighter.php | 92 +++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 framework/Web/UI/WebControls/TTextHighlighter.php (limited to 'framework/Web/UI/WebControls/TTextHighlighter.php') diff --git a/framework/Web/UI/WebControls/TTextHighlighter.php b/framework/Web/UI/WebControls/TTextHighlighter.php new file mode 100644 index 00000000..ec21b344 --- /dev/null +++ b/framework/Web/UI/WebControls/TTextHighlighter.php @@ -0,0 +1,92 @@ + + * @version $Revision: 1.66 $ $Date: ${DATE} ${TIME} $ + * @package ${package} + */ +class TTextHighlighter extends TWebControl +{ + /** + * @return string tag name of the panel + */ + protected function getTagName() + { + return 'div'; + } + + public function getLanguage() + { + return $this->getViewState('Language', 'php'); + } + + public function setLanguage($value) + { + $this->setViewState('Language', $value, 'php'); + } + + public function setShowLineNumbers($value) + { + $this->setViewState('ShowLineNumbers', TPropertyValue::ensureBoolean($value), false); + } + + public function getShowLineNumbers() + { + return $this->getViewState('ShowLineNumbers', false); + } + + protected function onPreRender($writer) + { + parent::onPreRender($writer); + $this->registerTextHighlightStyleSheet(); + } + + public function addParsedObject($object) + { + if(is_string($object)) + $object=html_entity_decode($object); + parent::addParsedObject($object); + } + + protected function renderContents($writer) + { + $textWriter=new TTextWriter; + parent::renderContents(new THtmlWriter($textWriter)); + $writer->write($this->highlightText($textWriter->flush())); + } + + /** + * Register CSS style sheet file. + */ + protected function registerTextHighlightStyleSheet() + { + $cs = $this->getPage()->getClientScript(); + if(!$cs->isStyleSheetFileRegistered(get_class($this))) + { + $styleSheet = $this->getAsset('Highlighter/code_highlight.css'); + $cs->registerStyleSheetFile(get_class($this), $styleSheet); + } + } + + /** + * Returns the highlighted text. + * @param string text to highlight. + * @return string highlighted text. + */ + protected function highlightText($text) + { + $geshi = new GeSHi(trim($text), $this->getLanguage()); + if($this->getShowLineNumbers()) + $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); + $geshi->enable_classes(); + return $geshi->parse_code(); + } +} +?> \ No newline at end of file -- cgit v1.2.3