You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
<?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\inline; |
|
|
|
// work around https://github.com/facebook/hhvm/issues/1120 |
|
defined('ENT_HTML401') || define('ENT_HTML401', 0); |
|
|
|
/** |
|
* Adds auto linking for URLs |
|
*/ |
|
trait UrlLinkTrait |
|
{ |
|
/** |
|
* Parses urls and adds auto linking feature. |
|
* @marker http |
|
* @marker ftp |
|
*/ |
|
protected function parseUrl($markdown) |
|
{ |
|
$pattern = <<<REGEXP |
|
/(?(R) # in case of recursion match parentheses |
|
\(((?>[^\s()]+)|(?R))*\) |
|
| # else match a link with title |
|
^(https?|ftp):\/\/(([^\s()]+)|(?R))+(?<![\.,:;\'"!\?\s]) |
|
)/x |
|
REGEXP; |
|
|
|
if (!in_array('parseLink', $this->context) && preg_match($pattern, $markdown, $matches)) { |
|
return [ |
|
['autoUrl', $matches[0]], |
|
strlen($matches[0]) |
|
]; |
|
} |
|
return [['text', substr($markdown, 0, 4)], 4]; |
|
} |
|
|
|
protected function renderAutoUrl($block) |
|
{ |
|
$href = htmlspecialchars($block[1], ENT_COMPAT | ENT_HTML401, 'UTF-8'); |
|
$decodedUrl = urldecode($block[1]); |
|
$secureUrlText = preg_match('//u', $decodedUrl) ? $decodedUrl : $block[1]; |
|
$text = htmlspecialchars($secureUrlText, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8'); |
|
return "<a href=\"$href\">$text</a>"; |
|
} |
|
}
|
|
|