diff options
Diffstat (limited to 'framework/web/widgets/CMarkdown.php')
| -rw-r--r-- | framework/web/widgets/CMarkdown.php | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/framework/web/widgets/CMarkdown.php b/framework/web/widgets/CMarkdown.php new file mode 100644 index 0000000..d2ce142 --- /dev/null +++ b/framework/web/widgets/CMarkdown.php @@ -0,0 +1,118 @@ +<?php +/** + * CMarkdown class file. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @link http://www.yiiframework.com/ + * @copyright Copyright © 2008-2011 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CMarkdown converts the captured content from markdown syntax to HTML code. + * + * CMarkdown can be used as either a widget or a filter. It is a wrapper of {@link CMarkdownParser}. + * CMarkdown adds an additional option {@link purifyOutput} which can be set true + * so that the converted HTML code is purified before being displayed. + * + * For details about the markdown syntax, please check the following: + * <ul> + * <li>{@link http://daringfireball.net/projects/markdown/syntax official markdown syntax}</li> + * <li>{@link http://michelf.com/projects/php-markdown/extra/ markdown extra syntax}</li> + * <li>{@link CMarkdownParser markdown with syntax highlighting}</li> + * </ul> + * + * @property CMarkdownParser $markdownParser The parser instance. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Id: CMarkdown.php 3515 2011-12-28 12:29:24Z mdomba $ + * @package system.web.widgets + * @since 1.0 + */ +class CMarkdown extends COutputProcessor +{ + /** + * @var mixed the CSS file used for the widget. Defaults to null, meaning + * using the default CSS file included together with the widget. + * If false, no CSS file will be used. Otherwise, the specified CSS file + * will be included when using this widget. + */ + public $cssFile; + /** + * @var boolean whether to use {@link CHtmlPurifier} to purify the generated HTML code. Defaults to false. + */ + public $purifyOutput=false; + + private $_parser; + + /** + * Processes the captured output. + * This method converts the content in markdown syntax to HTML code. + * If {@link purifyOutput} is true, the HTML code will also be purified. + * @param string $output the captured output to be processed + * @see convert + */ + public function processOutput($output) + { + $output=$this->transform($output); + if($this->purifyOutput) + { + $purifier=new CHtmlPurifier; + $output=$purifier->purify($output); + } + parent::processOutput($output); + } + + /** + * Converts the content in markdown syntax to HTML code. + * This method uses {@link CMarkdownParser} to do the conversion. + * @param string $output the content to be converted + * @return string the converted content + */ + public function transform($output) + { + $this->registerClientScript(); + return $this->getMarkdownParser()->transform($output); + } + + /** + * Registers the needed CSS and JavaScript. + */ + public function registerClientScript() + { + if($this->cssFile!==false) + self::registerCssFile($this->cssFile); + } + + /** + * Registers the needed CSS file. + * @param string $url the CSS URL. If null, a default CSS URL will be used. + */ + public static function registerCssFile($url=null) + { + CTextHighlighter::registerCssFile($url); + } + + /** + * Returns the markdown parser instance. + * This method calls {@link createMarkdownParser} to create the parser instance. + * Call this method multipe times will only return the same instance. + * @return CMarkdownParser the parser instance + */ + public function getMarkdownParser() + { + if($this->_parser===null) + $this->_parser=$this->createMarkdownParser(); + return $this->_parser; + } + + /** + * Creates a markdown parser. + * By default, this method creates a {@link CMarkdownParser} instance. + * @return CMarkdownParser the markdown parser. + */ + protected function createMarkdownParser() + { + return new CMarkdownParser; + } +} |
