[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Parsing/ParserMode/ -> Externallink.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Parsing\ParserMode;
   4  
   5  class 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  }