Я использую шаблон Bootstrap для ApiGen, и я хочу заменить представления исходного кода по умолчанию на Highlight.js.
Это требует от меня, чтобы удалить существующие spans
производится ApiGen с использованием Nette replaceRE
фильтр.
Исходный код выглядит так:
<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"><?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>
В итоге оказалось, что highlight.js был неподходящим инструментом для этого, поскольку ApiGen требует номера строк для исходного кода, а hljs не поддерживает номера строк.
Туз редактор был билет.
Других решений пока нет …