Что нам понадобиться?


- Последняя сжатая версия библиотеки 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( "&", "&amp;", $txt );
			$txt = str_replace( "'", "&#39;", $txt );
			$txt = str_replace( "<", "&lt;", $txt );
			$txt = str_replace( ">", "&gt;", $txt );
			$txt = str_replace( "&quot;", "&#34;", $txt );
			$txt = str_replace( "\\\"", "&#34;", $txt );
			$txt = str_replace( ":", "&#58;", $txt );
			$txt = str_replace( "[", "&#91;", $txt );
			$txt = str_replace( "]", "&#93;", $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( "&", "&amp;", $txt );
			$txt = str_replace( "'", "&#39;", $txt );
			$txt = str_replace( "<", "&lt;", $txt );
			$txt = str_replace( ">", "&gt;", $txt );
			$txt = str_replace( "&quot;", "&#34;", $txt );
			$txt = str_replace( "\\\"", "&#34;", $txt );
			$txt = str_replace( ":", "&#58;", $txt );
			$txt = str_replace( "[", "&#91;", $txt );
			$txt = str_replace( "]", "&#93;", $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( "&amp;", "&", $txt );
		}

		if( $use_html ) {
			$txt = str_replace( "&lt;br /&gt;", "\n", $txt );
		}

		return "[code]".$txt."[/code]";
	}

и после нее добавить следующую:

	function decode_code_inline($txt = "", $use_html) {

		if ( $this->edit_mode )	{

			$txt = str_replace( "&amp;", "&", $txt );
		}

		if( $use_html ) {
			$txt = str_replace( "&lt;br /&gt;", "\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. Для тоого чтобы изменения вступили в силу необходимл сделать перестроение публикаций в админцентре.