Подсветка кода в DLE
    28-02-2011, 14:40
    
    
    
    Комментарии (29)
    Просмотры (12036)
  
   Многие задают вопросы - как подсветить код на странице. Раньше я использовал Geshi - подсветку средствами PHP, но это увеличивало нагрузку на сервер, и размер БД. Сегодня я расскажу о том, как сделать подсветку кода в тэгах code на сайте DLE через Java через SyntaxHighlighter.
 Многие задают вопросы - как подсветить код на странице. Раньше я использовал Geshi - подсветку средствами PHP, но это увеличивало нагрузку на сервер, и размер БД. Сегодня я расскажу о том, как сделать подсветку кода в тэгах code на сайте DLE через Java через SyntaxHighlighter.Чтобы из
print('Я ГеНиЙ');получилось
print('Я ГеНиЙ');Итак начинаем:
На момент написания статьи вышла SyntaxHighlighter версии 3.0.83. Её и будем использовать.
-  Нам понадобится исходные файлы ява скрипта:
- Начинаем установку.
 Для начала зальём все это дело в engine\classes\sh\
 Данная инструкция только для информации, т.к. парсер вырезает код некоторый, текст был искажен, следовательно работать он не будет.
 Правильный код представлен в архиве
 Теперь правим файлы- engine\classes\sparse.class.php
 Ищем:if( $this->allow_code ) 
 $source = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->code_tag( '\\1' )", $source );
 меняем наif( $this->allow_code ) {
 $source = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->code_tag( '\\1' )", $source );
 $source = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#ies", "\$this->code_tag( '\\2' , '\\1' )", $source );
 }
 Ищем$source = preg_replace( "#\[code\](.+?)\[/code\]#is", "<!--code1--><div class=\"scriptcode\"><!--ecode1-->\\1<!--code2--></div><!--ecode2-->", $source ); 
 Ниже вставляем$source = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#is", '<pre class="brush:\\1">\\2</pre>', $source ); 
 Ищем$txt = preg_replace( "#<!--code2-->(.+?)<!--ecode2-->#", '[/codе]', $txt ); 
 Ниже вставляем$txt = preg_replace( "#<pre class=\"brush:(.+?)\">(.+?)</pre>#", '[code=\\1]\\2[/codе]', $txt ); 
 Ищемif( $wysiwig != "yes" ) $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->decode_code('\\1', '{$use_html}')", $txt );
 Меняем наif( $wysiwig != "yes" ) {
 $txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->decode_code('\\1', '{$use_html}')", $txt );
 $txt = preg_replace( "#\[code=(.+?)\](.+?)\[/code\]#ies", "\$this->decode_code('\\2', '{$use_html}', '\\1')", $txt );
 }
 Ищемfunction code_tag($txt = "") {
 Меняем наfunction code_tag($txt = "", $type = "") {
 Ищем$p = "[code]{2}
 Меняем наif ($type=="") {
 $p = "[code]{3}
 Ищем:function decode_code($txt = "", $use_html) {
 Меняем наfunction decode_code($txt = "", $use_html, $type = "") {
 Ищем:return "[code]{4}
 Меняем на:if ($type=="") 
 return "[code]{5}
- templates\ВАШ ШАБЛОН\main.tpl
 В блок HEAD
 Вставляем<link type="text/css" rel="stylesheet" href="/engine/classes/sh/SyntaxHighlighter.css"/> 
 <script type="text/javascript" src="/engine/classes/sh/shCore.js"></script>
 <script type="text/javascript" src="/engine/classes/sh/shAutoloader.js"></script>
 Ищем</body> 
 </html>
 выше вставляем<script language='javascript'> 
 function path() {
 var args = arguments,
 result = [];
 for(var i = 0; i < args.length; i++)
 result.push(args[i].replace('@', '/engine/classes/sh/'));
 return result
 };
 SyntaxHighlighter.autoloader.apply(null, path(
 'applescript @shBrushAppleScript.js',
 'actionscript3 as3 @shBrushAS3.js',
 'bash shell @shBrushBash.js',
 'coldfusion cf @shBrushColdFusion.js',
 'cpp c @shBrushCpp.js',
 'c# c-sharp csharp @shBrushCSharp.js',
 'css @shBrushCss.js',
 'delphi pascal @shBrushDelphi.js',
 'diff patch pas @shBrushDiff.js',
 'erl erlang @shBrushErlang.js',
 'groovy @shBrushGroovy.js',
 'java @shBrushJava.js',
 'jfx javafx @shBrushJavaFX.js',
 'js jscript javascript @shBrushJScript.js',
 'perl pl @shBrushPerl.js',
 'php @shBrushPhp.js',
 'text plain @shBrushPlain.js',
 'py python @shBrushPython.js',
 'powershell ps posh @shBrushPowerShell.js',
 'ruby rails ror rb @shBrushRuby.js',
 'sass scss @shBrushSass.js',
 'scala @shBrushScala.js',
 'sql @shBrushSql.js',
 'vb vbnet @shBrushVb.js',
 'xml xhtml xslt html @shBrushXml.js'
 ));
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.config.stripBrs = false;
 SyntaxHighlighter.config.toolbar = false;
 SyntaxHighlighter.all();
 </script>
 
- engine\classes\sparse.class.php
-  теперь нам можно использовать 
 как [codе] тут код [/codе],
 так и [codе=php] тут код [/codе]
Все протестировано на DLE 9.2



