CMarkdownParser
| Пакет | system.utils |
|---|---|
| Наследование | класс CMarkdownParser » MarkdownExtra_Parser » Markdown_Parser |
| С момента | 1.0 |
| Исходный код | framework/utils/CMarkdownParser.php |
CMarkdownParser расширяет MarkdownExtra_Parser, используя Text_Highlighter для выделения блоков кода с синтаксисом определённого языка. В частности, если блок кода начинается со следующего:
[language]будет использован синтаксис указанного языка для выделения блока кода. Поддерживаемые языки (регистронезависимо): ABAP, CPP, CSS, DIFF, DTD, HTML, JAVA, JAVASCRIPT, MYSQL, PERL, PHP, PYTHON, RUBY, SQL, XML
Также можно указать параметры, которые будут переданы синтаксическому выделению. Например:
[php showLineNumbers=1]что отобразит номера строк в каждой строке блока кода.
Для получения подробной информации о стандартном синтаксисе Markdown, пожалуйста, ознакомьтесь со следующим:
Общедоступные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| 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_backlink_class | MarkdownExtra_Parser | ||
| fn_backlink_title | MarkdownExtra_Parser | ||
| fn_id_prefix | MarkdownExtra_Parser | ||
| fn_link_class | MarkdownExtra_Parser | ||
| fn_link_title | MarkdownExtra_Parser | ||
| footnote_counter | MarkdownExtra_Parser | ||
| footnotes | MarkdownExtra_Parser | ||
| footnotes_ordered | MarkdownExtra_Parser | ||
| highlightCssClass | строка | класс CSS для div-элемента, содержащего выделенный блок кода. | 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 | смешанный | параметры, которые будут переданы {@link http://htmlpurifier. | CMarkdownParser |
| span_gamut | Markdown_Parser | ||
| strong_relist | MarkdownExtra_Parser | ||
| tab_width | Markdown_Parser | ||
| titles | Markdown_Parser | ||
| urls | Markdown_Parser | ||
| utf8_strlen | Markdown_Parser |
Общедоступные методы
| Метод | Описание | Определено в |
|---|---|---|
| __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 | |
| _doAutoLinks_email_callback() | Markdown_Parser | |
| _doAutoLinks_url_callback() | Markdown_Parser | |
| _doBlockQuotes_callback() | Markdown_Parser | |
| _doBlockQuotes_callback2() | Markdown_Parser | |
| _doCodeBlocks_callback() | Функция обратного вызова, когда найден блок кода. | CMarkdownParser |
| _doDefLists_callback() | MarkdownExtra_Parser | |
| _doFencedCodeBlocks_callback() | Функция обратного вызова, когда найден блок кода с ограждениями. | 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 | |
| _initDetab() | Markdown_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 | |
| doAutoLinks() | 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() | Возвращает файл CSS по умолчанию, используемый для выделения блоков кода. | CMarkdownParser |
| getHighlightConfig() | Генерирует конфигурацию для выделения. | CMarkdownParser |
| getHiglightConfig() | Генерирует конфигурацию для выделения. | 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() | Преобразует содержимое и очищает результат. | CMarkdownParser |
| setup() | MarkdownExtra_Parser | |
| stripAbbreviations() | MarkdownExtra_Parser | |
| stripFootnotes() | MarkdownExtra_Parser | |
| stripLinkDefinitions() | Markdown_Parser | |
| teardown() | MarkdownExtra_Parser | |
| transform() | Markdown_Parser | |
| unhash() | Markdown_Parser |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| createHighLighter() | Создаёт экземпляр выделения. | CMarkdownParser |
| getHighlightTag() | Возвращает заданные пользователем параметры выделения. | CMarkdownParser |
| getInlineOption() | Извлекает заданную конфигурацию. | CMarkdownParser |
| highlightCodeBlock() | Выделяет блок кода. | CMarkdownParser |
Подробное описание свойств
highlightCssClass свойство
public string $highlightCssClass;
класс CSS для div-элемента, содержащего выделенный блок кода. По умолчанию 'hl-code'.
purifierOptions свойство (доступно начиная с v1.1.4)
public mixed $purifierOptions;
опции, которые нужно передать HTML Purifier. Это может быть объект HTMLPurifier_Config, массив директив (Namespace.Directive => Value) или имя файла ini. Это свойство используется только при вызове safeTransform.
Подробное описание методов
_doCodeBlocks_callback() метод
public string _doCodeBlocks_callback(array $matches) | ||
| $matches | массив | соответствия |
| {возвращает} | строка | выделенный фрагмент кода |
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);
}
Функция обратного вызова при совпадении с блоком кода.
_doFencedCodeBlocks_callback() метод
public string _doFencedCodeBlocks_callback(array $matches) | ||
| $matches | массив | соответствия |
| {возвращает} | строка | выделенный фрагмент кода |
public function _doFencedCodeBlocks_callback($matches)
{
return "\n\n".$this->hashBlock($this->highlightCodeBlock($matches[2]))."\n\n";
}
Функция обратного вызова при совпадении с выделенным блоком кода.
createHighLighter() метод
protected Text_Highlighter createHighLighter(string $options) | ||
| $options | строка | опции, введённые пользователем |
| {возвращает} | Text_Highlighter | экземпляр выделения |
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;
}
Создаёт экземпляр выделения.
getDefaultCssFile() метод
public string getDefaultCssFile() | ||
| {возвращает} | строка | путь к файлу по умолчанию CSS, который используется для выделения фрагментов кода. |
public function getDefaultCssFile()
{
return Yii::getPathOfAlias('system.vendors.TextHighlighter.highlight').'.css';
}
getHighlightConfig() метод
public array getHighlightConfig(string $options) | ||
| $options | строка | опции, введённые пользователем |
| {возвращает} | массив | конфигурация выделения |
public function getHighlightConfig($options)
{
$config = array('use_language'=>true);
if( $this->getInlineOption('showLineNumbers', $options, false) )
$config['numbers'] = HL_NUMBERS_LI;
$config['tabsize'] = $this->getInlineOption('tabSize', $options, 4);
return $config;
}
Генерирует конфигурацию для выделения.
getHighlightTag() метод
protected string getHighlightTag(string $codeblock) | ||
| $codeblock | строка | фрагмент кода с опциями выделения. |
| {возвращает} | строка | опции выделения, введённые пользователем. Null, если опции не введены. |
protected function getHighlightTag($codeblock)
{
$str = trim(current(preg_split("/\r|\n/", $codeblock,2)));
if(strlen($str) > 2 && $str[0] === '[' && $str[strlen($str)-1] === ']')
return $str;
}
Возвращает опции выделения, введённые пользователем.
getHiglightConfig() метод
public array getHiglightConfig(string $options) | ||
| $options | строка | опции, введённые пользователем |
| {возвращает} | массив | конфигурация выделения |
public function getHiglightConfig($options)
{
return $this->getHighlightConfig($options);
}
Генерирует конфигурацию для выделения.
ПРИМЕЧАНИЕ: Этот метод устарел из-за ошибки в имени метода. Используйте getHighlightConfig вместо этого.
getInlineOption() метод
protected mixed getInlineOption(string $name, string $str, mixed $defaultValue) | ||
| $name | строка | название конфигурации |
| $str | строка | опции, введённые пользователем |
| $defaultValue | смешанный тип | значение по умолчанию, если конфигурация отсутствует |
| {возвращает} | смешанный тип | значение конфигурации |
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;
}
Извлекает указанную конфигурацию.
highlightCodeBlock() метод
protected string highlightCodeBlock(string $codeblock) | ||
| $codeblock | строка | фрагмент кода |
| {возвращает} | строка | выделенный фрагмент кода. Null, если фрагмент кода не требует выделения. |
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>";
}
Выделяет фрагмент кода.
safeTransform() метод
public string safeTransform(string $content) | ||
| $content | строка | содержимое Markdown |
| {возвращает} | строка | очищенное содержимое HTML |
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);
}
Преобразует содержимое и очищает результат. Этот метод вызывает метод transform() для преобразования содержимого Markdown в HTML-содержимое. Затем он использует CHtmlPurifier для очистки HTML-содержимого, чтобы избежать атак XSS.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CMarkdownParser