Blame view

vendor/cebe/markdown/inline/UrlLinkTrait.php 1.18 KB
abf1649b   andryeyev   Чистая установка ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  <?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');
  		$text = htmlspecialchars(urldecode($block[1]), ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
  		return "<a href=\"$href\">$text</a>";
  	}
  }