/** * @throws MWException * @param array $m * @return HTML|string */ public function magicLinkCallback($m) { if (isset($m[1]) && $m[1] !== '') { # Skip anchor return $m[0]; } elseif (isset($m[2]) && $m[2] !== '') { # Skip HTML element return $m[0]; } elseif (isset($m[3]) && $m[3] !== '') { # Free external link return $this->makeFreeExternalLink($m[0], strlen($m[4])); } elseif (isset($m[5]) && $m[5] !== '') { # RFC or PMID if (substr($m[0], 0, 3) === 'RFC') { if (!$this->mOptions->getMagicRFCLinks()) { return $m[0]; } $keyword = 'RFC'; $urlmsg = 'rfcurl'; $cssClass = 'mw-magiclink-rfc'; $id = $m[5]; } elseif (substr($m[0], 0, 4) === 'PMID') { if (!$this->mOptions->getMagicPMIDLinks()) { return $m[0]; } $keyword = 'PMID'; $urlmsg = 'pubmedurl'; $cssClass = 'mw-magiclink-pmid'; $id = $m[5]; } else { throw new MWException(__METHOD__ . ': unrecognised match type "' . substr($m[0], 0, 20) . '"'); } $url = wfMessage($urlmsg, $id)->inContentLanguage()->text(); return Linker::makeExternalLink($url, "{$keyword} {$id}", true, $cssClass, [], $this->mTitle); } elseif (isset($m[6]) && $m[6] !== '' && $this->mOptions->getMagicISBNLinks()) { # ISBN $isbn = $m[6]; $space = self::SPACE_NOT_NL; # non-newline space $isbn = preg_replace("/{$space}/", ' ', $isbn); $num = strtr($isbn, ['-' => '', ' ' => '', 'x' => 'X']); return $this->getLinkRenderer()->makeKnownLink(SpecialPage::getTitleFor('Booksources', $num), "ISBN {$isbn}", ['class' => 'internal mw-magiclink-isbn', 'title' => false]); } else { return $m[0]; } }