2015-07-28 17:25:03 +02:00
|
|
|
<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
|
2015-05-22 14:48:09 +02:00
|
|
|
|
|
|
|
use League\CommonMark\Block\Element\AbstractBlock;
|
|
|
|
use League\CommonMark\Block\Element\FencedCode;
|
2015-10-27 16:03:06 +01:00
|
|
|
use League\CommonMark\ElementRendererInterface;
|
2015-05-22 14:48:09 +02:00
|
|
|
use League\CommonMark\HtmlElement;
|
2018-10-04 08:18:23 +02:00
|
|
|
use League\CommonMark\Util\Xml;
|
2015-05-22 14:48:09 +02:00
|
|
|
|
2017-11-06 22:46:07 +01:00
|
|
|
class FencedCodeRenderer extends CodeRenderer
|
2015-05-22 14:48:09 +02:00
|
|
|
{
|
|
|
|
protected $supported_languages = [
|
|
|
|
'actionscript3',
|
|
|
|
'bash',
|
|
|
|
'csharp',
|
|
|
|
'coldfusion',
|
|
|
|
'cpp',
|
|
|
|
'css',
|
|
|
|
'delphi',
|
|
|
|
'diff',
|
|
|
|
'erlang',
|
|
|
|
'groovy',
|
|
|
|
'html/xml',
|
|
|
|
'java',
|
|
|
|
'javafx',
|
|
|
|
'javascript',
|
|
|
|
'none',
|
|
|
|
'perl',
|
|
|
|
'php',
|
|
|
|
'powershell',
|
|
|
|
'python',
|
|
|
|
'ruby',
|
|
|
|
'scala',
|
|
|
|
'sql',
|
2016-07-27 21:32:51 +02:00
|
|
|
'vb',
|
2015-05-22 14:48:09 +02:00
|
|
|
];
|
|
|
|
protected $known_conversions = ['html' => 'html/xml', 'xml' => 'html/xml', 'js' => 'javascript'];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param AbstractBlock $block
|
|
|
|
* @param HtmlRendererInterface $htmlRenderer
|
|
|
|
* @param bool $inTightList
|
|
|
|
*
|
|
|
|
* @return HtmlElement|string
|
|
|
|
*/
|
2015-10-27 16:03:06 +01:00
|
|
|
public function render(AbstractBlock $block, ElementRendererInterface $htmlRenderer, $inTightList = false)
|
2015-05-22 14:48:09 +02:00
|
|
|
{
|
|
|
|
if (!($block instanceof FencedCode)) {
|
|
|
|
throw new \InvalidArgumentException('Incompatible block type: ' . get_class($block));
|
|
|
|
}
|
|
|
|
|
2017-11-06 22:46:07 +01:00
|
|
|
$language = $this->getLanguage($block->getInfoWords(), $htmlRenderer);
|
2015-05-22 14:48:09 +02:00
|
|
|
|
2017-11-06 22:46:07 +01:00
|
|
|
return $this->getHTMLElement($block->getStringContent(), $language);
|
2015-05-22 14:48:09 +02:00
|
|
|
}
|
|
|
|
|
2015-10-27 16:03:06 +01:00
|
|
|
public function getLanguage($infoWords, ElementRendererInterface $htmlRenderer)
|
2015-05-22 14:48:09 +02:00
|
|
|
{
|
|
|
|
if (count($infoWords) === 0 || strlen($infoWords[0]) === 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-10-04 08:18:23 +02:00
|
|
|
$language = Xml::escape($infoWords[0], true);
|
2015-05-22 14:48:09 +02:00
|
|
|
|
|
|
|
if (array_key_exists($language, $this->known_conversions)) {
|
|
|
|
$language = $this->known_conversions[$language];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (in_array($language, $this->supported_languages)) {
|
|
|
|
return $language;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|