You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.1 KiB
PHP
43 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace sixlive;
|
|
|
|
use DomainException;
|
|
use Highlight\Highlighter;
|
|
use ParsedownExtra;
|
|
|
|
class ParsedownHighlightExtra extends ParsedownExtra
|
|
{
|
|
protected $highlighter;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->highlighter = new Highlighter;
|
|
}
|
|
|
|
protected function blockFencedCodeComplete($block)
|
|
{
|
|
if (! isset($block['element']['element']['attributes'])) {
|
|
return $block;
|
|
}
|
|
|
|
$code = $block['element']['element']['text'];
|
|
$languageClass = $block['element']['element']['attributes']['class'];
|
|
$language = explode('-', $languageClass);
|
|
|
|
try {
|
|
$highlighted = $this->highlighter->highlight($language[1], $code);
|
|
$block['element']['element']['attributes']['class'] = vsprintf('%s hljs %s', [
|
|
$languageClass,
|
|
$highlighted->language,
|
|
]);
|
|
$block['element']['element']['rawHtml'] = $highlighted->value;
|
|
unset($block['element']['element']['text']);
|
|
} catch (DomainException $e) {
|
|
//
|
|
}
|
|
|
|
return $block;
|
|
}
|
|
}
|