%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/libs/Markdown.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\libs;
use cebe\markdown\GithubMarkdown;
use yii\helpers\Url;
use humhub\modules\file\models\File;
/**
* Class Markdown parser for legacy markdown editor output.
*
* @package humhub\libs
* @deprecated since 1.8 use RichTextToHtmlConverter instead
*/
class Markdown extends GithubMarkdown
{
protected function handleInternalUrls($url)
{
// Handle urls to file
if (substr($url, 0, 10) === 'file-guid-') {
$guid = str_replace('file-guid-', '', $url);
$file = File::findOne(['guid' => $guid]);
if ($file !== null) {
return $file->getUrl();
}
}
return $url;
}
protected function renderLink($block)
{
if (isset($block['refkey'])) {
if (($ref = $this->lookupReference($block['refkey'])) !== false) {
$block = array_merge($block, $ref);
} else {
return $block['orig'];
}
}
$block['url'] = $this->handleInternalUrls($block['url']);
$baseUrl = Url::base(true);
$url = (empty($block['url'])) ? $baseUrl : $block['url'];
return Html::a($this->renderAbsy($block['text']), Html::decode($url), [
'target' => '_blank'
]);
}
protected function renderImage($block)
{
if (isset($block['refkey'])) {
if (($ref = $this->lookupReference($block['refkey'])) !== false) {
$block = array_merge($block, $ref);
} else {
return $block['orig'];
}
}
$block['url'] = $this->handleInternalUrls($block['url']);
return '<img src="' . htmlspecialchars($block['url'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . '"'
. ' alt="' . htmlspecialchars($block['text'], ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'UTF-8') . '"'
. (empty($block['title']) ? '' : ' title="' . htmlspecialchars($block['title'], ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'UTF-8') . '"')
. ($this->html5 ? '>' : ' />');
}
protected function renderAutoUrl($block)
{
return Html::a($block[1], $block[1], ['target' => '_blank']);
}
/**
* Renders a code block
* @param $block
* @return string
*/
protected function renderCode($block)
{
$class = isset($block['language']) ? ' class="' . Html::encode($block['language']) . '"' : '';
return "<pre><code $class>" . $block['content'] . "\n" . "</code></pre>\n";
}
/**
* "Dirty" hacked LinkTrait
*
* Try to allow also wiki urls with whitespaces etc.
* @param $markdown
* @return array|bool
*/
protected function parseLinkOrImage($markdown)
{
if (strpos($markdown, ']') !== false && preg_match('/\[((?>[^\]\[]+|(?R))*)\]/', $markdown, $textMatches)) { // TODO improve bracket regex
$text = $textMatches[1];
$offset = strlen($textMatches[0]);
$markdown = substr($markdown, $offset);
$pattern = <<<REGEXP
/(?(R) # in case of recursion match parentheses
\(((?>[^\s()]+)|(?R))*\)
| # else match a link with title
^\(\s*(((?>[^\s()]+)|(?R))*)(\s+"(.*?)")?\s*\)
)/x
REGEXP;
if (preg_match($pattern, $markdown, $refMatches)) {
// inline link
return [
$text,
isset($refMatches[2]) ? $refMatches[2] : '', // url
empty($refMatches[5]) ? null : $refMatches[5], // title
$offset + strlen($refMatches[0]), // offset
null, // reference key
];
} elseif (preg_match('/\((.*?)\)/', $markdown, $refMatches)) {
// reference style link
if (empty($refMatches[1])) {
$key = strtolower($text);
} else {
$key = strtolower($refMatches[1]);
}
return [
$text,
$refMatches[1],
$text, // title
$offset + strlen($refMatches[0]), // offset
null,
];
}
}
return false;
}
}