Code Colorizer ¶
MoinMoin에 파이선용 코드 컬러라이저는 기본으로 들어있다. 그러나 자바나 C++용 코드 컬러라이저는 기본이 아니다. 그래서 ParserMarket에 가서 자바와 C++용 파서를 받아왔다. 그런데 이럴수가 코드블럭문안에서 파서 사용이 안되는것이다.
{{{~cpp {{{~cpp !#java ... }}} 그런데 MoinMoin:ParserMarket 에 [http://bbs.rhaon.co.kr/mywiki/moin.cgi/ProgrammingTips_2fCStringFormat Example]이라 된 곳에서는 잘 사용하고 있는것이다...[[BR]] 하지만 어디에도 어떻게 저렇게 할수 있는지 안나오니, 이렇게 불친잘할수가! --;;(단순히 본인의 서칭능력 부족일 가능성도 다분하다..)[[BR]] 그리하여 그 방법을 연구한 결과가 이문서의 내용이다..;; == 준비물 == * 일단 파서. 다음 3개의 파이선 파일을 MoinMoin/parser 디렉터리에 생성한다. * [http://twistedmatrix.com/users/jh.twistd/moin/moin.cgi/parser_2fbase_2epy parser/base.py] [http://twistedmatrix.com/users/jh.twistd/moin/moin.cgi/parser_2fcplusplus_2epy parser/cplusplus.py] [http://twistedmatrix.com/users/jh.twistd/moin/moin.cgi/parser_2fjava_2epy parser/java.py] * 다음 2개의 파일을 MoinMoin/processor 디렉터리에 생성한다. (본인은 이름의 통일감을 위해 Colorize.py 도 PythonColorize.py 로 이름을 바꾸었다.) * CppColorize.py {{{~cpp """ MoinMoin - Processor for Syntax Highlighting Copyright (c) 2002 by J?gen Hermann <jh@web.de> All rights reserved, see COPYING for details. $Id: Colorize.py,v 1.3 2002/04/17 19:24:58 jhermann Exp $ """ import string, sys, cStringIO from MoinMoin.parser import cplusplus def process(request, formatter, lines): if not formatter.in_pre: sys.stdout.write(formatter.preformatted(1)) if string.strip(lines[0]) == "#!cplusplus": del lines[0] buff = cStringIO.StringIO() colorizer = cplusplus.Parser(string.join(lines, '\n'), request, out = buff) colorizer.format(formatter, {}) sys.stdout.write(formatter.rawHTML(buff.getvalue())) sys.stdout.write(formatter.preformatted(0)) }}} * JavaColorize.py {{{~cpp """ MoinMoin - Processor for Syntax Highlighting Copyright (c) 2002 by J?gen Hermann <jh@web.de> All rights reserved, see COPYING for details. $Id: Colorize.py,v 1.3 2002/04/17 19:24:58 jhermann Exp $ """ import string, sys, cStringIO from MoinMoin.parser import java def process(request, formatter, lines): if not formatter.in_pre: sys.stdout.write(formatter.preformatted(1)) if string.strip(lines[0]) == "#!java": del lines[0] buff = cStringIO.StringIO() colorizer = java.Parser(string.join(lines, '\n'), request, out = buff) colorizer.format(formatter, {}) sys.stdout.write(formatter.rawHTML(buff.getvalue())) sys.stdout.write(formatter.preformatted(0)) }}} == 최종 과제 == 이제 MoinMoin/parser 에 있는 wiki.py 를 수정해보자.[[BR]] 다음과 같은 부분을 찾아서... {{{~cpp if self.in_pre: if self.in_pre == 2: # processing mode endpos = string.find(line, "}} }") # 옆에 원래는 뛰어쓰기 안함 if endpos == -1: self.colorize_lines.append(line) continue self.processor(self.request, self.formatter, self.colorize_lines) del self.colorize_lines self.in_pre = 0 # send rest of line through regex machinery line = line[endpos+3:] elif string.strip(line)[:2] == "#!" and string.find(line, 'python') > 0: from MoinMoin.processor.Colorize import process self.processor = process self.in_pre = 2 self.colorize_lines = [line] continue }}} 이렇게 바꾸자! {{{~cpp if self.in_pre: if self.in_pre == 2: # processing mode endpos = string.find(line, "}} }") # 옆에 원래는 뛰어쓰기 안함 if endpos == -1: self.colorize_lines.append(line) continue self.processor(self.request, self.formatter, self.colorize_lines) del self.colorize_lines self.in_pre = 0 # send rest of line through regex machinery line = line[endpos+3:] elif string.strip(line)[:2] == "#!" and string.find(line, 'cplusplus') > 0: from MoinMoin.processor.CppColorize import process self.processor = process self.in_pre = 2 self.colorize_lines = [line] continue elif string.strip(line)[:2] == "#!" and string.find(line, 'java') > 0: from MoinMoin.processor.JavaColorize import process self.processor = process self.in_pre = 2 self.colorize_lines = [line] continue elif string.strip(line)[:2] == "#!" and string.find(line, 'python') > 0: from MoinMoin.processor.PythonColorize import process self.processor = process self.in_pre = 2 self.colorize_lines = [line] continue }}} ---- ["위키분류"], ["lostship"]