From 786dde43ea21c1990071683a8cf5efd3bd1b791d Mon Sep 17 00:00:00 2001 From: xue <> Date: Fri, 20 Jul 2007 12:33:27 +0000 Subject: Replaced GeSHi with Text_Highlighter --- framework/Web/UI/WebControls/TTextHighlighter.php | 111 ++++++++++++++-------- 1 file changed, 74 insertions(+), 37 deletions(-) (limited to 'framework/Web/UI/WebControls/TTextHighlighter.php') diff --git a/framework/Web/UI/WebControls/TTextHighlighter.php b/framework/Web/UI/WebControls/TTextHighlighter.php index 80f6069b..0f221cc2 100644 --- a/framework/Web/UI/WebControls/TTextHighlighter.php +++ b/framework/Web/UI/WebControls/TTextHighlighter.php @@ -10,11 +10,10 @@ * @package System.Web.UI.WebControls */ -/** - * Using GeSHi and TTextProcessor classes - */ -Prado::using('System.3rdParty.geshi.geshi'); -Prado::using('System.Web.UI.WebControls.TTextProcessor'); +Prado::using('System.3rdParty.TextHighlighter.Text.Highlighter',false); +Prado::using('System.3rdParty.TextHighlighter.Text.Highlighter.Renderer.Html',false); +Prado::using('System.Web.UI.WebControls.TTextProcessor'); + /** * TTextHighlighter class. @@ -34,6 +33,8 @@ Prado::using('System.Web.UI.WebControls.TTextProcessor'); */ class TTextHighlighter extends TTextProcessor { + private static $_lineNumberStyle=array(TTextHighlighterLineNumberStyle::Li => HL_NUMBERS_LI, TTextHighlighterLineNumberStyle::Table => HL_NUMBERS_TABLE); + /** * @return string tag name of the panel */ @@ -51,10 +52,12 @@ class TTextHighlighter extends TTextProcessor } /** - * @param string language whose syntax is to be used for highlighting. + * @param string language (case-insensitive) whose syntax is to be used for highlighting. * Valid values are those file names (without suffix) that are contained - * in '3rdParty/geshi/geshi' (e.g. 'php','prado','css','html','javascript', - * 'xml'.) + * in '3rdParty/TextHighlighter/Text/Highlighter'. Currently, the following languages are supported: + * ABAP, CPP, CSS, DIFF, DTD, HTML, JAVA, JAVASCRIPT, + * MYSQL, PERL, PHP, PRADO, PYTHON, RUBY, SQL, XML + * If a language is not supported, it will be displayed as plain text. */ public function setLanguage($value) { @@ -92,7 +95,39 @@ class TTextHighlighter extends TTextProcessor { $this->setViewState('CopyCode', TPropertyValue::ensureBoolean($value), false); } - + + /** + * @return TTextHighlighterLineNumberStyle style of row number, Table by default + */ + public function getLineNumberStyle() + { + return $this->getViewState('LineNumberStyle', TTextHighlighterLineNumberStyle::Table); + } + + /** + * @param TTextHighlighterLineNumberStyle style of row number + */ + public function setLineNumberStyle($value) + { + $this->setViewState('LineNumberStyle', TPropertyValue::ensureEnum($value,'TTextHighlighterLineNumberStyle')); + } + + /** + * @return integer tab size. Defaults to 4. + */ + public function getTabSize() + { + return $this->getViewState('TabSize', 4); + } + + /** + * @param integer tab size + */ + public function setTabSize($value) + { + $this->setViewState('TabSize', TPropertyValue::ensureInteger($value)); + } + /** * Registers css style for the highlighted result. * This method overrides parent implementation. @@ -101,26 +136,21 @@ class TTextHighlighter extends TTextProcessor public function onPreRender($writer) { parent::onPreRender($writer); - $this->registerHighlightScripts(); - } - - /** - * Register CSS stylesheet file and javascript file. - * @throws TConfigurationException if highlight.css file cannot be found - */ - protected function registerHighlightScripts() - { - $cs=$this->getPage()->getClientScript(); - $cssKey='prado:TTextHighlighter'; - if(!$cs->isStyleSheetFileRegistered($cssKey)) - { - if(($cssFile=Prado::getPathOfNamespace('System.3rdParty.geshi.highlight','.css'))===null) - throw new TConfigurationException('texthighlighter_stylesheet_invalid'); - $styleSheet = $this->publishFilePath($cssFile); - $cs->registerStyleSheetFile($cssKey, $styleSheet); - } - $cs->registerPradoScript('prado'); + $this->registerStyleSheet(); + $this->getPage()->getClientScript()->registerPradoScript('prado'); } + + /** + * Registers the stylesheet for presentation. + */ + protected function registerStyleSheet() + { + $cs=$this->getPage()->getClientScript(); + $cssFile=Prado::getPathOfNamespace('System.3rdParty.TextHighlighter.highlight','.css'); + $cssKey='prado:TTextHighlighter:'.$cssFile; + if(!$cs->isStyleSheetFileRegistered($cssKey)) + $cs->registerStyleSheetFile($cssKey, $this->publishFilePath($cssFile)); + } /** * Processes a text string. @@ -129,15 +159,16 @@ class TTextHighlighter extends TTextProcessor * @return string the processed text result */ public function processText($text) - { - $geshi = new GeSHi(trim($text), $this->getLanguage()); - if($this->getShowLineNumbers()) - $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); - $geshi->enable_classes(); - if($this->getEnableCopyCode()) - $geshi->set_header_content($this->getHeaderTemplate()); - - return $geshi->parse_code(); + { + if(($highlighter=Text_Highlighter::factory($this->getLanguage()))===false) + return ('
'.htmlentities(trim($text)).'
'); + + $options["use_language"]=true; + $options["tabsize"] = $this->getTabSize(); + if ($this->getShowLineNumbers()) + $options["numbers"] = self::$_lineNumberStyle[$this->getLineNumberStyle()]; + $highlighter->setRenderer(new Text_Highlighter_Renderer_Html($options)); + return $highlighter->highlight(trim($text)); } /** @@ -148,5 +179,11 @@ class TTextHighlighter extends TTextProcessor $id = $this->getClientID(); return TJavaScript::renderScriptBlock("new Prado.WebUI.TTextHighlighter('{$id}');"); } +} + +class TTextHighlighterLineNumberStyle extends TEnumerable +{ + const Li='Li'; + const Table='Table'; } ?> \ No newline at end of file -- cgit v1.2.3