Exemple #1
0
 /**
  * ソース中のリンクを取得
  * @param $source Wikiソース
  * @return array
  */
 private static function getLinkList($source)
 {
     static $plugin_pattern, $replacement;
     // プラグインを無効化するためのマッチパターンを作成
     if (empty($plugin_pattern) || empty($replacement)) {
         foreach (PluginRenderer::getPluginList() as $plugin => $plugin_value) {
             if ($plugin === 'ref' || $plugin === 'attach' || $plugin === 'attachref') {
                 continue;
             }
             // ただしrefやattachは除外(あまりブロック型で使う人いないけどね)
             $plugin_pattern[] = '/^#' . $plugin . '\\(/i';
             $replacement[] = '#null(';
         }
     }
     $ret = array();
     // 1行づつ置き換え
     foreach ($source as $line) {
         $ret[] = preg_replace($plugin_pattern, $replacement, $line);
     }
     $links = array();
     // プラグインを無効化したソースをレンダリング
     $html = RendererFactory::factory($ret);
     // レンダリングしたソースからリンクを取得
     preg_match_all(self::HTML_URI_MATCH_PATTERN, $html, $links, PREG_PATTERN_ORDER);
     unset($html);
     return array_unique($links[1]);
 }