2016-01-01 22 views
1

我使用的是引導模板ApiGen,我想以取代Highlight.js默認的源代碼視圖。正則表達式替換•奈特和拿鐵在ApiGen

這需要我使用•奈特replaceRE濾波器去除由ApiGen產生的現有spans

原始代碼看起來像這樣:

<pre id="source"> 
    <code>{$source|replaceRE:'~<span class="line">(\s*)(\d+):(\s*)</span>([^\\n]*(?:\\n|$))~','<span id="$2" class="l"> 
     <a href="#$2">$1$2$3</a>$4</span>'|noescape} 
    </code> 
</pre> 

變量$4包含了需要更換,看上去像這樣的跨度:

<span class="xlang">&lt;?php</span> 
<span class="php-comment">/**</span> 
<span class="php-comment"> * app/Base/Controller.php</span> 
<span class="php-comment"> *</span> 
<span class="php-comment"> * Local base controller for application.</span> 
<span class="php-comment"> */</span> 
<span class="php-keyword1">use</span> Illuminate\Foundation\Bus\DispatchesJobs; 

等。

顯然,代碼需要保持不變,但跨度:

<span class="whatever">leave code alone</span> 

需要被移除。

我嘗試了嵌套replaceRE但ApiGen瞭解析錯誤。

<pre id="source"> 
    <code>{$source|replaceRE:'~<span class="line">(\s*)(\d+):(\s*)</span>([^\\n]*(?:\\n|$))~','<span id="$2" class="l"> 
     <a href="#$2">$1$2$3</a>{$4|replaceRE:'~<span .*?class="(.*?)">~',''|noescape}</span>'|noescape} 
    </code> 
</pre> 
+0

看起來爲[SimpleXML的]的作業(http://php.net/manual/en/book.simplexml.php)和[XPath的](http://php.net/manual/en/simplexmlelement.xpath .PHP) – Jan

+0

這是行不通的,因爲'replaceRE'本質上只是調用'preg_replace',結果不會被解析(就像'的{$源}'不會再次解析)的結果。您可以使用兩種不同的過濾器,如'replaceRE:'a','b'| replaceRE:'c','d''。或者,您可以禁用源代碼高亮顯示,但AFAIK,沒有配置選項,因此您必須編輯ApiGen本身。 –

+0

是的,我最終創建了我自己的ApiGen版本。它看起來並不像它已經被維護了,所以我可以把它放在我的口袋裏,用於我們的房屋建造。謝謝您的幫助。 –

回答

0

它結束了那highlight.js是這個錯誤的工具,因爲ApiGen需要行號的源代碼和hljs不支持行號。

王牌編輯是票。