1<?php 2 3namespace dokuwiki\Parsing\ParserMode; 4 5class Externallink extends AbstractMode 6{ 7 protected $schemes = []; 8 protected $patterns = []; 9 10 /** @inheritdoc */ 11 public function preConnect() 12 { 13 if (count($this->patterns)) return; 14 15 $ltrs = '\w'; 16 $gunk = '/\#~:.?+=&%@!\-\[\]'; 17 $punc = '.:?\-;,'; 18 $host = $ltrs . $punc; 19 $any = $ltrs . $gunk . $punc; 20 21 $this->schemes = getSchemes(); 22 foreach ($this->schemes as $scheme) { 23 $this->patterns[] = '\b(?i)' . $scheme . '(?-i)://[' . $any . ']+?(?=[' . $punc . ']*[^' . $any . '])'; 24 } 25 26 $this->patterns[] = '(?<![/\\\\])\b(?i)www?(?-i)\.[' . $host . ']+?\.' . 27 '[' . $host . ']+?[' . $any . ']+?(?=[' . $punc . ']*[^' . $any . '])'; 28 $this->patterns[] = '(?<![/\\\\])\b(?i)ftp?(?-i)\.[' . $host . ']+?\.' . 29 '[' . $host . ']+?[' . $any . ']+?(?=[' . $punc . ']*[^' . $any . '])'; 30 } 31 32 /** @inheritdoc */ 33 public function connectTo($mode) 34 { 35 36 foreach ($this->patterns as $pattern) { 37 $this->Lexer->addSpecialPattern($pattern, $mode, 'externallink'); 38 } 39 } 40 41 /** @inheritdoc */ 42 public function getSort() 43 { 44 return 330; 45 } 46 47 /** 48 * @return array 49 */ 50 public function getPatterns() 51 { 52 return $this->patterns; 53 } 54} 55