0 follower

CMarkdownParser

Package system.utils
Inheritance class CMarkdownParser » MarkdownExtra_Parser » Markdown_Parser
Since 1.0
Source Code framework/utils/CMarkdownParser.php
CMarkdownParser is a wrapper of MarkdownExtra_Parser.

CMarkdownParser extends MarkdownExtra_Parser by using Text_Highlighter to highlight code blocks with specific language syntax. In particular, if a code block starts with the following:
[language]
The syntax for the specified language will be used to highlight code block. The languages supported include (case-insensitive): ABAP, CPP, CSS, DIFF, DTD, HTML, JAVA, JAVASCRIPT, MYSQL, PERL, PHP, PYTHON, RUBY, SQL, XML

You can also specify options to be passed to the syntax highlighter. For example:
[php showLineNumbers=1]
which will show line numbers in each line of the code block.

For details about the standard markdown syntax, please check the following:

Public Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
abbr_desciptions MarkdownExtra_Parser
abbr_word_re MarkdownExtra_Parser
auto_close_tags_re MarkdownExtra_Parser
block_gamut Markdown_Parser
block_tags_re MarkdownExtra_Parser
clean_tags_re MarkdownExtra_Parser
contain_span_tags_re MarkdownExtra_Parser
context_block_tags_re MarkdownExtra_Parser
document_gamut Markdown_Parser
em_relist MarkdownExtra_Parser
em_strong_prepared_relist Markdown_Parser
em_strong_relist MarkdownExtra_Parser
empty_element_suffix Markdown_Parser
escape_chars Markdown_Parser
escape_chars_re Markdown_Parser
fn_id_prefix MarkdownExtra_Parser
footnote_counter MarkdownExtra_Parser
footnotes MarkdownExtra_Parser
footnotes_ordered MarkdownExtra_Parser
highlightCssClass string the css class for the div element containing the code block that is highlighted. CMarkdownParser
html_hashes Markdown_Parser
in_anchor Markdown_Parser
list_level Markdown_Parser
nested_brackets_depth Markdown_Parser
nested_brackets_re Markdown_Parser
nested_url_parenthesis_depth Markdown_Parser
nested_url_parenthesis_re Markdown_Parser
no_entities Markdown_Parser
no_markup Markdown_Parser
predef_abbr MarkdownExtra_Parser
predef_titles Markdown_Parser
predef_urls Markdown_Parser
purifierOptions mixed the options to be passed to {@link http://htmlpurifier. CMarkdownParser
span_gamut Markdown_Parser
strong_relist MarkdownExtra_Parser
tab_width Markdown_Parser
titles Markdown_Parser
urls Markdown_Parser

Public Methods

Hide inherited methods

MethodDescriptionDefined By
__construct() MarkdownExtra_Parser
_appendFootnotes_callback() MarkdownExtra_Parser
_detab_callback() Markdown_Parser
_doAbbreviations_callback() MarkdownExtra_Parser
_doAnchors_inline_callback() Markdown_Parser
_doAnchors_reference_callback() Markdown_Parser
_doBlockQuotes_callback() Markdown_Parser
_doBlockQuotes_callback2() Markdown_Parser
_doCodeBlocks_callback() Callback function when a code block is matched. CMarkdownParser
_doDefLists_callback() MarkdownExtra_Parser
_doFencedCodeBlocks_callback() Callback function when a fenced code block is matched. CMarkdownParser
_doFencedCodeBlocks_newlines() MarkdownExtra_Parser
_doHardBreaks_callback() Markdown_Parser
_doHeaders_attr() MarkdownExtra_Parser
_doHeaders_callback_atx() MarkdownExtra_Parser
_doHeaders_callback_setext() MarkdownExtra_Parser
_doImages_inline_callback() Markdown_Parser
_doImages_reference_callback() Markdown_Parser
_doLists_callback() Markdown_Parser
_doTable_callback() MarkdownExtra_Parser
_doTable_leadingPipe_callback() MarkdownExtra_Parser
_hashHTMLBlocks_callback() Markdown_Parser
_hashHTMLBlocks_inHTML() MarkdownExtra_Parser
_hashHTMLBlocks_inMarkdown() MarkdownExtra_Parser
_processDefListItems_callback_dd() MarkdownExtra_Parser
_processDefListItems_callback_dt() MarkdownExtra_Parser
_processListItems_callback() Markdown_Parser
_stripAbbreviations_callback() MarkdownExtra_Parser
_stripFootnotes_callback() MarkdownExtra_Parser
_stripLinkDefinitions_callback() Markdown_Parser
_unhash_callback() Markdown_Parser
appendFootnotes() MarkdownExtra_Parser
detab() Markdown_Parser
doAbbreviations() MarkdownExtra_Parser
doAnchors() Markdown_Parser
doBlockQuotes() Markdown_Parser
doCodeBlocks() Markdown_Parser
doDefLists() MarkdownExtra_Parser
doFencedCodeBlocks() MarkdownExtra_Parser
doFootnotes() MarkdownExtra_Parser
doHardBreaks() Markdown_Parser
doHeaders() MarkdownExtra_Parser
doHorizontalRules() Markdown_Parser
doImages() Markdown_Parser
doItalicsAndBold() Markdown_Parser
doLists() Markdown_Parser
doTables() MarkdownExtra_Parser
encodeAmpsAndAngles() Markdown_Parser
encodeAttribute() Markdown_Parser
encodeEmailAddress() Markdown_Parser
formParagraphs() MarkdownExtra_Parser
getDefaultCssFile() Returns the default CSS file that is used to highlight code blocks. CMarkdownParser
getHighlightConfig() Generates the config for the highlighter. CMarkdownParser
getHiglightConfig() Generates the config for the highlighter. CMarkdownParser
handleSpanToken() Markdown_Parser
hashBlock() Markdown_Parser
hashClean() MarkdownExtra_Parser
hashHTMLBlocks() MarkdownExtra_Parser
hashPart() Markdown_Parser
makeCodeSpan() Markdown_Parser
outdent() Markdown_Parser
parseSpan() Markdown_Parser
prepareItalicsAndBold() Markdown_Parser
processDefListItems() MarkdownExtra_Parser
processListItems() Markdown_Parser
runBasicBlockGamut() Markdown_Parser
runBlockGamut() Markdown_Parser
runSpanGamut() Markdown_Parser
safeTransform() Transforms the content and purifies the result. CMarkdownParser
setup() MarkdownExtra_Parser
stripAbbreviations() MarkdownExtra_Parser
stripFootnotes() MarkdownExtra_Parser
stripLinkDefinitions() Markdown_Parser
teardown() MarkdownExtra_Parser
transform() Markdown_Parser
unhash() Markdown_Parser

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
createHighLighter() Creates a highlighter instance. CMarkdownParser
getHighlightTag() Returns the user-entered highlighting options. CMarkdownParser
getInlineOption() Retrieves the specified configuration. CMarkdownParser
highlightCodeBlock() Highlights the code block. CMarkdownParser
utf8_strlen() Markdown_Parser

Property Details

highlightCssClass property
public string $highlightCssClass;

the css class for the div element containing the code block that is highlighted. Defaults to 'hl-code'.

purifierOptions property (available since v1.1.4)
public mixed $purifierOptions;

the options to be passed to HTML Purifier. This can be a HTMLPurifier_Config object, an array of directives (Namespace.Directive => Value) or the filename of an ini file. This property is used only when safeTransform is invoked.

Method Details

_doCodeBlocks_callback() method
public string _doCodeBlocks_callback(array $matches)
$matches array matches
{return} string the highlighted code block
Source Code: framework/utils/CMarkdownParser.php#97 (show)
public function _doCodeBlocks_callback($matches)
{
    
$codeblock $this->outdent($matches[1]);
    if((
$codeblock $this->highlightCodeBlock($codeblock)) !== null)
        return 
"\n\n".$this->hashBlock($codeblock)."\n\n";
    else
        return 
parent::_doCodeBlocks_callback($matches);
}

Callback function when a code block is matched.

_doFencedCodeBlocks_callback() method
public string _doFencedCodeBlocks_callback(array $matches)
$matches array matches
{return} string the highlighted code block
Source Code: framework/utils/CMarkdownParser.php#111 (show)
public function _doFencedCodeBlocks_callback($matches)
{
    return 
"\n\n".$this->hashBlock($this->highlightCodeBlock($matches[2]))."\n\n";
}

Callback function when a fenced code block is matched.

createHighLighter() method
protected Text_Highlighter createHighLighter(string $options)
$options string the user-entered options
{return} Text_Highlighter the highlighter instance
Source Code: framework/utils/CMarkdownParser.php#152 (show)
protected function createHighLighter($options)
{
    if(!
class_exists('Text_Highlighter'false))
    {
        require_once(
Yii::getPathOfAlias('system.vendors.TextHighlighter.Text.Highlighter').'.php');
        require_once(
Yii::getPathOfAlias('system.vendors.TextHighlighter.Text.Highlighter.Renderer.Html').'.php');
    }
    
$lang current(preg_split('/\s+/'substr(substr($options,1), 0,-1),2));
    
$highlighter Text_Highlighter::factory($lang);
    if(
$highlighter)
        
$highlighter->setRenderer(new Text_Highlighter_Renderer_Html($this->getHighlightConfig($options)));
    return 
$highlighter;
}

Creates a highlighter instance.

getDefaultCssFile() method
public string getDefaultCssFile()
{return} string the default CSS file that is used to highlight code blocks.
Source Code: framework/utils/CMarkdownParser.php#87 (show)
public function getDefaultCssFile()
{
    return 
Yii::getPathOfAlias('system.vendors.TextHighlighter.highlight').'.css';
}

getHighlightConfig() method
public array getHighlightConfig(string $options)
$options string user-entered options
{return} array the highlighter config
Source Code: framework/utils/CMarkdownParser.php#171 (show)
public function getHighlightConfig($options)
{
    
$config = array('use_language'=>true);
    if( 
$this->getInlineOption('showLineNumbers'$optionsfalse) )
        
$config['numbers'] = HL_NUMBERS_LI;
    
$config['tabsize'] = $this->getInlineOption('tabSize'$options4);
    return 
$config;
}

Generates the config for the highlighter.

getHighlightTag() method
protected string getHighlightTag(string $codeblock)
$codeblock string code block with highlighting options.
{return} string the user-entered highlighting options. Null if no option is entered.
Source Code: framework/utils/CMarkdownParser.php#140 (show)
protected function getHighlightTag($codeblock)
{
    
$str trim(current(preg_split("/\r|\n/"$codeblock,2)));
    if(
strlen($str) > && $str[0] === '[' && $str[strlen($str)-1] === ']')
        return 
$str;
}

Returns the user-entered highlighting options.

getHiglightConfig() method
public array getHiglightConfig(string $options)
$options string user-entered options
{return} array the highlighter config
Source Code: framework/utils/CMarkdownParser.php#189 (show)
public function getHiglightConfig($options)
{
    return 
$this->getHighlightConfig($options);
}

Generates the config for the highlighter.

NOTE: This method is deprecated due to a mistake in the method name. Use getHighlightConfig instead of this.

getInlineOption() method
protected mixed getInlineOption(string $name, string $str, mixed $defaultValue)
$name string the configuration name
$str string the user-entered options
$defaultValue mixed default value if the configuration is not present
{return} mixed the configuration value
Source Code: framework/utils/CMarkdownParser.php#201 (show)
protected function getInlineOption($name$str$defaultValue)
{
    if(
preg_match('/'.$name.'(\s*=\s*(\d+))?/i'$str$v) && count($v) > 2)
        return 
$v[2];
    else
        return 
$defaultValue;
}

Retrieves the specified configuration.

highlightCodeBlock() method
protected string highlightCodeBlock(string $codeblock)
$codeblock string the code block
{return} string the highlighted code block. Null if the code block does not need to highlighted
Source Code: framework/utils/CMarkdownParser.php#121 (show)
protected function highlightCodeBlock($codeblock)
{
    if((
$tag=$this->getHighlightTag($codeblock))!==null && ($highlighter=$this->createHighLighter($tag)))
    {
        
$codeblock preg_replace('/\A\n+|\n+\z/'''$codeblock);
        
$tagLen strpos($codeblock$tag)+strlen($tag);
        
$codeblock ltrim(substr($codeblock$tagLen));
        
$output=preg_replace('/<span\s+[^>]*>(\s*)<\/span>/''\1'$highlighter->highlight($codeblock));
        return 
"<div class=\"{$this->highlightCssClass}\">".$output."</div>";
    }
    else
        return 
"<pre>".CHtml::encode($codeblock)."</pre>";
}

Highlights the code block.

safeTransform() method
public string safeTransform(string $content)
$content string the markdown content
{return} string the purified HTML content
Source Code: framework/utils/CMarkdownParser.php#76 (show)
public function safeTransform($content)
{
    
$content=$this->transform($content);
    
$purifier=new HTMLPurifier($this->purifierOptions);
    
$purifier->config->set('Cache.SerializerPath',Yii::app()->getRuntimePath());
    return 
$purifier->purify($content);
}

Transforms the content and purifies the result. This method calls the transform() method to convert markdown content into HTML content. It then uses CHtmlPurifier to purify the HTML content to avoid XSS attacks.