이 패치는
kornuri님의 태터툴즈 플러그인 - Languages To Html 각종 프로그래밍 소스 하이라이팅을 보고 클래식에 맞게 변형 하였습니다.
기존의 클래식은 highlight_string 이라는함수로 색상표현을 하였었지만 php만을 하이라이팅 하기 때문에 살짝 바꿔 보았습니다.
하이라이팅 하는데 사용되는 프로그램은 GeSHi - Generic Syntax Highlighter 이며,
http://qbnz.com/highlighter/ 에서 다운로드 가능합니다.
루트 /geshi 디렉토리에 업로드 하신뒤 패치를 진행 하시면 됩니다.
우선적으로 inc_function부분의 autolink를 찾은뒤 아래와 비슷하게 바꿔줍니다.
( 이 방법은 소스코드가 나오는 포스트에서 autolink를 빼는것입니다. -.-; 방법이 없어서 이렇게;;; )
Code Type : Jscript
function autolink($str) {
while (strpos($str,"[ CODE")) {return $str;break;}
$pattern = "/([^\/\"\'\=\>\?\|])(mms|http|HTTP|ftp|FTP|telnet|TELNET)\:\/\/(.[^ \r\n\<\|\"\'\)]+)/";
$str = preg_replace($pattern, "\\1\\2://\\3", $str);
return $str;
}
그뒤 setmoreless 부분을 찾으시고 아래와 같이 바꿔줍니다.
( '[ CODE , [ /CODE]' 등등 앞부분에 들어있는 공백을 붙여주세요... )
Code Type : JScript
function set_moreless($str, $pno){
unset($n1, $n2, $cval);
include_once('geshi/geshi.php');
define(OPEN_CODE,'[ CODE type=');
define(CLOSE_CODE,'[ /CODE]');
define(DEFAULT_CODE,"php");
$search_usr = array("[ code]","[ code type=","[ CODE]","[ /code]");
$replace_usr = array(OPEN_CODE.DEFAULT_CODE."]",OPEN_CODE,OPEN_CODE.DEFAULT_CODE."]","[ /CODE]");
$str = str_replace($search_usr,$replace_usr,$str);
while ($n1 = strpos($str,OPEN_CODE)) {
$n2 = strpos($str, "[ /CODE]");
if (!$n2 || $n1 > $n2) break;
$lang_start = $n1+strlen(OPEN_CODE);
$lang_end = strpos($str,"]",$lang_start);
$languages = substr($str,$lang_start,$lang_end-$lang_start);
$code_start = $lang_end+1;
$source = substr($str, $code_start, $n2-$code_start);
$source = str_replace("", "", $source);
$source = str_replace("", "", $source);
$search = array ("'&(quot|#34);'i","'&(amp|#38);'i","'&(lt|#60);'i","'&(gt|#62);'i","'&(nbsp|#160);'i",
"'&(iexcl|#161);'i","'&(cent|#162);'i","'&(pound|#163);'i","'&(copy|#169);'i","'(\d+);'e");
$replace = array ("\"","&","<",">"," ",
chr(161),chr(162),chr(163),chr(169),"chr(\\1)");
$source = preg_replace($search, $replace, $source);
$code = geshi_highlight($source, $languages, $path, true);
$cval = "소스 코드 타입 : ".$languages."";
$cval .= $code;
$str = substr($str, 0, $n1)."".$cval."
".substr($str, $n2+7);
$next_position = 0;
}
$count = 0;
geshi/geshi폴더를 보면 확장자별로 지정된 파일들이 있습니다.쓸모 없는건 지워도 될듯 싶네요.
저의 경우엔 asm, c , cpp , css , dos, fortran, html, javascript, matlab, mysql, perl, php , qbasic, sql, text, vb, vhdl, xml 만 남겨두고 다 지웠습니다.
사용방법은 글쓰기 창에서 [ CODE type=코드타입] ~ [ / CODE] 입니다.
소스에 줄 번호 나오게 하려면 geshi.php 맨 아래 부분에서 다음과 같이 추가 해주시면 됩니다.
Code Type : JScript
$geshi->set_header_type(GESHI_HEADER_NONE);
$geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS, 1);
그러나 복사한뒤 붙여 넣으면 #이 들어가서 별로 좋지가 않네요 ;;;