55 lines
1.3 KiB
PHP
55 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace dokuwiki\Parsing\ParserMode;
|
|
|
|
class Externallink extends AbstractMode
|
|
{
|
|
protected $schemes = array();
|
|
protected $patterns = array();
|
|
|
|
/** @inheritdoc */
|
|
public function preConnect()
|
|
{
|
|
if (count($this->patterns)) return;
|
|
|
|
$ltrs = '\w';
|
|
$gunk = '/\#~:.?+=&%@!\-\[\]';
|
|
$punc = '.:?\-;,';
|
|
$host = $ltrs.$punc;
|
|
$any = $ltrs.$gunk.$punc;
|
|
|
|
$this->schemes = getSchemes();
|
|
foreach ($this->schemes as $scheme) {
|
|
$this->patterns[] = '\b(?i)'.$scheme.'(?-i)://['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
|
|
}
|
|
|
|
$this->patterns[] = '(?<![/\\\\])\b(?i)www?(?-i)\.['.$host.']+?\.'.
|
|
'['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
|
|
$this->patterns[] = '(?<![/\\\\])\b(?i)ftp?(?-i)\.['.$host.']+?\.'.
|
|
'['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
|
|
}
|
|
|
|
/** @inheritdoc */
|
|
public function connectTo($mode)
|
|
{
|
|
|
|
foreach ($this->patterns as $pattern) {
|
|
$this->Lexer->addSpecialPattern($pattern, $mode, 'externallink');
|
|
}
|
|
}
|
|
|
|
/** @inheritdoc */
|
|
public function getSort()
|
|
{
|
|
return 330;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getPatterns()
|
|
{
|
|
return $this->patterns;
|
|
}
|
|
}
|