Что нам понадобиться?
- Последняя сжатая версия библиотеки Code Prettify от Google.
- Одна из тем оформления подсветки синтаксиса.
- Текстовый редактор. Я и большинство предпочитают Notepad++
Обратите внимание
- Если вы не планируете использовать inline подсветку синтаксиса в своем проекте, то следует опустить пункты под номерами три и четыре, а со второго проделать лишь первое действие. Также, дабы не засорять ваш проект лишним кодом, из первой строки пункта пять нужно изъять код:
elseif (strpos ( $tpl->result['content'], "<code class=\"prettyprint\">" ) !== false) { $js_array[] = "engine/classes/highlight/prettify.js"; $ajax .= <<<HTML $(function(){prettyPrint();}); HTML; }
Пошаговая инструкция
1. Распакованные файлы из архива с библиотекой Code Prettify необходимо загрузить в директорию /engine/classes/highlight/
2. Открыть /engine/classes/parse.class.php и заменить код:
$source = preg_replace( "#\[code\](.+?)\[/code\]#is", "<pre><code>\\1</code></pre>", $source );
на:
$source = preg_replace( "#\[code\](.+?)\[/code\]#is", "<pre class=\"prettyprint linenums\">\\1</pre>", $source ); $source = preg_replace( "#\[code-inline\](.+?)\[/code-inline\]#is", "<code class=\"prettyprint\">\\1</code>", $source );
далее найти строку:
$source = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->code_tag( '\\1' )", $source );
и после нее добавить следующую:
$source = preg_replace( "#\[code-inline\](.+?)\[/code-inline\]#ies", "\$this->code_tag_inline( '\\1' )", $source );
далее найти код:
if ( !$this->allow_code ) { $source = preg_replace( "#<pre><code>(.+?)</code></pre>#ies", "\$this->clear_p_tag('\\1')", $source ); }
и заменить его на:
if ( !$this->allow_code ) { $source = preg_replace( "#<pre class=\"prettyprint linenums\">(.+?)</pre>#is", "\$this->clear_p_tag('\\1')", $source ); $source = preg_replace( "#<code class=\"prettyprint\">(.+?)</code>#is", "\$this->clear_p_tag('\\1')", $source ); }
далее найти строки:
$txt = preg_replace( "#<!--code1-->(.+?)<!--ecode1-->#", '[code]', $txt ); $txt = preg_replace( "#<!--code2-->(.+?)<!--ecode2-->#", '[/code]', $txt );
и заменить их на:
$txt = preg_replace( "#<!--code1-->(.+?)<!--ecode1-->#", '[code]', $txt ); $txt = preg_replace( "#<!--code2-->(.+?)<!--ecode2-->#", '[/code]', $txt ); $txt = preg_replace( "#<!--code3-->(.+?)<!--ecode3-->#", '[code-inline]', $txt ); $txt = preg_replace( "#<!--code4-->(.+?)<!--ecode4-->#", '[/code-inline]', $txt );
далее найти строки:
$txt = str_replace( "<pre><code>", '[code]', $txt ); $txt = str_replace( "</code></pre>", '[/code]', $txt );
и заменить их на:
$txt = str_replace( "<pre class=\"prettyprint linenums\">", '[code]', $txt ); $txt = str_replace( "</pre>", '[/code]', $txt ); $txt = str_replace( "<code class=\"prettyprint\">", '[code-inline]', $txt ); $txt = str_replace( "</code>", '[/code-inline]', $txt );
затем найти строку:
if( !$wysiwig ) $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->decode_code('\\1', '{$use_html}')", $txt );
и после нее добавить:
if( !$wysiwig ) $txt = preg_replace( "#\[code-inline\](.+?)\[/code-inline\]#ies", "\$this->decode_code_inline('\\1', '{$use_html}')", $txt );
далее найти функцию:
function code_tag($txt = "") { if( $txt == "" ) { return; } $this->code_count ++; if ( $this->edit_mode ) { $txt = str_replace( "&", "&", $txt ); $txt = str_replace( "'", "'", $txt ); $txt = str_replace( "<", "<", $txt ); $txt = str_replace( ">", ">", $txt ); $txt = str_replace( """, """, $txt ); $txt = str_replace( "\\\"", """, $txt ); $txt = str_replace( ":", ":", $txt ); $txt = str_replace( "[", "[", $txt ); $txt = str_replace( "]", "]", $txt ); $txt = str_replace( "\r", "", $txt ); $txt = str_replace( "\n", " ", $txt ); } $p = "[code]{" . $this->code_count . "}[/code]"; $this->code_text[$p] = "[code]{$txt}[/code]"; return $p; }
и после нее добавить следующую:
function code_tag_inline($txt = "") { if( $txt == "" ) { return; } $this->code_count ++; if ( $this->edit_mode ) { $txt = str_replace( "&", "&", $txt ); $txt = str_replace( "'", "'", $txt ); $txt = str_replace( "<", "<", $txt ); $txt = str_replace( ">", ">", $txt ); $txt = str_replace( """, """, $txt ); $txt = str_replace( "\\\"", """, $txt ); $txt = str_replace( ":", ":", $txt ); $txt = str_replace( "[", "[", $txt ); $txt = str_replace( "]", "]", $txt ); $txt = str_replace( "\r", " ", $txt ); $txt = str_replace( "\n", " ", $txt ); } $p = "[code-inline]{" . $this->code_count . "}[/code-inline]"; $this->code_text[$p] = "[code-inline]{$txt}[/code-inline]"; return $p; }
далее найти функцию:
function decode_code($txt = "", $use_html) { if ( $this->edit_mode ) { $txt = str_replace( "&", "&", $txt ); } if( $use_html ) { $txt = str_replace( "<br />", "\n", $txt ); } return "[code]".$txt."[/code]"; }
и после нее добавить следующую:
function decode_code_inline($txt = "", $use_html) { if ( $this->edit_mode ) { $txt = str_replace( "&", "&", $txt ); } if( $use_html ) { $txt = str_replace( "<br />", "\n", $txt ); } return "[code-inline]".$txt."[/code-inline]"; }
3. Открыть /engine/inc/include/inserttag.php и найти строку:
<div id="b_code" class="editor_button" onclick="simpletag('code')"><img title="$lang[bb_t_code]" src="engine/skins/bbcodes/images/code.gif" width="20" height="25" border="0"></div>
и после нее добавить следующую:
<div id="b_code_inline" class="editor_button" onclick="simpletag('code-inline')"><img title="Исходный код в одну строку" src="engine/skins/bbcodes/images/code.gif" width="20" height="25" border="0"></div>
4. Открыть /engine/modules/bbcode.php и найти строку:
<div id="b_code" class="editor_button" onclick="simpletag('code')"><img title="$lang[bb_t_code]" src="{THEME}/bbcodes/code.gif" width="23" height="25" border="0" alt="" /></div>
и после нее вставить следующую:
<div id="b_code_inline" class="editor_button" onclick="simpletag('code-inline')"><img title="Исходный код в одну строку" src="{THEME}/bbcodes/code.gif" width="23" height="25" border="0" alt="" /></div>
5. Открыть index.php и заменить код:
if (strpos ( $tpl->result['content'], "<pre><code>" ) !== false) { $js_array[] = "engine/classes/highlight/highlight.code.js"; $ajax .= <<<HTML $(function(){ $('pre code').each(function(i, e) {hljs.highlightBlock(e, null)}); }); HTML; }
на:
if (strpos ( $tpl->result['content'], "<pre class=\"prettyprint linenums\">" ) !== false) { $js_array[] = "engine/classes/highlight/prettify.js"; $ajax .= <<<HTML $(function(){prettyPrint();}); HTML; } elseif (strpos ( $tpl->result['content'], "<code class=\"prettyprint\">" ) !== false) { $js_array[] = "engine/classes/highlight/prettify.js"; $ajax .= <<<HTML $(function(){prettyPrint();}); HTML; }
6. Для тоого чтобы изменения вступили в силу необходимл сделать перестроение публикаций в админцентре.