En~MoniWiki › JmolPlugin › CodeColoringProcessor
코드 블럭의 문법을 보기좋게 색을 덧씌워주는 프로세서
모니위키에는 여러가지 코드 colorizer/highlighter가 있다.
php문법을 php에 내장된 hightlighter에 의해 색을 입혀주는 PHP colorizer를 비롯하여, vim을 이용한 VimProcessor, enscript를 이용한 EnscriptProcessor, GeshiProcessor등등.
이러한 여러 colorizer를 기본 Code highlighter로 사용하는 방법을 모니위키 1.1.3 (CVS)부터 제공한다.
기본 문법 컬러링 프로세서로 세팅하기 ¶
모니위키는 기본적으로 vim을 컬러링 프로세서로 세팅되어있다. config.php.default를 참조하라.
<?php
$myprocessors=array('syntax'=>'vim','sh'=>'vim','csh'=>'vim',
'c'=>'vim','cpp'=>'vim','perl'=>'vim','lisp'=>'vim',
'asm'=>'vim','masm'=>'vim','make'=>'vim',
'java'=>'vim','ruby'=>'vim','haskell'=>'vim',
'awk'=>'vim','nosyntax'=>'vim','make'=>'vim',
);
$myprocessors=array('syntax'=>'vim','sh'=>'vim','csh'=>'vim',
'c'=>'vim','cpp'=>'vim','perl'=>'vim','lisp'=>'vim',
'asm'=>'vim','masm'=>'vim','make'=>'vim',
'java'=>'vim','ruby'=>'vim','haskell'=>'vim',
'awk'=>'vim','nosyntax'=>'vim','make'=>'vim',
);
기본으로 내장된 php 프로세서를 쓰면 다음과 같이 된다.
<?php
$myprocessors=array('syntax'=>'vim','sh'=>'vim','csh'=>'vim',
'c'=>'vim','cpp'=>'vim','perl'=>'vim','lisp'=>'vim',
'asm'=>'vim','masm'=>'vim','make'=>'vim',
'java'=>'vim','ruby'=>'vim','haskell'=>'vim',
'awk'=>'vim','nosyntax'=>'vim','make'=>'vim',
);
예를 들어 java 컬러링 프로세서를 enscript로 변경하고 싶다면, 'java'=>'enscript'라는 항목을 넣어주면 된다.
CodeColoringProcessor 만들기 ¶
위의 예에서 config.php에서 $myprocessor라는 환경 변수를 세팅하였는데,
$myprocessor에 'foo'=>'bar'라는 항목이 들어있다면, foo라는 프로세서를 호출할 경우 foo대신 bar를 호출하게끔 하는 역할을 한다. 이것을 이용하면, 전혀 있지도 않은 프로세서를 다른 프로세서로 alias하는 기능도 덩달아 제공하게 된다.
이것을 응용하여 컬러링 프로세서를 만들때 호출된 프로세서 이름을 분석하여서 그것에 대응하는 컬러링을 하게 되는 것이다.
예를 들자면, vim 프로세서를 사용하려면 #!vim cpp라고 해주어야 한다. 그러면 그 내용이 vim 프로세서의 인자로 넘어오게 될 때 그 첫줄은#!vim cpp이 된다. 이것을 파싱해서 vim프로세서는 이것이 cpp 문법이라고 인식하게 된다.
그런데 $myprocessor에 'cpp'=>'vim'이라고 넣어주게 되면 cpp라는 존재하지 않는 프로세서를 호출하는 대신에 vim프로세서를 호출하게 된다. 그러면 #!vim cpp라고 하는 대신에 #!cpp라고 하게 된다는 뜻이다. vim 프로세서가 호출되면 인자로 넘겨받은 내용의 최 상단은 #!vim cpp가 아니라 이제는 #!cpp이 된다.
컬러일 프로세서가 해야 할 일은 이 첫번째 인자를 인식하게 하는 일이다. (대부분의 ProcessorPlugin은 이 첫번째 줄 인자를 무시하고 버린다.)
따라서, 구 버전의 컬러링 프로세서가 있다면 프로세서 플러그인 소스 상단 부분에 다음과 같이 고치면 CodeColoringProcessr식 처리방식을 쓸 수 있다.
예) vim 프로세서의 경우
<?php
function processor_vim(....)
...
$line='';
if ($value[0]=='#' and $value[1]=='!')
list($line,$value)=explode("\n",$value,2);
# 대부분의 프로세서는 대개 첫줄 라인을 무시하고 버린다.
# get parameters
# vim이나 enscript 같은 프로세서는 첫줄에서 인수를 파싱처리 한다.
if ($line) {
$line=substr($line,2); # 원래는 #!vim python처럼 들어와야 할것이다.
$tag = strtok($line,' '); # 공백 앞의 vim은 tag
$type = strtok(' '); # 공백 뒤에 들어오는 것은 python이 될 것이다.
$extra = strtok(''); # 그리고 나머지 라인은 기타 옵션 인수
if ($tag != 'vim') { # 그런데 #!vim python이라고 들어오지 않았다면, #!python으로 들어왔다면
$extra = $type; # 두번째 type 인자는 옵션 인수로,
$type = $tag; # tag인 python이 type가 될 것이다.
}
}
...








