Server_AccessControl/vendor/cebe/markdown/block/FencedCodeTrait.php
2020-10-06 14:27:47 +07:00

55 lines
1.2 KiB
PHP

<?php
/**
* @copyright Copyright (c) 2014 Carsten Brandt
* @license https://github.com/cebe/markdown/blob/master/LICENSE
* @link https://github.com/cebe/markdown#readme
*/
namespace cebe\markdown\block;
/**
* Adds the fenced code blocks
*
* automatically included 4 space indented code blocks
*/
trait FencedCodeTrait
{
use CodeTrait;
/**
* identify a line as the beginning of a fenced code block.
*/
protected function identifyFencedCode($line)
{
return ($l = $line[0]) === '`' && strncmp($line, '```', 3) === 0 ||
$l === '~' && strncmp($line, '~~~', 3) === 0;
}
/**
* Consume lines for a fenced code block
*/
protected function consumeFencedCode($lines, $current)
{
// consume until ```
$line = rtrim($lines[$current]);
$fence = substr($line, 0, $pos = strrpos($line, $line[0]) + 1);
$language = substr($line, $pos);
$content = [];
for ($i = $current + 1, $count = count($lines); $i < $count; $i++) {
if (rtrim($line = $lines[$i]) !== $fence) {
$content[] = $line;
} else {
break;
}
}
$block = [
'code',
'content' => implode("\n", $content),
];
if (!empty($language)) {
$block['language'] = $language;
}
return [$block, $i];
}
}