5712073d140b04e13ec14ff4aa9ffd6cee50b13e
[yaffs-website] / vendor / cebe / markdown / inline / UrlLinkTrait.php
1 <?php
2 /**
3  * @copyright Copyright (c) 2014 Carsten Brandt
4  * @license https://github.com/cebe/markdown/blob/master/LICENSE
5  * @link https://github.com/cebe/markdown#readme
6  */
7
8 namespace cebe\markdown\inline;
9
10 // work around https://github.com/facebook/hhvm/issues/1120
11 defined('ENT_HTML401') || define('ENT_HTML401', 0);
12
13 /**
14  * Adds auto linking for URLs
15  */
16 trait UrlLinkTrait
17 {
18         /**
19          * Parses urls and adds auto linking feature.
20          * @marker http
21          * @marker ftp
22          */
23         protected function parseUrl($markdown)
24         {
25                 $pattern = <<<REGEXP
26                         /(?(R) # in case of recursion match parentheses
27                                  \(((?>[^\s()]+)|(?R))*\)
28                         |      # else match a link with title
29                                 ^(https?|ftp):\/\/(([^\s()]+)|(?R))+(?<![\.,:;\'"!\?\s])
30                         )/x
31 REGEXP;
32
33                 if (!in_array('parseLink', $this->context) && preg_match($pattern, $markdown, $matches)) {
34                         return [
35                                 ['autoUrl', $matches[0]],
36                                 strlen($matches[0])
37                         ];
38                 }
39                 return [['text', substr($markdown, 0, 4)], 4];
40         }
41
42         protected function renderAutoUrl($block)
43         {
44                 $href = htmlspecialchars($block[1], ENT_COMPAT | ENT_HTML401, 'UTF-8');
45                 $text = htmlspecialchars(urldecode($block[1]), ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
46                 return "<a href=\"$href\">$text</a>";
47         }
48 }