| 태그 '소스 코드 하이라이트'에 해당되는 글 1건 |
| 클래식용 소스코드 하이라이트 with geshi |
Tech 07/02/19 15:41 ( Translate this page  )
글 주소 : https://ohyung.net/349
이 패치는 kornuri님의 태터툴즈 플러그인 - Languages To Html 각종 프로그래밍 소스 하이라이팅새창으로띄우기을 보고 클래식에 맞게 변형 하였습니다.
기존의 클래식은 highlight_string 이라는함수로 색상표현을 하였었지만 php만을 하이라이팅 하기 때문에 살짝 바꿔 보았습니다.

하이라이팅 하는데 사용되는 프로그램은 GeSHi - Generic Syntax Highlighter 이며, http://qbnz.com/highlighter/새창으로띄우기 에서 다운로드 가능합니다.
루트 /geshi 디렉토리에 업로드 하신뒤 패치를 진행 하시면 됩니다.


우선적으로 inc_function부분의 autolink를 찾은뒤 아래와 비슷하게 바꿔줍니다.
( 이 방법은 소스코드가 나오는 포스트에서 autolink를 빼는것입니다. -.-; 방법이 없어서 이렇게;;; )
소스 코드 타입 : 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]' 등등 앞부분에 들어있는 공백을 붙여주세요... )
소스 코드 타입 : 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 맨 아래 부분에서 다음과 같이 추가 해주시면 됩니다.
소스 코드 타입 : JScript
$geshi->set_header_type(GESHI_HEADER_NONE);
$geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS, 1);

그러나 복사한뒤 붙여 넣으면 #이 들어가서 별로 좋지가 않네요 ;;;
| 이 포스트에 대한 이용규약 |
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 라이센스 에 따라 이용하실 수 있습니다.
This work is licensed under a Creative Commons Attribution 2.0 Korea LicenseLink in a new window.

| 트랙백 |
트랙백 주소 :: https://ohyung.net/rserver.php?mode=tb&sl=349