Skip to content
This repository
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 119 lines (110 sloc) 3.494 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
<?php
/**
* CMarkdown class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright &copy; 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$
* @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;
}
}
Something went wrong with that request. Please try again.