2013-07-05 39 views
1

我在鉤子中爲呈現標記處理呈現wikitext時遇到了問題。Mediawiki解析器和recursiveTagParse

public static function onTagRender($input, array $args, $parser, $frame) { 
... 
$text = $parser->recursiveTagParse($sometext, $frame); 
... 
return $text; 
} 

如果$ sometext包含例如

"Example from page [[XYZ]]" 

那麼我期待回到$文本應當包含

"Example from page <a href="/wiki/XYZ" title="XYZ">XYZ</a>" 

但我只得到

"Example from page <!--LINK 0:0-->" 

我也$ parser-> replaceInternalLinks(嘗試),但同樣的結果。我忽視了什麼?

回答

0

如果有人遇到同樣的問題,嘗試調用replaceLinkHoldersrecursiveTagParse後。 (我沒有同樣的問題,所以我沒有測試)

因此,在OP的代碼片段,這將是:根據我的理解

public static function onTagRender($input, array $args, $parser, $frame) { 
... 
$text = $parser->recursiveTagParse($sometext, $frame); 
$text = $parser->replaceLinkHolders($text); 
... 
return $text; 
} 

說明:

實際上,通常的parse方法調用了internalParse方法 - 完成大部分工作 - 然後執行其他一些操作。另一方面,recursiveTagParse幾乎只會呼叫internalParse,所以它不會執行parse中的其他內容。
問題是,鏈接被解析以兩個步驟:

  1. 鏈接是第一萃取到LinkHolderArray和它們與在文本<!--LINK $ns:$key-->替換。
    (這是由replaceInternalLinks完成,由internalParse調用,所以這很好。)
  2. 然後<!--LINK $ns:$key-->標記被解析成HTML鏈接。
    (這是由通過replaceLinkHolders完成recursiveTagParse其通過parse調用,而不是由internalParse,因此不。)